Для организации взаимодействия вычислительных процессов необходим механизм их синхронизации. Та область процесса, в которой происходит непосредственное обращение к критическому ресурсу, называется критической секцией (или интервалом).
Таким образом, говоря о синхронизации процессов, имеется в виду синхронизация критических секций.
К синхронизации критических секций выдвигаются следующие требования:
В любой момент времени только один процесс может находиться в своей критической секции.
Ни один процесс не может находиться в своей критической секции бесконечно долгое время.
Если процесс, находящийся в своей критической секции завершился нормально или аварийно любые другие процессы должны получить возможность входа в свою секцию.
Ни один процесс не должен ждать бесконечно долго входа в свою критическую секцию. При этом никакой процесс, находящийся в вне своей критической секции возможно бесконечно долго, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции.
ПР1 ПР2
Простейшим способом синхронизации может быть использование общего типа переменной, служащей указателем свободен критический ресурс или нет. Каждый раз, когда какой-то процесс первым занимает критический ресурс, он устанавливает указатель в состояние «занято». В результате никакой другой процесс не может обратиться к этому ресурсу.
Когда процесс, захвативший ресурс выходит из своей критической секции он устанавливает указатель в состояние «свободен», разрешая процессам использовать ресурс.
+ Простота
- изменение указателя должно выполнятся самим процессом.
Если по какой-то причине процесс закончился аварийно, то другие процессы могут бесконечно долго ждать. Этот механизм в настоящее время используется редко.
Более широко используется механизм светофоров.
Светофоры (семафоры)
Светофор - переменная специального типа, которая доступна параллельным
процессам для проведения над ней только двух операций: открытия и закрытия (P и V).
Для работы с семафорами необходима его инициализация, осуществляемая с помощью системного вызова (имя_свет, начал_знач_перемен.)
Смысл операции P., закрытия светофора, заключается в том, чтобы проверить текущее значение светофора. Если оно неотрицательное, то осуществляется переход к следующей операции, стоящей за операцией Р и при этом значение семафора уменьшается на 1 (-1).
Операция V заключается в том, что значение семафора увеличивается на 1 (+1) при этом один или несколько процессов претендующих на ресурс устанавливается в состояние готовности.
InitSem (S,0) тогда структура:
ПР1: begin ПР2: begin
P(S) P(S)
CS1 CS2
V(S) V(S)
End End
Семафоры получили очень широкое распространение в ОС нашего времени.
В основном различаются: по количеству допустимых светофоров; по диапазону начальных значений, а также по процедурам исполнения операций открытия-закрытия.
Даже для одного критического ресурса можно устанавливать несколько семафоров.
Характерная особенность: при задании семафоров фактически не определяется критический ресурс.