view user/Itsuki/2021/10-5.md @ 94:d55c9448d3a8

backup 2021-10-06
author autobackup
date Wed, 06 Oct 2021 00:10:04 +0900
parents
children
line wrap: on
line source

# 進捗報告 
## 研究目的
- 当研究室ではOSの信頼性の検証に重きを置いた、GearsOSを開発している。
    - GearsOSはノーマルレベルとメタレベルを分離して記述が行えるCの拡張言語CbC(Continuation based C)で構成されている。
- GearsOSは現在開発途上であり、OSとして実際に機能するために開発しなくてはならない機能が残っている。
- 未実装の機能の一つとしてファイルシステムが挙げられる。
    - 当研究室では、CbCとは異なるGearという概念を用いて分散処理を記述することができる分散フレームワークChristieを開発している。
    - GearsOSのファイルシステムをChristieと同様の仕組みを用いて実装したい。
    - そのためにjavaで構成されているChristieをCbCで構成し直していく。 
- GearsOSのファイルシステムは現在使われているOSの問題点を改良した形で構成したい
    - ファイルの変更をデータベース的にレコード単位で行いたい。



## 進捗内容
- Implement間の遷移をするとセグフォを起こしてしまう解決ができずに困っています。
    - お時間いただいて解決するか、間違えている部分を見つけたいです。

```
[WARN] Not found SingleLinkedStack.h at generate_stub.pl line 678.

```
- WordCountを新しく書き直しています。
    - ファイルのOpen&Put / ファイル内文字列を受け取って表示&Countの二つにプログラムを分割したい。
        
ファイルを開く&文字列を送信する側のコード(修正前)
    - なぜかこの時点ではimpl間の遷移ができていた。
```
__code openFile(struct WordPutImpl* wordPut, __code next(...)) {
    printf("%s\n", wordPut->filename);
    WordCount* wordCount = createWordCountImpl(context);
    goto wordCount->getWord(Put);
}

__code Put(struct WordPutImpl* wordPut, int lineNum, __code next(...)) {
    printf("goto WordPut & lineNum=%d\n", lineNum);
    goto next(...);
}
```

文字列を受け取る側のコード
```
__code getWord(struct WordCountImpl* wordCount, __code next(...)) {
    printf("getWord\n");
    goto next(1);
}
```

- Gearsのファイルシステムの思いつき
    - OS時代がバージョン管理ができるようにする
        - レコード単位でファイルの変更を行うならば、流用的に構築できるのでは?
        - 利点:hgやgitなどのアプリの導入が不要になる
        - Gearsファイルシステムと相性が良さそう(な気がする)
        - 欠点:おそらく大量にある
    - ファイルのメタデータについて
        - メタデータ部分は赤黒木に保持させる
            - メタデータは一部分しか利用しない場合が多そう
            - keyとデータをペアにして必要なデータだけ呼び出すイメージ
        - ファイル内文字列はQueueに保存。(文字列が行単位でそれぞれkeyを持たせるならばダメそう)

```
     - ファイル構造について
        - 文字列の保存でなく変更履歴を蓄積する。変更履歴を遡ることでファイルを形成する
        - かなり重い処理になりそう、バージョン管理はディレクトリ単位の方が楽
```

Gearsファイル構造体のinterfaceの構想
```
typedef struct GearsFileStructure <>{
struct Queue* inputStreamQueue; //inputのSynchronizedQueue
struct Queue* outputStreamQueue; //outputのSynchronizedQueue

struct Tree* dataGearPool; //ファイル内文字列のkeyとデータのペアを保持する赤黒木
or
struct Queue* dataGearPool; //ファイル内文字列を保持するキュー(Synchronizedでない)

struct Tree*orList metaDataList; //メタデータの保管所

}

```

- 研究題材の案
    - CbCのトランスコンパイラ自体のデバッガができると嬉しい
        - トランスコンパイル部分再編成するらしい?ので不要かも