Mercurial > hg > Papers > 2019 > mitsuki-master
view paper/evaluation.tex @ 52:8be23dffcd3f
update
author | mir3636 |
---|---|
date | Tue, 12 Feb 2019 02:00:52 +0900 |
parents | 3179b8daa958 |
children | cf325c78edc1 |
line wrap: on
line source
\chapter{評価} 本研究では、Gears OS のモジュール化、メタレベルの計算の自動生成、 xv6 の CbC 書き換えの考察と、システムコールの書き換えを行なった。 これらの実装についての評価を行う。 \section{Gears OS のモジュール化} Gears OS の モジュール化について評価を行う。 モジュール化されていない以前の 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 のリストから取り出す必要があるが、 ソースコード \ref{prevgear} 12、13行目のように Context に引数格納用として型ごとに確保された Data Gear を、 複数の Code Gear で使いまわしてしまう問題があった。 これも Interface を用いることで、Interface 用に実装で用いる Data Gear を持てるようになり、 ソースコード \ref{intergear} 12、13行目のように使うことができるようになった。 \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; goto meta(context, pushSingleLinkedStack) } __code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, struct Element *element) { ... } __code pushSingleLinkedStack_stub(struct Context* context){ SingleLinkedStack* stack = &context->data[SingleLinkedStack]->SingleLinkedStack; Element *element = &context->data[Element]->element; 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 の自動生成}