Шрифт:
Каждая область представлена собственным сегментом памяти. В совокупности со страничным механизмом организации виртуальной памяти такой подход предоставляет ядру системы большие возможности по эффективному управлению виртуальной памятью процесса.
Области могут совместно использоваться несколькими процессами, при этом ядру нет необходимости создавать дополнительные копии, нужно лишь задать требуемое отображение (виртуальные адреса области у различных процессов могут не совпадать). В качестве примеров разделяемых областей можно привести разделяемую память, разделяемые библиотеки или отображаемые в память файлы. Часто код программы совместно используется несколькими родственными процессами. Информация о каждой активной области хранится ядром в структуре данных
Поскольку одна и та же область может использоваться несколькими процессами, для каждого процесса ядро создает связанный список структур
Основные поля структур
Рис. 3.10. Управление адресным пространством процесса в SCO UNIX
Помимо указателей
Значение | Описание |
---|---|
PT_UNUSED | Область не используется |
PT_TEXT | Область содержит сегмент кода |
PT_DATA | Область содержит сегмент данных |
PT_STACK | Область используется в качестве стека процесса |
PT_SHMEM | Область используется в качестве разделяемой памяти |
PT_LIBTXT | Область содержит код библиотек |
PT_LIBDAT | Область содержит данные библиотек |
PT_SHFIL | Область используется для хранения файла, отображенного в память |
Наконец, поле
Поля структуры
33
Для областей, размер которых превышает 4 Мбайт, одной таблицы страниц недостаточно, и region хранит элементы каталога таблиц страниц в виде связанного списка.
Фактическую информацию о структурах управления адресным пространством процесса можно получить с помощью команды crash(1M). В следующем примере таким образом определяется содержимое структур
Как можно увидеть из вывода команды crash(1М), с рассматриваемым процессом связаны пять областей: сегмент кода, данных и стека, а также сегменты кода и данных подключенной библиотеки. Столбец
С помощью полученной информации мы можем более детально рассмотреть любую из областей процесса. Выведем данные о сегментах кода, данных и стека:
Столбец