
ОС / 4. ОС - Управление процессами - 1
.pdf
41
Целочисленные семафоры
Значения переменной S: от 0 до N.
Операция P(S, k): процесс ожидает, когда значение S будет не менее k, после чего S := S – k.
Операция V(S, k): S := S + k.
Назначение целочисленных семафоров: управление распределением ресурса, имеющегося в ограниченном количестве (N единиц).
Операционные системы. Управление процессами - 1

42
Операции множественного ожидания
Первый вариант:
P’(S1, S2, … Sn) – процесс ожидает момента, когда любая Si = 1, после этого присваивает Si = 0. Используется, например, в процессах типа сервера, ожидающего запроса от любого клиента.
Второй вариант:
P”(S1, S2, … Sn) – процесс ожидает момента, когда все Si = 1, после этого присваивает все Si = 0. Используется для синхронизации нескольких параллельных ветвей алгоритма.
Операционные системы. Управление процессами - 1

43
Другие средства взаимодействия процессов
Событие – это переменная (E), которая:
принимает значения 0 (нет события) и 1 (есть событие); допускает выполнение неделимых операций:
Ждать(E): текущий процесс ожидает, пока не станет E = 1, при этом:
для события с автосбросом: E := 0;
для события с ручным сбросом: E не изменяется;
Установить(E): E := 1.
Сбросить(E): E := 0.
Различия между событием и мьютексом:
Для мьютекса нет операции Сбросить(E).
Освободить мьютекс может только то же процесс, который его занял; для события нет понятия «занять», поэтому разные процессы могут устанавливать, сбрасывать, ждать события в любом порядке.
Операционные системы. Управление процессами - 1

44
Другие средства взаимодействия процессов
Сигнал – посылается процессу системой или другим процессом.
С сигналом не связано никакой информации, кроме номера (типа сигнала) и адресата.
При получении сигнала процесс прерывает свою текущую работу и выполняет функциюобработчик сигналов данного типа.
Таким образом, сигналы похожи на прерывания, но только высокоуровневые, управляемые системой, а не аппаратурой.
В UNIX сигналы – традиционное средство решения проблем синхронизации, в том числе и взаимного исключения.
Сообщения – отличаются от сигналов:
могут содержать дополнительную информацию;
не прерывают работу процесса, а становятся в очередь к процессу;
широко используются в ОС Windows.
Операционные системы. Управление процессами - 1

45
Средства обмена данными
Общая память – выделенная область памяти, доступная двум или более процессам.
Программные каналы (pipelines) – позволяет использовать файловые функции чтения/записи (один процесс пишет данные в канал, другой читает из канала).
Очереди сообщений – см. выше.
Эти средства, вообще говоря, не решают проблему синхронизации процессов, поэтому в дополнение к ним может потребоваться использование ранее описанных средств синхронизации (мьютексов, событий и т.п.)
Операционные системы. Управление процессами - 1

46
Задача «Поставщик / Потребитель»
Имеется буфер из N мест для хранения очереди "единиц продукции", ожидающих обработки.
Процесс-поставщик добавляет единицы в очередь (или ожидает, если в буфере нет места).
Процесс-потребитель забирает единицы из очереди (или ожидает, если буфер пуст).
Необходимо исключить одновременное обращение обоих процессов к буферу, поскольку это может привести к ошибке.
Операционные системы. Управление процессами - 1

47
Решение с помощью мьютекса и двух счетчиков
Используются переменные:
S – мьютекс для взаимного исключения;
C1 – счетчик свободных мест в буфере (первоначально равен N); C2 – счетчик занятых мест в буфере (первоначально равен 0);
Процесс-поставщик: Процесс-потребитель:
. . . . .
while (C1 = 0) do
;
C1 := C1 – 1;
P(S);
{Поместить единицу в буфер}
V(S);
C2 := C2 + 1;
. . . . .
. . . . .
while (C2 = 0) do
;
C2 := C2 – 1;
P(S);
{Взять единицу из буфера}
V(S);
C1 := C1 + 1;
. . . . .
Операционные системы. Управление процессами - 1

48
Недостатки предыдущего решения
Используется активное ожидание ненулевых значений C1 и C2;
Решение корректно в случае одного поставщика и одного потребителя, но возможны неприятности в случае нескольких поставщиков (или нескольких потребителей), претендующих на одно и то же место в буфере.
Операционные системы. Управление процессами - 1

49
Решение с помощью трех семафоров
Используются семафоры:
S – мьютекс для взаимного исключения;
S1 – целочисленный семафор свободных мест в буфере (= N); S2 – целочисленный семафор занятых мест в буфере (= 0);
Процесс-поставщик: |
Процесс-потребитель: |
. . . . . |
. . . . . |
P(S1, 1); |
P(S2, 1); |
P(S); |
P(S); |
{Поместить единицу |
{Взять единицу из |
в буфер} |
буфера} |
V(S); |
V(S); |
V(S2, 1); |
V(S1, 1); |
. . . . . |
. . . . . |
Порядок операций P важен, при перестановке операций есть опасность, что процессы могут взаимно заблокировать друг друга.
Операционные системы. Управление процессами - 1

50
Задача «Читатели / Писатели»
Имеется файл (или база данных), находящийся в совместном пользовании нескольких процессов.
Процессы делятся на «читателей», которые посылают запросы только на чтение данных, и «писателей», посылающих запросы на изменение данных.
Порядок запросов и время их поступления произвольны.
Одновременно с процессом может работать либо любое число «читателей», либо только один «писатель».
Операционные системы. Управление процессами - 1