Mercurial > hg > Papers > 2022 > ikki-master
changeset 23:9a6609a2f987
twaek
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 10 Feb 2022 01:08:27 +0900 |
parents | bd9284f9151d |
children | 90e6ac8805e2 |
files | .DS_Store slide/thesis.html slide/thesis.md slide/thesis.pdf.html |
diffstat | 4 files changed, 149 insertions(+), 87 deletions(-) [+] |
line wrap: on
line diff
--- a/slide/thesis.html Wed Feb 09 23:58:05 2022 +0900 +++ b/slide/thesis.html Thu Feb 10 01:08:27 2022 +0900 @@ -322,8 +322,12 @@ <ul> <li>GearsOSのファイルはファイルレコードを保持するQueueとなる</li> <li>デバイスへの保存はQueueを保存すればよい</li> - <li>データの更新はQueueにレコードを書き込む</li> - <li>データの読み込みはQueueからデータを全て取り出す</li> + <li>ファイルはQueueなのでファイルのAPIは大きく二つとなる + <ul> + <li>Put</li> + <li>Take</li> + </ul> + </li> </ul> @@ -337,7 +341,6 @@ <li>Put <ul> <li>Queueに対してファイルレコードを入力する</li> - <li>ファイルの更新の際に呼び出す</li> <li>ファイルの変更をレコードとして書き込む <pre><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) { Element* element = new Element(); @@ -364,7 +367,6 @@ <li>Take <ul> <li>Queueからファイルレコードを取り出す</li> - <li>ファイルの中身の読み込みの際に用いる</li> <li>Queue内のレコードをループで全て取り出せば良い <pre><code>__code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) { printf("take\n"); @@ -390,18 +392,33 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="gearsosのファイル">GearsOSのファイル</h2> +<h2 id="複数のストリームから構成されるファイル">複数のストリームから構成されるファイル</h2> <ul> - <li>単独のQueueのみではファイル操作に耐えることができない</li> - <li>GearsOSのファイルは複数のQueueをkey nameをつけて保持するリストとなる + <li>入力されるデータに応じた個別のstreamを備えたい <ul> - <li>主体となるデータレコードを保持するQueue</li> - <li>Input/OutputStreamとなるQueue</li> - <li>通信処理を行う際に任意に利用したいデータを受けるQueue</li> + <li>streamと入力されたデータの処理を直接結びつけたい</li> </ul> </li> - <li>ChristieのDataGearManagerの仕組みを用いる</li> - <li>ファイルであると同時に通信そのものでもある</li> + <li>最低でもInput/OutputStreamの二つが必要となる</li> + <li>ファイルは複数のStreamを持ったリストとして実装する</li> + <li>Streamはkey nameを持ち、keyでアクセスを行う</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="ファイル通信の構成">ファイル通信の構成</h2> +<ul> + <li>GearsOSのファイルは大域的に解放された資源としたい + <ul> + <li>ファイル自信を通信そのものとして実装する</li> + <li>Streamに対しsocket接続により遠隔にアクセスする</li> + </ul> + </li> + <li>分散フレームワークChristieのDataGearManagerの仕組みを利用する</li> </ul> @@ -412,6 +429,7 @@ <!-- _S9SLIDE_ --> <h2 id="datagearmanager">DataGearManager</h2> <ul> + <li>分散フレームワークChristieの仕組みの一つ</li> <li>keyとvalueの組み合わせとなるDataGearを保持するデータプール</li> <li>ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する</li> <li>LocalDGMはノード本体に対応するデータプールである @@ -424,7 +442,6 @@ <li>RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる</li> </ul> </li> - <li>GearsFSも同様にファイルproxyを通して通信を行う</li> </ul> @@ -434,6 +451,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="datagearmanager-1">DataGearManager</h2> +<ul> + <li>任意の相手のRemoteDGMを作成することでTopologyが形成される</li> +</ul> <div style="text-align: center;"> <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800" /> </div> @@ -444,18 +464,29 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="socket付きqueueの実装">socket付きQueueの実装</h2> +<h2 id="gearsos上のsocket通信">GearsOS上のsocket通信</h2> <ul> - <li>socketに接続されたQueueにより通信APIの記述を行った</li> - <li>GearsOS上でのsocket操作の記述</li> - <li>Localなqueueに対してRemoteのqueueがソケット接続を行う - <pre><code>TQueue* createRemoteDGMQueue(struct Context* context, char* sNum) { - struct TQueue* tQueue = new TQueue(); - struct RemoteDGMQueue* RemoteDGMQueue = new RemoteDGMQueue(); - RemoteDGMQueue->atomic = createAtomicReference(context); - RemoteDGMQueue->socket = createSocketRemoteDGMQueue(sNum); -} + <li>GearsOS上のsocket通信を検証したい</li> + <li>Queueをsocketに接続し、簡易的なAPIの記述をした + <ul> + <li>Localなqueueに対してRemoteのqueueがソケット接続を行う</li> + <li>socketはQueueの生成時に接続される + <pre><code>typedef struct CQueue<>{ +union Data* cQueue; +union Data* data; + +__code whenEmpty(...); +__code whenEOF(...); +__code clear(Impl* cQueue, __code next(...)); +__code put(Impl* cQueue, union Data* data, __code next(...)); +__code take(Impl* cQueue, __code next(union Data* data, ...)); +__code isEmpty(Impl* cQueue, __code next(...), __code whenEmpty(...)); +__code getData(Impl* cQueue, __code next(...), __code whenEOF(...)); +__code next(...); +} CQueue; </code></pre> + </li> + </ul> </li> </ul>
--- a/slide/thesis.md Wed Feb 09 23:58:05 2022 +0900 +++ b/slide/thesis.md Thu Feb 10 01:08:27 2022 +0900 @@ -152,47 +152,62 @@ -## GearsOSのファイル -- 単独のQueueのみではファイル操作に耐えることができない -- GearsOSのファイルは複数のQueueをkey nameをつけて保持するリストとなる - - 主体となるデータレコードを保持するQueue - - Input/OutputStreamとなるQueue - - 通信処理を行う際に任意に利用したいデータを受けるQueue -- ChristieのDataGearManagerの仕組みを用いる -- ファイルであると同時に通信そのものでもある +## 複数のストリームから構成されるファイル +- 入力されるデータに応じた個別のstreamを備えたい + - streamと入力されたデータの処理を直接結びつけたい +- 最低でもInput/OutputStreamの二つが必要となる +- ファイルは複数のStreamを持ったリストとして実装する +- Streamはkey nameを持ち、keyでアクセスを行う + +## ファイル通信の構成 +- GearsOSのファイルは大域的に解放された資源としたい + - ファイル自信を通信そのものとして実装する + - Streamに対しsocket接続により遠隔にアクセスする +- 分散フレームワークChristieのDataGearManagerの仕組みを利用する ## DataGearManager +- 分散フレームワークChristieの仕組みの一つ - keyとvalueの組み合わせとなるDataGearを保持するデータプール - ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する - LocalDGMはノード本体に対応するデータプールである - CodeGearはLocalDGMに対してDataGearを参照する - RemoteDGMは接続する相手ノードに対応するデータプールproxyである - RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる -- GearsFSも同様にファイルproxyを通して通信を行う -## DataGearManager +## DataGearManagerによる通信構成 +- 任意の相手のRemoteDGMを作成することでTopologyが形成される <div style="text-align: center;"> <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800"> </div> -## socket付きQueueの実装 -- socketに接続されたQueueにより通信APIの記述を行った -- GearsOS上でのsocket操作の記述 -- Localなqueueに対してRemoteのqueueがソケット接続を行う + +## GearsOS上のsocket通信 +- GearsOS上のsocket通信を実装したい +- Queueをsocketに接続し、簡易的なAPIの記述をした + - Localなqueueに対してRemoteのqueueがソケット接続を行う + - socketはQueueの生成時に接続される +- RemoteDGM(proxy)の接続先は、他ユーザー、SSDなどのデバイスが挙げられる ``` -TQueue* createRemoteDGMQueue(struct Context* context, char* sNum) { - struct TQueue* tQueue = new TQueue(); - struct RemoteDGMQueue* RemoteDGMQueue = new RemoteDGMQueue(); - RemoteDGMQueue->atomic = createAtomicReference(context); - RemoteDGMQueue->socket = createSocketRemoteDGMQueue(sNum); -} +typedef struct CQueue<>{ + union Data* cQueue; + union Data* data; + + __code whenEmpty(...); + __code whenEOF(...); + __code clear(Impl* cQueue, __code next(...)); + __code put(Impl* cQueue, union Data* data, __code next(...)); + __code take(Impl* cQueue, __code next(union Data* data, ...)); + __code isEmpty(Impl* cQueue, __code next(...), __code whenEmpty(...)); + __code getData(Impl* cQueue, __code next(...), __code whenEOF(...)); + __code next(...); +} CQueue; ``` -## RemoteQueue側からの送信 -- QueueのPutAPIの後に遷移される -- putしたデータをsocketを通じて送信する -- 将来的にsendではなくwriteを用いる + +## sendData CodeGear +- proxy側はQueueにputされたDataをsocketで送信する +- 送信されたDataはLocal側でgetDataAPIで取り出される ``` __code sendDataRemoteDGMQueue(struct RemoteDGMQueue* cQueue, union Data* data, __code next(...), __code whenError(...)){ char recv_buf; @@ -205,12 +220,9 @@ } ``` -## LocalQueue側の受信 -- APIとしてsocketのデータを取り出す +## getData CodeGear +- ファイル本体(Local側)はsocketからDataを取り出す - 取り出されたデータはQueueにputされる -- union Data型でデータを受け取りmain側で処理を行う -- 取り出されたデータはmain側で処理される -- 将来的にrecvでなくreadを用いる ``` __code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenError(...)){ int recv_size, send_size; @@ -225,8 +237,6 @@ } ``` - - ## ファイル単位のsocket通信 - 実際のファイルは複数のQueueを持つ一つのリストである - Queue単体でなく、リスト(ファイル)単位でsocketを持つ必要がある @@ -237,16 +247,6 @@ <img src="images/socketCom.pdf" alt=socketを通じたレコード送信 width="800"> </div> -## main部分によるAPI -- readの場合(リモート側に読み込みたいファイルが存在する) - - (手順1)ローカル側は空のファイルを作成し、socketを持たせる - - (手順2)リモート側は, ローカル側の持つ空ファイルのproxyを作成する - - (手順3)リモート側はproxyに対して、目的のファイルのデータをputする -- writeの場合(リモート側に書き込みたいファイルが存在する) - - (手順1)リモート側は対象ファイルにsocketを持たせる - - (手順2)ローカル側は対象のファイルに対応するproxyを作成する - - (手順3)ローカル側はproxyのkeyに対してデータをputする - ## wordCountの例題 - DataGearManagerによるファイル通信APIはWordCount例題を目指して設計した
--- a/slide/thesis.pdf.html Wed Feb 09 23:58:05 2022 +0900 +++ b/slide/thesis.pdf.html Thu Feb 10 01:08:27 2022 +0900 @@ -306,8 +306,12 @@ <ul> <li>GearsOSのファイルはファイルレコードを保持するQueueとなる</li> <li>デバイスへの保存はQueueを保存すればよい</li> - <li>データの更新はQueueにレコードを書き込む</li> - <li>データの読み込みはQueueからデータを全て取り出す</li> + <li>ファイルはQueueなのでファイルのAPIは大きく二つとなる + <ul> + <li>Put</li> + <li>Take</li> + </ul> + </li> </ul> @@ -321,7 +325,6 @@ <li>Put <ul> <li>Queueに対してファイルレコードを入力する</li> - <li>ファイルの更新の際に呼び出す</li> <li>ファイルの変更をレコードとして書き込む <pre><code>__code putSingleLinkedQueue(struct SingleLinkedQueue* queue, union Data* data, __code next(...)) { Element* element = new Element(); @@ -348,7 +351,6 @@ <li>Take <ul> <li>Queueからファイルレコードを取り出す</li> - <li>ファイルの中身の読み込みの際に用いる</li> <li>Queue内のレコードをループで全て取り出せば良い <pre><code>__code takeSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) { printf("take\n"); @@ -374,18 +376,33 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="gearsosのファイル">GearsOSのファイル</h2> +<h2 id="複数のストリームから構成されるファイル">複数のストリームから構成されるファイル</h2> <ul> - <li>単独のQueueのみではファイル操作に耐えることができない</li> - <li>GearsOSのファイルは複数のQueueをkey nameをつけて保持するリストとなる + <li>入力されるデータに応じた個別のstreamを備えたい <ul> - <li>主体となるデータレコードを保持するQueue</li> - <li>Input/OutputStreamとなるQueue</li> - <li>通信処理を行う際に任意に利用したいデータを受けるQueue</li> + <li>streamと入力されたデータの処理を直接結びつけたい</li> </ul> </li> - <li>ChristieのDataGearManagerの仕組みを用いる</li> - <li>ファイルであると同時に通信そのものでもある</li> + <li>最低でもInput/OutputStreamの二つが必要となる</li> + <li>ファイルは複数のStreamを持ったリストとして実装する</li> + <li>Streamはkey nameを持ち、keyでアクセスを行う</li> +</ul> + + + +</div> + +<div class='slide'> + <!-- _S9SLIDE_ --> +<h2 id="ファイル通信の構成">ファイル通信の構成</h2> +<ul> + <li>GearsOSのファイルは大域的に解放された資源としたい + <ul> + <li>ファイル自信を通信そのものとして実装する</li> + <li>Streamに対しsocket接続により遠隔にアクセスする</li> + </ul> + </li> + <li>分散フレームワークChristieのDataGearManagerの仕組みを利用する</li> </ul> @@ -396,6 +413,7 @@ <!-- _S9SLIDE_ --> <h2 id="datagearmanager">DataGearManager</h2> <ul> + <li>分散フレームワークChristieの仕組みの一つ</li> <li>keyとvalueの組み合わせとなるDataGearを保持するデータプール</li> <li>ChristieではCodeGearManagerと呼ばれるノードがCodeGearとDataGearを管理する</li> <li>LocalDGMはノード本体に対応するデータプールである @@ -408,7 +426,6 @@ <li>RemoteDGMに対してDataGearを書き込むことで、対応するノードのLocalDGMにデータが書き込まれる</li> </ul> </li> - <li>GearsFSも同様にファイルproxyを通して通信を行う</li> </ul> @@ -418,6 +435,9 @@ <div class='slide'> <!-- _S9SLIDE_ --> <h2 id="datagearmanager-1">DataGearManager</h2> +<ul> + <li>任意の相手のRemoteDGMを作成することでTopologyが形成される</li> +</ul> <div style="text-align: center;"> <img src="images/Remote_DataGearManager.pdf" alt="RemoteDGMの関係図" width="800" /> </div> @@ -428,18 +448,29 @@ <div class='slide'> <!-- _S9SLIDE_ --> -<h2 id="socket付きqueueの実装">socket付きQueueの実装</h2> +<h2 id="gearsos上のsocket通信">GearsOS上のsocket通信</h2> <ul> - <li>socketに接続されたQueueにより通信APIの記述を行った</li> - <li>GearsOS上でのsocket操作の記述</li> - <li>Localなqueueに対してRemoteのqueueがソケット接続を行う - <pre><code>TQueue* createRemoteDGMQueue(struct Context* context, char* sNum) { - struct TQueue* tQueue = new TQueue(); - struct RemoteDGMQueue* RemoteDGMQueue = new RemoteDGMQueue(); - RemoteDGMQueue->atomic = createAtomicReference(context); - RemoteDGMQueue->socket = createSocketRemoteDGMQueue(sNum); -} + <li>GearsOS上のsocket通信を検証したい</li> + <li>Queueをsocketに接続し、簡易的なAPIの記述をした + <ul> + <li>Localなqueueに対してRemoteのqueueがソケット接続を行う</li> + <li>socketはQueueの生成時に接続される + <pre><code>typedef struct CQueue<>{ +union Data* cQueue; +union Data* data; + +__code whenEmpty(...); +__code whenEOF(...); +__code clear(Impl* cQueue, __code next(...)); +__code put(Impl* cQueue, union Data* data, __code next(...)); +__code take(Impl* cQueue, __code next(union Data* data, ...)); +__code isEmpty(Impl* cQueue, __code next(...), __code whenEmpty(...)); +__code getData(Impl* cQueue, __code next(...), __code whenEOF(...)); +__code next(...); +} CQueue; </code></pre> + </li> + </ul> </li> </ul>