Избежание взаимных блокировок
Траектория ресурсов

1 – захват принтера
2 – захват плоттера
3 – освобождение принтера
4 – освобождение плоттера
Точка на траектории ресурсов может двигаться только вверх и вправо.
Если во время планирования точка, обозначающая состояние системы, попадет в область Х, то со временем в системе возникнет блокировка, т.к. точка не может двигаться вниз и влево; любое состояние в области серого цвета является безопасным состоянием. В таком состоянии планировщик, путем аккуратного планирования ресурсов может избежать возникновения тупика.
Алглритм Банкира для одного вида ресурсов
Цель алгоритма: проверить, приводит ли удовлетворение запроса на ресурс к выходу из безопасного состояния системы.
Пусть имеется один ресурс некоторого типа.
| А | ||
| В | ||
| С |

Максимальное число ресурсов, которое процесс может запросить без учета уже запрошеных
Сколько процесс уже имеет ресурсов
Чтобы проверить, приводит ли запрос к безопасному состоянию, необходимо описать матрицу распределения ресурсов (см. выше). При этом:
A, B, C – имена банка;
2ой столбец – выданные кредиты;
3ий столбец – необходимо кредитов.
Свободных кредитов 3. Можем полностью обеспечить кредитами клиента В.
| A |
| A |
| A |
| A |
| A | - | |||||||||
| B | B | B | - | B | - | B | - | |||||||||||
| C | C | C | C | - | C | - | ||||||||||||
| Свободно 3 | Свободно 1 | Свободно 5 | Свободно 7 | Свободно 10 |
Клиент, чей запрос будет полностью удовлетворен, вернет все взятые кредиты.
Рассмотрим состояние:
| A | ![]() 2
| A | ![]()
| A | ![]()
| A | ||||||||
| B | B | B | B | - | ||||||||||
| C | C | C | C | |||||||||||
| Свободно 3 | Свободно 2 | Свободно 0 | Свободно 7 | |||||||||||
| небезопасно | небезопасно | небезопасно |

Недопустимо
Т.о., запрос от А на предоставление ему 1 единицы кредита следует отклонить.
Предотвращение блокировок:
1) Атака взаимного исключения;
2) Атака условия удержания и ожидания;
Пример: Если все ресурсы запрашиваются одновременно, то тупиков не возникнет; если мы ожидаем несколько ресурсов WaitForMultipleObjects(), то тупиков тоже нет.
3) Атака условия отсутствия принудительной выгрузки;
4) Атака условия циклического ожидания. Если все ресурсы пронумерованы и каждый процесс имеет право захватывать ресурс только с большим порядковым номером, чем номера уже захваченных ресурсов, то тупика не возникнет.









