comparison paper/evaluation.tex @ 52:8be23dffcd3f

update
author mir3636
date Tue, 12 Feb 2019 02:00:52 +0900
parents 3179b8daa958
children cf325c78edc1
comparison
equal deleted inserted replaced
51:3179b8daa958 52:8be23dffcd3f
5 5
6 これらの実装についての評価を行う。 6 これらの実装についての評価を行う。
7 7
8 \section{Gears OS のモジュール化} 8 \section{Gears OS のモジュール化}
9 Gears OS の モジュール化について評価を行う。 9 Gears OS の モジュール化について評価を行う。
10 Gears OS では、ある Data Gear を Code Gear が扱う場合、 10 モジュール化されていない以前の Gears OS ではソースコード \ref{prevgear} 4行目のように、
11 Code Gear 直接指定しなければならなかった。
12 Interface を用いた ソースコード \ref{intergear} ではここを stack->push のように抽象化することができる。
13
14 また、Gears OS では、ある Data Gear を Code Gear が扱う場合、
11 Code Gear に対応する Data Gear を Context が持つ Data Gear のリストから取り出す必要があるが、 15 Code Gear に対応する Data Gear を Context が持つ Data Gear のリストから取り出す必要があるが、
12 Context に 全ての Code Gear と Data Gear 16 ソースコード \ref{prevgear} 12、13行目のように Context に引数格納用として型ごとに確保された Data Gear を、
17 複数の Code Gear で使いまわしてしまう問題があった。
18 これも Interface を用いることで、Interface 用に実装で用いる Data Gear を持てるようになり、
19 ソースコード \ref{intergear} 12、13行目のように使うことができるようになった。
13 20
14 \begin{lstlisting}[frame=lrbt,label=syscall_list,caption={\footnotesize xv6 のシステムコールのリスト}] 21 \begin{lstlisting}[frame=lrbt,label=prevgear,caption={\footnotesize Interface を用いない Gears}]
15 __code cg1 (struct Context* context, struct Element* element) { 22 __code cg1 (struct Context* context, struct Element* element) {
16 struct Node* node1 = new Node(); 23 struct Node* node1 = new Node();
17 element->data = (union Data*)node1; 24 element->data = (union Data*)node1;
18 goto meta(context, pushSingleLinkedStack) 25 goto meta(context, pushSingleLinkedStack)
19 } 26 }
23 } 30 }
24 31
25 __code pushSingleLinkedStack_stub(struct Context* context){ 32 __code pushSingleLinkedStack_stub(struct Context* context){
26 SingleLinkedStack* stack = &context->data[SingleLinkedStack]->SingleLinkedStack; 33 SingleLinkedStack* stack = &context->data[SingleLinkedStack]->SingleLinkedStack;
27 Element *element = &context->data[Element]->element; 34 Element *element = &context->data[Element]->element;
28 goto pushSingleLinkedStack(context, stack, data) 35 goto pushSingleLinkedStack(context, stack, data);
29 } 36 }
30 37
31 \end{lstlisting} 38 \end{lstlisting}
32 39
40 \begin{lstlisting}[frame=lrbt,label=intergear,caption={\footnotesize Interface を用いた Gears}]
41 __code cg1 (struct Context* context, struct Stack* stack) {
42 struct Node* node1 = new Node();
43 goto stack->push((union Data*)node1,cg2);
44 }
45
46 __code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
47 ...
48 }
49
50 __code pushSingleLinkedStack_stub(struct Context* context){
51 SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
52 Data* data = &context->data[D_Stack]->Stack->data;
53 enum Code next = &context->data[D_Stack]->Stack->next;
54 goto pushSingleLinkedStack(context, stack, data, next);
55 }
56
57 \end{lstlisting}
58
59 \section{Meta Gear の自動生成}
60
61
62