Файловая система операционной системы UNIX
Операционная система UNIX представляет собой ядро многопользовательской операционной системы с разделением времени. Она дает пользователям возможность запускать свои программы, управляет периферийными устройствами и обеспечивает работу файловой системы. Работу операционной системы UNIX можно представить в виде функционирования множества взаимосвязанных процессов. При загрузке системы сначала запускается ядро (процесс 0), которое в свою очередь запускает командный интерпретатор shell (процесс 1). Взаимодействие пользователя с системой UNIX происходит в интерактивном режиме посредством командного языка. Оболочка операционной системы shell интерпретирует вводимые команды, запускает соответствующие программы (процессы), формирует и выводит ответные сообщения. Важной составной частью UNIX является файловая система, которая является сложной многопользовательской системой, так как в основе этой системы лежала операционная система MULTICS. Файловая система имеет иерархическую структуру, образующую дерево каталогов и файлов. Дерево начинается в корневом каталоге, с добавлением связей, формирующих направленный ациклический граф. Имена файлов могут содержать до 14 символов, включающих в себя любые символы ASCII, кроме косой черты (использовавшейся в качестве разделителя компонентов пути) и символа NUL (использовавшегося для дополнения имен короче 14 символов). Символ NUL обозначается байтом 0. Корневой каталог обозначается символом «/», путь по дереву каталогов состоит из имен каталогов, разделенных символом «/», например: / usrlinclude / sys. В каждый момент времени с любым пользователем связан текущий каталог, то есть местоположение пользователя в иерархической файловой системе. Каталог UNIX содержит по одной записи для каждого файла этого каталога. Каждая каталоговая запись проста, так как в системе UNIX используется схема i-узлов (рис. 3.5). Каталоговая запись состоит всего из двух полей: имени файла (14 байт) и номера i-узла для этого файла (рис. 3.6). Каждый файл операционной системы UNIX может быть однозначно определен некоторой структурой данных, называемой описателем файла (дескриптором). Он содержит всю информацию о файле: тип файла, режим доступа, идентификатор владельца, размер, адрес файла, даты последнего доступа и последней модификации, дату создания и пр.
Обращение к файлу происходит по имени. Путь к файлу от корневого каталога называется полным именем файла. Если обращение к файлу начинается с символа «/», то считается, что указано полное имя файла и его поиск начинается с корневого каталога, в любом другом случае поиск файла начинается с текущего каталога. У любого файла может быть несколько имен. Фактически имя файла является ссылкой на файл, специфицированный номером описателя.
I-узлы системы UNIX (рис. 3.7) содержат атрибуты: размер файла, три указателя времени (создания, последнего доступа и последнего изменения), идентификатор владельца, номер группы, информацию о защите и счетчик каталоговых записей, указывающих на данный i -узел. При добавлении новой связи к i -узлу счетчик в i -узле увеличивается на единицу. При удалении связи счетчик в i -узле уменьшается на единицу. Когда значение счетчика достигает нуля, i -узел освобождается, а блоки диска, которые занимал файл, возвращаются в список свободных блоков. Для учета дисковых блоков файла используется обобщение схемы, позволяющее работать с очень большими файлами. Первые 10 дисковых адресов хранятся в самом i- узле. Для небольших файлов необходимая информация содержится прямо в i -узле, считываемом с диска при открытии файла. Для файлов большего размера один из адресов в i -узле представляет собой адрес блока диска, называемого одинарным косвенным блоком. Этот блок содержит дополнительные дисковые адреса. Если и этого недостаточно используется другой адрес в i -узле, называемый двойным косвенным блоком и содержащий адрес блока, в котором хранятся адреса однократных косвенных блоков. Если и этого мало, используется тройной косвенный блок. При открытии файла файловая система по имени файла находит его блоки на диске. Вначале файловая система открывает корневой каталог, i -узел которого располагается в фиксированном месте диска. По этому i -узлу система определяет положение корневого каталога, который может находиться в любом месте диска, например, в блоке 1. Затем файловая система считывает корневой каталог и ищет в нем первый компонент пути, чтобы определить номер i -узла файла. По этому i -узлу файловая система находит следующий каталог и находит в нем следующий компонент и т.д. Относительные пути файлов обрабатываются так же как и абсолютные, с той разницей, что алгоритм начинает работу не с корневого, а с рабочего каталога. Работа пользователя в системе начинается с того, что активизируется сервер терминального доступа getty (программа, организующая диалог работы с пользователем в многопользовательской операционной системе), который запускает программу login, запрашивающую у пользователя имя и пароль. Далее происходит проверка аутентичности пользователя (подлинности регистрации пользователя в системе) в соответствии с той информацией, которая хранится в файле /etc/passwd. В этом файле хранятся записи, содержащие: - регистрационное имя пользователя; - зашифрованный пароль; - идентификатор пользователя; - идентификатор группы; - информация о минимальном сроке действия пароля; - общая информация о пользователе; - начальный каталог пользователя; - регистрационный shell пользователя. Если пользователь зарегистрирован в системе и ввел правильный пароль, login запускает программу, указанную в /etc/passwd – регистрационный shell пользователя. Пользователь системы – это объект, обладающий определенными правами, определяющими возможность запуска программ на выполнение, а также владение файлами. Единственный пользователь системы, обладающий неограниченными правами – это суперпользователь или администратор системы. Система идентифицирует пользователей по идентификатору пользователя (UID – User Identifier). Каждый пользователь является членом одной или нескольких групп – списка пользователей, имеющих сходные задачи. Каждая группа имеет свой уникальный идентификатор группы (GID – Group Identifier) Принадлежность группе определяет совокупность прав, которыми обладают члены данной группы. Права пользователя UNIX – это права на работу с файлами. Файлы имеют двух владельцев: пользователя (user owner) и группу (group owner). Соответственно, атрибуты защиты файлов определяют права пользователя-владельца файла, права члена группы-владельца (g) и права всех остальных (о). В каждый момент времени с любым пользователем связан текущий каталог, то есть местоположение пользователя в иерархической файловой системе. Всякий файл операционной системы UNIX в соответствии с его типом может быть отнесен к одной из следующих групп: обычные файлы, каталоги, специальные файлы и каналы. Обычный файл представляет собой последовательность байтов. Никаких ограничений на файл системой не накладывается, и никакого смысла не приписывается его содержимому: смысл байтов зависит исключительно от программ, обрабатывающих файл. Каталог – это файл особого типа, отличающийся от обычного файла наличием структуры и ограничением по записи: осуществить запись в каталог может только ядро операционной системы UNIX. Каталог устанавливает соответствие между файлами (номерами описателей) и их локальными именами. Специальный файл – это файл, поставленный в соответствие некоторому внешнему устройству и имеющий специальную структуру. Его нельзя использовать для хранения данных как обычный файл или каталог, но над ним можно производить те же операции, что и над любым другим. При этом ввод/вывод информации в этот файл будет соответствовать вводу с внешнего устройства или выводу на него. Канал – это программное средство, связывающее процессы операционной системы UNIX буфером ввода/вывода. Например, запуск процессов в виде $процесс_1|процесс_2 означает, что стандартный вывод процесса_1 будет замкнут на стандартный ввод процесса_2. При этом сначала создается канал, а потом на выполнение одновременно запускаются оба процесса, и общее время их выполнения определяется более медленным процессом.
|