Виртуальные индексные дескрипторы
Виртуальные индексные дескрипторы
Дисковый файл обычно имеет связанную с структуру данных, называемую метаданными или inode, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Одним из исключений из этого правила является файловая система DOS, в которой структуры файла и его метаданных существенно отличаются от принятых в UNIX. Тем не менее виртуальная файловая система основана на представлении метаданных файла в виде, сходном с традиционной семантикой UNIX. Интерфейсом работы с файлами является vnode (от virtual inode — виртуальный индексный дескриптор).
Первоначально этот интерфейс был разработан в 1984 году фирмой Sun Microsystems для обеспечения требуемой унификации работы с файловыми системами различных типов, в частности, с NFS и ufs (FFS). Сегодня виртуальная файловая система является стандартом в SVR4, хотя ряд других версий UNIX также реализуют подобную архитектуру (например, независимая файловая система SCO UNIX).
Метаданные всех активных файлов (файлов, на которые ссылаются один или более процессов) представлены в памяти в виде in-core inode, в качестве которых в виртуальной файловой системе выступают vnode. Структура данных vnode одинакова для всех файлов, независимо от типа реальной файловой системы, где фактически располагается файл. Данные vnode содержат информацию, необходимую для работы виртуальной файловой системы, а также неизменные характеристики файла, например, такие как тип файла.
Основные поля 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.
Рис. 4.8. Метаданные файла виртуальной файловой системы
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
4.4.2.1. Отображение переменных FILE* на дескрипторы файлов
4.4.2.1. Отображение переменных FILE* на дескрипторы файлов Стандартные библиотечные функции ввода/вывода и переменные FILE* из <stdio.h>, такие, как stdin, stdout и stderr, построены поверх основанных на дескрипторах файлов системных вызовах.Иногда полезно получить непосредственный
Наследуемые дескрипторы
Наследуемые дескрипторы Часто бывает так, что дочернему процессу требуется доступ к объекту, к которому можно обратиться через дескриптор, определенный в родительском процессе, и если этот дескриптор — наследуемый, то дочерний процесс может получить копию открытого
Абсолютные и самоопределяющиеся относительные дескрипторы безопасности
Абсолютные и самоопределяющиеся относительные дескрипторы безопасности Программа 15.5, позволяющая изменять ACL, удобна тем, что просто заменяет один дескриптор безопасности (SD) другим. В то же время, при замене существующих SD следует проявлять осторожность, поскольку они
11.2.1. Файловые дескрипторы
11.2.1. Файловые дескрипторы Когда процесс получает доступ к файлу (что обычно называют открытием файла), то ядро возвращает ему файловый дескриптор, который затем используется процессом для всех операций с файлом. Файловые дескрипторы — это маленькие положительные целые
Индексные дескрипторы
Индексные дескрипторы Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е. метаданные файла. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в файловой системе, каждое из которых указывает на один и тот же
Файловые дескрипторы
Файловые дескрипторы Файловый дескриптор представляет собой неотрицательное целое число, возвращаемое системными вызовами, такими как creat(2), open(2) или pipe(2). После получения файлового дескриптора процесс может использовать его для дальнейшей работы с файлом, например с
2.5 Индексные дескрипторы
2.5 Индексные дескрипторы Файл имеет несколько атрибутов: имя, содержимое и служебную информацию (права доступа и даты модификации). Служебная информация размещается в индексном дескрипторе вместе с важной системной информацией, такой, как размер файла, место хранения
16.3. Индексные дескрипторы файлов
16.3. Индексные дескрипторы файлов Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером - индексом файла. Это означает, что число файлов, которые могут быть созданы в файловой системе,
1.1.3. Дескрипторы вместо классов
1.1.3. Дескрипторы вместо классов Программируя в Delphi, мы быстро привыкаем к тому, что каждый объект реализуется экземпляром соответствующего класса. Например, кнопка реализуется экземпляром класса TButton, контекст устройства — классом TCanvas. Но когда создавались первые
4. Виртуальные атрибуты
4. Виртуальные атрибуты Все атрибуты в системах управления базами данных делятся (по абсолютной аналогии с отношениями) на базовые и виртуальные. Так называемые базовые атрибуты – это хранимые атрибуты, которые необходимо использовать не один раз, а следовательно,
7.2.5. Дескрипторы файлов процесса
7.2.5. Дескрипторы файлов процесса Элемент fd файловой системы /proc — это подкаталог, в котором содержатся записи обо всех файлах, открытых процессом. Каждая запись представляет собой символическую ссылку на файл или устройство. Через эти ссылки можно осуществлять чтение и
Индексные выражения
Индексные выражения Синтаксис:<выражение1>[<выражение2>]Здесь квадратные скобки являются символами языка Си, а не элементами описания.Значение индексного выражения находится по адресу, который вычисляется как сумма значений <выражения1> и <выражения2>.
Индексные свойства
Индексные свойства Индексные свойства ведут себя аналогично полям-массивам и используются, как правило, для доступа к элементам контейнеров. Как и при использовании обычных свойств, при использовании индексных свойств могут попутно выполняться некоторые
32. Виртуальные методы
32. Виртуальные методы Метод становится виртуальным, если за его объявлением в типе объекта стоит новое зарезервированное слово virtual. Если объявляется метод в родительском типе как virtual, то все методы с аналогичными именами в дочерних типах также должны объявляться