BarryServer : Git

All the code for all my projects
// BarryServer : Git / Nucleus / commit / 6217f0db2c8f2513994f4cc773aaa4171a049963 / include / nucleus

// Related

Nucleus

Barry Kernel threads + threads share address space 6217f0d (3 years, 1 month ago)
diff --git a/include/nucleus/cpu.h b/include/nucleus/cpu.h
index cb41a28..60753ef 100644
--- a/include/nucleus/cpu.h
+++ b/include/nucleus/cpu.h
@@ -14,6 +14,7 @@ struct Processor {
 	cpu_t id;
 	uint32_t inCriticalSection;
 	uint32_t critFlags;
+	struct InterruptFrame *frame;
 	Scheduler *scheduler;
 	struct IPIQueue *ipiq;
 };
@@ -86,5 +87,6 @@ void send_ipiq(cpu_t targid, ipiq_func_t func, void *arg, enum IPIQFlag flags);
 
 void set_fs_base(uintptr_t base);
 void set_gs_base(uintptr_t base);
+void set_kernel_stack(uintptr_t top);
 
 #endif
diff --git a/include/nucleus/memory.h b/include/nucleus/memory.h
index 057ff0b..481070c 100644
--- a/include/nucleus/memory.h
+++ b/include/nucleus/memory.h
@@ -66,6 +66,6 @@ void *map_page(Page *page);
 
 int verify_access(const void *addr, size_t len, int prot);
 
-VMRegion *vm_create_stack(void);
+void switch_to_mm(VirtualMemory *vm);
 
 #endif
diff --git a/include/nucleus/task.h b/include/nucleus/task.h
index f7825a8..8c33f55 100644
--- a/include/nucleus/task.h
+++ b/include/nucleus/task.h
@@ -31,21 +31,19 @@ enum State {
 /* Structure for a Task */
 struct Task {
 	Object obj;
-	pid_t tid, tgid;
-	uid_t uid, euid, suid;
-	gid_t gid, egid, sgid;
-	int status;
-	uint32_t inSyscall;
-
 	Scheduler *scheduler;
 	enum Priority priority;
 	enum State state;
 	uintptr_t esi, edi, ebx;
 	uintptr_t esp, ebp, eip;
-	page_dir_t pageDir;
+
+	pid_t tid, tgid;
+	uid_t uid, euid, suid;
+	gid_t gid, egid, sgid;
+	int status;
+	uint32_t inSyscall;
 
 	File *executable;
-	VMRegion *stack;
 	Task *target;
 	ObjectList *wait;
 
@@ -68,6 +66,8 @@ struct Scheduler {
 
 #define current cpu->scheduler->task
 
+#define KERNEL_STACK_SIZE (2 * PAGE_SIZE)
+
 extern ObjectType taskType;
 extern ObjectType schedulerType;
 extern ObjectType signalsType;
@@ -95,10 +95,12 @@ exit_syscall_context(void)
 }
 
 void init_tasking(void);
-void enqueue_task(Task *task);
 void block_task(enum State reason, ObjectList *list);
 void unblock_task(Task *task);
 Task *find_task(pid_t tid);
+void enqueue_task(Task *task);
 void schedule(void);
+Task *create_kthread(void (*func)(void), enum Priority p);
+_Noreturn void terminate(void);
 
 #endif