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

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

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

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

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

Як обробляти Syncхронізація працює?

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

Процес Syncхронізація Твори

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

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

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

Що таке проблема критичної ділянки?

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

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

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

Правила для критичної секції

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

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

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

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

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

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

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

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

Приклад

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

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

Syncхронізація обладнання

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

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

Блокування Mutex

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

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

Semaphore Рішення

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

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

Приклад

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

Підсумки

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