Способы предотвращения тупиков путем тщательного распределения ресурсов
При предотвращении тупиков целью является обеспечение условий, исключающих возможность возникновения тупиковых ситуаций.
Система, предоставляя ресурс в распоряжение процесса, должна принять решение, безопасно это или нет. Возникает вопрос: есть ли такой алгоритм, который помогает всегда избегать тупиков и делать правильный выбор. Ответ - можно избегать тупиков, но только, если определенная информация известна заранее.
Один из алгоритмов предотвращения тупиков базируется на концепции безопасных состояний.
Можно избежать тупиковой ситуации, если рациональным образом использовать ресурсы, придерживаясь определенных правил. Наиболее известен среди алгоритмов такого рода - алгоритм банкира, предложенный Дейкстрой. Он имитирует действия банкира, который, располагая определенным источником капитала, принимает ссуды и выдает платежи.
Предположим, что у системы в наличии n устройств, например лент. Суть алгоритма состоит в следующем.
1) ОС принимает запрос от пользовательского процесса, если его максимальная потребность не превышает .
2) Пользователь гарантирует, что если ОС в состоянии удовлетворить его запрос, то все устройства будут возвращены системе в течение конечного времени.
3) Текущее состояние системы называется надежным, если ОС может обеспечить всем процессам их выполнение в течение конечного времени.
4) В соответствии с алгоритмом банкира выделение устройств возможно, только если состояние системы остается надежным.
Термин ненадежное состояние не предполагает, что обязательно возникнут тупики. Он лишь говорит о том, что в случае неблагоприятной последовательности событий система может зайти в тупик.