Computer Science/Operating System

[OS] IPC (Inter Process Communication)

dbssk 2023. 5. 28. 04:06

IPC (Inter Process Communication)

프로세스는 독립적으로 실행되는 단위이므로 기본적으로 다른 프로세스와의 통신이 어렵다. 이를 해결하기 위해 운영체제의 커널 영역에서 IPC 기능을 제공한다.

IPC 종류

1. PIPE(Anonymous PIPE)

  • 파이프는 두 개의 프로세스를 연결
  • 하나의 프로세스는 데이터를 쓰기만, 다른 하나는 데이터를 읽기만 할 수 있다.
  • 한쪽 방향으로만 통신이 가능하기 때문에 단방향 통신 또는 Half-Duplex(반이중) 통신이라고 부른다.
  • 파이프는 하나의 통신 선로로 읽기 또는 쓰기 중 하나만 가능하므로, 송수신을 동시에 수행해야 하는 경우 두 개의 파이프를 사용해야 한다.
  • 같은 부모 프로세스를 가지는 프로세스들 사이에서만 통신이 가능하다.
  • 읽기/쓰기 중 하나만 하면 되는 단순한 데이터 흐름을 가졌을 때 간단하게 사용할 수 있으나, 읽기와 쓰기를 모두 해야하는 경우에는 복잡해질 수 있다.

2. Named PIPE

  • Named Pipe는 부모 프로세스와 관계없이 다른 프로세스 간에 통신이 가능하다.
  • 파일 시스템에 특정 이름을 부여하여 다른 프로세스가 해당 이름을 통해 파이프에 접근할 수 있다.
  • Named PIPE도 PIPE와 같이 읽기/쓰기가 동시에 가능하지 않다. 하지만 통신선로가 파일로 존재하므로 하나를 읽기 전용으로 열고 다른 하나를 쓰기 전용으로 열어서 전이중 통신을 구현할 수 있다. 결국 PIPE와 같이 두 개의 FIFO 파일이 필요하다.

3. Message Queue

  • 선입선출 자료구조인 Queue를 이용하는 방식
  • 커널에서 관리되는 메모리 공간을 통해 프로세스 간 통신한다.
    • 송신 프로세스는 자신의 주소 공간에서 메시지 큐의 주소 공간으로 메시지를 복사하고, 메시지 큐는 자신의 주소 공간에 복사된 메시지를 수신 프로세스의 주소 공간으로 복사한다.

  • 메시지 큐는 클라이언트와 동기 방식으로 많은 데이터 통신을 수행하면 병목 현상이 발생할 수 있으므로, 서버의 성능 저하를 방지하기 해 메시지 처리를 위임하여 순차적으로 처리하는 방식을 사용한다. 대용량 데이터 처리, 채팅 서비스 등에 사용된다.
  • 다양한 프로세스가 동시에 데이터를 다룰 수 있다는 장점이 있다.

4. Shared Memory (공유 메모리)

  • 공유 메모리는 프로세스 간에 메모리 영역을 공유하여 사용할 수 있도록 하는 것이다.
  • 프로세스가 커널에 공유 메모리 할당을 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해 준다.
  • 이후 어떤 프로세스든 해당 메모리 영역에 접근할 수 있다.
  • 중개자(메시지 큐의 큐) 없이 바로 메모리에 접근할 수 있기 때문에 모든 IPC 중에서 가장 빠르게 작동한다.

5. Memory Map

  • 공유 메모리와 마찬가지로 메모리를 공유한다.
  • 차이점은 Memory Map의 경우 파일을 메모리에 맵핑하여 메모리 영역에 연결한다는 것이다.
  • 프로세스가 파일을 읽거나 쓰기 위해서는 저장매체에서 메모리로 데이터를 이동해야 하는데, 이때 메모리 맵을 사용하면 파일을 메모리에 직접 맵핑함으로써 이동 과정을 줄이고, 파일을 메모리처럼 다룰 수 있다.
  • 이를 통해 대용량 파일을 읽을 때 파일 전체를 메모리에 맵핑하여 읽기 작업을 진행할 수 있다. 이는 파일을 조각조각 나누어 읽는 방식보다 훨씬 효율적이다.
  • 또한, 여러 프로세스가 동일한 파일을 메모리 맵으로 연결하여 데이터를 공유할 수 있다.

6. Socket

  • 프로세스 간의 네트워크 통신을 위해 사용되는 방식이다.
  • 소켓을 생성하고 이름을 지정하여 사용한다.
  • 서버-클라이언트 모델에서 연결, 통신, 종료 등의 작업을 수행하여 데이터를 교환한다.