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

3.1.5. Состояния процессов

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

cat chapter1 chapter2 chapter3| grep tree

В первом процессе запускается программа cat, объединяется и выдается в результате содержимое трех файлов. Второй процесс запускает программу grep, которая выбирает все строки со словом «tree». Относительная скорость данных процессов (которая зависит от следующих факторов: сложности выполняемых программ и количества времени работы центрального процессора, выделяемого каждому из процессов) может стать причиной возникновения ситуации, в которой программа grep будет готова к работе, а входные данные, необходимые для ее работы, будут отсутствовать. В этом случае она должна блокироваться до момента получения входных данных.

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

• выполняемый (данному процессу выделено время центрального процессора);

• готовый (временно приостановленный для того, чтобы дать возможность выполнения другому процессу);

• заблокированный (ожидающий внешнего события и до тех пор неспособный выполняться).

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

Рис

Рис. 3.2. Состояния процесса и
переходы между этими состояниями

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

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

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

Рис

Рис. 3.3. Модель процессов
операционной системы, где
низший уровень занимает
планировщик процессов.

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

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

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