Завершение процесса
После того как процесс создан, он начинает выполнять свою работу. Но ничто не длится вечно, даже процесс рано или поздно завершается, чаще всего благодаря одному из следующих событий:
Обычный выход (преднамеренно). В основном процессы завершаются по мере выполнения своей работы.
Выход по ошибке (преднамеренно). Второй причиной завершения процесса может стать неустранимая ошибка (например, попытка откомпилировать несуществующий файл).
Выход по неисправимой ошибке (непреднамеренно). Ошибка может быть вызвана самим процессом, это чаще всего связано с ошибкой в программе (выполнение недопустимой команды, обращение к несуществующей области памяти, деление на ноль).
Уничтожение другим процессом (непреднамеренно). Процесс-«киллер», обладая соответствующими полномочиями, может вызвать системный запрос на уничтожение процесса.
Состояние процессов.
Процесс может находиться в активном и пассивном состоянии. В активном состоянии процесс может участвовать в конкуренции за использование ресурсов вычислительной системы, а в пассивном – он только известен системе, но в конкуренции не участвует (хотя уже само его существование в системе сопряжено с предоставлением памяти). В свою очередь, активный процесс может быть в одном из следующих состояний: выполнения – все необходимые ресурсы выделены. В этом состоянии в каждый конкретный момент времени может находиться только один процесс; готовности к выполнению – выделены все ресурсы, кроме процессора; блокирования или ожидания – затребованные ресурсы не могут быть предоставлены или не завершена операция ввода-вывода.
Выполнение - активное состояние процесса, во время которого процесс обладает всеми необходимыми ресурсами и непосредственно выполняется процессором;
Ожидание - пассивное состояние процесса, процесс заблокирован, он не может выполняться по своим внутренним причинам, он ждет осуществления некоторого события, например, завершения операции ввода-вывода, получения сообщения от другого процесса, освобождения какого-либо необходимого ему ресурса;
Готовность - также пассивное состояние процесса, но в этом случае процесс заблокирован в связи с внешними по отношению к нему обстоятельствами: процесс имеет все требуемые для него ресурсы, он готов выполняться, однако процессор занят выполнением другого процесса.
В ходе жизненного цикла каждый процесс переходит из одного состояния в другое в соответствии с алгоритмом планирования процессов, реализуемым в данной операционной системе.
Реализация процессов. Для реализации процессов ОС содержит таблицу (массив структур), называемую таблицей процессов, с одним элементом для каждого процесса. Элемент таблицы содержит информацию о состоянии процесса, счетчике команд, указателе стека, распределении памяти, состоянии открытых файлов, об использовании и распределении ресурсов, а также всю остальную информацию, которую необходимо сохранять при переключении в состояние готовности или блокирования для последующего запуска – как если бы процесс не останавливался.
Межпроцессное взаимодействие. Процессам часто бывает необходимо взаимодействовать между собой, поэтому необходимо правильно организованное взаимодействие между процессами. Проблема разбивается на три пункта. Первый – передача информации от одного процесса другому. Второй связан с контролем над деятельностью процессов: как гарантировать, что два процесса не пересекутся в критических ситуациях. Третий касается согласования действий процессов: если процесс А должен поставлять данные, а процесс В выводить их на печать, то процесс В должен подождать и не начинать печатать, пока не поступят данные от процесса А. Важно понимать, что последние два пункта относятся и к потокам. Первый – передача информации – в случае потоков проблемой не является, поскольку у потоков общее адресное пространство. Способы взаимодействия процессов можно классифицировать по степени осведомленности одного процесса о существовании другого. Можно выделить три возможные степени осведомленности. 1. Процессы не осведомлены о наличии друг друга. Это независимые процессы, не предназначенные для совместной работы. Хотя эти процессы не работают совместно, ОС должна решать вопросы конкурентного использования ресурсов. 2. Процессы косвенно осведомлены о наличии друг друга. Такие процессы демонстрируют сотрудничество при разделении общего объекта. 3. Процессы непосредственно осведомлены о наличии друг друга. Такие процессы изначально созданы для совместной работы.
