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

V.ディレクトリの構成

 ファイルの管理は、その名称や属性、サイズ等の情報を登録することで行われる。  この登録に使われる単位を Directory Entry という。

V.1.ルート ディレクトリ

 ファイルはルートを頂点とする逆ツリー構造で管理される。  FD のセクター 19 〜 32 はルート ディレクトリと呼ばれ、 ルートに存在するファイルの Directory Entry を格納する専用領域となっている。

 ルート ディレクトリのサイズは 14セクター × 512バイト = 7,168バイト。  一方 Directory Entry のサイズは 32 バイトなので、ルート ディレクトリには 224 個の Directory Entry が記録される。

V.2.Directory Entry の詳細

 ルート ディレクトリを構成する Directory Entry (32 バイト) の詳細は次の通り。
Offsetバイト数内容
0x0000 - 0x00078ファイル名
( 1バイト目が 0x00 は未使用エントリー、 0xE5 は削除ファイル )
0x0008 - 0x000A3拡張子
0x000B1属性
0x000C - 0x001510予備
0x0016 - 0x00172更新時刻
0x0018 - 0x00192更新日付
0x001A - 0x001B2先頭クラスター番号
0x001C - 0x001F4ファイル サイズ
※ ファイルを削除した場合、Directory Entry の先頭 1バイトは 0xE5 に書き換えられるが、
   それ以外は手付かずで残る。 「 W.2.2.ファイルの削除処理 」参照。
  • ファイル名や拡張子の文字数が短い場合、残りの部分は 0x20 (スペース) で埋められる。
  • 属性はビット位置ごとに次の意味がある。
  • ビット位置7 - 6543210
    意味予約ArchiveDirectoryVolumeSystemHiddenRead Only
  • 更新時刻データのビット構成。
  • ビット位置15 - 1110 - 54 - 0
    適用時刻
  • 更新日付データのビット構成。
  • ビット位置15 - 98 - 54 - 0
    適用
    ※ 1980 年を基準とし 2107 年まで表示可能。
  • 先頭クラスター番号。
    ファイルを保存したクラスターの先頭番号。
    ファイル サイズが 0 ならクラスター番号も 0 になる。
  • ▼ 実際のファイルを格納するデータエリアには、クラスター番号 2以降が適用される。
    ▼ 512 バイト (1クラスター) を超えるファイルを格納したクラスター番号は、FAT によって管理される。

V.3.サブ ディレクトリ

 サブ ディレクトリもファイルの一種で、ルート ディレクトリや他のサブ ディレクトリに、ファイル属性 "Directory" として登録される。
 その構成は Directory Entry の集合で、実態は一部 (先頭2個分の Directory Entry) を除いてルート ディレクトリと同様である。
( Directory Entry については、「V.2.Directory Entry の詳細」参照 )

 先頭2個の Directory Entry は、自己アドレスと親アドレスを記録している。  以下にその構造を示す。

【 サブ ディレクトリの先頭 Directory Entry 】
Offsetバイト数内容
0x0000 - 0x00078ファイル名
先頭に 0x2E (ピリオド) 1文字で、残りは 0x20 (空白) で埋められる
0x0008 - 0x000A3拡張子 すべて 0x20(空白)
0x000B1属性 0x10 (ディレクトリ)
0x000C - 0x001510常に 0x00
0x0016 - 0x00172更新時刻
0x0018 - 0x00192更新日付
0x001A - 0x001B2自己クラスター番号
0x001C - 0x001F4常に 0x00

【 サブ ディレクトリの 2番目の Directory Entry 】
Offsetバイト数内容
0x0000 - 0x00078ファイル名
先頭 2文字が 0x2E (ピリオド) で、残りは 0x20 (空白) で埋められる
0x0008 - 0x000A3拡張子 すべて 0x20(空白)
0x000B1属性 0x10 (ディレクトリ)
0x000C - 0x001510常に 0x00
0x0016 - 0x00172更新時刻
0x0018 - 0x00192更新日付
0x001A - 0x001B2親クラスター番号
親クラスターがルート ディレクトリの場合は 0x00
0x001C - 0x001F4常に 0x00

▼ サブ ディレクトリ内でのファイル操作において、自己ディレクトリをピリオド 1つ ( .)、親ディレクトリをピリオド 2つ
   ( ..) で表現できるのは、この 2つの Directory Entry の働きである。


V.4.LFN (Long File Name) 対応

 複数の連続した Directory Entry を用いることで、8文字 (ASCII文字換算) 以上のファイル名に対応している。  LFN に対して従来 (8文字以下) の方式を SFN (Short File Name) という。

 ASCII文字換算で 8文字以上のファイル名入力があった場合、複数の LFN 用 Directory Entry に入力ファイル名を格納し、 1つの SFN 用 Directory Entry に省略したファイル名と属性を格納することで対処する。

【 LFN 用 Directory Entry 】
Offsetバイト数内容
0x00001Flag
0x0001 - 0x000A10File Name part 1
0x000B1属性 常に 0x0f
0x000C1予約 0x00
0x00D1CRC ( SFN を基に作ったチェックサム )
0x000E - 0x001912File Name part 2
0x001A - 0x001B2常に 0x00
0x001C - 0x001F4File Name part 3
  • Flag : LFN Entry の順番を示す。
    ファイル名先頭の LFN を 1 として順に番号を振り、最終 LFN Entry には 0x40 との OR を記録する。
  • LFN Entry の並び (登録順) は、ファイル名末尾の LFN Entry から順に並べ、最後に SFN 用の Entry を配置する。
    3個の LFN Entry を使った場合の Directory Entry の並び方は以下のようになる。
  • 登録順Entry の種類Flag
    1最終 LFN0x43
    2No.2 LFN0x02
    3No.1 LFN0x01
    4SFN
  • LFN Entry はファイル名のみを記録し、属性等は記録しない。
  • 拡張子、先頭クラスター番号、属性等は SFN 用の Directory Entry に記録する。
    また、SFN 用には 8バイトに省略したファイル名も記録する。
  • ファイル名は File Name part 1 〜 3 に分散記録される。
  • 1つの LFN Entry には、2バイト文字で最大 13文字を格納する。
  • ASCII (1バイト) 文字の場合は、上位バイトを 0x00 で埋める。
  • 2バイトの "0" (0x0000) がファイル名の終端を表し、余った部分は 0xffff で埋める。



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