Общая тенденция развития современных информационных технологий состоит в активном использовании открытых и распределенных систем, а также новых архитектур приложений, таких, как клиент/сервер и параллельные процессы.
Чтобы различные программы могли обмениваться информацией через файлы или общую базу данных, они, как правило, работают через соответствующий API (Application Programming Interface - интерфейс программирования приложения). Если программы находятся на различных компьютерах, то процесс взаимодействия сопряжен с определенными дополнительными трудностями, например, ограниченной пропускной способностью и сложностью синхронизации. Для организации коммуникации между одновременно работающими процессами применяются средства IPC (Interprocess Communication).
Выделяются три уровня IPC: локальные, удаленные и высокоуровневые.
Локальные IPC привязаны к процессору и возможны только в пределах компьютера. К этому виду IPC принадлежат практически все механизмы IPC UNIX, а именно трубы, разделяемая память и очереди сообщений. Коммуникации, или адресное пространство IPC, поддерживаются только в пределах компьютерной системы. Из-за этих ограничений для них могут реализовываться более простые и более быстрые интерфейсы.
Удаленные IPC представляют механизмы, которые обеспечивают взаимодействие как в пределах одного процессора, так и между программами на различных процессорах, соединенных через сеть. Сюда относятся удаленные вызовы процедур (Remote Procedure Calls - RPC), сокеты Unix, а также TLI (Transport Layer Interface - интерфейс транспортного уровня) фирмы Sun.
Под высокоуровневыми IPC обычно подразумеваются пакеты программного обеспечения, которые обеспечивают промежуточный слой между системной платформой и приложением. Эти пакеты предназначены для переноса уже испытанных протоколов коммуникации приложения на более новую архитектуру.
Средства IPC, впервые реализованные в UNIX 4.2BSD, включали в себя многие современные идеи, одновременно пытаясь соответствовать философии UNIX с точки зрения простоты и краткости.
До введения механизмов межпроцессного взаимодействия UNIX не обладал удобными возможностями для обеспечения подобных услуг. Единственным стандартным механизмом, который позволял двум процессам связываться между собой, были трубы (pipes). К сожалению, трубы имели очень серьезное ограничение в том, что два поддерживающих связь процесса должны были быть связаны через общего предка. Кроме того, семантика труб почти не позволяет поддержку распределенной вычислительной среды.
Основные проблемы при введении новых средств IPC в состав системы были связаны с тем фактом, что старые средства были привязаны к файловой системе UNIX либо через обозначение, либо через реализацию. Поэтому новые средства IPC были разработаны как полностью независимая подсистема. Вследствие этого, они позволяют процессам взаимодействовать различными способами. Процессы могут взаимодействовать либо через пространство имен, подобное файловой системе UNIX, либо через сетевое пространство имен. В процессе работы новые пространства имен могут быть добавлены с незначительными изменениями, заметными пользователю. Кроме того, средства взаимодействия были расширены, чтобы поддерживать другие форматы передачи, кроме простого байтового потока, обеспечиваемого трубой. Эти расширения вылились в полностью новую часть системы, которая требует детального знакомства.
Простые межпроцессные коммуникации можно организовать с помощью сигналов и труб. Кроме этого, существуют еще более сложные средства IPC, например, очереди сообщений, семафоры и разделяемые области памяти.
Наряду с обеспечением взаимодействия процессов, средства IPC призваны решать проблемы, возникающие при организации параллельных вычислений. Сюда относятся: