annotate TaskManager/kernel/ppe/TaskManagerImpl.cc @ 619:0decff4e867b

RenewTask removal
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 15 Nov 2009 02:02:30 +0900
parents 47b61865ea8c
children 0558abba673c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5
75f184d16fa5 *** empty log message ***
gongo
parents: 3
diff changeset
1 #include <stdio.h>
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
2 #include "TaskManagerImpl.h"
46
f154d9d07a42 *** empty log message ***
gongo
parents: 42
diff changeset
3 #include "types.h"
f154d9d07a42 *** empty log message ***
gongo
parents: 42
diff changeset
4 #include "error.h"
518
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
5 #include "SchedTask.h"
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
6 #include "../sys_task/SysTask.h"
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
7
619
0decff4e867b RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
8 #include "Scheduler.h"
0decff4e867b RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
9
220
gongo@localhost.localdomain
parents: 115
diff changeset
10 static HTaskPtr systask_start;
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
11 static HTaskPtr systask_finish;
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
12
514
2659376067e8 old ball_bound fix...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
13 static void
2659376067e8 old ball_bound fix...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 507
diff changeset
14 noaction(SchedTask *s, void *read, void *write)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
15 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
16 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
17
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
18 TaskManagerImpl::TaskManagerImpl(int num)
480
46464727d825 TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 479
diff changeset
19 : machineNum(num) {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
20 activeTaskQueue = new HTaskInfo();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
21 waitTaskQueue = new HTaskInfo();
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
22 htaskImpl = waitTaskQueue ; // any HTaskInfo
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
23 taskQueueImpl = new TaskQueueInfo();
480
46464727d825 TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 479
diff changeset
24 }
50
7927e00fb8e2 *** empty log message ***
gongo
parents: 48
diff changeset
25
220
gongo@localhost.localdomain
parents: 115
diff changeset
26 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
27 * 一番最初に PPE で実行される systask_start
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
28 * 一番最後に、全てのタスクの終了を待つ systask_finish
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
29 * 番兵的な意味で実装
220
gongo@localhost.localdomain
parents: 115
diff changeset
30 */
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
31 void
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
32 TaskManagerImpl::systask_init()
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
33 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
34 systask_register();
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
35
220
gongo@localhost.localdomain
parents: 115
diff changeset
36 systask_start = create_task(SYSTASK_START);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
37 systask_finish = create_task(SYSTASK_FINISH);
220
gongo@localhost.localdomain
parents: 115
diff changeset
38
gongo@localhost.localdomain
parents: 115
diff changeset
39 systask_start->spawn();
gongo@localhost.localdomain
parents: 115
diff changeset
40
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
41 // systask_finish で spawn すると
220
gongo@localhost.localdomain
parents: 115
diff changeset
42 // systask_finish->wait_for(systask_finish);
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
43 // とかなって無限ループになるので、
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
44 // これだけは明示的に append_waitTask() で
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
45 append_waitTask(systask_finish);
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
46 }
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
47
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
48 HTaskPtr
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
49 TaskManagerImpl::create_task(int cmd)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
50 {
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
51 HTaskPtr new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
52
475
e083c4ff91c1 BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 373
diff changeset
53 new_task = htaskImpl->create(cmd);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
54 new_task->post_func = noaction;
63
54355e641172 *** empty log message ***
gongo
parents: 58
diff changeset
55 new_task->mimpl = this;
54355e641172 *** empty log message ***
gongo
parents: 58
diff changeset
56
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
57 return new_task;
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
58 }
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
59
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
60 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
61 * task の依存関係を設定
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
62 * master task が終わってから、slave task を実行するように
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
63 * master->wait_for(slave);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
64 */
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
65 void
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
66 TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave)
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
67 {
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
68 TaskQueuePtr m, s;
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
69
475
e083c4ff91c1 BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 373
diff changeset
70 m = taskQueueImpl->create(master);
e083c4ff91c1 BufferManager removed.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 373
diff changeset
71 s = taskQueueImpl->create(slave);
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
72
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
73 master->wait_me->addLast(s);
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
74 slave->wait_i->addLast(m);
481
4896dffad67c Double linked list modification done (tested on Mac OS X)
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 480
diff changeset
75 s->waiter = m;
519
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
76 }
5c76db2a07fa continue..
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 518
diff changeset
77
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
78 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
79 * タスクを実行可能キューまたは待機キューへ追加する。
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
80 * 依存関係が満たされていれば active, まだだったら wait へ。
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
81 * task->spawn();
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
82 */
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
83 void
18
0c9341da4522 *** empty log message ***
gongo
parents: 5
diff changeset
84 TaskManagerImpl::spawn_task(HTaskPtr task)
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
85 {
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
86 // waiter // master
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
87 // waitee // slave
480
46464727d825 TaskQueueInfo initiaization...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 479
diff changeset
88 if (task->wait_i->empty()) {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
89 append_activeTask(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
90 } else {
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
91 append_waitTask(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
92 }
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
93
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
94 systask_finish->wait_for(task);
3
2356238ebea7 *** empty log message ***
gongo
parents:
diff changeset
95 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
96
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
97 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
98 * Task を実行可能キューに追加する
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
99 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
100 void
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
101 TaskManagerImpl::append_activeTask(HTaskPtr q)
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
102 {
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
103 activeTaskQueue->addLast(q);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
104 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
105
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
106 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
107 * タスクが実行する CPU を選択する
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
108 *
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
109 * 現在は CPU_PPE, CPU_SPE, SPE_ANY, SPE_0, SPE_1, ..., SPE_5
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
110 * types.h に書いてます。
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
111 */
65
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
112 void
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
113 TaskManagerImpl::set_task_cpu(HTaskPtr task, CPU_TYPE type)
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
114 {
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
115 task->cpu_type = type;
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
116 }
519d24aa7ac8 *** empty log message ***
gongo
parents: 63
diff changeset
117
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
118 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
119 * 終了したタスクから依存の処理とか
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
120 * post_func() はこのタスクが終了したら実行する関数。
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
121 *
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
122 * @param [task] 終了したタスク
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
123 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
124 void
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
125 TaskManagerImpl::check_task_finish(HTaskPtr me)
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
126 {
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
127
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
128 while(TaskQueue *p = me->wait_me->poll()) {
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
129 HTaskPtr you = p->task;
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
130 TaskQueueInfo *wait_i = you->wait_i;
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
131 // 相手の wait queue から自分(を指しているTaskQueue)を削除
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
132 wait_i->remove(p->waiter);
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
133 // queue を free する
493
dd091fe6128e fix free conflict.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 483
diff changeset
134 wait_i->free_(p->waiter);
483
0b933bef0328 renew task worked. but not test_nogl...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 481
diff changeset
135
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
136 if (wait_i->empty()) {
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
137 waitTaskQueue->remove(you);
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
138 append_activeTask(you);
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
139 }
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
140
493
dd091fe6128e fix free conflict.
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 483
diff changeset
141 wait_i->free_(p);
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
142 }
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
143
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
144 htaskImpl->free_(me);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
145 }
42
aa11038dbdc1 *** empty log message ***
gongo
parents: 18
diff changeset
146
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
147
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
148 void
498
cb5ecfc5aaa3 double linked HTaskInfo/HTask
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 497
diff changeset
149 TaskManagerImpl::append_waitTask(HTaskPtr q)
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
150 {
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
151 waitTaskQueue ->addLast(q);
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
152 }
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
153
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
154 /**
298
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
155 * waitQueue の中で依存関係を満たしたタスクは
58fd16298954 from EUC to UTF-8
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 220
diff changeset
156 * activeQueue へ移す
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
157 */
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
158 void
499
eacbcdb23986 still fixing...
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 498
diff changeset
159 TaskManagerImpl::wakeup_waitTask()
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
160 {
497
9d225ba0c34f no wakeup loop
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 496
diff changeset
161 // done in check_task_finish
109
5c194c71eca8 Cerium cvs version
gongo@gendarme.local
parents: 94
diff changeset
162 }
54
90523ccc4dff *** empty log message ***
gongo
parents: 50
diff changeset
163
619
0decff4e867b RenewTask removal
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 567
diff changeset
164
479
5bda98b0b56d Double Linked List base TaskQueue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 475
diff changeset
165 /* end */