読者です 読者をやめる 読者になる 読者になる

File Allocation Table

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

より正確に定義すれば、ファイルシステムは抽象データ型の集まりであり、ストレージ、階層構造、データの操作/アクセス/検索のために実装されたものである。ファイルシステムを特殊用途のデータベース管理システム (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」など)

ファイル・アロケーション・テーブル (File Allocation Table、FAT) とは、MS-DOSファイルシステム(および、その前身となったMicrosoft DISK-BASICのファイルシステム)におけるディスク内のファイルの位置情報などを記録するための領域である。これが転じて現在ではMS-DOSに採用されていたFATを用いるファイルシステムの名前としてFATファイルシステム、さらにそれを略してFATと呼ぶことも多い(なお後者でDISK-BASICのそれを指すことはまずない)。

オリジナルのFile Allocation Tableは1977年に、ビル・ゲイツとマーク・マクドナルドによって開発され、DISK-BASICの中のファイル管理仕様として採用された。

DISK-BASIC以降、MS-DOSファイルシステムでもFATが採用され、MS-DOSDOSとしてのデファクトスタンダードを確立し、さらにその後Windows NTで新しいファイルシステムNTFSを普及させた後も、FATを採用したファイルシステムは使われ続けている。

MS-DOS以降は、Windows Meまでの一般家庭向けのOSの標準ファイルフォーマットとして使用されていた。Windows NT系のOSでも使用可能であるが、他のWindowsからのアップグレードやリムーバブルメディアのために用意されているものであり、セキュリティなどの観点から必ずしも利用が推奨されておらず、FATを利用している状況下での動作制限も存在する。

フロッピーディスクの時代の設計を元にしてあるため、ディスク総容量に対し管理領域が少なくて済む、高速にアクセスできるなどの利点があるが、その反面、堅牢でない、大容量ディスクでは非効率、拡張性に乏しい、ファイル名が8文字+拡張子3文字までしか扱えない(VFAT非対応の場合)、タイムスタンプがローカル時間なのでタイムゾーンをまたいで使ったり夏時間・冬時間が違ったりすると正しく(意図した)ファイル変更時刻が表示できないことがあるなど様々な欠点がある。それでも、その特徴と実装の容易さ、読み書きできるオペレーティングシステムが多いことから、フロッピーディスクや小容量メモリーカード用のファイルシステムとして依然使われ続けている。現在はデジタルカメラビデオゲーム機などでも広く使われている。

FATは、クラスタ番号の管理ビット数によって「FAT12」、「FAT16」、「FAT32」の3種類がある(なお、DISK-BASICでは8ビットであった)。Windowsでは、FAT32を除いてFATと表示している。また、稀に「FAT64」と言う記述を見かけることがあるが、これはWindows NTで使用可能なクラスタサイズが64キロバイトFAT16を示し、クラスタ番号のビット数を示すものでは無い。

上記のようにリムーバブルメディアのファイルフォーマットとしてはFAT16またはFAT32が多く使用されているが、ボリュームとファイルのサイズ制限が問題になっている。このほか種々の問題を解決するため、exFATが開発された。

なお、VFATとexFATを除いた仕様は国際規格としてECMA-107とISO/IEC 9293として標準化されている。日本ではJIS X 0605規格として登録されている。

MS-DOS(エムエス-ディーオーエス、エムエスドス[1])は、マイクロソフトが開発・販売していた、8086系マイクロプロセッサをCPUとする、IBM PCおよびそれに似た構成の(たとえばPC-98など)パーソナルコンピュータ向けのオペレーティングシステム(OS)である。IBMへのOEM供給品であった PC DOS (IBM DOS)を自社製品として供給・販売したもので、バージョン6以降はPC DOSから完全に独立して開発された。

MS-DOS(およびPC DOS等)は、8086系のマイクロプロセッサをCPUとするパーソナルコンピュータ向けのシングルタスクのオペレーティングシステムで、DOS(ディスクオペレーティングシステム)の名の通り、ディスクの管理が主機能である(DOSという名前だからといって必ずしもそうとは限らないが、少なくともMS-DOSのプロセス管理機能は、シングルタスクに代表されるように、低機能・低性能である)。MS-DOSは改名された86-DOSであった。86-DOSCP/Mのクローンであったのでたった六週間で開発された[2]。

標準的なシェルは、コマンドラインインタフェース(CUI)のCOMMAND.COMである。GUIとしては、一部のメーカーが独自に追加したものや、後のバージョンで標準添付されたグラフィカルなツールもあった(DOSSHELLが、あまり使い勝手が良くなく、Windows2.11などが使われ始めていたこともあり、印象が薄い)。UNIX風の階層型のファイルシステムを持つが、ファイル名の制約などが厳しく機能は低い。

歴史的には1981年にIBMが初代IBM PC用に発売したDOSが「PC DOS」で、1982年よりマイクロソフトIBM以外のメーカーにOEM提供を開始したものが「MS-DOS」であったが、マイクロソフトは後に1981年から「MS-DOS」と呼んでいる。

両社はバージョン5まではOS共同開発契約(OSクロスライセンス契約)を結んでおり互換性が保たれた。当時は8ビット市場ではCP/Mが事実上の標準であったが、16ビット市場ではPC DOSならびにMS-DOSが主流となった。

MS-DOSは「IBM以外から提供されているPC DOS」として、IBM以外のメーカ製であるIBM PC互換機で広く使われたのみならず、IBM PC互換ではないが8086(およびその後継やAMD等による互換チップ)を積んだ、似たような構成の各社・各機種のパーソナルコンピュータ用のバージョンも各社あるいは各社の依頼によりMSで作られ、日本での例を挙げるならば、日本電気NEC)のPC-9800シリーズ、富士通のFMRシリーズ、東芝ダイナブックなどがある。後にはAXのベース、更には組み込み機器などに、広く普及し主流となった。

しかし、多くの「魅力ある」MS-DOSアプリは、アーキテクチャが異なる機種間での互換性はほとんど無かった。MS-DOSは画面描画に関わるAPIを持たないため、グラフィックメモリを操作して画面描画を行うアプリケーションはハードウェアを直接操作しており、機種依存となったためである[3]。また、たいていのマシンに「とりあえず使える似たようなフレームバッファ」機能がある現代とは異なり、各社の特色を出すべくグラフィックシステムも個性あるものが多かったことから、プログラムを書き直すのも容易でないことも多かった。

日本ではソフトウェアのみで日本語表示を可能としたDOS/Vが発売され、漢字V-RAM機能を持たないPC/AT互換機が普及した。

バージョン6からはIBMマイクロソフトのOS共同開発契約が終了し、後にMS-DOSPC DOSの単体販売やサポートも終了したため、2016年現在はオープンソースを含めた互換DOSの他、Microsoft Windowsコマンドプロンプト環境などのDOS互換環境が存在する。

MS-DOSは1995年時点で全世界で1億本を出荷した[4]。