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