comparison slide/thesis.pdf.html @ 23:9a6609a2f987

twaek
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Thu, 10 Feb 2022 01:08:27 +0900
parents bd9284f9151d
children 90e6ac8805e2
comparison
equal deleted inserted replaced
22:bd9284f9151d 23:9a6609a2f987
304 <!-- _S9SLIDE_ --> 304 <!-- _S9SLIDE_ -->
305 <h2 id="queueによるgearsosのファイル">QueueによるGearsOSのファイル</h2> 305 <h2 id="queueによるgearsosのファイル">QueueによるGearsOSのファイル</h2>
306 <ul> 306 <ul>
307 <li>GearsOSのファイルはファイルレコードを保持するQueueとなる</li> 307 <li>GearsOSのファイルはファイルレコードを保持するQueueとなる</li>
308 <li>デバイスへの保存はQueueを保存すればよい</li> 308 <li>デバイスへの保存はQueueを保存すればよい</li>
309 <li>データの更新はQueueにレコードを書き込む</li> 309 <li>ファイルはQueueなのでファイルのAPIは大きく二つとなる
310 <li>データの読み込みはQueueからデータを全て取り出す</li> 310 <ul>
311 <li>Put</li>
312 <li>Take</li>
313 </ul>
314 </li>
311 </ul> 315 </ul>
312 316
313 317
314 318
315 </div> 319 </div>
319 <h2 id="queueapi--put-">QueueAPI -Put-</h2> 323 <h2 id="queueapi--put-">QueueAPI -Put-</h2>
320 <ul> 324 <ul>
321 <li>Put 325 <li>Put
322 <ul> 326 <ul>
323 <li>Queueに対してファイルレコードを入力する</li> 327 <li>Queueに対してファイルレコードを入力する</li>
324 <li>ファイルの更新の際に呼び出す</li>
325 <li>ファイルの変更をレコードとして書き込む 328 <li>ファイルの変更をレコードとして書き込む
326 <pre><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) { 329 <pre><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) {
327 Element* element = new Element(); 330 Element* element = new Element();
328 element-&gt;data = data; 331 element-&gt;data = data;
329 element-&gt;next = NULL; 332 element-&gt;next = NULL;
346 <h2 id="queueapi--take-">QueueAPI -Take-</h2> 349 <h2 id="queueapi--take-">QueueAPI -Take-</h2>
347 <ul> 350 <ul>
348 <li>Take 351 <li>Take
349 <ul> 352 <ul>
350 <li>Queueからファイルレコードを取り出す</li> 353 <li>Queueからファイルレコードを取り出す</li>
351 <li>ファイルの中身の読み込みの際に用いる</li>
352 <li>Queue内のレコードをループで全て取り出せば良い 354 <li>Queue内のレコードをループで全て取り出せば良い
353 <pre><code>__code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) { 355 <pre><code>__code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
354 printf("take\n"); 356 printf("take\n");
355 struct Element* top = queue-&gt;top; 357 struct Element* top = queue-&gt;top;
356 struct Element* nextElement = top-&gt;next; 358 struct Element* nextElement = top-&gt;next;
372 374
373 </div> 375 </div>
374 376
375 <div class='slide'> 377 <div class='slide'>
376 <!-- _S9SLIDE_ --> 378 <!-- _S9SLIDE_ -->
377 <h2 id="gearsosのファイル">GearsOSのファイル</h2> 379 <h2 id="複数のストリームから構成されるファイル">複数のストリームから構成されるファイル</h2>
378 <ul> 380 <ul>
379 <li>単独のQueueのみではファイル操作に耐えることができない</li> 381 <li>入力されるデータに応じた個別のstreamを備えたい
380 <li>GearsOSのファイルは複数のQueueをkey nameをつけて保持するリストとなる 382 <ul>
381 <ul> 383 <li>streamと入力されたデータの処理を直接結びつけたい</li>
382 <li>主体となるデータレコードを保持するQueue</li> 384 </ul>
383 <li>Input/OutputStreamとなるQueue</li> 385 </li>
384 <li>通信処理を行う際に任意に利用したいデータを受けるQueue</li> 386 <li>最低でもInput/OutputStreamの二つが必要となる</li>
385 </ul> 387 <li>ファイルは複数のStreamを持ったリストとして実装する</li>
386 </li> 388 <li>Streamはkey nameを持ち、keyでアクセスを行う</li>
387 <li>ChristieのDataGearManagerの仕組みを用いる</li> 389 </ul>
388 <li>ファイルであると同時に通信そのものでもある</li> 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>
389 </ul> 406 </ul>
390 407
391 408
392 409
393 </div> 410 </div>
394 411
395 <div class='slide'> 412 <div class='slide'>
396 <!-- _S9SLIDE_ --> 413 <!-- _S9SLIDE_ -->
397 <h2 id="datagearmanager">DataGearManager</h2> 414 <h2 id="datagearmanager">DataGearManager</h2>
398 <ul> 415 <ul>
416 <li>分散フレームワークChristieの仕組みの一つ</li>
399 <li>keyとvalueの組み合わせとなるDataGearを保持するデータプール</li> 417 <li>keyとvalueの組み合わせとなるDataGearを保持するデータプール</li>
400 <li>ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する</li> 418 <li>ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する</li>
401 <li>LocalDGMはノード本体に対応するデータプールである 419 <li>LocalDGMはノード本体に対応するデータプールである
402 <ul> 420 <ul>
403 <li>CodeGearはLocalDGMに対してDataGearを参照する</li> 421 <li>CodeGearはLocalDGMに対してDataGearを参照する</li>
406 <li>RemoteDGMは接続する相手ノードに対応するデータプールproxyである 424 <li>RemoteDGMは接続する相手ノードに対応するデータプールproxyである
407 <ul> 425 <ul>
408 <li>RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる</li> 426 <li>RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる</li>
409 </ul> 427 </ul>
410 </li> 428 </li>
411 <li>GearsFSも同様にファイルproxyを通して通信を行う</li>
412 </ul> 429 </ul>
413 430
414 431
415 432
416 </div> 433 </div>
417 434
418 <div class='slide'> 435 <div class='slide'>
419 <!-- _S9SLIDE_ --> 436 <!-- _S9SLIDE_ -->
420 <h2 id="datagearmanager-1">DataGearManager</h2> 437 <h2 id="datagearmanager-1">DataGearManager</h2>
438 <ul>
439 <li>任意の相手のRemoteDGMを作成することでTopologyが形成される</li>
440 </ul>
421 <div style="text-align: center;"> 441 <div style="text-align: center;">
422  <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800" /> 442  <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800" />
423 </div> 443 </div>
424 444
425 445
426 446
427 </div> 447 </div>
428 448
429 <div class='slide'> 449 <div class='slide'>
430 <!-- _S9SLIDE_ --> 450 <!-- _S9SLIDE_ -->
431 <h2 id="socket付きqueueの実装">socket付きQueueの実装</h2> 451 <h2 id="gearsos上のsocket通信">GearsOS上のsocket通信</h2>
432 <ul> 452 <ul>
433 <li>socketに接続されたQueueにより通信APIの記述を行った</li> 453 <li>GearsOS上のsocket通信を検証したい</li>
434 <li>GearsOS上でのsocket操作の記述</li> 454 <li>Queueをsocketに接続し、簡易的なAPIの記述をした
435 <li>Localなqueueに対してRemoteのqueueがソケット接続を行う 455 <ul>
436 <pre><code>TQueue* createRemoteDGMQueue(struct Context* context, char* sNum) { 456 <li>Localなqueueに対してRemoteのqueueがソケット接続を行う</li>
437 struct TQueue* tQueue = new TQueue(); 457 <li>socketはQueueの生成時に接続される
438 struct RemoteDGMQueue* RemoteDGMQueue = new RemoteDGMQueue(); 458 <pre><code>typedef struct CQueue&lt;&gt;{
439 RemoteDGMQueue-&gt;atomic = createAtomicReference(context); 459 union Data* cQueue;
440 RemoteDGMQueue-&gt;socket = createSocketRemoteDGMQueue(sNum); 460 union Data* data;
441 } 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;
442 </code></pre> 471 </code></pre>
472 </li>
473 </ul>
443 </li> 474 </li>
444 </ul> 475 </ul>
445 476
446 477
447 478