Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы операционных систем.doc
Скачиваний:
282
Добавлен:
01.05.2014
Размер:
2.22 Mб
Скачать

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

Сложный жизненный путь процессав компьютере начинается с его рождения. Любая операционная система, поддерживающая концепциюпроцессов, должна обладать средствами для ихсоздания. В очень простых системах (например, в системах, спроектированных для работы только одного конкретного приложения) всепроцессымогут быть порождены на этапе старта системы. Более сложные операционные системы создаютпроцессыдинамически, по мере необходимости. Инициатором рождения новогопроцессапосле старта операционной системы может выступить либопроцесспользователя, совершивший специальный системный вызов, либо сама операционная система, то есть, в конечном итоге, тоже некоторыйпроцесс.Процесс, инициировавшийсозданиеновогопроцесса, принято называть процессом-родителем (parent process), а вновь созданныйпроцесс– процессом-ребенком (child process). Процессы-дети могут в свою очередь порождать новых детей и т. д., образуя, в общем случае, внутри системы набор генеалогических деревьевпроцессов– генеалогический лес. Пример генеалогического леса изображен нарисунке 2.4. Следует отметить, что все пользовательскиепроцессывместе с некоторымипроцессамиоперационной системы принадлежат одному и тому же дереву леса. В ряде вычислительных систем лес вообще вырождается в одно такое дерево.

Рис. 2.4.Упрощенный генеалогический лес процессов. Стрелочка означает отношение родитель–ребенок

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

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

После наделения процесса-ребенка ресурсами необходимо занести в его адресное пространство программный код, значения данных, установить программный счетчик. Здесь также возможны два решения. В первом случае процесс-ребенок становится дубликатом процесса-родителя по регистровомуипользовательскому контекстам, при этом должен существовать способ определения, кто для кого из процессов-двойников является родителем. Во втором случае процесс-ребенок загружается новой программой из какого-либо файла. Операционная система Unix разрешает порождениепроцессатолько первым способом; для запуска новой программы необходимо сначала создать копию процесса-родителя, а затем процесс-ребенок должен заменить свойпользовательский контекстс помощью специального системного вызова. Операционная система VAX/VMS допускает только второе решение. В Windows NT возможны оба варианта (в различных API).

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

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

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

Следует заметить, что в ряде операционных систем (например, в VAX/VMS) гибель процесса-родителя приводит к завершениюработы всех его "детей". В других операционных системах (например, в Unix) процессы-дети продолжают свое существование и после окончания работы процесса-родителя. При этом возникает необходимость изменения информации вPCBпроцессов-детей о породившем ихпроцесседля того, чтобы генеалогический леспроцессовоставался целостным. Рассмотрим следующий пример. Пустьпроцессс номером 2515 был порожденпроцессомс номером 2001 и послезавершенияего работы остается в вычислительной системе неограниченно долго. Тогда не исключено, что номер 2001 будет использован операционной системой повторно для совсем другогопроцесса. Если не изменить информацию о процессе-родителе дляпроцесса2515, то генеалогический леспроцессовокажется некорректным –процесс2515 будет считать своим родителем новыйпроцесс2001, апроцесс2001 будет открещиваться от нежданного потомка. Как правило, "осиротевшие"процессы"усыновляются" одним из системныхпроцессов, который порождается при старте операционной системы и функционирует все время, пока она работает.