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 reap_tasks();
|
||||||
|
|
||||||
void reset_task(Task* task, ELFImage* new_image);
|
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;
|
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,
|
||||||
|
Loading…
Reference in New Issue
Block a user