Найти в Дзене

Ядро Линукс


IPC
Inter-process communication - Межпроцессное взаимодействие.

Это способы взаимодействия внутри одной системы

Что это такое:

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

Основные способы межпроцессного взаимодействия:

1. Файлы и файловая система
- Самый простой способ: процессы читают и пишут один и тот же файл.
- Минусы: медленно, требует доступа к диску.
2. Каналы (Pipes, FIFO)
- Неименованные каналы (pipes): Создаются вызовом pipe(). Работают только между родственными процессами (например, между родителем и потомком, созданным через fork()).
- Именованные каналы (FIFO): Это специальный файл в файловой системе (создается mkfifo()). Через него могут взаимодействовать любые процессы, знающие его имя.
3. Сокеты (sockets)
- Универсальный механизм обмена сообщениями.
- Unix domain sockets работают внутри одной системы и очень эффективны.
- Сетевые сокеты (TCP/UDP) работают между машинами по сети.
4. Сигналы
- Лёгкий способ уведомить процесс о событии (например, SIGTERM, SIGKILL, SIGHUP).
- Это не обмен данными, а скорее управление поведением процесса.
5. Общие области памяти (Shared Memory)
- Быстрый способ обмена большими объёмами данных.
- Процессы получают доступ к одной и той же области физической памяти.
- Требует обязательного использования семафоров или мьютексов для синхронизации доступа и избегания состояний гонки (race condition).
6. Очереди сообщений (Message Queues)
- Структурированный обмен: процессы ставят сообщения в очередь, другие читают их в порядке поступления или по приоритету.
- Удобно для сложных взаимодействий.
7. Семафоры и мьютексы
- Не для передачи данных, а для синхронизации.
- Нужны чтобы процессы не мешали друг другу. Например, чтобы два процесса не писали в файл одновременно.

Итог

- IPC нужен, потому что процессы изолированы.
- В Linux есть несколько способов: от простого (файл) до очень быстрого (shared memory + семафоры).
- Выбор механизма зависит от задачи:
- файлы — просто, но медленно,
- сокеты — универсально,
- shared memory — быстро, но сложно в синхронизации,
- каналы и очереди сообщений — для потокового и структурированного обмена.
- Сигналы, семафоры и мьютексы используются для координации и управления, а не для передачи данных.
Ядро Линукс  IPC Inter-process communication - Межпроцессное взаимодействие.
2 минуты