Mercurial > hg > Papers > 2020 > anatofuz-sigos
diff paper/anatofuz-sigos.md @ 25:87813fb8542c
add factorial_cbc.pdf
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 04 May 2020 14:57:49 +0900 |
parents | d2a1d3d75484 |
children | dfcef5f101da |
line wrap: on
line diff
--- a/paper/anatofuz-sigos.md Mon May 04 14:31:06 2020 +0900 +++ b/paper/anatofuz-sigos.md Mon May 04 14:57:49 2020 +0900 @@ -49,9 +49,11 @@ `factorial`はCodeGearの引数として`struct F`型の変数`arg`を受け取り、`arg`のメンバー変数によって`factorial`の再帰呼び出しを行う。 `arg`の様なCodeGearの引数のことを`DataGear`と呼ぶ。 CodeGearの呼び出しは`goto`文によって行われる。 +この例題を状態遷移図にしたものを図\ref{fig:factorial_cbc}に示す。 +図中の四角がDataGear、 円がCodeGearに対応する。 -``` lab:src:cbc_example, cap:CbCで階乗を求める処理 +``` lab:src:cbc_example, cap:CbCで階乗を求める例題 __code factorial(struct F arg) { if (arg.n<0) { exit(1); @@ -66,6 +68,8 @@ } ``` +![lab:fig:factorial_cbc, cap:CbCで階乗を求める例題の状態遷移](fig/factorial_cbc.pdf) + CodeGearは関数呼び出し時のスタックを持たない為、一度あるCodeGearに遷移してしまうと元の処理に戻ってくることができない。 しかしCodeGearを呼び出す直前のスタックは保存されるため、 部分的にCbCを適用する場合はCodeGearを呼び出す`void`型などの関数を経由することで呼び出しが可能となる。 @@ -80,16 +84,18 @@ CbCで使用するCodeGearは、 状態遷移モデルにおける状態そのものとして捉えることが可能である。 CodeGearを元にプログラミングをするにつれて、 CodeGearの入出力のDataも重要であることが解ってきた。 CodeGearとその入出力であるDataGearを基本としたOSとして、 GearsOSの設計を行っている。 +現在のGearsOSは並列フレームワークとして実装されており、 実用的なOSのプロトタイプ実装として既存のOS上への実装を目指している。 GearsOSでは、 CodeGearとDataGearを元にプログラミングを行う。 遷移する各CodeGearの実行に必要なデータの整合性の確認などのメタ計算は、 MetaCodeGearと呼ばれる各CodeGearごと実装されたCodeGearで計算を行う。 このMetaCodeGearの中で参照されるDataGearをMetaDataGearと呼ぶ。 -![lab:meta-cg-dg, cap:CodeGearとMetaCodeGear](./fig/meta-cg-dg.pdf) 各CodeGearの入出力や、各CodeGearそのものの関数ポインタなどは、関数型プログラミングの側面から見るとプログラマが直接操作するのを禁じる必要がある。 このためにGearsOSには実行する処理に必要なCodeGear及びDataGearを管理する、 contextというMetaDataGearが存在する。 コード上では別のCodeGearに直接遷移している様に見えるが、 実際はContext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。 -これらの変換はPerlスクリプトによって、 GearsOSのビルド時に静的に行われる。 +CodeGearから別のCodeGearに遷移する際のDataGearなどの関係性を、図\ref{meta-cg-dg}に示す。 +![lab:meta-cg-dg, cap:CodeGearとMetaCodeGear](./fig/meta-cg-dg.pdf) +これらの変換はPerlスクリプトによってGearsOSのビルド時に行われる。 # xv6 kernel