Физическая организация FAT
Как мы уже отмечали, аббревиатура FAT (file allocation table) расшифровывается как «таблица размещения файлов».В файловой системе FAT логическое дисковое пространство любого логического диска делится на две области (рис. 6.11.): системную область и область данных.
Системная область логического диска создается и инициализируется при форматировании, а впоследствии обновляется при манипулировании файловой структурой. Область данных логического диска содержит файлы и каталоги, подчиненные корневому каталогу. Она, в отличие от системной области, доступна через пользовательский интерфейс. Системная область состоит из следующих компонентов, расположенных в логическом адресном пространстве подряд:
q загрузочной записи (boot record, BR) – содержит программу начальной загрузки операционной системы, которая будет загружаться из этого раздела;
q зарезервированных секторов (reserved sector, ResSecs);
q основной копии таблицы размещения файлов (FAT1) – содержит информацию о размещении файлов и каталогов на диске;
q резервной копии таблицы размещения файлов (FAT2);
q корневого каталога (root directory, RDir) - занимает фиксированную область размером в 32 сектора (16 Кбайт), что позволяет хранить 512 записей о файлах и каталогах, так как каждая запись каталога состоит из 32 байт.
Область данных предназначена для размещения всех файлов и всех каталогов, хранящихся в этом разделе диска, кроме корневого каталога.
Структура каталога
Корневой и некорневые каталоги имеют одинаковую структуру. Но RDir в отличие от других каталогов расположен в системной области логического диска, имеет ограниченный размер и не может быть фрагментированным.
Каталог состоит из последовательности 32-байт элементов. Каждый элемент каталога описывает входящий в него файл или каталог, содержит метку тома или является свободным. Отметим, что вся служебная информация о файле (каталоге), за исключением исчерпывающих сведений о его размещении в области данных логического диска, находится в одном из элементов того каталога, в котором он логически содержится. Сам же файл хранит только данные.
Элемент каталога состоит из восьми полей (Таблица 6.1.).
Поле имени содержит имя файла (каталога), дополненное при необходимости пробелами справа. Код в первом байте этого поля определяет описываемый данным элементом объект или состояние данного элемента каталога. Заметим, что тип объекта здесь задается лишь частично. Для полной его идентификации привлекается и поле атрибутов.
Таблица 6.1. Основные поля элемента каталога
Содержимое первого байта поля имени интерпретируется следующим образом:
00H - элемент каталога еще ни разу не использовался. Это обозначает, что все последующие элементы являются пустыми, а следовательно, можно прекратить поиск по каталогу с уверенностью в том, что весь каталог просмотрен. Такая техника сокращает время поиска в каталогах, но элементы, по каким - либо причинам оказавшиеся размещенными после первого пустого элемента, становятся недоступными;
05H - первый символ имени файла (каталога) имеет код Е5Н, т.е. является символом. Такая перекодировка используется потому, что код Е5Н применяется по другому назначению ;
2ЕН - элемент каталога описывает длинный каталог (ссылка на себя). Число 2ЕН является кодом символа "точка". Если и второй байт поля имени содержит код 2ЕН, то элемент каталога описывает родительский каталог (..) длинного каталога. Остальные байты полей имени и расширения содержат пробелы;
Е5Н - элемент используется файлом (каталогом), но уже освобождён. Этот код записывается при ударении существующего файла (каталога), но больше ни какие изменения в элемент каталога не вносится.
Любое другое содержимое первого байта поля имени интерпретируется как код первого символа в имени файла (каталога).
Поле расширения хранит расширение имени файла (реже - каталога), дополненное при необходимости пробелами справа (аналогично имени).
Имя и расширения можно сформировать практически из любых символов, но пользовательский интерфейс налагает свои ограничения. Напомним, что строчные буквы при вводе автоматически перекодируются в прописные. Чтобы избежать неприятностей, используйте для именования файлов (каталогов) только "надёжные" в этом плане символы в соответствии. Используя низкоуровнёвые редакторы диска, можно записать в поля имени и расширения любые символы.
В поле атрибутов каждый бит задаёт определённый атрибут файла или описывает представляемый данным элементом каталога объект. Структура этого поля показана в таблице 6.2. Если байт атрибутов содержит код 08Н, то поля имени, или расширения представляют метку тома. В случае, когда в байте атрибутов записан код 10Н, считается, что данный элемент каталога описывает каталог.
Таблица 6.2. Значения битов поля атрибутов
Атрибуты имеют следующее назначение:
q атрибут «архивный» (А — archive). Показывает, что файл был открыт программой таким образом, чтобы у нее была возможность изменить содержимое этого файла. DOS устанавливает этот разряд атрибута в состояние ON (включено) при открытии файла. Программы резервного копирования нередко устанавливают его в OFF (выключено) при выполнении резервного копирования файла. Если применяется подобная методика, то в следующую создаваемую по порядку резервную копию будут добавлены только файлы с данным разрядом, установленным в состояние ON;
q атрибут каталога (D — directory). Показывает, что данный элемент каталога указывает на подкаталог, а не на файл;
q атрибут тома (V — volume). Применяется только к одному элементу каталога в корневом каталоге. В нем, собственно, и хранится имя дискового тома. Этот атрибут также применяется в случае длинных имен файлов;
q атрибут «системный» (S — system). Показывает, что файл является частью операционной системы или специально отмечен подобным образом прикладной программой, что иногда делается в качестве составной части метода защиты от копирования;
q атрибут «скрытый» (Н — hidden). Сюда относятся, в частности, файлы с установленным в состояние ON атрибутом «системный» (S), которые не отображаются в обычном списке, выводимом по команде DIR;
q атрибут «только для чтения» (R — read only). Показывает, что данный файл не подлежит изменению. Разумеется, поскольку это лишь разряд байта, хранящегося на диске, то любая программа может изменить этот разряд, после чего DOS свободно разрешила бы изменение данного файла. Этот атрибут в основном используется для примитивной защиты от пользовательских ошибок, то есть он позволяет избежать неумышленного удаления или изменения ключевых файлов.
Поле времени содержит время создания (последней модификации) файла или время создания каталога.
Аналогично поле даты содержит дату создания (последней модификации) файла или дату создания каталога.
Поле со смещением 1АН содержит номер первого кластера, принадлежащего файлу (каталогу). Список остальных кластеров хранится в таблице FAT. Для файлов, которым не выделено места (например, для открытых и сразу закрытых файлов), это поле хранит код 0000Н.
Поле размера содержит длину файла (каталога), измеряют в байтах. Для текстовых файлов заданная таким образом длина иногда не совпадает с реальной длиной, определяемой по первому символу EOF в файле. Напомним: это происходит потому, что для повышения быстродействия некоторые текстовые редакторы осуществляет обмен с диском на логическом уровне не байтами (символами), а логическими записями, содержащими несколько байтов. Если последняя логическая запись является не полной, то реальная длина файла будет меньшей, чем задано в поле размера. К неприятностям такая не согласность обычно не приводит, так как DOS позволяет интерпретировать оба признака конца файла (переключателями /А и /В команды COPY). Ситуация, когда длина текстового файла является большей, чем указано в элементе каталога, считается ошибочной. Максимально возможный размер файла определяется DOS по содержимому FAT, т.е. исходя из наличия свободного пространства на диске.
Таблица размещения файлов
Таблица размещения файлов является очень важной информационной структурой. Можно сказать, что она представляет собой карту (образ) области данных, в которой описывается состояние каждого участка области данных. Область данных разбивают на так называемые кластеры. Кластер представляет собой один или несколько смежных секторов в логическом дисковом адресном пространстве (точнее — только в области данных). В таблице FAT кластеры, принадлежащие одному файлу (некорневому каталогу), связываются в цепочки. Для указания номера кластера в системе управления файлами FAT-12 используется 12-битовое слово, в
FAT-16 используется 16-битовое слово, следовательно, можно иметь до 216 = 65536 кластеров (с номерами от 0 до 65535), а в FAT-32 для нумерации кластеров используется только 28 бит.
Кластер — это минимальная адресуемая единица дисковой памяти, выделяемая файлу (или некорневому каталогу). Файл или каталог занимает целое число кластеров. Последний кластер при этом может быть задействован не полностью, что приведет к заметной потере дискового пространства при большом размере кластера. На дискетах кластер занимает один или два сектора, а на жестких дисках — в зависимости от объема раздела.
Номер кластера всегда относится к области данных диска (пространству, зарезервированному для файлов и подкаталогов). Первый допустимый номер кластера всегда начинается с 2. Номера кластеров соответствуют элементам таблицы размещения файлов.
Логическое разбиение области данных на кластеры как совокупности секторов взамен использования одиночных секторов имеет следующий смысл: прежде всего, уменьшается размер самой таблицы FAT; уменьшается возможная фрагментация файлов; ускоряется доступ к файлу, так как в несколько раз сокращается длина цепочек фрагментов дискового пространства, выделенных для него.
Однако слишком большой размер кластера ведет к неэффективному использованию области данных, особенно в случае большого количества маленьких файлов. Как мы только что заметили, в среднем на каждый файл теряется около половины кластера. Например, при размере кластера в 32 сектора (объем раздела — от 512 Мбайт до 1023 Мбайт), то есть кластер 16 Кбайт, средняя величина потерь на файл составит 8 Кбайт, и при числе файлов в несколько тысяч потери могут составлять более 100 Мбайт. Поэтому в современных файловых системах (к ним, прежде всего, следует отнести NTFS, FAT32 и некоторые другие, поддерживаемые ОС семейства UNIX) размеры кластеров ограничиваются (обычно — от 512 байт до 4 Кбайт). В FAT32 проблема решается за счет того, что собственно сама FAT в этой файловой системе может содержать до 228 кластеров. Наконец, заметим, что системы управления файлами, созданные для Windows 9x и Windows NT, могут работать с разделами размером до 4 Гбайт, на которых установлена система FAT, тогда как DOS, естественно, с такими разделами работать не сможет.
Достаточно наглядно идея файловой системы с использованием таблицы размещения файлов FAT проиллюстрирована рис. 6.12. Из этого рисунка видно, что файл с именем MYFILE.TXT размещается начиная с восьмого кластера. Всего файл MYFILE.TXT занимает 12 кластеров. Цепочка кластеров (chain) для нашего примера может быть записана следующим образом: 8, 9, 0А, 0В, 15, 16, 17, 19, 1А, 1В, 1C, 1D. Кластер с номером 18 помечен специальным кодом F7 как плохой (bad), он не может быть использован для размещения данных. При форматировании обычно проверяется поверхность магнитного диска, и те секторы, при контрольном чтении с которых происходили ошибки, помечаются в FAT как плохие. Кластер 1D помечен кодом FF как конечный (последний в цепочке) кластер, принадлежащий данному файлу. Свободные (незанятые) кластеры помечаются кодом 00; при выделении нового кластера для записи файла берется первый свободный кластер, начиная сначала области данных. Поскольку файлы на диске изменяются — удаляются, перемещаются, увеличиваются или уменьшаются, — то упомянутое правило выделения первого свободного кластера для новой порции данных приводит к фрагментации файлов, то есть данные одного файла могут располагаться не в смежных кластерах, а, порой, в очень удаленных друг от друга, образуя сложные цепочки. Естественно, что это приводит к существенному замедлению работы с файлами.
Так как FAT используется при доступе к диску очень интенсивно, она обычно загружается в ОЗУ (в буфера ввода/вывода или кэш) и остается там настолько долго, насколько это возможно.
В связи с чрезвычайной важностью FAT она обычно хранится в двух идентичных экземплярах, второй из которых непосредственно следует за первым. Обновляются копии FAT одновременно. Используется же только первый экземпляр. Если он по каким-либо причинам окажется разрушенным, то произойдет обращение ко второму экземпляру. Так, например, утилита проверки и восстановления файловой структуры ScanDisk из ОС Windows 9x при обнаружении несоответствия первичной и резервной копии FAT предлагает восстановить главную таблицу, используя данные из копии.
Дата добавления: 2020-10-25; просмотров: 438;