IPC

IPC 데이터/동기화 통로

프로세스는 주소 공간이 분리되어 있어 직접 메모리를 공유하지 않는다. 파이프, 메시지 큐, 공유 메모리, 소켓은 서로 다른 비용과 동기화 조건을 가진다.

01

관계와 방향 결정

단방향 stream이면 pipe, 양방향이나 네트워크 경계면 socket을 고려한다.

02

메시지 경계를 보존한다

byte stream은 메시지 경계를 자동으로 보존하지 않으므로 length framing 같은 규칙이 필요하다.

03

공유 메모리에는 lock을 붙인다

메모리만 공유하면 race condition이 생기므로 semaphore나 mutex 같은 동기화가 필요하다.

Pipe
단방향 stream shell pipeline처럼 한 프로세스 출력이 다른 입력으로 이어진다.
FD close가 EOF 전달에 중요하다.
Queue
메시지 단위 메시지 경계를 유지해 command나 event를 한 단위로 전달한다.
크기 제한을 본다.
Shared memory
높은 처리량 복사 비용을 줄이지만 접근 순서와 일관성을 직접 관리해야 한다.
동기화 없이는 위험하다.
Socket
범용 연결 같은 머신의 Unix domain socket과 네트워크 socket 모두 가능하다.
프로토콜 설계가 필요하다.

경계 · EOF · 동기화 점검

경계 전송 단위가 byte stream인지 message인지 구분했는가.
EOF pipe에서 쓰기 FD를 닫지 않아 reader가 끝을 못 보는 상황이 없는가.
동기화 공유 메모리에 접근하는 프로세스들이 순서를 제어하는가.

pipe 핵심

pipe(fd);
// child writes fd[1], parent reads fd[0]
// both close unused ends