□ Размещение в памяти каталога страниц и таблиц страниц; инициализация регистра — указателя на каталог таблиц страниц (для Intel — CR3) (в системах, использующих несколько каталогов страниц, каждый процесс хранит в u-area значение этого регистра; в этом случае инициализацию указателя необходимо проводить при каждом переключении контекста); инициализация каталога страниц.
□ Установка отображения путем записи соответствующих значений в таблицы страниц.
□ Обработка страничных ошибок.
□ Управление сверхоперативным кэшем.
□ Обеспечение обмена страницами между оперативной и вторичной памятью.
В реализации перечисленных функций существенную роль играют структуры данных, обеспечивающие удобное представление адресного пространства процесса для операционной системы. Фактический формат этих структур существенным образом зависит от аппаратной архитектуры и версии UNIX, поэтому в следующих разделах для иллюстрации тех или иных положений также использована операционная система SCO UNIX.
В 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] Для областей, размер которых превышает 4 Мбайт, одной таблицы страниц недостаточно, и region хранит элементы каталога таблиц страниц в виде связанного списка.
. Поле r_iptr
адресует inode файла, где располагаются данные области (например, для области кода, r_iptr
будет указывать на inode исполняемого файла).
Читать дальше