changeset 29:5dbe39f52406

add readsyscall_state
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 05 May 2020 11:12:41 +0900
parents 4fccee90e43a
children 1a9af340ad4a
files paper/anatofuz-sigos.md paper/anatofuz-sigos.pdf paper/anatofuz-sigos.tex paper/fig/readsyscall_state.pdf paper/md2tex.pl
diffstat 5 files changed, 49 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/paper/anatofuz-sigos.md	Mon May 04 18:41:35 2020 +0900
+++ b/paper/anatofuz-sigos.md	Tue May 05 11:12:41 2020 +0900
@@ -100,17 +100,20 @@
 
 ![lab:meta-cg-dg, cap:CodeGearとMetaCodeGear](./fig/meta-cg-dg.pdf)
 
-通常のコード中では図\ref{meta-cg-dg}の上段に示す様に入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
+通常のコード中では入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
+この流れを図\ref{meta-cg-dg}の上段に示す。
 しかし実際はCodeGearの実行の前後に実行されるMetaCodeGearや入出力のDataGearを保存場所から取り出すMetaDataGearなどのメタ計算が加わる。
+これは図\ref{meta-cg-dg}の下段に対応する。
 
 遷移先のCodeGearとMetaCodeGearの紐付けや、 計算に必要なDataGearを保存や管理を行うMetaDataGearとしてcontextがある。
-cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
 contextは処理に必要なCodeGearの番号とMetaCodeGearの対応表や、 DataGearの格納場所を持つ。
 計算に必要なデータ構造と処理を持つデータ構造であることから、 contextは従来のOSのプロセスに相当するものと言える。
+cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
+![lab:fig:context_ref, cap:Contextと各データの関係図](fig/Context_ref.pdf)
+
 コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
 MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。
 
-![lab:fig:context_ref, cap:Contextと各データの関係図](fig/Context_ref.pdf)
 
 # xv6 kernel
 
@@ -126,7 +129,16 @@
 xv6 kernelのファイルシステムは階層構造で表現されており、 最も低レベルなものにディスク階層、 抽象度が最も高いレベルのものにファイル記述子がある。
 
 
-# xv6のファイルシステムの一部の分析
+# xv6の継続の分析
+xv6の処理を継続を中心とした記述で再実装を行う。
+この際に、 xv6のどの処理に着目するかによって継続の実装が異なっていくことが実装につれてわかった。
+
+まずxv6の`read` システムコールに着目し、 システムコール内部でどのような状態を遷移するかを分析した。
+分析結果をCbCのCodeGearに変換し、 状態遷移図におこしたものを図\ref{fig:cbc_readsyscall}に示す。
+
+![lab:fig:cbc_readsyscall, cap:readシステムコールの状態遷移](fig/readsyscall_state.pdf)
+
+# Basic Blockに基づく分析
 
 xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。
 この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。
@@ -136,7 +148,8 @@
 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。
 
 
-# CbCを用いたxv6の書き換え方針
+
+# CbCを用いた部分的なxv6の書き換え
 
 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。
 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。
Binary file paper/anatofuz-sigos.pdf has changed
--- a/paper/anatofuz-sigos.tex	Mon May 04 18:41:35 2020 +0900
+++ b/paper/anatofuz-sigos.tex	Tue May 05 11:12:41 2020 +0900
@@ -126,7 +126,7 @@
 
 \begin{figure}[tb]
     \begin{center}
-        \includegraphics[width=70mm]{fig/cgdg.pdf}
+        \includegraphics[width=80mm]{fig/cgdg.pdf}
     \end{center}
     \caption{CodeGearと入出力の関係図}
     \label{fig:cgdg}
@@ -157,7 +157,7 @@
 
 \begin{figure}[tb]
     \begin{center}
-        \includegraphics[width=70mm]{fig/factorial_cbc.pdf}
+        \includegraphics[width=80mm]{fig/factorial_cbc.pdf}
     \end{center}
     \caption{CbCで階乗を求める例題の状態遷移}
     \label{fig:factorial_cbc}
@@ -188,30 +188,33 @@
 
 \begin{figure}[tb]
     \begin{center}
-        \includegraphics[width=70mm]{./fig/meta-cg-dg.pdf}
+        \includegraphics[width=80mm]{./fig/meta-cg-dg.pdf}
     \end{center}
     \caption{CodeGearとMetaCodeGear}
     \label{meta-cg-dg}
 \end{figure}
 
-通常のコード中では図\ref{meta-cg-dg}の上段に示す様に入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
+通常のコード中では入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
+この流れを図\ref{meta-cg-dg}の上段に示す。
 しかし実際はCodeGearの実行の前後に実行されるMetaCodeGearや入出力のDataGearを保存場所から取り出すMetaDataGearなどのメタ計算が加わる。
+これは図\ref{meta-cg-dg}の下段に対応する。
 
 遷移先のCodeGearとMetaCodeGearの紐付けや、 計算に必要なDataGearを保存や管理を行うMetaDataGearとしてcontextがある。
-cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
 contextは処理に必要なCodeGearの番号とMetaCodeGearの対応表や、 DataGearの格納場所を持つ。
 計算に必要なデータ構造と処理を持つデータ構造であることから、 contextは従来のOSのプロセスに相当するものと言える。
-コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
-MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。
-
+cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
 \begin{figure}[tb]
     \begin{center}
-        \includegraphics[width=70mm]{fig/Context_ref.pdf}
+        \includegraphics[width=80mm]{fig/Context_ref.pdf}
     \end{center}
     \caption{Contextと各データの関係図}
     \label{fig:context_ref}
 \end{figure}
 
+コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
+MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。
+
+
 \section{xv6 kernel}
 
 xv6とはマサチューセッツ工科大学でv6 OSを元に開発された教育用のUNIX OSである。
@@ -226,7 +229,22 @@
 xv6 kernelのファイルシステムは階層構造で表現されており、 最も低レベルなものにディスク階層、 抽象度が最も高いレベルのものにファイル記述子がある。
 
 
-\section{xv6のファイルシステムの一部の分析}
+\section{xv6の継続の分析}
+xv6の処理を継続を中心とした記述で再実装を行う。
+この際に、 xv6のどの処理に着目するかによって継続の実装が異なっていくことが実装につれてわかった。
+
+まずxv6の\texttt{read} システムコールに着目し、 システムコール内部でどのような状態を遷移するかを分析した。
+分析結果をCbCのCodeGearに変換し、 状態遷移図におこしたものを図\ref{fig:cbc_readsyscall}に示す。
+
+\begin{figure}[tb]
+    \begin{center}
+        \includegraphics[width=80mm]{fig/readsyscall_state.pdf}
+    \end{center}
+    \caption{readシステムコールの状態遷移}
+    \label{fig:cbc_readsyscall}
+\end{figure}
+
+\section{Basic Blockに基づく分析}
 
 xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。
 この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。
@@ -236,7 +254,8 @@
 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。
 
 
-\section{CbCを用いたxv6の書き換え方針}
+
+\section{CbCを用いた部分的なxv6の書き換え}
 
 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。
 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。
Binary file paper/fig/readsyscall_state.pdf has changed
--- a/paper/md2tex.pl	Mon May 04 18:41:35 2020 +0900
+++ b/paper/md2tex.pl	Tue May 05 11:12:41 2020 +0900
@@ -50,7 +50,7 @@
     $line = <<"EOF";
 \\begin{figure}[tb]
     \\begin{center}
-        \\includegraphics[width=70mm]{$3}
+        \\includegraphics[width=80mm]{$3}
     \\end{center}
     \\caption{$2}
     \\label{$1}