Task o 一つ一つの仕事を表す o それぞれが別のTaskに対して依存関係を持っている o 一つのTaskは複数のコードセグメントの連なり o コードセグメント毎にスケジューラに処理を渡したい o gotoのリフレクションは今はマクロで? * ユーザーインターフェイス o wait_for (using set_depend of TM) o set_cpu (optional) o spawn TaskManager o 実行環境によらないおなじ処理 o Taskの依存関係をもとに実行に移す o 実際の実行はSchedulerに任せる o activeTaskQとwaitingTaskQをもつ o SchedulerからTaskの終了通知を受け取る o 通知を受けたらそのTaskに依存しているTaskの依存を解消 o 依存がなくなったタスクはactiveTaskQに移される o 実行中のTaskがなく, activeTaskQが0なら終了? * ユーザーインターフェイス o malloc o create_task o ?set_depend (used by wait_for of Task) o spawn_task (used by spawn of Task) TaskScheduler o TaskManagerに指示されたTaskを実際に実行する o CPU管理 o Taskが終了したらTaskManagerに通知する * AbstractLayerからのインターフェイス o initScheduler() o addCode(SchedTask *) o selectCode() AbstractLayer o TaskManagerとSchedulerの中間レイヤ o 実行環境ごとに全部違う Cell, Fifo, pthread, cluster.. o TaskManagerに指示されたタスクをSchedulerに渡す o その際、clusterやCellならデータの転送処理などを受け持つ o Schedulerから終了したタスクの通知も受け付ける * Schedulerとのインタフェイス -> checkNewCode() -> exitCode() <- initScheduler() <- addCode() <- selectCode() * TaskManagerとのインタフェイス o checkAction() -> TM::addNewTask() -> TM::finishTask() -> TM::noAction() o executeTask(Task*) -> TM::executeTaskret() // なんかいい名前を… * Userインタフェイス(Fifoやpthreadの場合は直接TaskManagerでもいい) o newTask() o spawn() o setData() o allocate() MailManager o Schedulerとおなじく環境依存 o TaskManagerに終了通知を行う ユーザはTaskのコードセグメントを定義すればいい