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-&gt;get2 = C_get2SingleLinkedStack; 360 stack-&gt;get2 = C_get2SingleLinkedStack;
345 stack-&gt;isEmpty = C_isEmptySingleLinkedStack; 361 stack-&gt;isEmpty = C_isEmptySingleLinkedStack;
346 stack-&gt;clear = C_clearSingleLinkedStack; 362 stack-&gt;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-&gt;next = stack-&gt;top; 376 element-&gt;next = stack-&gt;top;
353 element-&gt;data = data; 377 element-&gt;data = data;
354 stack-&gt;top = element; 378 stack-&gt;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-&gt;top = NULL; 410 stack-&gt;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)-&gt;next; 417 enum Code next = Gearef(context, Stack)-&gt;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-&gt;top = NULL; 457 stack-&gt;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)-&gt;next; 464 enum Code next = Gearef(context, Stack)-&gt;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 '>