changeset 18:b0fde43e331b

tweak
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Mon, 07 Feb 2022 03:39:50 +0900
parents f4a719e93ded
children 9e6fd2255ee1
files Paper/chapter/6-Evaluation.tex Paper/images/socketCom.graffle.graffle Paper/images/socketCom.pdf slide/.DS_Store slide/images/GearsDirectory.pdf slide/images/nonDestroyTreeEdit.pdf slide/images/socketCom.pdf slide/thesis.html slide/thesis.md slide/thesis.pdf.html
diffstat 10 files changed, 406 insertions(+), 71 deletions(-) [+]
line wrap: on
line diff
--- a/Paper/chapter/6-Evaluation.tex	Sun Feb 06 06:13:32 2022 +0900
+++ b/Paper/chapter/6-Evaluation.tex	Mon Feb 07 03:39:50 2022 +0900
@@ -4,7 +4,7 @@
 
 
 
-\section{トランスコンパイラによるstubCodeGearの語生成}
+\section{トランスコンパイラによるstubCodeGearの誤生成}
 GearsOSの最大の特徴としてノーマルレベルとメタレベルのプログラムを分離して記述をする必要があるという点が存在する。
 メタレベルのプログラムは現状、Perlスクリプトを用いたトランスコンパイラにより自動生成されている形となっている。
 トランスコンパイラにより生成されるメタレベルなプログラムの中で最も重要な部分として、DataGearの受け渡しを担当するstubCodeGearの生成がある。
Binary file Paper/images/socketCom.graffle.graffle has changed
Binary file Paper/images/socketCom.pdf has changed
Binary file slide/.DS_Store has changed
Binary file slide/images/GearsDirectory.pdf has changed
Binary file slide/images/nonDestroyTreeEdit.pdf has changed
Binary file slide/images/socketCom.pdf has changed
--- a/slide/thesis.html	Sun Feb 06 06:13:32 2022 +0900
+++ b/slide/thesis.html	Mon Feb 07 03:39:50 2022 +0900
@@ -552,6 +552,17 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
+<h2 id="遠隔からのファイル変更">遠隔からのファイル変更</h2>
+<div style="text-align: center;">
+     <img src="images/socketCom.pdf" alt="socketを通じたレコード送信" width="800" />
+  </div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
 <h2 id="wordcount例題">WordCount例題</h2>
 <ul>
   <li>ChristieAPIの構成をWordCount例題を通して行った</li>
@@ -591,24 +602,16 @@
   <!-- _S9SLIDE_ -->
 <h2 id="localdgmのsocketの受信データ取り出し">LocalDGMのsocketの受信データ取り出し</h2>
 <ul>
