Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операционные системы Лекция 05(Механизмы синхро...doc
Скачиваний:
7
Добавлен:
16.09.2019
Размер:
134.66 Кб
Скачать

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. семафоры

  2. мониторы

  3. рандеву

  4. программные каналы

1. Семафорные примитивы Дейкстры

Семафор – переменная специального вида, которая доступна параллельным процессам для проведения только двух операций

P (от голанд. Proberen(проверить) – закрытие семафора

V (от голанд. Verboten(увеличить) – открытие семафора

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

Такой способ поддержки целостности Р и V операций реализуется аппаратно.

Семафорные операции:

1. P(s)(закрытие семафора):

if S>0 S=S-1 и переход к следующей после примитива операции

if S=0 then {остановить процесс и поместить его в очередь ожидания к семафору S}