I. Семафоры. - раздел Менеджмент, Управление ресурсами в ОС UNIX Для Работы С Семафорами Поддерживаются Три Системных Вызова:
S...
Для работы с семафорами поддерживаются три системных вызова:
semget() для создания и получения доступа к набору семафоров;
semop() для манипулирования значениями семафоров (это тот системный вызов, который позволяет процессам синхронизоваться на основе использования семафоров
semctl() для выполнения разнообразных управляющих операций над набором семафоров
Прототипы перечисленных системных вызовов описаны в файлах
#include <sys/ipc.h>
#include <sys/sem.h>
Системный вызов semget() имеет следующий синтаксис:
semid = int semget(key_t key, int count, int flag),
параметрами которого является ключ (key) набора семафоров и дополнительные флаги (flags), определенные в <sys/ipc.h>, число семафоров в наборе семафоров (count), обладающих одним и тем же ключом. Системный вызов возвращает идентификатор набора семафоров semid. После вызова semget() индивидуальный семафор идентифицируется идентификатором набора семафоров и номером семафора в этом наборе. Флаги системного вызова semget() приведены ниже в таблице.
Таблица
Флаги системного вызова semget()
IPC_CREAT
Semget создает новый семафор для данного ключа. Если флаг IPC_CREAT не задан, а набор семафоров с указанным ключом уже существует, то обращающийся процесс получит идентификатор существующего набора семафоров.
IPC_EXLC
Флаг IPC_EXLC вместе с флагом IPC_CREAT предназначен для создания (и только для создания) набора семафоров. Если набор семафоров уже существует, Semget возвратит -1, а системная переменная errno будет содержать значение EEXIST.
Младшие 9 бит флага задают права доступа к набору семафоров.
Системный вызов semctl() имеет формат
int semctl (int semid, int sem_num, int command, union semun arg),
где semid - это идентификатор набора семафоров, sem_numb - номер семафора в группе, command - код операции, а arg - указатель на структуру, содержимое которой интерпретируется по-разному, в зависимости от операции.
Структура msg имеет вид:
union semun { int val;
struct semid_ds *buf;
unsigned short *array; };
С помощью semctl() можно
уничтожить набор семафоров или индивидуальный семафор в указанной группе (IPC_RMID);
вернуть значение отдельного семафора (GETVAL) или всех семафоров (GETALL);
установить значение отдельного семафора (SETVAL) или всех семафоров (SETALL);
вернуть число семафоров в наборе семафоров (GETPID).
Основным системным вызовом для манипулирования семафором является
int semop (int semid, struct sembuf *op_array, count),
где semid - это ранее полученный дескриптор группы семафоров, op_array - массив структур sembuf, определенных в файле <sys/sem.h.h> и содержащих описания операций над семафорами группы, а count - размер этого массива. Значение, возвращаемое системным вызовом, является значением последнего обработанного семафора. Каждый элемент массива op_array имеет следующую структуру (структура sembuf):
номер семафора в указанном наборе семафоров
операция над семафором;
флаги.
Если указанные в массиве op_array номера семафоров не выходят за пределы общего размера набора семафоров, то системный вызов последовательно меняет значение семафора (если это возможно) в соответствии со значением поля "операция". Возможны три случая:
1. Отрицательное значение sem_op.
Если значение поля операции sem_op отрицательно, и его абсолютное значение меньше или равно значению семафора semval, то ядро прибавляет это отрицательное значение к значению семафора.
Если в результате значение семафора стало нулевым, то ядро активизирует все процессы, ожидающие нулевого значения этого семафора.
Если же значение поля операции sem_op по абсолютной величине больше семафора semval, то ядро увеличивает на единицу число процессов, ожидающих увеличения значения семафора и усыпляет текущий процесс до наступления этого события.
2. Положительное значение sem_op.
Если значение поля операции sem_op положительно, то оно прибавляется к значению семафора semval, а все процессы, ожидающие увеличения значения семафора, активизируются (пробуждаются в терминологии UNIX).
3. Нулевое значение sem_op.
Если значение поля операции sem_op равно нулю, то если значение семафора semval также равно нулю, выбирается следующий элемент массива op_array.
Если же значение семафора semval отлично от нуля, то ядро увеличивает на единицу число процессов, ожидающих нулевого значения семафора, а обратившийся процесс переводится в состояние ожидания
При использовании флага IPC_NOWAIT ядро ОС UNIX не блокирует текущий процесс, а лишь сообщает в ответных параметрах о возникновении ситуации, приведшей бы к блокированию процесса при отсутствии флага IPC_NOWAIT.
Управление ресурсами в ОС UNIX... ВВЕДЕНИЕ... Одной из задач любой операционной системы ОС является поддержание надежного и эффективного механизма управления...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ:
I. Семафоры.
Что будем делать с полученным материалом:
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Методические указания к лабораторной работе
Обычно в ОС UNIX доступны несколько интерпретаторов. Наиболее распространены Bourne-shell (или просто - shell), C-shell, Korn-shell. В идейном плане все эти интерпретаторы близки и в дальнейшем реч
Контpольные вопpосы
21. Что такое внутренние и внешние команды Shell-интерпретатора? Приведите примеры внутренних команд.
22. Какие существуют средства группирования команд? Приведите примеры использования.
Методические указания к лабораторной работе
Интерфейс между пользовательской программой и внешним устройством (или между двумя пользовательскими программами) в ОС UNIX осуществляется в рамках единой структуры данных, называемой файлом ОС UNI
Функции для работы с файловой системой
Возвращают дескриптор файла
Преобразуют имя в описатель
Назначают inode
Работают с атрибутами
Ввод/вывод из файла
Методические указания к лабораторной работе
Основным назначением системы управления вводом-выводом ОС UNIX является создание интерфейса между программой и внешним усройством компьютера. Поскольку любая операция ввода-вывода осуществляется ка
Контpольные вопpосы
1. Какова структура описателей файлов, таблицы файлов, таблицы открытых файлов процесса?
2. Какова цепочка соответствия дескриптора файла, открытого процессом, и файлом на диске?
Методические указания к лабораторной работе
Для порождения нового процесса (процесс-потомок) используется системный вызов fork(). Формат вызова:
int fork()
Порожденный таким образом процесс представляет собой точную копию с
Методические указания к лабораторной работе
В предыдущей лабораторной работе были рассмотрены различные программные средства, связанные с созданием и управлением процессами в рамках ОС UNIX. Данная лабораторная работа предполагает комплексно
Методические указания к лабораторной работе
При выполнении операции перенаправления ввода-вывода важным моментом является наследование пользовательских дескрипторов, осуществляемое с помощью системных вызовов dup() и fcntl().
Систем
Методические указания к лабораторной работе
Механизм IPC (Inter-Process Communication Facilities) включает:
средства, обеспечивающие возможность синхронизации процессов при доступе к совместно используемым ресурсам (семафоры -
II. Очереди сообщений.
Для обеспечения возможности обмена сообщениями между процессами механизм очередей поддерживается следующими системными вызовами:
msgget() для образования новой очереди сообщений или
Адресация и создание сокета
Совокупная информация об адресе, порте программы-адресата (абонента), модели соединения, протоколе взаимодействия составляет т.н. сокет (конечная абонентская точка), формально представляющий собой
Связывание
Системный вызов bind() связывает сетевой адрес компьютера с идентификатором сокета.
#include<sys/types.h>
#include<sys/socket.h&
Прием запроса на установку TCP-соединения
Когда сервер получает от клиента запрос на соединение, он создает новый сокет для работы с новым соединением. Первый же сокет используется только для установки соединения. Дополнительный сокет для
Подключение клиента
Для выполнения запроса на подключение к серверному процессу клиент использует системный вызов connect().
#include<sys/types.h>
#inc
Пересылка данных
Для сокетов типа SOCK_STREAM дескрипторы сокетов, полученные сервером посредством вызова accept() и клиентом с помощью вызова socked(), могут испо
Хотите получать на электронную почту самые свежие новости?
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Новости и инфо для студентов