comparison paper/anatofuz-sigos.tex @ 37:9e40a7a00a02

fix
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 06 May 2020 07:50:03 +0900
parents a039a55d97ae
children 228d350be33e
comparison
equal deleted inserted replaced
36:a039a55d97ae 37:9e40a7a00a02
265 \section{xv6のシステムコール以外の継続の分析} 265 \section{xv6のシステムコール以外の継続の分析}
266 xv6はシステムコール以外に、 ファイルシステムの操作やページテーブルの管理などの処理も存在している。 266 xv6はシステムコール以外に、 ファイルシステムの操作やページテーブルの管理などの処理も存在している。
267 これらはOSの立ち上げ時やシステムコールの中で、ファイルシステムの操作に対応した関数や構造体などのAPIを通して操作される。 267 これらはOSの立ち上げ時やシステムコールの中で、ファイルシステムの操作に対応した関数や構造体などのAPIを通して操作される。
268 システムコールの一連の流れに着目するのではなく、 特定の対象のAPIに着目して継続の分析を検討した。 268 システムコールの一連の流れに着目するのではなく、 特定の対象のAPIに着目して継続の分析を検討した。
269 269
270 xv6のファイルシステムに関する定義ファイルは`fs.c`中に記述されている。 270 xv6のファイルシステムに関する定義ファイルは\texttt{fs.c}中に記述されている。
271 Code\ref{src:fs_interface}に示す様に、 `fs.c`中に定義されているAPIを抜き出し、 CbCのInterfaceとして定義した。 271 Code\ref{src:fs_interface}に示す様に、 \texttt{fs.c}中に定義されているAPIを抜き出し、 CbCのInterfaceとして定義した。
272 \texttt{\_\_code}から始まるCodeGearの名前が、 それぞれ抽象化されたCodeGearの集合の最初の継続となる。 272 \texttt{\_\_code}から始まるCodeGearの名前が、 それぞれ抽象化されたCodeGearの集合の最初の継続となる。
273 273
274 274
275 \begin{lstlisting}[frame=lrbt,label=src:fs_interface,caption={ファイルシステム操作のAPIの一部}] 275 \begin{lstlisting}[frame=lrbt,label=src:fs_interface,caption={ファイルシステム操作のAPIの一部}]
276 typedef struct fs<Type,Impl> { 276 typedef struct fs<Type,Impl> {
284 __code iput(Impl* fs, struct inode* ip, __code next(...)); 284 __code iput(Impl* fs, struct inode* ip, __code next(...));
285 .... 285 ....
286 } fs; 286 } fs;
287 \end{lstlisting} 287 \end{lstlisting}
288 288
289 Code\ref{src:fs_interface}内の \texttt{readsb}などは`fs.c`内で定義されているCの関数名と対応している。 289 Code\ref{src:fs_interface}内の \texttt{readsb}などは\texttt{fs.c}内で定義されているCの関数名と対応している。
290 このCの関数を更に継続ごとに分割するために、 関数内のif文などの分岐を持たない基本単位であるBasic Blockに着目した。 290 このCの関数を更に継続ごと分割するために、 関数内のif文などの分岐を持たない基本単位であるBasic Blockに着目した。
291 291
292 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。 292 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。
293 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することが可能となる。 293 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することが可能となる。
294 実際にBasicBlock単位で切り分ける前の処理と、切り分けたあとの処理を示す。
295
294 296
295 297
296 \section{CbCを用いた部分的なxv6の書き換え} 298 \section{CbCを用いた部分的なxv6の書き換え}
297 299
298 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。 300 CbCではCodeGear、 DataGearからなる単位を基本とし、 それぞれにメタなGearが付随する。