PIClist RUS
микроконтроллеры PIC и интерфейсы
техническая документация
статьи и разработки на русском языке

Файловая система FAT (File Allocation Table - таблица размещения файлов)

« назад на главную страницу

Оригинал: M. Dworkin "Dateisystem FAT16 (File Allocation Table Dateizuordnungstabelle)"

Скачать "Файловая система FAT (File Allocation Table - таблица размещения файлов)" в формате PDF

Перевод с немецкого © PIClist-RUS (piclist.ru)



При форматировании носителя информации на нём создаётся файловая система.

Форматирование можно сравнить с установкой полок с ящиками c приложенным списком со сведениями, по которым можно узнать, в каком ящике какие вещи находятся, и какие вещи подходят друг другу. В этом списке также отмечены испорченные и пустые ящики.

Структура FAT

FAT состоит из 5 областей. Они перечислены в следующей таблице. Также в таблице указаны формулы для расчёта начала каждой области.

НазваниеАдрес сектора (смещение)
Главная загрузочная запись MBR (Master Boot Record)= 0
Загрузочная запись раздела PBR (Partition Boot Record)= 1C8h (4 байта) в главной загрузочной записи
Записи FAT= загрузочная запись раздела + 0Eh (2 байта) в загрузочной записи раздела
Записи каталога= записи FAT + (16h (2 байта) * 10h (1 байт)) в загрузочной записи раздела
Область данных (кластер 0)= записи каталога + (11h (2 байта)*32/512) в загрузочной записи раздела

Размер сектора всегда составляет 512 байтов. Это число также указано в позиции загрузочной записи раздела 0Bh (размер записи 2 байта) в байтах.

Кластер образуется из нескольких объединённых секторов. Чтобы узнать, сколько секторов содержится в кластере, смотрите следующую таблицу.

Объем носителя данныхВеличина кластера FAT16Величина кластера FAT32Величина кластера NTFS
7 Мб - 16 Мб2 Кбне поддерживается512 байтов
17 Мб - 32 Мб512 байтовне поддерживается512 байтов
33 Мб - 64 Мб1 Кб512 байтов512 байтов
65 Мб - 128 Мб2 Кб1 Кб512 байтов
129 Мб - 256 Мб4 Кб2 Кб512 байтов
257 Мб - 512 Мб8 Кб4 Кб512 байтов
513 Мб - 1 Гб16 Кб4 Кб1 Кб

Количество секторов в кластере также указаны в позиции загрузочной записи раздела 0Dh (размер записи 1 байт).

Главная загрузочная запись (MBR)

Она содержит сведения о жёстком диске и его разделах.

АдресОписаниеРазмер, байтов
000hГлавная загрузочная запись446
1BEh1. Запись раздела16
1CEh2. Запись раздела16
1DEh3. Запись раздела16
1EEh4. Запись раздела16
1FEhСигнатура BIOS (55h AAh)2

Первая запись раздела содержит следующие сведения:

АдресОписаниеРазмер поля, байтов
00hСтатус раздела: 0 если неактивный, 80h если активный.1
01hГоловка, на которой начинается раздел1
02hДорожка, на которой начинается раздел (биты 16-6), и сектор, на котором начинается раздел (биты 5-0).2
04hТип раздела (1h - FAT12, 4h - FAT16<32Мб, 6h - FAT16>32Мб, Bh - FAT32)1
05hГоловка, на которой заканчивается раздел.1
06hДорожка, на которой заканчивается раздел (биты 16-6), и сектор, на котором заканчивается раздел (биты 5-0).2
08hРасстояние между сектором MBR и первым сектором раздела, в секторах4
0ChОбщее число секторов в разделе4

Загрузочная запись раздела (PBR)

Находится в разделе и содержит сведения о форматировании этого раздела.

