#include <hal/apic.h>
#include <hal/cpu.h>
+#include <lunaix/fs/taskfs.h>
#include <lunaix/mm/cake.h>
#include <lunaix/mm/kalloc.h>
#include <lunaix/mm/pmm.h>
proc->created = clock_systime();
proc->pgid = proc->pid;
proc->fdtable = vzalloc(sizeof(struct v_fdtable));
+ proc->fxstate =
+ vzalloc_dma(512); // FXSAVE需要十六位对齐地址,使用DMA块(128位对齐)
llist_init_head(&proc->mm.regions.head);
llist_init_head(&proc->tasks);
sched_ctx._procs[index] = 0;
llist_delete(&proc->siblings);
+ llist_delete(&proc->grp_member);
+ llist_delete(&proc->tasks);
+ llist_delete(&proc->sleep.sleepers);
+
+ taskfs_invalidate(pid);
+
+ if (proc->cwd) {
+ vfs_unref_dnode(proc->cwd);
+ }
for (size_t i = 0; i < VFS_MAX_FD; i++) {
struct v_fd* fd = proc->fdtable->fds[i];
if (fd)
- vfs_close(fd->file);
+ vfs_pclose(fd->file, pid);
}
vfree(proc->fdtable);
+ vfree_dma(proc->fxstate);
struct mm_region *pos, *n;
llist_for_each(pos, n, &proc->mm.regions.head, head)