Синхронізація процесів: проблема критичного розділу в ОС

Зміст:

Anonim

Що таке синхронізація процесів?

Синхронізація процесів - це завдання координації виконання процесів таким чином, що жоден із двох процесів не може мати доступ до однакових спільних даних та ресурсів.

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

Це може призвести до невідповідності спільних даних. Тож зміни, внесені одним процесом, не обов’язково відображаються, коли інші процеси отримували доступ до тих самих спільних даних. Щоб уникнути такого типу невідповідності даних, процеси потрібно синхронізувати між собою.

У цьому посібнику з операційної системи ви дізнаєтесь:

  • Що таке синхронізація процесів?
  • Як працює синхронізація процесів?
  • Розділи програми
  • Що таке проблема критичного розділу?
  • Правила для критичного розділу
  • Рішення для критичного розділу

Як працює синхронізація процесів?

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

Розділи програми

Ось чотири найважливіші елементи критичного розділу:

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

Що таке проблема критичного розділу?

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

  • Вхід до критичного розділу обробляється функцією wait (), і він представляється як P ().
  • Виходом з критичної секції керує функція signal (), представлена ​​як V ().

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

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

Критичний розділ повинен дотримуватися всіх трьох правил:

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

Рішення для критичного розділу

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

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

Рішення Петерсона

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

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

Приклад

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Припустимо, що існує N процесів (P1, P2,… PN), і кожен процес у певний момент часу вимагає входу в критичний розділ
  • Зберігається масив FLAG [] розміром N, який за замовчуванням є false. Отже, коли процес вимагає входу в критичний розділ, він повинен встановити свій прапор як істинний. Наприклад, якщо Pi хоче ввести, він встановить FLAG [i] = TRUE.
  • Інша змінна під назвою TURN вказує номер процесу, який наразі очікується ввести в CS.
  • Процес, який потрапляє у критичний розділ під час виходу, змінить ПОВЕРНЕННЯ на інше число зі списку готових процесів.
  • Приклад: поворот 2, тоді P2 потрапляє в критичну секцію, а під час виходу з повороту = 3, тому P3 виривається з циклу очікування.

Апаратне забезпечення для синхронізації

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

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

Замки Mutex

Апаратне забезпечення синхронізації не є простим методом для реалізації для всіх, тому був також представлений суворий програмний метод, відомий як Mutex Locks.

При цьому підході у розділі введення коду отримується БЛОКУВАННЯ над критичними ресурсами, що використовуються всередині критичного розділу. У розділі виходу цей замок відпущений.

Розчин для семафору

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

Він використовує дві атомні операції, 1) очікування та 2) сигнал для синхронізації процесу.

Приклад

WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;

Короткий зміст:

  • Синхронізація процесів - це завдання координації виконання процесів таким чином, що жоден із двох процесів не може мати доступу до однакових спільних даних та ресурсів.
  • Чотири елементи критичного розділу: 1) Вхідний розділ 2) Критичний розділ 3) Розділ виходу 4) Розділ нагадування
  • Критичний розділ - це сегмент коду, до якого можна отримати доступ за допомогою сигнального процесу в певний момент часу.
  • Три обов’язкові правила, які повинні застосовуватися критичним розділом: 1) Взаємне виключення 2) Рішення процесу 3) Обмежене очікування
  • Взаємне виключення - це особливий тип двійкового семафору, який використовується для контролю доступу до спільного ресурсу.
  • Технологічне рішення використовується, коли в критичній секції немає нікого, а хтось хоче.
  • У вирішенні очікувального рішення після того, як процес подає запит на потрапляння у свій критичний розділ, існує обмеження кількості інших процесів, які можуть потрапити у свій критичний розділ.
  • Рішення Петерсона широко застосовується для вирішення проблем критичного розділу.
  • Проблеми Критичного розділу також вирішуються шляхом синхронізації обладнання
  • Апаратне забезпечення синхронізації не є простим методом для реалізації для всіх, тому був також представлений суворий програмний метод, відомий як Mutex Locks.
  • Семафор - це ще один алгоритм або рішення проблеми критичного розділу.