Взаємне блокування: відмінності між версіями
[неперевірена версія] | [неперевірена версія] |
Вилучено вміст Додано вміст
м робот додав: da:Deadlock |
|||
Рядок 41:
== Обробка тупикових ситуацій ==
Обробку та поводження із ситуаціями взаємного блокування можна умовно
# Нехтування проблемою взагалі (т. з. «страусиний алгоритм»).
# Виявлення та відновлення. Дозволити відбутися взаємному блокуванню, виявити його, та виконати деякі дії.
Рядок 71:
Для невиконання умови відсутності примусового звільнення ресурсів, можливі наступні алгоритми:
# У випадках, коли процес запитує доступ до ресурсу, який не може бути одразу надано, він звільняє решту зайнятих ресурсів, і передає їх в чергу на запит. Роботу процеса буде відновлено після отримання доступу до всіх ресурсів у черзі (старі та нові ресурси).
# Спочатку перевірити можливість надання ресурсу, якщо можливість надати ресурс відсутня через використання його іншим процесом, що очікує на звільнення деяких інших ресурсів, то звільнити цей ресурс, і передати його процесу-замовнику. Якщо необхідний ресурс як недоступний, так і процес, що його використовує, не очікує на
Такий алгоритм використовується для ресурсів, стан яких може бути легко збережено та відтворено, таких як регістри процесора або простори пам'яті.
Рядок 82:
Тепер, для уникнення циклічного очікування, встановимо наступне правило: ''процес може запитувати ресурси лише в зростаючому порядку номерів''. Як варіант, процес має звільняти ресурс з більшим порядковим номером перед поданням запиту на ресурс з меншим номером.
Незважаючи на те, що встановлення та дотримання правильного порядку отримання доступу до ресурсів є відповідальністю розробника ПЗ, існють спеціалізовані інструменти для перевірки дотримання порядку та повідомлення про помилки. Одним з прикладів є програма witness, що працює на
=== Уникнення ===
Для ''уникнення'' тупикових сутацій, програми мають зазделегідь надавати операційній системі інформацію про ресурси, що будуть використані процесом під час роботи. Маючи цю інформацію операційна система може вирішувати на
== Інструменти ==
|