Пример обращения к файлу в файловой системе Unix
В мире UNIX существует несколько разных видов файловых систем со своей структурой внешней памяти. Наиболее известны традиционная файловая система UNIX System V (s5) и файловая система семейства UNIX BSD (ufs). Файловая система s5 состоит из четырех секций (рисунок a). В файловой системе ufs на логическом диске (разделе реального диска) находится последовательность секций файловой системы (см. рисунок b).
Назначение каждой области диска.
Boot-блок программу первоначального запуска ОС UNIX. В файловых системах s5 реально используется boot-блок только корневой файловой системы. В дополнительных файловых системах эта область присутствует, но не используется.
Суперблок – содержит основные данные о файловой системе и ее размещении на диске. К этим данным относятся:
- размер дискового пространства, доступного файловой сис-
теме (в блоках);
- число блоков, зарегистрированных для i-узлов;
- имя файловой системы;
- имя тома;
- время последнего изменения;
- время последнего резервного копирования (back up);
- ссылка на список свободных блоков;
- ссылка на список свободных i-узлов.
В файловых системах ufs для повышения устойчивости поддерживается несколько копий суперблока (как видно из рисунка b, по одной копии на группу цилиндров). Каждая копия суперблока имеет размер 8196 байт, и только одна копия суперблока используется при монтировании файловой системы (см. ниже). Однако, если при монтировании устанавливается, что первичная копия суперблока повреждена или не удовлетворяет критериям целостности информации, используется резервная копия.
Блок группы цилиндров содержит число i-узлов, специфицированных в списке i-узлов для данной группы цилиндров, и число блоков данных, которые связаны с этими i-узлами. Размер блока группы цилиндров зависит от размера файловой системы. Для повышения эффективности файловая система ufs старается размещать i-узлы и блоки данных в одной и той же группе цилиндров.
Список i-узлов (ilist) содержит список i-узлов, соответствующих файлам данной файловой системы. Максимальное число файлов, которые могут быть созданы в файловой системе, определяется числом доступных i-узлов. В i-узле хранится информация, описывающая файл: режимы доступа к файлу, время создания и последней модификации, идентификатор пользователя и идентификатор группы создателя файла, описание блочной структуры файла и т.д.
Блоки данных - в этой части файловой системы хранятся реальные данные файлов. В случае файловой системы ufs все блоки данных одного файла пытаются разместить в одной группе цилиндров. Размер блока данных определяется при форматировании файловой системы командой mkfs и может быть установлен в 512, 1024, 2048, 4096 или 8192 байтов
Файловая система Unix представляет собой иерархическую структуру каталогов и файлов, начинающуюся в корневом каталоге. Файловая система располагается на устройстве, которое является, обычно, магнитным диском того или иного типа. Если диск достаточно велик, он может быть разбит на несколько "логических" дисков; тогда на каждом логическом диске может быть размещена отдельная файловая система.
Имена файлов могут содержать до 14 символов, включающих в себя любые символы ASCII, кроме косой черты (использовавшейся в качестве разделителя компонентов пути) и символа NUL (использовавшегося для дополнения имен короче 14 символов). Символ NUL обозначается байтом 0.
Каталог UNIX содержит по одной записи для каждого файла этого каталога. Каждая каталоговая запись максимально проста, так как в системе UNIX используется схема i-узлов (см. рис). Каталоговая запись состоит всего из двух полей: имени файла (14 байт) и номера i-узла для этого файла (2 байт), как показано на рис. 6.33. Эти параметры ограничивают количество файлов в файловой системе числом 64 К (65536).
В i-узле системы UNIX содержат следующие атрибуты:
- информация о правах доступа к файлу;
- идентификатор владельца;
- идентификатор группы;
- тип файла (регулярный или файл устройства);
- размер файла;
- три указателя времени (создания, последнего доступа и последнего изменения;
- счетчик каталоговых записей, указывающих на этот i-узел.
Последнее поле необходимо для связей. При добавлении новой связи к i-узлу счетчик в i-узле увеличивается на единицу. При удалении связи счетчик в i-узле уменьшается на единицу. Когда значение счетчика достигает нуля, i-узел освобождается, а блоки диска, которые занимал файл, возвращаются в список свободных блоков.
Для учета дисковых блоков файла используется схема, показанная на рисунке. Каждый i-узел кроме заголовка содержит 13 указателей, для формирования списка блоков файла. Первые 10 блоков ссылаются непосредственно на блоки файлов. Поскольку блок минимально содержит 512 байтов, то этого достаточно для обработки файлов до 512*10=5120 байтов. Поэтому для небольших файлов вся необходимая информация содержится прямо в i-узле, считываемом с диска при открытии файла. Поскольку большая часть файлов Unix систем небольшого размера, скорость работы с такими файлами велика.
Если длина файла больше, чем 5120 байта, используется 11-й указатель i-узла, который ссылается на косвенный блок из 128 ссылок на блоки данных. Использование косвенного блока позволяет увеличить длину файла до величины 512*(10+128)=70656 байтов. Этот блок называетсякосвенным блоком
Если и этого недостаточно, то используется 12-й указатель i-узла, ссылающийся на дважды косвенный блок, содержащий 128 ссылок на косвенные блоки, которые в свою очередь ссылаются на блоки файла. Тогда максимальный размер файла увеличивается до величины 512*(10+128+128*128)=8459264 байтов.
Наконец, использование последнего, 13-го указателя на трижды косвенный блок из 128 ссылок на дважды косвенные блоки, дает предельную длину в файловой системе: 512*(10+128+128*128+128*128*128)=1082201088 байтов.
Другие версии системы UNIX могут отличаться количеством ссылок в i-узле, косвенных блоках и размером блока данных.
i-узел файловой системы UNIX
При открытии файла файловая система по имени файла находит его блоки на диске. Рассмотрим на примере открытие файла /usr/ast/mbox. В качестве примера будем использовать файловую систему UNIX, хотя основы алгоритма одинаковы для всех иерархических каталоговых систем. Сначала файловая система открывает корневой каталог. В системе UNIX его i-узел располагается в фиксированном месте диска. По этому i-узлу система определяет положение корневого каталога, который может находиться в любом месте диска, в данном примере — в блоке 1.
Затем файловая система считывает корневой каталог и ищет в нем первый компонент пути, usr, чтобы определить номер i-узла файла /usr. Определить местоположение i-узла несложно, так как для каждого из них предусмотрено фиксированное место на диске. По этому i-узлу файловая система находит каталог /usr и находит в нем следующий компонент, ast. Найдя описатель ast, файловая система получает i-узел для каталога /usr/ast. По этому i-узлу она получает доступ к самому каталогу, в котором ищет файл mbox. При этом i-узел файла mbox считывается в память и остается там, пока файл не будет закрыт. Процесс поиска проиллюстрирован на рисунке.
. Этапы поиска файла /usr/ast/mbox
Относительные пути файлов обрабатываются так же, как и абсолютные, с той разницей, что алгоритм начинает работу не с корневого, а с рабочего каталога. В каждом каталоге есть элементы «.» и «..», помещаемые в каталог в момент его создания. Элемент «.» содержит номер i-узла текущего каталога, а элемент «..» — номер i-родительского каталога.
Файловая система HPFS
Цель разработки HPFS
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|