Основные направления борьбы с тупиками

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

Основные направления борьбы с тупиками:

1. Игнорирование проблемы в целом;

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

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

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

1. Игнорирование проблемы тупиков.

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

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

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

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

Алгоритм банкира – тщательное распределение ресурсов.

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

Надежное состояние – это такое состояние, для которого имеется, по крайней мере, одна последовательность событий, которая не приведет к взаимоблокировке.

Модель алгоритма основана на действиях банкира, который, имея капитал, выдает кредиты:

1. Предположим, что у системы в наличии n устройств, например, лент.

2. ОС принимает запрос от пользовательского процесса, если его максимальная потребность не превышает n.

3. Пользователь гарантирует, что если ОС в состоянии удовлетворить его запрос, то все устройства будут возвращены системе в течение конечного времени.

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

5. В соответствии с алгоритмом банкира выделение устройств возможно, только если состояние системы остается надежным.

Примером надежного состояния для системы с тремя пользователями и одиннадцатью устройствами, где 9 устройств задействовано, а 2 в резерве:

Пусть текущая ситуация такова:

Пользователь Максимальная потребность в ресурсах Выделенные ресурсы
Первый    
Второй    
Третий    

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

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

Условия:

Число пользователей и число ресурсов фиксировано;

Число работающих пользователей должно оставаться постоянным;

Алгоритм требует, чтобы клиенты гарантированно возвращали ресурсы.

Должны быть заранее указаны максимальные требования процессов в ресурсах (чаще всего эта информация отсутствует).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: