Физическая организация файловой системы FAT

Как уже отмечалось, аббревиатура FAT (file allocation table) расшифровывается как «таблица размещения файлов». Файловая система FAT поддерживает всего два типа файлов: обычный файл и каталог.

Структура раздела FAT. Логический раздел диска, отформатированный под файловую систему FAT, состоит из следующих областей (рис. 7.11).

· Загрузочный сектор – содержит программу начальной загрузки операционной системы. Вид этой программы зависит от типа операционной системы, которая будет загружаться из этого раздела.

· Основная копия FAT – содержит информацию о размещении файлов и каталогов на диске.

· Резервная копия FAT.

· Корневой каталог состоит из записей, содержащих информацию о файлах и каталогах, хранящихся на диске.

Каждая запись в корневом каталоге занимает 32 байта и имеет следующий формат (см. рис. 7.1, а):

- имя файла (8 байт);

- расширение файла (3 байта);

- атрибуты файла (1 байт);

- резервное поле (10 байт);

- время создания (2 байта);

- дата создания (2 байта);

- номер первого кластера – вход в FAT (2 байта);

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

Байт атрибутов файла содержит 6 указателей: 5 – архив; 4-3 – метка тома; 2 – системный файл; 1 – скрытый; 0 – только для чтения.

*Сразу после форматирования раздела (диска) корневой каталог пуст. При создании файла или каталога его имя и другие перечисленные выше сведения заносится в корневой каталог, после удаления – стираются из этого каталога. Визуальное отображение этого можно увидеть в окне программы-коммандера, например, для дискеты.

· Область данных – предназначена для размещения всех файлов и всех каталогов, кроме корневого каталога. FAT распределяет память только из этой области.

Область данных поделена на кластеры. Кластер представляет собой один или несколько смежных секторов в области данных. Кластер – это минимальная адресуемая единица дисковой памяти, выделяемая файлу.

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

Для указания номера кластера используются индексный указатель, который представляет собой битовое слово 2n. Чем больше n, тем большее число кластеров может адресоваться файловой системой. Различают файловые системы FAT12 (n=12), FAT16 (n=16) и FAT32 (n=32).

Количество индексных указателей (2n) в таблице FAT (как основной, так и резервной копии) равно количеству кластеров области данных. Между кластерами и индексными указателями имеется однозначное соответствие – нулевой указатель соответствует нулевому кластеру и т. д. (индексный указатель имеет такой же номер, как и у кластера).

Физическая организация файловой системы FAT - student2.ru
Рис. 7.11. Физическая структура файловой системы FAT

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

- кластер свободен (не используется);

- кластер используется файлом и не является последним кластером файла; в этом случае индексный указатель содержит номер следующего кластера файла;

- последний кластер файла;

- дефектный кластер;

- резервный кластер.

Функционирование FAT. В исходном состоянии (после форматирования) все кластеры раздела свободны и все индексные указатели (кроме тех, которые соответствуют резервным и дефектным блокам) принимают значение «кластер свободен».

При размещении файла ОС просматривает FAT, начиная с начала, и ищет первый свободный индексный указатель. После его обнаружения в поле записи каталога «номер первого кластера» фиксируется номер этого указателя. В кластер с этим номером записываются данные файла, он становится первым кластером файла. Если файл умещается в одном кластере, то в указатель, соответствующий данному кластеру, заносится специальное значение «последний кластер файла». Если же размер файла больше одного кластера, то ОС продолжает просмотр FAT и ищет следующий указатель на свободный кластер. После его обнаружения в предыдущий указатель заносится номер этого кластера, который теперь становится следующим кластером файла. Процесс повторяется до тех пор, пока не будут размещены все данные файла. Так создается связный список всех кластеров файла. Кроме номера первого кластера в соответствующие поля каталога записываются имя файла, расширение и другие сведения.

При чтении механизм доступа к файлам аналогичен. В корневом каталоге считывается номер первого кластера файла – точка входа в FAT. Далее ОС последовательно считывает файл, пока не встретит маркер, обозначающий последний кластер файла.

В начальный период после форматирования файлы будут размещаться в последовательных кластерах области данных. По мере удаления и записи файлов область данных становится похожей на лоскутное одеяло, где области свободных кластеров перемежаются с занятыми кластерами. Файлы, хранящиеся в различных областях диска, называют фрагментированными, а в одной области – непрерывными. Фрагментации способствует используемый алгоритм выбора в качестве первого кластера файла первого от начала FAT свободного индексного указателя. (На диске есть и большие области идущих подряд свободных кластеров, где файл мог бы уместиться целиком.)

