Учебники

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