- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •2.Системные вызовы
- •3.Примеры
- •2 Билет.
- •1.Управление процессами
- •2. Сигналы.
- •3 Билет
- •1.Обработка Сигнала
- •2) Группы процессов
- •3)Примеры
- •4 Билет
- •1)Посылка сигналов процессами
- •2)Межпроцессные комуникации
- •3)Примеры в качестве примера можно привести программу ,которая принимает сигналы о прерывании (sigint) и сама посылает их (в результате выполнения функции kill
- •5 Билет.
- •6 Билет.
- •7 Билет
- •1)Атомарные (неделимые) операции с каналами
- •2)Примечания к полудуплексным каналам
- •8 Билет
- •1)Именованные каналы (fifo: First In First Out): основные понятия
- •2)Операции с fifo
- •3) Примеры
- •9 Билет
- •1) Базовые понятия System V ipc
- •2) Идентификаторы ipc
- •10 Билет
- •11 Билет
- •1)Буфер сообщения
- •13 Билет
- •1)Системный вызов msgctl
- •2)Семафоры. Основные понятия
- •1)Системный вызов semget.
- •2) Системный вызов semop.
- •15 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •16 Билет
- •1) Системный вызов shmget
- •2) Системный вызов shmctl
- •3) Примеры
- •17 Билет
- •Системный вызов shmat
- •Системный вызов shmdt
- •18 Билет
- •Системный вызов mmap
- •19 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •20 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
- •21 Билет
- •1. Закрытие сокетов.
- •22 Билет.
- •1) Алгоритмы
- •2) Оценки эффективности алгоритмов.
- •3) Примеры
- •23 Билет
- •1.Ядро операционной системы
- •2.Системные вызовы
- •3.Примеры
- •24 Билет.
- •25 Билет
- •1) Системный вызов semctl
- •2) Разделяемая память. Основные понятия.
- •3) Примеры
- •26 Билет
- •1) Группы процессов
- •2)Обработка Сигнала
- •3)Примеры
- •27 Билет
- •1) Создание сокета
- •2) Привязка к локальным именам
- •3) Примеры:
- •28 Билет.
- •29 Билет
- •1. Закрытие сокетов.
- •30 Билет
- •1)Установление связи
- •2) Передача данных
- •3) Примеры Установление связи
- •Передача данных
15 Билет
1) Системный вызов semctl
int semctl ( int semid, int semnum, int cmd, union semun arg );
Вызов semctl используется для осуществления управления множеством семафоров. Этот вызов аналогичен вызову msgtl для очередей сообщений. Если вы сравните списки аргументов этих двух вызовов, то заметите, что они немного отличаются. Напомним, что семафоры введены скорее как множества, чем как отдельные объекты. С операциями над семафорами требуется посылать не только IPC-ключ, но и конкретный семафор из множества.
Оба системных вызова используют аргумент cmd для определения команды, которая будет выполнена над IPC-объектом. Оставшаяся разница заключается в последнем аргументе. В msgctl он представляет копию внутренней структуры для получения внутренней информации об очереди сообщений либо для установки или изменения прав доступа и владения очередью. Для семафоров поддерживаются дополнительные команды, которые требуют данных более сложного типа в последнем аргументе.
Первый аргумент semctl является ключом (в нашем случае возвращаемым вызовом semget). Второй аргумент, semnum, - это номер семафора, над которым совершается операция. По существу, он может быть понят как индекс на множестве семафоров, где первый семафор представлен нулем.
Аргумент cmd представляет собой команду, которая будет выполнена над множеством. Как можно заметить, здесь снова присутствуют IPC_STAT/IPC_SET вместе с другими дополнительными командами, специфичными для множеств семафоров:
IPC_STAT – берет структуру semid_ds для множества и запоминает ее по адресу аргумента buf в объединении semun;
IPC_SET – устанавливает значение элемента ipc_perm структуры semid_ds для множества;
IPC_RMID – удаляет множества из ядра;
GETALL – используется для получения значений всех семафоров множества. Целые значения запоминаются в массиве элементов unsigned short, на который указывает член объединения array;
GETNCNT – выдает число процессов, ожидающих ресурсов в данный момент;
GETPID – возвращает PID процесса, выполнившего последний вызов semop;
GETVAL – возвращает значение одного семафора из множества;
GETZCNT – возвращает число процессов, ожидающих стопроцентного освобождения ресурса;
SETALLM – устанавливает значения семафоров множества, взятые из элемента array объединения;
SETVAL – устанавливает значение конкретного семафора множества как элемент val объединения.
Аргумент arg вызова semctl является примером объединения semun, описанного в linux/sem.h следующим образом:
/* аргумент arg для системного вызова semctl */
union semun {
int val; /* значение для SETVAL-a */
struct semid_ds *buf; /* буфер для IPC_STAT и IPC_SET */
ushort *array; /* массив для GETALL и SETALL */
struct seminfo *_ _buf; /* буфер для IPC_INFO */
void *_ _pad;
};
Оставшиеся аргументы _ _ buf и _ _pad предназначены для ядра и почти не нужны разработчику приложения. Эти два аргумента сецифичны для Linux, их нет в других системах UNIX.
