Категории
Самые читаемые
ChitatKnigi.com » 🟢Компьютеры и Интернет » Интернет » Операционная система UNIX - Робачевский Андрей Михайлович

Операционная система UNIX - Робачевский Андрей Михайлович

Читать онлайн Операционная система UNIX - Робачевский Андрей Михайлович
1 ... 91 92 93 94 95 96 97 98 99 ... 156
Перейти на страницу:

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать

Основные поля vnode приведены в табл. 4.1.

Таблица 4.1. Поля 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 op Операции vnode

Каждый vnode содержит число ссылок v_count, которое увеличивается при открытии процессом файла и уменьшается при его закрытии. Когда число ссылок становится равным нулю, вызывается операция vn_inactive(), которая сообщает реальной файловой системе, что на vnode никто больше не ссылается. После этого файловая система может освободить vnode (и, например, соответствующий ему inode) или поместить его в кэш для дальнейшего использования.

Поле 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.

1 ... 91 92 93 94 95 96 97 98 99 ... 156
Перейти на страницу:
Открыть боковую панель
Комментарии
Братислава
Братислава 05.03.2026 - 10:03
Очень понравились книга. Лёгкая. Уверенные в себе герои, прекрасные поступки
Ninel
Ninel 02.03.2026 - 09:26
Горячо ❤️‍🔥❤️‍🔥❤️‍🔥 и сладко
Елена
Елена 16.02.2026 - 15:44
Чувственная, проникновенная книга. Очень понравились действия героев. Не побоялись реакции семьи.
Божена
Божена 15.02.2026 - 23:56
История прекрасная. С потерей памяти, как по мне, перегиб, но не плохо
Полина
Полина 20.01.2026 - 22:43
Книга замечательная. История прекрасная.