28. Архитектура виртуальной файловой системы.
Read(); write(); ioctl() Интерфейс
системных вызовов |
Интерфейс виртуальной файловой системы vfs |
UNIX – обеспечивает работу с различными типами файловых систем. Это достигается с помощью разделения файловой системы на зависимый и независимый от реализации уровни , последний - общий и представляет для некоторых подсистем ядра некоторую абстрактную файловую систему.Независимый уровень также называется – Виртуальная файловая система (рис). При этом дополнительные файловые системы различных типов могут быть встроены в ядро UNIX подобно драйверам устройств.
Виртуальные индексные дескрипторы
Дисковый файл обычно имеет связанную с ним структуру данных называемую метаданными или inode, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Интерфейс работы с файлами – vnode ( виртуальный индексный дескриптор). Основные поля vnode:
U_short vflag |
Флаги vnode |
U_short v_count |
Число ссылок на vnode |
Struct filock *v_filocks |
Блокировки файла |
Struct vfs *v_vfsmountedhere |
Указатель на подключенную файловую систему, если vnode – точка монтирования |
Struct vfs *v_vfsp |
Указатель на файловую систему в которой находится файл |
Enum vtype v _type |
Тип vnode: обычный файл, каталог, специальный файл устройства, символическая связь, сокет |
Caddr_t v_data |
Указатель на данные, относящиеся к реальной файловой системе |
Struct vnodeops *v_op |
Операции vnode |
Монтирование файловой системы.
Для работы с файлами необходимо встроить соответствующую файловую систему в соответствующее иерархическое дерево – подключение или монтирование файловой системы. Каждая подключеднная файловая система представлена на независимом уровне в виде структуры vfs, аналоге записи таблицы монтирования дисковой файловой системы. Структуры vfs всех подключенных файловых систем организованы в виде односвязного списка, в совокупности обеспечивая информацию, необходимую для обслуживания всего иерархического дерева, а также информацию о реальной файловой системе, которые не изменяются на протяжении работы. Поля структуры vfs( таблица монтирования):
Struct vfs |
*vfs_next |
Следующая файловая система в таблице монтирования |
Struct vfsops |
*vfs_op |
Операции файловой системы |
Struct vnode |
*vfs_vnodecovered |
Vnode , перекрываемый файловой системой |
Int |
Vfs_flag |
Флаги: только для чтения, запрещенный бит SUID и тд |
Int |
Vfs_bsize |
Размер блока файловой системы |
Caddr_t |
Vfs_data |
Указатель на специфические данные, относящиеся к реальной файловой системе |
|