Одноразовые операции

Жизненный путь начинается с состояния «рождения». Любая ОС, поддерживающая концепцию процессов, должна обладать средствами для их создания:

1. в простых системах все процессы могут быть порождены на этапе старта системы;

2. в сложных системах процессы создаются динамически (по мере необходимости).

Инициатором рождения нового процесса после старта ОС может выступить:

1. процесс пользователя, совершивший специальный вызов системы;

2. сама ОС, то есть тоже некоторый процесс.

Процесс, инициировавший создание нового процесса называется процессом-родителем, а вновь созданный процесс – процессом-ребенком. Процессы-дети могут в свою очередь порождать новых детей, образуя в общем случае внутри системы набор генеалогических деревьев-процессов – генеалогический лес. Следует отметить, что все пользовательские процессы вместе с процессами ОС принадлежат к одному дереву леса. В ряде вычислительных систем лес вообще вырождается в одно такое дерево.

При рождении процесса, система заводит новый блок управления процессом с состоянием процесса рождения и начинает его заполнять. Новый процесс получает собственный уникальный идентификационный номер. Поскольку для хранения идентификационных номеров процессов в ОС отводиться ограниченное количество битов, для соблюдения уникальности номеров количество одновременно присутствующих в ней процессов должно быть ограничено. После завершения какого-либо процесса его освободившийся идентификационный номер может быть использован для другого процесса.

Для выполнения своих функций процесс-ребенок требует определенных ресурсов: памяти, файлов, устройств ввода-вывода. Существует два подхода к их выделению:

1. новый процесс может получить в свое распоряжение некоторую часть родительских ресурсов;

2. может получить свои ресурсы непосредственно от ОС и эта информация заносится в блок управления процессом.

После наделения процесса-ребенка ресурсами необходимо занести в его адресное пространство программный код, значение данных, установить программный счетчик.

1. Процесс-ребенок становиться дублирующим процесса-родителя по регистровому и пользовательскому контексту.

2. Процесс-ребенок загружается новой программой из какого-либо файла.

Порождение нового процесса, как дубликата-родителя приводит к возможности осуществления программ, для работы которых организуется более одного процесса. Возможность замены пользовательского контекста по ходу работы приводит к тому, что в рамках одного и того же процесса может выполняться несколько различных программ.

После того, как процесс наделен содержанием, в блок управления процессом дописывается оставшаяся информация и состояние нового процесса переходит в состояние готовность. После рождения процессов-детей процесс-родитель может продолжать свое существование одновременно с выполнением процесса-ребенка, а может ждать завершения работы процесса-ребенка.

После того, как процесс завершил свою работу ОС переводит его в состояние закончил исполнение и освобождает все ассоциируемые с ним ресурсы, делая соответствующие записи в блоке управления процессом. При этом сам блок не уничтожается, а остается в системе некоторое время. Это связано с тем, что процесс-родитель после завершения работы процесса-ребенка может запросить ОС о причине «смерти» процесса-ребенка и статистическую информацию о его работе. Эта информация храниться в блоке управления процессом процесса-ребенка до конца деятельности процесса-родителя.

В ОС Unix такие процессы называются процессами-зомби. Следует отметить, что в некоторых ОС гибель процесса-родителя приводит к завершению работы всех детей, а в некоторых процессы-дети продолжают свою работу. При этом возникает необходимость изменения информации в блоке управления процессом процесса-ребенка о породившем его процессе. Для того чтобы генеалогический лес оставался целостным.

Как правило, «осиротевшие процессы» «усыновляются» одним из системных процессов, которые порождаются при старте ОС и функционируют все время, пока она работает.