-  <li>LocalDGMに相当するファイルは接続先socketから送信されたデータを取り出す必要がある</li>
+  <li>socketはImplementに記述される</li>
+  <li>LocalDGMに相当するファイルは、接続先socketから送信されたデータを取り出す</li>
   <li>取り出されたデータはInputStreamQueueに対してputされる
     <pre><code>__code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenEOF(...), __code whenError(...)){
-  int recv_size, send_size;
-  char send_buf;
-
   union Data* recv_data;
   recv_size = recv(cQueue-&gt;socket, recv_data, sizeof(union Data), 0);
   if (recv_size == -1) {
       printf("recv error\n");
       goto whenError(...);
   }
-  if (recv_size == 0) {
-      printf("connection ended\n");
-      goto whenError(...);
-  }
-
-
   FileString* fileString = NEW(FileString);
   fileString = recv_data;
   if (fileString-&gt;EoF) == 1) {
@@ -648,9 +651,6 @@
     <ul>
       <li>putCodeGearの直後に呼び出される
         <pre><code>__code sendDataRemoteDGMQueue(struct RemoteDGMQueue* cQueue, union Data* data, __code next(...), __code whenError(...)){
-char recv_buf;
-int send_size, recv_size;
-
 send_size = send(cQueue-&gt;socket, data, sizeof(union Data), 0);
 if (send_size == -1) {
     printf("send error\n");
@@ -661,28 +661,171 @@
 if (recv_size == -1) {
     printf("recv error\n");
     goto whenError();
-} else if (recv_size == 0) {
-    printf("connection ended\n");
-    goto whenError();
-} else if(recv_buf == 0) {
-    printf("Finish connection\n");
-    close(cQueue-&gt;socket);
-    goto whenError();
 }
 goto next(...);
 }
 </code></pre>
-        
+      </li>
+    </ul>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのディレクトリ">GearsFSのディレクトリ</h2>
+<ul>
+  <li>ディレクトリを赤黒木で実装する</li>
+  <li>赤黒木のノードとしてファイル/ディレクトリが保存される</li>
+  <li>階層構造はファイル名がkey, データとしてinodeが保存される</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/GearsDirectory.pdf" alt="GearsOSのディレクトリ" width="500" />
+</div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのバックアップ12">GearsFSのバックアップ(1/2)</h2>
+<ul>
+  <li>ディレクトリツリーを非破壊的な編集で更新する</li>
+  <li>木構造の編集前の構造が履歴となる</li>
+  <li>保存容量の圧迫は対応が必要となる</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/nonDestroyTreeEdit.pdf" alt="非破壊的なツリー編集" width="800" />
+</div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのバックアップ22">GearsFSのバックアップ(2/2)</h2>
+<ul>
+  <li>ファイルレコードを変更差分として構成する
+    <ul>
+      <li>GithubやMercurialのようなバージョン管理が行える</li>
+      <li>特定の日時までのレコードを読めばよい</li>
+    </ul>
+  </li>
+  <li>定期的なファイルの再構築が必要</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsの並列処理">GearsFSの並列処理</h2>
+<ul>
+  <li>par gotoを用いる案
+    <ul>
+      <li>処理速度が遅い</li>
+      <li>現状バグが存在している</li>
+      <li>トランスコンパイラへの依存度が高い</li>
+    </ul>
+  </li>
+  <li>新しく並列処理を開発する</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsosの問題点">GearsOSの問題点</h2>
+<ul>
+  <li>記述難易度の高さ</li>
+  <li>Contextの操作
+    <ul>
+      <li>トランスコンパイラでは対応できない継承が存在する</li>
+      <li>場合によりメタレベルの記述を行わなくてはならない</li>
+    </ul>
+  </li>
+  <li>軽量継続
+    <ul>
+      <li>ループ記述が複雑</li>
+      <li>goto遷移以降の記述は実行されない</li>
+    </ul>
+  </li>
+  <li>par gotoの実用が難しい</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="課題">課題</h2>
+<ul>
+  <li>TopologyManagerの実装
+    <ul>
+      <li>ファイルの配線を行う</li>
+      <li>DNSの役割</li>
+      <li>クラスターの管理</li>
+    </ul>
+  </li>
+  <li>並列処理方法の決定
+    <ul>
+      <li>par gotoの改良</li>
+      <li>新たな案を実装する</li>
+    </ul>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="まとめ">まとめ</h2>
+<ul>
+  <li>GearsFileSystemの設計
+    <ul>
+      <li>ファイルの構成方法
+        <ul>
+          <li>Queueのリストである</li>
+        </ul>
+      </li>
+      <li>ファイル操作API
+        <ul>
+          <li>レコード単位で操作される</li>
+        </ul>
+      </li>
+      <li>ファイル送受信の実装
+        <ul>
+          <li>ファイルploxy</li>
+        </ul>
+      </li>
+      <li>ディレクトリの仕組み
+        <ul>
+          <li>赤黒木を用いる</li>
+          <li>非破壊的な編集によるログ</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+</ul>
+
+
 
 </div>
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
 <h2 id="この先保留ページ">この先保留ページ</h2>
-      </li>
-    </ul>
-  </li>
-</ul>
 
 
 
--- a/slide/thesis.md	Sun Feb 06 06:13:32 2022 +0900
+++ b/slide/thesis.md	Mon Feb 07 03:39:50 2022 +0900
@@ -239,6 +239,10 @@
   - (手順2)ローカル側はローカルのファイルに接続し、ploxy(RemoteDGM)を作成する
   - (手順3)ローカル側はploxyのkeyに対してデータをputする
 
+## 遠隔からのファイル変更
+  <div style="text-align: center;">
+     <img src="images/socketCom.pdf" alt=socketを通じたレコード送信 width="800">
+  </div>
 
 
 ## WordCount例題
@@ -264,25 +268,17 @@
 </div>
 
 ## LocalDGMのsocketの受信データ取り出し
-- LocalDGMに相当するファイルは接続先socketから送信されたデータを取り出す必要がある
+- socketはImplementに記述される
+- LocalDGMに相当するファイルは、接続先socketから送信されたデータを取り出す
 - 取り出されたデータはInputStreamQueueに対してputされる
 ```
 __code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenEOF(...), __code whenError(...)){
-    int recv_size, send_size;
-    char send_buf;
-
     union Data* recv_data;
     recv_size = recv(cQueue->socket, recv_data, sizeof(union Data), 0);
     if (recv_size == -1) {
         printf("recv error\n");
         goto whenError(...);
     }
-    if (recv_size == 0) {
-        printf("connection ended\n");
-        goto whenError(...);
-    }
-
-
     FileString* fileString = NEW(FileString);
     fileString = recv_data;
     if (fileString->EoF) == 1) {
@@ -313,9 +309,6 @@
   - putCodeGearの直後に呼び出される
 ```
 __code sendDataRemoteDGMQueue(struct RemoteDGMQueue* cQueue, union Data* data, __code next(...), __code whenError(...)){
-    char recv_buf;
-    int send_size, recv_size;
-
     send_size = send(cQueue->socket, data, sizeof(union Data), 0);
     if (send_size == -1) {
         printf("send error\n");
@@ -326,17 +319,73 @@
     if (recv_size == -1) {
         printf("recv error\n");
         goto whenError();
-    } else if (recv_size == 0) {
-        printf("connection ended\n");
-        goto whenError();
-    } else if(recv_buf == 0) {
-        printf("Finish connection\n");
-        close(cQueue->socket);
-        goto whenError();
     }
     goto next(...);
 }
 ```
+
+## GearsFSのディレクトリ
+- ディレクトリを赤黒木で実装する
+- 赤黒木のノードとしてファイル/ディレクトリが保存される
+- 階層構造はファイル名がkey, データとしてinodeが保存される
+<div style="text-align: center;">
+   <img src="images/GearsDirectory.pdf" alt=GearsOSのディレクトリ width="500">
+</div>
+
+## GearsFSのバックアップ(1/2)
+- ディレクトリツリーを非破壊的な編集で更新する
+- 木構造の編集前の構造が履歴となる
+- 保存容量の圧迫は対応が必要となる
+<div style="text-align: center;">
+   <img src="images/nonDestroyTreeEdit.pdf" alt=非破壊的なツリー編集 width="800">
+</div>
+
+## GearsFSのバックアップ(2/2)
+- ファイルレコードを変更差分として構成する
+  - GithubやMercurialのようなバージョン管理が行える
+  - 特定の日時までのレコードを読めばよい
+- 定期的なファイルの再構築が必要
+
+## GearsFSの並列処理
+- par gotoを用いる案
+  - 処理速度が遅い
+  - 現状バグが存在している
+  - トランスコンパイラへの依存度が高い
+- 新しく並列処理を開発する
+
+## GearsOSの問題点
+- 記述難易度の高さ
+- Contextの操作
+  - トランスコンパイラでは対応できない継承が存在する
+  - 場合によりメタレベルの記述を行わなくてはならない
+- 軽量継続
+  - ループ記述が複雑
+  - goto遷移以降の記述は実行されない
+- par gotoの実用が難しい
+
+## 課題
+- TopologyManagerの実装
+  - ファイルの配線を行う
+  - DNSの役割
+  - クラスターの管理
+- 並列処理方法の決定
+  - par gotoの改良
+  - 新たな案を実装する
+
+
+## まとめ
+- GearsFileSystemの設計
+  - ファイルの構成方法
+    - Queueのリストである
+  - ファイル操作API
+    - レコード単位で操作される
+  - ファイル送受信の実装
+    - ファイルploxy
+  - ディレクトリの仕組み
+    - 赤黒木を用いる
+    - 非破壊的な編集によるログ
+
+
 ## この先保留ページ
 
 
--- a/slide/thesis.pdf.html	Sun Feb 06 06:13:32 2022 +0900
+++ b/slide/thesis.pdf.html	Mon Feb 07 03:39:50 2022 +0900
@@ -536,6 +536,17 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
+<h2 id="遠隔からのファイル変更">遠隔からのファイル変更</h2>
+<div style="text-align: center;">
+     <img src="images/socketCom.pdf" alt="socketを通じたレコード送信" width="800" />
+  </div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
 <h2 id="wordcount例題">WordCount例題</h2>
 <ul>
   <li>ChristieAPIの構成をWordCount例題を通して行った</li>
@@ -575,24 +586,16 @@
   <!-- _S9SLIDE_ -->
 <h2 id="localdgmのsocketの受信データ取り出し">LocalDGMのsocketの受信データ取り出し</h2>
 <ul>
-  <li>LocalDGMに相当するファイルは接続先socketから送信されたデータを取り出す必要がある</li>
+  <li>socketはImplementに記述される</li>
+  <li>LocalDGMに相当するファイルは、接続先socketから送信されたデータを取り出す</li>
   <li>取り出されたデータはInputStreamQueueに対してputされる
     <pre><code>__code getDataLocalDGMQueue(struct LocalDGMQueue* cQueue, __code next(...), __code whenEOF(...), __code whenError(...)){
-  int recv_size, send_size;
-  char send_buf;
-
   union Data* recv_data;
   recv_size = recv(cQueue-&gt;socket, recv_data, sizeof(union Data), 0);
   if (recv_size == -1) {
       printf("recv error\n");
       goto whenError(...);
   }
-  if (recv_size == 0) {
-      printf("connection ended\n");
-      goto whenError(...);
-  }
-
-
   FileString* fileString = NEW(FileString);
   fileString = recv_data;
   if (fileString-&gt;EoF) == 1) {
@@ -632,9 +635,6 @@
     <ul>
       <li>putCodeGearの直後に呼び出される
         <pre><code>__code sendDataRemoteDGMQueue(struct RemoteDGMQueue* cQueue, union Data* data, __code next(...), __code whenError(...)){
-char recv_buf;
-int send_size, recv_size;
-
 send_size = send(cQueue-&gt;socket, data, sizeof(union Data), 0);
 if (send_size == -1) {
     printf("send error\n");
@@ -645,28 +645,171 @@
 if (recv_size == -1) {
     printf("recv error\n");
     goto whenError();
-} else if (recv_size == 0) {
-    printf("connection ended\n");
-    goto whenError();
-} else if(recv_buf == 0) {
-    printf("Finish connection\n");
-    close(cQueue-&gt;socket);
-    goto whenError();
 }
 goto next(...);
 }
 </code></pre>
-        
+      </li>
+    </ul>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのディレクトリ">GearsFSのディレクトリ</h2>
+<ul>
+  <li>ディレクトリを赤黒木で実装する</li>
+  <li>赤黒木のノードとしてファイル/ディレクトリが保存される</li>
+  <li>階層構造はファイル名がkey, データとしてinodeが保存される</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/GearsDirectory.pdf" alt="GearsOSのディレクトリ" width="500" />
+</div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのバックアップ12">GearsFSのバックアップ(1/2)</h2>
+<ul>
+  <li>ディレクトリツリーを非破壊的な編集で更新する</li>
+  <li>木構造の編集前の構造が履歴となる</li>
+  <li>保存容量の圧迫は対応が必要となる</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/nonDestroyTreeEdit.pdf" alt="非破壊的なツリー編集" width="800" />
+</div>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsのバックアップ22">GearsFSのバックアップ(2/2)</h2>
+<ul>
+  <li>ファイルレコードを変更差分として構成する
+    <ul>
+      <li>GithubやMercurialのようなバージョン管理が行える</li>
+      <li>特定の日時までのレコードを読めばよい</li>
+    </ul>
+  </li>
+  <li>定期的なファイルの再構築が必要</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfsの並列処理">GearsFSの並列処理</h2>
+<ul>
+  <li>par gotoを用いる案
+    <ul>
+      <li>処理速度が遅い</li>
+      <li>現状バグが存在している</li>
+      <li>トランスコンパイラへの依存度が高い</li>
+    </ul>
+  </li>
+  <li>新しく並列処理を開発する</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsosの問題点">GearsOSの問題点</h2>
+<ul>
+  <li>記述難易度の高さ</li>
+  <li>Contextの操作
+    <ul>
+      <li>トランスコンパイラでは対応できない継承が存在する</li>
+      <li>場合によりメタレベルの記述を行わなくてはならない</li>
+    </ul>
+  </li>
+  <li>軽量継続
+    <ul>
+      <li>ループ記述が複雑</li>
+      <li>goto遷移以降の記述は実行されない</li>
+    </ul>
+  </li>
+  <li>par gotoの実用が難しい</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="課題">課題</h2>
+<ul>
+  <li>TopologyManagerの実装
+    <ul>
+      <li>ファイルの配線を行う</li>
+      <li>DNSの役割</li>
+      <li>クラスターの管理</li>
+    </ul>
+  </li>
+  <li>並列処理方法の決定
+    <ul>
+      <li>par gotoの改良</li>
+      <li>新たな案を実装する</li>
+    </ul>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="まとめ">まとめ</h2>
+<ul>
+  <li>GearsFileSystemの設計
+    <ul>
+      <li>ファイルの構成方法
+        <ul>
+          <li>Queueのリストである</li>
+        </ul>
+      </li>
+      <li>ファイル操作API
+        <ul>
+          <li>レコード単位で操作される</li>
+        </ul>
+      </li>
+      <li>ファイル送受信の実装
+        <ul>
+          <li>ファイルploxy</li>
+        </ul>
+      </li>
+      <li>ディレクトリの仕組み
+        <ul>
+          <li>赤黒木を用いる</li>
+          <li>非破壊的な編集によるログ</li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+</ul>
+
+
 
 </div>
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
 <h2 id="この先保留ページ">この先保留ページ</h2>
-      </li>
-    </ul>
-  </li>
-</ul>