OS IPC

pipe, FIFO, 메시지 큐, 공유 메모리 IPC 선택표

IPC 방식은 데이터 양, 방향성, 프로세스 관계, 커널 개입, 동기화 필요성에 따라 선택이 달라진다.

01

관계 확인

부모-자식처럼 관련 프로세스인지 독립 프로세스인지에 따라 pipe와 FIFO 선택이 갈린다.

process relation
02

데이터 형태

연속 바이트면 pipe/socket, 경계 있는 메시지면 message queue가 읽기 쉽다.

stream vs message
03

성능 요구

대량 데이터는 공유 메모리로 복사를 줄이되 별도 동기화가 필요하다.

zero-copy-ish
04

이벤트 알림

signal은 작은 알림에 적합하지만 복잡한 데이터 전달에는 맞지 않는다.

notification
Pipe/FIFO
단방향 바이트 스트림을 최소 인터페이스로 연결한다. FIFO는 이름 있는 파일처럼 독립 프로세스도 연결할 수 있다.
stream channel
Queue
메시지 경계를 유지하고 우선순위나 타입 기반 처리가 가능하다. 커널 큐 용량과 blocking 정책을 확인해야 한다.
메시지 경계
Shared Memory
가장 빠른 편이지만 race condition을 직접 해결해야 한다. semaphore, mutex, futex 같은 동기화와 함께 설계한다.
sync required

IPC 선택 기준

관계 프로세스들이 공통 조상을 갖는지 독립 실행되는지 확인한다.
경계 데이터 경계를 애플리케이션이 직접 나눌지 커널 큐가 보존할지 정한다.
동기화 공유 메모리는 읽기·쓰기 순서와 visibility를 별도 보장한다.

선택 기준

small event -> signal
stream bytes -> pipe/FIFO/socket
large shared data -> shared memory + semaphore