21
|
1 title: Gears OS
|
|
2 author: Tatsuki IHA
|
|
3 profile:
|
|
4 lang: Japanese
|
|
5 code-engine: coderay
|
|
6
|
|
7 ## 研究目的
|
|
8 - 当研究室では 処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
|
|
9 - Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う
|
|
10 - 現在の Gears では Stack や Queue の operatation の API が存在しなため, 記述が困難になっている. そのため, この研究では Gears OS における API の記述方法を設計し, 実装する
|
|
11
|
|
12 ## 今週
|
|
13 - union Data に型情報を入れる
|
|
14 - しゅうかつ!
|
|
15
|
|
16 ## union Data に型情報を入れる
|
|
17 - union Data の定義に enum DataType を入れる
|
|
18
|
|
19 ``` c
|
|
20 union Data {
|
|
21 enum DataType type;
|
|
22
|
|
23 struct Time {
|
|
24 enum Code next;
|
|
25 double time;
|
|
26 } time;
|
|
27
|
|
28 struct LoopCounter {
|
|
29 int i;
|
|
30 } loopCounter;
|
|
31
|
|
32 struct Worker {
|
|
33 int num;
|
|
34 struct Context* contexts;
|
|
35 } worker;
|
|
36 ......
|
|
37 }
|
|
38 ```
|
|
39
|
|
40 ## union Data に型情報を入れる
|
|
41 - allocate の際は struct size + DataType size で取る(macro)
|
|
42
|
|
43 ```
|
|
44 #define ALLOCATE(context, t) ({ \
|
|
45 union Data* data = context->heap; \
|
|
46 context->heap += sizeof(struct t) + ((void *)(&data->element) - (void *)data) ; \
|
|
47 data->type = t; \
|
|
48 data; })
|
|
49 ```
|
|
50
|
|
51 ## union Data に型情報を入れる
|
|
52 - Data だけを取り出したい場合は DataType 分引く
|
|
53
|
|
54 ```
|
|
55 #define GET_DATA(spesificData) ({ \
|
|
56 union Data dummy; \
|
|
57 void* ptr = (void *)spesificData; \
|
|
58 ptr -= (void *)(&dummy.element) - (void *)(&dummy); \
|
|
59 (union Data*)ptr; })
|
|
60 ```
|