0
|
1
|
|
2 Task
|
|
3 o 一つ一つの仕事を表す
|
|
4 o それぞれが別のTaskに対して依存関係を持っている
|
|
5 o 一つのTaskは複数のコードセグメントの連なり
|
|
6 o コードセグメント毎にスケジューラに処理を渡したい
|
|
7 o gotoのリフレクションは今はマクロで?
|
|
8 * ユーザーインターフェイス
|
|
9 o wait_for (using set_depend of TM)
|
|
10 o set_cpu (optional)
|
|
11 o spawn
|
|
12
|
|
13 TaskManager
|
|
14 o 実行環境によらないおなじ処理
|
|
15 o Taskの依存関係をもとに実行に移す
|
|
16 o 実際の実行はSchedulerに任せる
|
|
17 o activeTaskQとwaitingTaskQをもつ
|
|
18 o SchedulerからTaskの終了通知を受け取る
|
|
19 o 通知を受けたらそのTaskに依存しているTaskの依存を解消
|
|
20 o 依存がなくなったタスクはactiveTaskQに移される
|
|
21 o 実行中のTaskがなく, activeTaskQが0なら終了?
|
|
22 * ユーザーインターフェイス
|
|
23 o malloc
|
|
24 o create_task
|
|
25 o ?set_depend (used by wait_for of Task)
|
|
26 o spawn_task (used by spawn of Task)
|
|
27
|
2
|
28 TaskScheduler
|
0
|
29 o TaskManagerに指示されたTaskを実際に実行する
|
|
30 o CPU管理
|
|
31 o Taskが終了したらTaskManagerに通知する
|
2
|
32 * AbstractLayerからのインターフェイス
|
|
33 o initScheduler()
|
|
34 o addCode(SchedTask *)
|
|
35 o selectCode()
|
|
36
|
|
37 AbstractLayer
|
|
38 o TaskManagerとSchedulerの中間レイヤ
|
|
39 o 実行環境ごとに全部違う Cell, Fifo, pthread, cluster..
|
|
40 o TaskManagerに指示されたタスクをSchedulerに渡す
|
|
41 o その際、clusterやCellならデータの転送処理などを受け持つ
|
|
42 o Schedulerから終了したタスクの通知も受け付ける
|
|
43 * Schedulerとのインタフェイス
|
|
44 -> checkNewCode()
|
|
45 -> exitCode()
|
|
46 <- initScheduler()
|
|
47 <- addCode()
|
|
48 <- selectCode()
|
|
49 * TaskManagerとのインタフェイス
|
|
50 o checkAction()
|
|
51 -> TM::addNewTask()
|
|
52 -> TM::finishTask()
|
|
53 -> TM::noAction()
|
|
54 o executeTask(Task*)
|
|
55 -> TM::executeTaskret() // なんかいい名前を…
|
|
56 * Userインタフェイス(Fifoやpthreadの場合は直接TaskManagerでもいい)
|
|
57 o newTask()
|
|
58 o spawn()
|
|
59 o setData()
|
|
60 o allocate()
|
0
|
61
|
|
62 MailManager
|
|
63 o Schedulerとおなじく環境依存
|
|
64 o TaskManagerに終了通知を行う
|
|
65
|
|
66
|
|
67 ユーザはTaskのコードセグメントを定義すればいい
|