Семафоры
Семафоры - переменные для подсчета сигналов запуска, сохраненных на будущее.
Были предложены две операции down и up (аналоги sleep и wakeup).
Прежде чем заблокировать процесс, down проверяет семафор, если он равен нулю, то он блокирует процесс, если нет, то процесс снова становится активным, и уменьшает семафор на единицу.
up увеличит значение семафора на 1 или разблокирует процесс находящийся в ожидании..
downуменьшает значение семафора на 1 или блокирует процесс, если семафор =0.
down и up выполняются как элементарное действие, т.е. процесс не может быть блокирован во время выполнения этих операций. Значит, у операционной системы должен быть запрет на все прерывания, и перевод процесса в режим ожидания.
Решение проблемы переполненного буфера с помощью семафора
Применим три семафора:
full - подсчет заполненных сегментов (в начале = 0)
empty - подсчет пустых сегментов (в начале = количеству сегментов)
mutex - для исключения одновременного доступа к буферу двух процессов. (в начале = 1)
Мьютекс упрощенная версия семафора, он управляет доступом к ресурсу. Показывает, блокирован или нет ресурс.
Решение проблемы переполненного буфера с помощью семафора
Применение семафоров для устройств ввода/вывода
Для устройств ввода/вывода семафор выставляется равный нулю. После запуска управляющего процесса выполняется down, и т.к. семафор равен нулю, процесс блокируется. Когда нужно активизировать процесс управления, выполняется up.
Дата добавления: 2014-12-21; просмотров: 943;