Поле v_vfsp
указывает на файловую систему (структуру vfs
, о которой мы поговорим в следующем разделе), в которой расположен файл, адресованный данным vnode. Если vnode является точкой монтирования, то поле v_vfsmountednere
указывает на подключенную файловую систему, "перекрывающую" данный vnode.
Поле v_data
указывает на данные, относящиеся к конкретной реализации реальной файловой системы. Например, для дисковой файловой системы ufs, v_data
указывает на запись в таблице in-core inode.
Набор операций над vnode указан полем v_op
. В терминах объектно-ориентированного программирования этот набор представляет собой виртуальные методы класса vnode. Он является своего рода шлюзом к реальной файловой системе, позволяя предоставить общий интерфейс виртуальной файловой системы и в то же время обеспечить специфические реализации функций работы с файлами, необходимые для различных типов файловых систем. Некоторые операции, большинство из которых уже знакомы читателю по системным вызовам, приведены в табл. 4.2.
Таблица 4.2. Операции с vnode виртуальной файловой системы
int (*vn_open)() |
Открыть vnode. Если операция предусматривает создание клона (размножение), то в результате будет размещен новый vnode. Обычно операции такого типа характерны для специальных файлов устройств. |
int (*vn_close)() |
Закрыть vnode. |
int (*vn_read)() |
Чтение данных файла, адресованного vnode. |
int (*vn_write)() |
Запись в файл, адресованный vnode. |
int (*vn_ioctl)() |
Задание управляющей команды. |
int (*vn_getaddr)() |
Получить атрибуты vnode: тип vnode, права доступа, владелец-пользователь, владелец-группа, идентификатор файловой системы, номер inode, число связей, размер файла, оптимальный размер блока для операций ввода/вывода, время последнего доступа, время последней модификации, время последней модификации vnode, число занимаемых блоков. |
int (*vn_setaddr)() |
Установить атрибуты vnode. Могут быть изменены UID, GID, размер файла и времена доступа и модификации. |
int (*vn_access)() |
Проверить права доступа к файлу, адресованному vnode. При этом производится отображение между атрибутами доступа файлов UNIX и атрибутами реальной файловой системы (например, DOS). |
int (*vn_lookup)() |
Произвести трансляцию имени файла в соответствующий ему vnode. |
int (*vn_create)() |
Создать новый файл и соответствующий ему vnode. |
int (*vn_remove)() |
Удалить имя файла в указанном vnode каталоге. |
int (*vn_link)() |
Создать жесткую связь между именем файла и vnode. |
int (*vn_mkdir)() |
Создать новый каталог в указанном vnode каталоге. |
int (*vn_rmdir)() |
Удалить каталог. |
int (*vn_readdir)() |
Считать записи каталога, адресованного vnode. |
int (*vn_symlink)() |
Создать символическую связь между новым именем и именем файла, расположенном в указанном vnode каталоге. |
int (*vn_readlink)() |
Чтение файла — символической связи. |
int (*vn_fsync)() |
Синхронизировать содержимое файла — записать все кэшированные данные. |
int (*vn_inactive)() |
Разрешить удаление vnode, т.к. число ссылок на vnode из виртуальной файловой системы стало равным нулю. |
Взаимосвязь между независимыми дескрипторами (vnode) и зависимыми от реализации метаданными файла показана на рис. 4.8.
Рис. 4.8. Метаданные файла виртуальной файловой системы
Монтирование файловой системы
Прежде чем может состояться работа с файлами, соответствующая файловая система должна быть встроена в существующее иерархическое дерево.
Только после этого ядро сможет выполнять файловые операции, такие как создание, открытие, чтение или запись в файл. Эта операция встраивания получила название подключения или монтирования файловой системы .
Каждая подключенная файловая система представлена на независимом уровне в виде структуры vfs
, аналоге записи таблицы монтирования дисковой файловой системы. Структуры vfs
всех подключенных файловых систем организованы в виде односвязного списка, в совокупности обеспечивая информацию, необходимую для обслуживания всего иерархического дерева, а также информацию о реальной файловой системе, которые не изменяются на протяжении работы. Первой записью списка всегда является корневая файловая система. В дальнейшем, список vfs
мы будем называть устоявшимся термином — таблица монтирования. Поля структуры vfs
приведены в табл. 4.3.
Читать дальше