changeset 22:d5f62ca8d3e9

update
author mir3636
date Sun, 03 Feb 2019 03:55:49 +0900
parents 2f235b4308d2
children f3c8f355c05a
files paper/fig/IO_DataGear.graffle paper/fig/IO_DataGear.pdf paper/fig/IO_DataGear.xbb paper/fig/MetaGear.graffle paper/fig/MetaGear.pdf paper/fig/MetaGear.xbb paper/gearsOS.tex paper/master_paper.pdf paper/meta_computation.tex
diffstat 9 files changed, 60 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
Binary file paper/fig/IO_DataGear.graffle has changed
Binary file paper/fig/IO_DataGear.pdf has changed
--- a/paper/fig/IO_DataGear.xbb	Thu Jan 31 03:56:37 2019 +0900
+++ b/paper/fig/IO_DataGear.xbb	Sun Feb 03 03:55:49 2019 +0900
@@ -4,5 +4,5 @@
 %%HiResBoundingBox: 0.000000 0.000000 794.000000 277.000000
 %%PDFVersion: 1.3
 %%Pages: 1
-%%CreationDate: Fri Jan 18 21:35:54 2019
+%%CreationDate: Sat Feb  2 21:34:49 2019
 
Binary file paper/fig/MetaGear.graffle has changed
Binary file paper/fig/MetaGear.pdf has changed
--- a/paper/fig/MetaGear.xbb	Thu Jan 31 03:56:37 2019 +0900
+++ b/paper/fig/MetaGear.xbb	Sun Feb 03 03:55:49 2019 +0900
@@ -1,8 +1,8 @@
 %%Title: fig/MetaGear.pdf
 %%Creator: extractbb 20160307
-%%BoundingBox: 0 0 792 532
-%%HiResBoundingBox: 0.000000 0.000000 792.000000 532.000000
+%%BoundingBox: 0 0 795 504
+%%HiResBoundingBox: 0.000000 0.000000 795.000000 504.000000
 %%PDFVersion: 1.3
 %%Pages: 1
-%%CreationDate: Wed Jul 11 21:17:57 2018
+%%CreationDate: Sat Feb  2 07:10:58 2019
 
--- a/paper/gearsOS.tex	Thu Jan 31 03:56:37 2019 +0900
+++ b/paper/gearsOS.tex	Sun Feb 03 03:55:49 2019 +0900
@@ -10,6 +10,16 @@
 
 ・Workers
 
+Data Gear は union と struct によって表現される。
+Context には Data Gear の Data Type の情報が格納されている。
+この情報から確保する Data Gear のサイズなどを決定する。
+
+%Context は Task でもあり、Taskは通常のOSのスレッドに対応する。
+%Task は実行する Code Gear と Data Gear をすべて持っている。
+TaskManager は Task を実行する Worker の生成、管理、Task の送信を行う。
+Gears OS における Task Queue は Synchronized Queue で実現される。
+Worker は TaskQueue から Task である Context を取得し、Task の Code Gear を実行し、Output Data Gear の書き出しを行っている。
+Input/Output Data Gear の依存関係が解決されたものから並列実行される。
 
 図\ref{fig:gearsos} に Gears OS の構成図を示す。
 
@@ -21,16 +31,7 @@
  \label{fig:gearsos}
 \end{figure}
 
-Data Gear は union と struct によって表現される。
-Context には Data Gear の Data Type の情報が格納されている。
-この情報から確保する Data Gear のサイズなどを決定する。
-
-%Context は Task でもあり、Taskは通常のOSのスレッドに対応する。
-%Task は実行する Code Gear と Data Gear をすべて持っている。
-TaskManager は Task を実行する Worker の生成、管理、Task の送信を行う。
-Gears OS における Task Queue は Synchronized Queue で実現される。
-Worker は TaskQueue から Task である Context を取得し、Task の Code Gear を実行し、Output Data Gear の書き出しを行っている。
-Input/Output Data Gear の依存関係が解決されたものから並列実行される。
+TaskManager は Task である Context の生成を行う(眠い)
 
 \section{Context}
 Context は Task でもあり、Taskは通常のOSのスレッドに対応する。
Binary file paper/master_paper.pdf has changed
--- a/paper/meta_computation.tex	Thu Jan 31 03:56:37 2019 +0900
+++ b/paper/meta_computation.tex	Sun Feb 03 03:55:49 2019 +0900
@@ -10,12 +10,13 @@
 
 \section{Continuation based C}
 CbC は処理を Code Gear とした単位を用いて記述するプログラミング言語である。
-Code Gear 間では軽量継続 (goto文) による遷移を行うので、継続前の Code Gear に戻ることはなく、状態遷移ベースのプログラミングに適している。
+Code Gear 間では軽量継続 (goto文) による遷移を行うので、継続前の Code Gear に戻ることはなく、
+状態遷移ベースのプログラミングに適している。
 図\ref{fig:cs}は Code Gear 間の処理の流れを表している。
 
 \begin{figure}[htpb]
  \begin{center}
-  \scalebox{0.7}{\includegraphics{fig/codesegment.pdf}}
+  \scalebox{0.9}{\includegraphics{fig/codesegment.pdf}}
  \end{center}
  \caption{goto による code gear 間の継続}
  \label{fig:cs}
@@ -28,7 +29,7 @@
 \section{Code Gear}
 
 Code Gear は CbC における最も基本的な処理単位である。
