# HG changeset patch # User mir3636 # Date 1524386103 -32400 # Node ID c39c2e8eddc7dbe6093e82802ac2cf1370811eee # Parent 8916b7fa1befa872f4679885fc93a1f2f7d10f1d update diff -r 8916b7fa1bef -r c39c2e8eddc7 Paper/sigos.tex --- a/Paper/sigos.tex Sun Apr 22 17:29:14 2018 +0900 +++ b/Paper/sigos.tex Sun Apr 22 17:35:03 2018 +0900 @@ -49,6 +49,8 @@ \author{ 宮城 光希\affiref{1} \and + 桃原 優 \affiref{1} + \and 河野 真治\affiref{2} } @@ -56,6 +58,8 @@ \eauthor{ Mitsuki MIYAGI\affiref{1} \and + Yu TOBARU\affiref{1} + \and Shinji KONO\affiref{2} } @@ -189,41 +193,8 @@ Gears OS ではメモリ管理は stub などのメタ計算部分で処理される。 例えば、寿命の短いスレッドでは使い捨ての線形アロケーションを用いる。 -\section{Continuation based C (CbC)} -CbC は Code Gear という処理の単位を用いて記述するプログラミング言語である。 -Code Gear は CbC における最も基本的な処理単位である。 -Code Gear は入力と出力を持ち、CbC では引数が入出力となっている。 -CbC では Code Gear は \_\_code という型を持つ関数の構文で定義される。 -ただし、これは \_\_code 型の戻り値を返すという意味ではなく、Code Gear であることを示すフラグである。 -Code Gear は戻り値を持たないので、Cの関数とは異なり return 文は存在しない。 - -Code Gear から次の Code Gear への遷移は goto による継続で処理を行い、次の Code Gear へ引数として入出力を与える。 -図\ref{fig:cs}は Code Gear 間の処理の流れを表している。 - -\begin{figure}[ht] - \begin{center} - \includegraphics[width=70mm]{./pic/codesegment.pdf} - \end{center} - \caption{goto による Code Gear 間の継続} - \label{fig:cs} -\end{figure} - -CbC の goto による継続は Scheme の継続と異なり呼び出し元の環境がないので、この継続は単なる行き先である。 -したがってこれを軽量継続と呼ぶ。 -軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。 - -\section{Gears OS} -Gears OS は Code Gear とデータの単位である Data Gear を用いて開発されており、CbC で記述されている。 -Gears OS では、並列実行するための Task を、実行する Code Gear と、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 -Gears OS は Input/Output Data Gear の依存関係が解決された CodeGear を並列実行する。 -Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。 -Code Gear は任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。 -また、接続された Data Gear 以外には参照を行わない。 -処理やデータの構造が Code Gear、Data Gear に閉じているため、これにより実行時間、メモリ使用量などを予測可能なものにすることができる。 - -Gears OS では メタ計算 を Meta Code Gear、Meta Data Gear で表現する。 -Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。 -これを図示したものが図\ref{fig:metaCS}である。 +%Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。 +%これを図示したものが図\ref{fig:metaCS}である。 \begin{figure}[ht] \begin{center} @@ -233,15 +204,6 @@ \label{fig:metaCS} \end{figure} -Gears OS は Context と呼ばれる使用されるすべての Code Gear、Data Gear 持っている Meta Data Gear を持つ。 -Gears OS は必要な Code Gear、Data Gear を参照したい場合、この Context を通す必要がある。 - -しかし Context を通常の計算から直接扱うのはセキュリティ上好ましくない。 -そこで Context から必要なデータを取り出して Code Gear に接続するMeta Code Gear である stub Code Gear を定義し、 -これを介して間接的に必要な Data Gear にアクセスする。 -stub Code Gear は Code Gear 毎に生成され、次の Code Gear へと継続する前に挿入される。 -goto による継続を行うと、実際には次の Code Gear の stub Code Gear を呼び出す。 - \section{Gears OS の構成} Gears OS は以下の要素で構成される。 @@ -262,10 +224,6 @@ \label{fig:gearsos} \end{figure} -Code\ref{context} は Context の定義を示している。 - -\lstinputlisting[caption=Contextの定義, label=context]{./src/context1.c} - Data Gear は union と struct によって表現される。 Context には Data Gear の Data Type の情報が格納されている。 この情報から確保する Data Gear のサイズなどを決定する。