Физическая организация FAT

 

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

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

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

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

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

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

 

Рис. 28. Физическая структура файловой системы FAT

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

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

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

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

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

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

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

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

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

Достаточно наглядно идея файловой системы с использованием таблицы разме­щения файлов FAT проиллюстрирована на рис. 29. Видно, что файл с именем MYFILE.TXT размещается начиная с восьмого кластера. Всего файл MYFILE.TXT занимает 12 кластеров. Цепочка кластеров для нашего приме­ра может быть записана следующим образом; 8, 9, 0А, 0В, 15, 16, 17, 19, 1А, 1В, 1C, 1D. Кластер с номером 18 помечен специальным кодом F7 как плохой (bad), он не может быть использован для размещения данных. При форматировании обычно проверяется поверхность магнитного диска, и те секторы, при контрольном чтении с которых происходили ошибки, помечаются в FAT как плохие. Кластер 1D помечен кодом FF как конечный (последний в цепочке) кластер, принадле­жащий данному файлу. Свободные (незанятые) кластеры помечаются кодом 00; при выделении нового кластера для записи файла берется первый свободный кластер. Поскольку файлы на диске изменяются – удаляются, перемещаются, увеличиваются или уменьшаются, – то упомянутое правило выделения первого свободного кластера для новой порции данных приводит к фрагментации фай­лов, т. е. данные одного файла могут располагаться не в смежных кластерах, а в очень удаленных друг от друга, образуя сложные цепочки. Естествен­но, что это приводит к существенному замедлению работы с файлами.

 

Рис. 29. Основная концепция FAT

 

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

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

Форматирование FAT12 обычно характерно только для небольших дисков объ­емом не более 16 Мбайт, чтобы не использовать кластеры более 4 Кбайт. По этой же причине считается, что FAT16 целесообразнее для дисков с объемом не более 512 Мбайт, а для больших дисков лучше подходит FAT32, которая способна ис­пользовать кластеры 4 Кбайт при работе с дисками объемом до 8 Гбайт и только для дисков большего объема начинает использовать 8, 16 и 32 Кбайт. Макси­мальный размер раздела FAT16 ограничен 4 Гбайт, такой объем дает 65536 кла­стеров по 64 Кбайт каждый, а максимальный размер раздела FAT32 практически не ограничен – 232кластеров по 32 Кбайт.

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

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

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

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

Файловые системы FAT12 и FAT16 оперировали с именами файлов, состоящи­ми из 12 символов по схеме “8.3”. В версии FAT16 операционной системы Win­dows NT был введен новый тип записи каталога – “длинное имя”, что позволяет использовать имена длиной до 255 символов, причем каждый символ длинного имени хранится в двухбайтном формате Unicode. Имя по схеме “8.3”, названное теперь коротким (не нужно путать его с простым именем файла, также называе­мого иногда коротким), по-прежнему хранится в 12-байтовом поле имени файла в записи каталога, а длинное имя помещается порциями по 13 символов в одну или несколько записей, следующих непосредственно за основной записью ката­лога. Каждый символ в формате Unicode кодируется двумя байтами, поэтому 13 символов занимают 26 байт, а оставшиеся 6 отведены под служебную инфор­мацию. Таким образом, у файла появляются два имени – короткое, для совмес­тимости со старыми приложениями, не понимающими длинных имен в Unicode, и длинное, удобное в использовании имя. Файловая система FAT32 также под­держивает короткие и длинные имена.

Файловые системы FAT12 и FAT16 получили большое распространение благо­даря их применению в операционных системах MS-DOS и Windows 3.х – самых массовых операционных системах первого десятилетия эры персональных ком­пьютеров. По этой причине эти файловые системы поддерживаются сегодня и другими ОС, такими, как UNIX, OS/2, Windows NT/2000 и Windows 95/98. Од­нако из-за постоянно растущих объемов жестких дисков, а также возрастающих требований к надежности эти файловые системы быстро вытесняются как сис­темой FAT32, впервые появившейся в Windows 95 OSR2, так и файловыми сис­темами других типов.