
- •Файловая система
- •Имена файлов
- •Структура файлов
- •Типы и атрибуты файлов
- •Доступ к файлам
- •Операции над файлами.
- •Директории. Логическая структура файлового архива.
- •Операции над директориями
- •Защита файлов.
- •Контроль доступа к файлам
- •Списки прав доступа
- •Физическая структура файловой системы. "Геометрия диска"?
- •2.3.2. Разделы диска и таблица разбиения диска.
- •Методы выделения дискового пространства
- •Общая структура файловой системы
Доступ к файлам
Для использования информации, хранимой в файлах, она должна быть считана в память компьютера.
Есть несколько способов доступа к файлам: 1. последовательный (модель ленты). Записи считывались в порядке поступления. Текущая позиция считывания могла быть возвращена к началу файла (rewind).
2. прямой (random). Для определения места, с которого надо начинать чтение используются два способа: с начала, или с текущей позиции, которую дает операция seek. Не все системы поддерживают оба (последовательный и прямой) метода доступа. Последовательный доступ легко эмулировать при помощи прямого, однако реализация прямого доступа через последовательный была бы очень неэффективной.
3. конструирование
индекса
файла (базируется на прямом методе
доступа). Для поиска записи вначале
происходит обращение к индексу, где
находится указатель на нужную
запись.
Предположим, что имеется
большой файл, содержащий разнообразные
сведения о студентах, состоящих из
записей с несколькими полями, и возникает
задача организации быстрого поиска по
одному из полей, например по фамилии
студента.
Рис. 11.2 Пример организации индекса для последовательного файла
Операции над файлами.
Операционная система должна предоставить в распоряжение пользователя набор операций для работы с файлами, реализованных через системные вызовы. Чаще всего при работе с файлом пользователь выполняет не одну, а несколько операций. Во-первых, нужно найти данные файла и его атрибуты по его символьному имени, во-вторых, считать необходимые атрибуты файла в отведенную область оперативной памяти и проанализировать права пользователя на выполнение требуемой операции. Затем выполнить операцию, после чего освободить занимаемую данными файла область памяти. Рассмотрим в качестве примера основные файловые операции ОС Unix:
Create. Создание файла, не содержащего данных. Смысл данного вызова - объявить, что файл существует и присвоить ему ряд атрибутов.
Delete. Удаление файла и освобождение занятого им дискового пространства.
Open. Перед использованием файла процесс должен его открыть. Цель данного системного вызова разрешить системе проанализировать атрибуты файла и проверить права доступа к файлу, а также считать в оперативную память список адресов блоков файла для быстрого доступа к его данным.
Close. Если работа с файлом завершена, его атрибуты и адреса блоков на диске больше не нужны. В этом случае файл нужно закрыть, чтобы освободить место во внутренних таблицах файловой системы.
Seek. Дает возможность специфицировать место внутри файла, откуда будет производиться считывание (или запись) данных, то есть задать текущую позицию.
Read. Чтение данных из файла. Обычно это происходит с текущей позиции. Пользователь должен задать объем считываемых данных и предоставить буфер для них.
Write. Запись данных в файл с текущей позиции. Если текущая позиция находится в конце файла, его размер увеличивается, в противном случае запись осуществляется на место имеющихся данных, которые, таким образом, теряются.
Get attributes. Предоставляет процессам нужные им сведения об атрибутах файла. В качестве примера можно привести, утилиту make, которая использует информацию о времени последней модификации файлов.
Set attributes. Дает возможность пользователю установить некоторые атрибуты. Наиболее очевидный пример - установка режима доступа к файлу.
Rename. Возможность переименования файла создает дополнительные удобства для пользователя. Данная операция может быть смоделирована копированием данного файла в файл с новым именем и последующим его удалением.
Существует два способа выполнить последовательность действий над файлами:
В первом случае для каждой операции выполняются как универсальные, так и уникальные действия (схема stateless). Например, последовательность операций может быть такой: open, read1, close, … open, read2, close, … open, read3, close. Альтернативный способ, это когда универсальные действия выполняются в начале и в конце последовательности операций, а для каждой промежуточной операции выполняются только уникальные действия. В этом случае последовательность вышеприведенных операций будет выглядеть так: open, read1, … read2, … read3, close. Большинство ОС использует второй способ, как более экономичный и быстрый. Первый способ более устойчив к сбоям, поскольку результаты каждой операции становятся независимыми от результатов предыдущей операции, поэтому он иногда применяется в распределенных системах (например, Sun NFS).