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(),