Контекст процесса
Каждому процессу соответствует
контекст, в котором он выполняется.
Этот контекст включает содержимое
пользовательского адресного
пространства - пользовательский
контекст (т.е. содержимое сегментов
программного кода, данных, стека,
разделяемых сегментов и сегментов
файлов, отображаемых в виртуальную
память), содержимое аппаратных
регистров - регистровый контекст
(таких, как регистр счетчика команд,
регистр состояния процессора,
регистр указателя стека и
регистров общего назначения), а
также структуры данных ядра
(контекст системного уровня),
связанные с этим процессом. Контекст процесса системного уровня в ОС UNIX состоит из "статической" и "динамических" частей. У каждого процесса имеется одна статическая часть контекста системного уровня и переменное число динамических частей.
Статическая часть контекста процесса системного уровня включает следующее:
A.Описатель процесса, т.е. элемент таблицы описателей существующих в системе процессов. Описатель процесса включает, в частности, следующую информацию:
- состояние процесса;
- физический адрес в основной или внешней памяти u-области процесса;
- идентификаторы пользователя, от имени которого запущен процесс;
- идентификатор процесса;
- прочую информацию, связанную с управлением процессом.
B. U-область (u-area), индивидуальная для каждого процесса область пространства ядра, обладающая тем свойством, что хотя u-область каждого процесса располагается в отдельном месте физической памяти, u-области всех процессов имеют один и тот же виртуальный адрес в адресном пространстве ядра. Именно это означает, что какая бы программа ядра не выполнялась, она всегда выполняется как ядерная часть некоторого пользовательского процесса, и именно того процесса, u-область которого является "видимой" для ядра в данный момент времени. U-область процесса содержит:
- указатель на описатель процесса;
- идентификаторы пользователя;
- счетчик времени, которое процесс реально выполнялся (т.е. занимал процессор) в режиме пользователя и режиме ядра;
- параметры системного вызова;
- результаты системного вызова;
- таблица дескрипторов открытых файлов;
- предельные размеры адресного пространства процесса;
- предельные размеры файла, в который процесс может писать;
- и т.д.
Динамическая часть контекста процесса - это один или несколько стеков, которые используются процессом при его выполнении в режиме ядра. Число ядерных стеков процесса соответствует числу уровней прерывания, поддерживаемых конкретной аппаратурой.
[