Сделай Сам Свою Работу на 5

Директории. Логическая структура файлового архива





Количество файлов на компьютере может быть большим. Отдельные системы хранят тысячи файлов, занимающие сотни гигабайтов дисково­го пространства. Эффективное управление этими данными подразумева­ет наличие в них четкой логической структуры. Все современные файло­вые системы поддерживают многоуровневое именование файлов за счет наличия во внешней памяти дополнительных файлов со специальной структурой — каталогов (или директорий).

Каждый каталог содержит список каталогов и/или файлов, содержа­щихся вданном каталоге. Каталоги имеют один и тот же внутренний фор­мат, где каждому файлу соответствует одна запись в файле директории (см., например, рис. 11.3).

Число директорий зависит от системы. В ранних ОС имелась только одна корневая директория, затем появились директории для пользователей (по одной директории на пользователя). В современных ОС используется произвольная структура дерева директорий.

 

Таким образом, файлы на диске образуют иерархическую древовид­ную структуру (см. рис. 11.4).

Рис. 11.4.Древовидная структура файловой системы

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



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

Внутри одного каталога имена листовых файлов уникальны. Имена файлов, находящихся в разных каталогах, могут совпадать. Для того что­бы однозначно определить файл по его имени (избежать коллизии имен), принято именовать файл так называемым абсолютным или полным именем (pathname), состоящим из списка имен вложенных каталогов, по которому можно найти путь от корня к файлу плюс имя файла в каталоге, непосред­ственно содержащем данный файл. То есть полное имя включает цепочку имен — путь к файлу, например \usr\games\doom. Такие имена уни­кальны. Компоненты пути разделяют различными символами: «/» (слэш) в Unix или обратными слэшем в MS-DOS (в Multics — «>»). Таким обра­зом, использование древовидных каталогов минимизирует сложность на­значения уникальных имен.



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

Для получения доступа к файлу и локализации его блоков система должна выполнить навигацию по каталогам. Рассмотрим для примера путь /usr/linux/progr. с. Алгоритм одинаков для всех иерархических систем. Сначала в фиксированном месте на диске находится корневая ди­ректория. Затем находится компонент пути usr, т. е. в корневой директо­рии ищется файл /usr. Исследуя этот файл, система понимает, что дан­ный файл является каталогом, и блоки его данных рассматривает как спи­сок файлов и ищет следующий компонент linux в нем. Из строки для linux находится файл, соответствующий компоненту usr/linux/. Затем на­ходится компонент progr. с, который открывается, заносится в таблицу открытых файлов и сохраняется в ней до закрытия файла.



Отклонение от типовой обработки компонентов pathname может возникнуть в том случае, когда этот компонент является не обычным ка­талогом с соответствующим ему индексным узлом и списком файлов, а служит точкой связывания (принято говорить «точкой монтирования») двух файловых архивов. Этот случай рассмотрен в следующей лекции.

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

Разделы диска. Организация доступа к архиву файлов

Задание пути к файлу в файловых системах некоторых ОС отличается тем, с чего начинается эта цепочка имен.

В современных ОС принято разбивать диски на логические диски (это низкоуровневая операция), иногда называемые разделами (partitions). Бы­вает, что, наоборот, объединяют несколько физических дисков в один ло­гический диск (например, это можно сделать в ОС Windows NT). Поэтому в дальнейшем изложении мы будем игнорировать проблему физического выделения пространства для файлов и считать, что каждый раздел пред­ставляет собой отдельный (виртуальный) диск. Диск содержит иерархи­ческую древовидную структуру, состоящую из набора файлов, каждый из которых является хранилищем данных пользователя, и каталогов или ди­ректорий (то есть файлов, которые содержат перечень других файлов, входящих в состав каталога), необходимых для хранения информации о файлах системы.

В некоторых системах управления файлами требуется, чтобы каж­дый архив файлов целиком располагался на одном диске (разделе диска). В этом случае полное имя файла начинается с имени дискового устройст­ва, на котором установлен соответствующий диск (буквы диска). Напри­мер, c:\util\nu\ndd.exe. Такой способ именования используется в файловых системах DEC и Microsoft.

В других системах (Multics) вся совокупность файлов и каталогов представляет собой единое дерево. Сама система, выполняя поиск файлов по имени, начиная с корня, требовала установки необходимых дисков.

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

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.