Mercurial > hg > Papers > 2018 > parusu-master
diff paper/gearsOS.tex @ 2:b3fc9cc0d85f
Add section
author | Tatsuki IHA <innparusu@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 07 Jan 2018 05:22:05 +0900 |
parents | |
children | 86340b0bf212 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/paper/gearsOS.tex Sun Jan 07 05:22:05 2018 +0900 @@ -0,0 +1,52 @@ +\chapter{Gears OS} +\section{Code GearとData Gear} +Gears OS はプログラムとデータの単位として Gear を用いる。 +Gear は並列実行の単位、データの分割、Gear 間の接続等になる。 + +Code Gear はプログラムの処理そのもので、任意の数の Input Data Gear を参照し、処理が完了すると任意の数の Output Data Gear に書き込む。 +また、Code Gear は接続された Data Gear 以外には参照を行わない。 +Gears OS では \figref{codegear-datagear} で示しているように Code Gear と Input / Output Data Gear の対応から依存関係を解決し、 Code Gear の並列実行を可能とする。 + +Code Gear 間の移動は継続を用いて行われる。 +継続は関数呼び出しとは異なり、呼び出し元に戻らず、Code Gear 内で次の Code Gear への継続を行う。 +そのため Code Gear, Data Gear を使ったプログラミングは末尾再帰を強制したスタイルになる。 + +Gear の特徴として処理やデータの構造が Code Gear、 Data Gear に閉じていることにある。 +これにより、実行時間、メモリ使用量などを予想可能なものにする事が可能になる。 + +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=1.0]{./fig/codegear-datagear.pdf} + \end{center} + \caption{Code Gear と Data Gear の依存関係} + \label{fig:codegear-datagear} +\end{figure} + +\section{Continuation based C} +Gears OS の実装は本研究室で開発されているCbC(Continuation based C) を用いて行う。 +CbC は Code Gear を基本的な処理単位として記述できるプログラミング言語である。 + +CbC の記述例を\coderef{cg1}に, 実際にこのソースコードが実行される際の遷移を\figref{cg1}に示す。 +CbC の Code Gear は \_\_code という型を持つ関数として記述する。 +Code Gear は継続で次の Code Gear に遷移する性質上、関数とは違い戻り値は持たない。 +そのため、\_\_code は Code Gear の戻り値ではなく、Code Gear であることを示すフラグとなっている。 +Code Gear から次の Code Gear への遷移は goto による継続で処理を行い、次の Code Gear への引数として入出力を与える。 +\coderef{cg1}内の goto cg1(a+b); が継続にあたり、(a+b) がcg1 への入力になる。 + +CbC の goto による継続は Scheme の継続と異なり、呼び出し元の環境を必要とせず、行き先を指定すれば良い。 +したがって、この継続を軽量継続と呼ぶ。 + +\lstinputlisting[caption=CodeSegmentの軽量継続, label=code:cg1]{./src/cg1.cbc} + +\begin{figure}[htbp] + \begin{center} + \includegraphics[scale=1.0]{./fig/goto.pdf} + \end{center} + \caption{goto による Code Gearの軽量継続} + \label{fig:cg1} +\end{figure} + +\section{Meta Computation} + +\section{Context} +\section{Interface}