Mercurial > hg > Members > innparusu > slides
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; }) ```