annotate paper/sigos.tex @ 5:05be3fd35750

edit
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 05 May 2015 14:24:59 +0900
parents 8e3bf4806e33
children b02e6b40f470
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 \documentclass[techrep]{ipsjpapers}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 \usepackage[dvipdfm]{graphicx}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 \usepackage{url}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 \usepackage{listings}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
5 \usepackage{enumitem}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
7 \lstset{
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
8 language=C,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
9 tabsize=2,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
10 frame=single,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
11 basicstyle={\footnotesize},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
12 identifierstyle={\footnotesize},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
13 commentstyle={\footnotesize\itshape},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
14 keywordstyle={\footnotesize\bfseries},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
15 ndkeywordstyle={\footnotesize},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
16 stringstyle={\footnotesize\ttfamily},
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
17 breaklines=true,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
18 captionpos=b,
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 columns=[l]{fullflexible},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 xrightmargin=0zw,%
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
21 xleftmargin=1zw,%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
22 aboveskip=1zw,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
23 numberstyle={\scriptsize},%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
24 stepnumber=1,
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
25 numbersep=1zw,%
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
26 lineskip=-0.5ex%
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 }
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
28
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 \renewcommand{\lstlistingname}{Code}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 \input{dummy.tex} %% Font
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 % ユーザが定義したマクロなど.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 \makeatletter
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 \begin{document}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 % 和文表題
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 \title{Monad に基づくメタ計算を基本とする Gears OS の設計}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 % 英文表題
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 \etitle{}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 % 所属ラベルの定義
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 \affilabel{1}{琉球大学大学院理工学研究科情報工学専攻 \\Interdisciplinary Information Engineering, Graduate School of Engineering and Science, University of the Ryukyus.}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 \affilabel{2}{琉球大学工学部情報工学科\\Information Engineering, University of the Ryukyus.}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 % 和文著者名
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 \author{
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 小久保 翔平\affiref{1}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 \and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 伊波 立樹\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 \and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 河野 真治\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 }
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 % 英文著者名
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 \eauthor{
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 Shohei KOKUBO\affiref{1}\and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 Tatsuki Iha\affiref{2}\and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 Shinji KONO\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 % 連絡先(投稿時に必要.製版用では無視される.)
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 \contact{小久保 翔平\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 〒903-0213 沖縄県西原町千原1番地\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 琉球大学工学部情報工学科\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 TEL: (098)895-2221\qquad FAX: (098)895-8727\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 email: kokubo@cr.ie.u-ryukyu.ac.jp}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 % 和文概要
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 \begin{abstract}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
71 本研究室では Code Gear, Data Gear を用いた並列フレームワークの開発を行なっている。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 並列実行に必要な Meta な機能を関数型言語における Monad の原理に基づいて、実現することにした。
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
73 今回設計した Gears OS では Code Gear, Data Gear それぞれに Meta Code Gear と Meta Data Gear を付属させる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
74 Code Gear が実行されるとそれに属する Meta Code Gear が実行され、Meta Computation が行われる。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 Meta Computation は OS が行うネットワーク管理、メモリ管理等の資源制御を行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 本論文では基本的な機能を CbC(Continuation based C) で実装し、評価する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 \end{abstract}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 % 英文概要
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 \begin{eabstract}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 \end{eabstract}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 % 表題などの出力
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 \maketitle
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 % 本文はここから始まる
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
88 % Introduce
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
89 \section{Gears OS}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
90 並列実行は Code の並列実行だけでなく、Data の単位が重要である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
91 本研究では Code Gear, Data Gear という単位で細かく分割し、依存関係を記述することで並列実行するフレームワーク Gears OS の開発を行なっている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
92 Code Gear, Data Gear はそれぞれ他の Code Gear, Data Gear に接続することで機能や Data 自体を拡張することが可能である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
93
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
94 従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
95 Gears OS では、Meta な機能を関数型言語における Monad に基づいて実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
96
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
97 Gears OS を用いて作成されたプログラムに対する Model Checking を行う機能を提供する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
98 これにより、生成されたプログラムの信頼性を保証する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
99
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
100 Gears OS は Gear を継続することによる柔軟性、Monad に基づくメタ計算による並行制御、Model Checking を用いた信頼性の確保を目的とする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
101
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
102 % Theory
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
103 \section{Monad とメタ計算}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
104 関数型言語では入力から出力を得る通常の計算の他にメタ計算と呼ばれるもの
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
105 がある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
106 メタ計算の例として、失敗する可能性がある計算、並行処理、入出力などの副
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
107 作用、メモリ管理などがある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
108 メタ計算の理論的な表現として、Monad を用いることが Moggi らにより提案
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
109 されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
110 Gears OS ではメタ計算を表現するのに、Monad と軽量継続を用いる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
111
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
112 Monad は関数が返す通常の値を含むデータ構造であり、メタ計算を表現するの
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
113 に必要な情報を格納している。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
114 失敗する可能性がある計算の場合は、計算が失敗したかどうかのフラグが
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
115 Monad に含まれる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
116 並行処理の場合は、Monad は可能な計算の interleaving(並び替え) になるが、
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
117 実際に並び替えを持っているわけではなく、マルチプロセッサで実行する環境
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
118 そのものが Monad に対応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
119
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
120 通常の関数を Monad を返すように変更することにより、メタ関数が得られる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
121 逆に Monad の中にある通常の戻り値のみに着目すると通常の関数に戻る。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
122 このように、Monad を用いたメタ計算の表現では通常の計算とメタ計算が一対
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
123 一に対応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
124
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
125 一般的には複数の Monad の組み合わせが Monad になることを示すのは難しい。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
126 Gears OS では Code と Data を分離して、Code から他の Code への呼び出し
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
127 を継続を用いて行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
128 Gears OS での Monad は Meta Code と Meta Data になる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
129
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
130 % Code Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
131 % Data Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
132 % Meta Code Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
133 % Meta Data Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
134 \section{Code Gear と Data Gear}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
135 Gears OS ではプログラムの実行単位として様々な Gear を使う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
136 Gear が平行実行の単位、データ分割、Gear 間の接続などになる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
137
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
138 Code Gear はプログラムの実行コードそのものであり、Cuda
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
139 の kernel に相当する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
140 Code Gear は複数の Data Gear を参照し、一つまたは複数の Data Gear に書
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
141 き込む。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
142 Code Gear は接続された Data Gear 以外には触らない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
143 Code Gear はサブルーチンコールではないので、呼び出し元に戻る概念はない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
144 その代わりに、次に実行する Code Gear を指定する機能(軽量継続)を持つ。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
145
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
146 Data Gear には、int や文字列などの Primitive Data Type が入る。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
147 自分が持っていない Code Gear, Data Gear は名前で指し示す。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
148
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
149 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることに
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
150 ある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
151 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
152
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
153 Code Gear, Data Gear はポインタを直接には扱わない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
154 これにより、Code と Data の分離性を上げて、ポインタ関連のセキュリティフ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
155 ローを防止する。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
157 Code Gear, Data Gear はそれぞれ関係を持っている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
158 例えば、ある Code Gear の次に実行される Code Gear、全体で木構造を持つ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
159 Data Gear などである。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
160 Gear の関連付けは Meta Gear を通して行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
161 Meta Gear は、いままでの OS におけるライブラリや内部のデータ構造に相当
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
162 する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
163 なので、Meta Gear は Code Gear, Data Gear へのポインタを持っている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
164
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
165 % s/Segment/Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
166
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
167 % Context
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
168 \section{継続}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
169 ある Code Gear から継続するときには、次に実行する Code Gear を名前で指
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
170 定する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
171 Meta Code Gear が名前を解釈して、処理を対応する Code Gear に引き渡す。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
172 これらは、従来の OS の Dynamic Loading Library や Command 呼び出しに対
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
173 応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
174 名前と Code Gear へのポインタの対応は Meta Data Gear に格納される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
175 この Meta Data Gear を Context と呼ぶことにする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
176 これは従来の OS の Process や Thread に対応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
177
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
178 Context には以下のようなものが格納される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
179 \begin{itemize}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
180 \item Code Gear の名前とポインタの対応表
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
181 \item Data Gear の Allocation 用の情報
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
182 \item Code Gear が参照する Data Gear へのポインタ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
183 \item Data Gear に格納される Data Type の情報
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
184 \end{itemize}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
185
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
186 \lstinputlisting[caption=Context]{source/context.h}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
187
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
188 \textbf{Code Gear の名前とポインタの対応表}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
190 Code Gear の名前とポインタの対応は enum と関数ポインタによって表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
191 これにより、実行時に比較ルーチンなどを動的に変更することが可能になる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
192
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
193 \textbf{Data Gear の Allocation 用の情報}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
194
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
195 Context の生成時にある程度の領域を確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
196 Context にはその領域へのポインタとサイズが格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
197 そのポインタを必要な Data Gear のサイズに応じて、インクリメントすることによって Data Gear の Allocation を実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
198
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
199 \textbf{Code Gear が参照する Data Gear へのポインタ}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
200
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
201 Context には Data Gear へのポインタが格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
202 Code Gear は Context を通して Data Gear へアクセスする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
203
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
204 \textbf{Data Gear に格納される Data Type の情報}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
205
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
206 Data Gear は union と struct によって表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
207 Context には Data Gear の Data Type の情報が格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
208 この情報から確保する Data Gear のサイズなどを決定する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
209
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
210 \lstinputlisting[caption=initContext]{source/context.c}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
211
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
212 % Persistent
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
213 \section{Persistent Data Gear}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
214 Data Gear の管理には木構造を用いる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
215 この木構造は非破壊で構築される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
216 非破壊的木構造では、編集元の木構造を破壊することなく新しい木構造を構成する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
217 破壊的木構造と異なりロックの必要がなく、平行して読み書き、参照を行うことが可能である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
218 また、変更前の木構造をすべて保持しているので過去のデータにアクセスすることができる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
219
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
220 \begin{figure}[!h]
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
221 \centering
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
222 \includegraphics[width=70mm]{images/nondestructive_tree_modification.pdf}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
223 \caption{木構造の非破壊的編集}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
224 \end{figure}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
225
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
226 % allocator
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
227 \section{Allocator}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
228 Gears OS では Context の生成時にある程度の領域を確保し、その領域を指すポインタをインクリメントすることで Allocation を実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
229
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
230 Context には Allocation 用の Data Gear が格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
231 この Data Gear に確保するサイズと確保後に接続する Code Gear の名前を書き込み、Allocation を行う Code Gear に接続することで必要な領域を確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
232
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
233 \lstinputlisting[caption=Allocator]{source/allocate.h}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
234
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
235 \section{}
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 \nocite{*}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 \bibliographystyle{ipsjunsrt}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 \bibliography{sigos}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 \end{document}