comparison Slide/prosym.html @ 23:bb495c751e40

fix
author mir3636
date Fri, 19 Jan 2018 07:45:21 +0900
parents d5d62b74c219
children 8edb996bce46
comparison
equal deleted inserted replaced
22:f83f575b6194 23:bb495c751e40
84 84
85 <div class='slide '> 85 <div class='slide '>
86 <!-- === begin markdown block === 86 <!-- === begin markdown block ===
87 87
88 generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin16] 88 generated by markdown/1.2.0 on Ruby 2.4.0 (2016-12-24) [x86_64-darwin16]
89 on 2018-01-18 15:29:57 +0900 with Markdown engine kramdown (1.13.2) 89 on 2018-01-19 07:45:08 +0900 with Markdown engine kramdown (1.13.2)
90 using options {} 90 using options {}
91 --> 91 -->
92 92
93 <!-- _S9SLIDE_ --> 93 <!-- _S9SLIDE_ -->
94 <h1 id="section">研究目的</h1> 94 <h1 id="section">研究目的</h1>
104 </ul> 104 </ul>
105 105
106 <!-- 106 <!--
107 # OS の拡張性と信頼性の両立 107 # OS の拡張性と信頼性の両立
108 108
109 さまざまなコンピュータの信頼性の基本はメモリなどの資源管理を行う OS である。 109 - さまざまなコンピュータの信頼性の基本はメモリなどの資源管理を行う OS である。
110 時代とともに進歩するハードウェア、サービスに対応して OS 自体が拡張される必要がある。 110 - 時代とともに進歩するハードウェア、サービスに対応して OS 自体が拡張される必要がある。
111 その信頼性を保証するには、従来の テストとデバッグでは不十分であり、テストしきれない部分が残ってしまう。 111 - その信頼性を保証するには、従来の テストとデバッグでは不十分であり、テストしきれない部分が残ってしまう。
112 これに対処するため には、証明を用いる方法とプログラムの可能な実行をすべて数え上げるモデル検査を用いる方法がある。 112 - これに対処するため には、証明を用いる方法とプログラムの可能な実行をすべて数え上げるモデル検査を用いる方法がある。
113 検証は一度ですむものではなく、アプリケーションやサービス、デバイスが新しくなることに検証をやり直す必要がある。 113 - 検証は一度ですむものではなく、アプリケーションやサービス、デバイスが新しくなることに検証をやり直す必要がある。
114 このため信頼性と拡張性を両立させることが重要である。 114 - このため信頼性と拡張性を両立させることが重要である。
115 --> 115 -->
116 <!-- 116 <!--
117 # 目次? 117 # 目次?
118 --> 118 -->
119 <p># メタ計算の重要性 119
120 - プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。これらの計算をメタ計算と呼ぶ。 120
121 - メタ計算はノーマルレベルの計算から切り離して記述したい。 121 </div>
122 - そのためには処理を細かく分割する必要があるが、関数やクラスなどの単位は容易に分割できない。 122 <div class='slide '>
123 - そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。</p> 123 <!-- _S9SLIDE_ -->
124 <h1 id="section-1">メタ計算の重要性</h1>
125 <ul>
126 <li>プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。これらの計算をメタ計算と呼ぶ。</li>
127 <li>メタ計算はノーマルレベルの計算から切り離して記述したい。</li>
128 <li>そのためには処理を細かく分割する必要があるが、関数やクラスなどの単位は容易に分割できない。</li>
129 <li>そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。</li>
130 </ul>
124 131
125 132
126 </div> 133 </div>
127 <div class='slide '> 134 <div class='slide '>
128 <!-- _S9SLIDE_ --> 135 <!-- _S9SLIDE_ -->
186 <li>Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する。</li> 193 <li>Meta Code Gear はノーマルレベルの Code Gear の直後に遷移され、メタ計算を実行する。</li>
187 <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。</li> 194 <li>Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。</li>
188 </ul> 195 </ul>
189 196
190 <div style="text-align: center;"> 197 <div style="text-align: center;">
191  <img src="./fig/metaCS.pdf" alt="message" width="600" /> 198  <img src="./fig/MetaGear.pdf" alt="MetaGear" width="600" />
192 </div> 199 </div>
193 200
194 201
195 </div> 202 </div>
196 <div class='slide '> 203 <div class='slide '>
197 <!-- _S9SLIDE_ --> 204 <!-- _S9SLIDE_ -->
198 <h1 id="gears-os-">Gears OS の構成</h1> 205 <h1 id="gears-os-">Gears OS の構成</h1>
199 206 <ul>
200 207 <li>Gears OS は以下の要素で構成される。
201 </div> 208 <ul>
202 <div class='slide '> 209 <li>Context</li>
203 <!-- _S9SLIDE_ --> 210 <li>TaskQueue</li>
204 <h1 id="cbc--gears-os-">CbC による Gears OS 記述の問題点</h1> 211 <li>TaskManager</li>
205 <ul> 212 <li>Worker</li>
206 <li>Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。</li> 213 </ul>
207 <li>本研究ではこれらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。</li> 214 </li>
208 <li>そのためのプロトタイプとして perl スクリプトを作成した。</li> 215 </ul>
209 </ul> 216
217
218 </div>
219 <div class='slide '>
220 <!-- _S9SLIDE_ -->
221 <h1 id="gears-os--1">Gears OS の構成図</h1>
222
223 <div style="text-align: center;">
224  <img src="./fig/gears_structure.pdf" alt="gears_structure" width="600" />
225 </div>
226
227 <!--
228 # CbC による Gears OS 記述の問題点
229 - Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。
230 - 本研究ではこれらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。
231 - そのためのプロトタイプとして perl スクリプトを作成した。
232 -->
210 233
211 234
212 </div> 235 </div>
213 <div class='slide '> 236 <div class='slide '>
214 <!-- _S9SLIDE_ --> 237 <!-- _S9SLIDE_ -->
215 <h1 id="context">Context</h1> 238 <h1 id="context">Context</h1>
216 <ul> 239 <ul>
217 <li>Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。</li> 240 <li>Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。</li>
218 <li>Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。</li> 241 <li>Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。</li>
219 </ul> 242 </ul>
220 243
221 <p><img src="./fig/context.svg" alt="message" width="550" /></p> 244 <p><img src="./fig/context.svg" alt="message" width="550" /></p>
222 245
224 </div> 247 </div>
225 <div class='slide '> 248 <div class='slide '>
226 <!-- _S9SLIDE_ --> 249 <!-- _S9SLIDE_ -->
227 <h1 id="interface">Interface</h1> 250 <h1 id="interface">Interface</h1>
228 <ul> 251 <ul>
229 <li>interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。</li> 252 <li>Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。</li>
230 <li>create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。</li> 253 <li>Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である。</li>
231 </ul> 254 <li>Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。</li>
255 </ul>
256
257 <pre lang="interface"><code>typedef struct Stack&lt;Type, Impl&gt;{
258 union Data* stack;
259 union Data* data;
260 union Data* data1;
261 __code whenEmpty(...);
262 __code clear(Impl* stack,__code next(...));
263 __code push(Impl* stack,Type* data, __code next(...));
264 __code pop(Impl* stack, __code next(Type* data, ...));
265 __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...));
266 __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
267 __code get(Impl* stack, __code next(Type* data, ...));
268 __code get2(Impl* stack, __code next(Type* data, Type* data1, ...));
269 __code next(...);
270 } Stack;
271 </code></pre>
272
273
274 </div>
275 <div class='slide '>
276 <!-- _S9SLIDE_ -->
277 <h1 id="interface-1">Interface</h1>
232 278
233 <pre lang="impl"><code>Stack* createSingleLinkedStack(struct Context* context) { 279 <pre lang="impl"><code>Stack* createSingleLinkedStack(struct Context* context) {
234 struct Stack* stack = new Stack(); 280 struct Stack* stack = new Stack();
235 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); 281 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
236 stack-&gt;stack = (union Data*)singleLinkedStack; 282 stack-&gt;stack = (union Data*)singleLinkedStack;
332 378
333 379
334 </div> 380 </div>
335 <div class='slide '> 381 <div class='slide '>
336 <!-- _S9SLIDE_ --> 382 <!-- _S9SLIDE_ -->
337 <h1 id="section-1">比較</h1> 383 <h1 id="section-2">比較</h1>
338 384
339 385
340 </div> 386 </div>
341 <div class='slide '> 387 <div class='slide '>
342 <!-- _S9SLIDE_ --> 388 <!-- _S9SLIDE_ -->
343 <h1 id="section-2">今後の課題</h1> 389 <h1 id="section-3">今後の課題</h1>
344 <ul> 390 <ul>
345 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li> 391 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li>
346 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li> 392 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li>
347 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li> 393 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li>
348 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li> 394 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li>