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