Блокування

Є два типи блокувань: DeadLocks і LiveLocks. DeadLocks описує стан, в якому всі процеси блоковані і не можуть самі вивести себе із стану блокування. У випадку LiveLocks йдеться про блокування активних процесів, тобто тих процесів, які хоч і не є в стані "блоковано", але виконують при цьому, наприклад, операції очікування і не можуть вийти із блокування.

Визначення DeadLocks (взаємне блокування)

Група процесів чекає на появу умови, яка може бути створена тільки процесами цієї групи (взаємозалежність).

Взаємні блокування (DeadLocks) з'являються, наприклад, тоді, коли всі процеси блоковані в черзі очікування семафора або умови. Можливе виникнення взаємоблокувань у разі застосування семафорів. Кожний з двох процесів використовує системні ресурси, наприклад термінал (ТЕ) і друкарську машинку (DR), але запити виконуються у формі р- операцій в різній послідовності. У той час, як P1 запитує спочатку термінал, а потім друкарську машинку,P2 намагається використати ці системні ресурси в зворотному порядку. Незважаючи на те, що кожний процес веде себе коректно з точки зору його особистих функцій, взаємодія двох процесів може привести до взаємоблокування (DeadLocks). Це трапляється не завжди, а тільки тоді, колиP1 зайняв термінал, аP2 - друкарську машинку. ТодіP1 чекає в своїй Р- операції на друкарську машинку, яку зайнявP2 і звільнить її лише тоді, коли він зможе зайняти термінал, який в свою чергу зайнятий процесомP1. Тим самим обидва процеси опинились у взаємозалежності, із якої не зможуть звільнитись. Це означає, що настало взаємоблокування (DeadLocks). На рис.В.1 показано небезпеку взаємоблокування у вигляді програми.

 
 

Рис. В.1 Небезпека взаємоблокування

Передумови, за яких може з'явитись взаємоблокування:

1. Операційні засоби можуть використовуватися тільки на основі виключного права (ексклюзивно).

2. Процеси перебувають в режимі використання операційних засобів в той час, коли вони вже потребують інших, нових ресурсів.

3. Операційні засоби не можуть забиратися у процесів в примусовому порядку.

4. Існує циркулярний ланцюг процесів, так що кожний процес використовує операційний ресурс, який замовляється наступним процесом цього ланцюга.

На практиці існує ряд алгоритмів для розпізнавання взаємоблокувань та ліквідації їх. Вони будуються на основі вказаних чотирьох пунктів і спрямовані на те, щоб не виникало передумов появи взаємоблокувань.

Розгляньмо приклади того, як не допустити передумов блокувань.

А). Якщо виникає взаємоблокування, то процеси треба звільнити від роботи з ресурсами, які були між ними розподілені. Для цього потрібні надійні методи розпізнавання фактів взаємоблокування і вводу в дію процесів, що повернуті в початковий стан при розблокуванні.

Б). Кожний процес має один раз замовити потрібні йому операційні ресурси. Цей метод передбачає ведення протоколу замовлень, якого мають дотримуватися всі процеси. Запит на декілька операційних ресурсів має реалізуватись як атомарна операція, наприклад, для критичного сегмента вона має замикатися через семафор. Якщо процес на момент виконання виявляє, що він потребує нових операційних засобів, то він має спершу звільнити всі без винятку операційні засоби, що були ним зайняті, а потім запитати одночасно всю сукупність операційних засобів, які тепер потребує.

Якщо всі процеси дотримуються цього протоколу замовлень, то в жоден момент не може виникнути блокування. Це потребує збільшеного об'єму операцій керування для зайняття та звільнення операційних ресурсів. Крім того, контроль правильності дотримання протоколу всіма процесами важко реалізувати, а операційні ресурси в цих умовах будуть зайняті суттєво довше, ніж цього потребують процеси.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: