Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 700363.doc
Скачиваний:
16
Добавлен:
01.05.2022
Размер:
3.69 Mб
Скачать

Устранение тупиков

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

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

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

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

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

Алгоритм, запрещающий выделение ресурсов при угрозе тупика впервые был предложен Дейкстрой в середине 60-х гг. XX века и известен как алгоритм банкира.

Пусть вектор определяет общее количество каждого ресурса в системе, матрица определяет максимальную потребность процесса в ресурсе , а матрица определяет количество ресурса , распределенное процессу .

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

Количество свободного -го ресурса можно определить по формуле (0).

( 0 )

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

( 0 )

Из выражения (0) с учетом формулы (0) можно легко получить достаточное условие безопасности текущего состояния (0).

( 0 )

Таким образом, если выполняется условие (0), то состояние является безопасным и тупика в данной ситуации возникнуть не может.

Алгоритм банкира состоит в следующем. В ответ на запрос о выделении ресурсов проверяется, останется ли система в безопасном состоянии после выделения ресурсов. Для этого матрица заполняется в соответствии с распределением ресурсов, которое будет после удовлетворения запроса, и проверяется условие (0).

Если условие (0) выполняется, то запрос на выделение ресурсов удовлетворяется.

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

Обнаружение тупиков

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

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

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

Таким образом, если тупики в системе возникают достаточно редко, то с ними вполне можно мириться. Важно только вовремя распознать тупик и освободить вовлеченные в него ресурсы. Несложно предложить формальный алгоритм обнаружения тупика. Для этого операционная система должна поддерживать списки распределения и ожидания ресурсов, например в формате, показанном на рис. 18.

Каждый процесс содержит список указателей на ожидаемые ресурсы, а каждый ресурс содержит указатель на процесс, которому он в данный момент принадлежит. Задача алгоритма распознавания тупика состоит в том, чтобы найти в списке замкнутый цикл ожидания ресурсов. При использовании структуры данных, показанной на рис. 18, может быть реализован рекурсивный алгоритм поиска замкнутого цикла ожидания, показанный на рис. 19.

Рис.18. Список распределения и ожидания ресурсов

Рис.19. Алгоритм поиска тупика

Указанный алгоритм реализует последовательный просмотр процессов и ожидаемых ими ресурсов, как показано на рис. 20.

Рис.20. Граф просмотра процессов ресурсов