Что такое семафор?
Семафор — это просто переменная, которая неотрицательна и разделена между потоками. Семафор — это механизм сигнализации, и поток, ожидающий семафора, может быть сигнализирован другим потоком. Он использует две атомарные операции: 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 — механизм блокировки
- Семафор позволяет более чем одному потоку получить доступ к критическому разделу
- Одним из самых больших ограничений семафора является инверсия приоритетов.