B.7. Краткий обзор сущности типа файловой системы
Роль типа файловой системы состоит в выполнении низкоуровневых задач, используемых для распределения высокоуровневых операций VFS на физических устройствах.
Интерфейс VFS достаточно универсален для поддержки обеих встроенных фс UN*X и более экзотичных, таких, как msdos и umsdos.
Каждая фс создается из следующих компонентов, принадлежащих ее собственным каталогам:
- Запись в массиве file_streams[] (fs/filesystems.c);
- Суперблочный файл include (include/linux/type_fs_sb.h);
- inode include файл (include/linux/type_fs_i.h);
- Основной include файл (include/linux/type_fs.h);
- Две строки #include внутри include/linux/fs.h, также как изапись в структуры super_block и inode.
Собственная директория типа фс содержит исходные тексты, обладающие inode и осуществляющие управление обработкой информации.
Глава про фс proc в этой книге содержит все подробности о низкоуровневом коде и интерфейсе VFS для этого типа фс. Исходный текст в fs/procfs достаточно доступен после прочтения этой главы.
Разберем внутреннее устройство механизма VFS и фс minix в качестве примера. Я выбрал в качестве примера minix, так как она небольшая, но полная, кроме того, все фс linux берут начало от minix. Читателю предлагается разобрать в качестве упражнения тип ext2, встречающийся в инсталляции Linux.
Во время поддержки системой фс minix minix_read_super заполняет структуру super_block информацией, полученной с поддерживаемого устройства. Поле s_op структуры содержит указатель на minix_sops, используемый основным кодом фс для быстрого выполнения операции суперблока.
Соединение новой поддерживаемой фс с системой основывается на изменении следующих компонент (помещение sb в super_block и dir_i в место обращения):
- sb-s_mounted указывает на inode корневого каталога поддерживаемой фс (MINIX_ROOT_INO);
- dir_i-i_mount, содержащий sb-s_mounted;
- sb-s_covered, содержащий dir_i;
Umount происходит с помощью do_umount, включающим запуск minix_put_super. Когда разрешен доступ к файлу, minix_read_inode заполняет общую системную inode структуру полями из minix_inode. Поле inode-i_op заполняется, исходя из inode-i_mode и отвечает за все будующие операции над файлом.
Описание исходных текстов функций minix вы можете найти в fs/minix/inode.c. Структура inode_operations используется для засылки inode операций в специальные функции ядра; первая запись в структуре - указатель на file_operations, которая информационно эквивалентна i_op. Фс minix позволяет выбрать три образца наборов inode - операций (для каталогов, для файлов и для скомпанованных символов) и два образца установки file_operations.
Операции над каталогами (одна minix_readdir) могут быть найдены в fs/minix/dir.c, операции над файлами - в fs/minix/file.c, и операции над скомпанованными символами - в fs/minix/symlink.c.
Остальная часть каталога minix предназначена для следующих задач:
- bitmap.c управляет распределением и очисткой inode и блоков (ext2 имеет два разных файла).
- fsynk.c ответственнен за системные вызовы fsync() - управление прямыми, непрямыми и сдвоенными непрямыми блоками. (Я надеюсь, вы имеете о них представление из UN*X).
- namei.c включает в себя inode-операции, связанные с именами, такие как создание и удаление node, переименование, компановка.
- truncate.c выполняет усечение файлов.
[ Назад | Оглавление | Далее ]
|