Mercurial > hg > Papers > 2018 > parusu-master
diff paper/gearsOS.tex @ 5:9efc9009838d
Add stub Code Gear session
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 18 Jan 2018 03:43:44 +0900 |
parents | 86340b0bf212 |
children | a0f9def49535 |
line wrap: on
line diff
--- a/paper/gearsOS.tex Wed Jan 17 08:48:28 2018 +0900 +++ b/paper/gearsOS.tex Thu Jan 18 03:43:44 2018 +0900 @@ -1,4 +1,11 @@ -\chapter{Gears OS} +\chapter{Gears OS の概念} +Gears OS は信頼性をノーマルレベルの計算に対して保証し、拡張性をメタレベルの計算で実現することを目標に開発している OSである。 + +Gears OS は処理の単位を Code Gear、データの単位を Data Gear と呼ばれる単位でプログラムを構成する。 +信頼性や拡張性はメタ計算として、通常の計算とは区別して記述する。 + +本章では Gears OS を構成する様々な要素について説明する。 + \section{Code GearとData Gear} Gears OS はプログラムとデータの単位として Gear を用いる。 Gear は並列実行の単位、データの分割、Gear 間の接続等になる。 @@ -25,6 +32,7 @@ \section{Continuation based C} Gears OS の実装は本研究室で開発されているCbC (Continuation based C) を用いて行う。 CbC は Code Gear を基本的な処理単位として記述できるプログラミング言語である。 +CbC の処理系として llvm/clang\cite{kaito-lola} と gcc\cite{nobu-prosym} による実装などが存在する。 CbC の記述例を\coderef{cg1}に, 実際にこのソースコードが実行される際の遷移を\figref{cg1}に示す。 CbC の Code Gear は \_\_code という型を持つ関数として記述する。 @@ -51,7 +59,7 @@ プログラムの記述する際は、ノーマルレベルの計算の他に、メモリ管理、スレッド管理、CPUがGPUの資源管理等を記述しなければならない処理が存在する。 これらの計算はノーマルレベルの計算と区別してメタ計算と呼ぶ。 -メタ計算は関数型言語では Monad を用いて表現される。 +メタ計算は関数型言語では Monad\cite{moggi-monad} を用いて表現される。 Monad は Haskell では実行時の環境を記述する構文として使われる。 従来の OS では、メタ計算はシステムコールやライブラリーコールの単位で行われる。 @@ -116,7 +124,7 @@ Queue の Interface を \coderef{queueInterface} に示す。 Interface は API となる Code Gear を \_\_code として 定義(\coderef{queueInterface} 6-9行目)する。 -この \_\_code 実体は Code Gear への番号が格納される変数であり、Interface の実装毎に値は変化する。 +この \_\_code の実体は Code Gear への番号が格納される変数であり、Interface の実装毎に値は変化する。 \lstinputlisting[caption=QueueのInterface, label=code:queueInterface]{./src/queueInterface.h} @@ -125,19 +133,32 @@ \lstinputlisting[caption=SingleLinkedQueue の実装, label=code:singleLinkedQueue]{./src/singleLinkedQueue.cbc} -Interface での Code Gear 呼び出しは ``goto interface->method'' という構文で行う。 +Interface での Code Gear 呼び出しは ``goto interface-\textgreater method'' という構文で行う。 ここの interface は createSingleLinkedQueue(\coderef{singleLinkedQueue} 3-14 行目) 等で初期化を行った Interface へのポインタ、method は実装した Code Gear の番号になる。 \coderef{singleLinkedQueueTest} に Queue Interface を使用した Code Gearの呼び出し例を示す。 -この呼び出しでは SingleLinkedQueue の put 実装に継続される。 +この呼び出しでは SingleLinkedQueue の put 実装に接続される。 \lstinputlisting[caption=Queue Interface での Code Gear の呼び出し, label=code:singleLinkedQueueTest]{./src/singleLinkedQueueTest.cbc} \coderef{singleLinkedQueueTest} は実際にはスクリプトによって \coderef{singleLinkedQueueTest_script} に変換されコンパイルされる。 \coderef{singleLinkedQueueTest_script} 内の Gearef マクロは Context から Interface の引数格納用の Data Gear を取り出す。 この引数格納用の Data Gear は Context の初期化の際に生成される。 -引数格納用の Data Gear を取り出した後は変換前の呼び出しの引数を Interface で定義した Code Gear の引数情報に合わせて格納し、 指定した Code Gear に継続する。 +引数格納用の Data Gear を取り出した後は変換前の呼び出しの引数を Interface で定義した Code Gear の引数情報に合わせて格納し、指定した Code Gear に接続する。 \lstinputlisting[caption=スクリプトによる変換後, label=code:singleLinkedQueueTest_script]{./src/singleLinkedQueueTest_script.cbc} \section {stub Code Gear} +stub Code Gear は Code Gear の接続の間に挟まれる Meta Code Gear である。 +ノーマルレベルの Code Gear から Meta Data Gear である Context を直接参照してしまうと、ユーザがメタ計算をノーマルレベルで自由に記述できてしまい、メタ計算を分離した意味がなくなってしまう。 +stub Code Gear はこの問題を防ぐため、 Context から必要な Data Gear のみを ノーマルレベルの Code Gear に渡す処理を行っている。 + +\coderef{stubCodeGear} に stub Code Gear の例を示す。 +stub Code Gear は使用される全ての Code Gear 毎に記述する必要がある。 +しかし、全ての Code Gear に対して stub Code Gear を記述するのは膨大な記述量になってしまうため、基本的にはスクリプトで自動生成する。 + +\lstinputlisting[caption=stub Code Gear, label=code:stubCodeGear]{./src/stubCodeGear.cbc} + +stub Code Gear はユーザーが自前で記述することも可能である。 +つまり、ユーザーがメタ計算を記述することができる。 +stub Code Gear を用いたメタ計算の例として、本来 stub Code Gear は対応した Code Gear に接続するが、自前で stub Code Gear を記述することで、接続先を柔軟に変更できる。