diff paper/text/chapter2.tex @ 4:e94e544fce5c

...
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Sat, 15 Jan 2022 16:50:14 +0900
parents 905f551ddf59
children 47c5e331d020
line wrap: on
line diff
--- a/paper/text/chapter2.tex	Wed Jan 05 20:22:26 2022 +0900
+++ b/paper/text/chapter2.tex	Sat Jan 15 16:50:14 2022 +0900
@@ -1,14 +1,69 @@
 \chapter{Continuation based C}
+Continuation based C(CbC)\cite{cbcllvm,cbc}とはCの下位言語である.
+function callの代わりにgotoによる継続を用いる.
+CbCのプログラムはCodeGearと呼ばれる処理の単位で記述し,ノーマルレベルとメタレベルの処理を切り分けることが可能である.
+
 \section{CodeGearとDataGear}
+CbCでは関数の代わりにCodeGearという単位でプログラミングを行う.
+CodeGearは\emph{\_\_code}という記述で宣言することができる.
+データの単位にはDataGearと呼ばれる変数データを用いる.
+DataGearを入力として受け取り,別のDataGearに書き込み出力することができる.
+特に入力のDataGearをInput DataGear,出力のDataGearをOutput DataGearと呼ぶ.
+gotoで次のCodeGearに遷移することができ,その際Output DataGearを次のCodeGearのInput DataGearとして渡すことができる.
+
 \section{ノーマルレベルとメタレベル}
-\section{継続性}
+図\ref{fig:meta-cgdg}はCodeGearの遷移とMetaCodeGearの関係を表している.
+ノーマルレベルで見るとCodeGearがDataGearを受け取り,
+処理後,DataGearを次のCodeGearに渡すという動作をしているように見える.
+実際にはデータの整合性の確認や資源管理などのメタレベルの処理が存在し,
+それらの計算はMetaCodeGearで行われる.
+その際,MetaCodeGearに渡されるDataGearのことは特にMetaDataGearと呼ばれる.
+CodeGearの前に実行されるMetaCodeGearは特にstubCodeGearと呼ばれ,
+メタレベルを含めるとstubCodeGearとCodeGearを交互に実行する形で遷移していく.
+\begin{figure}[h]
+  \begin{center}
+      \includegraphics[width=100mm]{figs/meta-cg-dg.pdf}
+  \end{center}
+      \caption{CodeGearとMetaCodeGearの関係}
+  \label{fig:meta-cgdg}
+\end{figure}
+
+\section{継続}
+CodeGearから次のCodeGearに遷移していく一連の動作を継続と呼ぶ.
+CbCの継続はfunction callをせずにgotoによるjmpで行われる.
+function callによる継続と異なり,jmpによる継続はstackなどの環境を保存しないことから軽量である.
+そのことからCbCにおける継続を特に軽量継続と呼ぶ.
+
+\section{CbCの記述例}
+CbCのプログラム例をソースコード\ref{src:cbc}に示す.まずmain関数においてadd1 CodeGearへgotoを行う.
+その際add1へInput DataGearとしてnを渡す.
+add1は処理の最後にadd2 CodeGearへgotoを行う.
+その際Output DataGear out\_nをadd2のInput DataGearとして渡す.
+このようにCbCではCodeGearのOutput DataGearを次のCodeGearのInput DataGearとして渡すことを繰り返すことで処理を進める.
+
+\lstinputlisting[caption=CbCのプログラム例,label=src:cbc]{src/hello.cbc}
+
 
 \chapter{GearsOS}
+GearsOS\cite{gears,gearsos,cr}は 信頼性と拡張性の両立を目的として,開発されている.
+Gearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ.
+軽量継続を基本とし,stackを持たない代わりに全てをContext経由で実行する.
+ノーマルレベルとメタレベルの処理を切り分けることができ,同様にGearの概念を持つCbC(Continuation based C)で記述されている.
+GearsOSは現在開発途上であり,OSとして動作するために今後実装しなければならない機能がいくつか残っている.
 \section{信頼性の保証}
 \section{stub}
 \section{context}
 
 \chapter{Christie}
+Christieは当研究室で開発を行っているJavaで記述された分散フレームワークである.
+CodeGear,DataGear,CodeGearManager,DataGearManagerなどのCbCと似ているが別物のGearという概念を持つ.
+CodeGearはクラスやスレッドに相当する.DataGearは変数データに相当し,Javaのアノテーションを用いて記述される.
+CodeGearManagerはいわゆるノードに相当し,CodeGear,DataGear,DataGearManagerを管理する.
+複数のCodeGearManager同士が配線され,DataGearを送信し合うことで分散処理を実現している.
+DataGearManagerはDataGearを管理しているもので変数プールに相当する.
+GearsOSではDataGearManagerの仕組みをファイルシステムとして用いたい.
+さらに,ChristieにはTopologyを形成するためのTopologyManagerがある.
+TopologyManagerはCodeGearManagerを任意の形のTopologyに接続する機能を持っている.
 \section{Gearの概念}
 \section{DataGearManager}
 \section{topology manager}
@@ -30,6 +85,12 @@
 \section{logによるバージョン管理}
 
 \chapter{WordCount}
+WordCount例題\cite{file}はGearsOSのファイルシステムを構築する際に用いてる例題である.
+指定したファイルの文字数や行数,ファイルの内の文字列を出力する.
+図\ref{fig:WCStates}はWordCount例題の処理の流れを示している.
+大きく分けて,指定したファイルをFile構造体としてopenするFileOpenスレッド,
+File構造体を受け取り文字数と行数をcountUpするWordCountスレッドの二つのCodeGearで記述することができる.
+ファイル内の文字列を行ごとにCountUpに送信し,EOFを受け取ったらループを抜けfinishに移行する.
 \section{API}
 \section{GearBox的な処理}