#ifndef _NUCLEUS_TASK_H #define _NUCLEUS_TASK_H #include #include #include #include #include #include typedef struct Task Task; /* 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, tgid; uid_t uid, euid, suid; gid_t gid, egid, sgid; enum Priority priority; enum State state; uintptr_t esp, ebp, eip; page_dir_t pageDir; /* Namespaces */ FileSystem *fs; Files *files; }; extern ObjectType taskType; extern Task *currentTask[]; #define current currentTask[CPUID] /* Check if super-user */ static inline int super_user(void) { return (current->euid == 0); } void init_tasking(void); void schedule(void); pid_t clone(int flags); #endif