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
Binary file .DS_Store has changed
--- 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-&gt;atomic = createAtomicReference(context);
-  RemoteDGMQueue-&gt;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&lt;&gt;{
+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-&gt;atomic = createAtomicReference(context);
-  RemoteDGMQueue-&gt;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&lt;&gt;{
+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>