Mercurial > hg > Papers > 2017 > mitsuki-sigos
diff paper/sigos.tex @ 9:9df52fe5b3d7
up
author | mir3636 |
---|---|
date | Sat, 22 Apr 2017 16:44:02 +0900 |
parents | e04e25ad2f3c |
children | 52b6be8721f8 |
line wrap: on
line diff
--- a/paper/sigos.tex Fri Apr 21 21:23:36 2017 +0900 +++ b/paper/sigos.tex Sat Apr 22 16:44:02 2017 +0900 @@ -128,7 +128,7 @@ CbC での記述はメタ計算を含まないノーマルレベルでの記述と、 Code Gear、Data Gear の記述を含むメタレベルの記述の2種類がある。 メタレベルでもさらに、メタ計算を用いることが可能になっている。 この2つのレベルはプログラミング言語レベルでの変換として実現される。 -CbC は LLVM 上で実装されており、メタレベルでの変換系は本論文では、Perl による変換スクリプトにより実装されている。 +CbC は LLVM\cite{llvm} 上で実装されており、メタレベルでの変換系は本論文では、Perl による変換スクリプトにより実装されている。 Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 @@ -223,7 +223,7 @@ Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear を持つ。 Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。 -\lstinputlisting[label=context, caption=context]{./src/context1.c} +\lstinputlisting[label=context, caption=Context]{./src/context1.c} Data Gear は union と struct によって表現される。 Context には Data Gear の Data Type の情報が格納されている。 @@ -234,62 +234,35 @@ Gears OS における Task Queue は Synchronized Queue で実現される。 Worker は TaskQueue から Task である Context を取得し、 Input/Output Data Gear の依存関係が解決されたものから並列実行される。 - - \section{CbC のコードの例} -リスト\ref{excbc}は CbC で記述された stack のコードの一部である。 +Code\ref{excbc}は CbC で記述された stack のコードの一部である。 Code Gear は \_\_code Code Gear で始まり、次の Code Gear へ goto で遷移する。 %,,,の説明 %codegearの説明もっとする? -\lstinputlisting[label=excbc, caption=cbccode]{./src/ex_stack.cbc} +\lstinputlisting[label=excbc, caption=stack.cbc]{./src/ex_stack.cbc} \section{CbC による Gears OS 記述の問題} - - %メタの話 Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 - - \section{interface の記述} -% union data はジェネラルなデータセグメントこれには -% goto のひきすうとしてつかう フレームを表している -%関数呼び出しのabi -%ひきすうで呼び出されるcg ひきすうはぜんぶ定義されていなければならない -%メタデータセグメント -%名前付きの変数が現れる -%書き込みは**読み込みは* -%いんたーふぇーすなので実装がいる - - - - - - - interface は呼び出しの引数になる Data Gear の集合であり、そこで呼び出される Code Gear のエントリである。 呼び出される Code Gear の引数となる Data Gear はここで全て定義される。 - - Code Gear、Data Gear に参照するために Context を通す必要があるが、 interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。 %create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。 %return で interface を返し、その先で Code Gear や Data Gear へ継続できるようになる。 -\lstinputlisting[label=interface, caption=interface]{./src/Stack.cbc} +\lstinputlisting[label=interface, caption=Interface]{./src/Stack.cbc} \section{Gearef、GearImpl} - - - - Context には Allocation 等で生成した Data Gear へのポインタが格納されている。 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すため、リスト\ref{gearef1} のようにコードが煩雑になってしまう。 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。 @@ -309,7 +282,7 @@ \section{Context、stub Code Segment の自動生成} Gears OS では 通常の計算の他に Context や stub などのメタ計算を記述する必要があが、Gears OS を現在の CbC の機能のみを用いて記述するとこのメタ計算の記述を行わなくてはならず、これには多くの労力を要する。 -この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を perl スクリプトで作成した。 +この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を Perl スクリプトで作成した。 \section{stub Code Segment の生成} stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 @@ -326,8 +299,18 @@ \lstinputlisting[label=stack_c, caption=stub]{./src/ex_stub} \section{Context の生成} +generate\_context は Context.h、Interface.cbc、generate\_stub で生成されたImpl.cbc を見て Context を生成する。 + +\begin{figure}[ht] + \begin{center} + \includegraphics[width=70mm]{./pic/generate_context3.pdf} + \end{center} + \caption{generate\_context による Context の生成} + \label{fig:gc} +\end{figure} + Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 -Data Gear を取得するために generate context は context の定義 (Code\ref{context}) を読み宣言されている Data Gear を取得する。 +Data Gear を取得するために generate\_context は context の定義 (Code\ref{context}) を読み宣言されている Data Gear を取得する。 Code Gear の取得は指定された generate\_stub で生成されたコードから \_\_code 型を見て行う。 取得した Code Gear、Data Gear の enum の定義は enumCode.h、enumData.h に生成される。 @@ -343,18 +326,15 @@ Context には Data Gear の Data Type の情報が格納されている。 この情報から確保される Data Gear のサイズなどを決定する。 -\lstinputlisting[label=init_context, caption=initcontext]{./src/context2.c} +\lstinputlisting[label=init_context, caption=init-context]{./src/context2.c} \section{今後の課題} -本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。 +本研究では LLVM/Clang のデバッグ、interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う Perl スクリプトの生成を行なった。 これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。 -%しかし、現在のスクリプトでは stub +今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 +また、今回 Perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 -今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 -また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 - -% めたけいさんをどこに挟むかというのをかく 上 %\begin{figure}[ht] % \begin{center}