
- •Глава 6 Взаимоблокировка и голодание
- •6.1. Принципы взаимного блокирования
- •Повторно используемые ресурсы
- •Расходуемые ресурсы
- •Условия возникновения взаимоблокировок
- •6.2. Предотвращение взаимоблокировок
- •Взаимоисключения
- •Удержание и ожидание
- •Отсутствие перераспределения
- •Циклическое ожидание
- •6.3. Устранение взаимоблокировок
- •Запрещение запуска процесса
- •Запрет выделения ресурса
- •А.) Глобальная структура данных
- •6.4. Обнаружение взаимоблокировок
- •Алгоритм обнаружения взаимоблокировки
- •Восстановление
- •6.5 Интегрированные стратегии разрешения взаимоблокировок
- •6.6. Задача об обедающих философах
- •6.7. Механизмы параллельных вычислений в unix
- •Сообщения
- •Разделяемая память
- •Семафоры
- •Сигналы
- •6.8. Прщийвы синхронизации потоков solaris
- •Блокировки взаимоисключений
- •Семафоры
- •Блокировки читатели/писатель
- •Переменные условий
- •6.9. Механизмы параллельных вычислений в windows 2000
- •6.10. Резюме, ключевые термины и контрольные вопросы
- •Контрольные вопросы
- •6.11. Рекомендуемая литература
- •6.12. Задачи
Условия возникновения взаимоблокировок
Для того чтобы взаимоблокировка стала возможной, требуется наличие трех условий.
Взаимные исключения. Одновременно использовать ресурс может только один процесс.
Удержание и ожидание. Процесс может удерживать выделенные ресурсы во время ожидания других ресурсов.
Отсутствие перераспределения. Ресурс не может быть принудительно отобран у удерживающего его процесса.
Эти условия выполняются довольно часто. Например, взаимоисключения необходимы для гарантии согласованности результатов и целостности базы данных. Аналогично, невозможно произвольное применение перераспределения, в особенности при работе с данными, когда требуется обеспечить механизм отката.
Кроме перечисленных трех условий для реального осуществления взаимоблокировки требуется выполнение четвертого условия.
4. Циклическое ожидание. Существует замкнутая цепь процессов, каждый из которых удерживает как минимум один ресурс, необходимый процессу, следующему в цепи после данного (см. рис. 6.5).
Первые три условия являются необходимыми, но не достаточными для осуществления взаимоблокировки. Четвертое условие в действительности представляет собой потенциальное следствие первых трех — т.е. при наличии первых трех условий может осуществиться такая последовательность событий, которая приведет к неразрешимому циклическому ожиданию (что, по сути, и является определением взаимоблокировки). Неразрешимость циклического ожидания из условия 4 обеспечивается выполнением предыдущих трех условий. Таким образом, совокупность четырех перечисленных выше условий является необходимым и достаточным условием взаимоблокировки.2
2 Обычно в литературе все четыре условия перечисляются как необходимые для осуществления взаимоблокировки, однако такое изложение скрывает некоторые тонкости данного вопроса [SHUB90]. Условие циклического ожидания кардинально отличается от остальных трех условий. Первые три условия представляют собой, по сути, незыблемые правила, в то время как условие 4 представляет, собой ситуацию, которая может осуществиться при определенной последовательности запросов и освобождения ресурсов процессом. Объединение все четырех условий в единый блок методологически приводит к стиранию различий между предотвращением и устранением взаимоблокировок.
6.2. Предотвращение взаимоблокировок
Стратегия предотвращения по сути представляет собой такую разработку системы, которая позволит исключить саму возможность взаимоблокировок. Методы предотвращения взаимоблокировок можно разбить на два класса. Косвенный метод состоит в предотвращении одного из первых трех условий возникновения взаимоблокировки; прямой метод предотвращает циклическое ожидание (условие 4). Рассмотрим приемы, связанные с каждым из условий, в отдельности.
Взаимоисключения
В общем случае избежать использования взаимоисключений невозможно. Если доступ к ресурсу должен быть исключительным, то операционная система обязана поддерживать взаимоисключения. Некоторые ресурсы, такие, как файлы, могут позволять множественный доступ для чтения и исключительный доступ для записи. Но даже в этом случае возможно возникновение взаимоблокировки, если право записи в файл требуется нескольким процессам одновременно.