changeset 9:5790bdc1d515

add gears_structure
author tobaru
date Mon, 21 May 2018 17:18:19 +0900
parents f275411f458d
children d4e58a38aae7
files Slide/image/gears_structure.png Slide/prosym.html Slide/prosym.md Slide/prosym.pdf.html
diffstat 4 files changed, 177 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
Binary file Slide/image/gears_structure.png has changed
--- a/Slide/prosym.html	Sun May 20 21:28:30 2018 +0900
+++ b/Slide/prosym.html	Mon May 21 17:18:19 2018 +0900
@@ -86,7 +86,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
-                on 2018-05-20 21:27:27 +0900 with Markdown engine kramdown (1.13.2)
+                on 2018-05-21 16:36:00 +0900 with Markdown engine kramdown (1.13.2)
                   using options {}
   -->
 
@@ -96,10 +96,10 @@
   <li>現代のOS では拡張性と信頼性を両立させることが要求されている。
     <ul>
       <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li>
-      <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li>
+      <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまうので信頼性のある OS が必要。</li>
     </ul>
   </li>
-  <li>本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。</li>
+  <li>本研究室では、拡張性と信頼性を実現することを目標に Gears OS の開発を行なっている。</li>
 </ul>
 
 
@@ -121,7 +121,7 @@
 <ul>
   <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li>
   <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li>
-  <li>Logic としては、依存型関数言語である Agda を使う(前の発表)</li>
+  <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li>
   <li>証明とモデル検査を使って、信頼性を確保する</li>
 </ul>
 
@@ -147,7 +147,7 @@
 <!-- _S9SLIDE_ -->
 <h2 id="api">並列API</h2>
 <ul>
-  <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li>
+  <li>Geas OS 信頼性を保証するために、モジュールシステムが必要である。</li>
   <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li>
   <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li>
 </ul>
@@ -256,8 +256,19 @@
 <div class='slide '>
 <!-- _S9SLIDE_ -->
 <h2 id="gears-os-">Gears OS の構造</h2>
+<ul>
+  <li>Gears OS は以下の要素で構成されている
+    <ul>
+      <li>Context</li>
+      <li>TaskQueue</li>
+      <li>TaskManager</li>
+      <li>Worker</li>
+    </ul>
+  </li>
+</ul>
+
 <div style="text-align: center;">
-    <img src="./image/gearsos.svg" alt="Gears OS の構造" width="600" />
+    <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
 </div>
 
 
@@ -317,6 +328,45 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
+<h2 id="perl--meta-data-gear-">Perl スクリプトによる Meta Data Gear の生成</h2>
+
+<pre lang="c"><code>__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) {
+    // create context
+    context-&gt;task = NEW(struct Context);
+    initContext(context-&gt;task);
+
+    // set task parameter
+    context-&gt;task-&gt;next = C_add;
+    context-&gt;task-&gt;idgCount = 2;
+    context-&gt;task-&gt;idg = context-&gt;task-&gt;dataNum;
+    context-&gt;task-&gt;maxIdg = context-&gt;task-&gt;idg + 2;
+    context-&gt;task-&gt;odg = context-&gt;task-&gt;maxIdg;
+    context-&gt;task-&gt;maxOdg = context-&gt;task-&gt;odg + 1;
+
+    // create Data Gear Queue
+    GET_META(integer1)-&gt;wait = createSynchronizedQueue(context);
+    GET_META(integer2)-&gt;wait = createSynchronizedQueue(context);
+    GET_META(integer3)-&gt;wait = createSynchronizedQueue(context);
+
+    // set Input Data Gear
+    context-&gt;task-&gt;data[context-&gt;task-&gt;idg+0] = (union Data*)integer1;
+    context-&gt;task-&gt;data[context-&gt;task-&gt;idg+1] = (union Data*)integer2;
+
+    // set Output Data Gear
+    context-&gt;task-&gt;data[context-&gt;task-&gt;odg+0] = (union Data*)integer3;
+
+   
+    // set TaskManager-&gt;spawns parameter
+    Gearef(context, TaskManager)-&gt;taskList = context-&gt;taskList;
+    Gearef(context, TaskManager)-&gt;next1 = C_code2;
+    goto parGotoMeta(context, C_code2);
+}
+</code></pre>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
 <h2 id="section-2">スライドの流れ</h2>
 <ul>
   <li>CbC</li>
--- a/Slide/prosym.md	Sun May 20 21:28:30 2018 +0900
+++ b/Slide/prosym.md	Mon May 21 17:18:19 2018 +0900
@@ -21,8 +21,8 @@
 ## Gears OS
 - 現代のOS では拡張性と信頼性を両立させることが要求されている。
 	- 時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。
