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)
## 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はそれぞれの命令を自身のエディタバッファに施してから命令を送信するため、お互いバッファ状態が異なる状態で受け取った命令を実行してしまう。
```Code
digraph test {
node0 -> node1 [label="right"]
node1 -> node2 [label="right"]
node2 -> node0 [label="right"]
}
```