본문 바로가기

Programming/Operating System

운영체제 · 프로세스 간 통신


프로세스 간 통신 (IPC, Inter Process Communication)


정의 : 프로세스끼리 자원이나 데이터를 서로 주고받는 행위 또는 그에 대한 방법이나 경로

✓ 프로세스는 본래 독립적이나, 상황에 따라 프로세스끼리 협력해야 하는 경우가 있다. 이 경우, 프로세스 간 자원/데이터 공유가 필요한데, 이때 필요한 것이 IPC이다.






IPC가 필요한 이유


정보 공유 (Information sharing) : 여러 사용자가 동일한 정보를 필요로 할 수 있다.

계산 가속화 (Computation speedup) : 특정 작업(task)를 빠르게 실행하기 위해, 해당 작업을 부분 작업(서브 태스크)으로 나눠서 병렬로 실행하게 할 수 있다.

모듈성 (Modularity) : 특정한 시스템 기능을 별도의 프로세스(스레드)로 구분하여 모듈식 형태로 시스템을 구성할 수 있다.

편의성 (Convenience) : 여러 사용자들이 동시에 많은 작업을 수행할 수 있다.






IPC의 종류


✓ IPC 기법은 크게 메시지 전달과 공유 메모리로 나뉜다.


메시지 전달 (Message passing)

  • 특징 : IPC를 위해 커널을 통해 메시지를 전달하는 방식으로 자원이나 데이터를 주고받는다.
  • 장점 : 별도로 다른 것을 구축할 필요 없이 커널을 이용하기 때문에 구현이 비교적 쉽다. 
  • 단점 : 커널을 이용하기 때문에, 시스템 콜(System call)이 필요하며 이로 인해 오버헤드가 발생한다.
  • 종류 : 파이프, 시그널, 메시지 큐, 소켓


공유 메모리 (Shared memory)

  • 특징 : IPC를 위해 공유 메모리 영역을 구축하고, 공유 영역을 통해 자원이나 데이터를 주고받는다.
  • 장점 : 커널 의존성이 낮기 때문에 속도가 빠르다. 유저 레벨에서 IPC가 가능하기 때문에, 통신이 자유롭다.
  • 단점 : 자원과 데이터를 공유하기 때문에 동기화 이슈가 발생한다.


[그림 1] 메시지 전달과 공유 메모리





메시지 전달 모델


파이프 (Pipe)

  • 특징 : 하나의 프로세스가 파이프를 통해 다른 프로세스로 메시지를 직접 전달하는 방식
  • Half-duplex 방식이기 때문에, 데이터는 한쪽 방향으로만 이동한다. 양방향 통신을 하기 위해서는 두 개의 파이프가 필요하다.
  • 파이프에 용량 제한이 있기 때문에 이용에 제약이 있다.


시그널 (Signal)

  • 특징 : 프로세스 ID를 통해 특정 프로세스에게 메시지를 전달하는 방식
  • 시그널 ID에 따라 어떤 이벤트인지 알 수 있다.


메시지 큐 (Message Queue)

  • 특징 : 고정 크기의 메시지를 연결 리스트를 통해 통신하는 방식
  • 메시지 단위의 통신이며, 메시지 큐 ID를 통해 통신을 한다.


소켓 (Socket)

  • 특징 : 네트워크 상에서 프로세스 간에 통신하는 방식
  • Local 뿐만 아니라, Remote 통신이 가능하다.