
- •Взаимодействие и синхронизация процессов. Взаимоисключение. Семафоры, почтовые ящики. Тупики. Предотвращение и устранение тупиков.
- •Взаимное исключение
- •Синхронизация
- •Семафоры
- •Почтовые ящики
- •Тупиковая ситуация (дедлок)
- •Условия возникновения дедлоков
- •Предотвращение дедлоков
- •Распознавание дедлоков
Взаимодействие и синхронизация процессов. Взаимоисключение. Семафоры, почтовые ящики. Тупики. Предотвращение и устранение тупиков.
Программные процессы делятся на:
-
системные (выполоняются из ядра ОС);
-
пользовательские (используют прикладные приложения).
Процессы могут быть взаимосвязанными или изолированными. Если между процессами поддерживается какого-либо рода связь, то это взаимосвязанные процессы, иначе изолированные.
Если взаимодействие происходит явным образом за счет разделения общей памяти, то это информационное взаимодействие, если же взаимодействие происходит по ресурсу, то это конкурирующее взаимодействие.
Управление взаимосвязанными элементами основано на контроле и соблюдении правил, котоорые определяют правила синхронизации. Синхронизация используется для организации взаимодействия процессов. Она означает способность процесса или задачи добровольно приостанавливать свое исполнение пока не завершится исполнение определенной операции другого процесса.
Взаимное исключение
Ресурс, предоставляемый только одному из многих ресурсов, называется критическим.
Когда несколько процессов могут вместе асинхронно изменять области данных критических ресурсов, то им необходимо согласовывать свои действия, синхронизировать, чтобы ресурсы находились всегда только у оодного процесса.
Критический участок, секция – участок программы, осуществляющий доступ к критическому ресурсу.
Взаимное исключение - Отношение между процессами характеризуемое тем, что критическая секция одного процесса не должна выполнятся, пока выполняется критическая секция другого процесса.
На критический интервал, связанный с переменной, разделяемой несколькими процессами, налагаются три требования:
1. В любой момент времени только один процесс может находиться внутри критического интервала.
2. Ни один процесс не может оставаться внутри критического интервала бесконечно долго.
3. Ни один процесс не должен ждать бесконечно долго входа в критический интервал. В частности, никакой процесс, бесконечно долго находящийся вне критического интервала (что допустимо), не может задерживать выполнение других процессов, ожидающих входа в критический интервал.
Синхронизация
Для процессов, совместно выполняющих общую работу, недостаточно того, что они взаимно исключают друг друга при работе с разделяемыми переменными; им необходимо еще передавать друг другу информацию. Минимальной единицей передаваемой информации является простой временной сигнал. Основное требование в этом случае состоит в том, что процессу предоставляется возможность ждать, пока другой не сообщит ему о свершении определенного события. Первый процесс ждет свершение нужного события, выполнив ЖДАТЬ (событие); второй сигнализирует о свершении,, выполняя СВЕРШИТЬ (событие).
Любая реализация в конечном счете должна основываться на взаимном исключении, обеспечиваемом техническими средствами. Все ЭВМ имеют основную форму взаимного исключения, называемую блокированием памяти. Это средство запрещает одновременное исполнение двух команд, которые обращаются к одной и •ой же ячейке памяти. Если в этой ячейке памяти хранится значение разделяемой переменной, то во время исполнения данной команды получить доступ к ней может только один процесс. Блокирование памяти предотвращает одновременный доступ, но не предотвращает чередование доступов. Таким образом, если критические интервалы исчерпываются одной командой обращения к оперативной памяти, данного средства может быть достаточно для непосредственной реализации критических интервалов.
Если критические интервалы требуют более одного обращения к памяти, их все же можно реализовать, используя блокировку памяти. Переменные, чья целостность гарантируется блокировкой памяти, указывают, какой процесс может войти в свой критический интервал. Однако не так просто правильно установить и проверить эти переменные.
Вместо того, чтобы связывать с каждым процессом свою собственную переменную, можно со всем множеством критических интервалов связать одну переменную. Ее можно рассматривать как некоторый ключ. Вначале доступ к критическому интервалу открыт. Однако перед входом в свой критический интервал процесс забирает ключ и тем самым блокирует другие процессы. Покидая критический интервал, процесс открывает доступ, возвращая ключ на место. Если процесс, который хочет войти в свой критический интервал, видит отсутствие ключа, он ждет, пока процесс, имеющий ключ, не вернет его. Таким образом каждый процесс, входящий в критический интервал, должен вначале проверить, доступен ли ключ, и если это так, то сделать его недоступным для других процессов. Эти два действия должны быть неделимы, чтобы два или более процессов не могли одновременно получить доступ к ключу. Рассмотренная выше аппаратная блокировка памяти обеспечивает неделимость любого отдельного обращения к памяти, но не пары различных обращений
Другим аппаратным средством реализации взаимного исключения являются неделимые команды, осуществляющие проверку переменной (или ключа) и присваивание ей значения.