Составители:
Рубрика:
– можно достичь б´ольшей эффективности при реализации на
однопроцессорной системе.
Второй способ позволяет исключать является зацикливающиеся
процессы и является
– более общим, чем первый;
– более естественным для мультипроцессоров с разделяем ой п а-
мятью, на каждом из которых работает свой модуль.
В дальней шем будет использоваться второй способ, а именно
будем считать, что
1) процессы внутри модуля выполняются параллельно;
2) программируется взаимное исключение и условная синхрони-
зация.
§ 3. Модуль сервера времени
Пусть в модуле определены две операции
get_time
delay
Клиент может получить текущее время суток, вызывая опера-
цию get_time, и может заблокироваться (“уснуть”), вызывая опе-
рацию delay.
Сервер времени имеет внутренний процесс, который постоян-
но запускает аппаратный таймер и при возникновении прерывания
увеличивает счетчик времени.
module TimeServer
op get_time() returns int;
# - получить время
op delay (int interval, myid);
# - "заснуть" на interval "тиков"
body
int tod=0; # tod - время (суток)
sem m=1; # m - семафор исключения
sem d[n]=([n]0);
# d[n] - скрытые семафоры задержек
queue of (int waketime, int process_id) napQ
# napQ - очередь приостановленных
# процессов (при m=1 tod<waketime)
proc get_time() returns time {
75
Страницы
- « первая
- ‹ предыдущая
- …
- 72
- 73
- 74
- 75
- 76
- …
- следующая ›
- последняя »