Mercurial > hg > Members > kono > Cerium
diff TaskManager/kernel/schedule/SchedTask.cc @ 421:cd77224d4224
Code load implementation... (not yet tested)
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 24 Sep 2009 16:04:23 +0900 |
parents | 8611780d479f |
children | 95c0457a7d31 |
line wrap: on
line diff
--- a/TaskManager/kernel/schedule/SchedTask.cc Wed Sep 23 21:29:30 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Thu Sep 24 16:04:23 2009 +0900 @@ -11,13 +11,31 @@ //#define NO_PIPELINE +/** + Task Object を作る + code loading ならば、loading の終了を待つ + */ + SchedTask * createSchedTask(Scheduler *scheduler, TaskPtr task) { + task_list[task->command].wait(scheduler,task->command); return task_list[task->command].creator(scheduler); } +/** + code load を始める。既に get_segment hash に入っていれば何もしない。 + 最初の一回は SchedTaskList:: next から呼ばれる。 + この段階では、SchedTask object は、まだ作られてない。 + */ +void +loadSchedTask(Scheduler *scheduler,TaskPtr task) +{ + task_list[task->command].load(scheduler,task->command); +} + + SchedTask::SchedTask() { __list = NULL; @@ -322,6 +340,10 @@ return nextSched; } else { TaskPtr nextTask = &__list->tasks[__cur_index++]; + if (__cur_index < __list->length) { + // load next task + loadSchedTask(__scheduler, &__list->tasks[__cur_index]); + } nextSched = createSchedTask(__scheduler, nextTask); ((SchedTask*)nextSched)->__init__(__list, nextTask, __cur_index, __scheduler->get_curReadBuf(),