14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 <!DOCTYPE html>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 <html>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 <head>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 <meta http-equiv="content-type" content="text/html;charset=utf-8">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 <title>GearsOSの分散ファイルシステムの設計</title>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 <meta name="generator" content="Slide Show (S9) v4.1.0 on Ruby 2.6.8 (2021-07-07) [universal.x86_64-darwin21]">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13 <meta name="author" content="Takahiro Ikki, Shinji Kono" >
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
14
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
15 <!-- style sheet links -->
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16 <link rel="stylesheet" href="s6/themes/screen.css" media="screen">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17 <link rel="stylesheet" href="s6/themes/print.css" media="print">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 <link rel="stylesheet" href="s6/themes/blank.css" media="screen,projection">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 <!-- JS -->
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21 <script src="s6/js/jquery-1.11.3.min.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 <script src="s6/js/jquery.slideshow.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 <script src="s6/js/jquery.slideshow.counter.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24 <script src="s6/js/jquery.slideshow.controls.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25 <script src="s6/js/jquery.slideshow.footer.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 <script src="s6/js/jquery.slideshow.autoplay.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 <!-- prettify -->
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29 <link rel="stylesheet" href="scripts/prettify.css">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
30 <script src="scripts/prettify.js"></script>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
31
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
32 <style>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
33 .slide {page-break-after: always;}
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
34 </style>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
35
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
36
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
38
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
39 </head>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 <body>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
41
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
42 <div class="layout">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
43 <div id="header"></div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
44 <div id="footer">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
45 <div align="right">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46 <img src="s6/images/logo.svg" width="200px">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
47 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
49 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
50
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
51 <div class="presentation">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
52
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 <div class='slide cover'>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54 <table width="90%" height="90%" border="0" align="center">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
55 <tr>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
56 <td>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
57 <div align="center">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
58 <h1><font color="#808db5">GearsOSの分散ファイルシステムの設計</font></h1>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 </td>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
61 </tr>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
62 <tr>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
63 <td>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
64 <div align="left">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
65 Takahiro Ikki, Shinji Kono
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
66 琉球大学
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
67 <hr style="color:#ffcc00;background-color:#ffcc00;text-align:left;border:none;width:100%;height:0.2em;">
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
68 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
69 </td>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
70 </tr>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
71 </table>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
72 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
75 <div class='slide'>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 <!-- _S9SLIDE_ -->
|
22
|
78 <h2 id="gearsosのファイルシステムの設計方針">GearsOSのファイルシステムの設計方針</h2>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
79 <ul>
|
22
|
80 <li>GearsOSはGearという単位で記述が行われているOSプロジェクトである</li>
|
|
81 <li>GearsOSのファイルシステムも同様にDataGearの単位で構成したい</li>
|
20
|
82 <li>GearsOSのファイルシステムの設計と実装を行った</li>
|
22
|
83 <li>ファイルに取り扱うデータに対応した複数のストリームを持たせたい
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84 <ul>
|
22
|
85 <li>従来では異なるデータでも単一のストリームから入力される</li>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 </ul>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 </li>
|
22
|
88 <li>GearsOSには将来的にアプリケーションが担う重要な機能をOSに取り込みたい
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 <ul>
|
20
|
90 <li>バックアップ</li>
|
|
91 <li>ファイルの型認識</li>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 </ul>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
93 </li>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
94 </ul>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
99
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 <div class='slide'>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 <!-- _S9SLIDE_ -->
|
22
|
102 <h2 id="gearsosのgear概念12">GearsOSのGear概念(1/2)</h2>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
103 <ul>
|
22
|
104 <li>関数でなくGearという単位を用いて記述する</li>
|
|
105 <li>Gearは関数と異なり、スタックを持たないため軽量継続と呼ぶ</li>
|
|
106 <li>CodeGear
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
107 <ul>
|
22
|
108 <li>従来のThreadにあたる</li>
|
|
109 <li>goto文(jump命令)を使って遷移する</li>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110 </ul>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 </li>
|
22
|
112 <li>DataGear
|
|
113 <ul>
|
|
114 <li>従来の変数データにあたる</li>
|
|
115 </ul>
|
|
116 </li>
|
|
117 </ul>
|
|
118
|
|
119
|
|
120
|
|
121 </div>
|
|
122
|
|
123 <div class='slide'>
|
|
124 <!-- _S9SLIDE_ -->
|
|
125 <h2 id="gearsosのgear概念22">GearsOSのGear概念(2/2)</h2>
|
|
126 <ul>
|
20
|
127 <li>CodeGearは処理を行う際、DataGearを参照し処理を行う(InputDataGear)</li>
|
|
128 <li>CodeGearは処理の終了後、以降に必要なデータをDataGearとして出力する(OutputDataGear)</li>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 </ul>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 <div style="text-align: center;">
|
22
|
131 <img src="images/cg-dg.pdf" alt="cgdgの関係図" width="600" />
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
132 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
137
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
138 <div class='slide'>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 <!-- _S9SLIDE_ -->
|
20
|
140 <h2 id="gearsosのinterface">GearsOSのInterface</h2>
|
|
141 <ul>
|
22
|
142 <li>Object型指向の仕組み</li>
|
|
143 <li>APIとなるCodeGearとその参照するDataGearを宣言する</li>
|
|
144 <li>DataGear/CodeGearの一時的な置き場としての役割を持つ
|
|
145 <pre><code>typedef struct Tree<>{
|
|
146 union Data* tree;
|
|
147 struct Node* node;
|
|
148 __code put(Impl* tree,Type* node, __code next(...));
|
|
149 __code get(Impl* tree, Type* node, __code next(...));
|
|
150 __code remove(Impl* tree,Type* node, __code next(...));
|
|
151 __code next(...);
|
|
152 } Tree;
|
|
153 </code></pre>
|
|
154 </li>
|
|
155 </ul>
|
|
156
|
|
157
|
|
158
|
|
159 </div>
|
|
160
|
|
161 <div class='slide'>
|
|
162 <!-- _S9SLIDE_ -->
|
|
163 <h2 id="メタレベルのgear13">メタレベルのGear(1/3)</h2>
|
|
164 <ul>
|
|
165 <li>CodeGearとDataGearにはユーザーが記述しない、メタレベルのものが存在する
|
|
166 <ul>
|
|
167 <li>メタレベルな記述はトランスコンパイラにより自動生成される</li>
|
|
168 </ul>
|
|
169 </li>
|
|
170 </ul>
|
|
171 <div style="text-align: center;">
|
|
172 <img src="images/meta-cg-dg.pdf" alt="ノーマルレベルとメタレベルの視点からのGearの関係" width="800" />
|
|
173 </div>
|
|
174
|
|
175
|
|
176
|
|
177 </div>
|
|
178
|
|
179 <div class='slide'>
|
|
180 <!-- _S9SLIDE_ -->
|
|
181 <h2 id="メタレベルのgear23">メタレベルのGear(2/3)</h2>
|
|
182 <ul>
|
|
183 <li>MetaCodeGear
|
|
184 <ul>
|
|
185 <li>CodeGearの処理前と処理後に参照される</li>
|
|
186 <li>Input/OutputDataGearを引き渡す</li>
|
|
187 <li>CodeGear処理前に呼ばれるものを特にstubCodeGearと呼ぶ</li>
|
|
188 </ul>
|
|
189 </li>
|
|
190 </ul>
|
|
191 <div style="text-align: center;">
|
|
192 <img src="images/meta-cg-dg.pdf" alt="ノーマルレベルとメタレベルの視点からのGearの関係" width="800" />
|
|
193 </div>
|
|
194
|
|
195
|
|
196
|
|
197 </div>
|
|
198
|
|
199 <div class='slide'>
|
|
200 <!-- _S9SLIDE_ -->
|
|
201 <h2 id="メタレベルのgear33">メタレベルのGear(3/3)</h2>
|
|
202 <ul>
|
|
203 <li>MetaDataGear
|
|
204 <ul>
|
|
205 <li>MetaCodeGearにて参照されるDataGear</li>
|
|
206 </ul>
|
|
207 </li>
|
|
208 </ul>
|
|
209 <div style="text-align: center;">
|
|
210 <img src="images/meta-cg-dg.pdf" alt="ノーマルレベルとメタレベルの視点からのGearの関係" width="800" />
|
|
211 </div>
|
|
212
|
|
213
|
|
214
|
|
215 </div>
|
|
216
|
|
217 <div class='slide'>
|
|
218 <!-- _S9SLIDE_ -->
|
|
219 <h2 id="gearsosのファイルシステムの設計">GearsOSのファイルシステムの設計</h2>
|
|
220 <ul>
|
|
221 <li>DataGearの単位でデータを操作したい</li>
|
|
222 <li>通信データに対応した複数のストリームを持ちたい</li>
|
|
223 <li>Transaction(マクロレベル)で操作したい
|
|
224 <ul>
|
|
225 <li>従来のファイルシステムは一部の操作のみTransactionである</li>
|
|
226 </ul>
|
|
227 </li>
|
|
228 <li>ファイルそのものが通信を担当する
|
20
|
229 <ul>
|
22
|
230 <li>ChristieのDataGearManagerを参考にする</li>
|
|
231 </ul>
|
|
232 </li>
|
|
233 </ul>
|
|
234
|
|
235
|
|
236
|
|
237 </div>
|
|
238
|
|
239 <div class='slide'>
|
|
240 <!-- _S9SLIDE_ -->
|
|
241 <h2 id="gearsosのファイルデータ操作13">GearsOSのファイルデータ操作(1/3)</h2>
|
|
242 <ul>
|
|
243 <li>GearsOSはDataGearのやりとりでプログラムが構成される
|
|
244 <ul>
|
|
245 <li>ファイルシステムも同様の実装にしたい = DataGear単位で操作したい</li>
|
|
246 </ul>
|
|
247 </li>
|
|
248 </ul>
|
|
249 <div style="text-align: center;">
|
|
250 <img src="images/QueueElement.pdf" alt="Queueの構造" width="800" />
|
|
251 </div>
|
|
252
|
|
253
|
|
254
|
|
255 </div>
|
|
256
|
|
257 <div class='slide'>
|
|
258 <!-- _S9SLIDE_ -->
|
|
259 <h2 id="gearsosのファイルデータ操作23">GearsOSのファイルデータ操作(2/3)</h2>
|
|
260 <ul>
|
|
261 <li>GearsOSのファイルデータは任意の型を持った構造体で実装される(ファイルレコード)</li>
|
|
262 <li>レコードは決められた順番で連続しており、Queueに保存される</li>
|
|
263 </ul>
|
|
264 <div style="text-align: center;">
|
|
265 <img src="images/QueueElement.pdf" alt="Queueの構造" width="800" />
|
|
266 </div>
|
|
267
|
|
268
|
|
269
|
|
270 </div>
|
|
271
|
|
272 <div class='slide'>
|
|
273 <!-- _S9SLIDE_ -->
|
|
274 <h2 id="gearsosのファイルデータ操作33">GearsOSのファイルデータ操作(3/3)</h2>
|
|
275 <ul>
|
|
276 <li>構造体の型を判別することで処理の切り替えが行える</li>
|
|
277 </ul>
|
|
278 <div style="text-align: center;">
|
|
279 <img src="images/QueueElement.pdf" alt="Queueの構造" width="800" />
|
|
280 </div>
|
|
281
|
|
282
|
|
283
|
|
284 </div>
|
|
285
|
|
286 <div class='slide'>
|
|
287 <!-- _S9SLIDE_ -->
|
|
288 <h2 id="gearsfsのトランザクション">GearsFSのトランザクション</h2>
|
|
289 <ul>
|
|
290 <li>GearsOSのDataGear操作はマクロな操作である
|
|
291 <ul>
|
|
292 <li>よってCodeGearはTransactionである</li>
|
|
293 </ul>
|
|
294 </li>
|
|
295 <li>ファイルシステム操作もCodeGearで記述されるためTransactionとなる</li>
|
|
296 <li>トランザクションな操作によってファイルシステムの整合性の保守が行いやすい</li>
|
|
297 </ul>
|
|
298
|
|
299
|
|
300
|
|
301 </div>
|
|
302
|
|
303 <div class='slide'>
|
|
304 <!-- _S9SLIDE_ -->
|
|
305 <h2 id="queueによるgearsosのファイル">QueueによるGearsOSのファイル</h2>
|
|
306 <ul>
|
|
307 <li>GearsOSのファイルはファイルレコードを保持するQueueとなる</li>
|
|
308 <li>デバイスへの保存はQueueを保存すればよい</li>
|
23
|
309 <li>ファイルはQueueなのでファイルのAPIは大きく二つとなる
|
|
310 <ul>
|
|
311 <li>Put</li>
|
|
312 <li>Take</li>
|
|
313 </ul>
|
|
314 </li>
|
22
|
315 </ul>
|
|
316
|
|
317
|
|
318
|
|
319 </div>
|
|
320
|
|
321 <div class='slide'>
|
|
322 <!-- _S9SLIDE_ -->
|
|
323 <h2 id="queueapi--put-">QueueAPI -Put-</h2>
|
|
324 <ul>
|
|
325 <li>Put
|
|
326 <ul>
|
|
327 <li>Queueに対してファイルレコードを入力する</li>
|
|
328 <li>ファイルの変更をレコードとして書き込む
|
|
329 <pre><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) {
|
|
330 Element* element = new Element();
|
|
331 element->data = data;
|
|
332 element->next = NULL;
|
|
333 queue->last->next = element;
|
|
334 queue->last = element;
|
|
335 goto next(...);
|
|
336 }
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
337 </code></pre>
|
20
|
338 </li>
|
|
339 </ul>
|
|
340 </li>
|
|
341 </ul>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
342
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
343
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
344
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
345 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
346
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
347 <div class='slide'>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
348 <!-- _S9SLIDE_ -->
|
22
|
349 <h2 id="queueapi--take-">QueueAPI -Take-</h2>
|
16
|
350 <ul>
|
20
|
351 <li>Take
|
|
352 <ul>
|
|
353 <li>Queueからファイルレコードを取り出す</li>
|
|
354 <li>Queue内のレコードをループで全て取り出せば良い
|
22
|
355 <pre><code>__code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
|
|
356 printf("take\n");
|
|
357 struct Element* top = queue->top;
|
|
358 struct Element* nextElement = top->next;
|
|
359 if (queue->top == queue->last) {
|
|
360 data = NULL;
|
|
361 } else {
|
|
362 queue->top = nextElement;
|
|
363 data = nextElement->data;
|
|
364 }
|
|
365 goto next(data, ...);
|
|
366 }
|
20
|
367 </code></pre>
|
|
368 </li>
|
19
|
369 </ul>
|
|
370 </li>
|
|
371 </ul>
|
|
372
|
|
373
|
|
374
|
|
375 </div>
|
|
376
|
|
377 <div class='slide'>
|
|
378 <!-- _S9SLIDE_ -->
|
23
|
379 <h2 id="複数のストリームから構成されるファイル">複数のストリームから構成されるファイル</h2>
|
17
|
380 <ul>
|
23
|
381 <li>入力されるデータに応じた個別のstreamを備えたい
|
20
|
382 <ul>
|
23
|
383 <li>streamと入力されたデータの処理を直接結びつけたい</li>
|
20
|
384 </ul>
|
|
385 </li>
|
23
|
386 <li>最低でもInput/OutputStreamの二つが必要となる</li>
|
|
387 <li>ファイルは複数のStreamを持ったリストとして実装する</li>
|
|
388 <li>Streamはkey nameを持ち、keyでアクセスを行う</li>
|
|
389 </ul>
|
|
390
|
|
391
|
|
392
|
|
393 </div>
|
|
394
|
|
395 <div class='slide'>
|
|
396 <!-- _S9SLIDE_ -->
|
|
397 <h2 id="ファイル通信の構成">ファイル通信の構成</h2>
|
|
398 <ul>
|
|
399 <li>GearsOSのファイルは大域的に解放された資源としたい
|
|
400 <ul>
|
|
401 <li>ファイル自信を通信そのものとして実装する</li>
|
|
402 <li>Streamに対しsocket接続により遠隔にアクセスする</li>
|
|
403 </ul>
|
|
404 </li>
|
|
405 <li>分散フレームワークChristieのDataGearManagerの仕組みを利用する</li>
|
17
|
406 </ul>
|
|
407
|
|
408
|
|
409
|
|
410 </div>
|
|
411
|
|
412 <div class='slide'>
|
|
413 <!-- _S9SLIDE_ -->
|
20
|
414 <h2 id="datagearmanager">DataGearManager</h2>
|
17
|
415 <ul>
|
23
|
416 <li>分散フレームワークChristieの仕組みの一つ</li>
|
20
|
417 <li>keyとvalueの組み合わせとなるDataGearを保持するデータプール</li>
|
|
418 <li>ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する</li>
|
|
419 <li>LocalDGMはノード本体に対応するデータプールである
|
|
420 <ul>
|
|
421 <li>CodeGearはLocalDGMに対してDataGearを参照する</li>
|
|
422 </ul>
|
|
423 </li>
|
22
|
424 <li>RemoteDGMは接続する相手ノードに対応するデータプールproxyである
|
20
|
425 <ul>
|
|
426 <li>RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる</li>
|
|
427 </ul>
|
|
428 </li>
|
17
|
429 </ul>
|
|
430
|
20
|
431
|
|
432
|
|
433 </div>
|
|
434
|
|
435 <div class='slide'>
|
|
436 <!-- _S9SLIDE_ -->
|
|
437 <h2 id="datagearmanager-1">DataGearManager</h2>
|
23
|
438 <ul>
|
|
439 <li>任意の相手のRemoteDGMを作成することでTopologyが形成される</li>
|
|
440 </ul>
|
19
|
441 <div style="text-align: center;">
|
20
|
442 <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800" />
|
19
|
443 </div>
|
|
444
|
17
|
445
|
|
446
|
|
447 </div>
|
|
448
|
|
449 <div class='slide'>
|
|
450 <!-- _S9SLIDE_ -->
|
23
|
451 <h2 id="gearsos上のsocket通信">GearsOS上のsocket通信</h2>
|
19
|
452 <ul>
|
23
|
453 <li>GearsOS上のsocket通信を検証したい</li>
|
|
454 <li>Queueをsocketに接続し、簡易的なAPIの記述をした
|
|
455 <ul>
|
|
456 <li>Localなqueueに対してRemoteのqueueがソケット接続を行う</li>
|
|
457 <li>socketはQueueの生成時に接続される
|
|
458 <pre><code>typedef struct CQueue<>{
|
|
459 union Data* cQueue;
|
|
460 union Data* data;
|
|
461
|
|
462 __code whenEmpty(...);
|
|
463 __code whenEOF(...);
|
|
464 __code clear(Impl* cQueue, __code next(...));
|
|
465 __code put(Impl* cQueue, union Data* data, __code next(...));
|
|
466 __code take(Impl* cQueue, __code next(union Data* data, ...));
|
|
467 __code isEmpty(Impl* cQueue, __code next(...), __code whenEmpty(...));
|
|
468 __code getData(Impl* cQueue, __code next(...), __code whenEOF(...));
|
|
469 __code next(...);
|
|
470 } CQueue;
|
19
|
471 </code></pre>
|
23
|
472 </li>
|
|
473 </ul>
|
20
|
474 </li>
|
|
475 </ul>
|
19
|
476
|
|
477
|
|
478
|
|
479 </div>
|
|
480
|
|
481 <div class='slide'>
|
|
482 <!-- _S9SLIDE_ -->
|
20
|
483 <h2 id="remotequeue側からの送信">RemoteQueue側からの送信</h2>
|
19
|
484 <ul>
|
20
|
485 <li>QueueのPutAPIの後に遷移される</li>
|
|
486 <li>putしたデータをsocketを通じて送信する</li>
|
|
487 <li>将来的にsendではなくwriteを用いる
|
19
|
488 <pre><code>__code sendDataRemoteDGMQueue(struct RemoteDGMQueue* cQueue, union Data* data, __code next(...), __code whenError(...)){
|
20
|
489 char recv_buf;
|
|
490 int send_size, recv_size;
|
|
491
|
19
|
492 send_size = send(cQueue->socket, data, sizeof(union Data), 0);
|
|
493 recv_size = recv(cQueue->socket, &recv_buf, 1, 0);
|
20
|
494 //error処理は省略
|
19
|
495 goto next(...);
|
|
496 }
|
|
497 </code></pre>
|
|
498 </li>
|
|
499 </ul>
|
18
|
500
|
|
501
|
|
502
|
|
503 </div>
|
|
504
|
|
505 <div class='slide'>
|
|
506 <!-- _S9SLIDE_ -->
|
20
|
507 <h2 id="localqueue側の受信">LocalQueue側の受信</h2>
|
|
508 <ul>
|
|
509 <li>APIとしてsocketのデータを取り出す</li>
|
|
510 <li>取り出されたデータはQueueにputされる</li>
|
|
511 <li>union Data型でデータを受け取りmain側で処理を行う</li>
|
|
512 <li>取り出されたデータはmain側で処理される</li>
|
|
513 <li>将来的にrecvでなくreadを用いる
|
|
514 <pre><code>__code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenError(...)){
|
|
515 int recv_size, send_size;
|
|
516 char send_buf;
|
|
517
|
|
518 union Data* recv_data;
|
|
519 recv_size = recv(cQueue->socket, recv_data, sizeof(union Data), 0);
|
|
520
|
|
521 //error処理は省略
|
|
522 Gearef(context, cQueue)->data = recv_data;
|
|
523 goto putLocalDGMQueue(recv_data, next);
|
|
524 }
|
|
525 </code></pre>
|
|
526 </li>
|
|
527 </ul>
|
|
528
|
|
529
|
|
530
|
|
531 </div>
|
|
532
|
|
533 <div class='slide'>
|
|
534 <!-- _S9SLIDE_ -->
|
|
535 <h2 id="ファイル単位のsocket通信">ファイル単位のsocket通信</h2>
|
17
|
536 <ul>
|
20
|
537 <li>実際のファイルは複数のQueueを持つ一つのリストである</li>
|
|
538 <li>Queue単体でなく、リスト(ファイル)単位でsocketを持つ必要がある</li>
|
|
539 <li>リストは赤黒木となる</li>
|
|
540 <li>DataGearをputするkeyを指定して書き込みを行う
|
|
541 <ul>
|
|
542 <li>Localなファイルの同一のQueueに対して書き込みが行われる</li>
|
|
543 </ul>
|
|
544 </li>
|
17
|
545 </ul>
|
20
|
546 <div style="text-align: center;">
|
|
547 <img src="images/socketCom.pdf" alt="socketを通じたレコード送信" width="800" />
|
|
548 </div>
|
|
549
|
|
550
|
|
551
|
|
552 </div>
|
|
553
|
|
554 <div class='slide'>
|
|
555 <!-- _S9SLIDE_ -->
|
|
556 <h2 id="main部分によるapi">main部分によるAPI</h2>
|
|
557 <ul>
|
|
558 <li>readの場合(リモート側に読み込みたいファイルが存在する)
|
|
559 <ul>
|
|
560 <li>(手順1)ローカル側は空のファイルを作成し、socketを持たせる</li>
|
22
|
561 <li>(手順2)リモート側は, ローカル側の持つ空ファイルのproxyを作成する</li>
|
|
562 <li>(手順3)リモート側はproxyに対して、目的のファイルのデータをputする</li>
|
20
|
563 </ul>
|
|
564 </li>
|
|
565 <li>writeの場合(リモート側に書き込みたいファイルが存在する)
|
|
566 <ul>
|
|
567 <li>(手順1)リモート側は対象ファイルにsocketを持たせる</li>
|
22
|
568 <li>(手順2)ローカル側は対象のファイルに対応するproxyを作成する</li>
|
|
569 <li>(手順3)ローカル側はproxyのkeyに対してデータをputする</li>
|
20
|
570 </ul>
|
|
571 </li>
|
|
572 </ul>
|
|
573
|
|
574
|
|
575
|
|
576 </div>
|
|
577
|
|
578 <div class='slide'>
|
|
579 <!-- _S9SLIDE_ -->
|
|
580 <h2 id="wordcountの例題">wordCountの例題</h2>
|
|
581 <ul>
|
|
582 <li>DataGearManagerによるファイル通信APIはWordCount例題を目指して設計した
|
|
583 <ul>
|
|
584 <li>ファイル内の文字列を1行づつ受け取り、文字列,行数をカウントする例題</li>
|
|
585 </ul>
|
|
586 </li>
|
|
587 <li>文字列送信側とCount側を別ノード上で行うことで、ファイルの呼び出しと通信処理が構成できる</li>
|
|
588 </ul>
|
|
589 <div style="text-align: center;">
|
|
590 <img src="images/wordCountDGM.pdf" alt="リモートDGMによるWordCount" width="800" />
|
|
591 </div>
|
17
|
592
|
|
593
|
|
594
|
|
595 </div>
|
|
596
|
|
597 <div class='slide'>
|
|
598 <!-- _S9SLIDE_ -->
|
|
599 <h2 id="christieapiによるwordcount">ChristieAPIによるWordCount</h2>
|
|
600 <ul>
|
|
601 <li>FileOpen側とWordCount側でノードが別れる</li>
|
|
602 <li>(手順1)FileOpen側はRDGMに文字列をputする</li>
|
|
603 <li>(手順2)WordCount側は処理の後、ackを返信する</li>
|
|
604 <li>(手順3)1,2をループし、FileOpen側はEoFならフラグを送信する</li>
|
|
605 <li>(手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる</li>
|
|
606 </ul>
|
|
607 <div style="text-align: center;">
|
|
608 <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
|
|
609 </div>
|
|
610
|
|
611
|
|
612
|
|
613 </div>
|
|
614
|
|
615 <div class='slide'>
|
|
616 <!-- _S9SLIDE_ -->
|
20
|
617 <h2 id="これから実装が必要となる機能">これから実装が必要となる機能</h2>
|
18
|
618 <ul>
|
20
|
619 <li>keyアクセスに対応したファイル通信
|
|
620 <ul>
|
|
621 <li>単一のQueueによる通信は確認が行えた</li>
|
|
622 </ul>
|
|
623 </li>
|
|
624 <li>ファイル保存</li>
|
|
625 <li>バックアップ機能</li>
|
|
626 <li>並列処理</li>
|
18
|
627 </ul>
|
|
628
|
|
629
|
|
630
|
|
631 </div>
|
|
632
|
|
633 <div class='slide'>
|
|
634 <!-- _S9SLIDE_ -->
|
20
|
635 <h2 id="gearsosのディレクトリとバックアップ">GearsOSのディレクトリとバックアップ</h2>
|
18
|
636 <ul>
|
20
|
637 <li>又吉雄斗による並行研究にて、inodeによるファイルシステムが開発されている</li>
|
|
638 <li>赤黒木の非破壊な編集により、ディレクトリの履歴を残すことができる</li>
|
18
|
639 </ul>
|
|
640 <div style="text-align: center;">
|
|
641 <img src="images/nonDestroyTreeEdit.pdf" alt="非破壊的なツリー編集" width="800" />
|
|
642 </div>
|
|
643
|
|
644
|
|
645
|
|
646 </div>
|
|
647
|
|
648 <div class='slide'>
|
|
649 <!-- _S9SLIDE_ -->
|
20
|
650 <h2 id="生成形の問題点">生成形の問題点</h2>
|
18
|
651 <ul>
|
20
|
652 <li>GearsOSのメタレベルの処理の記述はトランスコンパイラにより行われる</li>
|
|
653 <li>場合によりメタレベルの記述を行わなくてはならない
|
18
|
654 <ul>
|
20
|
655 <li>他のInterfaceを継承したオブジェクトからのDataGear継承
|
|
656 <ul>
|
|
657 <li>例)Queueからのデータ取り出し</li>
|
|
658 <li>トランスコンパイラはどのInterfaceが持つDataGearを参照するべきか判断が難しい</li>
|
|
659 </ul>
|
|
660 </li>
|
18
|
661 </ul>
|
|
662 </li>
|
|
663 </ul>
|
|
664
|
20
|
665 <pre><code>__code Task2(TQueue* localDGMQueue){
|
|
666 goto localDGMQueue->take(Task3);
|
|
667 }
|
18
|
668
|
20
|
669 __code Task3(TQueue* localDGMQueue, FileString* string){
|
|
670 printf("take[%s] [num:%d]\n", string->str, string->size);
|
|
671 goto getData();
|
|
672 }
|
18
|
673
|
20
|
674 //プログラマが実装したいstub
|
|
675 __code Task3_stub(struct Context* context){
|
|
676 TQueue* localDGMQueue = (struct TQueue*)Gearef(context, TQueue)->tQueue;
|
|
677 FileString* string = Gearef(context, TQueue)->data;
|
|
678 goto Task3(context, localDGMQueue, string);
|
|
679 }
|
|
680
|
|
681 //自動生成されたErrorなstub
|
|
682 __code Task3_stub(struct Context* context) {
|
|
683 TQueue* localDGMQueue = Gearef(context, TQueue);
|
|
684 FileString* string = Gearef(context, FileString);
|
|
685 goto Task3(context, localDGMQueue, string);
|
|
686 }
|
|
687 </code></pre>
|
18
|
688
|
|
689
|
|
690
|
|
691 </div>
|
|
692
|
|
693 <div class='slide'>
|
|
694 <!-- _S9SLIDE_ -->
|
20
|
695 <h2 id="並列処理構文par-gotoが持つ問題">並列処理構文par gotoが持つ問題</h2>
|
18
|
696 <ul>
|
20
|
697 <li>par gotoとはGearsOSに実装された並列処理構文である</li>
|
|
698 <li>par gotoはトランスコンパイラへの依存性が高い
|
18
|
699 <ul>
|
20
|
700 <li>stubCodeGearのように任意な書き換えが行えない</li>
|
18
|
701 </ul>
|
|
702 </li>
|
20
|
703 <li>StreamQueueに対するput/takeの並列処理の実装をpar goto構文で試みた</li>
|
|
704 <li>特定のCodeGearの宣言のみでしか正常な処理が生成されない
|
18
|
705 <ul>
|
20
|
706 <li>Interfaceに記述されたAPICodeGearではバグが生じる</li>
|
|
707 <li>par gotoでの使用を前提としたCodeGearを書かなくてはならない</li>
|
18
|
708 </ul>
|
|
709 </li>
|
20
|
710 <li>処理が重いという問題点も存在する</li>
|
18
|
711 </ul>
|
|
712
|
|
713
|
|
714
|
|
715 </div>
|
|
716
|
|
717 <div class='slide'>
|
|
718 <!-- _S9SLIDE_ -->
|
19
|
719 <h2 id="結論">結論</h2>
|
18
|
720 <ul>
|
20
|
721 <li>GearsOSのファイルの設計を行った
|
18
|
722 <ul>
|
20
|
723 <li>ファイルの構造の設計</li>
|
|
724 <li>socketによる通信部分の実装</li>
|
|
725 <li>単純化した通信APIの記述</li>
|
|
726 <li>GearsOSの調査</li>
|
|
727 </ul>
|
|
728 </li>
|
22
|
729 <li>ファイルproxyによる通信実現を行いたい</li>
|
20
|
730 </ul>
|
|
731
|
|
732
|
|
733
|
|
734 </div>
|
|
735
|
|
736 <div class='slide'>
|
|
737 <!-- _S9SLIDE_ -->
|
|
738 <h2 id="これからの課題">これからの課題</h2>
|
|
739 <ul>
|
|
740 <li>TopoplogyManagerの設計
|
|
741 <ul>
|
|
742 <li>参加したノードを任意の形のTopologyに接続する機能</li>
|
|
743 <li>ファイルシステム向けの機能を追加したい
|
18
|
744 <ul>
|
20
|
745 <li>DNS</li>
|
|
746 <li>中枢としてのTopologyのノード監視</li>
|
18
|
747 </ul>
|
|
748 </li>
|
20
|
749 </ul>
|
|
750 </li>
|
|
751 <li>Securityシステムの追加
|
|
752 <ul>
|
|
753 <li>証明書などによるファイル操作制限</li>
|
|
754 <li>不正な分散ファイルシステムへのアクセス</li>
|
18
|
755 </ul>
|
|
756 </li>
|
|
757 </ul>
|
|
758
|
|
759
|
17
|
760
|
|
761 </div>
|
|
762
|
|
763 <div class='slide'>
|
|
764 <!-- _S9SLIDE_ -->
|
20
|
765 <h2 id="この先保留">この先保留</h2>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
766
|
19
|
767
|
|
768
|
|
769 </div>
|
|
770
|
|
771 <div class='slide'>
|
|
772 <!-- _S9SLIDE_ -->
|
20
|
773 <h2 id="ファイルqueueに対するapi--peek-">ファイルQueueに対するAPI -Peek-</h2>
|
17
|
774 <ul>
|
20
|
775 <li>Peek
|
19
|
776 <ul>
|
20
|
777 <li>QueueのElementを参照するが、削除は行わない</li>
|
|
778 <li>現時点での実装は行っていない</li>
|
|
779 <li>QueueのTopのレコードを変更せずに出力すれば良い
|
|
780 <!–</li>
|
19
|
781 </ul>
|
|
782 </li>
|
20
|
783 <li>RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
|
|
784 –></li>
|
17
|
785 </ul>
|
14
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
786
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
787 </div>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
788
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
789
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
790 </div><!-- presentation -->
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
791 </body>
|
ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
792 </html>
|