- •Лекция 5 Синхронизация процессов
- •1 Синхронизация процессов с использованием объектов ядра
- •1.1 Объекты «мьютекс»
- •1.2 События
- •1.3 Семафоры
- •1.4 Ждущие таймеры
- •2 Задачи синхронизации.
- •2.1 Задача «производитель-потребитель»
- •2.3 Задача «обедающие философы»
- •3 Мониторы Хоара
- •2.2 Задача «читатели-писатели»
- •Var busy: boolean; {busy - занят}
- •4. Почтовые ящики
- •5 Конвейеры и очереди сообщений
2.2 Задача «читатели-писатели»
В отношении некоторой области памяти, являющейся по смыслу критическим ресурсом для параллельных процессов, работающих с ней, выделяется два типа процессов. Первый тип - процессы-читатели, которые одновременно считывают информацию из области, если это допускается при работе с конкретным устройством памяти. Второй тип - процессы-писатели, которые записывают информацию в область и могут делать это, только исключая друг друга и процессы-читатели, т.е. запись должна выполняться на основании решения задачи взаимного исключения.
Имеются различные варианты взаимодействия между процессами-писателями и процессами-читателями. Наиболее широко распространены следующие:
1. Устанавливается приоритетность в использовании критического ресурса процессам-читателям. Если хотя бы один процесс-читатель пользуется ресурсом, то он закрыт для использования всем процессам-писаиелям.
2. Устанавливается приоритетность в использовании критического ресурса процессами-писателями. При появлении запроса от процесса-писателя необходимо закрыть ресурс для использования всем процессам-читателям, которые выдадут запрос позже него.
Наиболее характерная область использования этой задачи - построение файловых систем операционной системы.
2.3 Задача «обедающие философы»
Данная задача имеет место при построении систем распределения ресурсов в составе операционной системы. В рамках этой задачи формулируются требования на синхронизацию работы процессов, которые совместно используют пересекающиеся группы ресурсов.
Для примера рассмотрим случай с тремя процессами и тремя ресурсами. Пусть имеются три параллельных процесса X, Y и Z и три ресурса R1, R2 и R3. Особенность развития процессов такова, что для пребывания процесса Х в активном состоянии ему требуется выделить одновременно ресурсы R1 и R2, для пребывания процесса Y - ресурсы R2 и R3, для пребывания процесса Z - ресурсы R3 и R1. Скорости развития процессов произвольны. Переходы из активного в другие состояния происходят в непредсказуемые моменты.
Необходимо обеспечить максимальное параллельное и правильное развитие процессов. Синхронизация в данном случае заключается в определенном упорядочении действий процессов по захвату ресурсов во избежание возможных блокировок одними процессами других /12/.
3 Мониторы Хоара
В параллельном программировании монитор - это пассивный набор разделяемых переменных и повторно входимых процедур доступа к ним, которым процессы пользуются в режиме разделения, причем в каждый момент им может пользоваться только один процесс.
Внутренние данные монитора могут быть либо глобальными (относящимися ко всем процедурам монитора), либо локальными (относящимися только к одной конкретной процедуре). Ко всем этим данным можно обращаться только изнутри монитора.
Процесс, желающий получить доступ к разделяемым переменным, должен обратиться к процедуре REQUEST (запрос) монитора. Если запрашиваемый ресурс свободен, то процесс получает ресурс и покидает монитор. Иначе процедура выдает команду ожидания WAIT(free) с указанием условия ожидания, которая переводит обратившийся процесс в конец очереди ожидания вне монитора.
Для возврата занимаемого ресурса системе процесс обращается к процедуре RELEASE монитора. Данная процедура выполняет команду извещения (сигнализации) SIGNAL, чтобы один из ожидающих процессов мог получить данный ресурс и покинуть монитор. Если в это время очередь ожидания пуста, то оповещение не вызывает никаких других действий кроме того, что монитор, вносит ресурс в список свободных.
Пример. Простейший монитор для выделения одного ресурса будет иметь следующий вид.
monitor Resourse;
condition free; {условие - свободный}
