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

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

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