Читать книгу 📗 "Операционная система UNIX - Робачевский Андрей Михайлович"
Каждая область представлена собственным сегментом памяти. В совокупности со страничным механизмом организации виртуальной памяти такой подход предоставляет ядру системы большие возможности по эффективному управлению виртуальной памятью процесса.
Области могут совместно использоваться несколькими процессами, при этом ядру нет необходимости создавать дополнительные копии, нужно лишь задать требуемое отображение (виртуальные адреса области у различных процессов могут не совпадать). В качестве примеров разделяемых областей можно привести разделяемую память, разделяемые библиотеки или отображаемые в память файлы. Часто код программы совместно используется несколькими родственными процессами. Информация о каждой активной области хранится ядром в структуре данных
regionПоскольку одна и та же область может использоваться несколькими процессами, для каждого процесса ядро создает связанный список структур
pregionpregionprocОсновные поля структур
regionpregion
Рис. 3.10. Управление адресным пространством процесса в SCO UNIX
Помимо указателей
p_nextpregionp_regpregionp_type| Значение | Описание |
|---|---|
| PT_UNUSED | Область не используется |
| PT_TEXT | Область содержит сегмент кода |
| PT_DATA | Область содержит сегмент данных |
| PT_STACK | Область используется в качестве стека процесса |
| PT_SHMEM | Область используется в качестве разделяемой памяти |
| PT_LIBTXT | Область содержит код библиотек |
| PT_LIBDAT | Область содержит данные библиотек |
| PT_SHFIL | Область используется для хранения файла, отображенного в память |
Наконец, поле
p_regvaПоля структуры
regionr_pgsznvalidr_refcntr_pder_iptrr_iptrФактическую информацию о структурах управления адресным пространством процесса можно получить с помощью команды crash(1M). В следующем примере таким образом определяется содержимое структур
pregion# <b>crash</b>dumpfile = /dev/mem, namelist = /unix, outfile = stdout> <b>pregion 101</b>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#pregionregionREG#p_regpregionREGVAС помощью полученной информации мы можем более детально рассмотреть любую из областей процесса. Выведем данные о сегментах кода, данных и стека:
>region 12 22 23SLOT 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Столбец
PGSZVALIDINOXМы можем взглянуть на дополнительные сведения об этом файле:
><b>inode 154</b>INODE TABLE SIZE = 472SLOT MAJ/MIN FS INUMB RCNT LINK UID GID SIZE MODE MNT M/ST FLAGS154 1,42 2 1562 3 1 123 56 8972 f---755 0 R130 txИз этой таблицы мы можем определить файловую систему, в которой расположен файл (
MAJMININUMB