Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
К_Глава 9_Файловые системы.doc
Скачиваний:
91
Добавлен:
19.05.2015
Размер:
3.66 Mб
Скачать

4.“Сложные” файловые системы

Общие принципы сложных ФС

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

  • Наличие суперблока системы

  • Минимальная структура каталога

  • Наличие специальной структуры (битовая карта, bitmap) со списком свободных блоков

  • Увеличение числа системных структур данных за счет специальных таблиц (инодов, файловых записей и пр) с разнообразной информацией о файлах

  • Выделение дисковой памяти различными способами, уменьшающими внешнюю фрагментацию (отрезками, блоками)

  • Поддержка информационной безопасности, разграничение прав доступа к файлам

  • Средства восстановления ФС, использование журнальных ФС с регистрацией намерений

  • Поддержка больших дисков и пр. …

Обычно файловая система начинается с заголовка, или, как это называется в системах семейства Unix,суперблока (superblock).Суперблок хранит информацию о размерах дискового тома, отведенного под ФС, указатели на начало системных структур данных и другую информацию, зависящую от типа ФС. Например, для статических структур может храниться их размер. Часто суперблок содержит также магическое число – идентификатор типа файловой системы. Аналог суперблока существует даже вFAT– это так называемаязагрузочная запись(bootrecord).

Практически все современные ФС разделяют список свободных блоков и структуры, отслеживающие размещение файлов. Чаще всего вместо списка свободных блоков используется битовая карта, в которой каждому блоку соответствует один бит: свободен/занят.

Список блоков для каждого файла обычно связан с описателем, который, кажется естественно хранить в каталоге, но их, как правило, выносят в отдельные области, часто собранные в специальные области диска – таблицу инодов, метафайл и т.д. Такое решение уменьшает объем каталога и, соответственно, ускоряет поиск файла по имени. К тому же многие ФС сортируют записи в каталоге по имени файла, также с целью ускорения поиска. Понятно, что сортировка записей меньшего размера происходит быстрее.

Файловая система HPFS

В файловой системе HPFS, используемой вOS/2 иWindowsNT, каждая запись в каталоге содержит имя файла и указатель наfnode(файловую запись). Каталоги в этой ФС организованы в виде В-деревьев и отсортированы по именам файлов.

Файловая запись занимает один блок на диске и содержит список так называемых extent(«расширений») – (у этого термина нет приемлемого русского аналога. В переводах документации поOS/360 (OCEC) так и писали: экстент.). каждый экстент описывает непрерывную последовательность дисковых блоков, выделенных файлу. Он задает начальный блок такой последовательности и ее длину. Вместо списка свободных блоков используется битовая карта диска, в которой каждому блоку соответствует один бит: занят/свободен. Нужно отметить, что идея экстентов далеко не нова: аналогичная структура используется в некоторых версияхUnixс начала 80-х годов, а истоки этой идеи теряются в глубине 60-х.

Файловая запись обычно размещается перед началом первого экстента файла, хотя это не обязательно. Она занимает один блок (512 байт) и может содержать до десяти описателей экстентов (рис.11). кроме того, она содержит информацию о времени создания файла, его имени и расширенных атрибутах. Если для списка экстентов или расширенных атрибутов места не хватает, то для них также выделяются экстенты. В этом случае экстенты размещаются в виде В-дерева для ускорения поиска. Максимальное количество экстентов в файле не ограничено ничем, кроме размера диска.

Пользовательская программа может указать размер файла при его создании. В этом случае система сразу попытается выделить место под файл так, чтобы он занимал как можно меньше экстентов. Если программа не сообщила размера файла, используется значение по умолчанию. Фактически, HPFSразмещает место под файл по принципуworstfit(наименее подходящего), начиная выделение с наиболее непрерывного участка свободного пространства. В результате фрагментированными оказываются только те файлы, длина которых увеличивалась многократно или же те, которые создавались при почти заполненном диске. При нормальной работе файл редко занимает больше 3-4 экстентов.

Еще одно любопытное следствие применения стратегии worstfitзаключается в том, что пространство, освобожденное стертым файлом, обычно используется не сразу. Отмечались случаи, когда файл на активно используемом диске удавалось восстановить через несколько дней после стирания.

Экстенты открытых файлов и карта свободных блоков во время работы размещаются в ОЗУ поэтому производительность такой ФС в большинстве ситуации намного (в 1,5-2 раза и больше) выше, чем у FATс тем же объемом КЭШа, при вполне приемлемых потребностях в памяти и размере кластера 512 байт.

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

ФС Unix.Наиболее интересна структура файловых систем в ОС семействаUnix. В этих ФС каталог не содержит почти никакой информации о файле. Там хранится только имя файла и номер егоинода (i-node– по-видимому, сокращение отindexnode: индексная запись). Иноды всех файлов в данной ФС собраны в таблицу, которая так и называется: таблица инодов. В ранних версияхUnixтаблица инодов занимала фиксированное пространство в начале устройства; в современных файловых системах эта таблица разбита на участки, распределенные по диску.

