レイヤードファイルシステム

概要

本章ではレイヤードファイルシステムの説明をします。 LINUXなどのOSではアプリケーションに統一的なファイルアクセスの方式を提供することと、設計・実装の共通化を図るためにファイルシステムの機能がいくつかのレイヤーに分けられています。 具体的にはアプリケーションへの統一的なインターフェースを提供するVFS(Virtual File System)レイヤー、実際に書き込む際のデータ構造と配置を決定するレイヤー(ext2、ext3、nfs等)、物理的なデバイスに書き込むレイヤー(単純なディスクのドライバを使用することもあれば、ネットワーク経由で外部のファイルシステムにアクセスすることもある)といった様なレイヤー設計となっています。

見ての通り、ファイルシステムはシステムコールの内部、つまりOSの中で提供されています。これはいくつかのメリットと共にいくつかのデメリットをもたらします。 メリットとしてはファイルシステム操作の実行コードはOSによって完全に保護されている、ファイルシステム内が密結合しているため処理効率が良いという事が挙げられます。 デメリットとしてはファイルシステムを変更するためにOSの変更が必要となる、ファイルシステムで異常が発生した場合はOSも影響を受けるという事が挙げられれます。 このデメリットを埋めるため、最近のLINUXではFUSEという仕組みでアプリケーションレベルでのファイルシステム提供ができるようになっています。

つまり、LINUXでは状況に応じて二つの仕組みを使い分ける事によってそれぞれのデメリットをカバーし、メリットを生かす事が可能となっています。

検討事項

我々は次世代OSのレイヤードファイルシステムのレイヤー分けを検討する必要があります。 LINUXの場合は上述した通り、おおよそ3つのレイヤーとなっていますが、これが理想的とは限りません。 例えば、ファイルシステムに暗号化をする機能を付け加えたとしましょう。 その場合、ext2、ext3等のファイルシステムに依存しませんからVFSで実施する事になります。しかし、実はHDDに暗号化チップがついていたとしましょう。その場合は物理ファイルシステムレイヤーで実施すべきです。 かなり特殊な例でしたが、こういった様に上手く機能しないケースもあります。

また、具体的な設計・実装では処理効率の問題が出てきてしまうため、多すぎるレイヤーを重ねることはできませんが論理的にはOSI参照モデルの様な参照モデルを作成した方が良いでしょう。 なぜなら、参照モデルが無いとレイヤードファイルシステム議論の土台すらなく、検討は単なる水掛け論で終わってしまうからです。

また、アプリケーションレベルのファイルシステムとOSレベルのファイルシステムの役割分担を決めることと、どのレイヤーでアプリケーションレベルのファイルシステムを提供するかを決める必要があります。 上述のFUSEの場合、論理ファイルシステムでFUSEが提供するスタブコードがファイルシステムを提供するアプリケーションを呼び出してアプリケーションレベルのファイルシステムを提供しています。 しかし、この場合はOSの保護レベルとアプリケーションの保護レベルを行き来するため、効率は良くありません。 また、アプリケーションレベルのファイルシステムに低レベルのIOを見せてしまうのも良くありません。 そのため、適切なアクセス方式を検討する必要があります。

協力依頼(レイヤードファイルシステムの参照モデルの設計)

必要スキル

レイヤードファイルシステムの参照モデルの設計には最低限、類似のレイヤー化された設計例を知っていることが必要です。 また、ソフトウェアの基礎的な知識があり、適切なレイヤーを抽出できる事が必要です。 さらに、議論の土台となる部分であるため、わかりやすい資料が作成できる事が条件となります。

期限の目処

2009/2末程度にはある程度形ができている事を目標とします。

課題のボリューム

それなりに大きな課題となります。また、複数案を出さないとモデルの良さが判断できない部分となるため、複数案の提示は必須となります。

課題内容

レイヤードファイルシステムの参照モデルと参照モデルに対応する既存のOSの機能部分を明らかにすること。

解決内容

レイヤードファイルシステムの参照モデル案とその特色を際だたせるための対案が資料化されること。 参照モデルと既存のOSの機能部分の対応関係を明示する資料が作成されていること。

参考資料
  • Linuxカーネル2.6解読室(書籍)
  • OSの基礎と応用―設計から実装、DOSから分散OS Amoebaまで(書籍)
  • 分散システム―原理とパラダイム(書籍)
レビュワー

minoru@cg8.so-net.ne.jpへ作成した資料をメールで送付お願いします。また、メールのタイトルは【分散OS開発】で始めて下さい。

その他

実施して下さる方はminoru@cg8.so-net.ne.jpへメールを送付お願いします。また、メールのタイトルは【分散OS開発】で始めて下さい。