Mercurial > hg > Papers > 2020 > menikon-thesis
view slide/thesis_slide.md @ 16:b67e4c9f0374
tweak
author | menikon |
---|---|
date | Wed, 12 Feb 2020 19:54:53 +0900 |
parents | c8adccdd011a |
children | d4c7ffd507a3 |
line wrap: on
line source
title: CbC による xv6 の FileSystem の書き換え author: Takahiro Sakamoto, Shinji Kono profile: 琉球大学工学部情報工学科並列信頼研 ## 研究目的 ## Continuation based C ## CbC のコード例 * CbC では Code Gear は \_\_code Code Gear 名 (引数) の形で記述される * Code Gear は戻り値を持たないので、関数とは異なり return 文は存在しない * goto の後に Code Gear 名と引数を並べて、次の Code Gear の遷移を記述する ## CbC のコード例 * この goto の行き先を継続と呼び、このときの a+b が次の Code Gear への出力となる ``` __code cg0(int a, int b){ goto cg1(a+b); } __code cg1(int c){ goto cg2(c); } ``` ## Interface * Code Gear と Data Gear は Interface と呼ばれるまとまりとして記述される * Interface は GearsOS でのモジュール化の仕組み * Interface は使用される Data Gear の定義と、それに対する Code Gear の集合である * Interface の操作に対応する Code Gear の引数は Interface に定義されている Data Gear を通して行われる ## Interface の定義 * Stack の Interface の例である * typedef struct Interface 名で記述する * Impl は実際に実装した際のデータ構造の型になる ``` typedef struct Stack<Impl> { union Data* stack; union Data* data; __code next(...); __code whenEmpty(...); __code clear(Impl* stack, __code next(...)); __code push(Impl* stack, union Data* data, __code next(...)); __code pop(Impl* stack, __code next(union Data* ...)); __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); } ``` ## Interface の定義 * Data Gear は 操作する Data Gear と 操作に必要な全ての Data Gear Gear が記述されている * \_\_code で記述されているものが操作の Code Gear である ``` typedef struct Stack<Impl> { union Data* stack; union Data* data; __code next(...); __code whenEmpty(...); __code clear(Impl* stack, __code next(...)); __code push(Impl* stack, union Data* data, __code next(...)); __code pop(Impl* stack, __code next(union Data* ...)); __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); } ``` ## Interface の実装の記述 * ソースコードは Interface の実装の初期化のコードである * 操作の Code Gear には実装した Code Gear の番号が代入されるが、ここを入れ替えることで、複数の実装を持つことができる ``` Stack* createSingleLinkedStack(struct Context* context) { struct Stack* stack = new Stack(); struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); stack->stack = (union Data*)singleLinkedStack; singleLinkedStack->top = NULL; stack->push = C_pushSingleLinkedStack; stack->pop = C_popSingleLinkedStack; stack->isEmpty = C_isEmptySingleLinkedStack; stack->clear = C_clearSingleLinkedStack; return stack; } ``` ## xv6 の書き換えの方針 * xv6 を CbC で書き換え、Gears OS の機能と置き換えることで Gears OS に OS の基本構造を持たせたい * このためには xv6 をモジュール化することで、xv6 の機能を明らかにする必要がある * xv6 の Interface を定義し、Gears OS の機能をこれに合わせることによって実現したい ## CbC による FileSystem の書き換え ## まとめと今後の方針