Файловая система FAT12

Обычная дискета содержит 4 основных области:

Загрузочный сектор содержит короткую (менее 512 байт) программу начальной загрузки ОС в память компьютера. Независимо от типа ОС и способа форматирования дискеты, эта программа всегда занимает самый первый сектор на самой первой дорожке диска. Также этот сектор содержит всю важную информацию о характеристиках диска. Структура этой информации следующая:

Смещение, байт

Название

Размер, байт

Описание

00h

Команда JMP

3

Длинный или короткий переход на программу загрузчика

03h

Идентификатор

8

Идентификатор версии ОС, с помощью которой отформатирован диск (например, “MSDOS6.0”)

0Bh

Байт/Сектор

2

Размер сектора в байтах

0Dh

Сектор/Кластер

1

Число секторов в кластере

0Eh (*)

Резерв

2

Количество резервных секторов

10h

Число FAT

1

Число копий FAT на диске

11h

Число корневых записей

2

Макс. количество записей в корневом каталоге диска

13h (**)

Всего секторов

2

Общее число секторов на диске

15h

Носитель

1

Тип магнитного носителя

16h

Сектор/FAT

2

Число секторов в каждой из FAT

18h

Сектор/дорожка

2

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

1Ah

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

2

Число головок на диске

1Ch

Скрытых секторов

4

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

20h

Больших секторов

4

Общее число секторов

24h

Номер накопителя

1

Номер накопителя по BIOS'у

25h

Зарезервировано

1

Резерв

26h

Сигнатура

1

Содержит число 29h

27h

ID тома

4

Идентификатор тома диска

2Bh

Метка тома

11

Копия метки тома

36h

ID типа FAT

8

FAT12 или FAT16

3Eh

Загрузчик

?

Программа загрузчика

36h

Конец загрузочного сектора

Таблица размещения файлов (FAT) содержит информацию о месторасположении записанных на дискету файлов. ОС выделяет для хранения файла, в зависимости от его длины, один или более кластеров (кластер – единица хранения данных на диске, обычно один кластер равен нескольким секторам), однако ОС не заботится, чтобы запись файла происходила последовательно, поэтому необходимо хранить информацию, по каким именно кластерам раскидан данный файл. В силу особой важности этой информации FAT существует на диске в двух копиях. FAT дискеты состоит из 12-битовых элементов. Структура таблицы размещения файлов следующая:

Элемент FAT

Выполняемая функция

0

Идентификатор формата

1

Зарезервирован (должен быть FFF)

2

Статус кластера 2

3

Статус кластера 3

...

...

Идентификатор формата может принимать следующие значения:

Статус кластера может быть следующим:

Корневой каталог следует непосредственно за FAT. Содержит информацию об основных параметрах файлов (длине, дате создания, и т.д.). Каждая запись в каталоге соответствует тому или иному файлу (кроме, разумеется, метки диска), включает номер первого кластера, назначенного ОС этому файлу, который используется как точка входа в FAT. Начиная с этой точки, каждая запись в FAT содержит номер следующего кластера, распределенного под этот файл, или метку последнего кластера. Структура записи в корневом каталоге следующая:

Смещение

Название

Описание

00h

Имя

Имя файла

08h

Расширение

Расширение файла

0Bh

Атрибуты

Атрибуты файла

0Ch

Зарезервировано

Резерв

16h

Время

Время последней перезаписи файла

18h

Дата

Дата последней перезаписи файла

1Ah

Кластер

Номер первого отведенного кластера

1Ch

Размер

Размер файла (4 байта)

Атрибуты файла
  • 0x01 только для чтения»

  • 0x02 «скрытый»

  • 0x04 «системный»

  • 0x08 ATTR_VOLUME_ID

  • 0x10 каталог

  • 0x20 «архивный»

Имя файла
  • 00 если запись свободна

  • 05 если первый символ имени файла – E5

  • E5 если файл удален

  • 2E запись родительского каталога

Чтение структуры каталогов

Исходя из вышеуказанных данных, для чтения структуры каталогов путем непосредственного использования данных файловой системы FAT12, необходимо реализовать следующий алгоритм:

  1. Считать загрузочный сектор диска, получить из него геометрию диска - размер сектора, количество секторов в кластере и т.д. (фактически размер сектора всегда равен 512 байт, а один кластер дискеты соответствует одному сектору).
  2. Считать FAT.
  3. Используя FAT, считать корневой каталог, выбрать из него (по атрибутам) записи подкаталогов.
  4. Для каждой записи подкаталога определить кластер, в котором находится подкаталог.
  5. Используя FAT, считать подкаталог, выбрать из него записи его подкаталогов и т.д.

FrBrGeorge/Fat12 (последним исправлял пользователь FrBrGeorge 2025-11-17 14:35:27)