annotate paper/GearsOS.tex @ 17:6afd90dba6db

slide chapter1
author tobaru
date Fri, 07 Feb 2020 16:53:09 +0900
parents 3952ffd84dfe
children 6d84ce92ff35
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
4dd10e3e45d2 chapter exchange
tobaru
parents: 5
diff changeset
1 \chapter{CbC による Geas OS の開発}
4dd10e3e45d2 chapter exchange
tobaru
parents: 5
diff changeset
2 信頼性の保証と並列実行のサポートを目的として、 本研究室では CbC というプログラミング言語を開発してきた。
4dd10e3e45d2 chapter exchange
tobaru
parents: 5
diff changeset
3 さらにその CbC を使って Gears OS を開発している。
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
4 従来の OS が行うメモリ管理並列実行は Meta レベル(kernel space)で処理される。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
5 ノーマルレベルからメタレベルの記述ができる GearsOS を開発している。
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
6
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
7 \section{Code Gear と Data Gear}
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
8 Gears OS は Code Gear と Data Gear という単位でプログラムを記述する CbC を用いて実装する。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
9 Code Gear は CbC における最も基本的な処理の単位である。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
10 Code Gear 間で入力(Input Data Gear)と出力(Output Data Gear)を持ち、goto によって Code Gear から次の Code Gear へ遷移し、継続的に処理を行う。
17
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
11 関数呼び出しとは異なり、呼び出し元には戻らない。
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
12 Code Gear 間の処理の流れを図 \ref{fig:codegear} に示す。
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
13
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
14
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
15 % 状態遷移ベースのプログラミング言語である。
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
16 % (継続的に処理を行う)ことで検証を容易に余す所なく行うことができる.
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
17 \begin{figure}[ht]
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
18 \begin{center}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
19 \includegraphics[width=160mm]{./fig/codegear}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
20 \end{center}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
21 \caption{Code Gear 間の継続}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
22 \label{fig:codegear}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
23 \end{figure}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
24
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
25
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
26 Data Gear は CbC におけるデータの基本的な単位である。Input Data Gear と Output Data Gear があり、Code Gear の遷移の際に Input Data Gear を受け取り、Output Data Gear を書き出す。
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
27
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
28
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
29 \section{Meta Code Gear と Meta Data Gear}
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
30 CbC ではノーマルレベルの記述と別にメタレベルで記述することができる。メタレベルの記述によって User Space 側からメモリ管理を行えるようになる。
13
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
31
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
32
17
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
33 メタ計算は Meta Code Gear と Meta Data Gear を用いる。
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
34 この2つはノーマルレベルからメタレベルの変換する時に使われる。
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
35 メタレベルの変換は Perl スクリプトで実装している。
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
36 Gears OS での Meta Code Gear は Code Gear の直前、 直後に挿入され、メタ計算を実行する。
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
37 それぞれの Code Gear, Meta Code Gear の継続には入力される Data Gear(Input Data Gear) と出力されるData Gear(Output Data Gear)が存在する。
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
38 Code Gear 間の継続はノーマルレベルでは 図 \ref{fig:codegear} のように見えるが、メタレベルでの Code Gear は図 \ref{fig:meta_cg_dg} の下のように継続を行っている。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
39
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
40
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
41 \begin{figure}[ht]
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
42 \begin{center}
17
6afd90dba6db slide chapter1
tobaru
parents: 14
diff changeset
43 \includegraphics[width=160mm]{./fig/Meta_Code_Gear}
3
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
44 \end{center}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
45 \caption{ノーマルレベルとメタレベルの継続の見え方}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
46 \label{fig:meta_cg_dg}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
47 \end{figure}
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
48
db8087751680 add chapter GearsOS
tobaru
parents:
diff changeset
49
4
a4a1a68d8811 Paging, Context
tobaru
parents: 3
diff changeset
50 \section{Context}
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
51 Gears OS の Context は Meta Data Gear であり、接続可能な Code Gear と Data Gear のリスト、 Data Gear を確保するメモリ空間などを持っている。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
52 従来のスレッドやプロセスに対応する。Gears OS では Code Gear と Data Gear への接続を Context を通して行う。Context が持つ Data Gear のメモリ空間は事前に確保され、Data Gear のメモリ確保の際に heap の値をずらしてメモリを割り当てる。
4
a4a1a68d8811 Paging, Context
tobaru
parents: 3
diff changeset
53 % パルスさん3.1
13
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
54
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
55
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
56 ノーマルレベルの Code Gaer から Meta Data Gear である Context を直接参照してしまうと、ユーザーがメタ計算をノーマルレベルで自由に記述できてしまい、メタ計算を分離した意味がなくなってしまう。
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
57 この問題を防ぐため、Context から必要な Data Gear のみをノーマルレベルの Code Gear に渡す処理を行なっている。
13
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
58
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
59
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
60 Meta Code Gear は使用される全ての Code Gear ごとに記述する必要がある。しかし、全ての Code Gear に対して記述すると膨大な記述量になる。そのため、Interface を実装した code Gear の Meta Code Gear は Perl スクリプトで自動生成する。
13
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
61
1ef114182e80 sources move src/ and delete par
tobaru
parents: 6
diff changeset
62
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
63 Meta Code Gear はユーザーが記述することも可能である。そうすることでメタ計算を記述することができるようになったり、goto による継続先を変更することで Geas OS の機能を置き換えることができる。
4
a4a1a68d8811 Paging, Context
tobaru
parents: 3
diff changeset
64
a4a1a68d8811 Paging, Context
tobaru
parents: 3
diff changeset
65
14
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
66 第5章で扱うメモリ管理部分である vm の Context を ソースコード \ref{contexth} に示す。
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
67
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
68 \lstinputlisting[label=contexth, caption={\footnotesize 生成された Context}]{./src/context.h}
4
a4a1a68d8811 Paging, Context
tobaru
parents: 3
diff changeset
69
14
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
70 % code は全ての Code Gear を列挙した enum と関数ポインタの組みで表現される。(ソースコード \ref{contexth} 55行目~68行目)
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
71 Code Gear の名前は enum で定義され、コンパイル後には整数で変換される。
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
72 Code Gear に接続する際は enum で定義された番号を指定する。
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
73 これによってメタ計算時に接続する Code Gear を切り替えることができる。
5
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
74
73697739a74d context xv6 paging
tobaru
parents: 4
diff changeset
75
14
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
76 Data Gear のメモリ空間は事前に領域を確保した後、必要に応じて領域を割り当てることで実現する。
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
77 実際に Allocation する際は ソースコード \ref{contexth} 9行目で定義した heap を Data Gear のサイズ分増やすことで実現する。
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
78
3952ffd84dfe context, etc
tobaru
parents: 13
diff changeset
79