Mercurial > hg > Papers > 2018 > mitsuki-sigos
comparison Slide/prosym.html @ 25:39f38ed9c7a2
fix
author | mir3636 |
---|---|
date | Fri, 19 Jan 2018 18:33:56 +0900 |
parents | 8edb996bce46 |
children | da3022f9122e |
comparison
equal
deleted
inserted
replaced
24:8edb996bce46 | 25:39f38ed9c7a2 |
---|---|
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-19 14:50:21 +0900 with Markdown engine kramdown (1.13.2) | 89 on 2018-01-19 18:24:07 +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> |
293 </div> | 293 </div> |
294 <div class='slide '> | 294 <div class='slide '> |
295 <!-- _S9SLIDE_ --> | 295 <!-- _S9SLIDE_ --> |
296 <h1 id="interface-1">Interface</h1> | 296 <h1 id="interface-1">Interface</h1> |
297 | 297 |
298 <ul> | 298 <ul lang="impl"> |
299 <li>impliment の例</li> | 299 <li>implement の例</li> |
300 </ul> | 300 </ul> |
301 | 301 <pre><code>Stack* createSingleLinkedStack(struct Context* context) { |
302 <pre lang="impl"><code>Stack* createSingleLinkedStack(struct Context* context) { | |
303 struct Stack* stack = new Stack(); | 302 struct Stack* stack = new Stack(); |
304 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); | 303 struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); |
305 stack->stack = (union Data*)singleLinkedStack; | 304 stack->stack = (union Data*)singleLinkedStack; |
306 singleLinkedStack->top = NULL; | 305 singleLinkedStack->top = NULL; |
307 stack->push = C_pushSingleLinkedStack; | 306 stack->push = C_pushSingleLinkedStack; |
312 stack->isEmpty = C_isEmptySingleLinkedStack; | 311 stack->isEmpty = C_isEmptySingleLinkedStack; |
313 stack->clear = C_clearSingleLinkedStack; | 312 stack->clear = C_clearSingleLinkedStack; |
314 return stack; | 313 return stack; |
315 } | 314 } |
316 | 315 |
317 __code pushSingleLinkedStack(struct | 316 __code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) { |
318 SingleLinkedStack* stack,union Data* data, __code next(...)) { | |
319 Element* element = new Element(); | 317 Element* element = new Element(); |
320 element->next = stack->top; | 318 element->next = stack->top; |
321 element->data = data; | 319 element->data = data; |
322 stack->top = element; | 320 stack->top = element; |
323 goto next(...); | 321 goto next(...); |
364 <ul> | 362 <ul> |
365 <li>Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。</li> | 363 <li>Gears OS ではノーマルレベルの計算の他に Context や stub などのメタ計算を記述する必要がある。</li> |
366 <li>現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。</li> | 364 <li>現在の CbC で Gears OS を記述すると、このメタ計算の記述も行わなくてはならず、これには多くの労力を要する。</li> |
367 <li>この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。</li> | 365 <li>この記述を助けるために Context を生成する generate_context と stub Code Gear を生成する generate_stub を perl スクリプトで作成した。</li> |
368 </ul> | 366 </ul> |
367 <div style="text-align: center;"> | |
368 <img src="./fig/generate_context.pdf" alt="generate_context" width="900" /> | |
369 </div> | |
369 | 370 |
370 | 371 |
371 </div> | 372 </div> |
372 <div class='slide '> | 373 <div class='slide '> |
373 <!-- _S9SLIDE_ --> | 374 <!-- _S9SLIDE_ --> |
374 <h1 id="stub-code-gear-">stub Code Gear の生成</h1> | 375 <h1 id="stub-code-gear-">stub Code Gear の生成</h1> |
375 <ul> | 376 <ul> |
376 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li> | 377 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li> |
377 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li> | 378 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li> |
378 <li>generate_stub は指定された cbc ファイルの __code型である Code Gear を取得。</li> | 379 <li>generate_stub は指定された cbc ファイルの __code で記述された Code Gear を取得。</li> |
379 <li>引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li> | 380 <li>Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li> |
380 <li>cbc ファイルのから、生成した stub Code Gear を加えて、c ファイルを生成する。</li> | 381 <li>cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。</li> |
381 </ul> | 382 </ul> |
382 | 383 |
383 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { | 384 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { |
384 stack->top = NULL; | 385 stack->top = NULL; |
385 goto meta(context, next); | 386 goto meta(context, next); |
398 <!-- _S9SLIDE_ --> | 399 <!-- _S9SLIDE_ --> |
399 <h1 id="context--1">Context の生成</h1> | 400 <h1 id="context--1">Context の生成</h1> |
400 | 401 |
401 <ul> | 402 <ul> |
402 <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li> | 403 <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li> |
403 <li>generate_context は context.h から Data Gear、c ファイルから Code Gear を取得。</li> | 404 <li>generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。 |
404 <li>取得した Code/Data Gear の enum の定義は enumCode.h、enumData.h に生成される。</li> | 405 <ul> |
405 <li>Code/Data Gear の名前とポインタの対応は この enum と関数ポインタによって表現される。</li> | 406 <li>Context が持つ Code/Data Gear のリスト の Code/Data Gear 名とポインタを対応させるための enum の定義を記述した enumCode.h、enumData.h</li> |
406 <li>generate_context は取得した Code/Data Gear から Context の生成を行うコードを生成する。</li> | 407 <li>取得した Code/Data Gear から Context の生成を行う target-context</li> |
407 <li>Context には Allocation で生成した Data Gear へのポインタも格納されているが、Data Gear の Allocation を行うコードは dataGearInit.c に生成される。</li> | 408 <li>Context を生成する際に Data Gear の Allocation を行う dataGearInit.c</li> |
408 <li>これらを自動生成することで Gears OS の記述量を約半分にすることができます。 | 409 </ul> |
409 <img src="./fig/generate_context.svg" alt="message" width="800" /></li> | 410 </li> |
410 </ul> | 411 </ul> |
411 | 412 |
412 | 413 <div style="text-align: center;"> |
413 </div> | 414 <img src="./fig/generate_context3.pdf" alt="generate_context3" width="900" /> |
414 <div class='slide '> | 415 </div> |
415 <!-- _S9SLIDE_ --> | 416 |
416 <h1 id="section-2">比較</h1> | 417 |
417 | 418 </div> |
418 | 419 <div class='slide '> |
419 </div> | 420 <!-- _S9SLIDE_ --> |
420 <div class='slide '> | 421 <h1 id="section-2">今後の課題</h1> |
421 <!-- _S9SLIDE_ --> | |
422 <h1 id="section-3">今後の課題</h1> | |
423 <ul> | 422 <ul> |
424 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li> | 423 <li>本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。</li> |
425 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li> | 424 <li>これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。</li> |
426 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li> | 425 <li>今後の課題は Code Gear からメタ計算を行う meta Code Gear を生成できるようにし、ユーザーがメタレベルの処理を意識せずにコードを記述できるようにする。</li> |
427 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li> | 426 <li>また、今回 perl スクリプトによって Context や stub の生成を行なったが、LLVM/clang 上で実装しコンパイラで直接 CbC を実行できるようにすることを目的とする。</li> |