The design of the UNIX Operating System 69 страница



 

дексно-последовательным.

 

 

Рис. 11.1. Файл как последовательность записей переменной длины

 

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

 

ем индекса.

 

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


Основы операционных систем 103

ка по одному из полей, например по фамилии студента. Рис. 11.2 иллюстрирует решение данной пробле-мы - организацию метода доступа к файлу с использованием индекса.

 

 

Рис. 11.2. Пример организации индекса для последовательного файла

 

Следует отметить, что почти всегда главным фактором увеличения скорости доступа является избыточ-ность данных.

 

Способ выделения дискового пространства при помощи индексных узлов, применяемый в ряде ОС (Unix и некоторых других, см. следующую лекцию), может служить другим примером организации индекса.

 

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

 

Операции над файлами

 

Операционная система должна предоставить в распоряжение пользователя набор операций для работы с файлами, реализованных через системные вызовы. Чаще всего при работе с файлом пользователь выпол-няет не одну , а несколько операций. Во-первых, нужно найти данные файла и его атрибуты по символь-ному имени, во-вторых , считать необходимые атрибуты файла в отведенную область оперативной памя-ти и проанализировать права пользователя на выполнение требуемой операции . Затем следует выполнить операцию, после чего освободить занимаемую данными файла область памяти. Рассмотрим в качестве примера основные файловые операции ОС Unix [Таненбаум, 2002].

 

• Создание файла, не содержащего данных. Смысл данного вызова - объявить, что файл существует, и присвоить ему ряд атрибутов. При этом выделяется место для файла на диске и вносится запись в каталог.

 

• Удаление файла и освобождение занимаемого им дискового пространства.

• Открытие файла. Перед использованием файла процесс должен его открыть. Цель данного сис-темного вызова - разрешить системе проанализировать атрибуты файла и проверить права доступа к нему, а также считать в оперативную память список адресов блоков файла для быстрого доступа к его данным. Открытие файла является процедурой создания дескриптора или управляющего блока файла. Дескриптор (описатель) файла хранит всю информацию о нем. Иногда, в соответст-вии с парадигмой, принятой в языках программирования, под дескриптором понимается альтерна-тивное имя файла или указатель на описание файла в таблице открытых файлов, используемый при последующей работе с файлом . Например, на языке Cи операция открытия файла fd=open(pathname,flags,modes); возвращает дескриптор fd, который может быть задействован при выполнении операций чтения (read(fd,buffer,count); ) или записи.


Дата добавления: 2021-01-21; просмотров: 127; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!