Inter Process Communication
프로세스간 메세지를 교환하기 위해 통신을 필요로 하고 이를 IPC라 한다.
Process Communication
Shared Memory System
공유 메모리는 협력 프로세스간 공유 메모리 영역이 생성되고 해당 영역을 기반으로 정보 교환이 이루어진다. 다음과 같이 두 가지 유형의 버퍼가 사용된다.
- 무한버퍼 : 버퍼 크기에 제한이 없기 때문에 소비자는 생산을 기다려야할 수 도있지만 생싼자는 언제든 새로운 데이터를 생산할 수 있다.
- 유한버퍼 : 버퍼의 크기가 고정되어있다고 가정하고 버퍼가 비어있으면 소비자는 대기해야한다. 버퍼가 차있으면 생산자가 대기하여야 한다.
Message Passing System
메세지 전달은 통신이 협력 프로세스들 간에 교환되는 메세지를 통해 이루어진다.
Naming
메세징 시스템은 최소 두가지 연산인 send와 receive를 해야한다. 연산을 함에 있어 서로를 가리킬 방법이 있어야한다.send(sender, message)
receive(receiver, message)
통신 연결은 다음과 같은 특성을 가진다.
- 통신을 원하는 모든 프로세스의 쌍 사이에 연결이 자동적으로 구축된다.
- 프로세스들은 통신하기위해 서로 상대방의 신원만 알면 된다.
- 연결은 정확히 두 프로세스 사이에만 연관된다.
- 통신하는 프로세스들의 각 쌍 사이에는 정확하게 하나의 연결이 존재해야 한다.
Synchronization
동기화에는 다양한 설계 옵션이 존재한다.
- Sync Send : 송신 프로세스가 메세지가 수신 프로세스 또는 메일박스에 의해 수신될 때 까지 Block된다.
- Async Send : 송신 프로세스가 메세지를 보내고 작업을 재시작한다.
- Sync Recv : 메세지가 이용 가능할 때 까지 수신 프로세스가 Block된다.
- Async Recv : 수신하는 프로세스가 유효한 메세지 또는 null을 받는다.
Buffering
교환되는 메세지들은 임시 큐에 들어가 있다. 임시 큐를 구현하는 방법은 3가지로 나뉜다.
Zero Capacity
큐의 최대 길이가 0이다. 그렇기 때문에 대기하는 메세지를 가질 수 없고 송신자는 수신자가 메세지를 수신할 때 가지 기다려야한다.
Bounded Capacity
큐는 유한한 길이 n을 가진다. 즉 최대 n개의 메세지가 그 안에 들어가 있을 수 있다. 큐가 만원이 아니라면 메세지는 큐에 놓이며 큐가 만원이라면 송신자는 큐 안에 가용한 공간이 생길 때 까지 Block되어야 한다.
Unbounded Capacity
큐는 잠재적으로 무한한 길이를 가진다. 그렇기 때문에 송신자가 Block되지 않는다.