view 2016/2016_11_01/slide.md @ 21:585dd2901c9e

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Wed, 02 Nov 2016 13:43:58 +0900
parents
children
line wrap: on
line source

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; })
```