Например, в файловой системе BSDUnixFFS(FastFileSystem–быстрая файловая система), которая вUnixSVR4 называется простоUFS(UnixFileSystem), диск разбит на группы цилиндров. Каждая группа цилиндров. Каждая группа цилиндров содержит копию суперблока, битовую карту свободных блоков для данного участка и таблицу инодов для файлов, расположенных в пределах этого участка(рис.12). такая распределенная структура имеет два преимущества.

  • Ускорение доступа к системным структурам данных. Когда системные данные расположены вблизи от блоков пользовательских данных, уменьшается расстояние, на которое перемещаются головки дисковода.

  • Повышенная устойчивость к сбоям носителя. При повреждении участка поверхности диска теряется только небольшая часть системных данных. Даже потеря суперблока не приводит к потере структуры файловой системы.

Инод хранит информацию о самом файле и его размещении на диске (рис.13).

  • Тип файла. Исследуя это поле, можно понять, является данный объект файлом данных или специальным файлом. В этом же поле закодированы права доступа к файлу.

  • Идентификаторы владельца файла и группы. Вместе с правами доступа эти два идентификатора образуют список контроля доступа файла.

  • Время: создания файла; последней модификации файла; последнего доступа к файлу.

  • Длина файла. Для специальных файлов это поле часто имеет другой смысл.

  • Идентификатор файловой системы, в которой расположен файл.

  • Количество связей этого файла.

Рис. 11. Каталог и файловая запись вHPFS.

суперблок

bitmap

Таблица инодов

Блоки данных

Копия суперблока

bitmap

Таблица инодов

Блоки данных

Копия суперблока

bitmap

Таблица инодов

Блоки данных

Рис.12

Каталог

. № инода

.. № инода

имя 1 № инода

имя 2 № инода

имя 3 № инода

свободно 0

имя 4 № инода

свободно 0

свободно 0

Таблица инодов

Structstat

Блок 1

Блок 2

косвенный блок

инод 2

….

И

Н

О

Д

Блоки данных

Блоки данных

Блоки данных

Блоки данных

Косвенный блок

Рис. 13. Каталоги и иноды файловых систем семействаUnix.

Структура, описывающая физическое размещение файла на диске, недоступна пользовательским программам. Собственно, формат этой структуры может быть очень разнообразен. Например, в файловой системе Veritasэто список элементов, похожий наHPFS; в файловых системахs5,XenixиFFSэто массив из 13 чисел, задающих номера физических блоков файла. Если файл вs5 содержит более десяти блоков (т.е. его длина больше 5 Кбайт), то предпоследние три указателя обозначают не блоки данных, а так называемыекосвенные блоки (indirectionblocks), в которых хранятся указатели на следующие блоки данных и, возможно, на следующие косвенные блоки.

Наиболее интересная особенность ФС семейства Unixсостоит в том, инод не содержит имени файла. С другой стороны, он содержит счетчик связей (link) – ссылок на этот файл из каталогов. Таким образом, на один и тот же инод можно ссылаться из различных каталогов или из одного каталога под разными именами (рис.14). Иными словами, один и тот же файл в этих ФС может иметь несколько различных имен. Именно это и имелось в виду, когда говорилось, что структура каталогов в ОСUnixне обязана быть деревом.

Это свойство предоставляет неоценимые возможности для организации иерархии каталогов, но имеет и некоторые оборотные стороны:

  1. создание нескольких связей для каталога потенциально опасно – оно может привести к возникновению кольца, в котором каталог является своим собственным подкаталогом. Отслеживать такую ситуацию сложно, поэтому разработчики ОС Unixзапретили создавать дополнительные имена каталогов.

  2. удаление файла превращается в проблему: чтобы удалить файл, нужно проследить все его связи. Поэтому UNIXне имеет средств для удаления файла, а обладает только системным вызовомunlink– удалить связь. Когда у файла не остается связей, он действительно удаляется. Этот подход вполне разумен, но также имеет неожиданную оборотную сторону: поскольку теперь стирание файла – это операция не над файлом, а над каталогом, то для удаления файла не нужно иметь никаких прав доступа к нему. Достаточно иметь право записи в каталог.

На практике, механизм защиты от стирания отдельных файлов предусмотрен – при установке в атрибутах каталога так называемого sticky bit(“липкий бит”), система запрещает стирать файлы, для которых вы не имеете права записи, но этот механизм не лишен недостатков.

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

Рис. 14.Жесткие связи вUnix.

Последнее обстоятельство резко уменьшает полезность жесткость связей для организации иерархии каталогов. Эта проблема была осознана еще в 70-е годы, и программисты из группы BSDпридумали интересное новое понятие –символическую связь (symbolic link)илиsymlink.

Символическая связь представляет собой специальный файл. Вместо блоков данных инод такого файла содержит текстовую строку – имя того файла, с которым создана связь (рис.15). это может быть файл из другой файловой системы, в том числе и из такой, которая сама по себе не поддерживает ни жестких дисков, ни символических связей, например, FAT,HPFSили файловый серверNowellNetware. Такого файла может и вообще не существовать , например, потому, что его уже удалили, или потому, что файловая система, в которой он находится, не смонтирована, или просто потому, что имя было задано неправильно. Тогда попытки открыть символическую связь будут завершаться неудачей с кодом ошибки «файла не существует». Естественным недостатком символических связей является их относительно низкая «дуракоустойчивость» (fool-tolerance): глупый пользователь может не распознавать ситуации, когда символическая связь указывает в никуда. Зато они обеспечивают полную свободу в размещении и именовании файлов.

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

Рис. 15. Символическая связь.

ФС NTFSподробно описана выше, в разделе «Физическая организация ФС».