[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Работа с i-узлами JFS2

Внутри системы файлы расширенной журнализированной файловой системы (JFS2) представлены как индексные узлы (i-узлы, индексные дескрипторы). I-узлы JFS2 хранятся в статическом виде на диске и содержат параметры доступа к файлам, а также указатели на фактические адреса блоков данных файлов на диске. I-узлы динамически распределяются файловой системой.

При открытии файла операционная система создает базовый i-узел. Этот i-узел содержит копии всех полей, определенных в дисковом i-узле, а также дополнительные контрольные поля. Базовые i-узлы определены в файле /usr/include/j2/j2_inode.h.

Структура дискового i-узла JFS2

Размер дисковых i-узлов в JFS2 составляет 512 байт. Всем i-узлам присвоены уникальные номера, которые хранятся в индексе схемы размещения индексных узлов файловой системы. Эта схема предназначена для контроля расположения и распределения i-узлов на диске.

Дисковые i-узлы содержат следующую информацию:

Поле Содержимое
di_mode Тип файла и биты прав доступа
di_size Размер файла в байтах
di_uid Права доступа для пользователя с данным ИД
di_gid Права доступа для группы с данным ИД
di_nblocks Число блоков, отведенных для размещения файла
di_mtime Время последнего изменения файла
di_atime Время последнего обращения к файлу
di_ctime Время последнего изменения i-узла
di_nlink Число жестких связей с данным файлом
di_btroot Корень дерева B+ с фактическими адресами данных на диске

Невозможно изменить данные в файле, не изменив i-узел, но можно изменить i-узел, не изменяя содержимого файла. Например, при изменении прав доступа будет изменена информация в i-узле (di_mode), но данные в файле останутся прежними.

Узел di_btroot соответствует корню дерева B+. Он содержит описание данных, хранящихся в i-узлах. Одно из полей дерева di_btroot указывает, как много записей в его i-узле уже используется, а еще одно из полей указывает тип этих записей - листья или внутренние узлы дерева B+. Стратегии физического размещения файлов обсуждаются в разделе Распределение памяти в JFS2.

Дисковые i-узлы не содержат ни сокращенных, ни полных имен файлов. Соответствие между именами файлов и i-узлами устанавливается с помощью записей каталогов. Любому i-узлу можно поставить в соответствие несколько имен файлов, создав дополнительные записи каталогов с помощью процедуры link или symlink. Для определения номера i-узла, соответствующего данному файлу, служит команда ls -i.

I-узлы, соответствующие файлам устройств, несколько отличаются от i-узлов для обычных файлов. Файлы, связанные с устройствами, называются особыми файлами. В особых файлах устройств нет адресов блоков данных, а в поле di_rdev указаны основной и дополнительный номера устройства.

В обычной ситуации дисковый i-узел освобождается, когда счетчик ссылок (di_nlink) на этот i-узел обнуляется. Ссылки соответствуют именам файлов, связанных с этим i-узлом. При обнулении счетчика ссылок на дисковый i-узел все блоки данных, связанные с этим i-узлом, добавляются в битовую карту свободных блоков данных файловой системы. После этого i-узел помещается в схему свободных i-узлов.

Структура базового i-узла

При открытии файла информация из дискового i-узла для упрощения доступа копируется в базовый i-узел. Структура базового i-узла содержит дополнительные поля, предназначенные для управления доступом к важным данным i-узла. Поля базового i-узла определяются в файле j2_inode.h. Ниже указана некоторая дополнительная информация, отслеживаемая в базовом i-узле:

При освобождении базового i-узла (например, с помощью процедуры close) счетчик ссылок для этого i-узла уменьшается на 1. Если в результате этого счетчик обнуляется, то i-узел удаляется из таблицы базовых i-узлов и его содержимое записывается на диск в файл копии i-узла (если два этих файла различны).

Связанная информация

Глава 5, Файловые системы и каталоги

Распределение памяти в JFS

Распределение памяти в JFS2

Работа с дескрипторами файлов

Создание связей

Вводная информация об общих I-узлах (G-узлах)

Функция close


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]