Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СППО.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
337.92 Кб
Скачать

Взаимные исключения

Проблема взаимного исключения состоит в обеспечении доступа к неразделяемым ресурсам только одному процессу в некоторый момент времени. Взаимное исключение в коммуникации процессов эквивалентно взаимному исключению в выполнении критических секций.

Синхронизация

Процессы запускаются асинхронно по отношению друг к другу. Скорость одного процесса по отношению к другому непредсказуема, так как она зависит от частоты прерываний каждого процесса и от кванта процессорного времени, выделяемому процессу. Для достижения успешного взаимодействия процессы должны синхронизировать свои действия. ОС ответственна за обеспечение механизмов, посредством которых достигается синхронизация.

Блокировка

Когда несколько процессов соревнуются за использование ресурсов, может возникнуть ситуация, когда ни один из процессов не может продолжиться из-за того, что ресурсы, требуемые одному, заняты другим. Эта ситуация называется блокировкой. Избежание блокировки, или ограничение их действия также ответственна ОС.

Семафоры

Концепция концепция семафоров введена Эдсгером Вибе Дейкстрой ( Edsger WybeDijkstra) в 1965 году.

Определение 5: Семафор – это переменная целого типа, имеющая неотрицательное значение, изменять которое могут только операторы wait и signal.

Определение 6: Семафор называется двоичным семафором, если его максимальное значение равно единице.

Двоичные семафоры принято называть мьютекс (mutex – от MUTual Exclusion, взаимное исключение). Операции над мьютексом называются захватом (acquire) (соответствует входу в критическую секцию) и освобождением (release) (соответствует выходу из нее).

Действие операторов wait и signal

Действие операторов wait и signal следующее:

wait(s) : when s>0 do dec(s)

signal(s): inc(s)

где s - любой семафор.

Операторы wait и signal являются неделимыми. Неделимость операторов означает, что в каждый момент времени только один процесс может выполнять оператор wait или signal над данным семафором.

Текущее значение семафора s зависит от его начального значения и разности числа выполненных над ним операторов signal и wait.

val(s)=C(s)+ns(s)-nw(s), где:

  • val(s) - значение семафора s;

  • C(s) -начальное значение семафора s;

  • ns(s) - число выполненных операторов signal на семафоре s;

  • nw(s) - число успешно выполненных операторов wait на семафоре s.

Но по определению val(s)>=0, следовательно, мы достигаем важного соотношения:

nw(s)<= ns(s)+C(s), в котором равенство выполняется тогда и только тогда, когда val(s)=0.

Оператор wait влечет задержку выполнения процесса, когда он действует на семафор со значением «0». Процесс сможет выполнить этот оператор только тогда, когда другой процесс увеличит значение семафора на «1» посредством оператора signal. Неделимость операторов означает, что если несколько процессов задерживаются, то только один из них может успешно завершить операцию, если значение семафора стало положительным. При этом не делается никаких предположений о том, какой это будет процесс.

Взаимные исключения

Взаимное исключение процессов достигается заключением критических секции, обеспечивающих доступ к критическому ресурсу в операторы wait и signal, действующих на один семафор:

wait (mutex);

критическая секция

signal (mutex);

где mutex - имя семафора.

Если до входа в критическую секцию значение семафора val(mutex)= 1, то исключение гарантировано, т.к. в этом случае не более одного процесса могут выполнить оператор wait (mutex) и перейти к выполнению критической секции.

Критерием нахождения процесса внутри критической секции является следующее равенство:

nw(mutex)=ns(mutex)+1,

т.е. число успешных операторов wait на семафор mutex на «1» превышает число выполненных операторов signal.

Для организации взаимных исключений, как правило, используются двоичные семафоры с начальным значением равным «1».

Пример. Предположим, что ОС содержит два процесса A и B, которые соответственно добавляют и удаляют элемент из очереди. Чтобы указатели очереди не стали перепутанными может быть необходимо ограничить доступ к очереди до одного процесса одновременно. Таким образом добавление и удаление элементов могли быть представлены как критические секции.

Program for Process A

Program for Process B





wait(mutex);

wait(mutex);

add элемент в очередь

remove элемент из очереди

signal(mutex);

signal(mutex);





Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]