Mercurial > hg > Members > kono > Cerium
comparison TaskManager/Fifo/FifoTaskManagerImpl.cc @ 853:fc521121ca8a
fix
author | game@zeus.cr.ie.u-ryukyu.ac.jp |
---|---|
date | Wed, 09 Jun 2010 10:33:24 +0900 |
parents | dc3621ee7816 |
children | 14fb1c888931 |
comparison
equal
deleted
inserted
replaced
852:5389de58734f | 853:fc521121ca8a |
---|---|
20 delete htaskImpl ; | 20 delete htaskImpl ; |
21 | 21 |
22 } | 22 } |
23 | 23 |
24 /** | 24 /** |
25 * FifoTaskManager 単独で走るときの初期化 | |
25 * MailManager は PPE スケジューラとのメール交換、 | 26 * MailManager は PPE スケジューラとのメール交換、 |
26 * FifoScheduler は PPE 側のスケジューラ | 27 * FifoScheduler は PPE 側のスケジューラ |
27 * BufferManager は Task、TaskList などのメモリ管理(大層なことしてないが | |
28 */ | 28 */ |
29 void | 29 void |
30 FifoTaskManagerImpl::init() | 30 FifoTaskManagerImpl::init() |
31 { | 31 { |
32 // TaskManager から呼ばれるので、かなりの部分は初期化されている。 | 32 // TaskManager から呼ばれるので、かなりの部分は初期化されている。 |
122 */ | 122 */ |
123 void | 123 void |
124 FifoTaskManagerImpl::sendTaskList() | 124 FifoTaskManagerImpl::sendTaskList() |
125 { | 125 { |
126 if (taskListInfo->empty()) return; | 126 if (taskListInfo->empty()) return; |
127 // ppeTaskList は走り終わった ppe の Task の List. | |
128 // taskListInfo はこれから走る Task の List. | |
129 // 交換して実行する | |
127 TaskListInfoPtr tmp = ppeTaskList; | 130 TaskListInfoPtr tmp = ppeTaskList; |
128 ppeTaskList = taskListInfo; | 131 ppeTaskList = taskListInfo; |
129 taskListInfo = tmp; | 132 taskListInfo = tmp; |
133 // ppeTaskList は本来は循環リストなのだけど、実行中は線形リストである。 | |
134 // なので、最後に 0 を代入する. 後でなおす。 | |
130 ppeTaskList->getLast()->next = 0; | 135 ppeTaskList->getLast()->next = 0; |
131 // TaskList のアドレスを送る | 136 // TaskList のアドレスを送る |
132 mainScheduler->mail_write_from_host((memaddr)ppeTaskList->getFirst()); | 137 mainScheduler->mail_write_from_host((memaddr)ppeTaskList->getFirst()); |
133 | 138 |
134 // EXIT_COMMAND (番兵的な意味で) | 139 // EXIT_COMMAND (番兵的な意味で) |
136 mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT); | 141 mainScheduler->mail_write_from_host((memaddr)MY_SPE_COMMAND_EXIT); |
137 | 142 |
138 // scheduler は受け取ったメールを元に実行する | 143 // scheduler は受け取ったメールを元に実行する |
139 mainScheduler->run(new SchedNop()); | 144 mainScheduler->run(new SchedNop()); |
140 // すべてのlistを実行するまで戻らない | 145 // すべてのlistを実行するまで戻らない |
146 | |
147 ppeTaskList->getLast()->next = ppeTaskList; | |
148 | |
141 } | 149 } |
142 | 150 |
143 /** | 151 /** |
144 * PPE Scheduler からのメールをチェックする | 152 * PPE Scheduler からのメールをチェックする |
145 * | 153 * |