diff TaskManager/kernel/ppe/TaskManagerImpl.cc @ 634:0558abba673c

SimpleTask start
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 18 Nov 2009 17:29:14 +0900
parents 0decff4e867b
children 8cc609285bbe
line wrap: on
line diff
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Wed Nov 18 14:47:23 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Wed Nov 18 17:29:14 2009 +0900
@@ -3,9 +3,9 @@
 #include "types.h"
 #include "error.h"
 #include "SchedTask.h"
-#include "../sys_task/SysTask.h"
-
 #include "Scheduler.h"
+#include "SysTask.h"
+#include "SysFunc.h"
 
 static HTaskPtr systask_start;
 static HTaskPtr systask_finish;
@@ -25,24 +25,34 @@
 
 /**
  * 一番最初に PPE で実行される systask_start
- * 一番最後に、全てのタスクの終了を待つ systask_finish
- * 番兵的な意味で実装
  */
 void
 TaskManagerImpl::systask_init()
 {
     systask_register();
 
-    systask_start = create_task(SYSTASK_START);
-    systask_finish = create_task(SYSTASK_FINISH);
+    systask_start = create_task(StartTask);
+    systask_finish = create_task(FinishTask);
 
     systask_start->spawn();
 
-    // systask_finish で spawn すると
-    //   systask_finish->wait_for(systask_finish);
-    // とかなって無限ループになるので、
-    // これだけは明示的に append_waitTask() で
-    append_waitTask(systask_finish);
+    // すべての Task が FinishTask を wait_for すると、
+    // あらゆる Task が FinishTask の waiting task queue を操作する
+    // ことになる。それは、重すぎる。PPE/SPE Task が終了した時点で、
+    // TaskManager が実行する方が安い。
+    // append_waitTask(systask_finish);
+}
+
+HTaskPtr
+TaskManagerImpl::create_task(int cmd,void *rbuf, long r_size, void *wbuf, long w_size)
+{
+    HTaskPtr new_task;
+
+    new_task = htaskImpl->create(cmd, rbuf, r_size, wbuf, w_size);
+    new_task->post_func = noaction;
+    new_task->mimpl = this;
+
+    return new_task;
 }
 
 HTaskPtr