Mercurial > hg > Members > kono > Cerium
annotate TaskManager/kernel/ppe/TaskManager.cc @ 368:126f90e8582c
change TaskManager
author | aaa |
---|---|
date | Mon, 27 Jul 2009 18:26:50 +0900 |
parents | 401b55a4a4dd |
children | 03ae2929c931 |
rev | line source |
---|---|
3 | 1 #include "TaskManager.h" |
2 | |
229 | 3 TaskManager::TaskManager(int num) : machineNum(num) |
4 { | |
5 gen_random = new Random; | |
6 } | |
3 | 7 |
194 | 8 TaskManager::~TaskManager(void) |
9 { | |
10 delete m_impl; | |
229 | 11 delete gen_random; |
194 | 12 } |
13 | |
3 | 14 /** |
15 * create_impl(int); | |
16 * | |
109 | 17 * [cell版] ../../Cell/CellTaskManagerImpl.cpp |
18 * [fifo版] ../../Fifo/FifoTaskManagerImpl.cpp | |
19 * で定義されています。コンパイル時に | |
3 | 20 * |
109 | 21 * % make cell ってすると cell 版が、 |
22 * % make fifo ってすると fifo 版 がリンクされるようにしているので | |
23 * それに応じて create_impl が返す値を変えています。 | |
24 * cell だったら CellManagerImpl, fifo だったら FifoManagerImpl です。 | |
3 | 25 * |
109 | 26 * 今までは ifdef CELL とか書いてましたわ。どっちがいいかね |
3 | 27 * |
109 | 28 * てか、普通に TaskManagerImpl に関数持たせた方が早いか・・・? |
3 | 29 */ |
30 extern TaskManagerImpl* create_impl(int); | |
31 | |
32 void | |
33 TaskManager::init(void) | |
34 { | |
35 m_impl = create_impl(machineNum); | |
36 m_impl->init(); | |
109 | 37 m_impl->systask_init(); |
3 | 38 } |
39 | |
20 | 40 void |
41 TaskManager::finish(void) | |
42 { | |
43 delete m_impl; | |
44 } | |
45 | |
3 | 46 /** |
109 | 47 * @param [command] Task executes method number |
3 | 48 * |
49 * @return this task | |
50 */ | |
51 HTaskPtr | |
109 | 52 TaskManager::create_task(int cmd) |
3 | 53 { |
109 | 54 return m_impl->create_task(cmd); |
3 | 55 } |
56 | |
216
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
57 /** |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
58 * TaskManaer 終了時に実行される関数の設定 |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
59 */ |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
60 void |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
61 TaskManager::set_TMend(void (*endf)(void)) |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
62 { |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
63 tm_end = endf; |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
64 } |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
65 |
3 | 66 void |
67 TaskManager::run(void) | |
68 { | |
69 m_impl->run(); | |
70 } | |
216
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
71 |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
72 void* |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
73 TaskManager::allocate(int size) { |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
74 return m_impl->allocate(size); |
894675539cbf
rename cerium_main to TMmain, add TMend()
gongo@localhost.localdomain
parents:
194
diff
changeset
|
75 } |
220 | 76 |
77 int | |
78 TaskManager::get_cpuNum(void) | |
79 { | |
80 return machineNum; | |
81 } | |
229 | 82 |
83 int | |
84 TaskManager::get_random(void) | |
85 { | |
86 return gen_random->getData(); | |
87 } | |
368 | 88 |
89 /*! | |
90 @param [size] リストの要素1つのサイズ | |
91 @param [count] 要素数 | |
92 @return allocate した領域のポインタ | |
93 | |
94 */ | |
95 MemList* | |
96 createMemList(uint32 size, uint32 count) | |
97 { | |
98 uint32 head_size = | |
99 round_up16(sizeof(MemorySegment)); | |
100 uint32 seg_size = | |
101 round_up16(head_size+size); | |
102 void* mseg = m_impl->allocate(seg_size*count); | |
103 MemList* mlist = new MemList((MemorySegment*)mseg); | |
104 | |
105 for(int i = 1; i < count; i++) { | |
106 MemorySegment* next = (MemorySegment*)(mseg+seg_size*i); | |
107 mlist->addLast(next); | |
108 } | |
109 | |
110 return mlist; | |
111 } | |
112 |