Code Gear と Data Gear を持つ Gears OS の設計 |
Mitsuki Miyagi, Shinji Kono
琉球大学
|
さまざまなコンピュータの信頼性の基本はメモリなどの資源管理を行う OS である。 時代とともに進歩するハードウェア、サービスに対応して OS 自体が拡張される必要がある。 その信頼性を保証するには、従来の テストとデバッグでは不十分であり、テストしきれない部分が残ってしまう。 これに対処するため には、証明を用いる方法とプログラムの可能な実行をすべて数え上げるモデル検査を用いる方法がある。 検証は一度ですむものではなく、アプリケーションやサービス、デバイスが新しくなることに検証をやり直す必要がある。 このため信頼性と拡張性を両立させることが重要である。 <!–プログラムからデータを分離して扱うデータベースには、 プログラム中のデータ構造とRDBの表構造のずれにより、インピーダンスミスマッチという問題がある。
データベースのレコードをプログラム中のオブジェクトとして使えるOR Mapperや、 データベース自体も、表に特化したKey Value Storeや、Jsonなどの不定形のデータ構造を格納するように機能拡張されてきている。
しかし、プログラム中のデータは複雑な構造をメモリ上に構築しており、これらの方法でもまだギャップがある。–>
__code cs0(int a, int b){
goto cs1(a+b);
}
__code cs1(int c){
goto cs2(c);
}
# Gears OS - Gears OS は Code Gear、 Data Gear の単位を用いて開発されており、CbC で記述されている。 - 並列実行するための Task を、実行する Code Gear 、実行に必要な Input Data Gear 、Output Data Gear の組で表現する。 - またGears OS ではメタ計算を Meta Code Gear、Meta Data Gear で表現する。 - Meta Code Gear はノーマルの Code Gear の直後に遷移され、メタ計算を実行する。 - Meta Code Gear で OS の機能であるメモリ管理やスレッド管理を行う。
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->pop2 = C_pop2SingleLinkedStack;
stack->get = C_getSingleLinkedStack;
stack->get2 = C_get2SingleLinkedStack;
stack->isEmpty = C_isEmptySingleLinkedStack;
stack->clear = C_clearSingleLinkedStack;
return stack;
}
__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}