BOBO's Note

IPC 본문

Operating System

IPC

bobo_hee 2020. 6. 3. 00:21

IPC

IPC는 Inter-Process Communication의 약자로, 프로세스간 통신하는 방법을 의미한다. 프로세스간 통신이란, 프로세스간 데이터를 주고받는 행위이다. 다양한 IPC 방법이 존재하는데, 대표적인 IPC는 다음과 같다.

  • PIPE

  • Named PIPE

  • Message Queue

  • Shared Memory

  • Memory Map

  • Socket

 

PIPE

Half-duplex 통신이다. 다시 말해서 한 프로세스는 write만 다른 프로세스는 read만 가능하다. 한 프로세스가 read, write를 모두 하고 싶으면 파이프를 2개 생성해야 한다.

 

통신할 프로세스를 명확히 알 때 사용할 수 있다. 같은 PPID를 갖는 프로세스들, 즉 부모 프로세스가 동일한 프로세스끼리만 통신할 수 있다.

PIPE

Named PIPE

파이프의 이름을 알면 부모 프로세스와 무관하게 모든 프로세스들끼리 통신할 수 있다. PIPE 방식과 마찬가지로 half-duplex 통신이다.

 

Message Passing

PIPE, Named PIPE가 데이터 스트림으로 통신한다면, 이 방법은 메모리 공간을 통해 통신한다. 

 

커널 영역에 메세지 큐가 존재하여, 메세지 큐에 데이터를 enqueue/dequeue 하여 프로세스끼리 데이터를 주고받는다. 즉 user-mode와 kernel-mode의 전환과 데이터 복사로 인한 오버헤드가 존재한다.

 

메세지에 번호를 붙임으로써 여러 프로세스가 동시에 데이터를 다룰 수 있다.

 

Shared Memory

프로세스간 공유하는 메모리 영역을 각 프로세스가 자신의 메모리 공간처럼 사용하는 방법이다(shmat() 시스템 콜을 통해 data 세그먼트에 attach된다). 

 

프로세스가 공유 메모리 할당을 커널에 요청하면, 커널에서 user-space에 메모리를 할당한다. 이 공간은 커널이 관리(=할당 및 해제)하며, 어떤 프로세스든지 포인터를 얻어와 이 공간에 접근할 수 있다. 공유 메모리에 대해 race condition이 발생하지 않도록 동기화 매커니즘을 사용해야 한다.

 

곧바로 메모리에 접근하기 때문에 가장 빠른 IPC 방식이다. 

 

Message Passing과 Shared Memory

Memory Map

열린 파일을 메모리에 매핑하여 공유한다. 주로 대용량 데이터를 공유할 때 사용하는 방법이다.

 

Socket

프로세스와 네트워크 사이의 인터페이스이다.

 

위에서 살펴본 IPC 방법들은 한 host 내의 프로세스끼리 통신하는 방법이라면, 소켓은 주로 다른 host에 존재하는 프로세스끼리 사용하는 방식이다.

Comments