II. Очереди сообщений. - раздел Менеджмент, Управление ресурсами в ОС UNIX Для Обеспечения Возможности Обмена Сообщениями Между Процессами Механизм Очер...
Для обеспечения возможности обмена сообщениями между процессами механизм очередей поддерживается следующими системными вызовами:
msgget() для образования новой очереди сообщений или получения дескриптора существующей очереди;
msgsnd() для постановки сообщения в указанную очередь сообщений;
msgrcv() для выборки сообщения из очереди сообщений;
msgctl() для выполнения ряда управляющих действий
Прототипы перечисленных системных вызовов описаны в файлах
#include <sys/ipc.h>
#include <sys/msg.h>
По системному вызову msgget() в ответ на ключ (key) и набор флагов (полностью аналогичны флагам в системном вызове semget()) ядро либо создает новую очередь сообщений и возвращает пользователю идентификатор созданной очереди, либо находит элемент таблицы очередей сообщений, содержащий указанный ключ, и возвращает соответствующий идентификатор очереди:
int msgqid = msgget(key_t key, int flag).
Для помещения сообщения в очередь служит системный вызов msgsnd():
int msgsnd (int msgqid, void *msg, size_t size, int flag),
где msg - это указатель на структуру длиной size, содержащую определяемый пользователем целочисленный тип сообщения и символьный массив-сообщение.
Структура msg имеет вид:
struct msg {
long mtype; /* тип сообщения */
char mtext[SOMEVALUE]; /* текст сообщения (SOMEVALUE - любое */};
Параметр flag определяет действия ядра при выходе за пределы допустимых размеров внутренней буферной памяти (флаг IPC_NOWAIT со значением, рассмотренным выше).
Условиями успешной постановки сообщения в очередь являются:
наличие прав процесса по записи в данную очередь сообщений;
не превышение длиной сообщения заданного системой верхнего предела;
положительное значение указанного в сообщении типа сообщения.
Если же оказывается, что новое сообщение невозможно буферизовать в ядре по причине превышения верхнего предела суммарной длины сообщений, находящихся в данной очереди сообщений (флаг IPC_NOWAIT при этом отсутствует), то обратившийся процесс откладывается (усыпляется) до тех пор, пока очередь сообщений не разгрузится процессами, ожидающими получения сообщений.
Для приема сообщения используется системный вызов msgrcv():
int msgrcv (int msgqid, void *msg, size_t size, long msg_type, int flag);
Системный вызов msgctl()
int msgctl (int msgqid, int command, struct msqid_ds *msg_stat)
используется
для опроса состояния описателя очереди сообщений (command = IPC_STAT) и помещения его в структуру msg_stat (детали опускаем);
изменения его состояния (command = IPC_SET), например, изменения прав доступа к очереди;
для уничтожения указанной очереди сообщений (command = IPC_RMID).
Управление ресурсами в ОС UNIX... ВВЕДЕНИЕ... Одной из задач любой операционной системы ОС является поддержание надежного и эффективного механизма управления...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ:
II. Очереди сообщений.
Что будем делать с полученным материалом:
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Методические указания к лабораторной работе
Обычно в ОС 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) включает:
средства, обеспечивающие возможность синхронизации процессов при доступе к совместно используемым ресурсам (семафоры -
I. Семафоры.
Для работы с семафорами поддерживаются три системных вызова:
semget() для создания и получения доступа к набору семафоров; semop() для манипулирования значениями семафоров
Адресация и создание сокета
Совокупная информация об адресе, порте программы-адресата (абонента), модели соединения, протоколе взаимодействия составляет т.н. сокет (конечная абонентская точка), формально представляющий собой
Связывание
Системный вызов bind() связывает сетевой адрес компьютера с идентификатором сокета.
#include<sys/types.h>
#include<sys/socket.h&
Прием запроса на установку TCP-соединения
Когда сервер получает от клиента запрос на соединение, он создает новый сокет для работы с новым соединением. Первый же сокет используется только для установки соединения. Дополнительный сокет для
Подключение клиента
Для выполнения запроса на подключение к серверному процессу клиент использует системный вызов connect().
#include<sys/types.h>
#inc
Пересылка данных
Для сокетов типа SOCK_STREAM дескрипторы сокетов, полученные сервером посредством вызова accept() и клиентом с помощью вызова socked(), могут испо
Хотите получать на электронную почту самые свежие новости?
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Новости и инфо для студентов