АдресОписаниеРазмер поля, байтов
00hУказание перехода + NOP3
03hOEM название8
0BhКоличество байтов в секторе на жестком диске2
0DhКоличество секторов в кластере1
0EhКоличество зарезервированных секторов2
10hКоличество копий FAT, как правило, 21
11hКоличество возможных записей в корневом каталоге: 512 при FAT162
13hКоличество секторов в более маленьких разделах2
15hТип носителя: F8 для жестких дисков; F0 для дискет.1
16hСекторов на FAT2
18hСекторов на дорожку2
1AhЧисло головок2
1ChЗарезервированные сектора в начале жесткого диска4
20hОбщее число секторов в разделе4
24hНомер дисковода. Первый жёсткий диск имеет обозначение 80h, второй 81h и т.д.2
26hРасширенная загрузочная сигнатура (29h)1
27hСерийный номер носителя данных4
2BhНаименование носителя данных11
36hНазвание FAT (FAT16)8
3EhИсполняемый код448
1FEhСигнатура (55h AAh)2

Записи FAT

Каждая запись имеет размер 2 байта, а её позиция соответствует кластеру в области данных.

Запись содержит в себе либо номер следующего кластера файла, либо состояние текущего кластера.

Рис. 1. Записи FAT

Обозначения:

0000Неиспользуемый кластер
от 1 до количества кластеровНомер кластера со следующей частью файла
FFFF0h - FFFF6Зарезервированный кластер
FFF7Испорченный кластер
FFF8h - FFFFhКонец файла (эта позиция соответствует последнему кластеру файла )

В данном примере файл "HaloWelt.txt" начинается в кластере 05h. В FAT-таблице на позиции 05h стоит значение FFFFh, то есть файл "HaloWelt.txt" не нуждается в следующем кластере. В области данных в кластере 5h должен находиться текст файла.

Файл "Format.exe" начинается в кластере 6h и занимает 3 последовательных кластера.

Файл "Zerstuke.exe" начинается в кластере Ch и занимает 3 кластера в различных местах носителя данных.

Кластер 9h отмечен как "испорченный".

Первые 2 позиции в FAT зарезервированы, но в области данных данные начинаются с кластера 0. Поэтому кластер в области данных = (номер кластера в FAT) - 2.

На приведённой выше иллюстрации это не учтено для упрощения понимания структуры.

Записи каталога

АдресРазмер, байтовЗначение
0h8Имя файла
8h3Расширение
0Bh1Свойства файла (00ARSHDV)
00: зарезервированные биты
A: бит "архивный"
R: бит "только для чтения"
S: бит "системный"
D: бит "каталог"
V: бит "том"
16h2Время
18h2Дата
1Ah2Первый кластер
1Ch4Размер

Область данных (кластер 0)

Данные файла начинаются в соответствующем кластере без предварительного предупреждения. Если последний кластер не полон, оставшиеся байты имеют значение 00h. Таким образом, если файл содержит только 1 байт, этот файл займёт 1 Кбайт памяти (если размер кластера равен двум секторам). Оставшиеся 1023 байта кластера будут содержать нули. Чтобы найти последний байт файла, нужно взять величину файла из позиции записи каталога 1Ch (4 байт) и вычесть из него значение (количество кластеров файла - 1)*размер кластера.

Для жёсткого диска:

Главная загрузочная запись создаётся с помощью fdisk.exe.

Загрузочная запись тома создаётся с помощью format.exe.

При дефрагментации данных кластеры файла присоединяются последовательно друг к другу (если это конечно возможно).

Scandisk.exe сравнивает копии таблиц FAT и проверяет, совпадает ли размер файла с количеством кластеров. Кластер также не может принадлежать двум файлам или два раза появляться в файле.

Программа-пример

Программа-пример с комментариями и описанием основных функций (с сайта автора).



© PIClist-RUS (piclist.ru), 2007 г.

PIClist RUS (piclist.ru) © 2008
все права сохранены. перепечатка статей и переводов с данного сайта запрещена.