view 2017/2017_01_10/slide.md @ 22:bf593e6958b1

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 21 Mar 2017 23:58:48 +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 によって依存関係が決定し、それにそって並列実行を行う.
- 依存関係の解決やモデル検査等の本論の計算を行うためのメタな計算を Meta Code Gear で行う.
- 現在の Gears では Stack や Queue の operatation の API が存在しなため, 記述が困難になっている. そのため, この研究では Gears OS における API の記述方法を設計し, 実装する


## 冬休み
- 寝正月
- Gears の Queue と Stack のテストコードを動かす
    - module 別のcontext の生成はうまく動いてます
    - 動いた
- Gears Task 生成 & inqueue までは動いた
- next Worker 実装

## Worker実装
- Worker 毎に Synchronized Queueをもたせる
- TaskManager から Worker の Queue にTask を入れる

``` 
__code taskSend(struct Context* context, TaskManager* taskManger, LoopCounter* loopCounter) {
    if(loopCounter->i < taskManager->numWorker) {
        taskManager->workers[i]->taskSend;
        loopCounter->i++;
        goto meta(context, taskManager->taskSend);
    }
    goto meta(context, TaskManager->next);
}
```

## Worker 実装
- Worker側のtaskReceive
- task を receive するとQueue に task が入っているので, とりだして task を execute する

```
__code taskReceive(struct Context* context) {
    queue->queue = (union Data*)worker->worker->Worker.tasks;
    queue->next = worker->execute;
    goto meta(context, queue->queue->Queue.take);
}
```

##