Что такое семафор? Двоичные, счетные типы с примером

Содержание:

Anonim

Что такое семафор?

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