Mercurial > hg > Papers > 2020 > anatofuz-sigos
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が付随する。 |