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