ВУЗ:
Составители:
procedure П2;
var второму_входить_нельзя: логический;
begin
while истина do
begin
второму_входить_нельзя:=истина;
while второму_входить_нельзя do
testandset(второму_входить_нельзя, активный);
Критический участок процесса П2;
активный:=ложь;
Прочие операторы процесса П2;
end;
end;
{ Основной процесс }
begin
активный:=ложь;
П1; { запуск процесса П1 }
П2; { запуск процесса П2 }
end;
Рис. 3.4. Реализация взаимоисключения с применением команды
проверить_и_установить
Неделимая команда с двумя операндами testandset(a, b) читает значения логической переменной b, копирует его в a, а
затем устанавливает для
b значение истины, и все это в рамках одной непрерывной операции.
3.4.2.5. СЕМАФОРЫ
Семафор – это защищенная переменная, значение которой можно опрашивать и изменять только при помощи операции
инициализация_семафора
и двух специальных операций P и V:
• операция P над семафором S записывается как P(S) и выполняется по правилам:
если S > 0 то S: = S–1 иначе (ожидать на S);
• операция V над семафором S записывается как V(S) и выполняется по правилам:
если (один или более процессов ожидают на S) то (разрешить одному из процессов продолжить работу) иначе S: = S+1.
program Пример_семафора;
var активный: семафор;
procedure П1;
begin
while истина do
begin
Предшествующие операторы процесса П1;
Р(активный);
Критический участок процесса П1
V(активный);
Прочие операторы процесса П1;
end;
end;
procedure П2;
begin
while истина do
begin
Предшествующие операторы процесса П2;
Р(активный);
Критический участок процесса П2
V(активный);
Прочие операторы процесса П2;
end;
end;
{ Основной процесс }
begin
инициализация_семафора
(активный, 1);
П1;
П2;
end;
Рис. 3.5. Обеспечение взаимоисключения с помощью семафора
Различают два вида семафоров: двоичные семафоры, у которых S может принимать значения 0 и 1, и считающие сема-
форы, где S может принимать неотрицательные целые значения.
Подобно операции
проверить_и_установить, операции инициализация_семафора, P(S) и V(S) являются неделимыми.
Участки взаимоисключения по семафору S обрамляются операциями P(S) и V(S). Если одновременно несколько процессов
попытаются выполнить операцию P(S), то только одному из них будет позволено это сделать, а остальным придется ждать.
Семафоры и операции над ними могут быть реализованы как программно (рис. 3.5), так и аппаратно. При программной
реализации они размещаются в той части ядра операционной системы, где осуществляется управление сменой состояний
процессов.
Страницы
- « первая
- ‹ предыдущая
- …
- 35
- 36
- 37
- 38
- 39
- …
- следующая ›
- последняя »
