パソコン実習室
FD の構造と FAT12 - 物理構造と論理構造
≪ previous  

W.FAT ( File Allocation Table )

 ディスクの Data Area を、決められたセクター数で区切った単位をクラスターと呼び、 通し番号を振ってファイルの記録位置管理に用いる。
1.44MB タイプの FD では、1セクターで 1クラスターを構成する。

 FD のセクター 1 〜 9 は FAT ( File Allocation Table ) と呼ばれる領域で、 クラスターの使用状況や次に続くクラスター番号を記録する。
OS は Directory Entry と FAT の情報を使ってファイル管理を実現している。

W.1.FAT12

 FAT 領域全体を特定ビット数のブロックに分割し、ブロックの位置をクラスター番号に対応させることでファイル記録位置を管理する。
▼ 0番目のブロック = クラスター0,  1番目のブロック = クラスター1,  ・・・  N番目のブロック = クラスターN
※ ただし、クラスター0 と 1 は特別で、クラスターの管理には使われない。

 1ブロック (FAT データ) 当たりのビット数にはディスクの容量やBIOS・OS の対応などから、12, 16, 32 ビット等の規格がある。

 前述の通り、FAT のデータはクラスター番号の指定にも使われ、ビット数によって指定できるクラスター番号にも限界がある。  少ないビット数の FAT では大きなディスクは扱えない。
 1.44MB タイプの FD に用いられる FAT が FAT12 と呼ばれるのは、FAT のデータサイズ (ブロック) が 12ビットであることに由来する。

W.1.1.FAT12 の仕様

  • FAT 領域を 12ビットのデータ サイズで分割する。
  • ※ 3バイトを使って 2つの FAT データを構成する。
       ペアとなる FAT データは、偶数番号の FAT データと、次(+1)の奇数番号の FAT データ になる。
  • FAT データ の位置をクラスター番号に対応させる。
  • クラスターの "0" と "1" に該当する部分 ( FAT データ の先頭 2つ ) は特別で下記データを格納する。
  • クラスター番号格納データ
    クラスター 0メディアタイプ
    0xFF0 : 3.5 inch FD,   0xFF8 : Hard Disk
    クラスター 10xFFF ( すべてのビットが "1" )
  • 上記仕様のため Data Area の先頭クラスター番号は "2" となる。
  • FAT データが次に示す値の場合は特別な意味を表す。
  • FAT データ意味
    0x000空き
    0xFF8 〜 0xFFFEnd Of Cluster  ( 最終Cluster )
    0xFF7不良 Cluster
  • FAT 構造の概念図を示すと次のようになる。
  • メディア タイプ0xFFFクラスター2の管理クラスター3の管理クラスター4の管理・・・・・・・
    ← 12ビット →← 12ビット →← 12ビット →← 12ビット →← 12ビット →・・・・・・・
    ← 3バイト →← 3バイト →・・・・・・・・・・


W.2.ファイル管理

 ファイルの大きさがクラスター サイズを超えていると、ファイルは複数クラスターに分散して格納しなければならない。  またファイル読み出し時には、これら分散しているクラスターを適切に追跡できる仕組みが必要となる。

W.2.1.クラスターの追跡

 クラスターの追跡に Directory Entry と FAT のデータがどのように使われるのか、以下にその一例を示す。

 ファイル サイズ 2500バイトの test.doc を保存した時、Directory Entry と FAT のデータが下記状態であったと仮定する。
  • Directory Entry
  • ファイル名拡張子属性〜更新日付先頭クラスター番号ファイル サイズ
    testdoc・・・・・・・・・・・0x00020x000009C4
  • FAT
  • 該当クラスター番号01234567
    FAT データ0xFF00xFFF0x0030x0040x0060xFF80x0070xFF8
これらのデータを参照し、次の手順でクラスターを追跡する。
  1. Directory Entry から先頭クラスター番号 0x002 を得る。
  2. FAT の該当クラスター番号 2 の位置に記録されている値を参照する。
    値が 0xFF8 〜 0x0FFF (最終クラスター) ではないので、その値は続きのクラスター番号 0x003 を示していると認識する。
  3. 同様にして 続きのクラスター番号 0x004, 0x006, 0x007 を得る。
  4. 該当クラスター番号 7 の値は 0xFF8 となっているので、最終クラスターであると識別する。
  5. ※ test.doc ファイルの読み出しは、クラスターを次の順に読むことで完成する。
       クラスター読み出し順 : 0x002 → 0x003 → 0x004 → 0x006 → 0x007

W.2.2.ファイルの削除処理

 ファイルを削除すると Directory Entry1 と FAT に以下の処理が行われる。
  1. Directory Entry
    先頭の 1バイトを 0xE5 に書き換える。
  2. ※ 先頭の 1バイト以外は消去されずに残る。


  3. FAT
    当該ファイル用に使用していたすべての FAT データを 0x000 に書き換える。
▼ OS は以上の処理しか行わない。
   クラスター内のデータに関しては放置されるので、ファイルの実体は手付かずで残る。


W.3.実際の FAT12 データ

 FAT12 は 12ビット構成のため、バイト サイズ (8ビット) を多用する PC としては異質にも思えるが、 コンパクトで十分な機能という開発時の要請に添ったものといえる。
 FAT 領域をダンプすると、2つの FAT データを 3バイトに収めている様子を見る事が出来る。
前項の例で挙げた FAT データをダンプすると、次のようになる。

【 セクター 1 のダンプ ( 冒頭 16バイト ) 】
offset+0+1+2+3+4+5+6+7+8+9+A+B+C+D+E+F
FAT データF0FFFF0340000680FF0780FFF8AF000B

 FAT の生データを人間が直感的に判読するのは難しいが、メモリー上のデータとして捉えるとイメージしやすい。

 右図はダンプ データの offset +3 〜 +5 (クラスター番号 2, 3 に該当) のデータをメモリー上に配置した概念図だ。
このデータを次のように読む。
  • クラスター2 に該当するデータは、+4 の下位 4ビットと +3 の 8ビットを繋いで(緑線)、0x003 が得られる。
  • クラスター3 に該当するデータは、+5 の 8ビットと +4の 上位 4ビットを繋いで(オレンジ線)、0x004 が得られる。



≪ previous [[ FD の構造と FAT12 ]]