поддержка
проекта:
разместите на своей странице нашу кнопку!И мы
разместим на нашей странице Вашу кнопку или ссылку. Заявку прислать на
e-mail
код нашей кнопки:
Семафор
Семафор - специальный механизм, который обеспечивает запрет влияния
одного параллельно текущего процесса на другой, информационно связанный
с ним. Эта задача является одной из основных для параллельного
программирования. Она же возникает в распределенных операционных
системах, занимающихся решением задачи синхронизации протекания
параллельно идущих процессов вычислений. Семафор - это неотрицательная
переменная, на которой определены две операции - Р и V (Р - первая буква
датского слова passeren, означающего "пропустить", а V - первая буква
слова vrygeven - "освободить"). Неотрицательная переменная определяет
число процессов, "остановленных" у семафора.
Операция Р на семафоре S выполняется следующим образом. Проверяется
значение S. Если S > 0, т. е. к ресурсу, "охраняемому" семафором, есть
очередь из S процессов, ждущих вы юлнения некоторых событий, значение S
уменьшается на единицу, что интерпретируется как допущение одного
процесса к ресурсу и сокращению очереди на единицу. Если S < 0, то к
ресурсу очереди нет, значение 5 не изменяется и операция Р не
завершается до тех пор, пока с помощью операции V значение S не станет
больше нуля.
Операция Vувеличивает значение семафора на единицу, т. е. ставит еще
один процесс в очередь к ресурсу. В реализации семафоров необходимо
предусмотреть, чтобы операция К инициировала завершение одной из
прерванных Р операций (если они есть) перед этим же семафором.
Если выполняется операция Р над семафором S (обозначим ее P(S) и
значение 5 = 0, то этот процесс может завершиться, только если некоторый
другой процесс (обязательно другой!) с помощью операции V над тем же
семафором S (обозначим ее V(S) изменит значение S и сделает его больше
0.
Важно подчеркнуть, что операции Р и V являются неделимыми. Это означает,
что выполнение операций Р и Уне может быть прервано до их окончания, а
доступ к семафору S может быть осуществлен только посредством этих
операций.
Механизм семафоров универсален и обеспечивает взаимодействие любых
процессов, хотя он и не свободен от недостатков.
Распространенной конструкцией, в которой используется механизм
семафоров, является аппарат событий. Переменные типа "событие" во многих
реализациях являются аналогом переменной типа "семафор". Для работы с
переменными типа "событие" вводятся операторы "объявить событие" и
"ждать событие". Оператор "объявить событие" - аналог операции K(S). Он
часто имеет вид POST X или SIGNAL X, где А" - переменная типа "событие".
Оператор "ждать событие" - аналог оператора P(S) и обычно имеет вид WAIT
X. Оператор типа WAIT X в зависимости от того, произошло или нет
событие, задерживает выполнение процесса. Оператор типа POST X отмечает,
что событие произошло, и по заданной дисциплине (они могут быть очень
разнообразны) позволяет выполняться задержанным процессам.
Необходимо отметить, что в реализации дисциплины допуска процессов к
ресурсам операторы POST и WAIT могут сильно отличаться от класси-
ческого семафора, описанного выше. Так, например, операция POST может
допустить к ресурсу одновременно все процессы, поставленные к нему в
очередь операцией WAIT.