Ю. Вахалия - UNIX изнутри (2003) (1114670), страница 14
Текст из файла (страница 14)
Режим и контекст выполнения Мы отметили основные различия между режимами задачи и ядра, пространством процесса и системы, контекстом процесса и системы. На рис. 2.2 проиллюстрированы все эти определения. Код приложения выполняется в режиме задачи и контексте процесса и может иметь доступ только к про- используемых последовательностью функций ядра, инициированной вызовом из процесса. Многие реализации 13М1Х располагают стек ядра в адресном пространстве каждого процесса, но при этом запрещают к нему доступ в режиме задачи.
Концептуально область и и стек ядра хоть и создаются для каждого процесса отдельно и хранятся в его адресном пространстве, они, тем не менее, являются собственностью ядра. Еще одним важным понятием является контекст выполнения. Функции ядра могут выполняться только в контексте процесса или в азстлемиом контексте.
В контексте процесса ядро функционирует от имени текущего процесса (например, пока обрабатывает системный вызов) и может иметь доступ и изменять адресное пространство, область ц и стек ядра этого процесса, Более того, ядро может заблокировать текущий процесс, если тому необходимо ожидать освобождения ресурса или реакции устройства. Ядро также должно выполнять глобальные задачи, такие как обслуживание прерываний устройств и первсчет приоритетов процессов.
Такие задачи не зависят от какого-либо конкретного процесса и, следовательно, обрабатываются в системном контексте (также называемом контекстом прерываний). Если ядро функционирует в системном контексте, то оно не должно иметь доступа к адресному пространству, области и и стеку ядра текущего процесса. Ядро также не должно в этом режиме блокировать процессы, так как это приведет к блокировке «невинного» процесса.
64 Глава 2, Ядро и процессы странству процесса. Системные вызовы и исключения обрабатываются в режиме ядра, но в контексте процесса, однако эти задачи могут иметь доступ к пространству процесса и системы. Прерывания обрабатываются в режиме ядра и системном контексте и могут иметь доступ только к пространству системы, 2.3. Определение процесса Так что же такое процесс в системе !))ч1Х? Наиболее часто встречающийся ответ на этот вопрос таков: «Процесс — это экземпляр выполняемой программы».
Однако такое определение является поверхностным, и для его более детального описания необходимо рассмотреть различные свойства процесса. Процесс — это нечто выполняющее программу и создающее среду для ее функционирования. В это понятие также входит адресное пространство и точка управления. Процесс — это основная единица расписания, так как только один процесс может в один момент'времени занимать процессор. Кроме этого процесс старается перехватить ресурсы системы, такие как различные устройства или память.
Он также запрашивает системные службы, которые выполняются для него и от его имени ядром. Каждый процесс имеет определенное время жизни. Большинство процессов создаются при помощи системного вызова !ой или Фог1 и работают до тех пор, пока не будут завершены вызовом ех11. Во время функционирования процесс может запускать одну или несколько программ. Для запуска программ процесс использует системный вызов ехес. В системе !.1!ч1Х процессы иерархически строго упорядочены. Каждый процесс имеет одного родителя (рагепг, или родительский процесс) и может иметь также одного или нескольких потомков (с)п!д, или процесс-потомок). Иерархия процессов может быть представлена как перевернутое дерево, в вершине (основании) которого находится процесс !п1б Процесс йпг (названный так в силу того, что он запускает программу /е1с/1п1г) является первым прикладным процессом, создаваемым во время загрузки системы.
Этот процесс порождает все остальные прикладные процессы. Во время запуска системы создаются несколько различных процессов, например зваррег или радедаешоп (называемого также раяеоцг даепюп), которые не являются потомками !п1!. Если какой-либо процесс завершен и после него остаются функционирующие процессы-потомки, то они становятся «осиротеааими» (огрЬап) и наследуются процессом 1п1Е 2.3.1. Состояние процессе В системе 11)ч'!Х процессы всегда имели строго определенное состояние.
Переход от одного состояния к другому осуществляется вследствие различных событий. На рис. 2.3 показаны важнейшие состояния процесса в системе !Ж1Х, а также события, являющиеся причиной перехода в иное состояние. 2.3. Определение процесса 65 Системный вызов Готя создает процесс, который начинает свой жизненный цикл в начальном состоянии, также называемом перелоднььн (Ы1е). После тОго как создание процесса завершится, вызов 1ой переводит его в состояние готовности к работе (геаг1у то гцп), в котором процесс ожидает своей очереди на обслуживание.
В какой-то момент времени ядро выбирает этот процесс для выполнения и инициирует переключение контекста. Это производится вызовом процедуры ядра (обычно называемой зтттс1т), которая загружает аппаратный контекст процесса (см. раздел 2.3.2) в системные регистры и передает ему управление. Начиная с этого момента новый процесс ведет себя так же, как и любой другой. Последующие изменения его состояния описаны ниже. Остановлен Остановлен 1 ', Продолжение Пробуждение Рис. 2.3.
Состояния процесса и переходы процесса в иные состояния Процесс, функционирующий в режиме задачи, переходит в режим ядра в результате системного вызова или прерывания и возвращается обратно в ре- 66 Глава 2. Ядро и процессы жим задачи после завершения процедуры обработки'.
Пока обрабатывается системный вызов или прерывание, процессу иногда необходимо ждать некоторого события или освобождения ресурса, недоступного в данный момент времени. Такое ожидание реализуется вызовом Меер(), который помещает процесс в очередь «спящих» процессов и переводит его в спяигее, или ожидающее (аь1еер), состояние. После того как необходимое событие произойдет или ресурс станет доступен, ядро «разбудит» процесс, который с этого момента снова станет готов к работе и перейдет в очередь на выполнение. Когда процесс планируется на выполнение, он изначально выполняется в режиме ядра (состояние выполнения ядролг), где происходит переключение его контекста. Следующее.
изменение состояния зависит от того, чем занимался процесс до того, как достиг своей очереди на выполнение. Если процесс был только что создан илц выполнял код программы (и был вытеснен из очереди на выполнение процессом, имеющим больший приоритет), то он сразу же переводится в режим задачи. Если процесс был блокирован в ожидании ресурса во время выполнения системного вызова, то он продолжит выполнение вызова в режиме ядра. Завершение работы процесса происходит в результате системного вызова ехй или по сигналу (сигналы — это средства оповещения, используемые ядром; см.
главу 4). В любом случае ядро освобождает все ресурсы завершаемого процесса (сохраняя информацию о статусе вьпода и использовании ресурсов) и оставляет процесс в состоянии зомби (гошЬ1е). Процесс остается в этом состоянии до тех пор, пока его процесс-родитель не вызовет процедуру втаб (или один из ее вариантов), которая уничтожит процесс и передаст статус выхода родительскому процессу (см. раздел 2.8.6).
В системе 4ВЯЭ определены дополнительные состояния, не поддерживаемые в системах 5УК2 или 5УКЗ. Процесс может быть остановлен (згоррес1) или переведен в состояние ожидания при помощи сигнала остановки (5165ТОР, 516Т5ТР, 516ТТВт' или 516ТТОП). В отличие от других сигналов, которые отрабатываются только во время выполнения процесса, сигнал остановки изменяет состояние процесса немедленно. Если процесс находится в состоянии работы или готовности к работе, то его состояние изменяется на остановленное.
Если процесс находился в спящем режиме, когда поступил сигнал, его состояние изменится на спящее и остановленное. Остановленный процесс может продолжить работу при помощи сигнала продолжения (516СОМТ), который возвратит его в состояние готовности к работе. Если процесс был остановлен, находясь в спящем режиме, сигнал 516СОМТ возвратит его обратно в этот режим. Позже такие возможности были добавлены и в БЧК4 (см.
раздел 4.5)'. ' Прерывания могут произойти и тогда, когда система находится в режиме ядра. В этом случае система будет оставаться в этом режиме после завершения обработки прерывания. т Система 5ЧКЗ поддерживает состояние остановки для процесса только с целью проведения процедуры трассировки нроиесса (см. раздел б.2.4). Если трассируемый процесс получит любой сигнал, он перейдет в состояние остановки, а его родитель будет «разбужен» ядром. 2.3. Определение процесса 67 2.3.2. Контекст процесса Каждый процесс имеет-четко определенный контекст, включающий всю информацию, необходимуго для его описания. Ниже перечислены компоненты контекста: + Адресное пространство задачи, Обычно делится на несколько составляющих: текст программы (выполняемый код), данные, стек задачи, совместно используемые области памяти и т. д.