comparison paper/anatofuz-sigos.md @ 23:2be09c284a2e

add meta-cg-dg.pdf
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Mon, 04 May 2020 14:25:42 +0900
parents d933923009db
children d2a1d3d75484
comparison
equal deleted inserted replaced
22:d933923009db 23:2be09c284a2e
82 CodeGearとその入出力であるDataGearを基本としたOSとして、 GearsOSの設計を行っている。 82 CodeGearとその入出力であるDataGearを基本としたOSとして、 GearsOSの設計を行っている。
83 83
84 GearsOSでは、 CodeGearとDataGearを元にプログラミングを行う。 84 GearsOSでは、 CodeGearとDataGearを元にプログラミングを行う。
85 遷移する各CodeGearの実行に必要なデータの整合性の確認などのメタ計算は、 MetaCodeGearと呼ばれる各CodeGearごと実装されたCodeGearで計算を行う。 85 遷移する各CodeGearの実行に必要なデータの整合性の確認などのメタ計算は、 MetaCodeGearと呼ばれる各CodeGearごと実装されたCodeGearで計算を行う。
86 このMetaCodeGearの中で参照されるDataGearをMetaDataGearと呼ぶ。 86 このMetaCodeGearの中で参照されるDataGearをMetaDataGearと呼ぶ。
87 Contextそのものは、 DataGearの実行に必要なMetaDataGearである。 87
88 プログラマがプログラミングする上では別のCodeGearに直接遷移している様に見えるが、 実際はMetaCodeGearを一度経由してからCodeGearに遷移する。 88 各CodeGearの入出力や、各CodeGearそのものの関数ポインタなどは、関数型プログラミングの側面から見るとプログラマが直接操作するのを禁じる必要がある。
89 このためにGearsOSには実行する処理に必要なCodeGear及びDataGearを管理する、 contextというMetaDataGearが存在する。
90 コード上では別のCodeGearに直接遷移している様に見えるが、 実際はContext内の遷移先のCodeGearに対応するスロットから、対応するMetaCodeGearに遷移する。
91 これらの変換はPerlスクリプトによって、 GearsOSのビルド時に静的に行われる。
89 92
90 # xv6 kernel 93 # xv6 kernel
91 94
92 xv6とはマサチューセッツ工科大学でv6 OSを元に開発された教育用のUNIX OSである。 95 xv6とはマサチューセッツ工科大学でv6 OSを元に開発された教育用のUNIX OSである。
93 xv6はANSI Cで実装されており、 x86アーキテクチャ上で動作する。 96 xv6はANSI Cで実装されており、 x86アーキテクチャ上で動作する。
109 まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。 112 まず関数内でif文などの分岐を持たない基本単位であるBasic Blockに着目した。
110 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。 113 CbCのCodeGearの粒度はCの関数とアセンブラの中間であるといえるので、 BasicBlockをCodeGearに置き換える事が可能である。
111 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。 114 したがって特定の関数内の処理のBasicBlockを分析し、 BasicBlockに対応したCodeGearへ変換することで状態遷移系への変換を行った。
112 115
113 116
117 ![perf, perl](./fig/meta-cg-dg.pdf)