Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС шпоры 1.docx
Скачиваний:
24
Добавлен:
25.09.2019
Размер:
876.45 Кб
Скачать
  1. Механизмы межпроцессного взаимодействия (каналы, очереди сообщений, разделяемая память)

Каналы

Один из методов взаимодействия между процессами получил название канал связи, конвейер или транспортер (pipe) - однонаправленный механизм передачи данных (неструктурированного потока байтов) между процессами без необходимости создания файла на диске. Канал представляет собой буфер в ОП, поддерживающий очередь байт согласно FIFO. Для программиста, использующего канал, этот буфер выглядит как безымянный файл, в который можно писать и читать, осуществляя тем самым обмен данными. Обычный канал получил развитие – появился именованный канал или именованный конвейер – зарегистрированный в системе, которой разрешено использовать различным процессам или потокам. Реализуется это путем создания одним, а чтения – другим процессом (потоком) файла типа FIFO с одним и тем же указанным в процессах именем.

Именованный канал существует в ОС и после завершения процесса, поэтому после окончания использования он должен быть «отсоединен» или удален. Следует иметь в виду, что именованные каналы используют файловую систему только для хранения имени конвейера, а данные между процессами передаются через буфер в оперативной памяти, как и в случае обычного канала.

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

Механизм очередей сообщений (queues) в целом схож с механизмом каналов, но позволяет процессам и потокам обмениваться структурированными сообщениями.

При этом синхронизация осуществляется по сообщениям, то есть процесс, пытающийся прочитать сообщение, переводится в состояние ожидания в том случае, если в очереди нет ни одного полного сообщения (в распределенных системах, состоящих из нескольких процессоров и неразделяемых блоков памяти, использование таких средств синхронизации как блокирующие переменные, семафоры, сигналы является непригодным, а синхронизация реализуется с помощью очереди сообщений).

Один или несколько процессов независимым образом могут посылать сообщения процессу – приемнику. При этом только процесс-приемник может читать и удалять сообщения из очереди, а процессы-клиенты имеют право лишь помещать в очередь свои сообщения. Таким образом, очередь работает только в одном направлении, а если необходима двухсторонняя связь, то следует создать две очереди.

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

Очередь сообщений представляет возможность использовать несколько дисциплин обработки сообщений (FIFO, LIFO, приоритетный доступ, произвольный доступ); каналы обеспечивают лишь дисциплину FIFO

Если при чтении сообщений оно удаляется из канала, то при чтении сообщения из очереди этого не происходит, и сообщение может быть прочитано несколько раз

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

Основные функции управления очередью:

Создание новой очереди Открытие существующей очереди

Чтение и удаление сообщений из очереди Чтение без последующего удаления

Добавление сообщения в очередь Завершение использование очереди

Удаление из очереди всех сообщений Определение числа элементов в очереди

Разделяемая память(РП)

Представляет собой сегмент физической памяти, отображенной в виртуальное адресное пространство двух или более процессов. Механизм разделяемой памяти поддерживается подсистемой виртуальной памяти, которая настраивает таблицы отображения адресов для процессов, запросивших разделение памяти так, что одни и те же адреса некоторой области физической памяти соответствует виртуальным адресам разных процессов.

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

shmget - создает новый сегмент РП или находит существующий сегмент с тем же ключом

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

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

shmctl - служит для управления разнообразными параметрами, связанными с существующим сегментом.