From 250db2c90f2bb18cf7105f8dbab80894a8595c67 Mon Sep 17 00:00:00 2001 From: apio Date: Mon, 17 Oct 2022 17:14:22 +0200 Subject: [PATCH] Scheduler: add an append_task() function --- kernel/include/thread/Scheduler.h | 2 ++ kernel/src/thread/Scheduler.cpp | 38 +++++++++++++++++++------------ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/kernel/include/thread/Scheduler.h b/kernel/include/thread/Scheduler.h index 832dec01..dd5ee1bd 100644 --- a/kernel/include/thread/Scheduler.h +++ b/kernel/include/thread/Scheduler.h @@ -27,4 +27,6 @@ namespace Scheduler void reap_tasks(); void reset_task(Task* task, ELFImage* new_image); + + void append_task(Task* task); } \ No newline at end of file diff --git a/kernel/src/thread/Scheduler.cpp b/kernel/src/thread/Scheduler.cpp index c9d66fdb..b9cc852a 100644 --- a/kernel/src/thread/Scheduler.cpp +++ b/kernel/src/thread/Scheduler.cpp @@ -33,6 +33,26 @@ extern "C" void idle_task_function(); static uint64_t frequency; +void Scheduler::append_task(Task* task) +{ + if (!base_task) + { + ASSERT(!end_task); + base_task = task; + end_task = base_task; + task->next_task = task; + task->prev_task = task; + } + else + { + end_task->next_task = task; + task->prev_task = end_task; + base_task->prev_task = task; + task->next_task = base_task; + end_task = task; + } +} + void Scheduler::init() { memset(&idle_task, 0, sizeof(Task)); @@ -78,11 +98,7 @@ void Scheduler::add_kernel_task(void (*task)(void)) new_task->task_sleep = 0; new_task->task_time = 0; new_task->cpu_time = 0; - end_task->next_task = new_task; - new_task->prev_task = end_task; - base_task->prev_task = new_task; - new_task->next_task = base_task; - end_task = new_task; + append_task(new_task); new_task->state = new_task->Running; task_num++; kinfoln("Adding kernel task: starts at %lx, tid %ld, stack at %lx, total tasks: %ld", new_task->regs.rip, @@ -102,11 +118,7 @@ Task* Scheduler::create_user_task() new_task->task_sleep = 0; new_task->task_time = 0; new_task->cpu_time = 0; - end_task->next_task = new_task; - new_task->prev_task = end_task; - base_task->prev_task = new_task; - new_task->next_task = base_task; - end_task = new_task; + append_task(new_task); task_num++; return new_task; } @@ -152,11 +164,7 @@ long Scheduler::load_user_task(const char* filename) new_task->task_sleep = 0; new_task->task_time = 0; new_task->cpu_time = 0; - end_task->next_task = new_task; - new_task->prev_task = end_task; - base_task->prev_task = new_task; - new_task->next_task = base_task; - end_task = new_task; + append_task(new_task); new_task->state = new_task->Running; task_num++; kinfoln("Adding user task: loaded at %lx, tid %ld, stack at %lx, total tasks: %ld", new_task->regs.rip,