ОС Linux.Руководство системного администратора


Пpиложение A - часть 3


A.2.4. Файлы устройств

В Unix-подобных операционных системах доступ к устройствам осуществляется через специальные файлы. Такой файл не занимает места в файловой системе. Он является только точкой доступа к драйверу устройства.

Существует два типа файлов устройств: символьные и блочные. При использовании символьного типа, имеется возможность обмена данными с устройством только в символьном режиме, в то время как файлы устройств блочного типа позволяют производить обмен только блоками с использованием буфера. При запросе ввода/вывода к файлу устройства, этот запрос перенаправляется к драйверу соответствующего устройства. Каждому подобному файлу соответствует старший номер, который определяет тип устройства, и младший номер, который определяет само устройство.

A.3. Виртуальная Файловая Система (VFS)

A.3.1. Принцип работы

Ядро системы Linux содержит код, выполняющий функции виртуальной файловой системы, которая используется при работе с файлами. Этот код обрабатывает запросы к файлам и вызывает необходимые функции соответствующей файловой системы для выполнения операции ввода/вывода.

Такой механизм работы с файлами часто используется в Unix-подобных операционных системах для упрощения объединения и использования нескольких типов файловых систем.

Когда какой-либо процесс выдает системный вызов, связанный с работой файловой системы, ядро вызывает функцию, расположенную в VFS. Эта функция производит действия, не зависимые от структуры файловой системы, и перенаправляет вызов к функции этой файловой системы, которая выполняет операции, связанные с ее структурой. Код, реализующий операции с файловой системой, использует функции буфера для обращения к устройствам ввода/вывода.

A.3.2. Структура VFS

VFS содержит набор функций, которые должна поддерживать любая файловая система. Этот интерфейс состоит из ряда операций, которые оперируют тремя типами объектов: файловые системы, индексные дескрипторы и открытые файлы.

VFS содержит информацию о всех типах поддерживаемых файловых систем. Здесь используется таблица, которая создается во время компиляции ядра. Каждая запись в такой таблице содержит тип файловой системы: она включает в себя наименование типа и указатель на функцию, вызываемую во время монтирования этой файловой системы. При монтировании файловой системы вызывается соответствующая функция монтирования. Эта функция используется для считывания суперблока, установки внутренних переменных и возврата дескриптора смонтированной системы в VFS. После того, как система смонтирована, функции VFS используют этот дескриптор для доступа к процедурам используемой файловой системы.

Дескриптор смонтированной файловой системы содержит в себе некоторую информацию: информация, которая одинакова для каждого типа файловой системы, указатели на функции, используемые для выполнения операций данной файловой системы и некоторые данные, используемые этой системой. Указатели на функции, расположенные в дескрипторе файловой системы, позволяют VFS получить доступ к внутренним функциям файловой системы.

В VFS используются еще два типа дескрипторов: это inode и дескриптор открытого файла. Каждый из них содержит информацию, связанную с используемыми файлами и набором операций, используемых кодом файловой системы. В то время как дескриптор inode содержит указатели к функциям, используемым по отношению к любому файлу (например, create или unlink), то дескриптор файлов содержит указатели к функциям, оперирующим только с открытыми файлами (например, read или write).




Начало  Назад  Вперед