Тупики.

Говорят, что в мультипрограммной системе процесс находится в состоянии тупика (дедлока (клинча)), если он ожидает события, которое никогда не произойдет. Системная тупиковая ситуация (зависание) – это ситуация, когда один или более процесс попадают в состояние тупика. Пример – два или более процесса могут попасть в тупик, при котором каждый процесс будет удерживать ресурсы, запрашиваемые другими процессами в то время, как ему самому требуются ресурсы, удерживаемые другими. для возникновения тупика должны существовать 4 условия:

Основные направления научных исследований в области тупиков – это предотвращение тупиков, обход тупиков, обнаружение тупиков, восстановление после тупиков.

Предотвращение тупиков.

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

Обход тупиков.

Реализация основывается на алгоритме банкира, предложенный Дейкстрой, который как бы имитирует действия банкира (на месте ОС), выдает ссуды клиентам (выделяет ресурсы) и принимает платежи (возвращает ресурсы). Банкир, выдавая ссуды, оценивает свой капитал. Если капитал приближается к минимуму, то банкир откладывает выдачу ссуды и ждет возврата ссуды от других клиентов. А чтобы понять, является ли его состояние безопасным, банкир проверяет, может ли он предоставить достаточно ресурсов для завершения работы какого-либо клиента и возврата ссуды.

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

Обнаружение тупиков.

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

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

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

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

 

28 марта 2012 г.