Scheduler: add an append_task() function

This commit is contained in:
apio 2022-10-17 17:14:22 +02:00
parent c2fa4f380d
commit 250db2c90f
2 changed files with 25 additions and 15 deletions

View File

@ -27,4 +27,6 @@ namespace Scheduler
void reap_tasks(); void reap_tasks();
void reset_task(Task* task, ELFImage* new_image); void reset_task(Task* task, ELFImage* new_image);
void append_task(Task* task);
} }

View File

@ -33,6 +33,26 @@ extern "C" void idle_task_function();
static uint64_t frequency; 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() void Scheduler::init()
{ {
memset(&idle_task, 0, sizeof(Task)); 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_sleep = 0;
new_task->task_time = 0; new_task->task_time = 0;
new_task->cpu_time = 0; new_task->cpu_time = 0;
end_task->next_task = new_task; append_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;
new_task->state = new_task->Running; new_task->state = new_task->Running;
task_num++; task_num++;
kinfoln("Adding kernel task: starts at %lx, tid %ld, stack at %lx, total tasks: %ld", new_task->regs.rip, 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_sleep = 0;
new_task->task_time = 0; new_task->task_time = 0;
new_task->cpu_time = 0; new_task->cpu_time = 0;
end_task->next_task = new_task; append_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;
task_num++; task_num++;
return new_task; return new_task;
} }
@ -152,11 +164,7 @@ long Scheduler::load_user_task(const char* filename)
new_task->task_sleep = 0; new_task->task_sleep = 0;
new_task->task_time = 0; new_task->task_time = 0;
new_task->cpu_time = 0; new_task->cpu_time = 0;
end_task->next_task = new_task; append_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;
new_task->state = new_task->Running; new_task->state = new_task->Running;
task_num++; task_num++;
kinfoln("Adding user task: loaded at %lx, tid %ld, stack at %lx, total tasks: %ld", new_task->regs.rip, kinfoln("Adding user task: loaded at %lx, tid %ld, stack at %lx, total tasks: %ld", new_task->regs.rip,