Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы построения операционных систем.doc
Скачиваний:
50
Добавлен:
07.11.2018
Размер:
5.07 Mб
Скачать

4.3. Тупиковые ситуации

При параллельном исполнении процессов могут возникать такие ситуации, при которых два или более процесса все время находятся в заблокированном состоянии. Самым простым является случай, когда каждый из двух процессов ждет ресурс, занятый другим процессом. Из-за этого ожидания ни один из процессов не может продолжить исполнение и освободить ресурс, необходимый другому. Эта тупиковая ситуация, образно называемая "смертельное объятие", больше известна как дедлок (deadlock). Хотя дедлок может быть результатом ошибок программирования, чаще всего он возникает не из-за них.

4.3.1. Условия возникновения дедлоков

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

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

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

Третье условие - отсутствие перераспределения. Никакие ресурсы нельзя отобрать у процесса, если они ему уже выделены, до тех пор пока эти ресурсы не будут использованы для завершения работы.

Четвертое - условие кругового ожидания. Существует замкнутая цепь процессов, каждый из которых ждет ресурс, удерживаемый его предшественником в этой цепи.

4.3.2. Основные направления исследований по проблеме тупиков

В связи с проблемой тупиков были проведены исследования по разработке методов ее решения. Указанные методы можно разделить на четыре основных направления :

- предотвращение тупиков;

- обход тупиков;

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

- восстановление после тупиков.

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

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

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

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

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