[운영체제] IPC(Inter Process Communication) 공유 메모리, 메시지 전달 [Shared Memory, Message Passing]

Posted by 앱해피
2015. 7. 12. 18:41 운영체제(OS)

Interprocess Communication [IPC]

 

- 여러 프로세스간의 데이터를 주고 받을 수 있도록 하는 메카니즘이다.

 

1) 공유 메모리(Shared memory) - 다수의 프로세스에 의해서 공유되는 메모리 영역이다.

 

2) 메시지 시스템(Message system) - 공유되는 변수 하나 없이 데이터를 구조 받을 수 있는 프로세스 통신이다.

 

 

Shared Memory [공유 메모리]

 

- 다수의 프로세스는 공유 메모리와 관련된 시스템 함수를 호출하여 다른 프로세스의 메모리 영역에 접근할 수 있다.

 

- 공유 메모리를 사용하는 IPC는 공유 메모리 영역을 생성하여 프로세스 사이의 통신이 이루어진다.

 

case 1) 프로세스는 공유 메모리 영역을 생성한다.

 

case 2) 다른 프로세스는 생성된 공유 메모리 영역으로 연결한다.

 

 

Message Passing [메시지 전달]

 

- 공유되는 메모리 영역 없이 프로세스 사이에 데이터를 송수신 하거나 동기화 작업을 할 수 있다.

 

데이터를 송수신하는 프로세스가 서로 다른 컴퓨터에 존재하는, 분산 시스템 환경에서 주로 사용하는 메카니즘이다.

 

- Message Passing은 명령어 2개로 구성된다.

 

1) send(message) - 고정된, 다양한 크기의 메시지를 전달한다.

 

2) receive(message) - 고정된, 다양한 크기의 메시지를 전달받는다.

 

- 프로세스 P와 프로세스 Q가 통신하기 위해서는

 

step 1) 프로세스 사이에 연결을 구성한다.

 

step 2) send / receive 함수를 이용해서 메시지를 교환한다.

 

 

직접 통신 [Direct Communication]

 

 

운영체제, 정보처리기사, IPC, interprocess communication, 공유 메모리, shared memory, 메시지 전달, message passing, send, receive, 직접 통신, direct communication, 간접 통신, indirect communication, 메일 박스, mail box, 동기화, synchronization, 블로킹, 논블로킹, blocking

 

1) send(P, message) - 프로세스 P에 메시지를 전달한다.

 

2) receive(Q, message) - 프로세스 Q로부터 메시지를 전달받는다.

 

- 통신 연결 [Communication Link] 의 특징

 

1) 링크는 자동으로 구성된다.

 

2) 생성된 링크는 통신하는 프로세스 사이에서만 유효하다.

 

3) 통신하는 프로세스 사이에서는 오직 하나의 링크만 존재한다.

 

4) 링크는 단방향일 수도 있으나, 대부분 양방향으로 구성된다.

 

- 단점 [Disadvantage]

 

1) 종료된 프로세스의 식별자를 재사용할 때 예기치 않은 결과를 발생할 수 있다.

 

 

간접 통신 [Indirect Communication]

 

- 메시지는 메일박스를 이용해서 전달하거나 전달받을 수 있다.

 

1) 각 메일박스는 고유의 id를 갖는다.

 

2) 프로세스가 메일박스를 공유할 때 프로세스 사이에 통신이 가능하다.

 

 

- 공유 링크 [Communication Link]의 특징

 

1) 프로세스가 공통된 메일박스를 공유할 때 연결이 구성될 수 있다.

 

2) 연결은 많은 프로세스와 관련된다.

 

3) 프로세스 한 쌍은 여러 통신 링크를 공유한다.

 

4) 링크는 단방향 또는 양방향일 수 있다.

 

 

- 생성 과정

 

1) 새 메일박스를 생성한다.

 

2) 메일박스를 이용해서 메시지를 전달하거나 메시지를 받는다.

 

3) 메일박스를 제거한다.

 

 

- 관련 함수

 

1) send(A, message) - 메일박스 A에 메시지를 전달한다.

 

2) receive(A, message) - 메일박스 A에서 메시지를 전달받는다.

 

 

- 메일박스 공유

 

1) P1, P2 그리고 P3는 메일박스 A를 공유한다.

 

2) P1은 전달하고, P2와 P3는 전달받는다.

 

3) 어떤 프로세스가 메시지를 전달 받는가?

 

 

- 해결책

 

1) 최대 2개의 프로세스가 링크를 공유하도록 구성한다.

 

2) 한번에 한 프로세스만 receive 연산을 수행할 수 있도록 한다.

 

3) 송신자가 수신자를 선택할 수 있도록 한다.

 

 

동기화 [Synchronization]

 

- 메시지 전달은 블로킹[Blocking] 모드와 [Non-Blocking] 모드가 존재한다.

 

- 블로킹 모드는 동기로 간주된다.

 

1) 블로킹 Send는 송신된 메시지가 수신될 때까지 송신자를 블록(정지) 시킨다.

 

또는 큐에 메시지가 가득차 있을 때, 블록(정지) 시킨다.

 

2) 블로킹 Receive는 이용 가능한 메시지가 있을 때까지 수신자를 블록(정지) 시킨다.

 

 

- 논 블로킹 모드는 비동기로 간주된다.

 

1) 논 블로킹 Send는 메시지를 전달한 뒤 다른 작업을 처리한다.

 

2) 논 블로킹 Receive는 유효한 메시지를 받던가 또는 null 메시지를 받는다.