view 2016/2016_12_20/slide.md @ 24:a05d9335563f

Update
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Sat, 13 May 2017 19:19:41 +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 Test
- meta でtestしたいよね,ということでとりあえずstubに assert を埋め込みました


``` c
__code stack_test1(struct Context* context, struct Task* task, struct Stack* stack) {
    task->code = C_stack_test1;
    stack->next = C_stack_test2;
    stack->data = (union Data*)task;
    goto meta(context, stack->push);
}

__code stack_test1_stub(struct Context* context) {
    Task* task = &ALLOCATE(context, Task)->Task;
    struct Stack* stack = &(createSingleLinkedStack(context)->Stack);
    assert(stack->stack->SingleLinkedStack.top == NULL);
    context->data[D_Stack]->Stack.stack = (union Data*)stack;
    goto stack_test1(context,
            task,
            &context->data[D_Stack]->Stack.stack->Stack);
}

__code stack_test2(struct Context* context, struct Task* task, struct Stack* stack) {
    task->code = C_stack_test2;
    stack->next = C_stack_test3;
    stack->data = (union Data*)task;
    goto meta(context, stack->push);
}

__code stack_test2_stub(struct Context* context) {
    assert(context->data[D_Stack]->Stack.stack->Stack.stack->SingleLinkedStack.top->data->Task.code == C_stack_test1);
    Task* task = &ALLOCATE(context, Task)->Task;
    goto stack_test2(context,
            task,
            &context->data[D_Stack]->Stack.stack->Stack);
}
```