comparison 2016/2016_10_04/slide.md @ 20:3d6b9e5ae730

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 25 Oct 2016 19:50:03 +0900
parents
children
comparison
equal deleted inserted replaced
19:fe6ea065e36a 20:3d6b9e5ae730
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
11 # 今週やってたこと
12 - red black Tree の stack_push, pop の取り除き
13 - コーディングルールを確認
14
15 # rbTree
16 - staskに積まれるnodeを ``traverse->nodeStack`` に格納する
17 - nodeStack は element なので next をもつ
18
19 ```
20 struct Traverse {
21 enum Code next;
22 enum Code rotateNext;
23 struct Node* current; // reading node of original tree
24 struct Node* newNode; // writing node of new tree
25 struct Element* nodeStack;
26 int result;
27 } traverse;
28 ```
29
30 # rbTree
31 ```
32 __code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, struct Element* element) {
33 *newNode = *oldNode;
34 element->next = traverse->nodeStack;
35 element->data = (union Data* )newNode;
36 traverse->nodeStack = element;
37 // goto replaceNode1(struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, +struct Node* newnewNode, int result)
38 goto meta(context, Replace1);
39 }
40
41 __code replaceNode_stub(struct Context* context) {
42 struct Allocate* allocate = &context->data[Allocate]->allocate;
43 allocate->size = sizeof(struct Element);
44 allocator(context);
45 struct Element* element = &context->data[context->dataNum]->element;
46 goto replaceNode(context,
47 &context->data[Traverse]->traverse,
48 context->data[Traverse]->traverse.current,
49 context->data[Traverse]->traverse.newNode,
50 element);
51 }
52 ```
53
54 ```
55 __code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, int result) {
56 *newNode = *oldNode;
57 stack_push(context->node_stack, &newNode);
58 if (result == EQ) {
59 newNode->value = context->data[Node]->node.value;
60 // go to stack clear
61 stack_pop(context->code_stack, &context->next);
62 goto meta(context, context->next);
63 } else if (result == GT) {
64 traverse->current = oldNode->right;
65 newNode->right = context->heap; // allocator(context,struct Node)
66 } else {
67 traverse->current = oldNode->left;
68 newNode->left = context->heap;
69 }
70
71 allocator(context);
72
73 if (traverse->current) {
74 compare(context, traverse, traverse->current->key, context->data[Node]->node.key);
75 goto meta(context, Replace);
76 }
77 goto meta(context, Insert);
78 }
79
80 __code replaceNode_stub(struct Context* context) {
81 goto replaceNode(context,
82 &context->data[Traverse]->traverse,
83 context->data[Traverse]->traverse.current,
84 &context->data[context->dataNum]->node, // new Node
85 context->data[Traverse]->traverse.result);
86
87 }
88 ```
89
90
91 # いろいろ
92 - 引数
93 - ``__code code1(struct Node* +node)`` みたいに新しく allocate するものは+ を付ける
94 - stack と queue の api が欲しい
95 - Stack interface & Queue interface を用意してそこに operatorの csの番号を持たせる(popとかpushに)
96 - データ構造の生成時に interface の cs の番号を送ることで データ構造が持つ型によって実行する CS を変える
97 - とりあえず保留にしとこう
98 - allocate
99 - allocate はやっぱり CS であるべきだよね
100 - allocate で作ったものをどう参照するか
101 - DS
102 - enum DataType を union Data の要素につける