From 65565dd4a6703e8db92b15daa4b170731a25125a Mon Sep 17 00:00:00 2001 From: Ruslan Isaev Date: Thu, 10 Apr 2025 21:35:15 +0300 Subject: [PATCH] tasking: add loading of a process' page directory before switching --- include/task.h | 2 ++ src/tasking/task.c | 15 ++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/task.h b/include/task.h index f1cec7e..226246c 100644 --- a/include/task.h +++ b/include/task.h @@ -22,6 +22,8 @@ typedef struct Process uintptr_t* stackPointer; // Stack Pointer uint32_t flags; // Status/Flags register struct Process* next; // Pointer to the next task in the list + + uint32_t* page_directory; } Process; Process* task_create(EntryPoint func, void** args, uint32_t arg_count); diff --git a/src/tasking/task.c b/src/tasking/task.c index 22801a5..3ff1b86 100644 --- a/src/tasking/task.c +++ b/src/tasking/task.c @@ -44,6 +44,8 @@ Process* task_create(EntryPoint func, void** args, uint32_t arg_count) *(--p->stackPointer) = 0;//esi *(--p->stackPointer) = 0;//ebx + p->page_directory = kernel_page_directory; + p->next = 0; if(!queue) @@ -84,7 +86,10 @@ void schedule() if(!next) next = queue; if(next != current) + { + loadPageDirectory(next->page_directory); switchProcess(next); + } } void idle() @@ -111,15 +116,15 @@ void jump_usermode2(void); void scheduler_init() { - jump_usermode2(); + //jump_usermode2(); //we create this task two times because in other case it just won't start - //task_create((EntryPoint)&idle, NULL, 0); - //task_create((EntryPoint)&idle, NULL, 0); + task_create((EntryPoint)&idle, NULL, 0); + task_create((EntryPoint)&idle, NULL, 0); void* args1[] = {(void*)42, (void*)"ebalo"}; - //task_create((EntryPoint)&task1, args1, 2); + task_create((EntryPoint)&task1, args1, 2); void* args2[] = {(void*)69, (void*)420}; - //task_create((EntryPoint)&task2, args2, 2); + task_create((EntryPoint)&task2, args2, 2); } extern void test_user_function(void);