#ifndef _NUCLEUS_TASK_H #define _NUCLEUS_TASK_H #include #include #include #include #include typedef struct Task Task; typedef struct TaskQueue TaskQueue; /* Task priorities */ enum Priority { NONE, LOWEST, LOW, NORMAL, HIGH, HIGHEST, }; /* Task states */ enum State { RUNNING, READY, TERMINATED, }; /* Structure for a Task */ struct Task { Object obj; pid_t tid; enum Priority priority; enum State state; uintptr_t esp, ebp, eip; page_dir_t pageDir; Task *next; }; extern ObjectType taskType; extern ObjectType taskQueueType; extern Task *currentTask[]; #define current currentTask[CPUID] void init_tasking(void); void schedule(void); pid_t clone(int flags); void add_to_queue(TaskQueue *queue, Task *task); void remove_from_queue(TaskQueue *queue, Task *task); Task *pop_from_queue(TaskQueue *queue); size_t tasks_in_queue(TaskQueue *queue); #endif