Komunikacja międzyprocesowa

Komunikacja międzyprocesowa (ang. inter-process communication, IPC) – umowna nazwa zbioru sposobów komunikacji pomiędzy procesami systemu operacyjnego.

Procesy mogą używać różnych sposobów komunikacji, a najpowszechniejsze z nich to:

Ponieważ procesy mogą komunikować się nie tylko w obrębie jednego systemu, możemy wyróżnić też:

Mechanizmy IPC opierają się na budowaniu w pamięci lub na nośniku dynamicznych struktur, które są używane w celu przesyłania pomiędzy procesami komunikatów, np. o blokadzie obiektów systemowych, stanie wykonywanych wątków, wzbudzania zaprogramowanych w aplikacjach procedur i innych.

IPC nie posiada sztywnej specyfikacji. System operacyjny udostępnia niezbędne obiekty (jak semafor), zaś programista wykorzystuje je w celu przekazania komunikatu, którego znaczenie dla aplikacji ustala samodzielnie, zgodnie z przyjętą koncepcją architektury programu, a więc inaczej niż w wypadku np. protokołów sieciowych, gdzie znaczenie poszczególnych flag w nagłówku pakietu jest określone przez specyfikację protokołu.

IPC używa się najczęściej w rozbudowanych wielowątkowych aplikacjach (np. bazach danych, serwerach WWW, czy serwerach aplikacyjnych).

IPC zostało wprowadzone jako część jądra systemu operacyjnego w systemie operacyjnym System V. W podobny sposób zbudowana została implementacja IPC w jądrze Linux. Z uwagi na implementację w jądrze cała komunikacja wykonywana jest w kontekście jądra, co z jednej strony ułatwia synchronizację, z drugiej zaś powoduje obniżenie wydajności. Każda operacja IPC wymaga przełączenia kontekstu, co obarczone jest sporym narzutem czasu (przy założeniu, że przełączanie kontekstów jest sporym narzutem). Implementacja w jądrze ma jednak tę zaletę, że komunikacja IPC jest bardziej niezawodna, a w niektórych przypadkach (np. semafory) wydaje się jedyną słuszną strategią, gdyż zapewnia atomowość operacji, zapobiegając powstawaniu sytuacji kolizji w dostępie czy sytuacji wyścigu o nieustalonym rezultacie.

Pojęcie komunikacji międzyprocesowej może odnosić się do wymiany informacji między procesami w obrębie jednego systemu operacyjnego, klastra, a nawet systemów odległych (połączonych siecią). W przypadku tej ostatniej kategorii potrzebne są metody, które pozwolą jednoznacznie identyfikować zdalne procesy. Najczęściej używane strategie to użycie numerów portów (dla gniazd działających w warstwach transportowych modelu TCP/IP, np. TCP lub UDP) lub użycie zdefiniowanych wcześniej unikalnych nazw (dla RPC).

Zobacz też