Механизмы синхронизации. Использование механизма прерываний

Как правило в составе команд процессора,поддерживающего работу с прерываниями, имеются специальные команды, позволяющие заблокировать или разблокировать реакцию на возможные прерывания.

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

Такое решение не эффективно, т. к. всё сводится к однозадачному решению.

Указанного недостатка лишена двуступенчатая схема.

Механизмы синхронизации. Двухступенчатая схема

Критическому ресурсу ставится в соответствие специальная переменная, характеризующая его состояния (занят или свободен). Соответственно предполагается, что перед началом исходный процесс должен проверить состояние переменной. Если ресурс свободен — отметить занятость ресурса, а после использование — его освобождение..

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

В этом случае можно эффективно использовать механизм блокировки прерывания. Работа вспомогательной переменной может проходить в режиме с заблокированным прерыванием. Поскольку переменное состояние является универсальным средством не зависящем от вида ресурса, то работа с ним может быть реализована как ф-ция ОС.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: