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の書き換え
Binary file paper/anatofuz-sigos.pdf has changed
--- 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の書き換え}