Mercurial > hg > Papers > 2021 > anatofuz-master
comparison paper/chapter/03-gears.tex @ 61:e1dbf6e648ad
...
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 03 Feb 2021 00:24:14 +0900 |
parents | 1ce43db7c038 |
children | e88c0e26d331 |
comparison
equal
deleted
inserted
replaced
60:1ce43db7c038 | 61:e1dbf6e648ad |
---|---|
7 現在のGearsOSはUnixシステム上のアプリケーションとして実装されているものと、 xv6の置き換えとして実装されているもの\cite{weko_195888_1}がある。 | 7 現在のGearsOSはUnixシステム上のアプリケーションとして実装されているものと、 xv6の置き換えとして実装されているもの\cite{weko_195888_1}がある。 |
8 | 8 |
9 | 9 |
10 \section{Context} | 10 \section{Context} |
11 Contextとは従来のOSのプロセスに相当する概念である。 | 11 Contextとは従来のOSのプロセスに相当する概念である。 |
12 GearsOSではMetaDataGearとして表現される。 | 12 GearsOSでのデータの単位から見ると、 MetaDataGearに相当する。 |
13 | |
14 ContextはGearsOSの計算で使用されるすべてのDataGearとCodeGearを持つ。 | |
15 各CodeGear、DataGearはContextはそれぞれ配列形式でContextにデータを格納する場所が用意されている。 | |
16 CodeGearは配列の中にStubCodeGearへの関数ポインタが格納されている。 | |
17 DataGearはInterfaceを利用したgoto時の値の保存場所として配列を利用している。 | |
18 これらの配列の添え字はenumの番号である。 | |
19 | |
20 ノーマルレベルとメタレベルの切り分けの為に、ノーマルレベルではenumの番号を利用している。 | |
21 enumの番号から対応するデータを切り分けるのは、 メタレベルでContextにアクセスして行われる。 | |
22 | |
23 | |
24 Contextは配列形式のデータ格納場所のほかに、 ヒープ構造を所持している。 | |
25 計算で必要なDataGearは、 CbCの中でアロケーションした場合はContextにヒープに書き込まれる。 | |
26 ヒープにはDataGearと、書き込んだDataGearのメタ情報が記載されているMetaDataGearで構成されている。 | |
27 | |
28 \section{union Data型} | |
29 | |
30 ContextはすべてのDataGearの型定義を持っている。 | |
31 メタレベルで見れば、 この型定義は\texttt{union Data}型にすべて書かれている。 | |
32 union Data型は、 C言語の共用体を使って実装されている。 | |
33 共用体とは、構成するメンバ変数で最大の型のメモリサイズと同じメモリサイズになる特徴がある。 | |
34 構造体と違い、1度に一つの型しか使うことができない。 | |
35 実際にどの型が書き込まれているかは、 DataGearに付随しているMetaDataGearにアクセスすれば良い。 | |
36 | |
37 | |
13 | 38 |
14 \section{GearsOSのビルドシステム} | 39 \section{GearsOSのビルドシステム} |
15 GearsOSではビルドツールにCMakeを利用している。 | 40 GearsOSではビルドツールにCMakeを利用している。 |
16 ビルドフローを図\ref{fig:gearsbuild1}に示す。 | 41 ビルドフローを図\ref{fig:gearsbuild1}に示す。 |
17 CMakeはautomakeなどのMakeファイルを作成するツールに相当するものである。 | 42 CMakeはautomakeなどのMakeファイルを作成するツールに相当するものである。 |
30 \begin{center} | 55 \begin{center} |
31 \includegraphics[width=150mm]{drawio/geasflow1.pdf} | 56 \includegraphics[width=150mm]{drawio/geasflow1.pdf} |
32 \end{center} | 57 \end{center} |
33 \caption{GearsOSのビルドフロー} | 58 \caption{GearsOSのビルドフロー} |
34 \label{fig:gearsbuild1} | 59 \label{fig:gearsbuild1} |
35 \end{figure} | 60 \end{figure} |
61 | |
62 | |
36 | 63 |
37 \section{GearsOSのCbCから純粋なCbCへの変換} | 64 \section{GearsOSのCbCから純粋なCbCへの変換} |
38 GearsOSはCbCを拡張した言語となっている。 | 65 GearsOSはCbCを拡張した言語となっている。 |
39 ただしこの拡張自体はCbCコンパイラであるgcc、 llvm/clangには搭載されていない。 | 66 ただしこの拡張自体はCbCコンパイラであるgcc、 llvm/clangには搭載されていない。 |
40 その為GearsOSの拡張部分を、等価な純粋なCbCの記述に変換する必要がある。 | 67 その為GearsOSの拡張部分を、等価な純粋なCbCの記述に変換する必要がある。 |
136 \end{center} | 163 \end{center} |
137 \caption{pmake.plの処理フロー} | 164 \caption{pmake.plの処理フロー} |
138 \label{fig:pmake} | 165 \label{fig:pmake} |
139 \end{figure} | 166 \end{figure} |
140 | 167 |
141 | 168 |
142 | 169 |
143 | 170 |
144 \section{Interfaceの取り扱い方法の検討} | 171 \section{Interfaceの取り扱い方法の検討} |
145 | 172 |
146 GearsOSのInterfaceはモジュール化の仕組みと\texttt{goto}文での引数の一時保管場所としての機能を持っている。 | 173 GearsOSのInterfaceはモジュール化の仕組みと\texttt{goto}文での引数の一時保管場所としての機能を持っている。 |