Структуры данных, связанные с процессом
Структуры данных, связанные с процессом
Каждый процесс в системе имеет свои открытые файлы, корневую файловую систем); текущий рабочий каталог, точки монтирования и т.д. Следующие три структуры данных связывают вместе подсистему 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; /* номер следующего файлового дескриптора */
struct file **fd; /* массив всех файловых объектов */
fd_set *close on exec; /* файловые дескрипторы, которые должны
закрываться при вызове exec() */
fd_set *open_fds; /* указатель на дескрипторы открытых файлов */
fd_set close_on_exec init; /* первоначальные файлы для закрытия
при вызове exec() */
fd_set open_fds_init; /* первоначальный набор
файловых дескрипторов */
struct file *fd_array[NR_OPEN_DEFAULT]; /* массив файловых объектов */
};
Массив fd указывает на список открытых файловых объектов. По умолчанию это массив fd_array. Так как по умолчанию значение константы NR_OPEN_DEFAULT равно 32, то это соответствует 32 файловым объектам. Если процесс открывает больше 32 файловых объектов, то ядро выделяет новый массив и присваивает полю fd указатель на него. При таком подходе доступ к небольшому количеству файловых объектов осуществляется быстро, потому что они хранятся в статическом массиве. В случае, когда процесс открывает аномально большое количество файлов, ядро может создать новый массив. Если большинство процессов в системе открывает больше 32 файлов, то для получения оптимальной производительности администратор может увеличить значение константы NR_OPEN_DEFAULT с помощью директивы препроцессора. Следующая структура данных, связанная с процессом, — это структура fs_struct, которая содержит информацию, связанную с процессом, и на которую указывает поле fs дескриптора процесса. Эта структура определена в файле <linux/fs_struct.h> и имеет следующий вид с поясняющими комментариями.
struct fs_struct {
atomic_t count; /* счетчик ссылок на структуру */
rwlock_t lock; /* блокировка для защиты структуры */
int umask; /* права доступа к файлу, используемые
по умолчанию */
struct dentry *root; /* объект dentry корневого каталога */
struct dentry *pwd; /* объект dentry
текущего рабочего каталога */
struct dentry *allroot; /* объект dentry альтернативного корня */
struct vfsmount *rootmnt; /* объект монтирования корневого каталога */
struct vfsmount *pwdmnt; /* объект монтирования
текущего рабочего каталога */
struct vfsmount *altrootmnt; /* объект монтирования
альтернативного корня */
};
Эта структура содержит текущий рабочий каталог и корневой каталог данного процесса.
Третья, и последняя, структура — это структура namespace, которая определена в файле <linux/namespace.h> и на экземпляр которой указывает поле namespace дескриптора процесса. Пространства имен, индивидуальные для каждого процесса, были введены в ядрах Linux серии 2.4. Это позволило создать для каждого процесса уникальное представление о смонтированных файловых системах. Иными словами, процесс может иметь не только уникальный корневой каталог, но и полностью уникальную иерархию смонтированных файловых систем, если это необходимо. Как обычно, ниже приведена соответствующая структура данных с комментариями.
struct namespace {
atomic_t count; /* счетчик ссылок на структуру */
struct vfsmount *root; /* объект монтирования корневого каталога */
struct list_head list; /* список точек монтирования */
struct rw_semaphore sem; /* семафор для защиты пространства имен */
};
Поле list представляет собой двухсвязный список смонтированных файловых систем, которые составляют пространство имен.
Каждый дескриптор процесса имеет связанные с ним рассмотренные структуры данных. Для большинства процессов их дескриптор процесса указывает на уникальную структуру files_struct и структуру fs_struct. Однако для процессов, созданных с флагами CLONE_FILES и CLONE_FS, эти структуры являются совместно используемыми[74]. Отсюда следует, что несколько дескрипторов процессов могут указывать на одну и ту же структуру files_struct, или структуру fs_struct. Поле count каждой структуры содержит счетчик использования, что предотвращает уничтожение структуры данных, когда ее использует хотя бы один процесс.
Структура namespace используется несколько по-другому. По умолчанию вес процессы совместно используют одно пространство имен (и соответственно одну иерархию файловых систем). Только когда для системного вызова clone() указан флаг CLONE_NEWNS, для процесса создается уникальная копия пространства имен. Поскольку для большинства процессов этот флаг не указывается, процессы обычно наследуют пространство имен родительского процесса. Следовательно, для большинства систем существует только одно пространство имен.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Объекты VFS и их структуры данных
Объекты VFS и их структуры данных Виртуальная файловая система (VFS) объектно-ориентированна[69]. Общая файловая модель представлена набором структур данных. Эти структуры данных очень похожи на объекты. Так как ядро программируется строго на языке С, то, при отсутствии
Структуры данных, связанные с файловыми системами
Структуры данных, связанные с файловыми системами В дополнение к фундаментальным объектам подсистемы VFS, ядро использует и другие стандартные структуры данных для управления данными, связанными с файловыми системами. Первый объект используется для описания
Структуры данных
Структуры данных Первое, в чем следует разобраться, — это структуры данных, которые управляют работой библиотеки:• управляющая структура resmgr_attr_t• таблица функций установления соединения resmgr_connect_funcs_t• таблица функций ввода-вывода resmgr_io_funcs_t и еще одна внутренняя
11.7.1. Структуры данных
11.7.1. Структуры данных Хотя код в ladsh1.с поддерживает концепцию задания как множества процессов (предположительно, объединенных вместе каналами), он не предоставляет способа указания того, какие файлы использовать для ввода и вывода. Чтобы позволить это, добавляются новые
Структуры данных процесса
Структуры данных процесса Каждый процесс представлен в системе двумя основными структурами данных — proc и user, описанными, соответственно, в файлах <sys/proc.h> и <sys/user.h>. Содержимое и формат этих структур различны для разных версий UNIX. В табл. 3.1 приведены некоторые поля
Структуры данных
Структуры данных Структура данных socket, описывающая сокет, представлена на рис. 6.21. В этой структуре хранится информация о типе сокета (so_type), его текущем состоянии (so_state) и используемом протоколе (so_proto). Рис. 6.21. Структуры данных сокетаСокет является коммуникационным узлом
2.3 СТРУКТУРЫ ДАННЫХ ЯДРА
2.3 СТРУКТУРЫ ДАННЫХ ЯДРА Большинство информационных структур ядра размещается в таблицах фиксированного размера, а не в динамически выделенной памяти. Преимущество такого подхода состоит в том, что программа ядра проста, но в ней ограничивается число элементов
1.4 Структуры данных, связанные с драйверами устройств Windows
1.4 Структуры данных, связанные с драйверами устройств Windows Перед подробным рассмотрением драйверов устройств Windows NT стоит разобраться в некоторых важных структурах данных, которые используются этими драйверами. Каждый драйвер Windows, включая драйверы устройств хранения
Риски, связанные с хостингом и потерей данных
Риски, связанные с хостингом и потерей данных Примерно раз в два года в русскоязычном сегменте Рунета разыгрывается очередная драма, связанная с пожаром в дата-центре, отключением серверов крупного хостинг-провайдера или другими аварийными ситуациями, которые сразу же
7.3.3. Концепции, связанные с производственным процессом проекта Описание производственного процесса проекта
7.3.3. Концепции, связанные с производственным процессом проекта Описание производственного процесса проекта Является стандартным определением производственного процесса, используемого в проекте. Данный процесс представляет собой четко охарактеризованный и понятный
1. Абстрактные структуры данных
1. Абстрактные структуры данных Структурированные типы данных, такие как массивы, множества, записи, представляют собой статические структуры, так как их размеры неизменны в течение всего времени выполнения программы.Часто требуется, чтобы структуры данных меняли свои
1. Древовидные структуры данных
1. Древовидные структуры данных Древовидной структурой данных называется конечное множество элементов-узлов, между которыми существуют отношения – связь исходного и порожденного.Если использовать рекурсивное определение, предложенное Н. Виртом, то древовидная
Проектирование структуры данных
Проектирование структуры данных Как и построение здания, построение базы данных начинается с проектирования. Чтобы понять, какая структура базы будет для вас наиболее удобной и полезной, следуйте нижеприведенным этапам проектирования.1. Для начала необходимо выяснить,
6.2. Типы и структуры данных
6.2. Типы и структуры данных Под типом данных (data type) понимается множество величин, объединенных определенными признаками и совокупностью допустимых преобразований.Так, если в качестве объединяющего признака используется вид данных, то данные можно разделить на
Ошибки, связанные с накопителями данных
Ошибки, связанные с накопителями данных Ошибки, связанные с накопителями данных и файловой системой, представлены в табл. 6.1.Таблица 6.1. Ошибки накопителей
20. Древовидные структуры данных
20. Древовидные структуры данных Древовидной структурой данных называется конечное множество элементов-узлов, между которыми существуют отношения – связь исходного и порожденного.Если использовать рекурсивное определение, предложенное Н. Виртом, то древовидная