changeset 21:585dd2901c9e

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 02 Nov 2016 13:43:58 +0900
parents 3d6b9e5ae730
children bf593e6958b1
files 2016/2016_11_01/slide.md
diffstat 1 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/2016/2016_11_01/slide.md	Wed Nov 02 13:43:58 2016 +0900
@@ -0,0 +1,60 @@
+title: Gears OS
+author: Tatsuki IHA
+profile:
+lang: Japanese
+code-engine: coderay
+
+## 研究目的
+- 当研究室では  処理の単位を Code Gear、 データの単位を Data Gear を用いて 信頼性が高い並列処理を行う Gears OS を開発している
+- Gears OS では Task を Code Gear と実行するときに必要な Input Data Gear と出力するための Output Data Gear の組で表現される。 Input Data Gear/Output Data Gear によって依存関係が決定し、それにそって並列実行を行う
+- 現在の Gears では Stack や Queue の operatation の API が存在しなため, 記述が困難になっている. そのため, この研究では Gears OS における API の記述方法を設計し, 実装する
+
+## 今週
+- union Data に型情報を入れる
+- しゅうかつ!
+
+## union Data に型情報を入れる
+- union Data の定義に enum DataType を入れる
+
+``` c
+union Data {
+enum DataType type;
+
+    struct Time {
+        enum Code next;
+        double time;
+    } time;
+    
+    struct LoopCounter {
+        int i;
+    } loopCounter;
+    
+    struct Worker {
+        int num; 
+        struct Context* contexts;
+    } worker;
+    ......
+}
+```
+
+## union Data に型情報を入れる
+- allocate の際は struct size + DataType size で取る(macro)
+
+```
+#define ALLOCATE(context, t) ({ \
+  union Data* data = context->heap; \
+  context->heap += sizeof(struct t) + ((void *)(&data->element) - (void *)data) ; \
+  data->type = t; \
+  data; })
+```
+
+## union Data に型情報を入れる
+- Data だけを取り出したい場合は DataType 分引く
+
+```
+#define GET_DATA(spesificData) ({ \
+  union Data dummy; \
+  void* ptr = (void *)spesificData; \
+  ptr -= (void *)(&dummy.element) - (void *)(&dummy); \
+  (union Data*)ptr; })
+```