Mercurial > hg > Members > kono > Cerium
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