# HG changeset patch # User mir3636 # Date 1487138006 -32400 # Node ID 11ad5b3e7b85d84ad50c8c91c4f614a42a9ecf7e # Parent b35c8fcff7d5668bcc4e3d1e8bfa24deb4dbc939 update diff -r b35c8fcff7d5 -r 11ad5b3e7b85 final_main/chapter3.tex --- a/final_main/chapter3.tex Wed Feb 15 11:06:39 2017 +0900 +++ b/final_main/chapter3.tex Wed Feb 15 14:53:26 2017 +0900 @@ -82,12 +82,12 @@ そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 Gearef に Context と型を渡すことでデータの参照が行える。 また impliment を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。 +GearImpl は Context と interface 名、interface の変数名を指定して参照する。 Gearef と GearImpl を用いたコードがリスト\ref{Gearef}である。 \begin{lstlisting}[frame=lrbt,label=ref,caption={Gearef、GearImplのないコード}] __code pushSingleLinkedStack_stub(struct Context* context) { SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack; - Data* data = Gearef(context, Stack)->data; Data* data = context->data[D_Stack]->Stack.data; enum Code next = context->data[D_Stack]->Stack.next; goto pushSingleLinkedStack(context, stack, data, next); @@ -103,7 +103,6 @@ } \end{lstlisting} - \section{stub Code Gear} Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。 しかし、Context を直接扱うのはセキュリティ上好ましくない。 diff -r b35c8fcff7d5 -r 11ad5b3e7b85 final_main/chapter5.tex --- a/final_main/chapter5.tex Wed Feb 15 11:06:39 2017 +0900 +++ b/final_main/chapter5.tex Wed Feb 15 14:53:26 2017 +0900 @@ -2,20 +2,20 @@ Gears OS では 3 章で述べたように通常の Computation の他に Context や stub などの Meta Computation を記述する必要がある。 Gears OS を現在の CbC の機能のみを用いて記述すると Context や stub Code Gear の記述を行わなくてはならず、これには多くの労力を要する。 -そのため、この記述を助けるために Context や stub Code Gear を生成するスクリプトを作成した。 +そのため、この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を perl スクリプトで作成した。 \section{stub Code Segment の生成} stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 stub Code Gear を 自動生成することによって Code Gear の記述量を約半分にすることができる。 -stub を生成するために perl スクリプトは指定された cbc ファイルの \_\_code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 +stub を生成するために generate\_stub は指定された cbc ファイルの \_\_code型である Code Gear を取得し、引数から必要な Data Gear を選択する。 +generate\_stub は引数と interface を照らし合わせ、Gearef または GearImpl を決定する。 この時既に stub Code Gear が記述されている Code Gear は無視される。 -cbc ファイル(リスト\ref{stack_cbc}) に生成した stub Code Gear を c ファイル(\ref{stack_c})を出力する。 +cbc ファイル(リスト\ref{stack_cbc}) から、生成した stub Code Gear を加えて c ファイル(\ref{stack_c})に変換を行う。 - -\begin{lstlisting}[frame=lrbt,label=stack_cbc,caption={\footnotesize SingleLinkedStack.cbc}] +\begin{lstlisting}[frame=lrbt,label=stack_cbc,caption={\footnotesize cbcファイルの例}] #include "../context.h" Stack* createSingleLinkedStack(struct Context* context) { @@ -85,13 +85,14 @@ \section{Context の生成} Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 -Data Gear を取得するために perl スクリプトは context の定義 (リスト\ref{context}) を読み宣言された Data Gear を取得する。 +Data Gear を取得するために generate\_context は context の定義 (リスト\ref{context}) を読み宣言されている Data Gear を取得する。 Code Gear は指定された cbc ファイルから stub を見て取得を行う。 +取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 -Context では Code Gear の名前とポインタの対応は生成する enum Code によって表現される。 +Context では Code Gear の名前とポインタの対応は generate\_context によって生成される enum Code と関数ポインタによって表現される。 実際に Code Gear に接続する際は enum Code を指定することで接続を行う。 -取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 -取得した Code/Data Gear から Context の生成を行うコード (リスト\ref{init_context}) を生成する。 + +また、generate\_context は取得した Code/Data Gear から Context の生成を行うコード (リスト\ref{init_context}) も生成する。 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 Code Gear は Context を通して Data Gear へアクセスする。 diff -r b35c8fcff7d5 -r 11ad5b3e7b85 final_main/main.pdf Binary file final_main/main.pdf has changed