# HG changeset patch # User mir3636 # Date 1523611478 -32400 # Node ID 4d5bd76a70df12100d8781dc2c646ef634b598a5 # Parent 7880e4a8895b7b872f0de6cc67bd9cdd98535a71 fix diff -r 7880e4a8895b -r 4d5bd76a70df Paper/parGotoCreateTask.cbc --- a/Paper/parGotoCreateTask.cbc Fri Apr 13 18:02:52 2018 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -__code code1(Integer *integer1, Integer * integer2, Integer *output) { - par goto add(integer1, integer2, output, __exit); - goto code2(); -} diff -r 7880e4a8895b -r 4d5bd76a70df Paper/sigos.pdf Binary file Paper/sigos.pdf has changed diff -r 7880e4a8895b -r 4d5bd76a70df Paper/sigos.tex --- a/Paper/sigos.tex Fri Apr 13 18:02:52 2018 +0900 +++ b/Paper/sigos.tex Fri Apr 13 18:24:38 2018 +0900 @@ -94,15 +94,6 @@ % 本文はここから始まる -% Introduce -% Code Gear は関数に比べて細かく分割されているのでメタ計算をより柔軟に記述できる。 - -% 研究目的 - -% 信頼性の高いOS -% これをアセンブラにしていろいろなアプリケーションを作る -% きょだいなCDGの上で動かすと既存のアプリケーションを動かすことができる - \section{OS の拡張性と信頼性の両立} さまざまなコンピュータの信頼性の基本はメモリなどの資源管理を行う OS である。OS の信頼性を保証する事自体が難しいが、時代とともに進歩する @@ -252,7 +243,6 @@ Gears OS では メタ計算 を Meta Code Gear、Meta Data Gear で表現する。 Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。 これを図示したものが図\ref{fig:metaCS}である。 -%Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。 \begin{figure}[ht] \begin{center} @@ -317,16 +307,13 @@ \lstinputlisting[label=interface, caption=StackのInterface]{./src/Stack.cbc} -Code\ref{implement}は stack の Implement の例である。 -createImpl は関数呼び出しで呼び出され、Implement の初期化と Code Gear のスロットに対応する Code Gear の番号を入れる。 +Code\ref{implement}は stack の実装の例である。 +createImpl は関数呼び出しで呼び出され、初期化と Code Gear のスロットに対応する Code Gear の番号を入れる。 -\lstinputlisting[label=implement, caption=SingleLinkedStackのImplement]{./src/stackimpl.cbc} +\lstinputlisting[label=implement, caption=SingleLinkedStackの実装]{./src/stackimpl.cbc} \section{stub Code Gear の生成} -Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。 -これらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。 - stub Code Gear は Code Gear 間の継続に挟まれる Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。 Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。 stub Code Gear を 自動生成する generate stub を Perl スクリプトで作成することによって Code Gear の記述量を約半分にすることができる。 @@ -363,9 +350,6 @@ Code Gear は Context を通して Data Gear へアクセスする。 Data Gear の Allocation を行うコードは dataGearInit.cに生成される。 -Data Gear は union Data とその中の struct によって表現される。 -Context には Data Gear の Data Type の情報が格納されている。 -この情報から確保される Data Gear のサイズなどを決定する。 \section{Gears OS の並列処理} Gears OS では実行の Task を Code Gear と Input/Output Data Gear の組で表現する。 @@ -407,8 +391,6 @@ \lstinputlisting[caption=SynchronizedQueue の定義, label=synchronizedQueue]{./src/synchronizedQueue.h} -%\section{依存関係の解決} - \section{並列構文} Gears OS の並列構文は par goto文で用意されている(Code\ref{pargoto})。 \lstinputlisting[caption=par goto による並列実行, label=pargoto]{./src/parGotoCreateTask.cbc} @@ -479,12 +461,13 @@ 証明手法は、従来では Hoare Logic \cite{Chen:2015:UCH:2815400.2815402}のような Post Condition / Pre Condition を用いる方法が使われている。 現在のGearsは、Agda への変換は考えているが、その上の具体的な証明方法はまだ用意されていない。 -\section{今後の課題} -本論文では Code Gear、 Data Gear によって構成される Gears OS のプロトタイプの設計、実装、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う Perl スクリプトの生成を行なった。 +\section{結論} +本論文では Gears OS のプロトタイプの設計と実装、メタ計算である Context と stub の生成を行う Perl スクリプトの記述、並列実行機構の実装を行った。 Code Gear 、Data Gear を処理とデータの単位として用いて Gears OS を設計した。 Code Gear、Data Gear にはメタ計算を記述するための Meta Code Gear、Meta Data Gear が存在する。 メタ計算を Meta Code Gear、によって行うことでメタ計算を階層化して行うことができる。 Code Gear は関数より細かく分割されてるためメタ計算を柔軟に記述できる。 +Gears OS は Code Gear と Input/Output Data Gear の組を Task とし、並列実行を行う。 Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。 Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。 @@ -497,11 +480,14 @@ このため Context から必要なデータを取り出して Code Gear に接続する Meta Code Gear である stub Code Gear を定義した。 stub Code Gear は Code Gear 毎に記述され、Code Gear 間の遷移に挿入される。 +並列処理を行う際は Context を生成し、 Code Gear と Input/Output Data Gear を Context に設定して TaskManager 経由で各 Worker の SynchronizedQueue に送信される。 +Context の設定はメタレベルの記述になるため、ノーマルレベルでは par goto 文という CbC の goto 文に近い記述で並列処理を行える。 +この par goto は通常のプ ログラミングの関数呼び出しのように扱える。 + これらのメタ計算の記述は煩雑であるため Perl スクリプトによる自動生成を行なった。 これにより Gears OS のコードの煩雑さは改善され、ユーザーレベルではメタを意識する必要がなくなった。 -今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。 -また、今回 Perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 +今後の課題は、今回 Perl スクリプトによって Context や stub などのメタ計算の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。 \nocite{*} \bibliographystyle{ipsjunsrt} diff -r 7880e4a8895b -r 4d5bd76a70df Paper/src/parGotoCreateTask.cbc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Paper/src/parGotoCreateTask.cbc Fri Apr 13 18:24:38 2018 +0900 @@ -0,0 +1,4 @@ +__code code1(Integer *integer1, Integer * integer2, Integer *output) { + par goto add(integer1, integer2, output, __exit); + goto code2(); +}