IPC (Inter-Process Communication)
IPC란
IPC(Inter-Process Communication)는 프로세스 간 데이터를 주고받는 통신 메커니즘이다. 각 프로세스는 독립된 메모리 공간을 가지므로 다른 프로세스의 메모리에 직접 접근할 수 없다. 따라서 프로세스 간 협력이 필요할 때는 운영체제가 제공하는 IPC 메커니즘을 사용해야 한다.
IPC는 다양한 방식으로 구현될 수 있으며, 각 방식은 서로 다른 특징과 용도를 가진다.
IPC의 필요성
프로세스 간 통신이 필요한 상황은 다음과 같다:
- 데이터 공유: 여러 프로세스가 동일한 데이터를 직접 읽거나 수정해야 할 때 (공유 메모리), 또는 데이터의 복사본을 주고받아 협력해야 할 때 (파이프, 메시지 큐)
- 병렬 처리: 큰 작업을 여러 프로세스로 나누어 처리하고 결과를 통합할 때
- 모듈화: 시스템을 독립적인 프로세스로 분리하여 각 모듈 간 통신이 필요할 때
- 이벤트 알림: 한 프로세스의 상태 변화를 다른 프로세스에게 알릴 때
IPC 메커니즘
1. 파이프 (Pipe)
파이프는 한 방향으로만 데이터가 흐르는 통신 방식이다. 파이프를 통해 한 프로세스의 출력을 다른 프로세스의 입력으로 연결할 수 있다.
특징:
- 단방향 통신: 데이터는 한쪽 방향으로만 흐른다. 양방향 통신이 필요하면 두 개의 파이프를 사용해야 한다
- FIFO 구조: 먼저 쓴 데이터가 먼저 읽힌다
사용 사례:
- 셸 명령어 체인: 여러 명령어를 파이프로 연결하여 데이터 처리 파이프라인 구성
- 부모-자식 프로세스 통신: 부모 프로세스가 자식 프로세스에게 작업 지시 전달
- 데이터 스트림 처리: 로그 생성 프로세스가 파이프를 통해 로그 분석 프로세스에 전달
2. 메시지 큐 (Message Queue)
메시지 큐는 프로세스 간 메시지 형태로 데이터를 주고받는 방식이다. 파이프와 달리 메시지 단위로 데이터를 관리하며, 메시지 타입을 지정할 수 있다.
특징:
- 양방향 통신: 여러 프로세스가 큐에 메시지를 보내고 받을 수 있다
- 메시지 타입: 메시지에 타입을 지정하여 선택적으로 수신 가능
사용 사례:
- 로그 수집 시스템: 여러 프로세스가 로그 메시지를 큐에 전송
- 작업 분배: 마스터 프로세스가 작업을 큐에 넣고 워커 프로세스들이 가져감
3. 공유 메모리 (Shared Memory)
공유 메모리는 여러 프로세스가 동일한 메모리 영역에 접근할 수 있게 하는 방식이다. 가장 빠른 IPC 메커니즘이지만, 동기화 문제를 직접 해결해야 한다.
특징:
- 고속 통신: 커널을 거치지 않고 직접 메모리에 접근하므로 매우 빠르다
- 대용량 데이터: 큰 데이터를 효율적으로 공유할 수 있다
- 동기화 필요: 여러 프로세스가 동시에 접근할 때 세마포어 등으로 동기화가 필요하다
- 메모리 관리: 공유 메모리 생성, 연결, 해제를 명시적으로 관리해야 한다
사용 사례:
- 데이터베이스 시스템: 여러 프로세스가 동일한 데이터베이스 버퍼 풀에 접근
- 멀티미디어 처리: 대용량 이미지나 비디오 데이터를 여러 프로세스가 공유
4. 소켓 (Socket)
소켓은 네트워크를 통한 프로세스 간 통신을 위한 메커니즘이다. 동일한 컴퓨터뿐만 아니라 네트워크로 연결된 서로 다른 컴퓨터의 프로세스 간에도 통신할 수 있다.
특징:
- 네트워크 통신: 로컬뿐만 아니라 원격 시스템 간 통신 가능
- 양방향 통신: 데이터를 보내고 받을 수 있다
- 프로토콜 지원: TCP(신뢰성), UDP(빠른 전송) 등 다양한 프로토콜 선택 가능
- 포트 번호: IP 주소와 포트 번호로 통신 대상을 식별한다
사용 사례:
- 웹 서버-클라이언트 통신: HTTP 프로토콜을 통한 웹 페이지 전송
- 데이터베이스 연결: 애플리케이션과 데이터베이스 서버 간 통신
- 실시간 채팅: 여러 사용자 간 메시지 전송
IPC 메커니즘 비교
| 메커니즘 | 속도 | 데이터 크기 | 동기화 | 주요 용도 |
|---|---|---|---|---|
| 파이프 | 중간 | 제한적 | 커널 관리 | 단순한 데이터 흐름 |
| 메시지 큐 | 중간 | 중간 | 커널 관리 | 구조화된 메시지 전달 |
| 공유 메모리 | 매우 빠름 | 대용량 | 사용자 구현 필요 | 대용량 데이터 공유 |
| 소켓 | 느림 | 제한 없음 | 커널 관리 | 네트워크 통신 |
Last updated on