Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SRS_IPOVS_OS.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

Структура монитора

Монитор представляет собой программный модуль, состоящий из инициализирующей последовательности, одной или нескольких процедур и локальных данных. Основные характеристики монитора следующие.

  1. Локальные переменные монитора доступны только его процедурам; внешние процедуры доступа к локальным данным монитора не имеют.

  2. Процесс входит в монитор путем вызова одной из его процедур.

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

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

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

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

  1. cwait(c): Приостанавливает выполнение вызывающего процесса по условию c. Монитор при этом доступен для использования другим процессом.

  2. csignal(c): возобновляет выполнение процесса, приостановленного вызовом cwait(c). Если имеется несколько таких процессов, выбирается один из них; если таких процессов нет, функция не делает ничего.

На рис. 9.1 показана структура монитора. Хотя процесс может войти в монитор посредством вызова любой его процедуры, мы будем рассматривать монитор как имеющий единственную точку входа, которая позволяет обеспечить наличие в мониторе не более одного процесса в любой момент времени. Другие процессы, которые пытаются войти в монитор, присоединяются к очереди процессов, приостановленных в ожидании доступности монитора. После того как процесс вошел в монитор, он может временно приостановиться, выполнив вызов cwait(x); после этого процесс помещается в очередь процессов, ожидающих повторного входа в монитор при выполнении условия. Если процесс, выполняющийся в мониторе, обнаруживает изменение переменной условия x, он выполняет операцию csignal(x), которая сообщает об обнаруженном изменении соответствующей очереди.

Вопросы для самоконтроля

  1. Что такое состояние состязания?

  2. Что такое семафор?

  3. Какие операции определены для семафоров?

  4. В чем различие между сильными и слабыми семафорами?

  5. Приведите пример применения семафора для достижения взаимного исключения.

  6. Реализуйте при помощи семафоров следующую задачу. Требуется организовать критическую секцию, в которой одновременно могут находиться не более n процессов.

  7. Приведите пример применения сигнализирующего семафора.

  8. Как реализовать семафоры в ОС, умеющей блокировать прерывания?

  9. Дайте определение мьютекса.

  10. В чем отличие мьютекса от бинарного семафора?

  11. Можно ли синхронизировать два потока одного процесса, используя семафор в ядре, если потоки реализованы в пространстве ядра? Если потоки реализованы в пространстве пользователя? Предполагается, что потоки остальных процессов не имеют доступа к семафору. Поясните ответы.

  12. Поясните принцип работы монитора.

  13. В чем преимущество монитора перед семафором?

  14. Для чего нужны в мониторах переменные условия (условные переменные)?

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]