xv6の教科書も第6章に入ってきた。次はファイルシステムについてだ。
xv6のファイルシステムは、以下のようなレイヤを取っている。
- ディスクレイヤは、IDEハードドライブのブロックを読み書きする。
- バッファキャッシュレイヤはディスクブロックをキャッシュし、ブロックのアクセスの同期を取り、データが格納されている特定のブロックについて、たった一つのブロックのみが変更を行っていることを保証する。
- ロギングレイヤは高位のレイヤのいくつかのブロックの更新操作を「トランザクション」としてラップし、またクラッシュが発生した場合でも、ブロックがアトミックに更新されたことを保証する(例えば、全てのブロックがアップデートされたか、または一つもアップデートされていないか)。
- inodeレイヤは個々のファイルを提供し、それぞれのノードはinodeというユニークなi-numberと、ファイルを保持しているいくつかのブロックで構成される。
- ディレクトリレイヤはいくつかのディレクトリを構成し、特別な種類のi-nodeとして構成さえる。
- ディレクトリのinodeはディレクトリのエントリ列が含まれており、各エントリにはファイル名とi-numberが入っている。
- パス名レイヤは、/usr/rtm/xv6/fs.cのような階層的なパス構成を提供し、階層的な探索によりそれを解決する
- ファイルディスクリプタレイヤは多くのUNIXの資源を抽象化する(例えば、パイプやデバイス、ファイルなど)。これにはファイルシステムインタフェースを用い、これによりアプリケーションプログラマのプログラミングを簡単化する。