Наверх Системное программирование
Предыдущий раздел Оглавление Следующий раздел

3.1.2. Создание процесса

Операционным системам необходимы определенные способы для создания и завершения процессов по мере необходимости.

К созданию процессов приводят четыре следующих основных события:

1. Инициализация операционной системы;

2. Системный вызов для создания нового процесса от работающего процесса

3. Создание нового процесса на запрос пользователя.

4. Инициация пакетного задания.

При загрузке операционной системы создаются несколько процессов. Некоторые из них являются высокоприоритетными процессами, то есть процессами, взаимодействующими с пользователями и выполняющими для них определенные действия. Остальные представляют собой фоновые процессы, не связанные с конкретными пользователями, но предназначенные для выполнения специфических функций. К примеру, фоновый процесс, который создается для получения входящих сообщений электронной почты, основную часть времени находится в спящем режиме, становясь активным только при появлении писем. Другой фоновый процесс, который создается для получения запросов на веб-страницы, находящиеся на диске, активизируется при наличии запроса для его обслуживания. Фоновые процессы, которые необходимы для обработки какой-либо активной деятельности, связанной, например, с веб-страницами, электронной почтой, выводом информации на печать и т.д., называют демонами. Обычно в крупных системах насчитываются десятки таких процессов. В UNIX-подобных системах для получения списка выполняемых процессов используется программа ps. В Windows для этой цели используется диспетчер задач.

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

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

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

Если обобщить все эти случаи с технической стороны, то новый процесс создается за счет уже существующего процесса, выполняющего системный вызов, который предназначен для создания нового процесса. Таким существующим процессом может быть работающий пользовательский процесс, системный процесс, вызванный событиями устройств ввода, или процесс управления пакетными заданиями. Системный вызов от такого процесса предписывает операционной системе создать новый процесс и указывает, какую программу необходимо в нем запустить.

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

В Windows одним вызовом функции Win32 CreateProcess создается процесс, и в него загружается необходимая программа. Данный системный вызов имеет десять параметров, включая новую программу, параметры командной строки для этой выполняемой программы, биты, управляющие наследованием открытых файлов, данные о приоритетах, спецификацию окна (если оно будет использоваться), указатель на структуру для хранения информации о созданном процессе, а также различные параметры безопасности. Кроме функции CreateProcess в Win32 имеется около ста других функций для управления и синхронизации процессов.

И в UNIX-подобных системах, и в Windows после создания процесса родительский и дочерний процессы обладают отдельными независимыми друг от друга адресными пространствами. Если некоторый процесс изменит слово в своем адресном пространстве, другие процессы эти изменения не заметят. В UNIX-подобных системах начальное состояние адресного пространства дочернего процесса является копией адресного пространства родительского процесса, но у них нет общей памяти, которая доступна для записи данных. Но все же новый созданный процесс имеет возможность делить с родительским процессом часть других ресурсов, например открытые файлы.

В Windows адресные пространства родительского и дочернего процессов являются различными с момента создания.

Предыдущий раздел Оглавление Следующий раздел