Mercurial > hg > Papers > 2019 > mitsuki-master
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
--- 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
--- 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のスレッドに対応する。
--- 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 に格納される。