Mercurial > hg > Papers > 2022 > ikki-master
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->data = data; | 331 element->data = data; |
329 element->next = NULL; | 332 element->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->top; | 357 struct Element* top = queue->top; |
356 struct Element* nextElement = top->next; | 358 struct Element* nextElement = top->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<>{ |
439 RemoteDGMQueue->atomic = createAtomicReference(context); | 459 union Data* cQueue; |
440 RemoteDGMQueue->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 |