Тупиковые ситуации и их предотвращение

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

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

Различают надежное и ненадежное состояние системы. При ненадежном состоянии высока вероятность попадания в тупиковую ситуацию.

Проблема тупиков включает в себя следующие задачи: предотвращение тупиков; распознавание тупиков; восстановление системы после тупиков.

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

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

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

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

Тупиковые ситуации и ненадежное состояние возможно предотвратить оптимальным управлением ресурсами аппаратной системы.