3. Проверка и установка (test&set).
Синхронизация процессов посредством операции «ПРОВЕРКА И УСТАНОВКА»
Операция «ПРОВЕРКА И УСТАНОВКА» является, как и блокировка памяти, одним из аппаратных средств решения задачи критического интервала.
Данная операция реализована на многих компьютерах. Так, в IBM 360 (370) эта команда называлась TS (test and set).
Команда TS является аппаратно-поддерживаемой составной командой.
Команда TS является неделимой операцией, то есть между ее началом и концом не могут выполняться никакие другие команды.
F(D) – блокирующая переменная ресурса D (0- свободен, 1 – занят)
Выполнение команды:
Перед входом в критический интервал процесс выполняет команду TS:
1. Циклически проверяется F(D)=0 (TEST)
2. Если F(D)=0 то F(D)=1 (SET)
3. Процесс входит в критическую секцию
4. После выполнения критической секции F(D)=0
Блокирующие переменные могут использоваться не только при доступе к разделяемым данным, но и при доступе к разделяемым ресурсам любого вида.
Если все процессы выполняют вышеописанные соглашения, то взаимное исключение гарантируется. При этом процессы могут быть прерваны операционной системой в любой момент и в любом месте, в том числе в критическом интервале.
Нельзя прерывать процесс только между выполнением операций проверки и установки блокирующей переменной.
Пусть в результате проверки переменной процесс определил, что ресурс свободен, но сразу после этого, не успев установить переменную в 0, был прерван.
За время его приостановки другой поток занял ресурс, вошел в свой критический интервал, но также был прерван, не завершив работы с разделяемым ресурсом. Когда управление было возвращено первому процессу, он, считая ресурс свободным, установил признак занятости и начал выполнять свой критический интервал.
Таким образом, был нарушен принцип взаимного исключения, что потенциально может привести к нежелательным последствиям.
Во избежание таких ситуаций в системе команд многих компьютеров предусмотрена единая, неделимая команда анализа и присвоения значения логической переменной (например, команды BТС, STR и BTS процессора Pentium),
При отсутствии такой команды в процессоре соответствующие действия должны реализовываться специальными системными примитивами, которые бы запрещали прерывания на протяжении всей операции проверки и установки.
Программная реализация взаимоисключений
семафоры
мониторы
рандеву
программные каналы
1. Семафорные примитивы Дейкстры
Семафор – переменная специального вида, которая доступна параллельным процессам для проведения только двух операций
P (от голанд. Proberen(проверить) – закрытие семафора
V (от голанд. Verboten(увеличить) – открытие семафора
Обращение к семафору и изменение его состояния осуществляется с помощью единого механизма, реализуемого одной непрерываемой командой.
Такой способ поддержки целостности Р и V операций реализуется аппаратно.
Семафорные операции:
1. P(s)(закрытие семафора):
if S>0 S=S-1 и переход к следующей после примитива операции
if S=0 then {остановить процесс и поместить его в очередь ожидания к семафору S}