Каждый процесс имеет четко определенный контекст, включающий всю информацию, необходимый для его описания. Ниже перечислены компоненты контекста:[/b]
• Адресное пространство задачи. Обычно делится на несколько составляющих: текст программы (выполняемый код), данные, стек задачи, совместно используемые области памяти и т. д. • Управляющая информация. Ядро использует для поддержки управляющей информации о процессе две основные структуры данных: область и и структуру ргос. Каждый процесс также обладает собственным стеком ядра и картами трансляции адресов. • Полномочия. Включают в себя идентификаторы пользователя и группы, ассоциируемые с данным процессом (которые будут описаны в разделе 2.3.3). • Переменные окружения. Это набор строк в форме: переменная=значение Переменные окружения наследуются от родительского процесса. Во многих вариантах UNIX такие строки хранятся в вершине стека. Стандартные пользовательские библиотеки имеют функции для добавления, удаления или изменения переменных, а также для возврата ее значения. При запуске новой программы вызывающий процесс может сообщить функции exec о том, что переменные окружения должны остаться «родительскими» или вместо этого предложить новый набор переменных. • Аппаратный контекст. Включает содержимое регистров общего назначения, а также набора специальных системных регистров. Системные регистры содержат: Обозначение характерно для машин PDP и процессоров ALPHA, в архитектуре Intel эту роль играет регистр (Е)1Р — указатель команд, instruction pointer. Обозначения SP и PSW в ней сохранились. В дальнейшем мы будем чаще пользоваться вторым термином. — Прим. ред. Или нижнего, для машин, в которых стек растет вниз. Также на некоторых системах указатель стека может содержать адрес, по которому будет занесен следующий помещаемый в стек элемент. • Программный счетчик (program counter, PC). Хранит адрес следующей выполняемой инструкции1. • Указатель стека (stack pointer, SP). Содержит адрес верхнего элемента стека2. • Слово состояния процессора (processor status word, PSW). Содержит несколько битов с информацией о состоянии системы, в том числе о текущем и предыдущем режимах выполнения, текущем и преды-дущем уровнях приоритетов прерываний, а также биты переполнения и переноса. • Регистры управления памятью, в которых отображаются таблицы трансляции адресов процесса. • Регистры сопроцессора (Floating point unit, FPU). Машинные регистры содержат аппаратный контекст текущего выполняемого процесса. Когда происходит переключение контекста, эти регистры сохраняются в специальном разделе области и текущего процесса, который называется блоком управления процессом (process control block, РСВ). Ядро выбирает следующий процесс для выполнения и загружает его аппаратный контекст из блока РСВ.