Межпроцессное взаимодействие – связь между процессами, предназначенная для выполнения некоторой задачи, передачи данных и синхронизации работы процессов.
В UNIX каждый процесс выполняется в своем собственном адресном пространстве. Это позволяет исключить “плохое” влияние одного процесса на другой. В сложных программных системах часто используются несколько взаимодействующих процессов, решающих общую задачу.
Процессы могут взаимодействовать:
1) Передавая данные. Один процесс передает данные другому процессу, объемом от десятков байтов до нескольких мегабайтов.
2) Совместно используя данные. Можно не копировать информацию, а использовать ее совместно, при этом изменения, сделанные одним процессом, должны быть сразу видны другому. Взаимодействовать могут несколько процессов. При совместном использовании данных процессам нужен протокол взаимодействия, который позволит:
- сохранить целостность данных;
- и исключить конфликты при доступе данным.
3) Уведомляя о событиях. Процесс может сообщить другому процессу или группу процессов о наступлении некоторого события. Таким образом, можно синхронизировать выполнения нескольких процессов.
Поэтому процессам надо предоставить возможность общаться и разделять между собой общие ресурсы и данные. Можно решать эту задачу средствами самих процессов, но это неэффективно, а в многозадачной системы еще и опасно. ОС должна предоставлять средства межпроцессного взаимодействия (InterProcess Communication, IPC).
Средства межпроцессного взаимодействия, присутствующие во всех версиях UNIX, это:
- сигналы
- каналы
- FIFO (именованные каналы)
- сообщения (очереди сообщений)
- семафоры
- разделяемая память
- сокеты.