changeset 26:2bba3749e1f1

tweak
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Thu, 10 Feb 2022 13:46:28 +0900
parents 4b8ae0488000
children 3f39907150c5
files .DS_Store Paper/chapter/3-GearsOS.tex Paper/images/slideGearsWC.graffle.graffle Paper/images/slideGearsWC.pdf Paper/master_paper.pdf slide/images/slideGearsWC.graffle.graffle slide/images/slideGearsWC.pdf slide/thesis.html slide/thesis.md slide/thesis.pdf.html
diffstat 10 files changed, 122 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
Binary file .DS_Store has changed
--- a/Paper/chapter/3-GearsOS.tex	Thu Feb 10 11:28:41 2022 +0900
+++ b/Paper/chapter/3-GearsOS.tex	Thu Feb 10 13:46:28 2022 +0900
@@ -7,7 +7,7 @@
 
 \section{Interface}
 GearsOSの重要な仕様としてInterfaceが存在する。Interaceは DataGear をCの構造体として定義し、
-そのDataGearを操作する method のAPI(codeGearの型)を提供する。これは Java などの 
+そのDataGearを操作する method のAPI(codeGearの型)を提供する。これは Java などの
 Interfaceのモジュール化の仕組みと同様の役割を持つ。
 
 CbCはstackをもたないので、APIで呼び出された引数はstackではなく、プロセスごとのContextというmetaDataGear
@@ -20,7 +20,7 @@
 
 \lstinputlisting[label=src:Queue.h, caption=Queueのインターフェース]{src/Queue.h}
 
-\verb+__code+で始まる5から10行目はCodeGearの宣言である。
+\texttt{\_\_code}codeで始まる5から10行目はCodeGearの宣言である。
 2, 3行目のunion Data型の変数はAPIのCodeGearで使用されるDataGearを記述する。
 
 コード内のCodeGearの第1引数はImpl*型の変数となっており、Interfaceを実装するImplementへのポインタとなる。
@@ -31,13 +31,13 @@
 この構造体は呼び出し毎に書き換えられるので再帰的に使うことはできない。つまり、CbCのInterface
 は基本的にループであって、再帰呼び出しを行うには明示的にスタックを用意する必要がある。
 
-\begin{lstliting}[frame=lrbt,caption{Interfaceの呼び出し}]
+\begin{lstlisting}[frame=lrbt,caption={Interfaceの呼び出し}]
     goto queue->put(task, next(...));
-\end{lstliting}
+\end{lstlisting}
 
 \texttt{\_\_code next(...)}は
 そのCodeGearが呼び出される際に入力される別のCodeGearへのポインタであり、
-そのAPIのCodeGearの処理後の遷移先のCodeGearを指定することができる。\verb+...+ の意味は
+そのAPIのCodeGearの処理後の遷移先のCodeGearを指定することができる。...の意味は
 呼び出した引数の構造体を全部含んでいるということで、関数型プログラミングのclosureに近いが、
 再帰しないという違いがある。一段だけの関数呼び出しだと思ってもよい。
 \texttt{\_\_code whenEmpty(...)}も同様に別CodeGearへのポインタである。
@@ -50,7 +50,7 @@
 すべての構造体は共用体(union)のData型に登録されている。
 InterfaceはDataGearもしくはCodeGearの一時的な保管場所で、Implementationは持続的な保管場所である。
 
-実際には CodeGear / DataGear は、Context内ですべて番号で管理されているので、メタ側から
+実際には CodeGear/DataGear は、Context内ですべて番号で管理されているので、メタ側から
 全部に均等にアクセスすることができる。これにより、OSのプロセス管理、あるいはモデル検査などを
 MetaDataGearであるContextを処理する MetaCodeGearとして定義できる。
 
