14 Взаимоблокировка процессов.pptx
- Количество слайдов: 13
ВЗАИМОБЛОКИРОВКА ПРОЦЕССОВ
ВЗАИМОБЛОКИРОВКА При одновременном использовании несколькими процессами нескольких ресурсов может возникнуть ситуация, в которой часть процесс оказываются блокированными из-за ожидания ресурсов, принадлежащих другим процессам, которые, в свою очередь, ожидают освобождения ресурсов, принадлежащих этой части процессов. Такая ситуация называется тупиком (или клинчем или дедлоком (deadlock)). Процесс1 обладает ресурсом 1 и ждет освобождения ресурса 2 ПРОЦЕСС 1 ПРОЦЕСС 2 РЕСУРС 1 РЕСУРС 2 Процесс2 обладает ресурсом 2 и ждет освобождения ресурса 1
УСЛОВИЯ ВОЗНИКНОВЕНИЯ ТУПИКОВ В 1971 году Коффманом, Элфиком и Шошани доказано, что тупик может возникнуть при выполнении четырёх условий: 1. 2. 3. 4. Условие взаимного исключения (mutual exclusion). Каждый ресурс в данный момент времени или отдан одному процессу, или свободен. Процессы требуют предоставления им монопольного управления ресурсами, которые им выделяются. Условие удержания и ожидания (Hold and wait). Процессы, удерживающие полученные ранее ресурсы, могут запрашивать новые ресурсы и ожидать их освобождения. Условие отсутствия принудительной выгрузки ресурсов (No preemption). У процесса нельзя принудительным образом отобрать ранее выделенные ресурсы. Процесс может их освободить только добровольно. Условие циклического ожидания (Curricular Wait). Должна существовать круговая последовательность из двух или более процессов, каждый из которых ждёт доступа к ресурсам, удерживаемым следующим(и) членом(ами) последовательности. Если нарушается хотя бы одно из условий, то тупик невозможен.
СХЕМАТИЧНОЕ ОБОЗНАЧЕНИЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ. Для схематичного представления алгоритма использования ресурсов несколькими процессами используются направленные графы, в которых: – узлы соответствуют ресурсам и процессам. Если узел обозначен в виде круга, то он соответствует ресурсу. Если узел обозначен квадратом, то он соответствует процессу. – рёбра графа являются направленными. Если ребро выходит из узла-процесса и направлено в узел-ресурс, то это значит, что этот ресурс занят этим процессом. Если ребро выходит из узла-ресурса и направлено в узелпроцесс, то это значит, что процессу требуется ресурс. А Б запрос ресурса А Б А ресурс А занят процессом Б
СХЕМАТИЧНОЕ ОБОЗНАЧЕНИЕ ИСПОЛЬЗОВАНИЕ РЕСУРСОВ. В этих обозначениях взаимоблокировка будет выглядеть как: А Б D C
МЕТОДЫ БОРЬБЫ С ТУПИКАМИ Существует несколько направлений борьбы с тупиками: – Игнорирование проблемы. – Предотвращение тупиков. – Обход тупиков. – Распознавание тупиковой ситуации и последующее восстановление работы процессов.
ИГНОРИРОВАНИЕ ПРОБЛЕММЫ Самым простым решением проблемы тупиков является страусовый алгоритм – считаем, что проблема вообще не существует. Причина применения такого алгоритма – считается, что тупики возникают относительно редко, а затраты на решение высоки.
ПРЕДОТВРАЩЕНИЕ ТУПИКОВ Предотвращение тупиков – это гарантия того, что ни одно из четырёх условий появления тупика никогда не возникнет. – Условие взаимного исключения можно избежать путём разрешения неограниченного разделения ресурсов. Это пригодно для некоторых библиотек функций и драйверов, но не пригодно для общих переменных. – Условие удержания и ожидания можно требую чтобы процессы предварительно запрашивали все необходимые им ресурсы (дальнейшая работа возможна только при выделении всех ресурсов).
ПРЕДОТВРАЩЕНИЕ ТУПИКОВ Предотвращение тупиков – это гарантия того, что ни одно из четырёх условий появления тупика никогда не возникнет. – Условие отсутствия перераспределения можно исключить разрешив операционной системе «отбирать» ресурсы у процессов в любом случае. Для этого в ОС должен быть предусмотрен механизм запоминания состояния процесса с целью последующего восстановления хода вычислений. – Условие кругового ожидания можно исключить, предотвращая образования цепи запросов. Это можно обеспечить разрешением процессам использовать в один момент времени только один ресурс (после чего освобождал его и требовал другие ресурсы). Или с помощью принципа иерархического выделения ресурсов. Процесс, затребовавший ресурсы на одном уровне, может требовать только ресурсы нижних уровней.
ПРЕДОТВРАЩЕНИЕ ТУПИКОВ Предотвращение тупиков сопровождается высокими накладными расходами. Поэтому используется крайне редко. – Условие взаимного исключения. Чаще всего одновременное использование ресурсов несколькими процессами организовать сложно. Можно использовать выгрузку процессов на диск, однако это может также привести к проблеме тупика. – Условие удержания и ожидания. Требование предварительного выделения ресурсов сопровождается неэффективным их использованием. Кроме того, определение заранее потребности процессов на ресурсы чаще всего вызывает определённые трудности. – Условие принудительной выгрузки ресурсов. Принудительное освобождение некоторых ресурсов (например, принтера) может быть в лучшем случае сложно, а в худшем – невозможно. – Условие циклического ожидания. Существуют ситуации, когда необходимо обладания несколькими ресурсами одновременно или сложно определить порядок использования ресурсов.
ОБХОД ТУПИКОВ Для поиска последовательности предоставления ресурсов процессам Дейкстрой был разработан алгоритм банкира. Алгоритм основан на примере банкира в маленьком городке, имеющего дело с группой клиентов, которым он выделил ряд кредитов и они ходят получить ещё денег. Банкир проверяет, ведёт ли выполнение каждого запроса к небезопасному состоянию. Если да, то запрос отклоняется. В случае обслуживания банкиром нескольких ресурсов (т. е. он выдает не только денежные кредиты, но и, например, материальные), то кредит выдаётся в том случае, если условие нахождения безопасного состояния выполняется для всех видов ресурсов.
РАСПОЗНАВАНИЕ ТУПИКОВОЙ СИТУАЦИИ ОС не пытается предотвращать тупики, а при их возникновении старается определить как это произошло, и затем совершает некоторые действия к возврату системы в рабочее состояние. Для поиска тупика при использовании по одной копии каждого ресурса составляется граф использования ресурсов, в котором ищутся петли (т. е. тупики) путём выполнения следующих шагов: 1. 2. 3. 4. 5. Задаются начальные условия: L – пустой список, все рёбра не маркированы. Текущий узел добавляется в конец списка L и проверяется количество появлений этого узла в списке. Если узел присутствует в двух местах, граф содержит цикл (записанный в L) и работа алгоритма завершается. Для узла проверяем есть ли у него хотя бы одно исходящее немаркированное ребро. Если да, то переходим к п. 4, иначе к п. 5 Случайным образом выбираем любое немаркированное исходящее ребро и отмечаем его. Затем по нему переходим в новый узел и возвращаемся к п. 2 Удаляем последний узел из списка (он не приведёт к тупику) и возвращаемся к предыдущему узлу продолжая выполнять п. 4.
РАСПОЗНАВАНИЕ ТУПИКОВОЙ СИТУАЦИИ. ПРИМЕР. R C А S F W B D U T E G V
14 Взаимоблокировка процессов.pptx