Лекция: Распределения ресурсов

Данный алгоритм был разработан математиком Дийкстрой /6-8/.

Введем следующую аналогию: клиент – процесс, кредит – ресурс, банкир – ОС.

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

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

Пример алгоритма банкира.

1.Ищем в матрице R строку, соответствующую процессу, чьи неудовлетворенные потребности ресурсов меньше или равны вектору A, если такой строки нет, то система попадает в тупик.

 

2.Процесс, чью строку выбрали в пункте 1, запускает все ресурсы, заканчивает работу. Отмечаем этот процесс как завершенный и прибавляем к вектору А. Вектор доступных ресурсов A увеличивается как A=A+C[i], при этом значение матрицы C и R с порядковыми номерами i приравниваем 0.

 

3.Переход к пункту 2. При этом там же осуществляется проверка, если элемент матрицы R равен 0, то он пропускается и осуществляется переход к следующему элементу.

Повторяем шаги 1,2 до тех пор, пока все процессы не будут завершены, если не встретится тупиков.

Пример 1.Количество существующих ресурсов одного типа Е = 18. Количество процессов – 5: Р1, Р2, Р3, Р4, Р5. Количество доступных ресурсов: А = 3

 

— матрица начального распределения ресурсов С;

 

— матрица требуемых ресурсов R, в сумме требуется 23 ед. ресурсов.

Находим в матрице R строку, меньшую или равную А. Эта строка соответствует процессу Р4. R4 = A. Выполняется процесс Р4.

А = А + С4 = 3 + 1 = 4.

R3 = A. Выполняется процесс Р3.

А = А + С3 = 4+2 = 6.

R5 = A. Выполняется процесс Р5.

А = А + С5 = 6+5 = 11.

R2 < A. Выполняется процесс Р2.

А = А + С2= 11+4 = 15.

R1 < A. Выполняется процесс Р1.

А = А + С1= 15+3= 18.

Все процессы успешно завершены.

Пример 2.Количество существующих ресурсов одного типа Е = 11. Количество процессов – 5: Р1, Р2, Р3, Р4, Р5. Количество доступных ресурсов: А = 3

 

— матрица начального распределения ресурсов С;

 

— матрица требуемых ресурсов R, в сумме требуется 30 ед. ресурсов.

Находим в матрице R строку, меньшую или равную А. Эта строка соответствует процессу Р1. R1 = A. Выполняется процесс Р1.

А = А + С1 = 3 + 1 = 4

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

 

Текст программы bankir, реализующей этот алгоритм:

program bankir;

 

var

E, A, i, Sum, n, z, min: integer;

C, R: array [1..4] of integer;

 

label povt, vyvod, exit;

 

begin

 

Writeln (‘VVedite chislo imeyushihsya resursov’);

Readln (E);

Writeln (‘VVedite chislo dostupnyh resursov’);

Readln (A);

 

for i:=1 to 4 do

begin

Writeln (‘VVedite chislo resursov, trebuemyh klientu’,i);

Readln (R [i]);

end;

 

for i:=1 to 4 do

begin

Writeln (‘VVedite chislo resursov, kreditovannyh klientu’,i);

Readln (C [i]);

end;

 

Sum:=0;

 

//Расчет вектора требуемых ресурсов с учетом выдачи кредита и подсчет количества выданного кредита

for i:=1 to 4 do

begin

Sum:= Sum + C [i];

R [i]:= R [i] – C [i];

end;

 

A: = A – Sum;

 

//Определение возможности кредитования

If ((R [1] > A) and (R [2] > A) and (R [3] > A) and (R [4] > A)) then

begin

writeln (‘Takoe kreditovanie nevozmozhno!!!’);

goto exit;

end;

 

//Определение клиента, запросы на ресурсы которого можно удовлетворить

for i:=1 to 4 do

begin

if R [i] < = A then

begin

n:=i;

R[i]:=o;

end;

end;

A:= A + C [n];

 

//Проверка выплат клиентами выданных кредитов

povt:

min:= R [1];

for i:=2 to 4 do

begin

if ((min > = R [i]) and (R[i]<>0)) then

begin

min:= R [i];

z:=i;

end

else

begin

min:= R [1];

A: = A + C [1];

R [1]:= 0;

goto vyvod;

end;

end;

A: = A + C [z];

R [z]:=0;

 

for i:=1 to 4 do

begin

if R [i] <> 0 then goto povt else goto vyvod;

end;

vyvod;

Writeln (‘Vse kredity vydany i pogasheny!’);

 

exit;

end.

еще рефераты
Еще работы по информатике