ファイルシステム


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ファイルシステムは、コンピュータのリソースを操作するための、オペレーティングシステムが持つ機能の一つ。ファイルとは、主に補助記憶装置に格納されたデータを指すが、デバイスやプロセス、カーネル内の情報といったものもファイルとして提供するファイルシステムもある。

より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (DBMS) と見なせるかどうかは議論があるが、ファイルシステムとデータベース管理システムには多くの共通点がある。

元々はファイリングシステム(文書管理システム)から生まれた語である。


最も身近なファイルシステムは補助記憶装置上のもので、「セクタ」などと呼ばれる通常512バイトの固定サイズの「ブロック」の配列にアクセスするものである。ファイルシステムはこのセクタ群を使用してファイルやディレクトリを構成し、各セクタがどのファイルに使用され、使用されていないセクターはどれなのかを把握する必要がある。

しかし、ファイルシステム自体は記憶装置を利用する必要はない。ファイルシステムは何らかのデータへの操作とアクセスを提供するものであり、そのデータが記憶装置に格納されているか(例えば、ネットワーク接続経由で)動的に生成させるかは問題ではない。

ファイルシステムがストレージ上にあるかどうかに関わらず、一般的なファイルシステムはファイルのファイル名を束ねるディレクトリを持つ。通常、ファイル名は何らかのファイル・アロケーション・テーブルのインデックスと対応しており、それはMS-DOSのファイルシステムであるFATでも、UNIX系ファイルシステムでのinodeでもそのようになっている。ディレクトリ構造は平坦な場合もあるし、ディレクトリの下にサブディレクトリのある階層構造の場合もある。いくつかのファイルシステムではファイル名も構造化されていて、拡張子やバージョン番号の文法が存在する。そうでない場合、ファイル名は単なる文字列であり、ファイル毎のメタデータは適当な場所に格納される。

階層型ファイルシステムはUNIXで有名なデニス・リッチーの初期の研究対象であった。それまでの実装では階層はあまり深くできなかった。例えばIBMの初期に生まれたデータベース管理システムであるIMSなどがそうである。UNIXの成功により、リッチーはその後のOS開発(Plan 9やInferno)でもファイルシステムのコンセプトを様々な対象に広げていった。

初期のファイルシステムはファイルとディレクトリの生成、移動、削除といった機能を提供していた。ディレクトリへの追加リンクを生成する機能(UNIXにおけるハードリンク)、親リンク(UNIX系OSにおける"..")の名称変更、ファイル間の双方向リンクの生成といった機能は当初は存在しなかった。

初期のファイルシステムはファイルの切捨て(内容を一部削除すること)、ファイルとファイルの連結、ファイルの生成、ファイルの移動、ファイルの削除、ファイルの更新などの機能を提供していた。ファイルの先頭へのデータ挿入 (prepend)、ファイルの先頭からの内容切捨て、任意の位置の内容の削除や挿入などといった機能は提供されていなかった。提供された操作は対称性に乏しく、どんな状況でも便利というものではない。例えばUNIXにおけるプロセス間のパイプはファイルシステム上には実装できない。というのもパイプはファイル先頭からの切捨てに対応できないためである。

ファイルシステムの基本操作への安全なアクセスはアクセス制御リストまたはケーパビリティに基づいて行われる。研究によれば、アクセス制御リストは完全なセキュリティを確保するのが困難といわれており、研究中の最新のOSではケーパビリティが使われる傾向にある。商用ファイルシステムはまだアクセス制御リストを使用している(コンピュータセキュリティ参照)。

また、アプリケーションソフトウェアの中にも、独自のファイルシステムを採用しているものがある。(FMRシリーズ・FM TOWNS用のワープロソフトウェアである「FM-OASYS」など)


ディスクファイルシステム [編集]

「ディスクファイルシステム」は、直接的か間接的かに関わらずコンピュータシステムに接続された補助記憶装置、特にハードディスク上にファイルを格納するためのものである。ディスクファイルシステムとしては、FAT、NTFS、HFS、ext2、ext3、ext4、ネットワーク・アプライアンス社のフルジャーナルファイルシステムであるWAFL、ISO 9660、ODS-5、UDF、HPFS、JFS、UFS、VTOC (Volume Table Of Contents)、XFSなどがある。ディスクファイルシステムの一部はジャーナルファイルシステムまたはバージョニングファイルシステムでもある。


Microsoft Windows のファイルシステム [編集]

Microsoft Windowsはそれ以前のOSから継承して開発されてきた(CP/M→MS-DOS)。また、ファイルシステムとユーザーインターフェイスの考え方を他からも導入してきた(UNIX)。

※ MS-DOSがUNIX的ファイル管理を導入していた事から、以後のMicrosoft製OSではUNIX的ファイル管理を継承している。当初IBMと共同開発であったOS/2についてもFAT (File Allocation Table) とFATの欠点を補ったHPFS (High Performance File System)と二種類のファイルシステムを用意し、MS-DOSと同様のユーザーインターフェースを継承した。(OS/2はMS-DOSに次ぐ二代目のOSの意味。)後発のWindows NTでは、HPFSをより進化させたNTFS (NT File System) を用意した。Windows NTでのHPFSのサポートはNT 4.0までである。  

そのため、現在のWindowsには FAT (File Allocation Table) とNTFS (NT File System) という二種類のファイルシステムが存在する。FATファイルシステムの古い版では、ファイル名に強い制限があり、FATでフォーマットできるディスクやパーティションのサイズにも強い制限があった。

Windows NTで導入されたNTFSはACLベースのパーミッション制御を可能とした。ハードリンク、代替データストリーム、属性索引、クオータ管理、圧縮、ファイルシステム間のマウントポイント(ジャンクションと呼ばれる)、不良セクタの動的ホットフィックスなどがサポートされているが、全てについて充分な文書が公開されているわけではない。

他のOSとは異なり、Windowsは「ドライブレター (drive letter)」によってディスクやパーティションをユーザーに見せている。例えば C:\WINDOWS\ というパスはCドライブにある WINDOWSディレクトリを意味している。Cドライブは1台目のハードディスクパーティションを表すものとして使われることが多く、そこにブート時に起動されるWindowsが格納される。この「伝統」は非常に堅固に植えつけられているため、一時期のWindowsには必ずCドライブにインストールされるという仕様が存在することもあった。これは、MS-DOSから受け継がれた伝統で、AとBがフロッピーディスクドライブ用に予約されていたために Cドライブ以降がハードディスクとなったものである。ネットワークドライブにも同様のドライブ文字がマップされる。ただし、PC-9800シリーズおよびその互換機では、ハードディスク上のWindowsをOSとして起動したときAドライブがハードディスクに割り当てられた。

Windows NT系OSでは、NTエグゼクティブレベルではドライブレターそのものは実体として存在しなくなった。従前のドライブレターは例えばC:ならば、デバイスオブジェクト\??\C:から\Device\HarddiskVolume1などのボリュームデバイスオブジェクトへのシンボリックリンクで、従来のWindowsと互換性を持たせている。Windows NT系でも見かけ上ドライブレターに縛られていると誤解される場合があるが、例えばボリュームにドライブレターを与えず、ジャンクションによって特定のディレクトリにボリュームを割り当てた場合、ドライブレターを介する事なくボリュームにアクセスできるといった形でNT系ではドライブレターが必須の要素で無くなった事を知ることが出来る。ただし、Win32サブシステムの制約により、Win32アプリはNTエグゼクティブレベルのディレクトリを起点にパス名を指定する事はできない。例えば、Win32サブシステムの制約を受けないInterixサブシステムでは可能。

Windows はGUIを通してユーザーと対話するため、ディレクトリを「フォルダの一種」として扱い、フォルダアイコンでグラフィカルに表示している。