Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:OC - Лекция 5 / Копия Alg_banker
.pas { =========================================== }
{ Правки }
{ =========================================== }
{ free_device = NUM_DEVICE - alloc_count; }
{ }
{ =========================================== }
{ FAQ }
{ =========================================== }
{ Q: alloc[i] не инициализирован, ок? }
{ A: Ок. }
{ }
program alg_banker;//предложен Дейкстрой
const
NUM_DEVICE = 100; // общее число устройств
NUM_PROC = 50; // общее число процессов
var
max_want: array[1..NUM_PROC] of integer; // максимальная потребность процессов
alloc: array[1..NUM_PROC] of integer; // выделено устройств
completed: array[1..NUM_PROC] of boolean; // признак завершённости
alloc_count: integer; // количество занятых устройств
was_free: boolean; // признак освобождения устройств
i: integer;
begin
{ инициализируем }
alloc_count := 0;
for i := 1 to NUM_PROC do
begin
completed[i] := False;
alloc_count := alloc_count + alloc[i];
end;
{ обрабатываем }
repeat
was_free := False;
for i := 1 to NUM_PROC do
if (not completed[i]) and (max_want[i] - alloc[i] <= free_device) do
begin
completed[i] := True;
alloc_count := alloc_count - alloc[i];
was_free := True;
end;
until not was_free;
{ выводим }
if alloc_count = 0 then
{ State is safety }
else
{ State is not safety }
end.
{ Правки }
{ =========================================== }
{ free_device = NUM_DEVICE - alloc_count; }
{ }
{ =========================================== }
{ FAQ }
{ =========================================== }
{ Q: alloc[i] не инициализирован, ок? }
{ A: Ок. }
{ }
program alg_banker;//предложен Дейкстрой
const
NUM_DEVICE = 100; // общее число устройств
NUM_PROC = 50; // общее число процессов
var
max_want: array[1..NUM_PROC] of integer; // максимальная потребность процессов
alloc: array[1..NUM_PROC] of integer; // выделено устройств
completed: array[1..NUM_PROC] of boolean; // признак завершённости
alloc_count: integer; // количество занятых устройств
was_free: boolean; // признак освобождения устройств
i: integer;
begin
{ инициализируем }
alloc_count := 0;
for i := 1 to NUM_PROC do
begin
completed[i] := False;
alloc_count := alloc_count + alloc[i];
end;
{ обрабатываем }
repeat
was_free := False;
for i := 1 to NUM_PROC do
if (not completed[i]) and (max_want[i] - alloc[i] <= free_device) do
begin
completed[i] := True;
alloc_count := alloc_count - alloc[i];
was_free := True;
end;
until not was_free;
{ выводим }
if alloc_count = 0 then
{ State is safety }
else
{ State is not safety }
end.
Соседние файлы в папке OC - Лекция 5