-リスト \ref{code_simple} はCbC における Code Gear の一例である。
+ソースコード \ref{code_simple} はCbC における Code Gear の一例である。
 
 \begin{lstlisting}[frame=lrbt,label=code_simple,caption={\footnotesize code segment の軽量継続}]
 __code cs0(int a, int b){
@@ -43,7 +44,7 @@
 Code Gear は\_\_code Code Gear 名 (引数) の形で記述される。
 Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。
 次の Code Gear への遷移は goto Code Gear 名 (引数) で次の Code Gear への遷移を記述する。
-リスト \ref{code_simple} での goto cs1(a+b); がこれにあたる。
+ソースコード \ref{code_simple} での goto cs1(a+b); がこれにあたる。
 この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる。
 Scheme の継続と異なり CbC には呼び出し元の環境がないので、この継続は単なる行き先である。
 したがってこれを軽量継続と呼ぶこともある。
@@ -51,24 +52,25 @@
 軽量継続により、並列化、ループ制御、関数コールとスタックの操作を意識した最適化がソースコードレベルで行えるようにする。
 
 \section{Data Gear}
-Data Gear は Gears におけるデータの単位である。
+Data Gear は Gears OS におけるデータの単位である。
 Gears OS では Code Gear は Input Data Gear、Output Data Gear を引数に持ち、
-任意の Input Data Gear を参照し、Output Data Gear を書き出す。\ref{fig:IODataGear}
+任意の Input Data Gear を参照し、Output Data Gear を書き出す。図\ref{fig:IODataGear}
 Code Gear はこのとき渡された引数の Data Gear 以外を参照することはない。
 この Data Gear の対応から依存関係の解決を行う。
 
 \begin{figure}[ht]
  \begin{center}
-  \includegraphics[width=100mm]{fig/IO_DataGear.pdf}
+  \includegraphics[width=130mm]{fig/IO_DataGear.pdf}
  \end{center}
  \caption{CodeGear と DataGear}
  \label{fig:IODataGear}
 \end{figure}
 
-ソースコード \ref{Gears_code} は Gears OS での Stack の操作の Code Gear の例である。
+ソースコード \ref{Gears_code} は Gears OS での Stack の pop 操作の Code Gear の例である。
 popSingleLinkedStack での引数 stack が Input Data Gear、next は継続先の Code Gear のアドレス、
 next の引数の data が Output Data Gear、... は可変長引数であることを示している。
-pop の操作を行った後に goto next で引数で受けた次の Code Gear へと継続する。
+Input Data Gear で受け取った Stack に対して pop の操作を行った後に、
+取り出したデータを Output Data Gear として書き出し、goto next で引数で受けた次の Code Gear へと継続する。
 
 \begin{lstlisting}[frame=lrbt,label=Gears_code,caption={\footnotesize Gears でのStack pop}]
 
@@ -95,7 +97,25 @@
 
 \section{Meta Code Gear、Meta Data Gear}
 Gears OS ではメタ計算 を Meta Code Gear、Meta Data Gear で表現する。
-Meta Code Gear は通常の Code Gear の直後に遷移され、メタ計算を実行する。
+Meta Code Gear は通常の Code Gear の直前、直後に遷移され、メタ計算を実行する。
+Code Gear はノーマルレベルでは図 \ref{fig:normal_Code_Gear} のように見える。
+メタレベルでは Code Gear は図 \ref{fig:meta_Code_Gear} のように継続を行なっている。
+
+\begin{figure}[ht]
+ \begin{center}
+  \includegraphics[width=60mm]{fig/normal_Code_Gear.pdf}
+ \end{center}
+ \caption{ノーマルレベルの Code Gear の継続}
+ \label{fig:normal_Code_Gear}
+\end{figure}
+
+\begin{figure}[ht]
+ \begin{center}
+  \includegraphics[width=100mm]{fig/meta_Code_Gear.pdf}
+ \end{center}
+ \caption{メタレベルの Code Gear の継続}
+ \label{fig:meta_Code_Gear}
+\end{figure}
 
 Gears OS では Context と呼ばれる、使用されるすべての Code Gear、Data Gear を持つ Meta Data Gear を持っている。
 Gears OS は必要な Code Gear、Data Gear を参照したい場合、この Context を通す必要がある。
@@ -103,14 +123,27 @@
 そこで Context から必要なデータを取り出して Code Gear に接続する Meta Code Gear を定義し、
 これを介して間接的に必要な Data Gear にアクセスする。
 この Meta Code Gear を stub Code Gear と呼ぶ。
-%code を入れる
 stub Code Gear は Code Gear 毎にあり、次の Code Gear へと継続する前に挿入される。
 つまり goto による継続を行うと、実際には次の Code Gear の stub Code Gear を呼び出す。
 stub Code Gear では、継続先が求める Input Code Gear、Output Code Gear を Context から参照している。
 
+図 \ref{fig:Context_ref} はメタレベルで見た Data Gear へのアクセスを図示したものである。
+メタレベルでは Code Gear は Context が持つ Data Gear へのポインタを渡されており、
+そこへ Output を行う。
+stub Code Gear は Meta Data Gear である Context が持つ Data Gear を、
+Input Data Gear、Output Data Gear として参照し、
+継続先のノーマルレベルの Code Gear へと遷移する。
+
+\begin{figure}[ht]
+ \begin{center}
+  \includegraphics[width=140mm]{fig/Context_ref.pdf}
+ \end{center}
+ \caption{Context が持つ Data Gear へのアクセス}
+ \label{fig:Context_ref}
+\end{figure}
 
 Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。
-Interface は使用される Data Gear の定義と、それに対する操作を行う Code Gear の集合である。
+Interface は使用される全ての Data Gear の定義と、それに対する操作を行う Code Gear の集合である。
 Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。
 Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して指定される。
 一つの実行スレッド内で使われる Interface の Code Gear と Data Gear は Context に格納される。