Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Госэкзамен. Кафедра 29 / Операционные системы / Взаимодействие и синхронизация процессов. Взаимоисключение. Семафоры, почтовые ящики. Тупики. Предотвращение и устранение тупиков.(3).doc
Скачиваний:
48
Добавлен:
10.05.2014
Размер:
80.9 Кб
Скачать

Тупиковая ситуация (дедлок)

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

Возникновение тупиковой ситуации фактически зависит в общем случае от невоспроизводимых относительных скоростей исполнения процессов. Рассмотрим, например, три процесса, претендующих на ресурс, который выделяется дискретными взаимозаменяемыми единицами, такими как магнитофон, физические страницы или буфера из множества буферов. Пусть в системе существует 10 таких единиц, из которых 8 распределены следующим образом: процесс А имеет 2 единицы, а для полного завершения ему нужно 9. Процесс В имеет 2 единицы, и ему потребуется еще 7. Процесс С имеет 4, и ему потребуется еще 6. Процессы В и С достигли точки, в которой каждому процессу требуется еще 2 единицы. Если запрос процесса С будет удовлетворен первым, то процесс сможет продолжить исполнение и в конце концов освободит все 6 единиц, которые у него были. Это позволит процессу В, а затем процессу А получить все необходимые им ресурсы и завершиться. Если же вначале будет выполнен запрос процесса и, то ни один из процессов не сможет завершиться, и в результате возникнет дедлок. Причиной этого дедлока являются неупорядоченные попытки процессов войти в критический интервал, связанный с выделением соответствующей единицы ресурса

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

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

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