Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OC - Лекция 5 / Копия Alg_banker

.pas
Скачиваний:
13
Добавлен:
21.05.2015
Размер:
1.66 Кб
Скачать
{ =========================================== }
{ Правки }
{ =========================================== }
{ 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