プロセッサの基本動作は,主メモリーに記録されているデータを読み込んで処理し,その結果を主メモリーに格納することです。主メモリーに記録されたデータは通常,電源供給が止まると消えてしまいますので,保存が必要なデータは,ハード・ディスク・ドライブやフロッピ・ディスク・ドライブといった補助記憶装置*1を使って保存します。

 この際,ほとんどのOSでは「ファイル」という形式でデータを保存します。ファイルとは,関連性のあるひとまとまりのデータに名前などのラベルを付けたものです。データをファイルの形で管理するのは,データの検索や複製,削除といった管理作業がしやすくなるためです。Linuxでも基本的にはデータをファイルの形で保存,管理します。例えば,エディタで文書を編集する際は,データをファイルから読み込みますし,編集結果もファイルに保存します。また, cpコマンドでファイルをコピーするといった作業も日常的です。コマンド自体もファイルに格納されています。

 しかし,補助記憶装置に実際にファイルの形でデータが記録されるわけではありません。データは管理情報などと共に,一定のサイズに分割した「データ・ブロック」の形で保存されます。データ・ブロックの入出力に際して補助記憶装置側は,ディレクトリ階層やファイル名といった情報による区分は一切しません。

 補助記憶装置にファイルを書き込んだり,読み出したりできるのは,OSがファイルとデータ・ブロックとを対応付けて処理するからです。この対応付けの仕組みを「ファイル・システム」と呼び,Linuxでは,カーネルがファイル・システムを管理しています。ファイル・システムがあるおかげで,ユーザーは,ファイルが実際にどのような形で保存されるかを意識せずにファイルを利用できます。

ファイル・システムの役割

 現在最も広く利用される補助記憶装置が,ハード・ディスク・ドライブ(以下,HDD)です。そこで,このHDDを例にして,ファイル・システムの役割を紹介しましょう。

 HDDでは,磁性体を塗布したアルミ・ディスクに磁気を利用してデータを書き込みます。ディスクは,セクターという一定サイズの小さな記録領域に分割されています。一般にデータは,分割されて複数のセクターに記録されます。セクターの大きさはさまざまですが,現在では,一般に1セクター当たり512バイトとなっています*2。データは,セクターを単位としてディスクに入出力されます。セクターより小さな単位でデータをやりとりすることはできず,どんなに小さなデータでもディスクに保存するときは1セクター利用します。

 セクターには管理用のアドレス(セクター番号)が割り当てられ,入出力されるデータは,すべてこのアドレスで管理されます。つまり,ディスクを管理する際には,ディレクトリ階層やファイル名などの情報は一切参照されず,ファイルだろうとディレクトリだろうと,セクター内のただのデータの塊としてしか扱われません。そのため,データ入出力の際には,元のデータがディスクのどのセクターに保存されているかや,複数のセクターに分割保存されている場合はその場所や順番などをすべて把握しておく必要があります。これは大変面倒です。

 そこでカーネルの出番です。各ファイルのデータがディスクのどのセクターに,どのような順番で保存されているかをカーネルが管理していれば,ユーザーがセクターを意識せずにファイルを読み書きできます。このカーネルの管理機構が,ファイル・システムです(図1)。

図1●ファイル・システムの役割
図1●ファイル・システムの役割
ファイル・システムは,ユーザーが扱いやすい「ファイル」と,ディスク入出力に利用する「データ・ブロック」を相互変換する働きをします。

 なお,多くのファイル・システムでは,効率を上げるためにいくつかのセクターをまとめて1つのデータ・ブロックとしています。例えば,Linuxで利用されるext2ファイル・システムでは,1データ・ブロックのサイズは1024,2048,4096バイトのいずれかです。