changeset 30:ec3761cbbe24

tweak
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Fri, 11 Feb 2022 16:01:54 +0900
parents bca6c79006cf
children 411d86a35dd3
files slide/thesis.html slide/thesis.md slide/thesis.pdf.html
diffstat 3 files changed, 273 insertions(+), 148 deletions(-) [+]
line wrap: on
line diff
--- a/slide/thesis.html	Fri Feb 11 13:14:32 2022 +0900
+++ b/slide/thesis.html	Fri Feb 11 16:01:54 2022 +0900
@@ -94,8 +94,11 @@
 <h2 id="gearsosのファイルシステムの設計と実装">GearsOSのファイルシステムの設計と実装</h2>
 <ul>
   <li>DataGearとCodeGearという単位を用いるOS</li>
-  <li>従来のファイルシステムには型とTransactionが無い</li>
-  <li>DataGear単位のTransactionとしてファイルシステムを設計</li>
+  <li>DataGear単位のTransactionとしてファイルシステムを設計
+    <ul>
+      <li>従来のOSのファイルシステムには型とTransactionが無い</li>
+    </ul>
+  </li>
   <li>APIとしてTake/Put/Peekを採用した</li>
   <li>通信としてもDBアクセスとしても使える(メモリからSSDへの通信に見える)</li>
   <li>本研究ではsocket baseな通信とWordCountの例題を作成した</li>
@@ -244,16 +247,16 @@
 <h2 id="gearsosのファイルシステムの設計">GearsOSのファイルシステムの設計</h2>
 <ul>
   <li>DataGearの単位でデータを操作したい</li>
-  <li>通信データに対応した複数のストリームを持つ</li>
+  <li>ファイルは通信データに対応した複数のストリームを持つ</li>
   <li>Transactionとしてatomicに操作したい
     <ul>
-      <li>従来のファイルシステムはTransactionはUserレベルで実装される</li>
+      <li>従来のファイルシステムのTransactionはUserレベルで実装される</li>
     </ul>
   </li>
   <li>ファイル操作と通信を同じAPIで実現する
     <ul>
+      <li>Take/Put/Peek</li>
       <li>ChristieのDataGearManagerを参考にする</li>
-      <li>Take/Put/Peek</li>
     </ul>
   </li>
 </ul>
@@ -570,15 +573,15 @@
       <li>ファイルシステム向けの機能を追加したい
         <ul>
           <li>DNS</li>
-          <li>中枢としてのTopologyのノード監視</li>
+          <li>中枢としてのTopologyノード監視</li>
         </ul>
       </li>
     </ul>
   </li>
   <li>Securityシステムの追加
     <ul>
-      <li>ファルパーミッション</li>
-      <li>不正な分散ファイルシステムへのアクセスの防止</li>
+      <li>ファイルpermission</li>
+      <li>分散ファイルシステムへの不正なアクセスの防止</li>
     </ul>
   </li>
 </ul>
@@ -612,72 +615,125 @@
   <!-- _S9SLIDE_ -->
 <h2 id="トランスコンパイラのバグの例">トランスコンパイラのバグの例</h2>
 <ul>