Выбор размера кластера. Каждый файл занимает целое число кластеров, следовательно, чем больше размер кластера, тем менее эффективно будет использоваться дисковое пространство. Во-первых, даже самому маленькому файлу будет выделен целый кластер (например, файл объемом 480 байт будет занимать на диске кластер в 32 Кб). Во-вторых, у файлов, занимающих несколько кластеров, в среднем 50 % пространства будет теряться в последнем не до конца заполненном кластере.

Размер кластера выбирается из компромиссных соображений. Для уменьшения потерь дискового пространства из-за фрагментации файла желательно кластеры делать небольшими, а для сокращения объема адресной информации и повышения скорости обмена наоборот – чем больше, тем лучше. Размер кластера кратен размеру физического сектора и в зависимости от размера раздела FAT составляет от 1 до 128 секторов (от 512 байт до 64 Кбайт).

Существует несколько разновидностей FAT, отличающихся разрядностью индексных указателей, которая и используется в качестве условного обозначения: FAT12, FAT16 и FAT32. В файловой системе FAT12 используются 12-разрядные указатели, что позволяет поддерживать 4096 кластеров в области данных диска, в FAT16 – 16-разрядные указатели (65 536 кластеров) и в FAT32 – 32-разрядные (4,3 миллиарда кластеров). Когда говорят просто FAT, чаще всего подразумевают FAT16.

Поскольку число кластеров, которое может адресоваться файловой системой, равно 2n, минимальный размер кластера будет зависеть от объема раздела (объем раздела / 2n). Чем больше размер раздела диска, тем больше размер кластера. Размер кластера устанавливается автоматически самой операционной системой (табл. 7.1) или задается вручную при форматировании диска.

Таблица 7.1. Типичный размер кластера по умолчанию в Windows

Размер раздела Размер кластера в FAT16 Размер кластера в FAT32 Размер кластера в NTFS
До 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,024 Гб 16 Кб 4 Кб 1 КБ
1,025-2 Гб 32 Кб 4 Кб 2 Кб
2-4 Гб 64 Кб 4 Кб 4 Кб
4-8 Гб Не поддерживается 4 Кб 4 Кб
8-16 Гб Не поддерживается 8 Кб 4 Кб
16-32 Гб Не поддерживается 16 Кб 4 Кб
32 Гб-2 Тб Не поддерживается 32 Кб 4 Кб

* По другим данным

В гибких дисках FAT кластер состоит из одного сектора (512 байт), в жестких дисках FAT16 – до 128 секторов (64 Кб). Из приведенных данных видно, что FAT32 более эффективна, поскольку, при том же объеме раздела использует меньший размер кластера. Чтобы не использовать кластеры более 4 Кбайт, FAT12 применяется на дисках объемом не более 16 Мбайт. Windows использует FAT12 как формат 3,5-дюймовых дискет, способных хранить до 1,44 Мб данных. FAT16 целесообразна для дисков с объемом не более 512 Мбайт. Для больших дисков лучше подходит FAT32, которая способна использовать кластеры 4 Кбайт при работе с дисками до 8 Гбайт и только для дисков большего объема начинает использовать 8, 16 и 32 Кбайт.

В флэш-дисках наряду с FAT используются и другие файловые системы.

Максимальный размер раздела FAT16 ограничен 4 Гбайт(216 кластеров по 64 Кбайт). FAT32 использует 32-разрядные идентификаторы кластеров, но при этом резервирует старшие 4 бита, так что эффективный размер идентификатора кластера составляет 28 бит, т. е. максимальный размер раздела превышает 8,5 Тбайт (228 кластеров по 32 Кбайт).

Таблица FAT при фиксированной разрядности индексных указателей имеет переменный размер, зависящий от объема области данных диска.

Надежность хранения данных.При удалении файла из файловой системы FAT в первый байт соответствующей записи каталога заносится специальный признак, свидетельствующий о том, что эта запись свободна, а во все индексные указатели файла заносится признак «кластер свободен». Остальные данные в записи каталога, в том числе номер первого кластера файла, остаются нетронутыми, что оставляет шансы для восстановления ошибочно удаленного файла с помощью специальных утилит.

Резервная копия FAT синхронизируется с основной копией при любых операциях с файлами, поэтому резервную копию нельзя использовать для отмены ошибочных действий пользователя, выглядевших для системы корректными. Резервная копия может быть полезна только в том случае, когда секторы основной памяти оказываются физически поврежденными и не читаются.

Используемый в FAT метод хранения адресной информации о файлах не отличается высокой надежностью – при разрыве списка индексных указателей в одном месте, например из-за сбоя в работе ОС по причине помех, теряется информация обо всех последующих кластерах файла.

Файловые системы FAT12 и FAT16 использовались в операционных системах MS-DOS и Windows 3.x. В современных ОС из-за постоянно растущих объемов жестких дисков и повышающихся требований к надежности, применяются другие файловые системы, в частности FAT32 (впервые появившаяся в Windows 95 OSR2).

Наши рекомендации