Ядро ОС Linux

       

B.6. Доступные файловые системы.


Всем известно, что файловая система - основной ресурс системы UN*X, настолько основной и общей, что она должна иметь удобное сокращение имени. Далее в тексте будем называть файловую систему "фс".

Я предполагаю, что читатель уже знаком с с основными концепциями фс UNIX - разрешение доступа, inode, superblock, mounting и umounting. Эти концепции об'яснены в других книгах по UNIX, так что я не буду повторяться, а остановлюсь на особых компонентах Linux.

Первые UNIX-системы поддерживали одну файловую систему, структуру, которая была занесена прямо в ядро. На данный момент используется нестандартный интерфейс для создания коммуникации между ядром и файловой системой в порядке непринужденного обмена информацией между архитектурами. Сам Linux поддерживает стандартный метод обмена информацией между ядром и каждым модулем. Этот метод называется VFS.

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

Весь материал, не зависящий от фс, хранится в файлах fs/*.c. Они выполняют следующие операции:

  • Управление кешированием буфера;
  • Ответ на системные вызовы fcntl() и ioctl() (fcntl.c и ioctl.c);
  • Распределение pipe и fifo на inode и буферах (fifo.c и pipe.c);
  • Управление файловыми и inode таблицами (file_table.c и inode.c);
  • Закрытие и открытие файлов и записей (locks.c);
  • Распределение имен в inode (namei.c, open.c);
  • Описание функции select() (select.c);
  • Информационная база (stat.c);
  • mounting и umounting фс (super.c);
  • Запуск (exec()) запускаемых файлов и загрузка библиотек (exec.c);
  • Загрузка различных двоичных форматов (bin_fmt*.c, как описано выше).
  • Интерфейс VFS содержит набор операций высокого уровня, запускаемых независимым от фс кодом, и представляется нужном формате для фс. Наиболее важными структурами являются file_operations и inode_operations, однако, они далеко не единственны. Все они описаны в include/linux/fs.h.

    Отправной точкой в ядре в обращении к файловой системе является структура file_system_type. Массив file_system_types помещен в fs/filesystems.c, и во время запуска mount на него происходит ссылка. Затем функция read_super для соответствующего типа фс заполняет элемент структуры struct super_block,который, в свою очередь, заносит информацию в struct super_operations и в struct type_sb_info.

    Создатель устанавливает указатели на главные операции для данного типа фс, последняя также указывает специальную информацию для типа файловой системы.

    Массив типов файловой системы помещен в скомпанованный список для организации новых типов фс как модулей ядра. Функция, делающая это - (un-)register_filesystem, описана в fs/super.c.



    Содержание раздела