Binary file Paper/images/slideGearsWC.graffle.graffle has changed
Binary file Paper/images/slideGearsWC.pdf has changed
Binary file Paper/master_paper.pdf has changed
Binary file slide/images/slideGearsWC.graffle.graffle has changed
Binary file slide/images/slideGearsWC.pdf has changed
--- a/slide/thesis.html	Thu Feb 10 11:28:41 2022 +0900
+++ b/slide/thesis.html	Thu Feb 10 13:46:28 2022 +0900
@@ -176,6 +176,43 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
+<h2 id="gearsosのimplement">GearsOSのImplement</h2>
+<ul>
+  <li>Interfaceを継承した実装の型定義ファイルである</li>
+  <li>実装で使われるデータ構造を記述する
+    <pre><code> typedef struct SynchronizedQueue &lt;&gt; impl Queue {
+ struct Element* top;
+ struct Element* last;
+ struct Atomic* atomic;
+ } SynchronizedQueue;
+</code></pre>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="interfaceの呼び出し">Interfaceの呼び出し</h2>
+<ul>
+  <li>インターフェースは以下の記述で実装と呼び出しを行う
+    <pre><code>struct Queue* queue = new Queue();
+queue = createSychronizedQueue(context);
+</code></pre>
+  </li>
+</ul>
+
+<pre><code>goto queue-&gt;put(task, next(...));
+</code></pre>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
 <h2 id="メタレベルのgear13">メタレベルのGear(1/3)</h2>
 <ul>
   <li>CodeGearとDataGearにはユーザーが記述しない、メタレベルのものが存在する
@@ -596,12 +633,12 @@
   <!-- _S9SLIDE_ -->
 <h2 id="gearsfile-apiによるwordcount13">GearsFile APIによるWordCount(1/3)</h2>
 <ul>
-  <li>FileOpen側とWordCount側でノードが別れる</li>
-  <li>(手順1)FileOpen側はRDGMに文字列をputする</li>
+  <li>FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる</li>
+  <li>(手順1)FileOpen側はFilePloxyに文字列をputする</li>
   <li>(手順2)WordCount側は処理の後、ackを返信する</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -615,7 +652,7 @@
   <li>(手順3)1,2をループし、FileOpen側はEoFならフラグを送信する</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -629,7 +666,7 @@
   <li>(手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -681,7 +718,7 @@
       <li>他のInterfaceを継承したオブジェクトからのDataGear継承
         <ul>
           <li>例)Queueからのデータ取り出し</li>
-          <li>トランスコンパイラはどのInterfaceが持つDataGearを参照するべきか判断が難しい</li>
+          <li>トランスコンパイラはどのInterfaceに記述されたDataGearを参照するべきか判断が難しい</li>
         </ul>
       </li>
     </ul>
