IPC (Inter Process Communication)
프로세스는 독립적으로 실행된다. 즉, 실행 과정에서 다른 프로세스의 영향을 받지 않는다.
따라서, 프로세스 간 통신은 커널 영역이 제공하는 IPC 설비를 이용해야 한다.
같은 프로세스 내에서 Stack 영역을 제외한 주소 공간을 공유하는 스레드와 달리, 각 프로세스는 공유되는 메모리 영역이나 자원이 없기 때문에 직접 통신(데이터 공유/교환)은 불가능하다.
IPC 종류
1. 공유 메모리 (Shared Memory)
- 데이터 자체를 공유하도록 지원하는 설비로, 프로세스 간에 특정 메모리 영역을 공유해서 사용할 수 있도록 허용
- 커널에 공유 메모리 영역 할당 요청(프로세스) -> 메모리 공간 할당(커널) -> 모든 프로세스가 해당 메모리 영역에 접근 가능(Read&Write)
- 각 프로세스는 데이터를 직접 저장하는 것이 아니라 포인터로 공유 메모리 영역을 가리킴
- 모든 프로세스가 주소값을 기반으로 공유 메모리 영역에 바로 접근할 수 있기 때문에 가장 빠르게 작동하는 IPC 방식
2. 익명 파이프 (Anonymous PIPE)
- 통신을 위한 메모리 공간(Buffer) 생성
- 부모-자식/형제 프로세스간의 통신 등 통신할 프로세스를 명확하게 알고 있는 경우 사용 (이외의 외부 프로세스에는 사용 불가)
- 특정 버퍼를 공유하는 두 프로세스 중 하나는 Write, 다른 하나는 Read만 가능 => 한쪽 방향으로만 통신이 가능한 반이중(Half-Duplex) 통신
- 송수신을 모두 할 수 있도록 구현하는 경우 2개의 파이프 생성 (구현이 복잡하고 메모리 공간이 낭비될 수 있는 단점)
3. 네임드 파이프 (Named PIPE)
- 서로 모르는 상태의 외부 프로세스들 간의 통신에 사용 가능
- 익명 파이프의 확장형 => 프로세스 간 통신을 위해 이름이 붙여진 장치 파일(FIFO) 사용
- mkfifo / mknod 함수로 장치 파일 생성
- 반이중(Half-Duplex) 통신이므로 익명 파이프와 마찬가지로 2개의 파이프를 생성해야 송수신 모두 가능
4. 메시지 큐 (Message Queue)
- 입출력 방식은 PIPE 방식과 동일하지만, 데이터의 흐름인 PIPE와 달리 Message Queue는 메모리 공간이다.
- 데이터에 번호를 붙여 Queue에 저장하므로 여러 프로세스가 동시에 데이터를 다룰 수 있음 (하나의 PIPE에서 지정된 두 프로세스만 데이터를 전달할 수 있는 PIPE와의 차이점)
- 메시지(데이터)에 접근하기 위해 Key 필요
- Message type(msgtype) 단위로 queue의 데이터에 접근할 수 있음
5. 메모리 맵 (Memory Map)
- 공유 메모리와 유사하게 메모리 공간을 공유하는 방식으로, 열린 파일에서 공유할 영역의 시작 위치와 종료 위치가 프로세스의 메모리 공간에 mapping
- 파일을 통해 대용량 데이터를 공유해야 할 때 주로 사용
- 대부분의 운영체제에서는 프로세스 실행 시 실행 파일의 각 segment를 메모리에 mapping하기 위해 Memory Map 파일 이용
- Memory Map 파일은 사용하기 이전 혹은 이후에만 파일 크기 변경 가능 (사용하는 도중에는 변경 불가)
- File I/O가 느릴 때 사용 가능
6. 소켓 (Socket)
- 네트워크 소켓 통신을 통해 데이터를 공유하는 방식
- Client와 Server가 소켓을 통해 통신하는 구조로, 원격으로 프로세스 간 데이터를 공유할 때 사용
- 전이중(Full Duplex, 양방향) 통신
- 일정 수준 이상 규모의 애플리케이션에서 주로 사용
7. RPC (Remote Procedure Call)
- 분산 네트워크 환경에서 자주 사용
- 원격 프로시저 호출 -> 다른 주소 공간(프로세스)에 저장된 함수나 프로시저 실행 가능
- 서로 다른 PC에 저장된 데이터를 공유하는 방식(Stub 활용)
IPC 종류 비교
종류 | Shared Memory | PIPE | Named PIPE | Message Queue | Memory Map | Socket |
---|
용도 | 다른 프로세스와 양방향 통신 | 부모-자식간 단방향 통신 | 다른 프로세스와 단방향 통신 | 다른 프로세스와 단방향 통신 | 다른 프로세스와 양방향 통신 | 다른 시스템과 양방향 통신 |
매개체 | 메모리 | 파일 | 파일 | 메모리 | 파일+메모리 | 소켓 |
통신단위 | 구조체 | Stream | Stream | 구조체 | 페이지 | Stream |
통신방향 | 양방향 | 단방향 | 단방향 | 단방향 | 양방향 | 양방향 |
통신범위 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일 시스템 | 동일+외부 시스템 |
References