
Лекции / Лекция 8
.docxТупики
При кооперации процессов и при их взаимодействии часто возникают ситуации, когда какой-либо ресурс, требуемый процессом, удерживается одним из них. При этом возникает ситуация Dead Lock (= тупик = клинч).
Решение тупиков – это задача синхронизации.
Множество процессов находится в тупиковой ситуации, если каждый процесс из данного множества ожидает событие, которое только другой процесс данного множества может вызвать. Так как все процессы чего-то ожидают, то ни один из них не может синициировать событие, которое бы освободило других. Возникает тупиковая ситуация, ожидающая освобождения ресурсов.
Концепция ресурсов
За ресурсы отвечает планировщик (менеджер) ресурсов. Ресурсами могут быть как устройства, так и данные. Ресурсы могут быть разделяемые или неразделяемые. Разделяемые допускают одновременный доступ, неразделяемые допускают доступ только в порядке очереди.
Последовательность событий для использования ресурса:
Запросить ресурс;
Использовать ресурс;
Освободить ресурс.
Если требуемый ресурс отсутствует или занят, процесс вынужден ждать. В большинстве ОС при отрицательном ответе на запрос ресурса, процесс блокируется (переходит в ожидание) и загружается обратно только когда ресурс подтверждает свое наличие или свою свободу. В некоторых системах, получив отказ, процесс может снова запрашивать ресурс, не уходя в ожидание.
Условия возникновения тупиков
Сформулированы в 1971 году.
Условие взаимоисключения (Mutual exclusion): каждый ресурс выделен только одному процессу или доступен. Процессы требуют предоставления им монопольного управления ресурсами, которые им выделяются.
Условие ожидания ресурсов (Hold and Wait): процессы удерживают за собой ресурсы, уже выделенные им, ожидая в то же время выделения дополнительных ресурсов (которые удерживаются другими процессами).
Условие неперераспределяемости (No precmtion): ресурс, данный ранее, не может быть принудительно забран у процесса. Он может быть освобожден только самим процессом.
Условие кругового ожидания (Circular Wait): существует кольцевая цепь процессов, в которой каждый процесс удерживает за собой 1 или более ресурсов, требующихся другим процессам.
Для тупика необходимо выполнение всех четырех условий.
Способы и направления борьбы с тупиками
Игнорирование тупиков.
Если возникнет тупиковая ситуация (в системе появились зависшие процессы), система делает swapping этих процессов и продолжает функционирование.
Обнаружение тупиков.
Процесс А удерживает ресурс R и ожидает ресурс S. Процесс B претендует на ресурс T. Процесс C претендует на ресурс S. D удерживает U и ожидает S и T. Е удерживает Т и ожидает V. F удерживает W и ожидает S. G удерживает V и ожидает U. Наличием замкнутого цикла обусловлен тупик. После обнаружения тупика нужно восстановиться и заставить систему работать дальше.
Способы решения:
1) игнор
2) разрыв цепочки
а) обновление инициализации ресурса
б) исключение процесса из цепочки с его дальнейшим восстановлением после разрешения конфликтов
Восстановление после тупиков через откат. В системе ведется журналирование. В случае возникновения тупика, система восстанавливается в предтупиковое состояние.
Предотвращение тупиков за счет тщательного выделения ресурсов или нарушения одного из условий возникновения тупиков.
Предотвращение тупиков рассмотрено Дейкстрой (голландский математик). Он предложил следующий алгоритм («алгоритм банкира»). Этот алгоритм имитирует действия банкира по принятию ссуд и выдаче платежей, есть какой-то исходный капитал.
У системы есть N устройств. ОС принимает запрос от процесса, если его максимальная потребность не превышает N.
Процесс гарантирует, что если ОС в состоянии удовлетворить его запрос, то все устройства будут возвращены системе в течение конечного времени.
Текущее состояние системы называется надежным, если ОС может обеспечить сем процессам их выполнение в течение конечного времени.
Суть алгоритма в том, что выделение ресурсов процессам возможно только в том случае, если состояние системы при этом остается надежным. Ненадежное состояние предполагает, что могут возникнуть тупики.
Недостатки алгоритма:
Он исходит из фиксированного (их не более чем…) количества ресурсов.
Число процессов постоянно.
Сложность гарантирования удовлетворения запросов за конечный период времени.
Нет гарантии возврата ресурса процессом.
Необходимость заранее указывать максимальную потребность в ресурсах.
5) Предотвращение тупиков за счет предотвращения появлений условий возникновения тупиков.
Если в системе отсутствуют требуемые ресурсы, то тупиков не будет.
Нарушение условий ожидания дополнительных ресурсов: каждый процесс должен запрашивать все, требуемые ему ресурсы сразу. Причем не может выполняться до тех пор, пока все они не будут ему предоставлены. Если процесс удерживает определенные ресурсы и получает отказ в выделении ему дополнительных, то он должен освободить свои первоначальные ресурсы, впоследствии снова запросив с дополнительными.
Нарушение принципа неперераспределяемости. У процесса принудительно отнимаются ресурсы с дальнейшим первоочередным предоставлением обратно.
Нарушение условия кругового ожидания. Присвоение всем ресурсам уникальных номеров и требование, чтобы процессы запрашивали ресурсы в порядке возрастания номеров.
Сложности борьбы с тупиками.
Нет эффективных средств для приостановки процесса, вывода его из системы и возобновления впоследствии.
Существующие средства требуют множества операций (затрат).
Восстановление после тупика может потребовать много времени.