Области
Области
В SCO UNIX адресное пространство процесса разделено на несколько участков, называемых областями (region). Область представляет собой непрерывный участок виртуального адресного пространства процесса, который рассматривается ядром системы как отдельный объект, разделяемый или защищенный от постороннего доступа. Область может использоваться для хранения данных различных типов, включая код, данные, разделяемую память, сегменты библиотек и отображаемые в память файлы. Каждая активная область представлена соответствующей структурой данных ядра и служит основой для управления памятью процесса.
Каждая область представлена собственным сегментом памяти. В совокупности со страничным механизмом организации виртуальной памяти такой подход предоставляет ядру системы большие возможности по эффективному управлению виртуальной памятью процесса.
Области могут совместно использоваться несколькими процессами, при этом ядру нет необходимости создавать дополнительные копии, нужно лишь задать требуемое отображение (виртуальные адреса области у различных процессов могут не совпадать). В качестве примеров разделяемых областей можно привести разделяемую память, разделяемые библиотеки или отображаемые в память файлы. Часто код программы совместно используется несколькими родственными процессами. Информация о каждой активной области хранится ядром в структуре данных region.
Поскольку одна и та же область может использоваться несколькими процессами, для каждого процесса ядро создает связанный список структур pregion (per process region), которые в свою очередь адресуют области, используемые процессом. Указатель на список структур pregion для каждого процесса находится в записи таблицы процессов — структуре proc.
Основные поля структур region и pregion приведены на рис. 3.10.
Рис. 3.10. Управление адресным пространством процесса в SCO UNIX
Помимо указателей p_next, организующих структуры pregion в виде связанного списка, и p_reg, обеспечивающих адресацию соответствующей структуры region, в каждой структуре pregion определен набор флагов определяющий права доступа к области, режим блокирования в памяти и т.д. Поле p_type указывает на тип области. Оно может содержать одно из следующих значений:
Значение Описание PT_UNUSED Область не используется PT_TEXT Область содержит сегмент кода PT_DATA Область содержит сегмент данных PT_STACK Область используется в качестве стека процесса PT_SHMEM Область используется в качестве разделяемой памяти PT_LIBTXT Область содержит код библиотек PT_LIBDAT Область содержит данные библиотек PT_SHFIL Область используется для хранения файла, отображенного в памятьНаконец, поле p_regva задает виртуальный адрес области в адресном пространстве процесса.
Поля структуры region, приведенные на рис. 3.10, имеют следующие значения. Поле r_pgsz определяет размер области в страницах, из которых r_nvalid страниц присутствуют в оперативной памяти (см. далее раздел "Страничное замещение"). Несколько процессов могут ссылаться на одну и ту же область, поле r_refcnt хранит число таких ссылок. Поле r_pde адресует таблицу страниц области[33]. Поле r_iptr адресует inode файла, где располагаются данные области (например, для области кода, r_iptr будет указывать на inode исполняемого файла).
Фактическую информацию о структурах управления адресным пространством процесса можно получить с помощью команды crash(1M). В следующем примере таким образом определяется содержимое структур pregion процесса и характеристики соответствующих областей.
# crash
dumpfile = /dev/mem, namelist = /unix, outfile = stdout
> pregion 101
SLOT PREG REG# REGVA TYPE FLAGS
101 0 12 0x700000 text rdonly
1 22 0x701000 data
2 23 0x7ffffffc stack
3 145 0x80001000 lbtxt rdonly
4 187 0x80031000 lbdat pr
Как можно увидеть из вывода команды crash(1М), с рассматриваемым процессом связаны пять областей: сегмент кода, данных и стека, а также сегменты кода и данных подключенной библиотеки. Столбец REG# определяет запись таблицы областей, где расположена адресуемая каждой pregion область region. Заметим, что значение в столбце REG# лишь отчасти соответствует полю p_reg структуры pregion, поскольку последнее является указателем, а не индексом таблицы. Столбец REGVA содержит значения виртуальных адресов областей.
С помощью полученной информации мы можем более детально рассмотреть любую из областей процесса. Выведем данные о сегментах кода, данных и стека:
>region 12 22 23
SLOT PGSZ VALID SMEM NONE SOFF KEF SWP NSW FORW BACK INOX TYPE FLAGS
12 1 1 1 0 0 11 0 0 15 5 154 stxt done
22 3 1 0 0 0 1 0 0 238 23 154 priv done
23 2 1 1 0 0 1 0 0 135 24 priv stack
Столбец PGSZ определяет размер области в страницах, а столбец VALID — число страниц этой области, находящихся в оперативной памяти. Как можно заметить, для сегментов данных и стека страниц недостаточно, поэтому может возникнуть ситуация, когда процессу потребуется обращение к адресу, в настоящее время отсутствующему в памяти. Заметим также, что столбец INOX содержит индексы таблиц inode, указывающие на метаданные файлов, откуда было загружено содержимое соответствующих сегментов.
Мы можем взглянуть на дополнительные сведения об этом файле:
>inode 154
INODE TABLE SIZE = 472
SLOT MAJ/MIN FS INUMB RCNT LINK UID GID SIZE MODE MNT M/ST FLAGS
154 1,42 2 1562 3 1 123 56 8972 f---755 0 R130 tx
Из этой таблицы мы можем определить файловую систему, в которой расположен файл (MAJ/MIN), а также номер его дискового inode — INUMB. В данном случае он равен 1562. Выполнив команду ncheck(1), мы узнаем имя исполняемого файла, соответствующего исследуемому процессу:
$ ncheck -i 1562
/de/root:
1562 /home/andrei/CH3/test
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Области памяти
Области памяти Области памяти (memory areas) представляются с помощью объектов областей памяти, которые хранятся в структурах типа vm_area_struct. Эта структура определена в файле <linux/mm.h>. Области памяти часто называются областями виртуальной памяти (virtual memory area, или VMA).Структура
Области данных
Области данных Области данных содержат записи базы данных. Все записи одной области данных схожи: однородны и имеют фиксированную длину. Записи хранятся в порядке их поступления, и все удаленные записи по-прежнему занимают место.Объект «область данных» состоит из
Области
Области В SCO UNIX адресное пространство процесса разделено на несколько участков, называемых областями (region). Область представляет собой непрерывный участок виртуального адресного пространства процесса, который рассматривается ядром системы как отдельный объект,
6.5.2 Выделение области
6.5.2 Выделение области Ядро выделяет новую область (по алгоритму allocreg, Рисунок 6.18) во время выполнения системных функций fork, exec и shmget (получить разделяемую память). Ядро поддерживает таблицу областей, записям которой соответствуют точки входа либо в списке свободных
6.5.5 Загрузка области
6.5.5 Загрузка области В системе, где поддерживается подкачка страниц по обращению, ядро может «отображать» файл в адресное пространство процесса во время выполнения функции exec, подготавливая последующее чтение по запросу отдельных физических страниц (см. главу 9). Если же
6.5.6 Освобождение области
6.5.6 Освобождение области Если область не присоединена уже ни к какому процессу, она может быть освобождена ядром и возвращена в список свободных областей (Рисунок 6.25). Если область связана с индексом, ядро освобождает и индекс с помощью алгоритма iput, учитывая значение
Определение области
Определение области Как правило, для определения областей в файлы krb5.conf и kdc.conf включаются специальные записи. Отредактировав файл, рассмотренный выше в качестве примера, вы измените конфигурацию KDC, серверов приложений и клиентов. Для того чтобы изменения были учтены
Администрирование области
Администрирование области Отредактировав конфигурационные файлы Kerberos и вызвав kdb5_util для создания основного ключа и инициализации базы данных Kerberos, можно приступать к администрированию области. Этот процесс в основном сводится к определению принципалов. Для выполнения
Значки области уведомлений
Значки области уведомлений Область уведомлений расположена в правой части Панели задач. Она предназначена для отображения программ, которые автоматически загружаются при старте операционной системы. С помощью механизма Значки области уведомлений вы сможете
Области с прокруткой
Области с прокруткой Класс QScrollArea содержит область отображения, которую можно прокручивать, и две полосы прокрутки. Если мы хотим добавить в виджет полосы прокрутки, значительно проще использовать класс QScrollArea, чем создавать свои собственные экземпляры QScrollBar и самим
Обзор области видимости
Обзор области видимости Каждая VBA-процедура имеет свою вполне определенную область видимости. Область видимости определяет, из какой части программы вы можете вызвать эту процедуру, а из какой - нет. Можно сказать, что область видимости отвечает за то, какая часть
Рекомендуемые области для тестирования
Рекомендуемые области для тестирования В тур студента для Chrome входят:— «Копировать» и «Вставить»: возможна ли передача разных типов данных через буфер обмена?— Перемещение офлайнового контента в облако: веб-страницы, изображения, текст и прочее.— Производительность:
Области применения. NET
Области применения. NET Как и было заявлено Microsoft с самого начала обнародования сведений о. NET, этот набор технологий в первую очередь адресован программистам, которые работают с веб-приложениями, и предназначен для создания расширяемых распределенных приложений, которые,
Области значений
Области значений Область значений — это интервал от минимального до максимального значения, которое может быть представлено в переменной данного типа. В таблице 3.3 приведен размер занимаемой памяти и области значений переменных для каждого типа. Поскольку переменных
Области
Области CombineRgn Функция CombineRgn объединяет две области и сохраняет результат в третьей. Две области объединяются согласно указанному режиму объединения. int CombineRgn ( HRGN hrgnDest , // дескриптор результирующей области HRGN hrgnSrc 1 , // дескриптор исходной области HRGN hrgnSrc 2 , // дескриптор