annotate final_pre/finalPre.tex @ 14:4c3b39b281eb

update
author mir3636
date Wed, 15 Feb 2017 21:48:16 +0900
parents cc8ff782067c
children 11058e51adb7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
mir3636
parents:
diff changeset
1 \documentclass[twocolumn,twoside,9.5pt]{jarticle}
mir3636
parents:
diff changeset
2 \usepackage[dvipdfmx]{graphicx}
mir3636
parents:
diff changeset
3 \usepackage{picins}
mir3636
parents:
diff changeset
4 \usepackage{fancyhdr}
mir3636
parents:
diff changeset
5 \usepackage{abstract}
mir3636
parents:
diff changeset
6 \usepackage{url}
mir3636
parents:
diff changeset
7 %\pagestyle{fancy}
mir3636
parents:
diff changeset
8 \lhead{\parpic{\includegraphics[height=1zw,keepaspectratio,bb=0 0 251 246]{pic/emblem-bitmap.pdf}}琉球大学主催 工学部情報工学科 卒業研究発表会}
mir3636
parents:
diff changeset
9 \rhead{}
mir3636
parents:
diff changeset
10 \cfoot{}
mir3636
parents:
diff changeset
11
mir3636
parents:
diff changeset
12 \setlength{\topmargin}{-1in \addtolength{\topmargin}{15mm}}
mir3636
parents:
diff changeset
13 \setlength{\headheight}{0mm}
mir3636
parents:
diff changeset
14 \setlength{\headsep}{5mm}
mir3636
parents:
diff changeset
15 \setlength{\oddsidemargin}{-1in \addtolength{\oddsidemargin}{11mm}}
mir3636
parents:
diff changeset
16 \setlength{\evensidemargin}{-1in \addtolength{\evensidemargin}{21mm}}
mir3636
parents:
diff changeset
17 \setlength{\textwidth}{181mm}
mir3636
parents:
diff changeset
18 \setlength{\textheight}{261mm}
mir3636
parents:
diff changeset
19 \setlength{\footskip}{0mm}
mir3636
parents:
diff changeset
20 \pagestyle{empty}
mir3636
parents:
diff changeset
21
mir3636
parents:
diff changeset
22 \input{dummy.tex}
mir3636
parents:
diff changeset
23 \renewcommand{\abstractname}{Abstract}
mir3636
parents:
diff changeset
24 \begin{document}
mir3636
parents:
diff changeset
25 \title{CbC 言語による OS 記述}
mir3636
parents:
diff changeset
26 %\title{Supporting NAT in Screen Sharing System TreeVNC}
mir3636
parents:
diff changeset
27 \author{135756F 氏名 {宮城}{光希} 指導教員 : 河野 真治}
mir3636
parents:
diff changeset
28 \date{}
mir3636
parents:
diff changeset
29 \twocolumn [
mir3636
parents:
diff changeset
30 \maketitle
mir3636
parents:
diff changeset
31 \begin{onecolabstract}
12
mir3636
parents: 10
diff changeset
32 We are developping Gears OS using Continuation based C (CbC).
mir3636
parents: 10
diff changeset
33 Gears OS provids highly reliable computation using meta computation.
mir3636
parents: 10
diff changeset
34 CbC gives Code Gear and Data Gear as programing units.
mir3636
parents: 10
diff changeset
35 A transfar from a Code Gear to another Code Gear is implemented using a CbC's goto statement,
mir3636
parents: 10
diff changeset
36 which is compiled as a jump instraction in CbC.
mir3636
parents: 10
diff changeset
37 Meta computations are key components of Gears OS, which provids memory managements, thread managements,
mir3636
parents: 10
diff changeset
38 managements of Data/Code Gear themselves.
mir3636
parents: 10
diff changeset
39 CbC's goto statments provids a ways of implementing meta computations.
mir3636
parents: 10
diff changeset
40 From a view point of meta computation, Data Gear or Code Gear are uniform data units, which are implemented
mir3636
parents: 10
diff changeset
41 as union Data in CbC.
mir3636
parents: 10
diff changeset
42 In the meta level, a transfar from a Code Gear is a goto statement to meta Code Gear with next Code Gear number and
mir3636
parents: 10
diff changeset
43 a Context which coresponds thread structure or an enviroments in a functional programing.
mir3636
parents: 10
diff changeset
44 A meta Code Gear handles meta computations such as meta computations.
mir3636
parents: 10
diff changeset
45 From a user level, meta structures are not visible directly and a Code Gear looks like a function using continuations.
mir3636
parents: 10
diff changeset
46 A stub Code Gear is used as a bridge between meta level and user(nomal) level.
mir3636
parents: 10
diff changeset
47 In this paper we create scripts which generate meta Code Gear and stub Code Gear from nomal level Code Gear and Data Gear.
mir3636
parents: 10
diff changeset
48 Using these scripts, we can provide a interface mechanisms which are packages of Code Gears and Data Gears.
mir3636
parents: 10
diff changeset
49 A simple TaskManager is constracted using the interfaces which is a simple operating systems.
mir3636
parents: 10
diff changeset
50 We will constracts various compornents of Gears OS and meta computations which provids reliabilty.
mir3636
parents: 10
diff changeset
51 For an example, generating agda program from nomal level Code Gear provids proof suports of the Code Gear.
mir3636
parents: 10
diff changeset
52 %CbC で OS を記述する。
mir3636
parents: 10
diff changeset
53 %CbCはLLVMで実装されている。
mir3636
parents: 10
diff changeset
54 %codeとcode のあいだをcall ではなくjmpで結ぶことができる(goto)
mir3636
parents: 10
diff changeset
55 %gotoをつかうことによりOSに必須なmeta計算を実現できる
mir3636
parents: 10
diff changeset
56 %メタ計算は例えばメモリ管理スレッド管理CPUやGPUの資源管理そしてData/Code Gear の管理などである
mir3636
parents: 10
diff changeset
57 %metaレベルではcode/data gear は一つの塊として操作される。これをcbcではunion dataとして実装している
mir3636
parents: 10
diff changeset
58 %code gear 間の接続はつぎのcode gearの番号とthread structure に相当するcontextをmeta code gear にgoto する
mir3636
parents: 10
diff changeset
59 %meta code gear で os の 機能であるメモリ管理やスレッド管理を行う。
mir3636
parents: 10
diff changeset
60 %ユーザーレベルではmeta構造を直接見ることはなく、継続を用いた関数型プログラミングに見える
mir3636
parents: 10
diff changeset
61 %metaレベルから見たdata gearをゆーざーれべるのcode gearに接続するにはstub というmeta code gear を用いる
mir3636
parents: 10
diff changeset
62 %stubとmetaはユーザーレベルcodegear とdatagearから生成することができる
mir3636
parents: 10
diff changeset
63 %本論文ではstub とcontext 管理構造を生成するスクリプトを作成した
mir3636
parents: 10
diff changeset
64 %これによりcode gear とdeta gear をデータを操作するinterface というまとまりにすることができる。
mir3636
parents: 10
diff changeset
65 %この仕組みの上に並列処理用のtaskmanagerを簡単なosとして構成することができた。
mir3636
parents: 10
diff changeset
66 %こんごはgears os の様々な構成要素を作成していきたい。
mir3636
parents: 10
diff changeset
67 %またメタ計算を用いて信頼性をあげる方法についても研究を進めていく。
mir3636
parents: 10
diff changeset
68 %例えばユーザーレベルプログラムから定理証明支援系であるagdaのコードを生成することにより、プログラムの正しさを証明していくことが考えられる。
10
mir3636
parents:
diff changeset
69 \end{onecolabstract}]
mir3636
parents:
diff changeset
70 \thispagestyle{fancy}
mir3636
parents:
diff changeset
71
mir3636
parents:
diff changeset
72 \section{メタ計算の重要性}
mir3636
parents:
diff changeset
73 プログラムを記述する際、通常の処理の他に、メモリ管理、スレッドの待ち合わせやネットワークの管理、エラーハンドリング等、記述しなければならない処理が存在する。
mir3636
parents:
diff changeset
74 これらの計算を Meta Computation と呼ぶ。
mir3636
parents:
diff changeset
75
mir3636
parents:
diff changeset
76 Meta Computation を通常の計算から切り離して記述するためには処理を細かく分割する必要がある。しかし、関数やクラスなどの単位は容易に分割できない。
mir3636
parents:
diff changeset
77
mir3636
parents:
diff changeset
78 そこで当研究室では Meta Computation を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。
mir3636
parents:
diff changeset
79
mir3636
parents:
diff changeset
80 Code Gear は関数に比べて細かく分割されているので Meta Computation をより柔軟に記述できる。
mir3636
parents:
diff changeset
81 Code Gear、Data Gear にはそれぞれメタレベルの単位である Meta Code Gear、Meta Data Gear が存在し、これらを用いて Meta Computation を実現する。
mir3636
parents:
diff changeset
82
mir3636
parents:
diff changeset
83 Continuation based C (CbC) はこの Code Gear 単位を用いたプログラミング言語として開発している。
mir3636
parents:
diff changeset
84
mir3636
parents:
diff changeset
85 CbCは軽量継続による遷移を行うので、継続前の Code Gear に戻ることはなく、状態遷移ベースのプログラミングに適している。
mir3636
parents:
diff changeset
86
mir3636
parents:
diff changeset
87 また、当研究室で開発している Gears OS は Code Gear、 Data Gear の単位を用いて開発されており、CbC で記述されている。
mir3636
parents:
diff changeset
88
mir3636
parents:
diff changeset
89 本研究では CbC を用いての Gears OS の実装と CbC における ユーザーの関知しない Meta Computationの自動生成を行なう。
mir3636
parents:
diff changeset
90
mir3636
parents:
diff changeset
91 %\begin{figure}[htbp]
mir3636
parents:
diff changeset
92 % \begin{center}
mir3636
parents:
diff changeset
93 % \includegraphics[width=50mm]{./pic/treeVnc.pdf}
mir3636
parents:
diff changeset
94 % \end{center}
mir3636
parents:
diff changeset
95 % \caption{構成される木構造}
mir3636
parents:
diff changeset
96 % \label{fig:tree}
mir3636
parents:
diff changeset
97 %\end{figure}
mir3636
parents:
diff changeset
98
mir3636
parents:
diff changeset
99 \section{Continuation based C (CbC)}
mir3636
parents:
diff changeset
100 CbC は 処理を Code Gear とした単位を用いて記述するプログラミング言語である。
mir3636
parents:
diff changeset
101 Code Gear は入力と出力を持ち、CbC では引数が入出力となっている。
mir3636
parents:
diff changeset
102 Code Gear から次の Code Gear へと goto による継続で遷移で処理を行い、引数として出力を与える。
mir3636
parents:
diff changeset
103 図\ref{fig:cs}は Code Gear 間の処理の流れを表している。
mir3636
parents:
diff changeset
104
mir3636
parents:
diff changeset
105 \begin{figure}[htpb]
mir3636
parents:
diff changeset
106 \begin{center}
mir3636
parents:
diff changeset
107 \scalebox{0.5}{\includegraphics{pic/codesegment.pdf}}
mir3636
parents:
diff changeset
108 \end{center}
mir3636
parents:
diff changeset
109 \caption{goto による code gear 間の継続}
mir3636
parents:
diff changeset
110 \label{fig:cs}
mir3636
parents:
diff changeset
111 \end{figure}
mir3636
parents:
diff changeset
112
mir3636
parents:
diff changeset
113 \section{Gears OS}
mir3636
parents:
diff changeset
114 Gears OS では並列実行するための Task を、実行する Code Gear 、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。
mir3636
parents:
diff changeset
115 Data Gear はデータの単位であり、int や文字列などの Primitive Type を持っている。
mir3636
parents:
diff changeset
116 Code Gear は 任意の数の Input Data Gear を参照して処理を行い、Output Data Gear を出力し処理を終える。
mir3636
parents:
diff changeset
117 また、接続された Data Gear 以外には参照を行わない。
mir3636
parents:
diff changeset
118 処理やデータの構造が Code Gear、Data Gear に閉じているため、これにより実行時間、メモリ使用量などを予測可能なものにすることが可能になる。
mir3636
parents:
diff changeset
119
mir3636
parents:
diff changeset
120 Gears OS では Meta Computation を Meta Code Gear、Meta Data Gear で表現する。
mir3636
parents:
diff changeset
121 Meta Code Gear は通常のCode Gear の直後に遷移され、Meta Computation を実行する。
mir3636
parents:
diff changeset
122
mir3636
parents:
diff changeset
123 CbC は Code Gear を処理の単位として用いたプログラミング言語であるため、Gears OS の Code Gear を記述するのに適している。
mir3636
parents:
diff changeset
124
mir3636
parents:
diff changeset
125 図\ref{fig:gearsos} に Gears OS の構成図を示す。
mir3636
parents:
diff changeset
126
mir3636
parents:
diff changeset
127 \begin{figure}[htpb]
mir3636
parents:
diff changeset
128 \begin{center}
mir3636
parents:
diff changeset
129 \scalebox{0.2}{\includegraphics{pic/gearsos.pdf}}
mir3636
parents:
diff changeset
130 \end{center}
mir3636
parents:
diff changeset
131 \caption{Gears OS の構成図}
mir3636
parents:
diff changeset
132 \label{fig:gearsos}
mir3636
parents:
diff changeset
133 \end{figure}
mir3636
parents:
diff changeset
134
14
mir3636
parents: 12
diff changeset
135 \section{Context}
mir3636
parents: 12
diff changeset
136 Gears OS では Context と呼ばれる接続可能な Code/Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear である。
mir3636
parents: 12
diff changeset
137 Gears OS は必要な Code/Data Gear に参照したい場合、この Context を通す必要がある。
mir3636
parents: 12
diff changeset
138 メインとなる Context と Worker 用の Context がある。
mir3636
parents: 12
diff changeset
139 Temporal Data Gear のためのメモリ空間は Context 毎に異なり、互いに干渉することはできない。
10
mir3636
parents:
diff changeset
140
14
mir3636
parents: 12
diff changeset
141 Context は Task でもあり、TaskManager によって Context が生成され CPUWorker へ送られる。
mir3636
parents: 12
diff changeset
142 Worker に渡された Task である Context の Input/Output Data Gear の依存関係が解決されたものから並列実行される。
10
mir3636
parents:
diff changeset
143
14
mir3636
parents: 12
diff changeset
144 \section{interface の記述}
mir3636
parents: 12
diff changeset
145 interface を記述することで Context から Code Gear が呼び出せるようになった。
mir3636
parents: 12
diff changeset
146 create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
mir3636
parents: 12
diff changeset
147 return で interface を返し、その先で interface で指定した Code Gear へ継続できるようになった。
mir3636
parents: 12
diff changeset
148
mir3636
parents: 12
diff changeset
149 \section{Gearef、GearImpl}
mir3636
parents: 12
diff changeset
150 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
mir3636
parents: 12
diff changeset
151 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すためコードが煩雑になってしまう。
mir3636
parents: 12
diff changeset
152 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
mir3636
parents: 12
diff changeset
153 Gearef に Context と型を渡すことでデータの参照が行える。
mir3636
parents: 12
diff changeset
154 また impliment を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
mir3636
parents: 12
diff changeset
155 GearImpl は Context と interface 名、interface の変数名を指定して参照する。
mir3636
parents: 12
diff changeset
156
mir3636
parents: 12
diff changeset
157 \section{stub Code Gear}
mir3636
parents: 12
diff changeset
158 Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。
mir3636
parents: 12
diff changeset
159 しかし、Context を直接扱うのはセキュリティ上好ましくない。
mir3636
parents: 12
diff changeset
160 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
mir3636
parents: 12
diff changeset
161 stub Code Gear は Code Gear が Code Gear へと継続する間に挟まれる。
mir3636
parents: 12
diff changeset
162 必要とする Data Gear を Context から取り出すという処理を行うものである。
mir3636
parents: 12
diff changeset
163 stub Code Gear は Code Gear 毎に生成される。
mir3636
parents: 12
diff changeset
164
mir3636
parents: 12
diff changeset
165 \section{Context, stub の自動生成}
mir3636
parents: 12
diff changeset
166 Gears OS では通常の Computation の他に Context や stub などの Meta Computation を記述する必要がある。
mir3636
parents: 12
diff changeset
167 Gears OS を現在の CbC の機能のみを用いて記述すると Context や stub Code Gear の記述を行わなくてはならず、これには多くの労力を要する。
mir3636
parents: 12
diff changeset
168 そのため、この記述を助けるために Context を生成する generate\_context と stub Code Gear を生成する generate\_stub を perl スクリプトで作成した。
10
mir3636
parents:
diff changeset
169
mir3636
parents:
diff changeset
170
mir3636
parents:
diff changeset
171 \nocite{*}
mir3636
parents:
diff changeset
172 \bibliographystyle{junsrt}
mir3636
parents:
diff changeset
173 \bibliography{reference}
mir3636
parents:
diff changeset
174 \end{document}