#pragma once #include "list.h" #include "memory.h" #include "types.h" #include extern struct task *current_task; enum status { ZOMBIE, THREAD, RUN }; enum owner { OWNER_KERNEL, OWNER_USER }; #define STACK_SIZE PAGE_SIZE * 4 struct task { u32 *esp; u32 *esp0; u32 *cr3; // physical u32 *heap; // virtual u32 *eip; u16 pid; u8 status; u8 uid; struct task *daddy; struct task *child; struct list **signals; struct task *next; struct task *prev; }; void scheduler(void); void switch_to_task(struct task *next_task); void exec_fn(void (*fn)(void)); i8 create_kernel_task(void);