diff paper/anatofuz-sigos.md @ 26:dfcef5f101da

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 04 May 2020 16:19:35 +0900
parents 87813fb8542c
children 0e5b632b9f6c
line wrap: on
line diff
--- a/paper/anatofuz-sigos.md	Mon May 04 14:57:49 2020 +0900
+++ b/paper/anatofuz-sigos.md	Mon May 04 16:19:35 2020 +0900
@@ -89,13 +89,19 @@
 GearsOSでは、 CodeGearとDataGearを元にプログラミングを行う。
 遷移する各CodeGearの実行に必要なデータの整合性の確認などのメタ計算は、 MetaCodeGearと呼ばれる各CodeGearごと実装されたCodeGearで計算を行う。
 このMetaCodeGearの中で参照されるDataGearをMetaDataGearと呼ぶ。
+MetaCodeGearやMetaDataGearは、プログラマが直接実装することはなく、 現在はPerlスクリプトによってGearsOSのビルド時に生成される。
+CodeGearから別のCodeGearに遷移する際のDataGearなどの関係性を、図\ref{meta-cg-dg}に示す。
 
-各CodeGearの入出力や、各CodeGearそのものの関数ポインタなどは、関数型プログラミングの側面から見るとプログラマが直接操作するのを禁じる必要がある。
-このためにGearsOSには実行する処理に必要なCodeGear及びDataGearを管理する、 contextというMetaDataGearが存在する。
-コード上では別のCodeGearに直接遷移している様に見えるが、 実際はContext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
-CodeGearから別のCodeGearに遷移する際のDataGearなどの関係性を、図\ref{meta-cg-dg}に示す。
 ![lab:meta-cg-dg, cap:CodeGearとMetaCodeGear](./fig/meta-cg-dg.pdf)
-これらの変換はPerlスクリプトによってGearsOSのビルド時に行われる。
+
+ノーマルレベルのプログラミングでは、 図\ref{meta-cg-dg}の上段に示す様に入力のDataGearを受け取りCodeGearを実行、 結果をDataGearに書き込んだ上で別のCodeGearに継続する様に見える。
+しかし実際はCodeGearの実行の前後に実行されるMetaCodeGearや入出力のDataGearを保存場所から取り出すMetaDataGearなどのメタ計算が加わる。
+
+遷移先のCodeGearとMetaCodeGearの紐付けや、 計算に必要なDataGearを保存や管理を行うMetaDataGearとしてcontextがある。
+contextは処理に必要なCodeGearの番号とMetaCodeGearの対応表や、 DataGearの格納場所を持つ。
+コード上では別のCodeGearに直接遷移している様に見えるが、 実際はcontext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
+MetaCodeGear中で、次に実行するCodeGearで必要なDataGearをcontextから取り出し、 実際の計算が行われる。
+contextは計算に必要なデータ構造と処理を持つデータ構造であることから、 従来のOSのプロセスに相当するものと言える。
 
 # xv6 kernel