ファイルというインタフェースをユーザーやアプリケーションに提供するのがファイル・システムです。ファイル・システムはセキュリティや信頼性確保などさまざまな機能を持っています。

 コンピュータで処理するデータは,主メモリー(1次記憶装置)に格納されます。しかし,主メモリーの容量は比較的少なく,さらに電源を切ると消失してしまいます。

 そこで大容量のデータや長期間保存が必要なデータは,ハード・ディスク装置などの2次記憶装置に記録されます。

 2次記憶装置上のデータを読み書きするのに一般に利用されるのが「ファイル」というインタフェースです。そしてこのインタフェースを提供する仕組みを「ファイル・システム」と呼びます。

ファイルはインタフェース

 ファイルをインタフェースと表現することに違和感を覚える方がいるかもしれません。通常我々は「データを保存する入れ物」としてファイルをとらえているからです。

 しかし実際には2次記憶装置上にデータをそのままの形で記録できるわけではありません。多くの2次記憶装置でデータは「セクター」と呼ばれる固定長の記録領域に分割記録しなければならないからです。記録タイミングによっては,1つのファイル内のデータの記録位置や記録順序がバラバラになることも珍しくありません。記憶装置の種類によってセクターの大きさもまちまちです。例えばハード・ディスク装置の場合は一般に512バイト,CD-ROM/DVD-ROMの場合は2048バイト単位でデータを記録します。

 これらの違いを隠蔽して,あたかもある連続した記憶領域が存在するかのように見せかけたものがファイルです。

 場合によっては,ファイルと記憶装置が無関係なこともあります。例えば,LinuxなどUNIX系のOSには,/dev/nullというファイルが存在します。ここに書き込まれたデータはすべて捨てられ,読み出すと常に「EOF」(ファイル終端のコード)を返します。ファイルがインタフェースであるということを強く実感させてくれます。

インタフェースを提供するだけではない

 ファイルというインタフェースをユーザーやアプリケーションに提供するのがファイル・システムの役割です。

 しかし現代的なファイル・システムには,それ以上の役割が求められます。代表的なものとしては,次のようなものが挙げられます。

  • ファイルの管理性の向上
  • データ入出力の高速化
  • 記録データの信頼性確保
  • セキュリティ機構の提供

 ファイルを分かりやすく管理する手段として,ほとんどのファイル・システムが「階層ディレクトリ」をサポートします。ファイルは基本的にディレクトリ(フォルダ)という入れ物に格納され,ディレクトリは階層的に配置されます。通常はルート・ディレクトリを基点とした木構造になっています(図1

図1●階層ディレクトリ
図1●階層ディレクトリ
階層ディレクトリは、ルート・ディレクトリを基点とした木構造です。

 今では当たり前の仕組みですが,8ビット・パソコンなどで使われた「CP/M」や,MS-DOS/PC-DOSのバージョン1系,MacOSのSystem 1.0~2.0では階層ディレクトリはサポートされませんでした。

 データ入出力を高速化する仕組みには主に「ファイル・キャッシュ」とそれを活用するための「非同期書き込み」の2つがあります。これらについては後述します。

 記録データの信頼性確保にはさまざまな手段があります。最近よく利用されるのは,ファイルにどのような変更を加えるかの情報を事前に記録しておくことで,ファイル・システムの整合性を確保する「ジャーナル・ファイル・システム」です。これについても後述します。

 セキュリティ機構としては,ファイルの所有者や各ユーザーに対する読み書きの許可/不許可といった属性情報をファイルごとに管理する方法があります。また,データの暗号化の仕組みを持つファイル・システムもあります。