-  <li>ContextからのDataGearの取り出し方が間違っている
-```
-__code Task3(TQueue* localDGMQueue, FileString* string){
-  goto Task4();
-}</li>
+  <li>ContextからのDataGearの取り出し方が間違っている</li>
 </ul>
 
-<p>__code Task3_stub(struct Context* context){   //正しいstub
-  TQueue* localDGMQueue = (struct TQueue<em>)Gearef(context, TQueue)-&gt;tQueue;
-  FileString</em> string = Gearef(context, TQueue)-&gt;data;
+<pre><code>__code Task3(TQueue* localDGMQueue, FileString* string){
+    goto Task4();
+}
+
+__code Task3_stub(struct Context* context){   //正しいstub
+  TQueue* localDGMQueue = (struct TQueue*)Gearef(context, TQueue)-&gt;tQueue;
+  FileString* string = Gearef(context, TQueue)-&gt;data;
   goto Task3(context, localDGMQueue, string);
-}</p>
+}
 
-<p>__code Task3_stub(struct Context* context) {  //自動生成されたErrorなstub
+__code Task3_stub(struct Context* context) {  //自動生成されたErrorなstub
 	TQueue* localDGMQueue = Gearef(context, TQueue);
 	FileString* string = Gearef(context, FileString);
 	goto Task3(context, localDGMQueue, string);
-}</p>
-<pre><code>
-## 並列処理構文par gotoが持つ問題
-- par gotoとはGearsOSに実装された並列処理構文である
-- StreamQueueに対するput/takeの並列処理の実装をpar goto構文で試みた
-- par gotoはトランスコンパイラへの依存性が高い
-  - stubCodeGearのように任意な書き換えが行えない
-- 特定のCodeGearの宣言のみでしか正常な処理が生成されない
-  - Interfaceに記述されたAPICodeGearではバグが生じる
-  - par gotoでの使用を前提としたCodeGearを書かなくてはならない
-- 処理が重いという問題点も存在する
+}
+</code></pre>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(1/3)
-- FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる
-- (手順1)FileOpen側はFilePloxyにDataRecordをputする
-- (手順2)WordCount側は処理の後、ackを返信する
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="並列処理構文par-gotoが持つ問題">並列処理構文par gotoが持つ問題</h2>
+<ul>
+  <li>par gotoとはGearsOSに実装された並列処理構文である</li>
+  <li>StreamQueueに対するput/takeの並列処理の実装をpar goto構文で試みた</li>
+  <li>par gotoはトランスコンパイラへの依存性が高い
+    <ul>
+      <li>stubCodeGearのように任意な書き換えが行えない</li>
+    </ul>
+  </li>
+  <li>特定のCodeGearの宣言のみでしか正常な処理が生成されない
+    <ul>
+      <li>Interfaceに記述されたAPICodeGearではバグが生じる</li>
+      <li>par gotoでの使用を前提としたCodeGearを書かなくてはならない</li>
+    </ul>
+  </li>
+  <li>処理が重いという問題点も存在する</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount13">GearsFile APIによるWordCount(1/3)</h2>
+<ul>
+  <li>FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる</li>
+  <li>(手順1)FileOpen側はFilePloxyにDataRecordをputする</li>
+  <li>(手順2)WordCount側は処理の後、ackを返信する</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(2/3)
-- (手順3)1,2をループし、FileOpen側はEoFならフラグを送信する
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount23">GearsFile APIによるWordCount(2/3)</h2>
+<ul>
+  <li>(手順3)1,2をループし、FileOpen側はEoFならフラグを送信する</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(3/3)
-- (手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount33">GearsFile APIによるWordCount(3/3)</h2>
+<ul>
+  <li>(手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
 
-## 以下返答用
+
+
+</div>
 
-## PeekのImplementation
-- QueueからElement経由でDataGearを取り出す
-- Takeとは異なり、Queueのリンクを修正せずに、取り出されるデータをnextへ引き渡す
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="以下返答用">以下返答用</h2>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="peekのimplementation">PeekのImplementation</h2>
+<ul>
+  <li>QueueからElement経由でDataGearを取り出す</li>
+  <li>Takeとは異なり、Queueのリンクを修正せずに、取り出されるデータをnextへ引き渡す
+    <pre><code>__code peekSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
+  struct Element* top = queue-&gt;top;
+  struct Element* nextElement = top-&gt;next;
+  if (queue-&gt;top == queue-&gt;last) {
+      data = NULL;
+  } else {
+      data = nextElement-&gt;data;
+  }
+  goto next(data, ...);
+}
 </code></pre>
-<p>__code peekSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, …)) {
-    struct Element* top = queue-&gt;top;
-    struct Element* nextElement = top-&gt;next;
-    if (queue-&gt;top == queue-&gt;last) {
-        data = NULL;
-    } else {
-        data = nextElement-&gt;data;
-    }
-    goto next(data, …);
-}
-```</p>
+  </li>
+</ul>
 
 
 
@@ -738,7 +794,7 @@
 <h2 id="datagearの型">DataGearの型</h2>
 <ul>
   <li>union Data は一つのプロセス(Context)で使われるすべてのDataGearのUnion</li>
-  <li>メタ部分に型に対応する番号を持っている</li>
+  <li>GearsOSはメタ部分に型に対応する番号を持っている</li>
   <li>番号を使って型を識別することができる</li>
   <li>任意の型を格納できるQueueやStackを作成することが可能</li>
   <li>メタレベルではunion Dataを使ってDataGearの詳細に立ち入らず処理できる</li>
@@ -752,13 +808,19 @@
   <!-- _S9SLIDE_ -->
 <h2 id="remotedgmとacknowledge">RemoteDGMとacknowledge</h2>
 <ul>
