- •Понятия, встречаемые в модуле:
- •Svc – вызов супервизора
- •3.1 Понятия вычислительного процесса и ресурса
- •3.2 Диаграмма состояний процесса
- •3.3 Блок управления процессом
- •3.4 Операции над процессами
- •3.5 Приостановка и возобновление процесса
- •3.6 Обработка прерываний
- •3.6.1 Типы прерываний
- •3.6.2 Переключения контекста
3.5 Приостановка и возобновление процесса
Система может приостановить процесс в следующих случаях:
если система работает ненадежно и есть признаки, что она может отказать, то текущие процессы можно приостановить, чтобы вновь активизировать впоследствии после исправления ошибки;
некоторые процессы можно приостанавливать в моменты кратковременных пиков нагрузки системы, с тем чтобы возобновлять их выполнение после того, как нагрузка возвратится к обычному уровню.
На рис. 3.5 показана диаграмма состояний процесса, модифицированная с учетом операций приостановки и возобновления. В диаграмму введены два новых состояния, а именно «приостановлен_готов» и «приостановлен_блокирован». На рисунке выше штриховой линии изображены активные состояния, а ниже — состояния приостановки.
Инициатором приостановки может быть либо сам процесс, либо другой процесс. В однопроцессорной машине выполняющийся процесс может приостановить только сам себя. В мультипроцессорной машине выполняющийся процесс может быть приостановлен и другим процессом, выполняющимся на другом процессоре.
Процесс, находящийся в состоянии готовности, может быть приостановлен только другим процессом. При этом происходит следующая смена состояния:
приостановка(имяпроцесса): готов приостановлен_готов
Процесс, находящийся в состоянии «приостановлен_готов», может быть переведен в состояние готовности другим процессом. Состояния меняются следующим образом:
возобновление(имяпроцесса): приостановлен_готов готов
Заблокированный процесс может быть переведен в состояние приостановки другим процессом. При этом состояния меняются:
приостановка(имяпроцесса): блокирован приостановлен_блокирован
Процесс, находящийся в состоянии «приостановлен_блокирован», может быть активизирован другим процессом. При этом состояния меняются:
возобновление(имяпроцесса): приостановлен_блокирован блокирован
Рис. 3.5 Диаграмма состояний процесса с операциями приостановки и возобновления
Может возникнуть вопрос, не лучше ли вместо перевода заблокированного процесса в состояние приостановки подождать, пока не завершится выполнение операции ввода-вывода или не произойдет другое событие, необходимое для того, чтобы данный процесс стал готовым к выполнению. К сожалению, завершение операции ввода-вывода или ожидаемое событие может никогда не произойти или может задержаться на неопределенно долгий срок. Поэтому перед разработчиком возникает дилемма: либо выполнять приостановку заблокированного процесса, либо предусмотреть механизм, который позволял бы переводить процесс из состояния готовности в состояние приостановки, когда завершится операция ввода-вывода или наступит другое ожидаемое событие. Поскольку приостановка часто является операцией высокого приоритета, ее следует выполнять немедленно. Когда ожидаемое событие в конце концов происходит (если оно все-таки происходит), процесс, находящийся в состоянии «приостановлен_блокирован», меняет свое состояние следующим образом:
Наступлениесобытия(имяпроцесса): приостановлен_блокирован приостановлен_готов
Движущей силой, меняющей состояния процессов, являются события. Один из основных видов событий — это прерывания.