В ядре системы UNIX файл представлен абстракцией vnode (или virtual node, виртуальным узлом). Файловая система представлена понятием vfs (virtual file system). Обе абстракции могут быть реализованы как абстрактный базовый класс, внутри подклассов которого описаны специфические реализации для различных файловых систем, например s5fs, ufs, NFS или FAT (файловая система MS-DOS).
Класс vnode системы SVR4 показан ранее
Также может иметь смысл заглянуть на сайт bistrokuhni.ru, ведь именно там можно узнать много нового на тему http://www.bistrokuhni.ru/zakazat_kuhnu. Тема кухня в Москве может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт bistrokuhni.ru, и тема кухня в Москве начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема кухня в Москве очень подробно представлена на сайте bistrokuhni.ru. Трудно найти более детальное освещение темы кухня в Москве чем это сделано на сайте bistrokuhni.ru. Спасибо сайту bistrokuhni.ru за такое доскональное преподнесение темы кухня в Москве.
Поля данных базового класса vnode содержат информацию, не зависящую от определенного типа файловой системы.
Функции членов класса могут быть поделены на две категории. В первой категории находится набор виртуальных функций, определяющих зависимый от файловой системы интерфейс. В каждой отдельной файловой системе должны иметься собственные реализации для таких функций. Ко второй категории относится набор высокоуровневых утилит, используемых другими подсистемами ядра для осуществления действий с файлами.
Такие функции вызывают для выполнения задач низкого уровня зависимые от файловой системы процедуры. Базовый класс vnode имеет два поля, используемые для реализации подклассов. Первое поле — v_data, является указателем (типа caddr_t) на закрытую структуру данных, в которой хранятся зависящие от файловой системы данные vnode. Для файлов s5fs или ufs это традиционная структура индексных дескрипторов inode. В системе NSF используется структура mode, в tmpfs применяется tmpnode и т. д. Так как доступ к этим структурам происходит не напрямую, а при помощи v_data, они непрозрачны для базового класса vnode, а их поля видимы только для функций, являющихся внутренними по отношению к специфичным файловым системам.
Поле
v_op
указывает на структуру
vnodeops
состоящую из набора указателей на функции реализации виртуального интерфейса к vnode. Поля v_data и v_op заполняются при инициализации vnode, обычно на стадии выполнения системных вызовов open или create. Когда участок кода, не зависящий от файловой системы, вызывает виртуальную функцию для произвольного vnode, ядро изменяет указатель v_op и вызывает конкретную функцию, относящуюся к определенной реализации файловой системы. Например, операция V0P_ CLOSE позволяет вызвавшему ее процессу закрыть файл, ассоциированный с vnode. Доступ происходит при помощи макроса, такого как приведен ниже:
где многоточие обозначает другие входные аргументы процедуры close. Приведенный макрос гарантирует, что после соответствующей инициализации vnode применение операции V0P_CL0SE приведет к вызову процедуры ufs_close() для файла ufs, nfs_close() для файла NFS и т. д.
Базовый класс vfs также обладает двумя полями, vfs_data и vfs_op, позволяющими осуществлять взаимосвязь с данными и функциями, реализующими определенные файловые системы. Компоненты vfs показаны на рис. 8.9.
В языке С базовый класс реализуется как структура, а также набор глобальных функций (и макросов) ядра, определяющих публичные невиртуальные функции. Базовый класс содержит указатель на другую структуру, состоящую из набора указателей на функции, по одному для каждой виртуальной функции. Указатели v_op и v_data (для класса vfs указатели vfs_op и vfs_data) позволяют соединить подклассы, предоставляя таким образом доступ к функциям и данным, зависящим от конкретной файловой системы.
Краткий обзор реализации
Следующие разделы посвящены более подробному анализу интерфейса vnode/ vfs, а также описанию реализации различных файловых операций.
Опубликовал katy
July 08 2015 08:54:04 ·
0 Комментариев ·
2926 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.