Виды межпроцессорного обмена

Все процессы в ОС обмениваются между собой какой-либо информацией. В ОС существует несколько видов межпроцессного обмена, а точнее сказать средств межпроцессного взаимодействия (Interprocess Communication, IPC), которые можно разбить на несколько уровней.

Локальный уровень

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

Сигналы

Сигналы в ОС генерируются следующими процессами:

  • с терминала, нажатием специальных клавиш или их комбинаций (например, нажатие Ctrl+C генерирует SIGINT, а Ctrl-Z SIGTSTP);
  • ядром системы:
  • при возникновении аппаратных исключений (недопустимых инструкций, нарушениях при обращении в память, системных сбоях и т.п.);
  • при ошибочных системных вызовах;
  • для информирования о событиях ввода-вывода;
  • одним процессом другому (или самому себе) с помощью системного вызова kill(), в том числе из shell утилитой /bin/kill.

Примечание – Сигнал – это асинхронное уведомление процесса о каком-либо событии. Когда сигнал послан процессу, ОС прерывает выполнение процесса. Если процесс установил собственный обработчик сигнала, ОС запускает этот обработчик, передав ему информацию о сигнале. Если процесс не установил обработчик, то выполняется обработчик по умолчанию. Все сигналы начинаются на "SIG…" и имеют числовые соответствия, определяемые в заголовочном файле signal.h. Утилита kill позволяет задавать сигнал как числом, так и символьным обозначением.

Разделяемая память

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

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

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

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

Удаленные

Вызовы процедур

RPC (Remote Procedure Calls) – разновидность технологий, которая позволяет компьютерным программам вызывать функции или процедуры в другом адресном пространстве (как правило, на удалённых компьютерах). Обычно реализация RPC технологии включает в себя два компонента: сетевой протокол (чаще TCP и UDP, реже HTTP) для обмена в режиме клиент-сервер и язык сериализации объектов (или структур для необъектных RPC).

Межпроцессорное взаимодействие

DBus (Desktop Bus) – это система межпроцессного взаимодействия (IPC), предназначенная для обмена данными и вызова методов между процессами в рабочем столе ОС. Вот несколько ключевых аспектов, описывающих DBus и его применение:

  • Межпроцессное взаимодействие:
    • Клиент-Серверная модель – обеспечивает клиент-серверную модель взаимодействия. Система включает шину сообщений, к которой подключены как клиентские, так и серверные процессы.
    • Отправка сообщений – процессы могут отправлять сообщения друг другу через шину DBus. Сообщения содержат данные, сигналы и запросы на вызов методов.
  • Шина системы и шина сеанса:
    • Шина системы – для взаимодействия между системными службами и процессами. Она используется для обмена данными на уровне всей системы.
    • Шина сеанса – для взаимодействия между процессами, принадлежащими конкретному пользовательскому сеансу.
  • Уведомления и службы:
    • Системные службы – для предоставления функциональности и обмена информацией, например NetworkManager, systemd и другие.
    • Уведомления – для отправки уведомлений и обновлений между приложениями и компонентами рабочего стола.
  • Широкое использование в среде рабочего стола:
    • Интеграция приложений – облегчает интеграцию различных приложений и компонентов рабочего стола, например для управления звуковыми настройками, обмена файлами, получения уведомлений и т.д.
    • Контроль за сеансом – позволяет управлять параметрами сеанса, такими как настройки энергосбережения, языковые предпочтения и т.д.
  • Стандартизация и расширяемость:
    • Стандарты сообщений – существуют стандарты сообщений для определенных функций, таких как стандарты Freedesktop.org, что обеспечивает согласованный подход к взаимодействию между приложениями и службами.
    • Расширяемость – поддерживает расширение функциональности через добавление новых интерфейсов и объектов, что делает его гибким и расширяемым.

Сокеты

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

При использовании локального сокета ему присваивается UNIX-адрес и просто будет создан специальный файл (файл сокета) по заданному пути, через который смогут сообщаться любые локальные процессы путём простого чтения/записи из него. При использовании сетевого сокета создается абстрактный объект, привязанный к слушающему порту ОС и сетевому интерфейсу, которому присваивается INET-адрес.