Исследование системных областей дисков, страница 8

FAT может быть сформирована либо с 12-битовыми, либо с 16-битовыми записями. Формат FAT с 12-битовыми записями используется для дискет и разделов фиксированных дисков, имеющих не более 4078 кластеров. (Таблица разделов фиксированного диска указывает на то, использует ли FAT Для раздела в DOS 12-битовые или 16-битовые записи.) К записям 12-битовой FAT труднее обращаться, так как их размер не вписывается ровно в 16-битовый размер слова семейства микропроцессоров 8086, однако, с другой стороны, 12-битовая FAT занимает меньше места на дискете. всегда наблюдается недостаток пространства.

Первые две записи в FAT зарезервированы для использования системой DOS. Первый байт FAT содержит то же самое значение описателя накопителя, которое присутствует в блоке параметров BIOS загрузочного сектора диска. Остальные байты первых двух записей заполнены величиной 0FFH. Поскольку номера первых двух кластеров (0 и 1) зарезервированы, то первому кластеру доступного дискового пространства в области файлов соответствует кластер с номером 2.

Чтение значений таблицы FAT достаточно просто для 16-битовых записей: чтобы найти смещение соответствующей записи в FAT, необходимо умножить заданный номер кластера на 2.

Для 12-битовых FAT подобные вычисления немного сложнее, так как каждая пара записей в FAT занимает 3 байта (0 и 1 занимают первые три байта, 2 и 3 занимают следующие три байта и т. д.). Имея любой номер кластера, можно найти соответствующую запись в FAT, умножая номера кластеров на 3, затем поделив на 2 и, наконец, используя целую часть результата в качестве смещения в FAT. Выделив слово по полученному адресу, вы будете иметь три шестнадцатеричные цифры записи FAT плюс одну постороннюю шестнадцатеричную цифру, которую вы можете удалить с помощью одной из нескольких быстровыполнимых машинных команд. Если номер кластера четный, вы должны отбросить старшую цифру; если номер кластера нечетный — должны отбросить младшую цифру.

Первые две записи FAT как 12-битового, так и 16-битового форматов не используются для указания статусов кластеров; вместо этого они выделены для того, чтобы самый первый байт таблицы FAT мог быть использован в качестве байта-описателя накопителя, который указывает формат диска (табл. 11).

Однако не следует считать, что данные идентификаторы диска однозначно определяют форматы: это необязательно так. Если вы исследуете каждый используемый формат диска, то обнаружите очень мало соответствий. Имейте это в виду.

В своих программах вы можете узнать формат диска с помощью чтения и проверки байта-описателя накопителя в FAT. Самое простое — использовать для этого функции DOS 1BH (или в десятичной нотации 27).

Таблица 11. Значения описателя накопителя в DOS

Тип накопителя

Емкость

Число головок

Число секторов на дорожке

Описатель накопителя

5,25" - дискета

3, 5" - дискета

Фиксированный диск

160 КБ

320 КБ

180 КБ

360 КБ

1, 2 МБ

720 КБ

1, 44 МБ

1

2

1

2

2

2

2

8

8

9

9

15

9

18

FEH

FFH

FCH

FDH

F9H

F9H

F0H

F8H

Специальные замечания о FAT

Обычно программы не просматривают и не изменяют FAT диска; они оставляют управление таблицей системе DOS. Исключением являются программы, которые выполняют функции по распределению пространства, не поддерживаемые DOS, например программа UnErase из набора программ  Norton Utilities.

Имейте в виду, что FAT может быть логически повреждена; например, цепочка выделенного пространства может быть циклической, имея указатель на предыдущее звено цепочки; или же две цепочки могут пересекаться по какому-нибудь одному кластеру; либо может быть оставлен в одиночестве кластер, т.е. он может быть помечен как используемый, хотя не входит ни в одну конкретную цепочку выделенного пространства. Кроме того, может быть пропущен маркер конца файла (FFFH или FFFFH). Программы CHKDSK и RECOVER системы DOS предназначены для обнаружения и решения большинства таких проблем.

Заключение