Тупик в OperaСистема ting: що таке циклічне очікування (приклади)

⚡ Розумний підсумок

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

  • 🔒 Визначення: Взаємне блокування зупиняє процеси, кожен з яких утримує ресурс, поки вони очікують один на одного.
  • 🧩 Чотири умови: Взаємне виключення, утримання та очікування, відсутність превентивних дій та циклічне очікування повинні триматися разом.
  • 🔁 Циклічне очікування: Процеси утворюють замкнутий ланцюг, кожен з яких очікує на ресурс, що надається наступним.
  • 🛡️ профілактика: Порушення будь-якої з чотирьох умов запобігає утворенню глухого кута.
  • 🏦 Уникнення: Алгоритм банкіра перевіряє запити на ресурси, щоб підтримувати систему в безпечному стані.
  • 🤖 Кут штучного інтелекту: Машинне навчання виявляє шаблони блокувань, а Copilot допомагає писати та перевіряти код блокування.

Тупик в Operating System

Що таке Deadlock?

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

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

Приклад тупика

  • Реальним прикладом може бути рух транспорту, який рухається лише в одному напрямку.
  • Тут міст вважається ресурсом.
  • Отже, коли виникає глухий кут, його можна вирішити, якщо один автомобіль зробить задній рух (використає ресурси та відкат).
  • У разі виникнення тупикової ситуації може знадобитися резервне копіювання кількох автомобілів.
  • Отже, голодування можливе.

Приклад тупика

Приклад тупикової ситуації

Що таке циклічне очікування?

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

Наприклад, процесу A виділяється ресурс B, поки він запитує ресурс A. Так само, процесу B виділяється ресурс A, поки він запитує ресурс B. Це створює циклічний цикл очікування.

Приклад циклічного очікування

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

Приклад циклічного очікування

Приклад циклічного очікування

Виявлення взаємоблокувань в ОС

Виникнення взаємоблокування може бути виявлено планувальником ресурсів. Планувальник ресурсів допомагає ОС підтримувати track усіх ресурсів, виділених різним процесам. Після виявлення глухого кута його можна вирішити, витіснивши ресурси, відкотивши процес або завершивши один або кілька глухих процесів.

Запобігання взаємоблокуванням в ОС

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

Запобігання глухим блокуванням – це набір методів, що гарантують, що принаймні одна з чотирьох необхідних умов не може виконуватися.

Без попередження

Ресурс може бути вивільнений лише добровільно процесом, який його зберігає, після того, як цей процес завершив своє завдання.

  • Якщо процес, який утримує певні ресурси, запитує інший ресурс, який не може бути негайно виділений йому, то всі його ресурси звільняються.
  • Використані ресурси додаються до списку ресурсів, на які очікує процес.
  • Процес перезапускається лише тоді, коли він може відновити свої старі ресурси, а також нові, які запитує.

Взаємне виключення

Взаємне виключення – це повна форма Mutex. Це особливий тип бінарного файлу. семафор який використовується для контролю доступу до спільного ресурсу. Він включає механізм успадкування пріоритетів, щоб уникнути тривалих проблем інверсії пріоритетів, і блокує завдання з вищим пріоритетом на найкоротший можливий час.

Спільні ресурси, такі як файли лише для читання, ніколи не призводять до взаємоблокувань, але ресурси, такі як принтери та стрічкові накопичувачі, потребують ексклюзивного доступу для одного процесу.

Тримай і чекай

У цьому випадку процеси повинні бути зупинені від утримання одного або кількох ресурсів, одночасно очікуючи на один або кілька інших.

Кругове очікування

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

Уникнення тупикової ситуації Algorithms

Краще уникнути глухого кута, ніж вживати заходів після його виникнення. Для уникнення потрібна додаткова інформація, наприклад, як будуть використовуватися ресурси. Уникнення глухого кута — це корисна модель, в якій кожен процес оголошує максимальну кількість ресурсів кожного типу, які йому можуть знадобитися.

Уникнення Algorithms

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

Для одного екземпляра типу ресурсу:

  • Використайте графік розподілу ресурсів.
  • Цикл у графі є необхідним і достатнім для виникнення глухого кута.

Для кількох екземплярів одного типу ресурсу:

  • Цикл необхідний, але недостатній для утворення глухого кута.
  • Ввімкніть кнопку Алгоритм банкіра.

Різниця між голодуванням і глухим кутом

Ось деякі важливі відмінності між глухим кутом та голодуванням:

Deadlock Голодування
Ситуація тупика виникає, коли один із процесів блокується. Голодування — це ситуація, коли всі процеси з низьким пріоритетом блокуються, поки виконуються процеси з високим пріоритетом.
Безвихідна ситуація – нескінченний процес. Голодування — це довге очікування, але не нескінченний процес.
У кожному глухому куті завжди є голод. Кожне голодування не обов'язково має глухий кут.
Взаємне блокування виникає через взаємне виключення, утримання та очікування, відсутність випередження та циклічне очікування, що виникають одночасно. Це трапляється через неконтрольований пріоритет та погане управління ресурсами.

Переваги Deadlock

Ось переваги використання методу обробки тупикових ситуацій:

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

Недоліки Deadlock

Ось недоліки використання методу обробки глухих блокувань:

  • Це затримує початок процесу.
  • Процеси повинні заздалегідь знати свої майбутні потреби в ресурсах.
  • Воно випереджає частіше, ніж потрібно.
  • Це забороняє додаткові запити на ресурси.
  • Це має невід'ємні втрати від превенції.

Поширені запитання

Для утворення тупикової блокування одночасно необхідні чотири умови Коффмана: взаємне виключення, утримання та очікування, відсутність випередження та циклічне очікування. Видалення будь-якої з цих умов запобігає утворенню тупикової блокування.

Запобігання заздалегідь усуває одну з чотирьох умов, тому глухий кут ніколи не може утворитися. Уникнення дозволяє умови, але використовує перевірки під час виконання, такі як Алгоритм банкіра, щоб підтримувати систему в безпечному стані.

У глухому куті заблоковані процеси повністю зупиняються і ніколи не змінюють свій стан. livelock, процеси постійно змінюють стан і використовують процесор, але все одно не досягають прогресу. Livelock — це окремий випадок нестачі ресурсів.

Більшість систем загального призначення, включаючи Windows і Linux, використовуйте алгоритм страуса та просто ігноруйте рідкісні тупикові ситуації, оскільки запобігання є дорогим. Бази даних та системи реального часу натомість запускають активні процедури виявлення та відновлення.

Граф розподілу ресурсів відображає процеси та ресурси як вузли, з'єднані ребрами запитів та призначень. Цикл у графі сигналізує про можливе блокування; для ресурсів з одним екземпляром цикл завжди означає існування блокування.

Ні. Справжнє блокування є постійним, оскільки заблоковані процеси ніколи самостійно не звільняють свої ресурси. Операційна система повинна розірвати його, витіснивши ресурс, відкотивши його або завершивши один із процесів.

Моделі машинного навчання вивчають шаблони запитів ресурсів, щоб передбачати та позначати блокування до їх виникнення. Планувальники ШІ можуть змінювати порядок запитів або налаштовувати політики блокування, що корисно в базах даних, хмарних платформах та розподілених системах.

Так. GitHub Copilot може виявляти ризиковане впорядкування блокувань, пропонувати послідовне отримання блокувань та генерувати тести, що виявляють взаємні блокування. Розглядайте його вихідні дані як перший прохід та все одно перевіряйте логіку паралельності за допомогою відповідних інструментів аналізу.

Підсумуйте цей пост за допомогою: