Mercurial > hg > Papers > 2020 > anatofuz-sigos
changeset 35:c2ba9cdb4916
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 05 May 2020 16:17:38 +0900 |
parents | ff9dec2d1c1a |
children | a039a55d97ae |
files | paper/anatofuz-sigos.md paper/anatofuz-sigos.pdf paper/anatofuz-sigos.tex |
diffstat | 3 files changed, 44 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/anatofuz-sigos.md Tue May 05 15:06:56 2020 +0900 +++ b/paper/anatofuz-sigos.md Tue May 05 16:17:38 2020 +0900 @@ -159,16 +159,33 @@ # xv6のシステムコール以外の継続の分析 xv6はシステムコール以外に、 ファイルシステムの操作やページテーブルの管理などの処理も存在している。 これらはOSの立ち上げ時やシステムコールの中で、ファイルシステムの操作に対応した関数や構造体などのAPIを通して操作される。 +システムコールの一連の流れに着目するのではなく、 特定の対象のAPIに着目して継続の分析を検討した。 + +xv6のファイルシステムに関する定義ファイルは`fs.c`中に記述されている。 +Code\ref{src:fs_interface}に示す様に、 `fs.c`中に定義されているAPIを抜き出し、 CbCのInterfaceとして定義した。 +`__code`から始まるCodeGearの名前が、 それぞれ抽象化されたCodeGearの集合への名前となる。 + + +``` lab:src:fs_interface, cap:ファイルシステム操作のAPIの一部 +typedef struct fs<Type,Impl> { + __code readsb(Impl* fs, uint dev, struct superblock* sb, __code next(...)); + __code iinit(Impl* fs, __code next(...)); + __code ialloc(Impl* fs, uint dev, short type, __code next(...)); + __code iupdate(Impl* fs, struct inode* ip, __code next(...)); + __code idup(Impl* fs, struct inode* ip, __code next(...)); + __code ilock(Impl* fs, struct inode* ip, __code next(...)); + __code iunlock(Impl* fs, struct inode* ip, __code next(...)); + __code iput(Impl* fs, struct inode* ip, __code next(...)); +.... +} fs; +``` + # Basic Blockに基づく分析 -xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。 -この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。 - まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。 -したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。 - +したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することが可能となる。 # CbCを用いた部分的なxv6の書き換え
--- a/paper/anatofuz-sigos.tex Tue May 05 15:06:56 2020 +0900 +++ b/paper/anatofuz-sigos.tex Tue May 05 16:17:38 2020 +0900 @@ -265,16 +265,33 @@ \section{xv6のシステムコール以外の継続の分析} xv6はシステムコール以外に、 ファイルシステムの操作やページテーブルの管理などの処理も存在している。 これらはOSの立ち上げ時やシステムコールの中で、ファイルシステムの操作に対応した関数や構造体などのAPIを通して操作される。 +システムコールの一連の流れに着目するのではなく、 特定の対象のAPIに着目して継続の分析を検討した。 + +xv6のファイルシステムに関する定義ファイルは`fs.c`中に記述されている。 +Code\ref{src:fs_interface}に示す様に、 `fs.c`中に定義されているAPIを抜き出し、 CbCのInterfaceとして定義した。 +\texttt{\_\_code}から始まるCodeGearの名前が、 それぞれ抽象化されたCodeGearの集合への名前となる。 + + +\begin{lstlisting}[frame=lrbt,label=src:fs_interface,caption={ファイルシステム操作のAPIの一部}] +typedef struct fs<Type,Impl> { + __code readsb(Impl* fs, uint dev, struct superblock* sb, __code next(...)); + __code iinit(Impl* fs, __code next(...)); + __code ialloc(Impl* fs, uint dev, short type, __code next(...)); + __code iupdate(Impl* fs, struct inode* ip, __code next(...)); + __code idup(Impl* fs, struct inode* ip, __code next(...)); + __code ilock(Impl* fs, struct inode* ip, __code next(...)); + __code iunlock(Impl* fs, struct inode* ip, __code next(...)); + __code iput(Impl* fs, struct inode* ip, __code next(...)); +.... +} fs; +\end{lstlisting} + \section{Basic Blockに基づく分析} -xv6のファイルシステムに関する定義ファイルはfs.c中に記述されている。 -この中に出てくる関数に着目し、 この関数をさらにCodeGearに変換していくことで状態遷移単位での記述を試みた。 - まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。 -したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。 - +したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することが可能となる。 \section{CbCを用いた部分的なxv6の書き換え}