Mercurial > hg > Papers > 2019 > mitsuki-master
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 の自動生成} + + +