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

4.3.6. Распознавание дедлоков

Обнаружение тупика - это установление факта, что возникла тупиковая ситуация, и определение процессов и ресурсов, вовлеченных в эту тупиковую ситуацию. Алгоритмы обнаружения тупико­в, как правило, применяются в системах, где выполняются первые три необходимых условия возникновения тупиковой ситуации. Эти ал­горитмы затем определяют, не создался ли режим кругового ожидания.

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

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

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

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

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

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

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

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

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

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

Шестой метод теоретически применим, если в момент, когда дедлок выявлен, существует несколько пользовательских процессов, которые не находятся в дедлоке. Если этим процессам позволить доработать до конца и запретить образование новых процессов, то они могут освободить достаточно ресурсов, чтобы разорвать дедлок. В некоторых системах это может происходить незаметно.