Что такое семафор?
Семафор — это просто переменная, которая неотрицательна и разделена между потоками. Семафор — это механизм сигнализации, и поток, ожидающий семафора, может быть сигнализирован другим потоком. Он использует две атомарные операции: 1) ожидание и 2) сигнал для синхронизации процесса.
Семафор разрешает или запрещает доступ к ресурсу, который зависит от того, как он настроен.
В этом руководстве по операционной системе (ОС) вы изучите:
- Характеристика семафора
 - Что такое семафор?
 - Типы семафоров
 - Пример семафора
 - Ожидание и сигнальные операции в семафорах
 - Подсчет семафора против двоичного семафора
 - Разница между семафором и мьютексом
 - Преимущества семафоров
 - Недостаток семафоров
 
Характеристика семафора
Здесь характерны семафоры:
- Это механизм, который можно использовать для обеспечения синхронизации задач.
 - Это механизм синхронизации низкого уровня.
 - Семафор всегда будет содержать неотрицательное целочисленное значение.
 - Семафор может быть реализован с использованием тестовых операций и прерываний, которые должны выполняться с использованием файловых дескрипторов.
 
Типы семафоров
Два распространенных вида семафоров
- Подсчет семафоров
 - Бинарные семафоры.
 
Подсчет семафоров
Этот тип семафора использует счетчик, который помогает заданию быть приобретенным или выпущенным много раз. Если начальный счетчик = 0, семафор счета должен быть создан в недоступном состоянии.
Однако, если счетчик> 0, семафор создается в доступном состоянии, и количество токенов в нем равно его количеству.
Бинарные семафоры
Бинарные семафоры очень похожи на подсчет семафоров, но их значение ограничено 0 и 1. В этом типе семафора операция ожидания работает только в том случае, если семафор = 1, а сигнальная операция завершается успешно, когда семафор = 0. Легко реализовать, чем считать семафоры.
Пример семафора
Приведенная ниже программа представляет собой пошаговую реализацию, которая включает использование и объявление семафора.
Shared var mutex: semaphore = 1;
Process i
    begin
    .
    .
    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 | 
| Более одного слота | Только один слот | 
| Предоставить набор процессов | У него есть механизм взаимного исключения. | 
Разница между семафором и мьютексом
| параметры | семафор | Mutex | 
| Механизм | Это тип сигнального механизма. | Это запирающий механизм. | 
| Тип данных | Семафор является целочисленной переменной. | Мутекс это просто объект. | 
| модификация | Операции ожидания и сигнала могут изменить семафор. | Он изменяется только процессом, который может запросить или освободить ресурс. | 
| Управление ресурсами | Если ни один ресурс не является свободным, то для процесса требуется ресурс, который должен выполнить операцию ожидания. Следует подождать, пока счетчик семафора не станет больше 0. | Если он заблокирован, процесс должен ждать. Процесс должен храниться в очереди. К этому нужно обращаться только тогда, когда мьютекс разблокирован. | 
| Нить | Вы можете иметь несколько программных потоков. | Вы можете иметь несколько программных потоков в мьютексе, но не одновременно. | 
| Владение | Значение может быть изменено любым процессом, освобождающим или получающим ресурс. | Блокировка объекта снимается только тем процессом, который получил блокировку для него. | 
| Типы | Типы семафора считаются семафором и двоичным семафором и | У Mutex нет подтипов. | 
| операция | Значение семафора изменяется с использованием операций wait () и signal (). | Объект мьютекса заблокирован или разблокирован. | 
| Ресурсы Занятость | Он занят, если все ресурсы используются, и процесс, запрашивающий ресурс, выполняет операцию wait () и блокируется, пока счетчик семафоров не станет> 1. | В случае, если объект уже заблокирован, процесс, запрашивающий ресурсы, ожидает и ставится в систему системой перед снятием блокировки. | 
Преимущества семафоров
Вот плюсы / преимущества использования семафора:
- Это позволяет более чем одному потоку получить доступ к критическому разделу
 - Семафоры являются машинно-независимыми.
 - Семафоры реализованы в машинно-независимом коде микроядра.
 - Они не позволяют нескольким процессам войти в критическую секцию.
 - Поскольку в семафоре заняты ожидания, никогда не теряется время и ресурсы процесса.
 - Они являются машинно-независимыми, что должно выполняться в машинно-независимом коде микроядра.
 - Они позволяют гибкое управление ресурсами.
 
Недостаток семафоров
Вот минусы / минусы семафора
- Одним из самых больших ограничений семафора является инверсия приоритетов.
 - Операционная система должна отслеживать все вызовы в ожидании и сигнализировать семафор.
 - Их использование никогда не принуждается, но только по соглашению.
 - Чтобы избежать взаимоблокировок в семафоре, операции Wait и Signal должны выполняться в правильном порядке.
 - Семафорное программирование является сложным, поэтому есть шансы не достичь взаимного исключения.
 - Это также не практичный метод для крупномасштабного использования, так как их использование приводит к потере модульности.
 - Семафор более подвержен ошибкам программиста.
 - Это может привести к взаимоблокировке или нарушению взаимного исключения из-за ошибки программиста.
 
Резюме:
- Семафор определяется как переменная, которая является неотрицательной и разделяется между потоками.
 - Это механизм, который можно использовать для обеспечения синхронизации задач.
 - Подсчет семафора использует счет, который помогает заданию быть приобретенным или выпущенным много раз.
 - Бинарные семафоры очень похожи на подсчет семафоров, но их значение ограничено 0 и 1.
 - Операция ожидания помогает контролировать ввод задачи в критическую секцию.
 - Операция семафора сигнала используется для управления выходом задачи из критической секции.
 - Подсчет семафора не имеет взаимного исключения, тогда как двоичный семафор имеет взаимное исключение
 - Семафор означает сигнальный механизм, тогда как Mutex — механизм блокировки
 - Семафор позволяет более чем одному потоку получить доступ к критическому разделу
 - Одним из самых больших ограничений семафора является инверсия приоритетов.
 

