|
Файловая система Linux
|
|
|
Linux является операционной системой семейства Unix и ее файловая система полностью соответствует стандартам данного класса. В Unix под файлом понимается не только объект, хранящийся на диске, но и любое устройство, поддерживающее ввод/вывод потока данных. Например, драйверы устройств рассматриваются как файлы.
Виртуальная файловая система (Virtual File System)
В Unix различают несколько типов файлов. Каждый тип файлов имеет свои особенности реализации. Эти особенности, однако, скрыты от пользователя программным уровнем ядра Linux, получившим название виртуальной файловой системы (Virtual File System - VFS).
Виртуальная файловая система VFS поддерживает следующие типы файлов:
• Обычные файлы
• Каталоги
• Специальные файлы
• Именованные конвейеры
• Символьные связи
VFS не ориентируется на какую-либо конкретную файловую систему, механизмы реализации файловой системы полностью скрыты как от пользователя, так и от приложений. В ОС нет системных вызовов, предназначенных для работы со специфическими типами файловой системы, а имеются абстрактные вызовы типа open, read, write и другие, которые имеют содержательное описание, обобщающее некоторым образом содержание этих операций в наиболее популярных типах файловых систем. VFS также предоставляет ядру возможность оперирования файловой системой, как с единым целым: операции монтирования и демонтирования, а также операции получения общих характеристик конкретной файловой системы (размера блока, количества свободных и занятых блоков и т.п.) в единой форме. Если конкретный тип файловой системы не поддерживает какую-то абстрактную операцию VFS, то файловая система должна вернуть ядру код возврата, извещающий об этом факте.
В состав VFS Linux входят два основных компонента:
• Набор определений, характеризующих объект типа файл
• Программный уровень, обеспечивающий работу с подобными объектами
Основные типы объектов, выделяемых VFS:
• Индексы (inode, vnode) - представляют каждый элемент файловой системы
• Файловые структуры (структура file) - представляют отдельные файлы
• Файловая система (file system) - представляет файловую систему в целом
Для каждого типа объектов VFS поддерживает свой набор разрешенных операций, ссылки на которые хранятся в таблице функций. По указателю конкретного объекта происходит обращение к требуемой области таблицы, хранящей фактические адреса функций, реализующих требуемые операции.
В VFS вся информация о файлах разделена на две части - не зависящую от типа файловой системы, которая хранится в специальной структуре ядра - структуре vnode, и зависящую от типа файловой системы - структуре inode, формат которой на уровне VFS не определен, а используется только ссылка на нее в структуре vnode. Имя inode не означает, что эта структура совпадает со структурой индексного дескриптора inode конкретной файловой системы. Это имя используется для обозначения зависящей от типа файловой системы информации о файле, как дань традиции.
Структура vnode используется ядром для связи файла с определенным типом файловой системы и конкретными реализациями файловых операций. Одно из полей vnode используется для указания на таблицу физических страниц памяти в случае, когда файл отображается в физическую память. В vnode также содержится тип файла и указатель на зависимую от типа файловой системы часть описания характеристик файла - структуру inode, обычно содержащую адресную информацию о расположении файла на носителе и о правах доступа к файлу. Кроме этого, vnode используется ядром для хранения информации о блокировках (locks), примененных процессами к отдельным областям файла.
Сами операции над объектом реализуются на программным уровне VFS, который непосредственно вызывает необходимую функцию через таблицу функций. При этом не имеет значения, представляет ли индекс сетевой файл, файл на диске, сетевое гнездо, либо каталог.
При каждом открытии процессом файла ядро создает в системной области памяти новую структуру типа file, которая описывает как открытый файл, так и операции, которые процесс собирается производить с файлом (например, чтение). Структура file содержит такие поля, как определение режима открытия (только для чтения, для чтения и записи и т.п.); указатель на структуру vnode; смещение в файле при операциях чтения/записи; указатель на структуру, содержащую права процесса, открывшего файл; а также указатели на предыдущую и последующую структуру типа file, связывающие все такие структуры в список.
В функции объекта file входит:
• отслеживание последовательного ввода/вывода в файл
• учет запросов от процессов на разрешение записи при открытии файла
• отслеживание действий процессов при необходимости упреждающего чтения
В отличие от структур типа file структуры типа vnode заводятся операционной системой для каждого активного (открытого) файла в единственном экземпляре, поэтому структуры file могут ссылаться на одну и ту же структуру vnode.
Структуры vnode не связаны в какой-либо список. Они появляются по требованию в системном пуле памяти и присоединяются к структуре данных, которая инициировала появление этого vnode, с помощью соответствующего указателя.
Все операции с файлами производятся с помощью связанной с файлом структуры vnode. Когда процесс запрашивает операцию с файлом (например, операцию open), то независимая от типа файловой системы часть ОС передает управление зависимой от типа файловой системы части ОС для выполнения операции. Если зависимая часть обнаруживает, что структуры vnode, описывающей нужный файл, нет в оперативной памяти, то зависимая часть заводит для него новую структуру vnode.
Файловая система представляет собой множество файлов, объединенных в единую иерархическую структуру при помощи каталогов. Такое объединение файлов представляет объект "файловая система". Каждое дисковое устройство смонтированное как файловая система трактуется как отдельный объект "файловая система".
Термин "файловая система" по сути имеет два значения. С одной стороны это составная часть файлового дерева, а с другой - все файловое дерево и алгоритмы, с помощью которых ОС управляет им. Как правило, значение термина становится ясным из контекста. В широком смысле понятие "файловая система" включает:
• Совокупность всех файлов на диске
• Наборы структур данных, используемых для управления файлами, такие, например, как каталоги файлов, дескрипторы файлов, таблицы распределения свободного и занятого пространства на диске
• Комплекс системных программных средств, реализующих управление файлами, в частности: создание, уничтожение, чтение, запись, именование, поиск и другие операции над файлами
Обработка директорий (файлов-каталогов) имеет свои особенности. При выполнении операций считывания/записи файл должен быть предварительно открыт. Однако этого не требуется в случае переименования либо удаления файла в каталоге. Всю информацию о подобных операциях VFS хранит в объекте inode, а не в объекте file.
|
|
|
|
|