comparison paper/anatofuz-sigos.tex @ 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
comparison
equal deleted inserted replaced
28:4fccee90e43a 29:5dbe39f52406
124 CodeGearがアクセスできるDataGearは、 InputDataGearとOutputDataGearに限定される。 124 CodeGearがアクセスできるDataGearは、 InputDataGearとOutputDataGearに限定される。
125 これらの関係図を図\ref{fig:cgdg}に示す。 125 これらの関係図を図\ref{fig:cgdg}に示す。
126 126
127 \begin{figure}[tb] 127 \begin{figure}[tb]
128 \begin{center} 128 \begin{center}
129 \includegraphics[width=70mm]{fig/cgdg.pdf} 129 \includegraphics[width=80mm]{fig/cgdg.pdf}
130 \end{center} 130 \end{center}
131 \caption{CodeGearと入出力の関係図} 131 \caption{CodeGearと入出力の関係図}
132 \label{fig:cgdg} 132 \label{fig:cgdg}
133 \end{figure} 133 \end{figure}
134 134
155 } 155 }
156 \end{lstlisting} 156 \end{lstlisting}
157 157
158 \begin{figure}[tb] 158 \begin{figure}[tb]
159 \begin{center} 159 \begin{center}
160 \includegraphics[width=70mm]{fig/factorial_cbc.pdf} 160 \includegraphics[width=80mm]{fig/factorial_cbc.pdf}
161 \end{center} 161 \end{center}
162 \caption{CbCで階乗を求める例題の状態遷移} 162 \caption{CbCで階乗を求める例題の状態遷移}
163 \label{fig:factorial_cbc} 163 \label{fig:factorial_cbc}
164 \end{figure} 164 \end{figure}
165 165
186 MetaCodeGearやMetaDataGearは、プログラマが直接実装することはなく、 現在はPerlスクリプトによってGearsOSのビルド時に生成される。 186 MetaCodeGearやMetaDataGearは、プログラマが直接実装することはなく、 現在はPerlスクリプトによってGearsOSのビルド時に生成される。
187 CodeGearから別のCodeGearに遷移する際のDataGearなどの関係性を、図\ref{meta-cg-dg}に示す。 187 CodeGearから別のCodeGearに遷移する際のDataGearなどの関係性を、図\ref{meta-cg-dg}に示す。
188 188
189 \begin{figure}[tb] 189 \begin{figure}[tb]
190 \begin{center} 190 \begin{center}
191 \includegraphics[width=70mm]{./fig/meta-cg-dg.pdf} 191 \includegraphics[width=80mm]{./fig/meta-cg-dg.pdf}
192 \end{center} 192 \end{center}
193 \caption{CodeGearとMetaCodeGear} 193 \caption{CodeGearとMetaCodeGear}
194 \label{meta-cg-dg} 194 \label{meta-cg-dg}
195 \end{figure} 195 \end{figure}
196 196
197 通常のコード中では図\ref{meta-cg-dg}の上段に示す様に入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。 197 通常のコード中では入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
198 この流れを図\ref{meta-cg-dg}の上段に示す。
198 しかし実際はCodeGearの実行の前後に実行されるMetaCodeGearや入出力のDataGearを保存場所から取り出すMetaDataGearなどのメタ計算が加わる。 199 しかし実際はCodeGearの実行の前後に実行されるMetaCodeGearや入出力のDataGearを保存場所から取り出すMetaDataGearなどのメタ計算が加わる。
200 これは図\ref{meta-cg-dg}の下段に対応する。
199 201
200 遷移先のCodeGearとMetaCodeGearの紐付けや、 計算に必要なDataGearを保存や管理を行うMetaDataGearとしてcontextがある。 202 遷移先のCodeGearとMetaCodeGearの紐付けや、 計算に必要なDataGearを保存や管理を行うMetaDataGearとしてcontextがある。
201 cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
202 contextは処理に必要なCodeGearの番号とMetaCodeGearの対応表や、 DataGearの格納場所を持つ。 203 contextは処理に必要なCodeGearの番号とMetaCodeGearの対応表や、 DataGearの格納場所を持つ。
203 計算に必要なデータ構造と処理を持つデータ構造であることから、 contextは従来のOSのプロセスに相当するものと言える。 204 計算に必要なデータ構造と処理を持つデータ構造であることから、 contextは従来のOSのプロセスに相当するものと言える。
205 cotnextと各データ構造の関わりを図\ref{fig:context_ref}に示す。
206 \begin{figure}[tb]
207 \begin{center}
208 \includegraphics[width=80mm]{fig/Context_ref.pdf}
209 \end{center}
210 \caption{Contextと各データの関係図}
211 \label{fig:context_ref}
212 \end{figure}
213
204 コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。 214 コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
205 MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。 215 MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。
206 216
207 \begin{figure}[tb]
208 \begin{center}
209 \includegraphics[width=70mm]{fig/Context_ref.pdf}
210 \end{center}
211 \caption{Contextと各データの関係図}
212 \label{fig:context_ref}
213 \end{figure}
214 217
215 \section{xv6 kernel} 218 \section{xv6 kernel}
216 219
217 xv6とはマサチューセッツ工科大学でv6 OSを元に開発された教育用のUNIX OSである。 220 xv6とはマサチューセッツ工科大学でv6 OSを元に開発された教育用のUNIX OSである。
218 xv6はANSI Cで実装されており、 x86アーキテクチャ上で動作する。 221 xv6はANSI Cで実装されており、 x86アーキテクチャ上で動作する。
224 227
225 本論文ではxv6のファイルシステム関連の内部処理と、システムコール実行時に実行される処理について分析を行う。 228 本論文ではxv6のファイルシステム関連の内部処理と、システムコール実行時に実行される処理について分析を行う。
226 xv6 kernelのファイルシステムは階層構造で表現されており、 最も低レベルなものにディスク階層、 抽象度が最も高いレベルのものにファイル記述子がある。 229 xv6 kernelのファイルシステムは階層構造で表現されており、 最も低レベルなものにディスク階層、 抽象度が最も高いレベルのものにファイル記述子がある。
227 230
228 231
229 \section{xv6のファイルシステムの一部の分析} 232 \section{xv6の継続の分析}
233 xv6の処理を継続を中心とした記述で再実装を行う。
234 この際に、 xv6のどの処理に着目するかによって継続の実装が異なっていくことが実装につれてわかった。
235
236 まずxv6の\texttt{read} システムコールに着目し、 システムコール内部でどのような状態を遷移するかを分析した。
237 分析結果をCbCのCodeGearに変換し、 状態遷移図におこしたものを図\ref{fig:cbc_readsyscall}に示す。
238
239 \begin{figure}[tb]
240 \begin{center}
241 \includegraphics[width=80mm]{fig/readsyscall_state.pdf}
242 \end{center}
243 \caption{readシステムコールの状態遷移}
244 \label{fig:cbc_readsyscall}
245 \end{figure}
246
247 \section{Basic Blockに基づく分析}
230 248
231 xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。 249 xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。
232 この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。 250 この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。
233 251
234 まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。 252 まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。
235 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。 253 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。
236 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。 254 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。
237 255
238 256
239 \section{CbCを用いたxv6の書き換え方針} 257
258 \section{CbCを用いた部分的なxv6の書き換え}
240 259
241 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。 260 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。
242 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。 261 また実行に必要なCodeGearとDataGearをまとめたcontextというMetaDataGearが存在する。
243 この機能を元にxv6の書き換えを検討した。 262 この機能を元にxv6の書き換えを検討した。
244 263