Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции 1-8 / ОС_03.doc
Скачиваний:
141
Добавлен:
04.04.2013
Размер:
148.99 Кб
Скачать

3.5 Приостановка и возобновление процесса

Система может приостановить процесс в следующих случаях:

  • если система работает ненадежно и есть признаки, что она может отказать, то текущие процессы можно приостановить, чтобы вновь активизировать впоследствии после исправления ошибки;

  • некоторые процессы можно приостанавливать в моменты кратковременных пиков нагрузки системы, с тем чтобы возобновлять их выполнение после того, как нагрузка возвратится к обычному уровню.

На рис. 3.5 показана диаграмма состояний процесса, модифицированная с учетом операций приостановки и возобновления. В диаграмму введены два новых состояния, а именно «приостановлен_готов» и «приостановлен_блокирован». На рисунке выше штриховой линии изображены активные состояния, а ниже — состояния приостановки.

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

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

приостановка(имяпроцесса): готов  приостановлен_готов

Процесс, находящийся в состоянии «приостановлен_готов», может быть переведен в состояние готовности другим процессом. Состояния меняются следующим образом:

возобновление(имяпроцесса): приостановлен_готов  готов

Заблокированный процесс может быть переведен в состояние приостановки другим процессом. При этом состояния меняются:

приостановка(имяпроцесса): блокирован  приостановлен_блокирован

Процесс, находящийся в состоянии «приостановлен_блокирован», может быть активизирован другим процессом. При этом состояния меняются:

возобновление(имяпроцесса): приостановлен_блокирован  блокирован

Рис. 3.5 Диаграмма состояний процесса с операциями приостановки и возобновления

Может возникнуть вопрос, не лучше ли вместо перевода заблокированного процесса в состояние приостановки подождать, пока не завершится выполнение операции ввода-вывода или не произойдет другое событие, необходимое для того, чтобы данный процесс стал готовым к выполнению. К сожалению, завершение операции ввода-вывода или ожидаемое событие может никогда не произойти или может задержаться на неопределенно долгий срок. Поэтому перед разработчиком возникает дилемма: либо выполнять приостановку заблокированного процесса, либо предусмотреть механизм, который позволял бы переводить процесс из состояния готовности в состояние приостановки, когда завершится операция ввода-вывода или наступит другое ожидаемое событие. Поскольку приостановка часто является операцией высокого приоритета, ее следует выполнять немедленно. Когда ожидаемое событие в конце концов происходит (если оно все-таки происходит), процесс, находящийся в состоянии «приостановлен_блокирован», меняет свое состояние следующим образом:

Наступлениесобытия(имяпроцесса): приостановлен_блокирован  приостановлен_готов

Движущей силой, меняющей состояния процессов, являются события. Один из основных видов событий — это прерывания.

Соседние файлы в папке Лекции 1-8