# HG changeset patch # User mir3636 # Date 1513850277 -32400 # Node ID f5714330584795ed16026a5aff013928bda70f12 # Parent dc0aa4a22e32f92ff208f6a81590874d48f54b89 fix diff -r dc0aa4a22e32 -r f57143305847 Paper/main.pdf Binary file Paper/main.pdf has changed diff -r dc0aa4a22e32 -r f57143305847 Paper/main.tex --- a/Paper/main.tex Wed Dec 20 18:44:34 2017 +0900 +++ b/Paper/main.tex Thu Dec 21 18:57:57 2017 +0900 @@ -160,9 +160,27 @@ Gears OS では メタ計算 を Meta Code Gear、Meta Data Gear で表現する。 Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。 -Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 +これを図示したものが図\ref{fig:metaCS}である。 +%Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{./pic/metaCS.pdf} + \end{center} + \caption{Gears でのメタ計算} + \label{fig:metaCS} +\end{figure} -CbC は Code Gear を処理の単位として用いたプログラミング言語であるため、Gears OS の Code Gear を記述するのに適している。 +Gears OS は Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 +Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。 + +しかし Context を通常の計算から直接扱うのはセキュリティ上好ましくない。 +そこで Context から必要なデータを取り出して Code Gear に接続するMeta Code Gear である stub Code Gear を定義し、 +これを介して間接的に必要な Data Gear にアクセスする。 +stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する前に挿入される。 +goto による継続を行うと、実際には次の Code Gear の stub Code Gear を呼び出す。 + +%CbC は Code Gear を処理の単位として用いたプログラミング言語であるため、Gears OS の Code Gear を記述するのに適している。 \section{Gears OS の構成} Gears OS は以下の要素で構成される。 @@ -184,8 +202,8 @@ \label{fig:gearsos} \end{figure} -Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 -Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。 +%Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 +%Gears OS は必要な Code Gear、Data Gear に参照したい場合、この Context を通す必要がある。 Code\ref{context} は Context の定義で Code\ref{initcontext} は Context の生成である。 \lstinputlisting[caption=Context, label=context]{./src/context1.c} @@ -196,24 +214,21 @@ この情報から確保する Data Gear のサイズなどを決定する。 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。 -Context は Task でもあり、TaskManager によって Context が生成され Task Queue へ挿入する。 +Context は Task でもあり、Taskは通常のOSのスレッドに対応する。 +Task は実行する Code Gear と Data Gear をすべて持っている。 +TaskManager によって Context が生成され Task Queue へ挿入する。 Gears OS における Task Queue は Synchronized Queue で実現される。 Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 -\section{CbC のコードの例} +%\section{CbC のコードの例} -Code\ref{excbc}は CbC で記述された stack のコードの一部である。 -Code Gear は \_\_code Code Gear の記述から始まり、次の Code Gear へ goto で遷移する。 +%Code\ref{excbc}は CbC で記述された stack のコードの一部である。 +%Code Gear は \_\_code Code Gear の記述から始まり、次の Code Gear へ goto で遷移する。 %...の説明 %codegearの説明もっとする? -\lstinputlisting[label=excbc, caption=CbC で記述された stack のコード]{./src/ex_stack.cbc} - -\section{CbC による Gears OS 記述の問題} -Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 -これらのメタ計算を自動生成、interface、implement の機能を導入することにより、ユーザーレベルにおける CbC 可読性を上げ、 -Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 +%\lstinputlisting[label=excbc, caption=CbC で記述された stack のコード]{./src/ex_stack.cbc} \section{interface と implement} interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 @@ -231,33 +246,30 @@ \lstinputlisting[label=implement, caption=Implement]{./src/stackimpl.cbc} -\section{Gearef、GearImpl} +%\section{Gearef、GearImpl} -Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 -Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、Code\ref{gearef1} のようにコードが煩雑になってしまう。 -そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 -Gearef に Context と型を渡すことでデータの参照が行える。 -また interface の実装を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。 -GearImpl は Context と interface 名、interface の変数名を指定して参照する。 -Gearef と GearImpl を用いたコードが Code\ref{gearef2}である。 +%Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 +%Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、Code\ref{gearef1} のようにコードが煩雑になってしまう。 +%そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 +%Gearef に Context と型を渡すことでデータの参照が行える。 +%また interface の実装を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。 +%GearImpl は Context と interface 名、interface の変数名を指定して参照する。 +%Gearef と GearImpl を用いたコードが Code\ref{gearef2}である。 -\lstinputlisting[label=gearef1, caption=定義前のコード]{./src/ex_code1} -\lstinputlisting[label=gearef2, caption=Gearef、GearImplを用いたコード]{./src/ex_code2} +%\lstinputlisting[label=gearef1, caption=定義前のコード]{./src/ex_code1} +%\lstinputlisting[label=gearef2, caption=Gearef、GearImplを用いたコード]{./src/ex_code2} -\section{stub Code Gear} -Code Gear が必要とする Data Gear を取り出す際に Context を通す必要があるが、 -Context を直接扱うのはセキュリティ上好ましくない。 -そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 -stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。 +%\section{stub Code Gear} +%Code Gear が必要とする Data Gear を取り出す際に Context を通す必要があるが、 +%Context を直接扱うのはセキュリティ上好ましくない。 +%そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 +%stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する間に挟まれる。 -\section{CbC による Gears OS 記述の問題} - -%メタの話 +\section{stub Code Gear の生成} Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 -\section{stub Code Gear の生成} stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 stub Code Gear を 自動生成する generate stub を Perl スクリプトで作成することによって Code Gear の記述量を約半分にすることができる。 @@ -300,6 +312,9 @@ \lstinputlisting[label=init_context, caption=生成されたinitContext]{./src/gencontext.c} +%\section{比較} +%\section{結論} + \section{今後の課題} 本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う Perl スクリプトの生成を行なった。 これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 diff -r dc0aa4a22e32 -r f57143305847 Paper/pic/metaCS.pdf Binary file Paper/pic/metaCS.pdf has changed diff -r dc0aa4a22e32 -r f57143305847 Paper/pic/metaCS.xbb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/pic/metaCS.xbb Thu Dec 21 18:57:57 2017 +0900 @@ -0,0 +1,8 @@ +%%Title: ./fig/metaCS.pdf +%%Creator: extractbb 20140317 +%%BoundingBox: 31 511 515 732 +%%HiResBoundingBox: 30.601520 511.100000 515.413800 732.012800 +%%PDFVersion: 1.3 +%%Pages: 1 +%%CreationDate: Mon Feb 15 05:21:55 2016 +