Mercurial > hg > Papers > 2017 > mitsuki-prosym
comparison Slide/prosym.html @ 30:33222880db79
update
author | mir3636 |
---|---|
date | Sun, 21 Jan 2018 00:05:37 +0900 |
parents | da3022f9122e |
children | 7e2ceefcef54 |
comparison
equal
deleted
inserted
replaced
29:6df75cb95ddd | 30:33222880db79 |
---|---|
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-20 22:57:55 +0900 with Markdown engine kramdown (1.13.2) | 89 on 2018-01-21 00:05:29 +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> |
214 <!-- _S9SLIDE_ --> | 214 <!-- _S9SLIDE_ --> |
215 <h1 id="gears-os-">Gears OS の構成</h1> | 215 <h1 id="gears-os-">Gears OS の構成</h1> |
216 <ul> | 216 <ul> |
217 <li>Gears OS は以下の要素で構成される。 | 217 <li>Gears OS は以下の要素で構成される。 |
218 <ul> | 218 <ul> |
219 <li>Context</li> | 219 <li>Context |
220 <li>TaskQueue</li> | 220 <ul> |
221 <li>TaskManager</li> | 221 <li>使用されるCode/Data Gear のリストを持っておりTaskでもある。</li> |
222 <li>Worker</li> | 222 </ul> |
223 </li> | |
224 <li>TaskQueue | |
225 <ul> | |
226 <li>Task のリストを扱う</li> | |
227 </ul> | |
228 </li> | |
229 <li>TaskManager | |
230 <ul> | |
231 <li>Task の依存関係の解決、作成や停止を行います。</li> | |
232 </ul> | |
233 </li> | |
234 <li>Worker | |
235 <ul> | |
236 <li>Task の実行を行う</li> | |
237 </ul> | |
238 </li> | |
223 </ul> | 239 </ul> |
224 </li> | 240 </li> |
225 </ul> | 241 </ul> |
226 | 242 |
227 | 243 |
344 stack->get2 = C_get2SingleLinkedStack; | 360 stack->get2 = C_get2SingleLinkedStack; |
345 stack->isEmpty = C_isEmptySingleLinkedStack; | 361 stack->isEmpty = C_isEmptySingleLinkedStack; |
346 stack->clear = C_clearSingleLinkedStack; | 362 stack->clear = C_clearSingleLinkedStack; |
347 return stack; | 363 return stack; |
348 } | 364 } |
349 | 365 </code></pre> |
350 __code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) { | 366 |
367 | |
368 </div> | |
369 <div class='slide '> | |
370 <!-- _S9SLIDE_ --> | |
371 <h1 id="interface--2">Interface の実装例</h1> | |
372 | |
373 <pre lang="impl"><code>__code pushSingleLinkedStack(struct SingleLinkedStack* stack, | |
374 union Data* data, __code next(...)) { | |
351 Element* element = new Element(); | 375 Element* element = new Element(); |
352 element->next = stack->top; | 376 element->next = stack->top; |
353 element->data = data; | 377 element->data = data; |
354 stack->top = element; | 378 stack->top = element; |
355 goto next(...); | 379 goto next(...); |
374 <li>Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。</li> | 398 <li>Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。</li> |
375 <li>しかし、Meta Data Gear である Context をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。</li> | 399 <li>しかし、Meta Data Gear である Context をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。</li> |
376 <li>そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。</li> | 400 <li>そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。</li> |
377 </ul> | 401 </ul> |
378 | 402 |
379 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { | 403 |
404 </div> | |
405 <div class='slide '> | |
406 <!-- _S9SLIDE_ --> | |
407 <h1 lang="stub" id="stub-code-gear-">stub Code Gear の例</h1> | |
408 <pre><code>__code clearSingleLinkedStack(struct Context *context, | |
409 struct SingleLinkedStack* stack,enum Code next) { | |
380 stack->top = NULL; | 410 stack->top = NULL; |
381 goto meta(context, next); | 411 goto meta(context, next); |
382 } | 412 } |
383 | 413 |
384 __code clearSingleLinkedStack_stub(struct Context* context) { | 414 __code clearSingleLinkedStack_stub(struct Context* context) { |
385 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack); | 415 SingleLinkedStack* stack = |
416 (SingleLinkedStack*)GearImpl(context, Stack, stack); | |
386 enum Code next = Gearef(context, Stack)->next; | 417 enum Code next = Gearef(context, Stack)->next; |
387 goto clearSingleLinkedStack(context, stack, next); | 418 goto clearSingleLinkedStack(context, stack, next); |
388 } | 419 } |
389 </code></pre> | 420 </code></pre> |
390 | 421 |
404 | 435 |
405 | 436 |
406 </div> | 437 </div> |
407 <div class='slide '> | 438 <div class='slide '> |
408 <!-- _S9SLIDE_ --> | 439 <!-- _S9SLIDE_ --> |
409 <h1 id="stub-code-gear-">stub Code Gear の生成</h1> | 440 <h1 id="stub-code-gear--1">stub Code Gear の生成</h1> |
410 <ul> | 441 <ul> |
411 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li> | 442 <li>stub Code Gear は Code Gear 間の継続に挟まれ、Code Gear が必要な Data Gear を Context から取り出す処理を行うものである。</li> |
412 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li> | 443 <li>stub Code Gear は Code Gear 毎に記述する必要があり、そのCode Gear の引数を見て取り出す Data Gear を選択する。</li> |
413 <li>generate_stub は指定された cbc ファイルの __code で記述された Code Gear を取得。</li> | 444 <li>generate_stub は指定された cbc ファイルの __code で記述された Code Gear を取得。</li> |
414 <li>Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li> | 445 <li>Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。</li> |
415 <li>cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。</li> | 446 <li>cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。</li> |
416 </ul> | 447 </ul> |
417 | 448 |
418 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { | 449 |
450 </div> | |
451 <div class='slide '> | |
452 <!-- _S9SLIDE_ --> | |
453 <h1 id="stub-code-gear-1">生成された stub Code Gear</h1> | |
454 | |
455 <pre lang="stub"><code>__code clearSingleLinkedStack(struct Context *context, | |
456 struct SingleLinkedStack* stack,enum Code next) { | |
419 stack->top = NULL; | 457 stack->top = NULL; |
420 goto meta(context, next); | 458 goto meta(context, next); |
421 } | 459 } |
422 | 460 |
423 __code clearSingleLinkedStack_stub(struct Context* context) { | 461 __code clearSingleLinkedStack_stub(struct Context* context) { |
424 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack); | 462 SingleLinkedStack* stack = |
463 (SingleLinkedStack*)GearImpl(context, Stack, stack); | |
425 enum Code next = Gearef(context, Stack)->next; | 464 enum Code next = Gearef(context, Stack)->next; |
426 goto clearSingleLinkedStack(context, stack, next); | 465 goto clearSingleLinkedStack(context, stack, next); |
427 } | 466 } |
428 </code></pre> | 467 </code></pre> |
429 | 468 |
432 <div class='slide '> | 471 <div class='slide '> |
433 <!-- _S9SLIDE_ --> | 472 <!-- _S9SLIDE_ --> |
434 <h1 id="context--1">Context の生成</h1> | 473 <h1 id="context--1">Context の生成</h1> |
435 | 474 |
436 <ul> | 475 <ul> |
437 <li>Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。</li> | |
438 <li>generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。 | 476 <li>generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。 |
439 <ul> | 477 <ul> |
440 <li>Code/Data Gear を enum で定義した enumCode.h、enumData.h</li> | 478 <li>Code/Data Gear を enum で定義した enumCode.h、enumData.h</li> |
441 <li>取得した Code/Data Gear から Context の生成を行う target-context</li> | 479 <li>取得した Code/Data Gear から Context の生成を行う target-context</li> |
442 <li>Context を生成する際の Data Gear の Allocation を行う dataGearInit.c</li> | 480 <li>Context を生成する際の Data Gear の Allocation を行う dataGearInit.c</li> |
443 </ul> | 481 </ul> |
444 </li> | 482 </li> |
445 </ul> | 483 </ul> |
446 | 484 |
447 <div style="text-align: center;"> | 485 <div style="text-align: center;"> |
448 <img src="./fig/generate_context3.pdf" alt="generate_context3" width="900" /> | 486 <img src="./fig/generate_context3.pdf" alt="generate_context3" width="500" /> |
449 </div> | 487 </div> |
450 | 488 |
451 | 489 |
452 </div> | 490 </div> |
453 <div class='slide '> | 491 <div class='slide '> |