Що таке семафор?
Семафор - це просто змінна, яка є невід’ємною та поділяється між потоками. Семафор - це сигнальний механізм, і потік, який очікує на семафорі, може сигналізуватися іншим потоком. Він використовує дві атомні операції, 1) очікування та 2) сигнал для синхронізації процесу.
Семафор дозволяє або забороняє доступ до ресурсу, що залежить від способу його налаштування.
У цьому посібнику з операційної системи ви дізнаєтесь:
- Характеристика семафору
- Що таке семафор?
- Види семафорів
- Приклад семафору
- Очікування та сигналізація в семафорах
- Підрахунок семафору проти бінарного семафора
- Різниця між семафором та мутексом
- Переваги семафорів
- Недолік семафорів
Характеристика семафору
Тут характерні семафори:
- Це механізм, який можна використовувати для забезпечення синхронізації завдань.
- Це механізм синхронізації низького рівня.
- Семафор завжди буде мати ціле невід’ємне значення.
- Семафор можна реалізувати за допомогою тестових операцій та переривань, які слід виконувати за допомогою дескрипторів файлів.
Види семафорів
Два найпоширеніші види семафорів
- Підрахунок семафорів
- Бінарні семафори.
Підрахунок семафорів
Цей тип семафору використовує відлік, який допомагає багато разів отримати або випустити завдання. Якщо початковий відлік = 0, підрахунок семафору повинен бути створений у недоступному стані.
Однак, якщо кількість> 0, семафор створюється у доступному стані, і кількість його токенів дорівнює його кількості.
Бінарні семафори
Двійкові семафори дуже схожі на підрахунок семафорів, але їх значення обмежене 0 і 1. У цьому типі семафору операція очікування працює, лише якщо семафор = 1, а операція сигналу успішна, коли семафор = 0. Легко реалізувати, ніж підраховувати семафори.
Приклад семафору
Наведена нижче програма являє собою поетапну реалізацію, яка передбачає використання та декларування семафору.
Shared var mutex: semaphore = 1;Process ibegin… P(mutex);execute CS;V(mutex);… End;
Очікування та сигналізація в семафорах
Обидві ці операції використовуються для здійснення синхронізації процесів. Метою цієї семафорної операції є взаємне виключення.
Зачекайте операції
Цей тип семафорних операцій допомагає контролювати введення завдання у критичний розділ. Однак, якщо значення очікування позитивне, тоді значення аргументу очікування X зменшується. У разі від'ємного або нульового значення жодна операція не виконується. Це також називається операцією P (S).
Після зменшення значення семафору, яке стає негативним, команда утримується доти, поки не будуть виконані необхідні умови.
Copy CodeP(S){while (S<=0);S--;}
Операція сигналу
Цей тип операцій за допомогою семафору використовується для керування виходом завдання з критичного розділу. Це допомагає збільшити значення аргументу на 1, яке позначається як V (S).
Copy CodeP(S){while (S>=0);S++;}
Підрахунок семафору проти бінарного семафора
Ось деякі основні відмінності між рахунком та двійковим семафором:
Підрахунок семафору | Бінарний семафор |
Відсутність взаємного виключення | Взаємне виключення |
Будь-яке ціле число | Значення лише 0 і 1 |
Більше одного слота | Тільки один слот |
Надайте набір процесів | Він має механізм взаємного виключення. |
Різниця між семафором та мутексом
Параметри | Семафор | Мутекс |
Механізм | Це різновид сигнального механізму. | Це запірний механізм. |
Тип даних | Семафор - це ціла змінна. | Мютекс - це просто об'єкт. |
Модифікація | Операції очікування та сигналу можуть модифікувати семафор. | Він модифікується лише процесом, який може вимагати або звільнити ресурс. |
Управління ресурсами | Якщо жоден ресурс не є безкоштовним, тоді процес вимагає ресурсу, який повинен виконувати операцію очікування. Слід зачекати, поки кількість семафору не перевищить 0. | Якщо він заблокований, процес повинен почекати. Процес слід тримати в черзі. Доступ до цього потрібно здійснювати лише тоді, коли мьютекс розблоковано. |
Нитка | Ви можете мати кілька програмних потоків. | Ви можете мати декілька програмних потоків у mutex, але не одночасно. |
Право власності | Значення може бути змінено будь-яким процесом звільнення або отримання ресурсу. | Блокування об’єкта звільняється лише процесом, який отримав на ньому блокування. |
Типи | Типи семафорів - це підрахунок семафору і двійковий семафор і | Мутекс не має підтипів. |
Операція | Значення семафору змінюється за допомогою операцій wait () та signal (). | Об'єкт Mutex заблоковано або розблоковано. |
Заповнення ресурсів | Він зайнятий, якщо використовуються всі ресурси, а процес, що запитує ресурс, виконує операцію wait () і блокується, поки кількість семафору не стане> 1. | У випадку, якщо об'єкт уже заблоковано, процес, що запитує ресурси, чекає і система потрапляє в чергу до випуску блокування. |
Переваги семафорів
Ось плюси / переваги використання Semaphore:
- Це дозволяє більше одного потоку отримати доступ до критичного розділу
- Семафори не залежать від машини.
- Семафори реалізовані в незалежному від машини коді мікроядра.
- Вони не дозволяють декільком процесам потрапляти в критичний розділ.
- Оскільки в семафорі зайнято очікування, ніколи не трачаться витрат часу та ресурсів.
- Вони незалежні від машини, і їх слід запускати в незалежному від машини коді мікроядра.
- Вони дозволяють гнучке управління ресурсами.
Недолік семафорів
Тут є мінуси / недоліки семафору
- Одним з найбільших обмежень семафору є інверсія пріоритетів.
- Операційна система повинна відстежувати всі дзвінки на очікування та подавати сигнал семафору.
- Їх використання ніколи не забезпечується, але це лише за домовленістю.
- Щоб уникнути тупикових ситуацій у семафорі, операції очікування та сигналу потрібно виконувати у правильному порядку.
- Програмування семафору є складним, тому є ймовірність не досягти взаємного виключення.
- Це також не практичний метод для широкомасштабного використання, оскільки їх використання призводить до втрати модульності.
- Семафор більш схильний до помилок програміста.
- Це може спричинити глухий кут або порушення взаємного виключення через помилку програміста.
Короткий зміст:
- Семафор визначається як змінна, яка не є від’ємною і поділяється між потоками.
- Це механізм, який можна використовувати для забезпечення синхронізації завдань.
- Підрахунок семафору використовує відлік, який допомагає багато разів отримати або звільнити завдання.
- Двійкові семафори дуже схожі на підрахунок семафор, але їх значення обмежене 0 та 1.
- Операція очікування допомагає контролювати введення завдання у критичний розділ
- Операція сигнального семафору використовується для управління виходом завдання з критичного розділу
- Підрахунок семафору не має взаємного виключення, тоді як двійковий семафор має взаємне виключення
- Семафор означає механізм сигналізації, тоді як Mutex - механізм блокування
- Семафор дозволяє більше ніж одному потоку отримати доступ до критичного розділу
- Одним з найбільших обмежень семафору є інверсія пріоритетів.