Операционные системы. Теория и практика. Замятин А.В. - 80 стр.

UptoLike

Составители: 

80
С помощью очередей можно из одной или нескольких задач неза-
висимым образом посылать сообщения некоторой задаче-приемнику.
При этом только процесс-приемник может читать и удалять сообщения
из очереди, а процессы-клиенты имеют право лишь помещать в очередь
свои сообщения. Таким образом, очередь работает только в одном
направлении, а если необходима двухсторонняя связь, то следует со-
здать две очереди.
Очереди сообщений являются глобальными средствами коммуни-
каций для процессов ОС, как и именованные каналы, так как каждая
очередь имеет в пределах ОС уникальное имя. В ОС Unix в качестве та-
кого имени используется числовое значение так называемый ключ.
Ключ является числовым аналогом имени файла, при использовании
одного и того же значения ключа процессы будут работать с одной и той
же очередью сообщений.
Работа с очередями сообщений имеет ряд отличий от работы с ка-
налами:
1) Очереди сообщений предоставляют возможность использовать
несколько дисциплин обработки сообщений (FIFO, LIFO, приоритетный
доступ, произвольный доступ).
2) Если при чтении сообщения оно удаляется из конвейера, то при
чтении сообщения из очереди этого не происходит, и сообщение может
быть прочитано несколько раз.
3) В очередях присутствуют не непосредственно сами сообщения, а
их адреса в памяти и размер. Эта информация размещается системой в
сегменте памяти, доступном для всех задач, общающихся с помощью
данной очереди. Каждый процесс, использующий очередь, должен
предварительно получить разрешение на доступ в общий сегмент памя-
ти с помощью системных запросов API, ибо очередь это системный
механизм, и для работы с ним требуются системные ресурсы и, соответ-
ственно, обращение к самой ОС.
Для наглядности, при обзоре механизмов реализации средств меж-
процессного взаимодействия здесь и далее будем использовать конкрет-
ные системные вызовы ОС Unix.
Так, для работы с очередью сообщений процесс должен воспользо-
ваться системным вызовом msgget, указав в качестве параметра значе-
ние ключа. Если очередь с данным ключом в настоящий момент не ис-
пользуется ни одним процессом, то для нее резервируется область памя-
ти, а затем процессу возвращается идентификатор очереди, который, как
и дескриптор файла, имеет локальное для процесса значение. Если же
очередь уже используется, то процессу просто возвращается ее иденти-
фикатор.