Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы по ОС.doc
Скачиваний:
50
Добавлен:
24.09.2019
Размер:
202.24 Кб
Скачать

15)Параметры функции msgctl.

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

Значение аргумента msgfd берется из вызова функции msgget.

Ниже перечислены возможные значения аргумента cmd и их смысл.

В случае успешного выполнения возвращается 0, в случае неудачи -1.

16)Семафоры. Последовательность системных вызовов.

Семафо́р — объект, позволяющий войти в заданный участок кода не более чем n потокам. Семафоры используются при передаче данных через разделяемую память.

Семафоры лучше всего предствлять себе как счетчики, управляющие

доступом к общим ресурсам. Чаще всего они используются как блокирующий

механизм, не позволяющий одному процессу захватить ресурс, пока этим

ресурсом пользуется другой. Семафоры часто подаются как наиболее

трудные для восприятия из всех трех видов IPC-объектов. Для полного

понимания, что же такое семафор, мы их немного пообсуждаем, прежде чем

переходить к системным вызовам и операционной теории.

Слово семафор в действительности является старым

железнодорожным термином, соответствующим "рукам", не дающим

траекториям каров пересекаться на перекрестках. То же самое можно сказать и

про семафоры. Семафор в положении ON (руки пондяты вверх) если

ресурс свободен и в положении OFF (руки опущены) если ресурс

недоступен (надо ждать).

Для работы с семафорами определены следующие функции: semget, semop, semctl.

Значение sem_op

Смысл

Положительное число

Увеличить значение указанного семафора на эту величину

Отрицательное число

Уменьшить значение указанного семафора на эту величину

0

Проверять равенство значения семафора нулю


17)Параметры функции semget.

Прототип функции semget имеет следующий вид:

#include <sys/types.h>

#include <sys/ipc.h>

#include <sys/sem.h>

int semget (key_t key, int пит_sem, int flag);

Эта функция "открывает" набор семафоров, идентификатор которого задан значением аргумента key, и возвращает неотрицательный целочисленный дескриптор. Его можно использовать в других вызовах семафоров для запроса я

изменения значения семафора, а также для запроса и/или установки управляющих параметров набора семафоров.

Если значение аргумента key — положительное целое, рассматриваемый вызов пробует открыта набор семафоров, ключевой идентификатор которого совпадает с указанным значением. Если же значением key является макрос IPC_PRIVATE, вызов создает новый набор семафоров, который будет использоваться исключительно вызывающим процессом. Такие "частные" семафоры обычно выделяются родительским процессом, создающим затем один или несколько порожденных процессов. Родительский и порожденные процессы пользуются этими семафорами для синхронизации своей работы.

При нулевом значений аргумента flag вызов прерывает свою работу, если отсутствует набор семафоров, ключевой идентификатор которого совпадал бы с заданным значением key; в противном случае возвращается дескриптор этого

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

IРС_СREAT и числовых значений прав доступа к новому набору для чтения и записи.

Значение num_sem может быть равно нулю, если флаг IPC_CREAT в аргументе flag не указан, или числу семафоров во вновь создаваемом наборе.

Для гарантированного создания нового набора семафоров можно указать одновременно с флагом IPC_CREAT флаг IPC_EXCL. Тогда вызов будет успешно выполнен только в том случае, если он создаст новый набор с заданным значением

В случае неудачи этот вызов возвращает -1.