From 56cfe9f2be542bcaddf71e0641efadaac43f183e Mon Sep 17 00:00:00 2001 From: 0x35c <> Date: Tue, 4 Nov 2025 12:40:42 +0100 Subject: [PATCH] wip: handle new task creation --- src/kernel.c | 1 + src/memory/memory.c | 2 +- src/multitasking/task.c | 10 +++++++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/kernel.c b/src/kernel.c index b34cb2c..811d9b4 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -46,5 +46,6 @@ void kernel_main(multiboot_info_t *mbd, uint32_t magic) create_kernel_task(); signal(4, bozo); kill(0, 4); + create_task(42); shell_init(); } diff --git a/src/memory/memory.c b/src/memory/memory.c index 1aebc63..94610b1 100644 --- a/src/memory/memory.c +++ b/src/memory/memory.c @@ -13,7 +13,7 @@ struct frame_zone *head; void switch_pd(uint32_t *pd, uint32_t *cr3) { - current_pd = pd; + // current_pd = pd; asm volatile("mov %0, %%cr3" ::"r"(cr3)); } diff --git a/src/multitasking/task.c b/src/multitasking/task.c index d64dbbf..a295df4 100644 --- a/src/multitasking/task.c +++ b/src/multitasking/task.c @@ -34,12 +34,14 @@ struct task *create_task(uint8_t uid) return NULL; } new_task->heap[768] = ((uint32_t)boot_page_table1 - HEAP_END) | 0x03; - memcpy(new_task->heap, current_task->heap, 4096); - switch_pd(new_task->heap, new_task->cr3); + // memcpy(new_task->heap, current_task->heap, 4096); + current_pd = new_task->heap; + // switch_pd(new_task->heap, new_task->cr3); // Allocate new stack on the newly allocated pd new_task->esp0 = alloc_pages(STACK_SIZE, NULL); - switch_pd(current_task->heap, current_task->cr3); + current_pd = kernel_pd; + // switch_pd(current_task->heap, current_task->cr3); if (!new_task->esp0) { vfree(new_task); free_pages(new_task->heap, 4096); @@ -49,6 +51,8 @@ struct task *create_task(uint8_t uid) new_task->next = current_task->next; new_task->prev = current_task; current_task->next = new_task; + if (current_task->prev == current_task) + current_task->prev = new_task; new_task->signals.pending = SIG_IGN;