title: Monadに基づくMeta計算を基本とするGears OSの設計 author: Tatsuki IHA profile: lang: Japanese # 研究目的 - 当研究室では, プログラムをコードセグメント, データセグメントを用いた並列フレームワークの開発を行っている. - Gears OSでは, 並列実行に必要なMetaな機能を関数型言語におけるMonadの原理に基づいて実現する. - また, Code Segment, Data SegmentそれぞれにMeta Code Segment, Meta Data Segmentを付属させる. - この研究ではGears OSの機能をCbC(Continuation based C)で実装、評価することを目的とする. # Gear Box - 基本はState Diagramで記述 - State DiagramのStateをCode Gear(Code Segment) - Code Gear間にData Gear(Data Segment)を記述 # Gear Box ![GearBoxExample](./pictures/GearBoxExample.svg) # Gear Box ![MetaGearBoxExample](./pictures/MetaGearBoxExample.svg) # Synchronized Queue ![GearBoxExample](./pictures/synchronizedQueueSender.svg) # Synchronized Queue ![GearBoxExample](./pictures/synchronizedQueueReceiver.svg) # Synchronized Queue - 各Threadに共通のData Gearをもたせる - Meta Code Segmentでsynchronizedを表現する - つまり, Meta Code Segmentを書き換えることで実装を変更できる # Synchronized Queue - CASでの実装 - Meta Put, Meta GetでCasを行い, Data Gearを更新 - pthread_mutex_lockでの実装 - Meta Sender, Meta ReciverでData Gearをlock - Meta Put, Meta Getでunlock - Semphoreでの実装 - 読み込み用, 書き込み用のSemphoreを用意 - Meta Put, Meta Getでsem_p, sem_vを行う