- •Лекция 5. Межпроцессное взаимодействие. Сигналы
- •Сообщения
- •Разделяемая память Сокеты
- •Межпроцессное взаимодействие в Unix
- •Разделяемая память
- •Переменные окружения
- •Наследование переменных окружения
- •Сигналы
- •Основные сигналы:
- •Использование сигналов при межпроцессном обмене
- •Каналы(unix)
- •Неименованный канал между двумя процессами
- •Почтовые ящики
- •Межзадачное взаимодействие в ос qnx Neutrino
- •Синхронный обмен сообщениями
- •Копирование сообщений
- •Простые сообщения
- •Каналы и соединения
- •Импульсы
- •Наследование приоритетов
- •Программный интерфейс механизма обмена сообщениями
- •События
- •Уведомления ввода/вывода
- •Сигналы
- •Специальные сигналы
- •Краткое описание сигналов
- •Очереди сообщений в стандарте posix
- •Преимущества очередей сообщений стандарта posix
- •Интерфейс, аналогичный файлам
- •Функции управления очередями сообщений
- •Разделяемая память
- •Разделяемая память с механизмом обмена сообщениями
- •Создание объектов разделяемой памяти
- •Неименованные и именованные каналы
- •Службы управления часами и таймерами
- •Таймеры
Использование сигналов при межпроцессном обмене
Сокеты
Сокеты предоставляют альтернативный интерфейс обмена данными как в рамках одной системы, так и между процессами, запущенными на разных машинах в сети.
Интерфейс сокетов позволяет явно разделить во взаимодействии двух процессов серверную и клиентскую часть. Серверный процесс инициализирует сокет и ждёт входящих соединений от других процессов. Клиентский процесс устанавливает соединение, и с этого момента по образовавшемуся каналу можно передавать поток данных в обе стороны. Такие сокеты называются потоковыми. Другой тип сокетов, датаграммный, позволяет отправлять сообщения (длиной не более 64 кбайт) между процессами, привязанными к данному сокету.
Датаграммный и потоковый сокеты
UDP
TCP
Интерфейс сокетов впервые появился в операционной системе BSD и использовался для связи компьютеров через сеть Internet по протоколам TCP (потоковые сокеты) и UDP (датаграммные сокеты), стандартным средством взаимодействия процессов в сети. Кроме того, существует локальный вариант взаимодействия через сокеты, в котором обмен данными происходит через специальные файлы, расположенные в файловой системе (фактически, это аналог именованных каналов, но с интерфейсом сокетов).
Каналы(unix)
Канал — поток данных между двумя или несколькими процессами, имеющий интерфейс, аналогичный чтению или записи в файл. В UNIX каналы, представлены в виде файлов, вся работа с ними производится через базовый файловый интерфейс — открытие и закрытие файла, чтение и запись данных и т. п. В этом смысле каналы можно представлять в виде специализированных файлов, которые не хранят информацию, а лишь накапливают её до следующей операции чтения из канала другим процессом, образуя очередь.
По умолчанию в UNIX каждому процессу при запуске ставится в соответствие три открытых файла: стандартного ввода, стандартного вывода и стандартного вывода для ошибок. Канал создаётся по запросу и существует только в ходе работы двух процессов, другие процессы в системе не могут обратиться к этому каналу. Если процесс на одной из сторон канала завершается и закрывает канал, другому процессу посылается специальный сигнал — SIGPIPE.
Неименованный канал между двумя процессами
Другой вид каналов в UNIX — именованные каналы — представляют собой особый тип файлов. Эти файлы располагаются в файловой системе и могут быть открыты любым процессом. Одни процессы записывают данные в канал, другие — читают из него, данные продвигаются по каналу в порядке очереди (FIFO).
Windows
Простые анонимные каналы являются символьными и работают в полудуплексном режиме. Эти свойства делают их удобными для перенаправления выходных данных одной программы на вход другой.
Они являются дуплексными, ориентированы на обмен сообщениями и обеспечивают взаимодействие через сеть. Кроме того, один именованный канал может иметь несколько открытых дескрипторов.
МПВ в Windows.
Анонимные каналы
Анонимные каналы (anonymous channels) Windows обеспечивают однонаправленное (полудуплексное) посимвольное межпроцессное взаимодействие. Каждый канал имеет два дескриптора: дескриптор чтения (read handle) и дескриптор записи (write handle).
Чтение с использованием дескриптора чтения канала блокируется, если канал пуст. В противном случае в процессе чтения будет воспринято столько байтов, сколько имеется в канале, вплоть до количества, указанного при вызове функции. (Операция записи в заполненный канал, которая выполняется с использованием буфера в памяти, также будет блокирована.
Именованные каналы
Именованные каналы (named pipes) предлагают ряд возможностей
именованные каналы ориентированы на обмен сообщениями, поэтому процесс, выполняющий чтение, может считывать сообщения переменной длины именно в том виде, в каком они были посланы процессом, выполняющим запись.
именованные каналы являются двунаправленными, что позволяет осуществлять обмен сообщениями между двумя процессами посредством единственного канала.
допускается существование нескольких независимых экземпляров канала, имеющих одинаковые имена. Например, с единственной серверной системой могут связываться одновременно несколько клиентов, использующих каналы с одним и тем же именем. Каждый клиент может иметь собственный экземпляр именованного канала, и сервер может использовать этот же канал для отправки ответа клиенту.
каждая из систем, подключенных к сети, может обратиться к каналу, используя его имя. Взаимодействие посредством именованного канала осуществляется одинаковым образом для процессов, выполняющихся как на одной и той же, так и на разных машинах.
