changeset 52:8be23dffcd3f

update
author mir3636
date Tue, 12 Feb 2019 02:00:52 +0900
parents 3179b8daa958
children 4c6bb312f729
files paper/evaluation.tex
diffstat 1 files changed, 35 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/paper/evaluation.tex	Mon Feb 11 23:22:07 2019 +0900
+++ b/paper/evaluation.tex	Tue Feb 12 02:00:52 2019 +0900
@@ -7,11 +7,18 @@
 
 \section{Gears OS のモジュール化}
 Gears OS の モジュール化について評価を行う。
-Gears OS では、ある Data Gear を Code Gear が扱う場合、
+モジュール化されていない以前の Gears OS ではソースコード \ref{prevgear} 4行目のように、
+Code Gear 直接指定しなければならなかった。
+Interface を用いた ソースコード \ref{intergear} ではここを stack->push のように抽象化することができる。
+
+また、Gears OS では、ある Data Gear を Code Gear が扱う場合、
 Code Gear に対応する Data Gear を Context が持つ Data Gear のリストから取り出す必要があるが、
-Context に 全ての Code Gear と Data Gear 
+ソースコード \ref{prevgear} 12、13行目のように Context に引数格納用として型ごとに確保された Data Gear を、
+複数の Code Gear で使いまわしてしまう問題があった。
+これも Interface を用いることで、Interface 用に実装で用いる Data Gear を持てるようになり、
+ソースコード \ref{intergear} 12、13行目のように使うことができるようになった。
 
-\begin{lstlisting}[frame=lrbt,label=syscall_list,caption={\footnotesize xv6 のシステムコールのリスト}]
+\begin{lstlisting}[frame=lrbt,label=prevgear,caption={\footnotesize Interface を用いない Gears}]
 __code cg1 (struct Context* context, struct Element* element) {
     struct Node* node1 = new Node();
     element->data = (union Data*)node1;
@@ -25,8 +32,31 @@
 __code pushSingleLinkedStack_stub(struct Context* context){
     SingleLinkedStack* stack = &context->data[SingleLinkedStack]->SingleLinkedStack;
     Element *element = &context->data[Element]->element;
-    goto pushSingleLinkedStack(context, stack, data)
+    goto pushSingleLinkedStack(context, stack, data);
 }
 
 \end{lstlisting}
- 
+
+\begin{lstlisting}[frame=lrbt,label=intergear,caption={\footnotesize Interface を用いた Gears}]
+__code cg1 (struct Context* context, struct Stack* stack) {
+    struct Node* node1 = new Node();
+    goto stack->push((union Data*)node1,cg2);
+}
+
+__code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
+    ...
+}
+
+__code pushSingleLinkedStack_stub(struct Context* context){
+    SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
+    Data* data = &context->data[D_Stack]->Stack->data;
+    enum Code next = &context->data[D_Stack]->Stack->next;
+    goto pushSingleLinkedStack(context, stack, data, next);
+}
+
+\end{lstlisting}
+
+\section{Meta Gear の自動生成}
+
+
+