継続を用いたxv6 kernelの書き換え
Takahiro Sakamoto, Yu Tobaru, Shinji Kono 琉球大学工学部情報工学科並列信頼研
xv6 を継続で書き換える意味
Continuatuin based C
Continuation based C (CbC) はこの Code Gear 単位を用いたプログラミング言語として開発している。
Code Gear は 関数呼び出し時の環境を使わずに次の Code Gear へと goto 文によって遷移する。
この goto 文による遷移を軽量継続と呼ぶ。
CbC は軽量継続を持ち、C と互換性のある言語である
CbC のコード例
CbC では Code Gear は
__code
という型を持つ関数の構文で定義される。
Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない。
goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する。
この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる。
__code
cg0(int a, int b){ goto cg1(a+b); }
__code
cg1(int c){ goto cg2(c); }
Gears におけるメタ計算
Gears OS ではメタ計算を Meta Code Gear、Meta Data Gear で表現する。
Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する。
Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。
Interface
Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。
Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である。
Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。
xv6 の CbC への書き換え
xv6-rpi の CbC 対応
CbC によるシステムコールの書き換え
まとめと今後の方針