logo
СПЗ_лекції

6. Уникнення взаємоблокувань.

Розглядаючи виявлення взаємоблокувань передбачалось, що коли процес потребує ресурсів, то він вимагає їх всіх одночасно. Але в більшості систем ресурси запитуються почергово, по одному. Система повинна вміти вирішувати чи надання ресурсу є безпечним, чи ні і надавати його процесу тільки в першому випадку. Таким чином, виникає питання: чи існує алгоритм, який завжди може уникнути взаємоблокування, постійно роблячи правильний вибір? Розглянемо способи ухилення від взаємоблокувань за допомогою правильного надання ресурсів.

Алгоритми, що розглядатимуться далі використовують інформацію з рис. 5.4. В будь-який момент часу існує поточний стан, складений з величин E, A, C i R. Говорять, що стан безпечний, якщо він не знаходиться в тупіку і існує деякий порядок планування, при якому кожен процес може працювати до завершення, навіть якщо всі процеси навколо негайно захочуть отримати свою максимальну кількість ресурсів. Розглянемо приклад з одним ресурсом (рис. 5.5).

На рис. 5.5(а) дано стан, в якому процес А займає 3 екземпляри ресурсу, але йому потрібно буде 9 екземплярів. Процес В в даний момент зайняв 2 екземпляри, але в майбутньому йому потрібно буде 4. Процес С володіє двома, але може вимагати ще п’ять. В системі є всього 10 екземплярів даного ресурсу, 7 з них уже розподілено, 3 поки що вільні.

Рис. 5.5 Демонстрація того, що стан а є безпечним.

Стан 5.5(б) є безпечним, бо існує така послідовність надання ресурсів, яка дозволяє завершитись всім процесам. Планувальник може запустити тільки процес В на той час, поки він запросить 2 додаткових екземпляри ресурсу (рис. 5.5 (б)). Коли процес В закінчується, то стан на рис. 5.5 (в). Потім планувальник запустить процес С, що приведе з часом до ситуації 5.5 (г). По завершенню С отримаємо 5.5 (д). Тільки тепер процес А може зайняти необхідні 6 екземплярів ресурсу і теж успішно завершитись. Тому стан 5.5 (а) є безпечним.