From 059bf86ddfaf296e8131f43f5c2dcb7d63e38a29 Mon Sep 17 00:00:00 2001 From: apio Date: Sat, 24 Sep 2022 23:18:33 +0200 Subject: [PATCH] Scheduler: use kmalloc and kfree --- kernel/src/thread/Scheduler.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/kernel/src/thread/Scheduler.cpp b/kernel/src/thread/Scheduler.cpp index 8b0eae09..d3a046c4 100644 --- a/kernel/src/thread/Scheduler.cpp +++ b/kernel/src/thread/Scheduler.cpp @@ -7,6 +7,7 @@ #include "memory/MemoryManager.h" #include "memory/VMM.h" #include "misc/hang.h" +#include "std/stdlib.h" #include "std/string.h" #include "thread/PIT.h" #include "thread/Task.h" @@ -42,7 +43,7 @@ void Scheduler::init() idle_task.task_sleep = 1000; idle_task.state = idle_task.Idle; - base_task = (Task*)MemoryManager::get_page(); + base_task = (Task*)kmalloc(sizeof(Task)); memset(base_task, 0, sizeof(Task)); end_task = base_task; sched_current_task = base_task; @@ -59,8 +60,8 @@ void Scheduler::init() void Scheduler::add_kernel_task(void (*task)(void)) { - Task* new_task = (Task*)MemoryManager::get_page(); // FIXME: allocate memory the size of Task, not 4 KB for - // each task (YES, I know, I need malloc) + Task* new_task = (Task*)kmalloc(sizeof(Task)); + ASSERT(new_task); memset(new_task, 0, sizeof(Task)); new_task->id = free_tid++; new_task->regs.rip = (uint64_t)task; @@ -85,8 +86,8 @@ void Scheduler::add_kernel_task(void (*task)(void)) void Scheduler::add_user_task(void* task) { - Task* new_task = - (Task*)MemoryManager::get_page(); // FIXME: allocate memory the size of Task, not 4 KB for each task + Task* new_task = (Task*)kmalloc(sizeof(Task)); + ASSERT(new_task); new_task->id = free_tid++; new_task->regs.rip = (uint64_t)task; new_task->allocated_stack = @@ -115,7 +116,7 @@ void Scheduler::reap_task(Task* task) Task* exiting_task = task; kinfoln("reaping task %ld", exiting_task->id); if (exiting_task->allocated_stack) MemoryManager::release_pages((void*)exiting_task->allocated_stack, 4); - MemoryManager::release_page((void*)exiting_task); + kfree((void*)exiting_task); } void Scheduler::task_exit(Context* context)