1
|
1 title: Monadに基づくMeta計算を基本とするGears OSの設計
|
|
2 author: Tatsuki IHA
|
|
3 profile:
|
|
4 lang: Japanese
|
|
5
|
|
6 # 研究目的
|
|
7 - 当研究室では, プログラムをコードセグメント, データセグメントを用いた並列フレームワークの開発を行っている.
|
|
8 - Gears OSでは, 並列実行に必要なMetaな機能を関数型言語におけるMonadの原理に基づいて実現する.
|
|
9 - また, Code Segment, Data SegmentそれぞれにMeta Code Segment, Meta Data Segmentを付属させる.
|
|
10 - この研究ではGears OSの機能をCbC(Continuation based C)で実装、評価することを目的とする.
|
|
11
|
|
12 # Gear Box
|
|
13 - 基本はState Diagramで記述
|
|
14 - State DiagramのStateをCode Gear(Code Segment)
|
|
15 - Code Gear間にData Gear(Data Segment)を記述
|
|
16
|
|
17 # Gear Box
|
|
18 ![GearBoxExample](./pictures/GearBoxExample.svg)
|
|
19
|
|
20 # Gear Box
|
|
21 ![MetaGearBoxExample](./pictures/MetaGearBoxExample.svg)
|
|
22
|
|
23 # Synchronized Queue
|
|
24 ![GearBoxExample](./pictures/synchronizedQueueSender.svg)
|
|
25
|
|
26 # Synchronized Queue
|
|
27 ![GearBoxExample](./pictures/synchronizedQueueReceiver.svg)
|
|
28
|
|
29 # Synchronized Queue
|
|
30 - 各Threadに共通のData Gearをもたせる
|
|
31 - Meta Code Segmentでsynchronizedを表現する
|
|
32 - つまり, Meta Code Segmentを書き換えることで実装を変更できる
|
|
33
|
|
34 # Synchronized Queue
|
|
35 - CASでの実装
|
|
36 - Meta Put, Meta GetでCasを行い, Data Gearを更新
|
|
37 - pthread_mutex_lockでの実装
|
|
38 - Meta Sender, Meta ReciverでData Gearをlock
|
|
39 - Meta Put, Meta Getでunlock
|
|
40 - Semphoreでの実装
|
|
41 - 読み込み用, 書き込み用のSemphoreを用意
|
|
42 - Meta Put, Meta Getでsem_p, sem_vを行う
|