Mercurial > hg > Papers > 2020 > anatofuz-sigos
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) |