view slide/thesis.md @ 14:0a4cafd954b9

add slide
author ichikitakahiro <e165713@ie.u-ryukyu.ac.jp>
date Sat, 05 Feb 2022 04:49:27 +0900
parents
children 689b16feab3f
line wrap: on
line source

title: GearsOSの分散ファイルシステムの設計
author: Takahiro Ikki, Shinji Kono
profile: 琉球大学
lang: Japanese
code-engine: coderay

## GearsOSとその現状
- 信頼性の保証と拡張性の高さを目指したOSプロジェクト
- 軽量継続を用いた言語、CbC(Continuation based C)により記述される。
- ノーマルレベルとメタレベルを分離して記述する
- 現状では言語フレームワークとしてのみ機能する
- OSとして動作するには多くの機能の開発が必要
  - その中の一つにファイルシステムが挙げられる

## 従来の物より発展した分散ファイルシステムの設計
- データベース的なレコード操作によるアクセス
  - ファイルに対する全ての操作がTransactionとなる
- 既存ではアプリケーションが担当する機能を取り込む
  - バックアップの管理
  - ファイルの型の認識
- 自律分散を目指した分散ファイルシステム
  - 特定のサーバーを中枢にしなくても良い
  - 分散フレームワークChristieの仕組みにより実現する


## CbC (Continuation based C)
- C言語の拡張言語である
- 関数に代わる軽量継続をメインに記述する
- Gearというプログラム概念
  - CodeGear
    - 従来のThreadにあたる
  - DataGear
    - 従来の変数データにあたる
- DataGearを受け取り処理を行う(InputDataGear)
- 処理の結果をDataGearに書き出す(OutputDataGear)


<div style="text-align: center;">
 <img src="images/cgdg.pdf" alt="CodeGearとDataGearの関係" width="800">
</div>

## CbCのサンプルプログラム
```
__code CG2(int num3){
  printf("num = %d\n", num3);
  exit(0);
}

__code CG1(int num, int num1){
  int num2 = num + num1;
  goto CG2(num2);
}

int main(){
  int a = 2;
  int b = 3;
  goto CG1(a, b);
}
```

## メタレベルのGear
- CodeGearとDataGearにはメタレベルのものが存在する
  - それぞれstubCodeGearとstubDataGearと呼ぶ
- ユーザーが記述する上では普段は意識しない



## テスト用テキストエディタ

```
public class MyDocumentListener implements DocumentListener {
    @Override
    public void insertUpdate(DocumentEvent e) {
        Document doc = e.getDocument();
        loc = e.getOffset();
        System.out.println(loc);

    }

    @Override
    public void removeUpdate(DocumentEvent e) {
        Document doc = e.getDocument();
        sendLoc = e.getOffset();
        System.out.println("delete " + sendLoc);
    }
    @Override
    public void changedUpdate(DocumentEvent e) {
    }
}
```


## 編集位置の相違
- 同期編集のセッションでは命令コマンドの送信のすれ違いにより、ノードごとのファイル状態が異なってしまうことがある。
- EditorAとEditorBはそれぞれの命令を自身のエディタバッファに施してから命令を送信するため、お互いバッファ状態が異なる状態で受け取った命令を実行してしまう。

<div style="text-align: center;">
 <img src="images/difference_offset.pdf" alt="MetaGear" width="800">
</div>


<!--
- RocalDGMを立ち上げるにはDataSegmentクラスが提供する、connectメソッドを用い、接続したいポートのipアドレスとport番号、そして任意のManager名を指定することで立ち上げる。
-->



```Code
digraph test {
	node0 -> node1 [label="right"]
	node1 -> node2 [label="right"]
	node2 -> node0 [label="right"]
}
```