Взаємне блокування: відмінності між версіями

[неперевірена версія][неперевірена версія]
Вилучено вміст Додано вміст
VolkovBot (обговорення | внесок)
м робот додав: da:Deadlock
Patlatus (обговорення | внесок)
Рядок 41:
== Обробка тупикових ситуацій ==
 
Обробку та поводження із ситуаціями взаємного блокування можна умовно підилитиподілити на:<ref>(Таненбаум 2002), глава 3, стор. 192.</ref>
# Нехтування проблемою взагалі (т. з. «страусиний алгоритм»).
# Виявлення та відновлення. Дозволити відбутися взаємному блокуванню, виявити його, та виконати деякі дії.
Рядок 71:
Для невиконання умови відсутності примусового звільнення ресурсів, можливі наступні алгоритми:
# У випадках, коли процес запитує доступ до ресурсу, який не може бути одразу надано, він звільняє решту зайнятих ресурсів, і передає їх в чергу на запит. Роботу процеса буде відновлено після отримання доступу до всіх ресурсів у черзі (старі та нові ресурси).
# Спочатку перевірити можливість надання ресурсу, якщо можливість надати ресурс відсутня через використання його іншим процесом, що очікує на звільнення деяких інших ресурсів, то звільнити цей ресурс, і передати його процесу-замовнику. Якщо необхідний ресурс як недоступний, так і процес, що його використовує, не очікує на звільеннязвільнення інших ресурсів, то перевести процес, що подав запит, в стан очікування. Під час очікування, деякі утримувані ним ресурси можуть бути звільнено через запити третіх процесів. Процес відновлює роботу після того, як отримає необхідні ресурси та ресурси, що були звільнені під час очікування.
Такий алгоритм використовується для ресурсів, стан яких може бути легко збережено та відтворено, таких як регістри процесора або простори пам'яті.
 
Рядок 82:
Тепер, для уникнення циклічного очікування, встановимо наступне правило: ''процес може запитувати ресурси лише в зростаючому порядку номерів''. Як варіант, процес має звільняти ресурс з більшим порядковим номером перед поданням запиту на ресурс з меншим номером.
 
Незважаючи на те, що встановлення та дотримання правильного порядку отримання доступу до ресурсів є відповідальністю розробника ПЗ, існють спеціалізовані інструменти для перевірки дотримання порядку та повідомлення про помилки. Одним з прикладів є програма witness, що працює на операцінийнихопераційних системах сімействасім'ї [[Berkeley Software Distribution|BSD]].<ref name=witness>{{cite web|url=http://www.freebsd.org/cgi/man.cgi?query=witness&apropos=0&sektion=0&manpath=FreeBSD+7.0-RELEASE&format=html|title=FreeBSD 7.0: WITNESS(4) Manual page|date=24 липня 2008}}</ref>
 
=== Уникнення ===
 
Для ''уникнення'' тупикових сутацій, програми мають зазделегідь надавати операційній системі інформацію про ресурси, що будуть використані процесом під час роботи. Маючи цю інформацію операційна система може вирішувати на задовільненнязадоволення яких запитів процес може зачекати. Аби вирішити, чи повинен процес чекати, операційна система має брати до уваги доступні ресурси, ресурси виділені процесам та майбутні запити, які можуть зробити процеси.
 
== Інструменти ==