Q) process간의 통신을 위해서! → (왜 통신해야하는데?)
A)
Information sharing(정보를 공유해야해서!)
Computation speedup(계산 속도가 빨라져서!)
modularity(모듈성?)
Convenience(편리해요!)
+전체적으로 보면, 멀티코어나 멀티CPU에서 멀티 프로세싱을 하기 위해서이다. 그 와중에 프로세스끼리 소통을 하려면 필요하기 때문이다
추가적으로,
이 있다. 추가적인 방식들은 client/server architecture에서 사용하는 communication 방법이다.
shared memory를 구현하는 모델이 있다.
두 프로세스가 통신할 때, 한쪽은 데이터 생산자(Producer) 역할, 다른 한쪽은 데이터를 소비(Consumer)하는 역할만 한다.
생산자와 소비자가 데이터를 주고받을 때, shared memory가 버퍼 역할을 한다.
버퍼는 circular buffer를 사용한다.
message passing은 shared memory를 사용하지 않기 때문에 시작하기위해서는 절차가 필요하다.
communication link를 만든다.(이미 존재한다면, 다시 만들 필요는 없다!)
basic primitive를 이용하여 메시지를 교환한다.
두가지 basic primitive가 존재한다.
send(message, dstination) or send(message)
receive(message, host) or receive(message)
또한, message passing을 하는 방식에는 4가지가 있는데,
Direct / Indirect Communication
Synchronous / Asynchronous Communication
기본적인 메시지의 구조는 header와 body, 2부분으로 나뉜다.
두개의 프로세스가 직접적으로 연결되는 것.
direct Communication에서 communication link의 특징
mailbox라는 중간 매개체를 통하여 메시지를 주고받는 것.
indirect Communication에서 communication link의 특징
보내고 받는 process가 동기화 되어 있다는 것 → sender와 receiver가 동시에 통신을 위한 행동을 해야한다.
동기화 하는 방법에는 Blocking과 Non-blocking 두가지가 있다.
Blocking이 synchronous된 방법이고,
Non-blocking이 nonsynchronous된 방법이다.
Blocking
Blocking send: sender block이 메시지를 받을 때까지 기다린다(block).
Blocking receive: receiver가 메시지를 사용할 수 있을 때까지 기다린다(block).
(non-blocking의 receive를 보면 좀 더 이해가 간다!)
Non-Blocking
Non-blocking send: sender가 메시지를 보내고 다른 할 일 한다.
Non-blocking receive: valid하거나 null이거나 메시지를 받는다.
여기서 공부를 해봅시다
https://www.geeksforgeeks.org/inter-process-communication-ipc/
대학교 운영체제 수업자료
Sync, Async, blocking, non-blocking에 대한 설명이 추가되면 좋을 거 같아서 자료를 첨부한다. (스스로도 헷갈릴 때 와서보자!)
첨부1
첨부2