Семафоры в ОС Unix

Прежде отметим, что в стандарте POSIX семафоры полностью аналогичны семафорам Дейкстры. Для инициализации значения таких семафоров применяется функция sem_init(), аналогом операции служит функция sem_wait(), а аналогом операции – функция sem_post().

В современных операционных системах Unix набор операций над семафорами отличается от классического набора операций Дейкстры. Этот набор включает в себя три операции:

· (, ) – увеличить значение семафора на величину ;

· (, ) – пока значение семафора <, процесс блокируется; в противном случае выполняется присваивание =-;

· () – процесс блокируется до тех пор, пока значение семафора не станет равным 0.

Изначально все семафоры инициируются нулевым значением.

Легко видеть, что операции Дейкстры () соответствует операция (,1), а операции () - операция (,1).

Системный вызов semget(key, nsems, semflag) обеспечивает создание набора семафоров. Здесь параметр key можно интерпретировать как имя набора семафоров, nsems – количество семафоров в наборе, параметр semflag определяет, главным образом, права различных пользователей при доступе к данному набору семафоров.

Системный вызов semop(). Системный вызов semop() обладает довольно сложной семантикой и используется для выполнения рассмотренных выше операций A, D и Z над семафорами из заданного набора семафоров.

Системный вызов semctl() используется для получения информации о наборе семафоров, изменения его атрибутов, а также для удаления из системы набора семафоров после завершения использовавших этот набор процессов.


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



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