[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 3-5) 프로세스 간 통신

극꼼 2023. 1. 13. 19:45
반응형


<프로세스 간 통신>

: 프로세스들은 독립적이거나 협력적인데요, 협력 프로세스는 데이터공유를 포함하여 프로세스들에게 영향을 주거나 받습니다. 

프로세스 간 통신(Inter Process Communication, IPC) 기법을 필요로 합니다.

 

- 협력을 허용하는 환경을 제공하는 이유 : 정보 공유, 계산 가속화, 모듈성, 편의성


<통신 모델>

1) 메시지 전달 : 동일한 주소 공간을 공유하지 않고도 프로세스들이 통신을 하고, 그 동작을 동기화할 수 있도록 허용하는 기법입니다. send(message) / receive(message) 연산을 제공합니다.(message는 고정 길이일수도, 가변 길이일수도 있음) 

- 커널쪽에 message queue가 있습니다.

 

- 통신 연결(communication link)을 통해 프로세스 간 메시지를 주고받습니다. 구현 방법에는 직접/간접 통신, 동기식/비동기식 통신, 자동/명시적 버퍼링이 있습니다. 

  •  직접 통신 : 통신을 원하는 각 프로세스는 통신의 수신자 또는 발신자의 이름을 명시해야 합니다. 명시하면 연결(link)이 자동으로 생성됩니다.(두 프로세스들 사이에만 연관되며 프로세스 하나의 쌍 사이에는 하나의 연결만 존재) 
    • 주소를 지정하는 방식 : 대칭 주소 지정(발신자, 수신자 프로세스 모두 이름 지정), 비대칭 주소 지정(발신자만 수신자의 프로세스 이름 지정)
  • 간접 통신 : 메일함 또는 포트로 메시지를 송수신합니다. 두 프로세스는 프로세스가 공유된 경우(공유 메일함이 존재)에만 통신이 가능합니다. 2개 이상의 프로세스와 연결 가능하며, 프로세스 하나의 쌍 상태에 여러 서로 다른 연결이 존재할 수 있습니다.
    • 공유 메일함 : 프로세스 또는 운영체제에게 소유권이 존재합니다.
  • Blocking 모드(동기) : 
    • send : 송신된 메시지가 수신될 때까지 송신자를 블록(정지). 또는 Queue에 메시지가 가득차있을 때
    • receive : 이용 가능한 메시지가 있을 때까지 블록
  • Non-Blocking 모드(비동기) : 
    • send : 메시지를 전달한 뒤 다른 작업을 처리
    • receive : 유효한 메시지를 받거나 null 메시지 수신
  • 버퍼링 : 통신 프로세스 간 교환되는 메시지는 임시 대기열(Queue)이 존재합니다. Queue를 구현하는 방식에는 다음 3가지가 있습니다.
    1. 용량 zero(최대 길이 0) : 발신자는 수신자가 메시지를 받을 때까지 차단
    2. 제한된 용량(유한 길이 n) : 연결이 가득 차면 발신자는 대기열 공간이 확보될 때까지 차단
    3. 무한 용량 : 발신자는 절대 차단하지 않음

2) 공유 메모리 : 원칙적으로는 한 프로세스가 다른 프로세스의 메모리에 접근하는 것을 금지하지만, 공유 메모리 영역은 접근 금지를 제거하는 것을 전제합니다. 통신하는 프로세스들이 공유 메모리 영역을 구축해야합니다.(상단의 이미지에서 process A, process B영역은 각각의 프로세스들이 직접 영역을 구축한 것) 

- 무한 버퍼 : 버퍼의 크기에 실질적인 한계가 없습니다.

- 유한 버퍼 : 버퍼의 크기가 고정되어 있습니다. 버퍼가 비어있으면 소비자 프로세스는 반드시 대기해야하고, 모든 버퍼가 채워져 있으면 생산자 프로세스가 대기해야 합니다.

 

* 공유 메모리와 메시지 전달의 차이

- 구현 용이성 : 공유 메모리 < 메시지 전달 (공유 메모리는 같은 부분에 쓰기를 하면 안 됨. 메시지 전달은 이러한 충돌 방지를 할 필요가 없음)

- 속도 : 공유 메모리 > 메시지 전달 (공유 메모리는 커널까지 가지 않기 때문에 더 빠름)

- 분산 환경 : 공유 메모리 < 메시지 전달 (공유메모리는 공유하는 데이터가 여러 캐시 사이에서 왔다갔다 해야해서 캐시 일관성을 지키려다 성능이 떨어짐)

 

반응형