48
3)
открытие файла. Перед использованием файла процесс должен его
открыть. Цель системного вызова - разрешить системе проанализировать
атрибуты файла и проверить права доступа к нему, а также считать в
оперативную память список адресов блоков файла для быстрого доступа к
его данным. Открытие файла является процедурой создания
дескриптора
или управляющего блока файла;
4)
закрытие файла. При завершении работы с
файлом его атрибуты и
адреса блоков на диске больше не нужны, поэтому файл нужно закрыть,
чтобы освободить место во внутренних таблицах файловой системы;
5)
позиционирование;
6)
чтение данных из файла;
7)
запись данных в файл с текущей позиции и т.д.
Способы выполнения последовательности действий над файлами:
1) для каждой операции выполняются как универсальные, так и
уникальные действия (
схема stateless);
2) универсальные действия выполняются в
начале и в конце
последовательности операций, а для каждой промежуточной операции
выполняются только уникальные действия.
Большинство ОС использует второй способ, более экономичный и
быстрый. Первый способ более устойчив к сбоям, поскольку результаты
каждой операции становятся независимыми от результатов предыдущей
операции, поэтому он иногда применяется в распределенных файловых
системах (например, Sun NFS).
Эффективное управление файлами подразумевает наличие в
системе
четкой
логической структуры. Все современные файловые системы
поддерживают
многоуровневое именование файлов за счет наличия во
внешней памяти дополнительных файлов со специальной структурой -
каталогов (или
директорий). Каждый каталог содержит список подкаталогов
и/или файлов, содержащихся в данном каталоге. Каталоги имеют один и тот
же внутренний формат, где каждому файлу соответствует одна запись в файле
директории. Число директорий зависит от системы. В ранних ОС имелась
только одна корневая директория, затем появились директории для
пользователей (по одной директории на пользователя). В современных ОС
используется произвольная структура
дерева директорий. Таким образом,
файлы на диске образуют иерархическую древовидную структуру.
Существует несколько эквивалентных
способов изображения дерева.
Наиболее распространена структура
перевернутого дерева, где верхнюю
вершину называют
корнем. Если элемент дерева не может иметь потомков, он
называется
терминальной вершиной или
листом (файлом).
Нелистовые
вершины - справочники или каталоги содержат списки листовых и нелистовых
вершин. Путь от корня к файлу
однозначно определяет файл. Внутри одного
каталога имена листовых файлов уникальны. Имена файлов, находящихся в
разных каталогах, могут совпадать. Для того, чтобы однозначно определить
файл по его имени (избежать коллизии имен), принято именовать файл так
49
называемым
абсолютным или
полным именем (pathname), состоящим из
списка имен вложенных каталогов, по которому можно найти путь от корня к
файлу плюс имя файла в каталоге, непосредственно содержащем данный
файл. То есть полное имя включает цепочку имен -
путь к файлу, например,
/usr/games/doom. Такие имена уникальны. Использование древовидных
каталогов минимизирует сложность назначения уникальных имен.
Указывать полное имя не всегда удобно, поэтому применяют другой
способ задания имени -
относительный путь к файлу. Он использует
концепцию рабочей или текущей директории, которая обычно входит в состав
атрибутов процесса, работающего с данным файлом. Тогда на файлы в такой
директории можно ссылаться только по имени, при этом поиск файла будет
осуществляться в рабочем каталоге.
Для получения доступа к файлу и локализации его блоков система
должна выполнить навигацию по каталогам. Отклонение от типовой
обработки компонентов pathname может возникнуть в том случае, когда этот
компонент является не обычным каталогом с
соответствующим ему
индексным узлом и списком файлов, а служит точкой
связывания (точкой
монтирования) двух файловых архивов.
В современных ОС принято разбивать диски на
логические диски,
иногда называемые
разделами (partitions). Диск содержит иерархическую
древовидную структуру, состоящую из набора файлов и директорий. В
некоторых системах управления файлами требуется, чтобы каждый архив
файлов целиком располагался в
одном разделе. В этом случае полное имя
файла начинается с имени дискового устройства, на котором установлен
соответствующий диск (буквы диска). Например, c:\util\nu\ndd.exe. Такой
способ именования используется в файловых системах DEC и Microsoft.
Как и в случае с файлами, система обязана обеспечить пользователя
набором операций, необходимых для работы с директориями, реализованных
через системные вызовы. Несмотря на то, что директории - это файлы, логика
работы с ними отличается от логики работы с обычными файлами и
определяется природой этих объектов, предназначенных для поддержки
структуры файлового архива. Совокупность системных вызовов для
управления директориями зависит от особенностей конкретной ОС.
Наличие в
системе многих пользователей предполагает организацию
контролируемого доступа к файлам. Выполнение любой операции над
файлом должно быть разрешено только в случае наличия у пользователя
соответствующих привилегий. Основной подход к защите файлов от
несанкционированного использования - связать с каждым файлом или
директорией
список прав доступа (access control list), где перечислены имена
пользователей и типы разрешенных для них
способов доступа к файлу.
Основная проблема реализации данного способа - список может быть
длинным. Чтобы разрешить всем пользователям читать файл, необходимо
всех их внести в список.