-	- OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。
-- 本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。
+	- OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまうので信頼性のある OS が必要。
+- 本研究室では、拡張性と信頼性を実現することを目標に Gears OS の開発を行なっている。
 
 % 欠けてしまうで終わってるので "それら"は 分かりづらい
 % 並列API 研究目的とAPIとの繋がりがない
@@ -51,26 +51,25 @@
 ## Gears OS での形式化とInterfaceの導入
 - 形式化とは仕様、実装、実行を Logic で記述する事である。
 - Gears OS では、継続を使った関数型プログラムとして実装を記述する
-- Logic としては、依存型関数言語である Agda を使う(前の発表)
+- Logic としては、依存型関数言語である Agda を使う(外間の発表)
 - 証明とモデル検査を使って、信頼性を確保する
 
 ## Gears OS の Interface 
-- この時、Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。
+- Code Gear と Deta Gear は Interface と呼ばれるまとまり(モジュール)で記述される。
 - Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。
 - Interface は Data Gear で記述されて、Meta Deta Gear と呼ばれる。
 - Java などの Class に相当する。
-- Interface を外から呼び出すための Code Gear 群の型
+% - Interface を外から呼び出すための Code Gear 群の型
 - Interface を呼び出す時に必要となる引数を全て格納する Data Gear
-- 実装に使う Code Gear の番号が含まれている。
-- Code Gear の番号を変更することによって異なる実装を実現できる
+% - 実装に使う Code Gear の番号が含まれている。
+% - Code Gear の番号を変更することによって異なる実装を実現できる
 
 % Interface は実行時に実装を入れ替える事ができる
 % 呼び出すものはStack 上に積めない
 % Contextも集合
-% Inter 
 
 ## 並列API
-- Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。
+- Geas OS 信頼性を保証するために、モジュールシステムが必要である。
 - 本研究では、モジュールシステムとその応用である並列APIについて考察する。
 - 並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。
 
@@ -169,8 +168,14 @@
 % - Interface 作成時に Code Gear の集合を指定することにより複数の実装を持つことができる。
 
 ## Gears OS の構造 
+- Gears OS は以下の要素で構成されている
+	- Context
+	- TaskQueue
+	- TaskManager
+	- Worker
+
 <div style="text-align: center;">
-    <img src="./image/gearsos.svg" alt="Gears OS の構造" width="600">
+    <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400">
 </div>
 
 
@@ -197,6 +202,10 @@
 
 % 複数走ったなかの成功したものをコミットするのがexit 
 
+<div style="text-align: center;">
+    <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400">
+</div>
+
 
 
 
