Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОПЕРАЦИОННЫЕ СИСТЕМЫ И ОБОЛОЧКИ.doc
Скачиваний:
46
Добавлен:
21.09.2019
Размер:
799.74 Кб
Скачать

6.5.3. Программные каналы

Программный канал (конвейер, транспортер) является средством, с помощью

которого можно производить обмен данными между процессами. Принцип работы

59

конвейера основан на механизме ввода/вывода, который используется для работы с

файлами в ОС UNIX. Задача, передающая информацию, действует так, как будто она

записывает данные в файл, а задача, для которой эта информация предназначена, читает

ее из этого файла. Операции записи и чтения осуществляются не записями, а потоком

байтов. Программный канал представляет собой поток данных между двумя (или более)

процессами. Конвейеры не являются файлами на диске, а представляют собой буферную

область.

Программные каналы (pipes) в ОС UNIX являются очень важным средством

взаимодействия и синхронизации процессов. Теоретически программный канал

позволяет взаимодействовать любому числу процессов, обеспечивая дисциплину FIFO

(first-in-first-out). Процесс, читающий из программного канала, прочитает самые давние

данные, записанные в программный канал. Традиционно для хранения данных

использовались файлы, в современных версиях ОС UNIX применяются и другие

средства, например, очереди сообщений.

В ОС UNIX различают два вида программных каналов:

- именованный программный канал может служить для общения и

синхронизации произвольных процессов, знающих имя данного программного

канала и имеющих соответствующие права доступа;

- неименованным программным каналом могут пользоваться только

создавший его процесс и его потомки.

6.5.4. Очереди сообщений

Очереди сообщений (Queue) являются более сложным методом связи

взаимодействующих процессов по сравнению с программными каналами. С помощью

очередей также можно из одной или нескольких задач независимым образом посылать

сообщения некоторой задаче-приемнику. При этом только процесс-приемник может

читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь

помещать в очередь свои сообщения. Очередь работает только в одном направлении,

если необходима двухсторонняя связь, следует создать две очереди.

Работа с очередями сообщений имеет много отличий от работы с конвейерами:

- очереди сообщений предоставляют возможность использовать u1085 несколько

дисциплин обработки сообщений:

o FIFO – сообщение, записанное первым, будет прочитано первым;

o LIFO – сообщение, записанное последним, будет прочитано первым;

o приоритетная – сообщения читаются с учетом их приоритетов;

o произвольный доступ – можно читать любое сообщение, а программный

канал обеспечивает только дисциплину FIFO;

- при чтении сообщения из очереди оно не удаляется, а может быть прочитано

несколько раз;

- в очередях реально присутствуют не сами сообщения, а только их адреса в

памяти и размеры. Эта информация размещается системой в сегменте памяти,

доступном для всех задач, общающихся с помощью данной очереди.

Каждый процесс, использующий очередь, должен предварительно получить

разрешение на использование общего сегмента памяти с помощью системных запросов,

потому что очередь – системный механизм и для работы с ней требуются системные

ресурсы и обращение к самой ОС.

Для обеспечения возможности обмена сообщениями между процессами механизм

очередей сообщений поддерживается следующими системными вызовами:

60

- образование новой очереди сообщений или получения дескриптора

существующей очереди;

- посылка сообщения, т.е. постановка его в указанную очередь сообщений;

- прием сообщения, т.е. выборка сообщения из очереди сообщений;

- выполнение ряда управляющих действий.

Ядро хранит сообщения в виде связанного списка (очереди), а дескриптор очереди

сообщений является индексом в массиве заголовков очередей сообщений.