annotate paper/sigos.tex @ 11:37c481e6d758

edit
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 06 May 2015 22:29:16 +0900
parents 92f7c78d8d6c
children 6b32ea521f5b
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}
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
4 \usepackage{listings,jlisting}
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,
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
11 basicstyle={\ttfamily\footnotesize},%
5
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 \input{dummy.tex} %% Font
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 % ユーザが定義したマクロなど.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 \makeatletter
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 \begin{document}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 % 和文表題
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 \title{Monad に基づくメタ計算を基本とする Gears OS の設計}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 % 英文表題
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
39 \etitle{Design of Gears OS with Meta Computation based on Monad}
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 % 所属ラベルの定義
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 \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
43 \affilabel{2}{琉球大学工学部情報工学科\\Information Engineering, University of the Ryukyus.}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 % 和文著者名
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 \author{
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 小久保 翔平\affiref{1}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 \and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 伊波 立樹\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 \and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 河野 真治\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 }
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 \eauthor{
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
56 Shohei KOKUBO\affiref{1}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
57 \and
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
58 Tatsuki Iha\affiref{2}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
59 \and
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 Shinji KONO\affiref{2}
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 % 連絡先(投稿時に必要.製版用では無視される.)
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 \contact{小久保 翔平\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 〒903-0213 沖縄県西原町千原1番地\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 琉球大学工学部情報工学科\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 TEL: (098)895-2221\qquad FAX: (098)895-8727\\
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 email: kokubo@cr.ie.u-ryukyu.ac.jp}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 % 和文概要
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 \begin{abstract}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
72 本研究室では Code Gear, Data Gear を用いた並列フレームワークの開発を行なっている。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
73 Code Gear, Data Gear は処理とデータの単位である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
74 並列実行に必要な Meta な機能を関数型言語における Monad の原理に基づいて、実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
75 今回設計した Gears OS では Code Gear, Data Gear それぞれに Meta Code Gear と Meta Data Gear を対応させる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
76 Code Gear が実行されるとそれに対応する Meta Code Gear が実行され、Meta Computation が行われる。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 Meta Computation は OS が行うネットワーク管理、メモリ管理等の資源制御を行う。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
78 本論文では基本的な機能を設計し、CbC(Continuation based C) で実装する。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 \end{abstract}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 % 英文概要
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 \begin{eabstract}
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
83 We are developing parallel framework using a Code/Data Gear.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
84 Code/Data Gear are unit of processing and data.
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
85 Meta function for parallel execution based on a Monad in Functional Language is used in Geas OS.
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
86 A Meta Code/Data Gear attached to a Code/Data Gear as a Monad.
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
87 Meta Computation performs Network Management, Memory Management and more.
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
88 We show same implemetation of Gears OS using CbC(Continuation based C).
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 \end{eabstract}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 % 表題などの出力
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 \maketitle
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 % 本文はここから始まる
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
96 % Introduce
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
97 \section{Cerium と Alice}
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
98 本研究室では並列プログラミングフレームワーク Cerium\cite{cerium} と分散ネットフレームワーク Alice\cite{alice} の開発を行なってきた。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
99
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
100 Cerium と Alice を開発して得られた知見から Inherent Parallel, Distributed Open Computation をキーワードとして並列分散フレームワーク Gears OS の設計・開発を行う。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
101
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
102 Cerium では Task と呼ばれる分割されたプログラムを依存関係に沿って実行することで並列実行を実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
103 依存関係はプログラマ自身が意識して記述する必要がある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
104 Task の種類が増えると記述が煩雑になり、プログラマの負担が大きくなる。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
105 Task の依存関係がデータの依存関係を正しく保証しない場合があるという問題がある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
106 また、Task の取り扱うデータには型情報がない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
107 汎用ポインタをキャストして利用するしかなく、型の検査が行われていない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
108 Cerium は C++ で実装されているが、オブジェクトと並列処理が直接対応していないのでオブジェクト指向で記述する利点が少ない。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
109 Cell\cite{cell}, Many Core CPU, GPU といった様々なプロセッサをサポートしている。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
110 しかし、それぞれの環境でプログラムを高速に動作させるためにはそれぞれに合わせた実行機構を必要としている。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
111
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
112 Alice は本研究室で開発を行なっている分散管理フレームワークである。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
113 Alice では処理の単位である Code Segment, データの単位である Data Segment を用いてプログラムを記述\cite{segment}する。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
114 Code Segment 使用する Input Data Segment, Output Data Segment を指定することで処理とデータの関係を記述する。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
115 Alice は Java で実装されており、実行速度が遅いという問題がある。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
116 また、Data Segment にアクセスする API のシンタックスが特殊で Alice を用いてプログラムを作成するためには慣れが必要になる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
117
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
118 \section{Gears OS}
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
119 Cerium と Alice の例題から Code の単位だけでなく、Data の単位も必要であることがわかった。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
120 Gears OS では Gear という単位を用いてプログラムを Code Gear, Data Gear に細かく分割する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
121 Code Gear は Input Data Gear から Output Data Gear を生成する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
122 Input と Output の関係から Code Gear 同士の依存関係を解決し、並列実行するフレームワークの開発を行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
123 Code Gear はそれに接続された Data Gear のみを扱う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
124 Code/Data Gear 同士の関係は Meta Code/Data Gear によって表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
125 この Meta Code/Data Gear を用いることで機能やデータ自体を拡張することができる。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
126
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
127 Cerium は初め Cell 向けのフレームワークとして設計されたという経緯からプロセッサ毎の実行機構が異なる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
128 Gears OS では Many Core CPU, GPU をはじめとする様々なプロセッサを同等な実行機構でサポートする。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
129
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
130 本研究室で開発している CbC(Continuation based C)\cite{cbc} を用いて、Gears OS を実装する。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
131 CbC はプログラムを Code Segment, Data Segment という単位で記述する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
132 CbC において Code Segment 間の処理の移動は function call ではなく、goto を用いた軽量継続を用いる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
133 CbC のコンパイルには LLVM をバックエンドとしたコンパイラ\cite{cbc-llvm}を用いる。
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
134
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
135 従来の OS が行う排他制御、メモリ管理、並列実行などは Meta Computation に相当する。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
136 関数型言語では Meta Computation に Monad を用いる手法\cite{monad}がある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
137 Gears OS では、Meta Code/Data Gear を Monad として定義し、Meta Computation を実現する。
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
138
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
139 Gears OS では並列実行をサポートするだけでなく、信頼性も確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
140 そのために Gears OS を用いて作成されたプログラムに対する Model Checking を行う機能\cite{model-check}を提供する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
141 並列プログラムに Model Checking を行うことでそのプログラムがとり得る状態を列挙する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
142 これにより、並列実行時のデッドロックの検出などを行うことでプログラムの信頼性を確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
143 Model Checking も Meta Code/Data Gear を用いて実現する。
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
144
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
145 Gears OS は Many Core CPU, GPU といった並列実行環境に合わせた設計・実装を行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
146 また、接続する Gear を変更することでプログラムの振る舞いを変更することを可能にする柔軟性、Monad に基づくメタ計算による並行制御、Model Checking を用いた信頼性の確保を目的とする。
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
147 Gears OS の構成は図\ref{fig:arch}の通りである。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
148
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
149 \begin{figure}[!h]
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
150 \centering
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
151 \includegraphics[width=70mm]{images/arch.pdf}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
152 \caption{Gears OS の構成}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
153 \label{fig:arch}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
154 \end{figure}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
155
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
156 % Theory
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
157 \section{Monad とメタ計算}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
158 関数型言語では入力から出力を得る通常の計算の他にメタ計算と呼ばれるもの
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
159 がある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
160 メタ計算の例として、失敗する可能性がある計算、並行処理、入出力などの副
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
161 作用、メモリ管理などがある。
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
162 メタ計算の理論的な表現として、Monad を用いることが Moggi らにより提案\cite{monad}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
163 されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
164 Gears OS ではメタ計算を表現するのに、Monad と軽量継続を用いる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
165
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
166 Monad は関数が返す通常の値を含むデータ構造であり、メタ計算を表現するの
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
167 に必要な情報を格納している。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
168 失敗する可能性がある計算の場合は、計算が失敗したかどうかのフラグが
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
169 Monad に含まれる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
170 並行処理の場合は、Monad は可能な計算の interleaving(並び替え) になるが、
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
171 実際に並び替えを持っているわけではなく、マルチプロセッサで実行する環境
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
172 そのものが Monad に対応する。
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 通常の関数を Monad を返すように変更することにより、メタ関数が得られる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
175 逆に Monad の中にある通常の戻り値のみに着目すると通常の関数に戻る。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
176 このように、Monad を用いたメタ計算の表現では通常の計算とメタ計算が一対
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
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
179 一般的には複数の Monad の組み合わせが Monad になることを示すのは難しい。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
180 Gears OS では Code と Data を分離して、Code から他の Code への呼び出し
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
181 を継続を用いて行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
182 Gears OS での Monad は Meta Code と Meta Data になる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
183
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
184 % Code Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
185 % Data Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
186 % Meta Code Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
187 % Meta Data Gear
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
188 \section{Code Gear と Data Gear}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
189 Gears OS ではプログラムの実行単位として様々な Gear を使う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
190 Gear が平行実行の単位、データ分割、Gear 間の接続などになる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
191
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
192 Code Gear はプログラムの実行コードそのものであり、OpenCL\cite{opencl}/CUDA\cite{cuda}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
193 の kernel に相当する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
194 Code Gear は複数の Data Gear を参照し、一つまたは複数の Data Gear に書
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
195 き込む。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
196 Code Gear は接続された Data Gear 以外には触らない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
197 Code Gear はサブルーチンコールではないので、呼び出し元に戻る概念はない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
198 その代わりに、次に実行する Code Gear を指定する機能(軽量継続)を持つ。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
199
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
200 Data Gear には、int や文字列などの Primitive Data Type が入る。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
201 自分が持っていない Code Gear, Data Gear は名前で指し示す。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
202
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
203 Gear の特徴の一つはその処理が Code Gear, Data Gear に閉じていることに
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
204 ある。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
205 これにより、Code Gear の実行時間、メモリ使用量を予測可能なものにする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
206
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
207 Code Gear, Data Gear はポインタを直接には扱わない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
208 これにより、Code と Data の分離性を上げて、ポインタ関連のセキュリティフ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
209 ローを防止する。
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
211 Code Gear, Data Gear はそれぞれ関係を持っている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
212 例えば、ある Code Gear の次に実行される Code Gear、全体で木構造を持つ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
213 Data Gear などである。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
214 Gear の関連付けは Meta Gear を通して行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
215 Meta Gear は、いままでの OS におけるライブラリや内部のデータ構造に相当
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 なので、Meta Gear は Code Gear, Data Gear へのポインタを持っている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
218 % s/Segment/Gear
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 % Context
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
221 \section{継続}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
222 ある Code Gear から継続するときには、次に実行する Code Gear を名前で指
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
223 定する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
224 Meta Code Gear が名前を解釈して、処理を対応する Code Gear に引き渡す。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
225 これらは、従来の OS の Dynamic Loading Library や Command 呼び出しに対
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
226 応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
227 名前と Code Gear へのポインタの対応は Meta Data Gear に格納される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
228 この Meta Data Gear を Context と呼ぶことにする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
229 これは従来の OS の Process や Thread に対応する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
230
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
231 Context には以下のようなものが格納される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
232 \begin{itemize}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
233 \item Code Gear の名前とポインタの対応表
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
234 \item Data Gear の Allocation 用の情報
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
235 \item Code Gear が参照する Data Gear へのポインタ
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
236 \item Data Gear に格納される Data Type の情報
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
237 \end{itemize}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
238
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
239 \lstinputlisting[caption=Context]{source/context.h}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
240
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
241 \paragraph*{Code Gear の名前とポインタの対応表}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
242 Code Gear の名前とポインタの対応は enum と関数ポインタによって表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
243 これにより、実行時に比較ルーチンなどを動的に変更することが可能になる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
244
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
245 \paragraph*{Data Gear の Allocation 用の情報}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
246 Context の生成時にある程度の領域を確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
247 Context にはその領域へのポインタとサイズが格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
248 そのポインタを必要な Data Gear のサイズに応じて、インクリメントすることによって Data Gear の Allocation を実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
249
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
250 \paragraph*{Code Gear が参照する Data Gear へのポインタ}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
251 Context には Data Gear へのポインタが格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
252 Code Gear は Context を通して Data Gear へアクセスする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
253
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
254 \paragraph*{Data Gear に格納される Data Type の情報}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
255 Data Gear は union と struct によって表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
256 Context には Data Gear の Data Type の情報が格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
257 この情報から確保する Data Gear のサイズなどを決定する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
258
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
259 \lstinputlisting[caption=initContext]{source/context.c}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
260
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
261 % Persistent
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
262 \section{Persistent Data Gear}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
263 Data Gear の管理には木構造を用いる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
264 この木構造は非破壊で構築される。
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
265 非破壊的木構造では、図\ref{fig:non-destructive_tree}のように編集元の木構造を破壊することなく新しい木構造を構成する。
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
266 破壊的木構造と異なりロックの必要がなく、平行して読み書き、参照を行うことが可能である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
267 また、変更前の木構造をすべて保持しているので過去のデータにアクセスすることができる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
268
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
269 \begin{figure}[!h]
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
270 \centering
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
271 \includegraphics[width=70mm]{images/nondestructive_tree_modification.pdf}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
272 \caption{木構造の非破壊的編集}
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
273 \label{fig:non-destructive_tree}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
274 \end{figure}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
275
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
276 % allocator
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
277 \section{Allocator}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
278 Gears OS では Context の生成時にある程度の領域を確保し、その領域を指すポインタをインクリメントすることで Allocation を実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
279
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
280 Context には Allocation 用の Data Gear が格納されている。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
281 この Data Gear に確保するサイズと確保後に接続する Code Gear の名前を書き込み、Allocation を行う Code Gear に接続することで必要な領域を確保する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
282
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
283 \lstinputlisting[label=allocate, caption=Allocator]{source/allocate.h}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
284
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
285 ソースコード\ref{allocate}では Code Gear である code1 でポインタを扱っており、Code Gear でポインタを扱わないという設計思想に合っていない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
286 そこで、ソースコード\ref{allocate-ideal}をソースコード\ref{allocate}として解釈するようにコンパイラを改良する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
287
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
288 \lstinputlisting[label=allocate-ideal, caption=SyntaxSugar]{source/allocate-ideal.c}
5
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 2
diff changeset
289
6
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
290 % List
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
291 \section{List}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
292 通常 List は要素と次へのポインタを持つ構造体で表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
293 Gears OS の場合、Meta レベル以外でポインタは扱わないので図\ref{fig:list}のように任意の要素を持つ Data Gear と次へのポインタを持つ Meta Data Gear の組によって List は表現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
294
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
295 \begin{figure}[!h]
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
296 \centering
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
297 \includegraphics[width=70mm]{images/List.pdf}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
298 \caption{List の表現}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
299 \label{fig:list}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
300 \end{figure}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 5
diff changeset
301
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
302 \section{Synchronized Queue}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
303 Gears OS では List を表現する Code/Data Gear に CAS(Compare and Swap) を行う Meta Code/Data Gear を接続することで Synchronized Queue を実現する。
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
304 Gears OS の機能は状態遷移図とクラスダイアグラムを組み合わせた図で表現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
305 この図を GearBox と呼ぶことにする。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
306 図\ref{fig:sync}は Synchronized Queue の GearBox である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
307 M:receiver/sender が CAS を行う Meta Code Gear となる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
308
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
309 \begin{figure}[!h]
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
310 \centering
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
311 \includegraphics[width=70mm]{images/synchronizedQueue.pdf}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
312 \caption{Synchronized Queue}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
313 \label{fig:sync}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
314 \end{figure}
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
315
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
316 \section{比較}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
317 Cerium/Alice, OpenCL/CUDA, 従来の OS との比較を以下に示す。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
318
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
319 \paragraph*{Cerium/Alice}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
320 Gears OS の Code Gear は Cerium の Task, Context は HTask に相当する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
321 Cerium とは異なり、Gears OS は処理とデータが分離している。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
322 Gears OS では分離したデータを Data Gear と呼称する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
323 これは Alice の Data Segment と同等のものである。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
324 Gears OS では Alice と同様に Code と Data の関係から依存関係を解決する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
325
11
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 10
diff changeset
326 Alice は Data Segment を MessagePack\cite{msg} を利用して通信することで分散実行を実現する。
10
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
327 Gears OS 上での分散実行も Alice に沿って設計・実装する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 9
diff changeset
328
9
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
329 \paragraph*{OpenCL/CUDA}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
330 Code Gear は OpenCL/CUDA の kernel に相当する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
331 OpenCL/CUDA には Data Gear に相当する仕組みはない。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
332 接続された複数の Code Gear は接続された順番通りに実行される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
333 これは、OpenCL の CommandQueue, CUDA の Stream と同等のものである。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
334 OpenCL/CUDA では kernel の依存関係を複雑に記述する必要があるが、Gears OS では Code と Data の関係から自動的に依存関係を解決する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
335
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
336 \paragraph*{従来の OS}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
337 従来の OS が行なってきたネットワーク管理、メモリ管理、平行制御などのメタな部分を Gears OS では Meta Code Gear, Meta Data Gear を用いて行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
338 このメタ計算は Monad に基づいて実現される。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
339
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
340 \section{まとめ}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
341 Gears OS は Inherent Parallel をキーワードとして、Gears OS 上で実行されるプログラムが自動的に並列で処理されるように設計した。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
342 Gear を他の Gear に接続することで機能およびデータの拡張を行える柔軟性を持つ。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
343 Meta な機能や並行制御を関数型言語における Monad に基づいて実現する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
344 また、機能として Model Checking を持ち、Gears OS 上で実行されるプログラムの信頼性を保証する。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
345 本論文では必要な機能の一部である Context, Allocator, List, Non-Destructive Red-Black Tree を CbC を用いて実装した。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
346 今後は、Synchronized Queue, Woker を実装する予定である。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
347 これにより、Cerium と同等の例題を動かすことが可能となる。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
348 例題としては Bitonic Sort, Word Count を予定している。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
349 例題が動くことを確認し次第、Gears OS の測定・評価を行う。
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents: 6
diff changeset
350
2
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 \nocite{*}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 \bibliographystyle{ipsjunsrt}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353 \bibliography{sigos}
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354
Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 \end{document}