Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.doc
Скачиваний:
40
Добавлен:
30.04.2013
Размер:
16.33 Mб
Скачать

Архитектура vfs

Рассмотрим архитектуру VFS, представленную на рис. 3.9.

Большинство функций файловой системы реализовано (как и функций

других подсистем ядра) в виде динамически загружаемых модулей. Это

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

В состав виртуanьной файловой системы входят следующие блоки:

  • Модули драйверов физических устройств (Device Drivers), каждый из которых поддерживает контроллер конкретного физического устройства. Так как существует большое количество обслуживаемых устройств, то существует и большое количество драйверов к ним.

  • Модуль интерфейсов, независимых от устройств (Device Independent Interface), обеспечивает доступ Ко всем устройствам в системе.

  • Модуль логической файловой системы (Logical System) объединяет все устройства системы в единую виртуальную файловую систему.

  • Модуль системных интерфейсов, независимых от устройств (System Independent Interface), обеспечивает единый для всех файловых систем доступ к устройствам в системе. Этот модуль представляет все ресурсы физических устройств ОС, используя либо бит-ориентированный, либо байт-ориентированный интерфейсы.

  • Модуль внешнего системного интерфейса (System Саll lnterface) обеспечивает пользовательским процессам управление и доступ к файловой системе.

Интерфейсы файловой системы

Так же как и остальные подсистемы ядра, VFS поддерживает два вида интерфейсов: внешний интерфейс для обслуживания процессов пользова­теля и внутренний интерфейс для обеспечения взаимодействия с другими подсистемами. Внешний интерфейс обеспечивает для пользователя доступ файлам и каталогам. К основным файловым операциям ОС Unix [11] относятся:

  • Создание файла, не содержащего данных.

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

  • Открытие файла. Цель данного системного вызова - разрешить системе проанализировать атрибуты файла и проверить права доступа к нему и вернуть некоторый числовой параметр для пользовательского обращения к файлу (дескриптор или номер канала).

  • Закрытие файла и освобождение места во внутренних таблицах файловой системы.

  • Позиционирование. Дает возможность специфицировать место внутри файла, откуда будет производиться считывание (или запись) данных, то есть задать текущую позицию.

  • Чтение данных из файла с текущей позиции. Пользователь должен за­дать объем считываемых данных и предоставить для них буфер в оперативной памяти.

  • Запись данных в файл с текущей позиции. Если текущая позиция нахо­дится в конце файла, его размер увеличивается, в противном случае за­пись осуществляется на место имеющихся данных, которые, таким обра­зом, теряются.

Есть и другие операции, внешние, например, переименование файла, по­лучение атрибутов файла и т. п.

Операции над файлами типа ореn/close/read/write/seek/tell и над катало­гами типа readdir/create/unlink/chmod/stat и некоторые другие полностью соответствуют стандарту POSIX систем. При работе с каталогами обычно используются следующие системные операции [11]:

  • Создание каталога. Вновь созданный каталог включает записи с имена­ми'.' и'..', однако считается пустым.

  • Удаление директории. Операция может быть исполнена только над пустым каталогом.

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

  • Закрытие каталога после его чтения для освобождения места во внутренних системных таблицах.

  • Поиск. Данный системный вызов возвращает содержимое текущей запи­си в открытом каталоге. Вообще говоря, для этих целей может использо­ваться системный вызов rеad, но в этом случае от программиста потре­буется знание внутренней структуры директории.

  • Получение списка файлов в каталоге.

  • Переименование. Имена директорий можно менять, как и имена файлов.

  • Создание файла. При создании нового файла необходимо добавить в ка­талог соответствующий элемент.

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

Ннтерфейсы VFS имеют большой набор функций для манипулирования потоками информации и структурами данных, особенно для работы с i-узлами и файлами. Например интерфейс I узлов:

chdir(): - сменить директорию;

chroot(): - сменить rооt-директорию;

dir(): - класс директории;

closedir():- закрывает дескриптор директории;

getcwd(): -получает текущую рабочую директорию;

ореndir(): - открывает дескриптор директории;

readdir(): - читает вхождение из дескриптора директории;

rewinddir(): - переходит в начало дескриптора директории;

link() / sуmlink() / unIink() /readlink() /follow link() управление связями в файловой системе;

mkdir() /rmdir(): создание и удаление каталогов;mknod() : создание каталога, специального файла или обычного файла;

readpage() /writepage(): чтение/запись страницы физической памяти; smap(): пометить логический блок файла на физическом устройстве; rename(): переименовать файл или каталог;

Интерфейс для работы с файлами:

ореn() /release(): открыть/закрыть файл;read()

/ write(): чтение/запись файла;

create(): создание файла в каталоге;

lookup(): поиск файла в каталоге;

select(): ожидание, пока свойства файла не изменятся (то есть файл ста­нет доступным на чтение или запись);

lseek() /fseek(): поиск в файле по смещению;

mmap() : отметить регион файла внутри виртуальной памяти пользова­тельского процесса;

fsync() / fasync(): синхронизация некоторого буфера памяти с физиче‑

ским устройством;

truпcate(): установить длину файла равной нулю;

permission(): проверка и установка пользовательским процессом свойств файла на выполнение;