Scheduler: use kmalloc and kfree
This commit is contained in:
parent
704a23d0ad
commit
059bf86ddf
@ -7,6 +7,7 @@
|
|||||||
#include "memory/MemoryManager.h"
|
#include "memory/MemoryManager.h"
|
||||||
#include "memory/VMM.h"
|
#include "memory/VMM.h"
|
||||||
#include "misc/hang.h"
|
#include "misc/hang.h"
|
||||||
|
#include "std/stdlib.h"
|
||||||
#include "std/string.h"
|
#include "std/string.h"
|
||||||
#include "thread/PIT.h"
|
#include "thread/PIT.h"
|
||||||
#include "thread/Task.h"
|
#include "thread/Task.h"
|
||||||
@ -42,7 +43,7 @@ void Scheduler::init()
|
|||||||
idle_task.task_sleep = 1000;
|
idle_task.task_sleep = 1000;
|
||||||
idle_task.state = idle_task.Idle;
|
idle_task.state = idle_task.Idle;
|
||||||
|
|
||||||
base_task = (Task*)MemoryManager::get_page();
|
base_task = (Task*)kmalloc(sizeof(Task));
|
||||||
memset(base_task, 0, sizeof(Task));
|
memset(base_task, 0, sizeof(Task));
|
||||||
end_task = base_task;
|
end_task = base_task;
|
||||||
sched_current_task = base_task;
|
sched_current_task = base_task;
|
||||||
@ -59,8 +60,8 @@ void Scheduler::init()
|
|||||||
|
|
||||||
void Scheduler::add_kernel_task(void (*task)(void))
|
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
|
Task* new_task = (Task*)kmalloc(sizeof(Task));
|
||||||
// each task (YES, I know, I need malloc)
|
ASSERT(new_task);
|
||||||
memset(new_task, 0, sizeof(Task));
|
memset(new_task, 0, sizeof(Task));
|
||||||
new_task->id = free_tid++;
|
new_task->id = free_tid++;
|
||||||
new_task->regs.rip = (uint64_t)task;
|
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)
|
void Scheduler::add_user_task(void* task)
|
||||||
{
|
{
|
||||||
Task* new_task =
|
Task* new_task = (Task*)kmalloc(sizeof(Task));
|
||||||
(Task*)MemoryManager::get_page(); // FIXME: allocate memory the size of Task, not 4 KB for each task
|
ASSERT(new_task);
|
||||||
new_task->id = free_tid++;
|
new_task->id = free_tid++;
|
||||||
new_task->regs.rip = (uint64_t)task;
|
new_task->regs.rip = (uint64_t)task;
|
||||||
new_task->allocated_stack =
|
new_task->allocated_stack =
|
||||||
@ -115,7 +116,7 @@ void Scheduler::reap_task(Task* task)
|
|||||||
Task* exiting_task = task;
|
Task* exiting_task = task;
|
||||||
kinfoln("reaping task %ld", exiting_task->id);
|
kinfoln("reaping task %ld", exiting_task->id);
|
||||||
if (exiting_task->allocated_stack) MemoryManager::release_pages((void*)exiting_task->allocated_stack, 4);
|
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)
|
void Scheduler::task_exit(Context* context)
|
||||||
|
Loading…
Reference in New Issue
Block a user