2006-04-20
■[design]Archive FS
Archiveファイルのイメージを直接Mountするarfsというファイルシステムを実装した。
ramfsを実装した際には、起動時に単一のtarファイルをramfsに展開してルート・ファイルシステムとする予定だった。しかし、ユーザモードのFSサーバがどうやってそのtarファイルにアクセスするのか、という問題が残る。ちなみに、これに限らないが『あー!モノリシックなカーネルならどれだけ楽か?』と感じる事はナニゲに多い。
当初は、Bootサーバのデータ領域に予めtarファイルをリンクしておき、Bootサーバがtarを解釈しながら、FSサーバにファイル・イメージを転送する仕組みを考えていた。Bootサーバは起動後にinitに置き換わるので、要らなくなったコードやデータは自動で開放されるし、FSサーバの潔癖度(?)も保てる。ただ、これでは効率が悪いし、お世辞にもエレガントとは言えない。
そもそも、ramfsは物理デバイスにmountできないという点で、Bootデバイス用のファイルシステムとしては、使い勝手が悪いのは認識していた。格納場所がどこであれ、単一のイメージをファイルシステムとしてMountできる方が、より柔軟性のあるシステム構築ができるのは明らかだ。イメージはROMやフラッシュに置けるし、あくまでRAMを使いたいのならイメージをコピーして、RAM DiskにMountすればいい話だ。
元々、Prexでは以前より、カーネル、ドライバ、ブートタスクはすべてarでPackされた単一のArchiveファイルイメージとしてロードされていた。起動後には元のイメージは開放されていたので、そこにデータファイル等は格納できなかった。よって、このイメージをファイルシステムとして扱い、起動後にも個々のファイルにアクセスできる仕組みは理に適っている。
arfsは単一のディレクトリのみを扱うリードオンリなファイルシステム。単純にArchiveヘッダを辿ってファイルをLookupする仕組みなので、fsユニークなvnodeデータはブロック内のデータオフセットだけで済んだ。
最近になって、少しずつファイル・システムの面白さがわかってきた気がする。外部インターフェイスが極めて明確なため、内部でいくら風変わりな事をやっても、設計的な落とし込みは楽だ。インターオペラビリティを考慮すれば、独自仕様のファイル・システムを実装するメリットはない、と考えてきたが、そのうちハマリそうな気がしないでもない・・・。
