Монтирование файловой системы
Прежде чем может состояться работа с файлами, соответствующая файловая система должна быть встроена в существующее иерархическое дерево.
Только после этого ядро сможет выполнять файловые операции, такие как создание, открытие, чтение или запись в файл. Эта операция встраивания получила название
Каждая подключенная файловая система представлена на независимом уровне в виде структуры vfs
, аналоге записи таблицы монтирования дисковой файловой системы. Структуры vfs
всех подключенных файловых систем организованы в виде односвязного списка, в совокупности обеспечивая информацию, необходимую для обслуживания всего иерархического дерева, а также информацию о реальной файловой системе, которые не изменяются на протяжении работы. Первой записью списка всегда является корневая файловая система. В дальнейшем, список vfs
мы будем называть устоявшимся термином — таблица монтирования. Поля структуры vfs
приведены в табл. 4.3.
Таблица 4.3. Поля структуры 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 | Указатель на специфические данные, относящиеся к реальной файловой системе. |
Поле vfs_data
содержит указатель на данные реальной файловой системы. Например, для дисковой файловой системы s5fs, это поле указывает на суперблок, размещенный в памяти.
Поле vfs_op
указывает на операции файловой системы, которые в терминах объектно-ориентированного подхода могут быть названы виртуальными методами объекта vfs
. Возможные операции файловой системы приведены в табл. 4.4. Поскольку они существенным образом зависят от архитектуры и конкретной реализации, поля vfs_op
заполняются указателями на соответствующие функции реальной файловой системы при ее монтировании.
Таблица 4.4. Операции файловой системы
int (*vfs_mount) | Подключает файловую систему. Обычно операция включает размещение суперблока в памяти и инициализацию записи в таблице монтирования. |
int (*vfs_unmount) | Отключает файловую систему. Операция включает актуализацию данных файловой системы на накопителе (например, синхронизацию дискового суперблока и его образа в памяти). |
int (*vfs_root) | Возвращает корневой vnode файловой системы. |
int (*vfs_statfs) | Возвращает общую информацию о файловой системе, в частности: размер блока хранения данных, число блоков, число свободных блоков, число inode. |
int (*vfs_sync) | Актуализирует все кэшированные данные файловой системы. |
int (*vfs_fid) | Возвращает |
int (*vfs_vget) | Возвращает указатель на vnode для файла данной файловой системы, адресованного fid. |
Для инициализации и монтирования реальной файловой системы UNIX хранит
Таблица 4.5. Коммутатор файловых систем