Алгоритм банкира для нескольких типов ресурсов
Алгоритм банкира может быть распространен на работу с несколькими ресурсами. На рис. 6.10 показано, как он работает. Здесь изображены две матрицы. Левая матрица показывает, сколько экземпляров каждого ресурса в данный момент выделено каждому из пяти процессов. Правая показывает, сколько экземпляров ресурсов все еще необходимо каждому процессу для завершения его работы. На рис. 6.5
эти матрицы назывались С и R. Как и в случае с ресурсом одного типа, процессы перед выполнением своей работы должны сообщить о своих общих потребностях в ресурсах, чтобы система в любой момент могла вычислить правую матрицу.
Три вектора, изображенные справа от матриц, показывают соответственно существующие ресурсы (вектор Е), занятые ресурсы (вектор Р) и доступные ресурсы (вектор А). Судя по значению вектора Е, в системе имеется шесть накопителей на магнитной ленте, три плоттера, четыре принтера и два привода компакт-дисков. Из них заняты в данный момент пять накопителей, три плоттера, два принтера и два привода компакт-дисков. Этот факт можно установить путем сложения значений четырех столбцов, соответствующих ресурсам, в левой матрице. Вектор доступных ресурсов — это разница между количеством присутствующих в системе ресурсов, и количеством ресурсов используемых в настоящее время.
Теперь может быть изложен алгоритм проверки состояния на безопасность.
1. Ищем в матрице R строку, соответствующую процессу, чьи неудовлетворенные
потребности в ресурсах меньше или равны вектору А. Если такой строки не суще
ствует, то система в конце концов войдет в состояние взаимоблокировки, посколь
ку ни один процесс не сможет доработать до успешного завершения (предпо
лагается, что процессы удерживают все ресурсы, пока не завершат свою работу).
2. Допускаем, что процесс, чья строка была выбрана, запрашивает все необходимые
ему ресурсы (возможность чего гарантируется) и завершает свою работу. Отме
чаем этот процесс как завершенный и прибавляем все его ресурсы к вектору А.
3. Повторяем шаги 1 и 2 до тех пор, пока либо все процессы будут помечены как
завершенные (в этом случае исходное состояние может считаться безопасным),
либо не останется процессов, чьи запросы могут быть удовлетворены (в этом
случае возникнет взаимоблокировка).
Если в шаге 1 подходят для выбора несколько процессов, то неважно, который из них будет выбран: фонд доступных ресурсов либо увеличивается, либо в худшем случае остается таким же.
Дата добавления: 2017-01-29; просмотров: 2528;