Операционная система UNIX
Соответственно и образ процесса состоит из двух частей: данных режима ядра и режима задачи. Образ процесса в режиме задачи состоит из сегмента кода, данных, стека, библиотек и других структур данных, к которым он может получить непосредственный доступ. Образ процесса в режиме ядра состоит из структур данных, недоступных процессу в режиме задачи, которые используются ядром для управления процессом. Сюда относятся данные, диктуемые аппаратным уровнем, например состояния регистров, таблицы для отображения памяти и т.д., а также структуры данных, необходимые ядру для обслуживания процесса. Вообще говоря, в режиме ядра процесс имеет доступ к любой области памяти.
Структуры данных процесса
Каждый процесс представлен в системе двумя основными структурами данных — proc и user, описанными, соответственно, в файлах <sys/proc.h> и <sys/user.h>. Содержимое и формат этих структур различны для разных версий UNIX. В табл. 3.1 приведены некоторые поля структуры
в SCO UNIX, позволяющие проиллюстрировать информацию, необходимую ядру, для управления процессом.procТаблица 3.1. Структура proc
charp_statСостояние процесса (выполнение, приостановлен, сон и т.д.) charp_priТекущий приоритет процесса unsigned intp_flagФлаги, определяющие дополнительную информацию о состоянии процесса unsigned shortp_uidUID процесса unsigned shortp_suidEUID процесса intp_sidИдентификатор сеанса shortp_pgrpИдентификатор группы процессов (равен идентификатору лидера группы) shortp_pidИдентификатор процесса (PID) shortp_ppidИдентификатор родительского процесса (PPID) sigset_tp_sigСигналы, ожидающие доставки unsigned intp_sizeРазмер адресного пространства процесса в страницах time_tp_utimeВремя выполнения в режиме задачи time_tp_stimeВремя выполнения в режиме ядра caddr_tp_ldtУказатель на LDT процесса struct pregion*p_regionСписок областей памяти процесса shortp_xstatКод возврата, передаваемый родительскому процессу unsigned intp_utbl[]Массив записей таблицы страниц для u-area В любой момент времени данные структур
для всех процессов должны присутствовать в памяти, хотя остальные структуры данных, включая образ процесса, могут быть перемещены во вторичную память, — область свопинга. Это позволяет ядру иметь под рукой минимальную информацию, необходимую для определения местонахождения остальных данных, относящихся к процессу, даже если они отсутствуют в памяти.procСтруктура
является записью системной таблицы процессов, которая, как мы только что заметили, всегда находится в оперативной памяти. Запись этой таблицы для выполняющегося в настоящий момент времени процесса адресуется системной переменнойproc. Каждый раз при переключении контекста, когда ресурсы процессора передаются другому процессу, соответственно изменяется значение переменнойcurproc, которая теперь указывает на структуруcurprocактивного процесса.procВторая упомянутая структура —
, также называемая u-area или u-block, содержит дополнительные данные о процессе, которые требуются ядру только во время выполнения процесса (т.е. когда процессор выполняет инструкции процесса в режиме ядра или задачи). В отличие от структурыuser, адресованной указателемproc, данныеcurprocразмещаются (точнее, отображаются) в определенном месте виртуальной памяти ядра и адресуются переменнойuser. На рис. 3.2 показаны две основные структуры данных процесса и способы их адресации ядром UNIX.uРис. 3.2. Основные структуры данных процесса
В u-area хранятся данные, которые используются многими подсистемами ядра и не только для управления процессом. В частности, там содержится информация об открытых файловых дескрипторах, диспозиция сигналов, статистика выполнения процесса, а также сохраненные значения регистров, когда выполнение процесса приостановлено. Очевидно, что процесс не должен иметь возможности модифицировать эти данные произвольным образом, поэтому u-area защищена от доступа в режиме задачи.
