2. Файловая система fat
Как мы уже отмечали, аббревиатура FAT (file allocation table) расшифровывается как «таблица размещения файлов». Этот термин относится к линейной табличной структуре со сведениями о файлах – именами файлов, их атрибутами и другими данными, определяющими местонахождение файлов (или их фрагментов) в среде FAT. Элемент FAT определяет фактическую область диска, в которой хранится начало физического файла.
В файловой системе FAT логическое дисковое пространство любого логического диска делится на две области: системную область и область данных.
Системная область логического диска создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой. Область данных логического диска содержит файлы и каталоги, подчиненные корневому. Она, в отличие от системной области, доступна через пользовательский интерфейс DOS.
Системная область состоит из следующих компонентов, расположенных в логическом адресном пространстве подряд:
загрузочной записи (boot record);
зарезервированных секторов (reserved sector);
таблицы размещения файлов (file allocation table);
корневого каталога (root derectory).
Таблица размещения файлов является очень важной информационной структурой. Можно сказать, что она представляет собой карту (образ) области данных, в которой описывается состояние каждого участка области данных. Область данных разбивают на так называемые кластеры. Кластер представляет собой один или несколько смежных секторов в логическом дисковом адресном пространстве (точнее – только в области данных). В таблице FAT кластеры, принадлежащие одному файлу (некорневому каталогу), связываются в цепочки. Для указания номера кластера в системе управления файлами FAT -16 используется 16-битовое слово, следовательно, можно иметь до 216 = 65536 кластеров (с номерами от 0 до 65535).
Кластер – это минимальная адресуемая единица дисковой, памяти, выделяемая файлу (или некорневому каталогу). Файл или каталог занимает целое число кластеров. Последний кластер при этом может быть задействован не полностью, что приведет к заметной потере дискового пространства при большом размере кластера. На дискетах кластер занимает один или два сектора, а на жестких дисках – в зависимости от объема раздела.
Емкость раздела, Мб |
Количество секторов в кластере |
Размер кластеров, Кб |
16-127 |
4 |
2 |
128-255 |
8 |
4 |
256-511 |
16 |
8 |
512-1023 |
32 |
16 |
1024-2047 |
64 |
32 |
Номер кластера всегда относится к области данных диска (пространству, зарезервированному для файлов и подкаталогов). Первый допустимый номер кластера всегда начинается с 2. Номера кластеров соответствуют элементам таблицы размещения файлов.
Логическое разбиение области данных на кластеры как совокупности секторов взамен использования одиночных секторов имеет следующий смысл: прежде всего, уменьшается размер самой таблицы FAT; уменьшается возможная фрагментация файлов; ускоряется доступ к файлу, так как в несколько раз сокращается длина цепочек фрагментов дискового пространства, выделенных для него.
Однако слишком большой размер кластера ведет к неэффективному использованию области данных, особенно в случае большого количества маленьких файлов; в среднем на каждый файл теряется около половины кластера. Из таблицы следует, что при размере кластера в 32 сектора (объем раздела – от 512 Мбайт до 1023 Мбайт), то есть 16 Кбайт, средняя вели чина потерь на файл составит 8 Кбайт, и при числе файлов в несколько тысяч потери могут составлять более 100 Мбайт. Поэтому в современных файловых системах (к ним, прежде всего, следует отнести HPFS, NTFS, FAT32 и некоторые другие, поддерживаемые ОС семейства Unix) размеры кластеров ограничиваются (обычно - от 512 байт до 4 Кбайт).
Основная идея файловой системы с использованием таблицы размещения файлов FAT иллюстрируется следующим рисунком.
Из этого рисунка видно, что файл с именем myfile.txt размещается начиная с восьмого кластера. Всего файл myfile.txt занимает 12 кластеров. Цепочка кластеров для нашего примера может быть записана следующим образом: 8, 9, 0А, 0В, 15, 16, 17, 19, 1А, 1В, 1С, 1D. Кластер с номером 18 помечен специальным кодом F7 как плохой (bad), он не может быть использован для размещения данных. При форматировании обычно проверяется поверхность магнитного диска, и те секторы, при контрольном чтении с которых происходили ошибки, помечаются в FAT как плохие. Кластер 1D помечен кодом FF как конечный (последний в цепочке) кластер, принадлежащий данному файлу. Свободные (незанятые) кластеры помечаются кодом 00; при выделении нового кластера для записи файла берется первый свободный кластер. Поскольку файлы на диске изменяются – удаляются, перемещаются, увеличиваются или уменьшаются, – то упомянутое правило выделения первого свободного кластера для новой порции данных приводит к фрагментации файлов, то есть данные одного файла могут располагаться не в смежных кластерах, а, порой, в очень удаленных друг от друга, образуя сложные цепочки. Естественно, что это приводит к существенному замедлению работы с файлами.
Так как FAT используется при доступе к диску очень интенсивно, она обычно загружается в ОЗУ (в буфера ввода/вывода или кэш) и остается там настолько долго, насколько это возможно.
В связи с чрезвычайной важностью FAT она обычно хранится в двух идентичных экземплярах, второй из которых непосредственно следует за первым. Обновляются копии FAT одновременно. Используется же только первый экземпляр. Если он по каким-либо причинам окажется разрушенным, то произойдет обращение ко второму экземпляру. Так, например, утилита проверки и восстановления файловой структуры scandisk.exe при обнаружении несоответствия первичной и резервной копии FAT предлагает восстановить главную таблицу, используя данные из копии.
Упомянутый корневой каталог отличается от обычного каталога тем, что он, помимо размещения в фиксированном месте логического диска, еще имеет и фиксированное число элементов. Для каждого файла и каталога в файловой системе хранится информация в соответствии со структурой, изображенной в табл.
Размер поля данных, байт |
Содержания поля |
11 |
Имя файла или каталога |
1 |
Атрибуты файла |
1 |
Резервное поле |
3 |
Время создания |
2 |
Дата создания |
2 |
Дата последнего доступа |
2 |
Зарезервировано |
2 |
Время последней модификации |
2 |
Дата последней модификации |
2 |
Номер начального кластера в FAT |
4 |
Размер файла |
Структура системы файлов является иерархической: элементом каталога может быть такой файл, который сам, в свою очередь, является каталогом.