Mercurial > hg > Papers > 2020 > tobaru-master
view paper/GearsOS.tex @ 21:6d84ce92ff35
.
author | tobaru |
---|---|
date | Sat, 08 Feb 2020 18:59:42 +0900 |
parents | 6afd90dba6db |
children | ee9435951c31 |
line wrap: on
line source
\chapter{CbC による Geas OS の開発} 信頼性の保証と並列実行のサポートを目的として、 本研究室では CbC というプログラミング言語を開発してきた。 さらにその CbC を使って Gears OS を開発している。 従来の OS が行うメモリ管理並列実行は Meta レベル(kernel space)で処理される。 ノーマルレベルからメタレベルの記述ができる GearsOS を開発している。 \section{Code Gear と Data Gear} Gears OS は Code Gear と Data Gear という単位でプログラムを記述する CbC を用いて実装する。 Code Gear は CbC における最も基本的な処理の単位である。 Code Gear 間で入力(Input Data Gear)と出力(Output Data Gear)を持ち、goto によって Code Gear から次の Code Gear へ遷移し、継続的に処理を行う。 関数呼び出しとは異なり、呼び出し元には戻らない。 Code Gear 間の処理の流れを図 \ref{fig:codegear} に示す。 % 状態遷移ベースのプログラミング言語である。 % (継続的に処理を行う)ことで検証を容易に余す所なく行うことができる. \begin{figure}[ht] \begin{center} \includegraphics[width=160mm]{./fig/codegear} \end{center} \caption{Code Gear 間の継続} \label{fig:codegear} \end{figure} Data Gear は CbC におけるデータの基本的な単位である。Input Data Gear と Output Data Gear があり、Code Gear の遷移の際に Input Data Gear を受け取り、Output Data Gear を書き出す。 \section{Meta Code Gear と Meta Data Gear} CbC ではノーマルレベルの記述と別にメタレベルで記述することができる。メタレベルの記述によって User Space 側からメモリ管理を行えるようになる。 メタ計算は Meta Code Gear と Meta Data Gear を用いる。 この2つはノーマルレベルからメタレベルの変換する時に使われる。 メタレベルの変換は Perl スクリプトで実装している。 Gears OS での Meta Code Gear は Code Gear の直前、 直後に挿入され、メタ計算を実行する。 それぞれの Code Gear, Meta Code Gear の継続には入力される Data Gear(Input Data Gear) と出力されるData Gear(Output Data Gear)が存在する。 Code Gear 間の継続はノーマルレベルでは 図 \ref{fig:codegear} のように見えるが、メタレベルでの Code Gear は図 \ref{fig:meta_cg_dg} の下のように継続を行っている。 \begin{figure}[ht] \begin{center} \includegraphics[width=160mm]{./fig/Meta_Code_Gear} \end{center} \caption{ノーマルレベルとメタレベルの継続の見え方} \label{fig:meta_cg_dg} \end{figure} \section{Context} Gears OS の Context は Meta Data Gear であり、接続可能な Code Gear と Data Gear のリスト、 Data Gear を確保するメモリ空間などを持っている。 従来のスレッドやプロセスに対応する。Gears OS では Code Gear と Data Gear への接続を Context を通して行う。Context が持つ Data Gear のメモリ空間は事前に確保され、Data Gear のメモリ確保の際に heap の値をずらしてメモリを割り当てる。 % パルスさん3.1 ノーマルレベルの Code Gaer から Meta Data Gear である Context を直接参照してしまうと、ユーザーがメタ計算をノーマルレベルで自由に記述できてしまい、メタ計算を分離した意味がなくなってしまう。 この問題を防ぐため、Context から必要な Data Gear のみをノーマルレベルの Code Gear に渡す処理を行なっている。 Meta Code Gear は使用される全ての Code Gear ごとに記述する必要がある。しかし、全ての Code Gear に対して記述すると膨大な記述量になる。そのため、Interface を実装した Code Gear の Meta Code Gear は Perl スクリプトで自動生成する。 Meta Code Gear はユーザーが記述することも可能である。そうすることでメタ計算を記述することができるようになったり、goto による継続先を変更することで Geas OS の機能を置き換えることができる。 第5章で扱うメモリ管理部分である vm の Context を ソースコード \ref{contexth} に示す。 \lstinputlisting[label=contexth, caption={\footnotesize 生成された Context}]{./src/context.h} % code は全ての Code Gear を列挙した enum と関数ポインタの組みで表現される。(ソースコード \ref{contexth} 55行目~68行目) Code Gear の名前は enum で定義され、コンパイル後には整数で変換される。 Code Gear に接続する際は enum で定義された番号を指定する。 これによってメタ計算時に接続する Code Gear を切り替えることができる。 Data Gear のメモリ空間は事前に領域を確保した後、必要に応じて領域を割り当てることで実現する。 実際に Allocation する際は ソースコード \ref{contexth} 9行目で定義した heap を Data Gear のサイズ分増やすことで実現する。