FAT
読み:ファット
外語:FAT: File Allocation Table

 Microsoftが開発し、MS-DOSで普及し、後にMicrosoft Windowsで拡張を重ねて使用されているファイルシステム(ディスク管理方法)の一つ。
目次

概要

由来
 FATは、ビル・ゲイツと、Microsoft初の給与従業員だったMarc B. McDonaldによって発案、開発されたファイルシステムである。
 初期のものはクラスター番号を8ビットで表現しており、このためFAT8とも呼べるものだったが、当時も今も、そのような呼び方はしていなかったようである。
 このシステムはMicrosoftのDisk BASICで採用され、日本でも、PC-8000シリーズPC-8800シリーズなどのDISK BAISCで採用されていた。
 その後、クラスター番号長が10ビットや12ビットに拡張されたが、MS-DOS用として最初に導入されたものが12ビット長であり、これがFAT12として広く普及することになった。

N-BASIC
 まだFATとは一般に呼ばれていなかった頃、PC-8000シリーズPC-8800シリーズのDISK BAISCでこのファイルシステムは使われていた。
 ファイルシステムとは直接関係がない話ではあるが、中でもPC-8001のN-BASICの実装は、FAT情報をメモリーに置いており逐一ディスクに書き込まないことを特徴とした。ディスクを取り出す前にremoveをしてフラッシュする必要があり、これを忘れるとファイルシステムを破損した。不便だったため、88以降では不要になった。

86-DOS(QDOS)→MS-DOS
 Tim Patersonが開発した86-DOS(QDOS)、これを買収して開発されたMS-DOSは、共にファイルシステムとしてFATを採用している。
 86-DOS(QDOS)はCP/Mを参考に開発されていたが、コード自体は完全なオリジナルでCP/Mからの流用はなかった。そしてファイルシステムは、CP/M互換ではなく、当時彼が使用していたBASIC-86との互換性のため、8ビットのFATを採用した。
 そしてMS-DOS 1となったとき、12ビットのFATとして出荷されたのである。

国際標準
 FAT12/FAT16の二種類は、ECMA-107およびISO/IEC 9293として国際標準となっている。日本語規格はJIS X 0605が相当する。
 FATの特許等は当然Microsoftにある(あった)と思われるが、FAT12/FAT16については、広く普及はしたが特に特許料などは要求してこなかった。
 2003(平成15)年頃には、FAT32やVFATなど、まだ特許件が残存していそうなものを根拠にしてか、ライセンス料を要求しようという話が出たこともある。その後どうなったかは不明。

特徴

構造
 ディスクは、次の領域に分けられる。
 ディスク上の領域は、クラスターと呼ばれる単位で管理される。このクラスターのつながり状態(リンク情報)をFAT領域に記録することで、データ領域にある実際のデータがディスク上にどのように存在するのかを管理することができる。

クラスター
 ディスクはセクターと呼ばれる単位で構成され、幾つかのセクターをまとめてクラスターとする。
 ファイルシステムは、セクター単位ではなく、クラスター単位でディスクを管理するが、このクラスター番号を記憶するサイズ(ビット数)に、FATには幾つかの種類がある。
 使用するビット数が多いほど、扱えるクラスター数が増え、大容量ディスクを効率良く管理することができる。
 ビット数が多い分だけ管理できるクラスター数が増え、大容量ディスクが扱えることになるが、その分FAT情報領域が増えてディスク容量を消費してしまうため、媒体の容量に応じたビット数が使われる。

種類
 クラスター番号長が増えるほど、管理可能な容量は増えていく。

ディレクトリエントリ

機構
 ファイルの名称等の情報は全て「ディレクトリエントリ」に格納される。
 サブディレクトリのディレクトリエントリはファイルと同様の管理が内部でされているが、ディレクトリエントリに「ディレクトリである」というフラグが付けられている。
 FATにおける基本的な仕様は次の通り。
 FATには、2108年問題が存在する。

ファイルの属性
 ファイルの属性は、次の種類がある。

エントリの構造

MS-DOS
 ディレクトリエントリは一つにつき32バイトであり、次の順に格納される。
 この構造は、CP/Mの構造の上位互換である。
 Windows NT以降で、予約領域が拡張されている。

Windows NT以降
 Windows NT以降では、従来未使用だった領域に情報が書き込まれるようになった。
 以下は、Microsoft Extensible Firmware Initiative FAT32 File System Specificationによる。
 日時関係は、次の仕様となる。
 最終アクセス日はDIR_LstAccDateに記録されるが、時刻は保存されない。但し書き込みをした場合、DIR_WrtTimeに時刻が書き込まれる。
 なお、最終更新日時とされる情報は、旧来のシステム(MS-DOSの時代)にはファイル作成日として使われていた。

ロングファイル名
 Windows 95以降で対応したロングファイル名も、同様に1つ以上のディレクトリエントリを用いて情報を記録する。
 この旧来に対する拡張情報は、ファイル属性(R+H+S+V)とした特殊な領域に格納される。これは互換性を考慮した結果と思われる。
 OSからはVFATという仮想レイヤーを経由してアクセスされる。結果としてディスクがFATであれば、従来と互換性を保つために特殊な隠しファイルとしてファイル属性(R+H+S+V)としたものをディレクトリエントリに書き込む。

再検索