
- •Государственное образовательное учреждение высшего профессионального образования самарская государственная академия путей сообщения
- •Самара 2006
- •Составитель Валерий Анатольевич Засов Рецензенты: к.Т.Н., заведующий научно-исследовательским отделом н.А. Локтев (нпц «Информационные и транспортные системы»);
- •Оглавление
- •1.Задание на курсовую работу по дисциплине
- •2.Построение диаграмм выполнения процессов
- •4.Обнаружение и предотвращение взаимных
- •Библиографический список……………………………………….……...…….44
- •1. Задание на курсовую работу по дисциплине «Операционные системы»
- •Задание №1
- •Задание №2
- •Задание №3
- •Задание №4
- •2. Построение диаграмм выполнения процессов для различных алгоритмов планирования
- •2.1. Алгоритмы планирования мультипрограммных операционных систем
- •2.2. Примеры построения диаграмм выполнения процессов для различных алгоритмов планирования
- •3.Организация синхронизации процессов и потоков
- •3.1. Объекты взаимной синхронизации процессов и потоков
- •3.2. Примеры использования различных объектов синхронизации
- •4. Обнаружение и предотвращение взаимных блокировок
- •4.1. Условия возникновения взаимных блокировок и методы борьбы с ними
- •Существуют следующие методы ликвидации взаимоблокировок:
- •4.2.Пример алгоритма обнаружения блокировок при наличии одного экземпляра ресурсов каждого типа
- •4.3. Пример алгоритма обнаружения блокировок при наличии нескольких экземпляров ресурсов каждого типа
- •4.4. Пример алгоритма банкира для безопасного распределения ресурсов
- •5. Примеры схем арбитажа
- •Библиографический список
4.4. Пример алгоритма банкира для безопасного распределения ресурсов
Данный алгоритм был разработан математиком Дийкстрой /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.