Формат таблицы FAT
Остановимся подробнее на формате таблицы FAT.
Таблица FAT может иметь 12- или 16-разрядный формат. При этом в таблице для хранения информации об одном кластере диска используется, соответственно, 12 или 16 бит.
Первый из этих двух форматов (12-разрядный) применяется для дискет с небольшим количеством секторов. При этом вся таблица размещения файлов помещается в одном секторе.
Если размер диска слишком большой, для представления всех кластеров двенадцати разрядов будет недостаточно. В этом случае используется 16-разрядный формат FAT. При этом операционная система MS-DOS может работать с диском, который имеет размер более 32 Мбайт. Поэтому для жестких дисков используется именно 16-разрядный формат таблицы FAT.
Как узнать формат FAT?
Проще всего прочитать его в текстовой строке, расположенной в загрузочном секторе со смещением 36h. При форматном отображении содержимого загрузочного сектора тип таблицы FAT отображается в строке File System ID (рис. 6.18).
Кроме того, если разделы жесткого диска создавались программой FDISK.EXE, формат FAT можно определить, анализируя содержимое поля кода системы соответствующего элемента таблицы разделов, расположенной в главной загрузочной записи MBR. Если это поле содержит значение 1, используется 12-разрядный формат, если 4, то 16-разрядный.
Первый элемент таблицы FAT имеет особый формат.
Самый первый байт таблицы FAT называется "Описатель среды" (Media Descriptor). Он имеет такое же значение, как и байт-описатель среды, загрузочного сектора логического диска.
Следующие 5 байт для 12-разрядного формата или 7 байт для 16-разрядного формата всегда содержат значение 0FFh.
Вся остальная часть таблицы FAT состоит из 12- или 16-разрядных ячеек. Каждая ячейка соответствует одному кластеру диска. Эти ячейки для разных форматов таблицы FAT могут содержать следующие значения:
FAT12 | FAT16 | Описание | |||
000h | 0000h | Свободный кластер | |||
0FF0h - 0FF6h | 0FFF0h - 0FFF6h | Зарезервированный кластер | |||
0FF7h | 0FFF7h | Плохой кластер | |||
0FF8h - 0FFFh | 0FFF8h - 0FFFFh | Последний кластер в списке | |||
002h - 0FEFh | 0002h - 0FFEFh | Номер следующего кластера в списке |