view paper/GearsOS.tex @ 17:6afd90dba6db

slide chapter1
author tobaru
date Fri, 07 Feb 2020 16:53:09 +0900
parents 3952ffd84dfe
children 6d84ce92ff35
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 のサイズ分増やすことで実現する。