# HG changeset patch
# User mir3636
# Date 1516315521 -32400
# Node ID bb495c751e408ebcba1ea25905e1db0b9dbad9bc
# Parent f83f575b61941b3f5df901105c8cc185c8a9010b
fix
diff -r f83f575b6194 -r bb495c751e40 Slide/prosym.html
--- a/Slide/prosym.html Thu Jan 18 15:51:04 2018 +0900
+++ b/Slide/prosym.html Fri Jan 19 07:45:21 2018 +0900
@@ -86,7 +86,7 @@
@@ -106,21 +106,28 @@
-
# メタ計算の重要性
-- プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。これらの計算をメタ計算と呼ぶ。
-- メタ計算はノーマルレベルの計算から切り離して記述したい。
-- そのためには処理を細かく分割する必要があるが、関数やクラスなどの単位は容易に分割できない。
-- そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。
+
+
+
+
+
+
メタ計算の重要性
+
+ - プログラムを記述する際、ノーマルレベルの処理の他に、メモリ管理やスレッド管理、CPU や GPU の資源管理等、記述しなければならない処理が存在する。これらの計算をメタ計算と呼ぶ。
+ - メタ計算はノーマルレベルの計算から切り離して記述したい。
+ - そのためには処理を細かく分割する必要があるが、関数やクラスなどの単位は容易に分割できない。
+ - そこで当研究室ではメタ計算を柔軟に記述するためのプログラミング言語の単位として Code Gear、Data Gear という単位を提案している。
+
@@ -188,7 +195,7 @@
-
+
@@ -196,17 +203,33 @@
Gears OS の構成
+
+ - Gears OS は以下の要素で構成される。
+
+ - Context
+ - TaskQueue
+ - TaskManager
+ - Worker
+
+
+
-
CbC による Gears OS 記述の問題点
-
- - Gears OS を CbC で実装する上でメタ計算の記述が煩雑であることがわかった。
- - 本研究ではこれらのメタ計算を自動生成することにより Gears OS を記述する上においてより良い構文をユーザーに提供することにした。
- - そのためのプロトタイプとして perl スクリプトを作成した。
-
+
Gears OS の構成図
+
+
+
+
+
+
@@ -214,7 +237,7 @@
Context
- - Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。
+ - Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。
- Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。
@@ -226,10 +249,33 @@
Interface
- - interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。
- - create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
+ - Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。
+ - Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である。
+ - Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。
+typedef struct Stack<Type, Impl>{
+ union Data* stack;
+ union Data* data;
+ union Data* data1;
+ __code whenEmpty(...);
+ __code clear(Impl* stack,__code next(...));
+ __code push(Impl* stack,Type* data, __code next(...));
+ __code pop(Impl* stack, __code next(Type* data, ...));
+ __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...));
+ __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+ __code get(Impl* stack, __code next(Type* data, ...));
+ __code get2(Impl* stack, __code next(Type* data, Type* data1, ...));
+ __code next(...);
+} Stack;
+
+
+
+
+
+
+
Interface
+
Stack* createSingleLinkedStack(struct Context* context) {
struct Stack* stack = new Stack();
struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack();
@@ -334,13 +380,13 @@
-
比較
+比較
-
今後の課題
+
今後の課題
- 本研究では interface の記述、CbC ファイルから Gears OS の記述に必要な Context と stub の生成を行う perl スクリプトの生成を行なった。
- これにより Gears OS のコードの煩雑さは改善され、ユーザーは Context への接続を意識する必要がなくなった。
diff -r f83f575b6194 -r bb495c751e40 Slide/prosym.md
--- a/Slide/prosym.md Thu Jan 18 15:51:04 2018 +0900
+++ b/Slide/prosym.md Fri Jan 19 07:45:21 2018 +0900
@@ -71,10 +71,21 @@
- Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。
-
+
# Gears OS の構成
+- Gears OS は以下の要素で構成される。
+ - Context
+ - TaskQueue
+ - TaskManager
+ - Worker
+
+# Gears OS の構成図
+
+
+
+
# Context
-- Gears OS には Context と呼ばれる接続可能な Code Gear、Data Gear のリスト、Temporal Data Gear のためのメモリ空間等を持っている Meta Data Gear がある。
+- Context とは使用される Code Gear と Data Gear を全て格納した Meta Data Gear である。
- Gears OSは必要なCode Gear、Data Gearに参照したい場合、このContext を通す必要がある。
# Interface
-- interface を記述することでデータ構造のapiと Data Gear を結びつけることが出来、呼び出しが容易になった。
-- create は関数呼び出しで呼び出され、interface と impliment の初期化と Code Gear のポインタの設定を行う。
+- Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される。
+- Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である。
+- Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる。
+
+```interface
+typedef struct Stack{
+ union Data* stack;
+ union Data* data;
+ union Data* data1;
+ __code whenEmpty(...);
+ __code clear(Impl* stack,__code next(...));
+ __code push(Impl* stack,Type* data, __code next(...));
+ __code pop(Impl* stack, __code next(Type* data, ...));
+ __code pop2(Impl* stack, __code next(Type* data, Type* data1, ...));
+ __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...));
+ __code get(Impl* stack, __code next(Type* data, ...));
+ __code get2(Impl* stack, __code next(Type* data, Type* data1, ...));
+ __code next(...);
+} Stack;
+```
+
+# Interface
```impl
Stack* createSingleLinkedStack(struct Context* context) {