Мониторы

Лекция 7

 

Глава 6. Синхронизация параллельных процессов на высоком

уровне

 

 

1. Мониторы. Команды Wait() и Signal(). Монитор, реализующий двоичный семафор.

2. Решение задачи передачи данных одного процесса другому при помощи монитора (случай кольцевого буфера).

3. Решение задачи передачи данных одного процесса другому при помощи монитора (случай информационной базы).

4. Рандеву в языке Ада. - Самостоятельно.

5. Решение задачи передачи данных одного процесса другому с помощью задач на языке Ада (случай кольцевого буфера). - Самостоятельно.

6. Решение задачи “обедающие философы”. - Самостоятельно.

 

Литература

· [Гордеев 01] Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. СПб.: Питер, 2001.

· [Дейтел 87] Дейтел Г., Введение в операционные системы. М."Мир",1987.

· [Кейлингерт 85] Кейлингерт П., Элементы операционных систем, М."Мир", 1985.

· [Кейслер 86] Кейслер С., Проектирование операционных систем для малых ЭВМ, М."Мир", 1986.

· [Колин 75] Колин А., Введение в операционные системы, М."Мир", 1975.

· [Цикритзис 77] Цикритзис Д., Бернстайн Ф., Операционные системы, М."Мир", 1977.

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


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

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

Внутренние данные монитора могут быть либо глобальными, относящимися ко всем процедурам монитора, либо локальными, относящимися только к одной процедуре монитора. Ко всем этим данным можно обращаться только изнутри монитора; процессы, находящиеся вне монитора просто не могут получить доступа к данным монитора. Принимая такое структурное решение, значительно упрощающее разработку программных систем повышенной надежности, говорят, что информация спрятана (information hiding).

Команды Wait () и Signal ().

Если процесс обращается к некоторой процедуре монитора, но соответствующий ресурс занят, эта процедура выдает команду ожидания Wait.Когда монитор блокирует процесс с помощью команды Wait,он должен указать условие, при которомпроцесс может возобновить свою работу. Когда это условие будет выполнено, монитор выработает команду оповещения Signal,объявляющую о том, что данный ресурс освободился. Если какие-либо процессы ожидают выполнения этого условия, то один из них пробуждается и получает разрешение продолжить работу. Учитывая выше сказанное, команды ожидания и оповещения могут быть записаны следующим образом: