changeset 42:8d779a8c8029

update
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 01 Feb 2021 11:25:27 +0900
parents e25a073180de
children a5e840dede1b
files paper/chapter/02-cbc.tex paper/master_paper.pdf
diffstat 2 files changed, 13 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter/02-cbc.tex	Mon Feb 01 11:15:01 2021 +0900
+++ b/paper/chapter/02-cbc.tex	Mon Feb 01 11:25:27 2021 +0900
@@ -7,19 +7,13 @@
 Agda よる関数型のCbCの記述も用意されている。
 実際のOSやアプリケーションを記述する場合には、GCC及びLLVM/clang上のCbC実装を用いる。
 
+\section{CodeGear}
 CbCでは関数の代わりにCodeGearという単位でプログラミングを行う。
 CodeGearは通常のCの関数宣言の返り値の型の代わりに\texttt{\_\_code}で宣言を行う。
 各CodeGearはDataGearと呼ばれるデータの単位で入力を受け取り、 その結果を別のDataGearに書き込む。
 入力のDataGearをInputDataGearと呼び、 出力のDataGearをOutputDataGearと呼ぶ。
 CodeGearがアクセスできるDataGearは、 InputDataGearとOutputDataGearに限定される。
 
-CbCを利用したシステムコールのディスパッチ部分をCode \ref{src:cbc_syscall_example}に示す。
-この例題では特定のシステムコールの場合、 CbCで実装された処理に\texttt{goto}文をつかって継続する。
-例題ではCodeGearへのアドレスが配列\texttt{cbccodes}に格納されている。
-引数として渡している\texttt{cbc\_ret}は、 システムコールの返り値の数値をレジスタに代入するCodeGearである。
-実際に\texttt{cbc\_ret}に継続が行われるのは、 \texttt{read}などのシステムコールの一連の処理の継続が終わったタイミングである。
-
-\lstinputlisting[label=src:cbc_syscall_example, caption=CbCを利用したシステムコールのディスパッチ]{src/xv6_syscall.cbc}
 
 
 CodeGearは関数呼び出し時のスタックを持たない為、一度あるCodeGearに遷移してしまうと元の処理に戻ってくることができない。
@@ -32,3 +26,15 @@
 LLVM/clangでは\texttt{setjmp}と\texttt{longjmp}を使い実装している。
 したがってプログラマから見ると、通常のCの関数呼び出しの返り値をCodeGearから取得する事が可能となる。
 
+\section{DataGear}
+
+
+\section{CbCを使ったシステムコールディスパッチの例題}
+CbCを用いてMITが開発した教育用のOSであるxv6\cite{xv6}の書き換えを行った。
+CbCを利用したシステムコールのディスパッチ部分をソースコード\ref{src:cbc_syscall_example}に示す。
+この例題では特定のシステムコールの場合、 CbCで実装された処理に\texttt{goto}文をつかって継続する。
+例題ではCodeGearへのアドレスが配列\texttt{cbccodes}に格納されている。
+引数として渡している\texttt{cbc\_ret}は、 システムコールの返り値の数値をレジスタに代入するCodeGearである。
+実際に\texttt{cbc\_ret}に継続が行われるのは、 \texttt{read}などのシステムコールの一連の処理の継続が終わったタイミングである。
+
+\lstinputlisting[label=src:cbc_syscall_example, caption=CbCを利用したシステムコールのディスパッチ]{src/xv6_syscall.cbc}
Binary file paper/master_paper.pdf has changed