Mercurial > hg > Papers > 2021 > anatofuz-master
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}