Технология программирования для распределенных параллельных систем. Демьянович Ю.К - 26 стр.

UptoLike

}
}
Использующий этот монитор процесс должен иметь вид
Shortest_Job.request(15);
[получение и использование затребованного ресурса];
Shortest_Job.release;
§ 10. Организация “спящих” процессов
Основой такой организации является интервальный таймер,
позволяющий процессу перейти в состояние “сна” на некоторое ко-
личество единиц времени. Фактически речь идет о приостановке
процесса.
Необходимый здесь интервальный таймер реализуется в виде
монитора, представляющего логические часы.
С логическими часами возможны две операции:
delay(interval) операция, приостанавливающая процесс на
interval “тиков” таймера;
tick операция, увеличивающая значение логических часов и
периодически запускаемая аппаратным таймером с высоким прио-
ритетом (для сохранения точности логических часов).
Замечание. Особая точность логических часов не требуется, по-
скольку происходит проверка числа “тиков” и запуск или приоста-
новка процесса может происходить только после очередного “тика”.
Будем считать, что значение логических часов хранится в пере-
менной tod (time of day) так что инвариантом требуемого мо-
нитора является
CLOCK: {tod>=0}
V
{tod монотонно увеличивается на единицу}
После вызова операции delay(interval) процесс “засыпает” на
interval “тиков”.
В процедуре (операции) delay вводится локальная переменная
wake_time, в которой хранится желаемое время запуска
wake_time=tod+interval;
“Засыпающий” процесс вычисляет период своего “сна” interval
и вызывает процедур у delay, в которой вычисляется упомянутое
время запуска.
Далее запускается цикл while с условием wake_time>=tod.
27