changeset 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 7df8596223fb
children 106c1d35afd2
files paper/gearsOS.tex paper/master_paper.pdf
diffstat 2 files changed, 27 insertions(+), 6 deletions(-) [+]
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 を記述することで、接続先を柔軟に変更できる。
Binary file paper/master_paper.pdf has changed