Семафор, механизм синхронизации.

Процессы, выполняемые в мультипрограммном режиме можно рассматривать как набор связанный последовательных процессов которые действуют независимо друг от друга, только иногда используя общие ресурсы. Взаимосвязь между таким процессами устанавливаются с помощью специальных сообщений и механизма синхронизации. Хотя каждый процесс, выполняемый в мультипрограммном режиме, существует критическая область, которая в фиксированный момент времени может использовать один процесс. Нарушение этого условия приводит к неизвестному порядку исполнения процесса. При использовании критической области возникают проблемы «гонок» и «тупиков».

 

Гонка возникает тогда, когда процессы настолько связны между собой что порядок их выполнения влияет ан результат. Условие тупиков появляется, если два взаимосвязанных процесса блокируют друг друга при обращении к критической области. Для разрешения подобных проблем в операционных системах используется понятии семафора. Семафором (байтом блокировки) называют целую переменную, сигнализирующую о готовности процесса к использованию критической области. Для разрешения этой ситуации был предложен механизм позволяющий выполнять над семафором Q следующие операции:

 

1. P(Q) - операция с одним аргументом – семафором, которая уменьшает его величину на единицу, если Q >= 0. Эта операция является неделимой: то есть определение возможности уменьшения Q и последующее его уменьшение есть неделимая операция. P(Q) представляет собой операцию задержки. То есть если процесс P1 не может завершиться до тех пор, пока какой либо процесс P2 не выполнит операцию V(Q). Если несколько процессов P одновременно начинают операцию над Q, то Q изменит своё значение только тогда когда завершится одна из начавшихся операций.

 

2. V(Q) – операция с одним аргументом – семафором, которая увеличивает значение аргумента на единицу.

 

Существуют другие операции над семафорами, но все операции в силу своей неделимости позволяют блокировать или активизировать процессы при освобождении ресурсов любого типа.