[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Семафоры

Реализация семафоров в ОС UNIX моделирует семафоры Дейкстры.
Однако, семафоры в ОС UNIX представляют собой более общий случай,
так как можно создавать набор (или массив) семафоров. Это полезно,
если программе нужно изменить значение нескольких семафоров
одновременно.
Семафоры обычно используются для обозначения доступности одного или
более ресурсов следующими способами:
.    закрытие/открытие - каждый ресурс может одновременно
использоваться только одним процессом. Процесс, требующий
использования ресурса, ждет, пока значение семафора не покажет, что
ресурс свободен. Когда процесс получает ресурс, он должен закрыть
семафор, чтобы не позволить другим процессам доступ к ресурсу.
Когда процесс освобождает ресурс, он должен открыть семафор.
   Замечание: При  создании семафор  получает по умолчанию значение
   0. Обычно  он инициализируется  в 1 уже после создания. Закрытие
   состоит в  вычитании 1  из значения  семафора, а  открытие  -  в
   добавлении 1. Можно использовать и другие арифметические схемы.

.    подсчет - процессы разделяют некоторый пул ресурсов. Например,
представьте себе компьютер с пятью магнитофонами (которые
представляют собой пул ресурсов) и процесс, выполняющий копирование
с ленты на ленту. Процессу необходимо два магнитофона и он ждет,
пока они не  освободятся. Какой-то другой процесс может освободить
один или более магнитофонов и отметить это, прибавив количество
освобожденных устройств к значению семафора. Когда процесс
копирования сможет начать выполнение, он должен будет уменьшить
значение семафора на количество ресурсов, которое он требует(в
данном случае, 2). После завершения работы, процесс делает эти
ресурсы доступными для других, увеличив семафор на число
освобожденных ресурсов. Эта схема работает, потому что процесс,
пытающийся уменьшить семафор на величину, большую, чем его текущее
значение, будет заблокирован.
Семафор может быть использован для разделения беззнакового целого
между процессами. Он не обязан быть ассоциирован с разделяемым
ресурсом.
Управление доступом к разделяемому ресурсу работает только тогда,
когда все программы выполняют соглашение о семафоре для этого
ресурса.
                             СЕМАФОРЫ
 . Разделяемое короткое беззнаковое целое значение

.    Используется для выполнения:
   блокировки: управления доступом к ресурсам

   подсчета:        разделения небольшого беззнакового значения
                    между процессами