-  <li>Take/Put/Peekのコマンドは TCP上でacknowledgeを使って通信されている</li>
-  <li>これとは別に自分と相手のCodeGearどうしのacknowledgeが必要</li>
-  <li>RemoteDataGearManager経由でacknowledgeを返すのが正しい</li>
-  <li>しかし、acknowledgeが重複してしまう</li>
-  <li>メタプログラミングを利用してこの重複を消すことは可能
+  <li>Take/Put/Peekのコマンドは TCP上でacknowledgeを使って通信されている
+    <ul>
+      <li>これとは別に自分と相手のCodeGearどうしのacknowledgeが必要</li>
+    </ul>
+  </li>
+  <li>RemoteDataGearManager経由でacknowledgeを返すのが正しい
     <ul>
-      <li>しかし煩雑</li>
+      <li>acknowledgeが重複してしまう</li>
+      <li>メタプログラミングを利用してこの重複を消すことは可能
+        <ul>
+          <li>煩雑な処理</li>
+        </ul>
+      </li>
     </ul>
   </li>
 </ul>
--- a/slide/thesis.md	Fri Feb 11 13:14:32 2022 +0900
+++ b/slide/thesis.md	Fri Feb 11 16:01:54 2022 +0900
@@ -93,12 +93,13 @@
 
 ## GearsOSのファイルシステムの設計
 - DataGearの単位でデータを操作したい
-- 通信データに対応した複数のストリームを持つ
+- ファイルは通信データに対応した複数のストリームを持つ
 - Transactionとしてatomicに操作したい
-  - 従来のファイルシステムはTransactionはUserレベルで実装される
+  - 従来のファイルシステムのTransactionはUserレベルで実装される
 - ファイル操作と通信を同じAPIで実現する
+  - Take/Put/Peek
   - ChristieのDataGearManagerを参考にする
-  - Take/Put/Peek
+
 
 ## Take/Put/Peek
 - ファイルはQueueで構成される
@@ -261,10 +262,10 @@
   - 参加したノードを任意の形のTopologyに接続する機能
   - ファイルシステム向けの機能を追加したい
     - DNS
-    - 中枢としてのTopologyのノード監視
+    - 中枢としてのTopologyノード監視
 - Securityシステムの追加
-  - ファルパーミッション
-  - 不正な分散ファイルシステムへのアクセスの防止
+  - ファイルpermission
+  - 分散ファイルシステムへの不正なアクセスの防止
 
 
 
@@ -275,9 +276,9 @@
     - 例)Queueからのデータ取り出し
     - トランスコンパイラはどのInterfaceに記述されたDataGearを参照するべきか判断が難しい
 
-
 ## トランスコンパイラのバグの例
 - ContextからのDataGearの取り出し方が間違っている