@@ -213,6 +222,52 @@
 }
 ```
 
+## Perl スクリプトによる Meta Data Gear の生成
+
+
+% Task Manager
+%  
+
+```c
+__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) {
+    // create context
+    context->task = NEW(struct Context);
+    initContext(context->task);
+
+    // set task parameter
+    context->task->next = C_add;
+    context->task->idgCount = 2;
+    context->task->idg = context->task->dataNum;
+    context->task->maxIdg = context->task->idg + 2;
+    context->task->odg = context->task->maxIdg;
+    context->task->maxOdg = context->task->odg + 1;
+
+    // create Data Gear Queue
+    GET_META(integer1)->wait = createSynchronizedQueue(context);
+    GET_META(integer2)->wait = createSynchronizedQueue(context);
+    GET_META(integer3)->wait = createSynchronizedQueue(context);
+
+    // set Input Data Gear
+    context->task->data[context->task->idg+0] = (union Data*)integer1;
+    context->task->data[context->task->idg+1] = (union Data*)integer2;
+
+    // set Output Data Gear
+    context->task->data[context->task->odg+0] = (union Data*)integer3;
+
+   
+    // set TaskManager->spawns parameter
+    Gearef(context, TaskManager)->taskList = context->taskList;
+    Gearef(context, TaskManager)->next1 = C_code2;
+    goto parGotoMeta(context, C_code2);
+}
+``` 
+%    // add taskList Element
+%    struct Element* element;
+%    element = &ALLOCATE(context, Element)->Element;
+%    element->data = (union Data*)context->task;
+%    element->next = context->taskList;
+%    context->taskList = element;
+ 
 % 失敗した時はmeta compitation で処理する
 
 
--- a/Slide/prosym.pdf.html	Sun May 20 21:28:30 2018 +0900
+++ b/Slide/prosym.pdf.html	Mon May 21 17:18:19 2018 +0900
@@ -70,7 +70,7 @@
 <!-- === begin markdown block ===
 
       generated by markdown/1.2.0 on Ruby 2.4.1 (2017-03-22) [x86_64-darwin15]
-                on 2018-05-20 21:27:27 +0900 with Markdown engine kramdown (1.13.2)
+                on 2018-05-21 16:36:00 +0900 with Markdown engine kramdown (1.13.2)
                   using options {}
   -->
 
@@ -80,10 +80,10 @@
   <li>現代のOS では拡張性と信頼性を両立させることが要求されている。
     <ul>
       <li>時代と共にハードウェア、サービスが進歩していき、その度に OS を検証できる必要があるため、拡張性が必要。</li>
-      <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまう。</li>
+      <li>OS は非決定的な実行を持ち、従来の OS ではテストしきれない部分が残ってしまうため、信頼性が欠けてしまうので信頼性のある OS が必要。</li>
     </ul>
   </li>
-  <li>本研究室では、それらを実現することを目標に Gears OS の開発を行なっている。</li>
+  <li>本研究室では、拡張性と信頼性を実現することを目標に Gears OS の開発を行なっている。</li>
 </ul>
 
 
@@ -105,7 +105,7 @@
 <ul>
   <li>形式化とは仕様、実装、実行を Logic で記述する事である。</li>
   <li>Gears OS では、継続を使った関数型プログラムとして実装を記述する</li>
-  <li>Logic としては、依存型関数言語である Agda を使う(前の発表)</li>
+  <li>Logic としては、依存型関数言語である Agda を使う(外間の発表)</li>
   <li>証明とモデル検査を使って、信頼性を確保する</li>
 </ul>
 
@@ -131,7 +131,7 @@
 <!-- _S9SLIDE_ -->
 <h2 id="api">並列API</h2>
 <ul>
-  <li>Geas OS 信頼性を保証するために、形式化されたモジュールシステムが必要である。</li>
+  <li>Geas OS 信頼性を保証するために、モジュールシステムが必要である。</li>
   <li>本研究では、モジュールシステムとその応用である並列APIについて考察する。</li>
   <li>並列APIは継続を基本とした関数型プログラミングと両立する必要があり、ここでは CbC の goto 文を拡張した par goto を導入する。</li>
 </ul>
@@ -240,8 +240,19 @@
 <div class='slide '>
 <!-- _S9SLIDE_ -->
 <h2 id="gears-os-">Gears OS の構造</h2>
+<ul>
+  <li>Gears OS は以下の要素で構成されている
+    <ul>
+      <li>Context</li>
+      <li>TaskQueue</li>
+      <li>TaskManager</li>
+      <li>Worker</li>
+    </ul>
+  </li>
+</ul>
+
 <div style="text-align: center;">
-    <img src="./image/gearsos.svg" alt="Gears OS の構造" width="600" />
+    <img src="./image/gears_structure.png" alt="Gears OS の構造" width="400" />
 </div>
 
 
@@ -301,6 +312,45 @@
 </div>
 <div class='slide '>
 <!-- _S9SLIDE_ -->
+<h2 id="perl--meta-data-gear-">Perl スクリプトによる Meta Data Gear の生成</h2>
+
+<pre lang="c"><code>__code code1(struct Context *context, Integer *integer1, Integer *integer2, Integer *output) {
+    // create context
+    context-&gt;task = NEW(struct Context);
+    initContext(context-&gt;task);
+
+    // set task parameter
+    context-&gt;task-&gt;next = C_add;
+    context-&gt;task-&gt;idgCount = 2;
+    context-&gt;task-&gt;idg = context-&gt;task-&gt;dataNum;
+    context-&gt;task-&gt;maxIdg = context-&gt;task-&gt;idg + 2;
+    context-&gt;task-&gt;odg = context-&gt;task-&gt;maxIdg;
+    context-&gt;task-&gt;maxOdg = context-&gt;task-&gt;odg + 1;
+
+    // create Data Gear Queue
+    GET_META(integer1)-&gt;wait = createSynchronizedQueue(context);
+    GET_META(integer2)-&gt;wait = createSynchronizedQueue(context);
+    GET_META(integer3)-&gt;wait = createSynchronizedQueue(context);
+
+    // set Input Data Gear
+    context-&gt;task-&gt;data[context-&gt;task-&gt;idg+0] = (union Data*)integer1;
+    context-&gt;task-&gt;data[context-&gt;task-&gt;idg+1] = (union Data*)integer2;
+
+    // set Output Data Gear
+    context-&gt;task-&gt;data[context-&gt;task-&gt;odg+0] = (union Data*)integer3;
+
+   
+    // set TaskManager-&gt;spawns parameter
+    Gearef(context, TaskManager)-&gt;taskList = context-&gt;taskList;
+    Gearef(context, TaskManager)-&gt;next1 = C_code2;
+    goto parGotoMeta(context, C_code2);
+}
+</code></pre>
+
+
+</div>
+<div class='slide '>
+<!-- _S9SLIDE_ -->
 <h2 id="section-2">スライドの流れ</h2>
 <ul>
   <li>CbC</li>