본문 바로가기
대딩/운영체제

IPC(Inter Process Communication)_Message queue/Shared memory/Sockets

by 경아ㅏ 2022. 5. 11.

IPC(Inter Process Communication)

IPC란, 프로세스가 다른 프로세스와 협력을 하면서 일을 처리할 때 서로 정보를 주고 받는 일종의 프로토콜입니다.

Unix와 Linux에서의 IPC는 다음과 같은 것들이 있습니다. 

 

  • pipes
  • FIFOs
  • message queue
  • shared memory
  • sockets

 본 포스팅에서는 Message queue, Shared memory, Sockets에 대해 다룹니다.

 

 

Message queue

프로세스 A와 B가 서로 데이터를 주고 받으려고 할 때, 이를 커널에 요청하면 커널은 Message queue를 만들어줍니다. 프로세스 A가 Message queue에  메세지를 남기면, 프로세스 B가 message queue에서 해당 메세지를 읽어갑니다.

 

 

Message queue의 가장 큰 장점은 커널이 관리를 담당하기 때문에 안정성이 높고 동기화가 편하다는 것입니다. 프로세스 A가 아직 메세지를 남기지 않았는데 프로세스 B가 메세지를 읽어가려고 할 때, 프로세스 B가 기다릴 수 있도록 커널이 관리하는데 이를 동기화 라고 합니다. 

 

하지만, 커널의 개입이 빈번한 만큼 오버헤드가 크고 속도가 느리다는 단점이 있습니다.

 

 

Shared memory

프로세스 A와 B가 서로 데이터를 주고 받으려고 할 때, 커널은 두 프로세스가 접근할 수 있는 공간(shared memory)를 할당합니다. 프로세스들은 커널의 개입 없이 shared memory에 정보를 쓰고 읽습니다. Shared memory는 동적 할당된 메모리이며, 프로세스들이 종료되기 전 Delete 해주어야 합니다.

 

 

커널의 개입이 없는 만큼 속도가 빠르다는 장점이 있습니다. 그러나, 안정성이 낮고 동기화 문제를 개발자가 직접 컨트롤해야 한다는 단점이 있습니다.

 

 

Sockets

Message queue, Shared memory은 한 시스템 안에서 동작하는 여러 프로세스들 간의 통신을 다루는 반면, Socket은 원격 프로세스 간 통신을 담당합니다. 

 

Socket의 예시로는 다음과 같은 것들이 있습니다.

 

1) RPC(Remote Procedure Call):  원격에 구현되어있는 Procedure를 호출해서 사용하는 방법입니다.

2) RMI(Remote Method Invocation): RPC의 자바 버전으로, client 단에서 개발을 진행할 때 서버에 있는 라이브러리 function을 원격으로 호출하여 사용 가능합니다.

 

 

댓글