Поле v_count структуры vnode содержит счетчик ссылок, при помощи которого определяется, как долго структура будет поддерживаться ядром.
Структура vnode размещается и ассоциируется с файлом при первом доступе к нему. Позже указатели (или ссылки) на vnode могут поддерживать и другие объекты, желающие получить доступ к этому файлу при помощи таких указателей. Это означает, что ядро будет поддерживать структуру vnode и не сможет произвести ассоциацию ее с другим файлом до тех пор, пока существуют такие ссылки.
Также может иметь смысл заглянуть на сайт tilos-mag.ru, ведь именно там можно узнать много нового на тему http://tilos-mag.ru/kanva/aida/. Тема канва аида размеры может показаться на первый взгляд незначительной и даже не тематичной. Но стоит посетить сайт tilos-mag.ru, и тема канва аида размеры начинает проявлять себя с неожиданной стороны и вызывает всё больший интерес. Дело в том, что тема канва аида размеры очень подробно представлена на сайте tilos-mag.ru. Трудно найти более детальное освещение темы канва аида размеры чем это сделано на сайте tilos-mag.ru. Спасибо сайту tilos-mag.ru за такое доскональное преподнесение темы канва аида размеры.
Счетчик ссылок является одним из общих свойств структуры vnode. Манипуляции с ним производятся фрагментом кода, независящим .от конкретной файловой системы.
Для инкремента и декремента счетчика используются макросы
VN_H0LD
и
VN_RELE
Если значение счетчика станет равным нулю, это будет означать, что файл неактивен и его структура vnode может быть освобождена или передана другому файлу.
Важно понимать разницу между получением ссылки (или удержанием) и блокировкой. Блокировка объекта защищает его от доступа определенным образом, зависящим от того, является ли блокировка эксклюзивной или позволяющей чтение-запись. Удержание ссылки на объект дает гарантию постоянства этого объекта. Код, зависящий от файловой системы, блокирует структуру vnode на короткие промежутки времени, обычно равные длительности одной операции с нею. Ссылка, как правило, удерживается в течение большого временного интервала, занимаемого не несколькими операциями над vnode, а несколькими системными вызовами. Ниже приведены примеры операций, при которых происходит запрос ссылки на vnode.
♦ Запрос ссылки на vnode (то есть инкремент счетчика ссылок) происходит при открытии файла. Закрытие файла приводит к освобождению ссылки (или декременту счетчика).
♦ Процесс удерживает ссылку на текущий рабочий каталог. Если процесс изменяет свой рабочий каталог, то он запрашивает на новый каталог ссылку и освобождает ссылку на предыдущий.
♦ При монтировании новой файловой системы запрашивается ссылка на каталог, являющийся точкой монтирования. Освобождение такой ссылки происходит при размонтировании системы.
♦ Процедуры преобразования полных имен запрашивают ссылки на каждый промежуточный каталог, с которым они сталкиваются. Удержание ссылки происходит в течение поиска каталога, освобождение — после получения ссылки на следующий компонент полного имени.
Счетчики ссылок гарантируют постоянство vnode, а также файла, с которым эта структура была ассоциирована. Если один процесс удаляет файл, открытый другим процессом (или тем же процессом дважды), то такой файл не удалится с диска физически. Будет удален элемент каталога для такого файла, что не даст возможности другим процессам открывать его. Файл же продолжает при этом существовать до тех пор, пока счетчик его структуры vnode не станет равным нулю. Процесс, обладающий в текущий момент этим открытым файлом, будет иметь доступ к нему до того момента, пока сам не закроет файл. Такой подход эквивалентен маркировке файла для удаления. После освобождения последней ссылки независимый от файловой системы код вызовет операцию VOP_INACTIVE для завершения удаления файла. Например, для файлов ufs или s5fs при этом производится освобождение индексного дескриптора и блоков данных.
Описанная возможность очень полезна для создания временных файлов. Приложения, такие как компиляторы, используют временные файлы для хранения результатов промежуточных фаз периода выполнения. Такие файлы должны удаляться при ненормальном завершении работы приложения. Приложение следит за этим посредством открытия файла и последующего его немедленного отсоединения. Тогда счетчик ссылок становится равным нулю, и ядро удаляет элемент каталога. Это защищает от возможности видеть такие файлы и иметь доступ к ним другим пользователям. Пока файл открыт, счетчик, содержащийся в памяти, равен единице. Пока файл существует, приложение может производить чтение или запись в него. При закрытии файла, независимо от того, случилось ли это принудительно, либо произвольно при завершении работы, счетчик ссылок обнуляется. Тогда ядро завершает процесс удаления и освобождает блоки данных и индексный дескриптор. Многие версии UNIX поддерживают стандартную библиотечную функцию tmpfile,
создающую временный файл.
Поле
v_vfsp
каждой структуры vnode указывает на объект vfs, к которому он относится. Корневые объекты vnode каждой файловой системы имеют установленный флаг VR00T.
Если объект vnode является точкой монтирования, то его поле v_vfsmountedhere ссылается на объект vfs файловой системы, на которую он смонтирован. Помните о том, что корневая файловая система никуда не монтируется и не покрывается какой-либо структурой vnode.
В этом разделе вы прочтете описание объектов интерфейса vnode/vfs, зависящих от файловой системы, а также реализации доступа к этим объектам операциями уровня, независимого от файловой системы.
Опубликовал katy
July 08 2015 09:18:45 ·
0 Комментариев ·
3586 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.