+
 ```
 __code Task3(TQueue* localDGMQueue, FileString* string){
     goto Task4();
@@ -369,18 +370,18 @@
 
 ## DataGearの型
 - union Data は一つのプロセス(Context)で使われるすべてのDataGearのUnion
-- メタ部分に型に対応する番号を持っている
+- GearsOSはメタ部分に型に対応する番号を持っている
 - 番号を使って型を識別することができる
 - 任意の型を格納できるQueueやStackを作成することが可能
 - メタレベルではunion Dataを使ってDataGearの詳細に立ち入らず処理できる
 
 ## RemoteDGMとacknowledge
 - Take/Put/Peekのコマンドは TCP上でacknowledgeを使って通信されている
-- これとは別に自分と相手のCodeGearどうしのacknowledgeが必要
+  - これとは別に自分と相手のCodeGearどうしのacknowledgeが必要
 - RemoteDataGearManager経由でacknowledgeを返すのが正しい
-- しかし、acknowledgeが重複してしまう
-- メタプログラミングを利用してこの重複を消すことは可能
-  - しかし煩雑
+  - acknowledgeが重複してしまう
+  - メタプログラミングを利用してこの重複を消すことは可能
+    - 煩雑な処理
 
 ## 複数のストリームによる利点
 - 例えばUSBは複数のチャネルを持つ
--- a/slide/thesis.pdf.html	Fri Feb 11 13:14:32 2022 +0900
+++ b/slide/thesis.pdf.html	Fri Feb 11 16:01:54 2022 +0900
@@ -78,8 +78,11 @@
 <h2 id="gearsosのファイルシステムの設計と実装">GearsOSのファイルシステムの設計と実装</h2>
 <ul>
   <li>DataGearとCodeGearという単位を用いるOS</li>
-  <li>従来のファイルシステムには型とTransactionが無い</li>
-  <li>DataGear単位のTransactionとしてファイルシステムを設計</li>
+  <li>DataGear単位のTransactionとしてファイルシステムを設計
+    <ul>
+      <li>従来のOSのファイルシステムには型とTransactionが無い</li>
+    </ul>
+  </li>
   <li>APIとしてTake/Put/Peekを採用した</li>
   <li>通信としてもDBアクセスとしても使える(メモリからSSDへの通信に見える)</li>
   <li>本研究ではsocket baseな通信とWordCountの例題を作成した</li>
@@ -228,16 +231,16 @@
 <h2 id="gearsosのファイルシステムの設計">GearsOSのファイルシステムの設計</h2>
 <ul>
   <li>DataGearの単位でデータを操作したい</li>
-  <li>通信データに対応した複数のストリームを持つ</li>
+  <li>ファイルは通信データに対応した複数のストリームを持つ</li>
   <li>Transactionとしてatomicに操作したい
     <ul>
-      <li>従来のファイルシステムはTransactionはUserレベルで実装される</li>
+      <li>従来のファイルシステムのTransactionはUserレベルで実装される</li>
     </ul>
   </li>
   <li>ファイル操作と通信を同じAPIで実現する
     <ul>
+      <li>Take/Put/Peek</li>
       <li>ChristieのDataGearManagerを参考にする</li>
-      <li>Take/Put/Peek</li>
     </ul>
   </li>
 </ul>
@@ -554,15 +557,15 @@
       <li>ファイルシステム向けの機能を追加したい
         <ul>
           <li>DNS</li>
-          <li>中枢としてのTopologyのノード監視</li>
+          <li>中枢としてのTopologyノード監視</li>
         </ul>
       </li>
     </ul>
   </li>
   <li>Securityシステムの追加
     <ul>
-      <li>ファルパーミッション</li>
-      <li>不正な分散ファイルシステムへのアクセスの防止</li>
+      <li>ファイルpermission</li>
+      <li>分散ファイルシステムへの不正なアクセスの防止</li>
     </ul>
   </li>
 </ul>
@@ -596,72 +599,125 @@
   <!-- _S9SLIDE_ -->
 <h2 id="トランスコンパイラのバグの例">トランスコンパイラのバグの例</h2>
 <ul>
-  <li>ContextからのDataGearの取り出し方が間違っている
-```
-__code Task3(TQueue* localDGMQueue, FileString* string){
-  goto Task4();
-}</li>
+  <li>ContextからのDataGearの取り出し方が間違っている</li>
 </ul>
 
-<p>__code Task3_stub(struct Context* context){   //正しいstub
-  TQueue* localDGMQueue = (struct TQueue<em>)Gearef(context, TQueue)-&gt;tQueue;
-  FileString</em> string = Gearef(context, TQueue)-&gt;data;
+<pre><code>__code Task3(TQueue* localDGMQueue, FileString* string){
+    goto Task4();
+}
+
+__code Task3_stub(struct Context* context){   //正しいstub
+  TQueue* localDGMQueue = (struct TQueue*)Gearef(context, TQueue)-&gt;tQueue;
+  FileString* string = Gearef(context, TQueue)-&gt;data;
   goto Task3(context, localDGMQueue, string);
-}</p>
+}
 
-<p>__code Task3_stub(struct Context* context) {  //自動生成されたErrorなstub
+__code Task3_stub(struct Context* context) {  //自動生成されたErrorなstub
 	TQueue* localDGMQueue = Gearef(context, TQueue);
 	FileString* string = Gearef(context, FileString);
 	goto Task3(context, localDGMQueue, string);
-}</p>
-<pre><code>
-## 並列処理構文par gotoが持つ問題
-- par gotoとはGearsOSに実装された並列処理構文である
-- StreamQueueに対するput/takeの並列処理の実装をpar goto構文で試みた
-- par gotoはトランスコンパイラへの依存性が高い
-  - stubCodeGearのように任意な書き換えが行えない
-- 特定のCodeGearの宣言のみでしか正常な処理が生成されない
-  - Interfaceに記述されたAPICodeGearではバグが生じる
-  - par gotoでの使用を前提としたCodeGearを書かなくてはならない
-- 処理が重いという問題点も存在する
+}
+</code></pre>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(1/3)
-- FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる
-- (手順1)FileOpen側はFilePloxyにDataRecordをputする
-- (手順2)WordCount側は処理の後、ackを返信する
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="並列処理構文par-gotoが持つ問題">並列処理構文par gotoが持つ問題</h2>
+<ul>
+  <li>par gotoとはGearsOSに実装された並列処理構文である</li>
+  <li>StreamQueueに対するput/takeの並列処理の実装をpar goto構文で試みた</li>
+  <li>par gotoはトランスコンパイラへの依存性が高い
+    <ul>
+      <li>stubCodeGearのように任意な書き換えが行えない</li>
+    </ul>
+  </li>
+  <li>特定のCodeGearの宣言のみでしか正常な処理が生成されない
+    <ul>
+      <li>Interfaceに記述されたAPICodeGearではバグが生じる</li>
+      <li>par gotoでの使用を前提としたCodeGearを書かなくてはならない</li>
+    </ul>
+  </li>
+  <li>処理が重いという問題点も存在する</li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount13">GearsFile APIによるWordCount(1/3)</h2>
+<ul>
+  <li>FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる</li>
+  <li>(手順1)FileOpen側はFilePloxyにDataRecordをputする</li>
+  <li>(手順2)WordCount側は処理の後、ackを返信する</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(2/3)
-- (手順3)1,2をループし、FileOpen側はEoFならフラグを送信する
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount23">GearsFile APIによるWordCount(2/3)</h2>
+<ul>
+  <li>(手順3)1,2をループし、FileOpen側はEoFならフラグを送信する</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
+
+
+
+</div>
 
