ВЗАИМНЫЕ БЛОКИРОВКИ

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

Ресурсы бывают выгружаемые и невыгружаемые, аппаратные и программные.

Выгружаемый ресурс- этот ресурс безболезненно можно забрать у процесса (например: память).

Невыгружаемый ресурс -этот ресурс нельзя забрать у процесса без потери данных (например: принтер).

Проблема взаимоблокировок процессов возникает при борьбе за невыгружаемый ресурсы.

Условия необходимые для взаимоблокировки:

1. Условие взаимного исключения - в какой-то момент времени, ресурс занят только одним процессом или свободен.

2. Условие удержания и ожидания - процесс удерживающий ресурс может запрашивать новые ресурсы.

3. Условие отсутствия принудительной выгрузки ресурса.

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

Моделирование взаимоблокировок

Моделирование тупиков с помощью графов.

Условные обозначения

 

На такой модели очень хорошо проверить возникает ли взаимоблокировка. Если есть цикл значит есть и взаимоблокировка.

Рассмотрим простой пример:

три процесса A, B, C

три ресурса R, S, T

Последовательное выполнение процессов, взаимоблокировка не возникает

 

Рассмотрим циклический алгоритм:

три процесса A, B, C

три ресурса R, S, T

Возникает взаимоблокировка

 

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

 

 

Взаимоблокировка не возникает.

 

 

Четыре стратегии избегания взаимоблокировок:

1. Пренебрежением проблемой в целом (вдруг пронесет).

2. Обнаружение и устранение (взаимоблокировка происходит, но оперативно ликвидируется).

3. Динамическое избежания тупиков.

4. Предотвращение четырех условий, необходимых для взаимоблокировок.

 

1. Пренебрежением проблемой в целом (страусовый алгоритм)

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

Этот алгоритм используется как в Linux, так и в Windows.

Поэтому (и не только) на серверах часто устанавливают автоматическую перезагрузку (раз в сутки, как правило ночью), если возникнет взаимоблокировка, то после перезагрузки ее не будет.

 

2. Обнаружение и устранение взаимоблокировок

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