Статья: Механизмы межпроцессных взаимодействий в операционной системе Unix

индивидуальный семафор идентифицируется дескриптором набора семафоров и номером семафора в наборе

если набор семафоров с указанным ключом уже существует, то число семафоров в группе можно узнать с помощью системного вызова semctl

oldval = semop(id, oplist, count);

id - дескриптор группы семафоров

oplist - массив описателей операций над семафорами группы

count - размер этого массива

возвращается значение последнего обработанного семафора

Элемент массива oplist:

номер семафора в указанном наборе семафоров

операция

флаги

Если проверка прав доступа проходит нормально

указанные в массиве oplist номера семафоров не выходят за пределы общего размера набора семафоров

для каждого элемента массива oplist значение семафора изменяется в соответствии со значением поля "операция"

Значение поля операции положительно

значение семафора увеличивается на единицу

все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются)

Значение поля операции равно нулю

если значение семафора равно нулю, выбирается следующий элемент массива oplist

иначе число процессов, ожидающих нулевого значения семафора, увеличивается на единицу

обратившийся процесс переводится в состояние ожидания (усыпляется)

Значение поля операции отрицательно

(1) его абсолютное значение меньше или равно значению семафора

это отрицательное значение прибавляется к значению семафора

если значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора

(2) значение семафора меньше абсолютной величины поля операции

число процессов, ожидающих увеличения значения семафора увеличивается на единицу

текущий процесс откладывается

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

К-во Просмотров: 369
Бесплатно скачать Статья: Механизмы межпроцессных взаимодействий в операционной системе Unix