-##  GearsFile APIによるWordCount(3/3)
-- (手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる
-&lt;div style="text-align: center;"&gt;
-   &lt;img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800"&gt;
-&lt;/div&gt;
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="gearsfile-apiによるwordcount33">GearsFile APIによるWordCount(3/3)</h2>
+<ul>
+  <li>(手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる</li>
+</ul>
+<div style="text-align: center;">
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
+</div>
 
-## 以下返答用
+
+
+</div>
 
-## PeekのImplementation
-- QueueからElement経由でDataGearを取り出す
-- Takeとは異なり、Queueのリンクを修正せずに、取り出されるデータをnextへ引き渡す
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="以下返答用">以下返答用</h2>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="peekのimplementation">PeekのImplementation</h2>
+<ul>
+  <li>QueueからElement経由でDataGearを取り出す</li>
+  <li>Takeとは異なり、Queueのリンクを修正せずに、取り出されるデータをnextへ引き渡す
+    <pre><code>__code peekSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, ...)) {
+  struct Element* top = queue-&gt;top;
+  struct Element* nextElement = top-&gt;next;
+  if (queue-&gt;top == queue-&gt;last) {
+      data = NULL;
+  } else {
+      data = nextElement-&gt;data;
+  }
+  goto next(data, ...);
+}
 </code></pre>
-<p>__code peekSingleLinkedQueue(struct SingleLinkedQueue* queue, __code next(union Data* data, …)) {
-    struct Element* top = queue-&gt;top;
-    struct Element* nextElement = top-&gt;next;
-    if (queue-&gt;top == queue-&gt;last) {
-        data = NULL;
-    } else {
-        data = nextElement-&gt;data;
-    }
-    goto next(data, …);
-}
-```</p>
+  </li>
+</ul>
 
 
 
@@ -722,7 +778,7 @@
 <h2 id="datagearの型">DataGearの型</h2>
 <ul>
   <li>union Data は一つのプロセス(Context)で使われるすべてのDataGearのUnion</li>
-  <li>メタ部分に型に対応する番号を持っている</li>
+  <li>GearsOSはメタ部分に型に対応する番号を持っている</li>
   <li>番号を使って型を識別することができる</li>
   <li>任意の型を格納できるQueueやStackを作成することが可能</li>
   <li>メタレベルではunion Dataを使ってDataGearの詳細に立ち入らず処理できる</li>
@@ -736,13 +792,19 @@
   <!-- _S9SLIDE_ -->
 <h2 id="remotedgmとacknowledge">RemoteDGMとacknowledge</h2>
 <ul>
-  <li>Take/Put/Peekのコマンドは TCP上でacknowledgeを使って通信されている</li>
-  <li>これとは別に自分と相手のCodeGearどうしのacknowledgeが必要</li>
-  <li>RemoteDataGearManager経由でacknowledgeを返すのが正しい</li>
-  <li>しかし、acknowledgeが重複してしまう</li>
-  <li>メタプログラミングを利用してこの重複を消すことは可能
+  <li>Take/Put/Peekのコマンドは TCP上でacknowledgeを使って通信されている
+    <ul>
+      <li>これとは別に自分と相手のCodeGearどうしのacknowledgeが必要</li>
+    </ul>
+  </li>
+  <li>RemoteDataGearManager経由でacknowledgeを返すのが正しい
     <ul>
-      <li>しかし煩雑</li>
+      <li>acknowledgeが重複してしまう</li>
+      <li>メタプログラミングを利用してこの重複を消すことは可能
+        <ul>
+          <li>煩雑な処理</li>
+        </ul>
+      </li>
     </ul>
   </li>
 </ul>