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 の自動生成}