--- a/slide/thesis.md	Thu Feb 10 11:28:41 2022 +0900
+++ b/slide/thesis.md	Thu Feb 10 13:46:28 2022 +0900
@@ -51,6 +51,30 @@
 } Tree;
 ```
 
+## GearsOSのImplement
+- Interfaceを継承した実装の型定義ファイルである
+- 実装で使われるデータ構造を記述する
+ ```
+ typedef struct SynchronizedQueue <> impl Queue {
+   struct Element* top;
+   struct Element* last;
+   struct Atomic* atomic;
+ } SynchronizedQueue;
+ ```
+
+
+## Interfaceの呼び出し
+- インターフェースは以下の記述で実装と呼び出しを行う
+```
+struct Queue* queue = new Queue();
+queue = createSychronizedQueue(context);
+```
+
+```
+goto queue->put(task, next(...));
+```
+
+
 ## メタレベルのGear(1/3)
 - CodeGearとDataGearにはユーザーが記述しない、メタレベルのものが存在する
   - メタレベルな記述はトランスコンパイラにより自動生成される
@@ -261,23 +285,23 @@
 
 
 ##  GearsFile APIによるWordCount(1/3)
-- FileOpen側とWordCount側でノードが別れる
-- (手順1)FileOpen側はRDGMに文字列をputする
+- FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる
+- (手順1)FileOpen側はFilePloxyに文字列をputする
 - (手順2)WordCount側は処理の後、ackを返信する
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt=ChristieAPIによるWordCount width="800">
+   <img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800">
 </div>
 
 ##  GearsFile APIによるWordCount(2/3)
 - (手順3)1,2をループし、FileOpen側はEoFならフラグを送信する
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt=ChristieAPIによるWordCount width="800">
+   <img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800">
 </div>
 
 ##  GearsFile APIによるWordCount(3/3)
 - (手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt=ChristieAPIによるWordCount width="800">
+   <img src="images/slideGearsWC.pdf" alt=ChristieAPIによるWordCount width="800">
 </div>
 
 
@@ -299,7 +323,7 @@
 - 場合によりメタレベルの記述を行わなくてはならない
   - 他のInterfaceを継承したオブジェクトからのDataGear継承
     - 例)Queueからのデータ取り出し
-    - トランスコンパイラはどのInterfaceが持つDataGearを参照するべきか判断が難しい
+    - トランスコンパイラはどのInterfaceに記述されたDataGearを参照するべきか判断が難しい
 
 ```
 __code Task2(TQueue* localDGMQueue){
--- a/slide/thesis.pdf.html	Thu Feb 10 11:28:41 2022 +0900
+++ b/slide/thesis.pdf.html	Thu Feb 10 13:46:28 2022 +0900
@@ -160,6 +160,43 @@
 
 <div class='slide'>
   <!-- _S9SLIDE_ -->
+<h2 id="gearsosのimplement">GearsOSのImplement</h2>
+<ul>
+  <li>Interfaceを継承した実装の型定義ファイルである</li>
+  <li>実装で使われるデータ構造を記述する
+    <pre><code> typedef struct SynchronizedQueue &lt;&gt; impl Queue {
+ struct Element* top;
+ struct Element* last;
+ struct Atomic* atomic;
+ } SynchronizedQueue;
+</code></pre>
+  </li>
+</ul>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
+<h2 id="interfaceの呼び出し">Interfaceの呼び出し</h2>
+<ul>
+  <li>インターフェースは以下の記述で実装と呼び出しを行う
+    <pre><code>struct Queue* queue = new Queue();
+queue = createSychronizedQueue(context);
+</code></pre>
+  </li>
+</ul>
+
+<pre><code>goto queue-&gt;put(task, next(...));
+</code></pre>
+
+
+
+</div>
+
+<div class='slide'>
+  <!-- _S9SLIDE_ -->
 <h2 id="メタレベルのgear13">メタレベルのGear(1/3)</h2>
 <ul>
   <li>CodeGearとDataGearにはユーザーが記述しない、メタレベルのものが存在する
@@ -580,12 +617,12 @@
   <!-- _S9SLIDE_ -->
 <h2 id="gearsfile-apiによるwordcount13">GearsFile APIによるWordCount(1/3)</h2>
 <ul>
-  <li>FileOpen側とWordCount側でノードが別れる</li>
-  <li>(手順1)FileOpen側はRDGMに文字列をputする</li>
+  <li>FileOpen側(NodeA)とWordCount側(NodeB)でノードが別れる</li>
+  <li>(手順1)FileOpen側はFilePloxyに文字列をputする</li>
   <li>(手順2)WordCount側は処理の後、ackを返信する</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -599,7 +636,7 @@
   <li>(手順3)1,2をループし、FileOpen側はEoFならフラグを送信する</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -613,7 +650,7 @@
   <li>(手順4)EoFを受信したWordCountは結果を返信し、双方の処理を終了させる</li>
 </ul>
 <div style="text-align: center;">
-   <img src="images/wordCountDGM.pdf" alt="ChristieAPIによるWordCount" width="800" />
+   <img src="images/slideGearsWC.pdf" alt="ChristieAPIによるWordCount" width="800" />
 </div>
 
 
@@ -665,7 +702,7 @@
       <li>他のInterfaceを継承したオブジェクトからのDataGear継承
         <ul>
           <li>例)Queueからのデータ取り出し</li>
-          <li>トランスコンパイラはどのInterfaceが持つDataGearを参照するべきか判断が難しい</li>
+          <li>トランスコンパイラはどのInterfaceに記述されたDataGearを参照するべきか判断が難しい</li>
         </ul>
       </li>
     </ul>