Scheduler: add an append_task() function
This commit is contained in:
parent
c2fa4f380d
commit
250db2c90f
@ -27,4 +27,6 @@ namespace Scheduler
|
||||
void reap_tasks();
|
||||
|
||||
void reset_task(Task* task, ELFImage* new_image);
|
||||
|
||||
void append_task(Task* task);
|
||||
}
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user