Операционные системы. Часть 1. Основы управления ресурсами. Рощин А.В. - 81 стр.

UptoLike

Составители: 

81
адресном пространстве операционной системы, однако он хранится не в
области ядра, а непосредственно примыкает к образу процесса и
перемещается вместе с ним, если это необходимо, из оперативной памяти на
диск.
Порождение процессов в системе UNIX происходит в результате
выполнения системного вызова fork. ОС строит образ порожденного
процесса, являющийся точной копией образа породившего процесса, то есть
дублируются дескриптор, контекст и образ процесса. Сегмент данных и
сегмент стека родительского процесса копируются на новое место, образуя
сегменты данных и стека процесса-потомка. Процедурный сегмент
копируется только тогда, когда он не является разделяемым. В противном
случае процесс-потомок становится еще одним процессом, разделяющим
данный процедурный сегмент.
После выполнения системного вызова fork оба процесса продолжают
выполнение с одной и той же точки. Чтобы процесс мог опознать, является он
родительским процессом или процессом-потомком, системный вызов fork
возвращает в качестве своего значения в породивший процесс
идентификатор порожденного процесса, а в порожденный процесс – NULL.
Типичное разветвление на языке С записывается так:
if( fork () ) { действия родительского процесса }
else { действия порожденного процесса }
Идентификатор потомка может быть присвоен переменной, входящей в
контекст родительского процесса. Так как контекст процесса наследуется его
потомками, то потомки могут узнать идентификаторы своих «старших
братьев», таким образом, сумма знаний наследуется при порождении и может
быть распространена между родственными процессами. На независимости
идентификатора процесса от выполняемой процессом программы построен
механизм, позволяющий процессу перейти к выполнению другой программы
с помощью системного вызова exec.
                                           81



адресном пространстве операционной системы, однако он хранится не в
области ядра, а непосредственно примыкает к образу процесса и
перемещается вместе с ним, если это необходимо, из оперативной памяти на
диск.
        Порождение процессов в системе UNIX происходит в результате
выполнения системного вызова fork. ОС строит образ порожденного
процесса, являющийся точной копией образа породившего процесса, то есть
дублируются дескриптор, контекст и образ процесса. Сегмент данных и
сегмент стека родительского процесса копируются на новое место, образуя
сегменты данных и стека процесса-потомка. Процедурный сегмент
копируется только тогда, когда он не является разделяемым. В противном
случае процесс-потомок становится еще одним процессом, разделяющим
данный процедурный сегмент.
        После выполнения системного вызова fork оба процесса продолжают
выполнение с одной и той же точки. Чтобы процесс мог опознать, является он
родительским процессом или процессом-потомком, системный вызов fork
возвращает       в   качестве    своего     значения    в   породивший   процесс
идентификатор порожденного процесса, а в порожденный процесс – NULL.
Типичное разветвление на языке С записывается так:
        if( fork () ) { действия родительского процесса }
        else { действия порожденного процесса }
        Идентификатор потомка может быть присвоен переменной, входящей в
контекст родительского процесса. Так как контекст процесса наследуется его
потомками, то потомки могут узнать идентификаторы своих «старших
братьев», таким образом, сумма знаний наследуется при порождении и может
быть распространена между родственными процессами. На независимости
идентификатора процесса от выполняемой процессом программы построен
механизм, позволяющий процессу перейти к выполнению другой программы
с помощью системного вызова exec.