Mercurial > hg > Papers > 2021 > anatofuz-master
changeset 61:e1dbf6e648ad
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 03 Feb 2021 00:24:14 +0900 |
parents | 1ce43db7c038 |
children | 45395005373f |
files | paper/chapter/03-gears.tex paper/chapter/05-perl.tex paper/master_paper.pdf |
diffstat | 3 files changed, 41 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/paper/chapter/03-gears.tex Tue Feb 02 18:47:49 2021 +0900 +++ b/paper/chapter/03-gears.tex Wed Feb 03 00:24:14 2021 +0900 @@ -9,7 +9,32 @@ \section{Context} Contextとは従来のOSのプロセスに相当する概念である。 -GearsOSではMetaDataGearとして表現される。 +GearsOSでのデータの単位から見ると、 MetaDataGearに相当する。 + +ContextはGearsOSの計算で使用されるすべてのDataGearとCodeGearを持つ。 +各CodeGear、DataGearはContextはそれぞれ配列形式でContextにデータを格納する場所が用意されている。 +CodeGearは配列の中にStubCodeGearへの関数ポインタが格納されている。 +DataGearはInterfaceを利用したgoto時の値の保存場所として配列を利用している。 +これらの配列の添え字はenumの番号である。 + +ノーマルレベルとメタレベルの切り分けの為に、ノーマルレベルではenumの番号を利用している。 +enumの番号から対応するデータを切り分けるのは、 メタレベルでContextにアクセスして行われる。 + + +Contextは配列形式のデータ格納場所のほかに、 ヒープ構造を所持している。 +計算で必要なDataGearは、 CbCの中でアロケーションした場合はContextにヒープに書き込まれる。 +ヒープにはDataGearと、書き込んだDataGearのメタ情報が記載されているMetaDataGearで構成されている。 + +\section{union Data型} + +ContextはすべてのDataGearの型定義を持っている。 +メタレベルで見れば、 この型定義は\texttt{union Data}型にすべて書かれている。 +union Data型は、 C言語の共用体を使って実装されている。 +共用体とは、構成するメンバ変数で最大の型のメモリサイズと同じメモリサイズになる特徴がある。 +構造体と違い、1度に一つの型しか使うことができない。 +実際にどの型が書き込まれているかは、 DataGearに付随しているMetaDataGearにアクセスすれば良い。 + + \section{GearsOSのビルドシステム} GearsOSではビルドツールにCMakeを利用している。 @@ -32,7 +57,9 @@ \end{center} \caption{GearsOSのビルドフロー} \label{fig:gearsbuild1} - \end{figure} +\end{figure} + + \section{GearsOSのCbCから純粋なCbCへの変換} GearsOSはCbCを拡張した言語となっている。 @@ -138,7 +165,7 @@ \label{fig:pmake} \end{figure} - + \section{Interfaceの取り扱い方法の検討}
--- a/paper/chapter/05-perl.tex Tue Feb 02 18:47:49 2021 +0900 +++ b/paper/chapter/05-perl.tex Wed Feb 03 00:24:14 2021 +0900 @@ -58,13 +58,19 @@ context.hを生成しようとする場合、 プロジェクトで利用する全CbCファイルを扱う必要がある。 Contextの初期化ルーチンを作製するgenerate\_context.plは、その特性上すべてのCbCファイルをロードしていた。 -したがってcontext.hを作製する場合はこのスクリプトで行うのが良い。 +したがってcontext.hを作製する場合はこのスクリプトで行うと現状のCMakeに手をつけずに変更ができる。 + +\subsection{context.hのテンプレートファイル} Perlのモジュールとして\texttt{Gears::Template::Context}を作製した。 xv6プロジェクトの場合は一部ヘッダファイルに含める情報が異なる。 -派生モジュールとして\texttt{Gears::Template::Context::XV6}も実装している。 -これらのテンプレートモジュールはgenerate\_context.plの実行時のオプションで選択可能とした +派生モジュールとして\texttt{Gears::Template::Context::XV6}も実装した。 +これらのテンプレートモジュールはgenerate\_context.plの実行時のオプションで選択可能である。 + +呼び出しにはPerlの動的モジュールロード機能を利用している。 +各モジュールに共通のAPIを記述しており、 テンプレートに限らず共通して呼び出すことが可能である。 + \section{メタ計算部分の入れ替え} GearsOSでは次のCodeGearに移行する前のMetaCodeGearとして、 デフォルトでは\texttt{\_\_code meta}が使われている。 @@ -99,6 +105,7 @@ generate\_stub.plはGears CbCファイルの変換時に、 CbCファイルがあるディレクトリにmeta.pmがあるかを確認する。 meta.pmがある場合はモジュールロードを行う。 meta.pmがない場合はmeta Code Gearにgotoするものをデフォルト設定として使う。 +これらの処理はPerlのクロージャの形で表現しており、 トランスコンパイラ側では共通のAPIで呼び出すことが可能である。 各Gode Gearが\texttt{goto文}を呼び出したタイミングでreplaceMetaを呼び出し、 ルールにしたがってgoto文を書き換える。 変換するCodeGearがルールになかった場合は、 デフォルト設定が呼び出される。 @@ -240,4 +247,4 @@ \lstinputlisting[label=src:replaceenum, caption=enumの番号が差し替えられたCodeGear]{src/replaceenum.cbc} -\section{ジェネリクスのサポート} \ No newline at end of file +\section{ジェネリクスのサポート}