Главная » Ядро Linux » Структуры данных, связанные с файловыми системами

0

В дополнение к фундаментальным объектам подсистемы VFS, ядро использует и другие стандартные структуры данных для управления данными, связанными с файловыми системами. Первый объект используется для  описания конкретного типа файловой системы, как, например, ext.3 или  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 определена  в  файле <linux/mount.h >  следующим  образом.

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.  В табл.  12.1  приведен список стандартных флагов  монтирования.

Таблица 12.1 . Список стандартных флагов монтирования

Флаг                               Описание

MNT_NOSUI D                Запрещает использование флагов setuid   и   setgi d для бинарных файлов на файловой системе

MNT_NODE V                    Запрещает  доступ  к файлам устройств на файловой системе

MNT_NOEXE C               Запрещает выполнение программ на файловой системе

Эти  флаги  полезны, в основном, для сменных носителей, которым администратор не доверяет.

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

По теме:

  • Комментарии