IPC는 Inter-Process Communication의 약자로,
서로 다른 프로세스 간에 데이터를 주고 받기 위해 사용하는
다양한 메커니즘과 기술을 포괄하는 개념이다.
IPC는 서로 다른 호스트에 위치한 프로세스 간의 통신도 포함하지만,
일반적으로 이는 네트워크 통신 혹은 RPC와 같은 별도의 이름으로 구분지어 부른다.
요즘에는 다중 프로세스가 기본이기 때문에
이 프로세스들끼리 데이터를 주고 받을 일이 많다.
하지만 단순히 주고 받는다고 끝이 아니라
안전하고 빠르게 통신해야 하며 주고 받는 데이터에 대한 동기화 문제도 해결해야 한다.
IPC 모델은 IPC의 개념적인 접근 방식, 즉 설계 철학을 의미한다.
이는 여러 메커니즘으로 구현될 수 있으며,
주료 공유 메모리 모델과 메시지 전달 모델 두 가지 주요 모델이 있다.
IPC 메커니즘은 이러한 모델을 구현하는 구체적인 메커니즘을 의미한다.
주요 메커니즘으로는 파이프, 메시지 큐, 공유 메모리, 소켓 등이 있다.
프로세스들이 같은 메모리 영역을 공유해서
여기다 읽고 쓰고 하는 방식이다.
프로세스가 직접 메모리에서 읽고 쓰기 때문에
매우 빠른 통신이 가능하다.
하지만 같은 메모리 영역을 공유하기 때문에
동기화 문제를 해결하기 위해 뮤텍스 같은 동기화 도구가 필요하다.
대표적인 구현체로는 POSIX 공유 메모리와 Memory-Mapped Files 등이 있다.
메시지 전달 방식은 프로세스 간에 메시지를 주고 받는 방식이다.
여기서 메시지는 보내고자 하는 데이터로 커널에 의해 관리된다.
즉, 메시지를 주고 받으려면 msgsnd
, msgrcv
와 같이 시스템 콜을 호출하면 된다.
커널은 메시지 큐를 통해 메시지를 관리하여
비동기 통신이 가능하다.
메시지 전달 모델은 커널이 관리해주기 때문에
동기화 문제는 신경쓰지 않아도 된다.
메시지 전달 모델의 대표적인 구현체로는 파이프와 Message Queues, 소켓 등이 있다.