Вход/Регистрация
Разработка ядра Linux
вернуться

Лав Роберт

Шрифт:

};

Функция

get_sb
служит для считывания суперблока с диска и заполнения объекта суперблока соответствующими данными при монтировании файловой системы. Остальные параметры описывают свойства файловой системы.

Для каждого типа файловой системы существует только одна структура

file_system_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; /* потомки, связанные с родителем */

 atomic_t mnt_count; /* счетчик использования */

 int mnt_flags; /* флаги монтирования */

 char *mnt_devname; /* имя смонтированного устройства */

 struct list_head mnt_list; /* список дескрипторов */

 struct list_head mnt_fslinkk; /* истекший список, специфичный

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

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

};

Самая сложная задача — это поддержание списка всех точек монтирования и взаимоотношений между данной файловой системой и другими точками монтирования. Эта информация хранится в различных связанных списках структуры

vfsmount
.

Структура

vfsmount
также содержит поле
mnt_flags
. В табл. 12.1 приведен список стандартных флагов монтирования.

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

Флаг Описание
MNT_NOSUID
Запрещает использование флагов setuid и setgid для бинарных файлов на файловой системе
MNT_NODEV
Запрещает доступ к файлам устройств на файловой системе
MNT_NOEXEC
Запрещает выполнение программ на файловой системе

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

Структуры данных, связанные с процессом

Каждый процесс в системе имеет свои открытые файлы, корневую файловую систем); текущий рабочий каталог, точки монтирования и т.д. Следующие три структуры данных связывают вместе подсистему VFS и процессы, которые выполняются в системе. Это структуры

files_struct
,
fs_struct
и
namespace
.

Структура

files_struct
определена в файле
<linux/file.h>
. Адрес этой структуры хранится в поле files дескриптора процесса. В данной структуре хранится вся информация процесса об открытых файлах и файловых дескрипторах. Эта структура, с комментариями, имеет следующий вид.

struct files_struct {

 atomic_t count; /* счетчик ссылок на данную структуру */

 spinlock_t file_lock; /* блокировка для защиты данной структуры */

 int max_fds; /* максимальное количество файловых объектов */

 int max_fdset; /* максимальное количество

файловых дескрипторов */

 int next_fd; /* номер следующего файлового дескриптора */

  • Читать дальше
  • 1
  • ...
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: