프로세스간 통신하는 규칙에 대한 문제로 프로세스간 데이터를 주고받는 행위 또는 방법을 뜻한다
💡 IPC 통신은 크게 2가지로 분류할 수 있다 !
메시지 전달(Message Passing) | 공유메모리(Shared Memory | |
---|---|---|
방식 | 커널을 통해 메시지를 전달하는 방식으로 데이터를 주고받음 | 공유 메모리 영역을 구축하여 데이터를 주고받음 |
장점 | 커널을 이용하기 때문에 비교적 구현이 쉬움 | 커널 의존도가 낮기 때문에 속도가 빠르고 통신이 자유로움 |
단점 | 시스템 콜로 인한 오버헤드 발생 | 자원과 데이터를 공유하기 때문에 동기화 이슈 발생 |
IPC 기법 | Pipe, Signal, Message Queue, Socket 등 | Shared Memory, Semaphore 등 |
장점
- 하나의 프로세스는 읽기만, 다른 하나의 프로세스는 쓰기만 하는 단순한 데이터 흐름에 간단하게 사용할 수 있다.
단점
- 송수신을 모두 하기 위해서는 PIPE를 두 개 구현하는 것이 복잡하다.
- Buffer가 상대적으로 작기때문에 오버플로우가 발생할 확률이 높다
장점
- 비동기 방식으로 처리량이 많다면 큐에 넣어놨다가 나중에 처리할 수 있다
- 다수의 프로세스들과 통신할 수 있다
단점
- 데이터가 많을수록 메모리를 많이 사용한다
- 큐에 데이터를 삽입 / 삭제 할 때 오버헤드가 발생할 수 있다
기본적으로 소켓 통신 규격을 따른다
커널 공간에 메모리 공간을 만들고 해당 공간을 프로세스간 공유하는 방법
장점
- 곧바로 메모리에 접근할 수 있기 때문에 IPC중 가장 빠르다
단점
- 메시지 전달 방식이 아니기 때문에 데이터를 읽어야하는 시점을 알 수 없다
커널에 종속적이기 때문에 커널에서 허용하고 있는 공유메모리 사이즈에 제한된다
뮤텍스 | 세마포어 | |
---|---|---|
대상 | 스레드 | 프로세스 |
목적 | 공유 자원을 여러 스레드의 접근으로부터 보호 | 공유 자원을 여러 프로세스의 접근으로부터 보호 |
상태 | 0, 1 (이진 세마포어) | 0 이상의 임의의 정수값 |
용도 | mutual exclusion(lock/unlock) | Resource Counting |
ref IPC