Понятие семафора, семафорные примитивы, бинарные и считающие семафоры. Примеры объектов диспетчеризации в MS Windows, которые могут использоваться как «семафоры».



Семафор - это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операций (семафорных примитивов) P и V и операции инициализации.

Двоичные (бинарные) семафоры -только значения 0 или 1 ( закрыт и открыт)

 Считающие семафоры (семафоры со счетчиками) - целые значения. Считающий семафор открыт, если значение счетчика больше 0.

Примитив P - процедура, сбрасывающая или уменьшающая значение семафора на 1, эта процедура заключает в себе потенциальное ожидание вызывающих процессов в том случае, если к моменту выполнения этой процедуры процессом соответствующий семафор закрыт. Если s > 0 то s:=s-1 иначе (ожидать на s).Процедура V отрывает семафор или увеличивает значение счетчика на 1. Таким образом, вызов этой процедуры может активизировать некоторый ожидающий открытия семафора процесс. если (имеются процессы, которые ожидают на s), то (разрешить одному из них продолжить работу), иначе s:=s+1

· Если для счетчика допускаются только целые неотрицательные значения, то смысл его значения - счетчик количества некоторого ресурса. Процедура P - процедура запроса единицы этого ресурса, запрос может быть удовлетворен или может заблокировать процесс, выполнивший его, если количество ресурса равно 0. Процедура V - процедура освобождения единицы ресурса.

· Если счетчик может принимать и отрицательные целые значения, то отрицательное значение семафора означает длину очереди процессов, попытавшихся пройти через семафор (запросивших соответствующий ему ресурс).

 

 

Семафор Применение
Mutex Используется как классические семафоры с примитивами P() и V() для реализации взаимного исключения и синхронизации задач
Событие Применяется для передачи управляющих сигналов между процессами о выполнении той или иной активности
MuxWait Используются для того, чтобы процесс или нить могли ожидать на нескольких семафорах сразу

 

Применение бинарных семафоров для реализации взаимного исключения и синхронизации процессов. Примеры.

Двоичные (бинарные) семафоры могут принимать значения 0 или 1 (могут находиться в двух состояниях: закрыт и открыт).

Операции выборки значения семафорной переменной S, ее изменения и сохранения не могут быть прерваны. Во время выполнения последовательности этих операций в процедурах P и V, вызванных одним процессом, над каким-либо семафором он недоступен для других процессов. hold(S) - означает перевод процесса в состояние ожидания на семафоре S и выход из P. Это ожидание не должно быть “занятым” (то есть нельзя зациклить процедуру P на проверке состояния семафора, так как в этом случае ни один другой процесс не смог бы получить доступ к этой защищенной переменной даже для выполнения операции открытия этого семафора). Для устранения занятого ожидания с каждым семафором связывается список блокирования (список процессов, ожидающих открытия семафора). Процесс, который не может продолжиться после выполнения P(S), будет заблокирован с сохранением его состояния в соответствующем S списке блокирования.

release(S) - выполняет проверку списка блокирования, связанного с семафором S, если этот список не пуст, то активизируется некоторый процесс из этого списка, пропускается через семафор, а значение семафора изменяется при этом соответствующим образом (бинарный семафор снова закрывается, а для семафора со счетчиком возвращенная процессом, выполнившем операцию V(S), единица ресурса передается очередному процессу из списка).

Ниже приведено описание семафорных примитивов для бинарных и считающих семафоров. Алгоритмы выполнения семафорных операций можно представить так:


Дата добавления: 2018-02-18; просмотров: 726; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!