title: GearsOSにおける
inodeを用いたファイルシステムの構築
author: Matayoshi Yuto, Shinji Kono
profile: 琉球大学
## 研究目的
- アプリケーションの信頼性を保証するために,アプリケーションが動作するOSの信頼性を高める必要がある
- 信頼性確保の方法として定理証明やモデル検査がある
- 当研究室では,信頼性の保証を目的としたGearsOSを開発している
- GearsOSで未実装の機能であるファイルシステムの実装を目指す
## inodeを用いたgearsDirectoryの実装
- 今回はUnixのinode仕組みを参考にディレクトリシステムを実装した
- GearsOSのディレクトリシステムであるgearsDirectoryについて
- 基礎概念
- CbC
- GearsOS
- 実装
## 信頼性の保証を目的としたOS
- GearsAgda(Agda)
- 形式手法による信頼性の向上
- GearsOS(CbC) <- 今回ディレクトリシステムの実装を行なった
- ユーザーレベルタスクマネージメント
- x.v6(CbC)
- スタンドアロンOS
## Continuation based C
- Cの下位言語である
- プログラムはCodeGearと呼ばれる処理の単位で記述する
- データはDataGearと呼ばれる単位を用いる
- ノーマルレベルとメタレベルの処理を切り分けることが容易に可能である
- function callの継続の代わりにgotoによる継続を用いる
- 呼び出し履歴を持たないことから軽量継続と呼ぶ
## GearsOS(CbC)
- 当研究室にて,信頼性と拡張性の両立を目的として開発している
- CbCで記述されている
- Gearという概念があり,実行の単位をCodeGear,データの単位をDataGearと呼ぶ
- ノーマルレベルとメタレベルの処理を切り分けることが容易にできる
## GearsOS(CbC)
### CodeGearとmetaCodeGearの関係
- ノーマルレベルとメタレベルの存在
- CodeGearがDataGearを受け取り,処理後にDataGearを次のCodeGearに渡すという動作をしているように見える
- 実際にはデータの整合性の確認や資源管理などのメタレベルの処理が存在し,それらの計算はMetaCodeGearで行われる
## GearsOS(CbC)
### Context
- GearsOS上全てのCodeGear,DataGearの参照を持つ
- OS上の処理の実行単位
- Gearの概念ではMetaDataGearに当たる
- ノーマルレベルから直接参照されず,必ずMetaDataGearとしてMetaCodeGearから参照される
## GearsOS(CbC)
### CodeGear遷移の流れ
## Unixのinode
- UnixのファイルシステムはメタデータにBTreeで構成されたinodeを用いる
### inode
- ファイルの属性情報が書かれたデータである
- 識別番号としてinode numberを持つ
- inodeはファイルシステム始動時にinode領域をディスク上に確保する
## GearsFileSystemにおけるdirectoryの構成
- 2つのRedBlackTreeを用いる
1. filenameとinode numberのペアを持つindex tree
1. inode numberとinodeのポインタのペアを持つinode tree
- カレントディレクトリはgearsDirectory-\>currentDirectoryに保存される
## Unix Like な interface
### mkdir
```c
__code mkdir(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
struct FTree* newDirectory = createFileSystemTree(context, gearsDirectory->currentDirectory);
Node* inode = new Node();
inode->key = gearsDirectory->INodeNumber;
inode->value = newDirectory;
struct FTree* cDirectory = new FTree();
cDirectory = gearsDirectory->iNodeTree;
goto cDirectory->put(inode, mkdir2);
}
__code mkdir2(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
Node* dir = new Node();
dir->key = name->value;
Integer* iNum = new Integer();
iNum->value = gearsDirectory->INodeNumber;
dir->value = iNum;
gearsDirectory->INodeNumber = gearsDirectory->INodeNumber + 1;
struct FTree* cDirectory = new FTree();
cDirectory = gearsDirectory->currentDirectory;
goto cDirectory->put(dir, next(...));
}
```
## Unix Like な interface
### mkdir
## GearsDirectoryにおける非破壊編集ツリー
- GearsOSにおける永続データは非破壊的な編集を行う木構造を用いて保存する
- ディレクトリシステム自体にバックアップの機能を搭載することが可能と考える
## GearsOSにおけるメモリマネージメントシステム
- メモリとディスク上のデータ構造が等しくなる形で実装したい
- 単純なコピーでメモリとディスク間のデータやり取りを行うことができる
- メモリとディスクのデータアクセスの形式を統一することができる
## GearsOSにおけるメモリマネージメントシステム
- メモリとディスク上のデータ構造が等しくなる形で実装したい
- 単純なコピーでメモリとディスク間のデータやり取りを行うことができる
- メモリとディスクのアドレスの差はoffsetを変換することによって吸収する
- メモリとディスクのデータアクセスの形式を統一することができる
## GearsOSにおけるメモリマネージメントシステム
- ガベージコレクションはCopying GCを用いる
## GearsFileSystemの今後
### gearsDirectory path
- gearsDirectoryにはpathの機能が実装されていない
- full path指定のlsなどが実装できない状態である
- FileSystemTreeを拡張し,ノードをたどりpathを生成する様な機能を実装する必要がある
### gearsDirectory filename
- 現状はgearsDirectoryのfilenameはIntegerの構造で管理されている
- filenameは一般的に文字列型であるためIntegerから文字列型に変更する必要がある
## gearsDirectoryまとめ
- gearsDirectoryの実装について説明した
- RedBlackTreeを用いてinodeの仕組みを構築し,ls,cd,mkdirを作成するなどして,Unix Likeに構築することが出来た
- RedBlackTreeのシンプルなinterfaceにより比較的容易に実装を行うことができた
- 形式手法とファイルシステムの機能の両面で信頼性の向上が図れると考える
- メモリマネージメントシステムについて考察した