# HG changeset patch # User Tatsuki IHA # Date 1478061838 -32400 # Node ID 585dd2901c9e8e72d011e652077aa2f28c2efc76 # Parent 3d6b9e5ae73019af5ac5c962776a51853006fcbb Update diff -r 3d6b9e5ae730 -r 585dd2901c9e 2016/2016_11_01/slide.md --- /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; }) +```