Структури даних, пов’язані з файловими системами

На додаток до фундаментальних обєктам підсистеми VFS, ядро ​​використовує й інші стандартні структури даних для управління даними, повязаними з файловими системами Перший обєкт використовується для опису конкретного типу файлової системи, як, наприклад, ext3 або XFS Друга структура даних використовується для опису кожного примірника змонтованої файлової системи

Оскільки операційна система Linux підтримує безліч файлових систем, то ядро ​​повинно мати спеціальну структуру для опису можливостей і поведінки кожної файлової системи

struct file_system_type {

const char

*name

/ * Назва файлової системи * /

struct subsystem

subsys

/ * Обєкт підсистеми sysfs * /

int

fs_flags

/ * Прапори типу файлової системи * /

/ * Наступна функція використовується для зчитування суперблоку з диска * /

struct super_block * (*get_sb) (struct file_system_type *, int, char*, void *)

/ * Ця функція використовується для припинення доступу до СУПЕРБЛОК * /

void (*kill_sb) (struct super_block *)

struct module * owner / * Відповідний модуль (якщо є) * / struct file_system_type * next / * Наступна файлова система в списку * / struct list_head fs_supera / * Список обєктів типу суперблок * /

}

Функція get_s b () служить для зчитування суперблоку з диска і заповнення обєкта суперблоку відповідними даними при монтуванні файлової системи Інші параметри описують властивості файлової системи

Для кожного типу файлової системи існує тільки одна структура file_sys tem_type, незалежно від того, скільки таких файлових систем змонтовано і змонтований чи хоча б один екземпляр відповідної файлової системи

Значно цікавіше стає, коли файлова система монтується, при цьому створюється структура vfsmount Ця структура використовується для представлення конкретного екземпляра файлової системи, або, іншими словами, точки монтування

Структура vfsmount визначена у файлі таким чином

struct vfsmount {

struct list_head mnt_hash / * Список хеш-таблиці * /

struct vfsmount * mnt_parent / * Батьківська файлова система * /

struct dentry * mnt_mountpoint / * Обєкт елемента каталогу

точки монтування * /

struct dentry * mnt_root / * Обєкт елемента каталогу кореня даної файлової системи * /

struct super_block * mnt_sb / * Суперблок даної файлової системи * /

struct list_head mnt_mounts / * Список файлових систем, змонтованих до даної * /

struct list_head mnt_child / * Нащадки, повязані з батьком * /

atornic_t mnt count / * Лічильник використання * /

int mnt_flags / * Прапори монтування * /

char * mnt_devname / * Імя змонтованого пристрої * /

struct list_hcad mnt_list / * Список дескрипторів * /

struct listhead mnt_fslinkk / * Минулий список, специфічний

для файлової системи * /

struct namespace * mnt_namespace / * Повязане простір імен * /

}

Найскладніше завдання – це підтримка списку всіх точок монтування і взаємин між даною файловою системою та іншими точками монтування Ця інформація зберігається в різних повязаних списках структури vf smount

Структура vfsmount також містить іоле mnt_flags У табл 121 наведено список стандартних прапорів монтування

Таблиця 121 Список стандартних прапорів монтування

Прапор Опис

MNT_NOSUI D Забороняє використання прапорів setuid і setgi d для бінарних файлів на файловій системі

MNT_NODE V Забороняє доступ до файлів пристроїв на файлової системі

MNT_NOEXE C Забороняє виконання програм на файлової системі

Ці прапори корисні, в основному, для змінних носіїв, яким адміністратор не довіряє

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*