Книга: Операционная система UNIX

Структуры данных процесса

Структуры данных процесса

Каждый процесс представлен в системе двумя основными структурами данных — proc и user, описанными, соответственно, в файлах <sys/proc.h> и <sys/user.h>. Содержимое и формат этих структур различны для разных версий UNIX. В табл. 3.1 приведены некоторые поля структуры proc в SCO UNIX, позволяющие проиллюстрировать информацию, необходимую ядру, для управления процессом.

Таблица 3.1. Структура proc

char p_stat Состояние процесса (выполнение, приостановлен, сон и т.д.)
char p_pri Текущий приоритет процесса
unsigned int p_flag Флаги, определяющие дополнительную информацию о состоянии процесса
unsigned short p_uid UID процесса
unsigned short p_suid EUID процесса
int p_sid Идентификатор сеанса
short p_pgrp Идентификатор группы процессов (равен идентификатору лидера группы)
short p_pid Идентификатор процесса (PID)
short p_ppid Идентификатор родительского процесса (PPID)
sigset_t p_sig Сигналы, ожидающие доставки
unsigned int p_size Размер адресного пространства процесса в страницах
time_t p_utime Время выполнения в режиме задачи
time_t p_stime Время выполнения в режиме ядра
caddr_t p_ldt Указатель на LDT процесса
struct pregion *p_region Список областей памяти процесса
short p_xstat Код возврата, передаваемый родительскому процессу
unsigned int p_utbl[] Массив записей таблицы страниц для u-area

В любой момент времени данные структур proc для всех процессов должны присутствовать в памяти, хотя остальные структуры данных, включая образ процесса, могут быть перемещены во вторичную память, — область свопинга. Это позволяет ядру иметь под рукой минимальную информацию, необходимую для определения местонахождения остальных данных, относящихся к процессу, даже если они отсутствуют в памяти.

Структура proc является записью системной таблицы процессов, которая, как мы только что заметили, всегда находится в оперативной памяти. Запись этой таблицы для выполняющегося в настоящий момент времени процесса адресуется системной переменной curproc. Каждый раз при переключении контекста, когда ресурсы процессора передаются другому процессу, соответственно изменяется значение переменной curproc, которая теперь указывает на структуру proc активного процесса.

Вторая упомянутая структура — user, также называемая u-area или u-block, содержит дополнительные данные о процессе, которые требуются ядру только во время выполнения процесса (т.е. когда процессор выполняет инструкции процесса в режиме ядра или задачи). В отличие от структуры proc, адресованной указателем curproc, данные user размещаются (точнее, отображаются) в определенном месте виртуальной памяти ядра и адресуются переменной u. На рис. 3.2 показаны две основные структуры данных процесса и способы их адресации ядром UNIX.


Рис. 3.2. Основные структуры данных процесса

В u-area хранятся данные, которые используются многими подсистемами ядра и не только для управления процессом. В частности, там содержится информация об открытых файловых дескрипторах, диспозиция сигналов, статистика выполнения процесса, а также сохраненные значения регистров, когда выполнение процесса приостановлено. Очевидно, что процесс не должен иметь возможности модифицировать эти данные произвольным образом, поэтому u-area защищена от доступа в режиме задачи.

Как видно из рис. 3.2, u-area также содержит стек фиксированного размера, — системный стек или стек ядра (kernel stack). При выполнении процесса в режиме ядра операционная система использует этот стек, а не обычный стек процесса.

Оглавление книги


Генерация: 0.032. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз