[OS] IPC (Inter Process Communication)

Jeongyeon Park·2022년 12월 9일
0

OS 기본 개념

목록 보기
4/7

IPC (Inter Process Communication)


프로세스는 독립적으로 실행된다. 즉, 실행 과정에서 다른 프로세스의 영향을 받지 않는다.
따라서, 프로세스 간 통신은 커널 영역이 제공하는 IPC 설비를 이용해야 한다.

같은 프로세스 내에서 Stack 영역을 제외한 주소 공간을 공유하는 스레드와 달리, 각 프로세스는 공유되는 메모리 영역이나 자원이 없기 때문에 직접 통신(데이터 공유/교환)은 불가능하다.

IPC 종류

1. 공유 메모리 (Shared Memory)

  • 데이터 자체를 공유하도록 지원하는 설비로, 프로세스 간에 특정 메모리 영역을 공유해서 사용할 수 있도록 허용
  • 커널에 공유 메모리 영역 할당 요청(프로세스) -> 메모리 공간 할당(커널) -> 모든 프로세스가 해당 메모리 영역에 접근 가능(Read&Write)
  • 각 프로세스는 데이터를 직접 저장하는 것이 아니라 포인터로 공유 메모리 영역을 가리킴
  • 모든 프로세스가 주소값을 기반으로 공유 메모리 영역에 바로 접근할 수 있기 때문에 가장 빠르게 작동하는 IPC 방식

2. 익명 파이프 (Anonymous PIPE)

  • 통신을 위한 메모리 공간(Buffer) 생성
  • 부모-자식/형제 프로세스간의 통신 등 통신할 프로세스를 명확하게 알고 있는 경우 사용 (이외의 외부 프로세스에는 사용 불가)
  • 특정 버퍼를 공유하는 두 프로세스 중 하나는 Write, 다른 하나는 Read만 가능 => 한쪽 방향으로만 통신이 가능반이중(Half-Duplex) 통신
  • 송수신을 모두 할 수 있도록 구현하는 경우 2개의 파이프 생성 (구현이 복잡하고 메모리 공간이 낭비될 수 있는 단점)

3. 네임드 파이프 (Named PIPE)

  • 서로 모르는 상태의 외부 프로세스들 간의 통신에 사용 가능
  • 익명 파이프의 확장형 => 프로세스 간 통신을 위해 이름이 붙여진 장치 파일(FIFO) 사용
  • mkfifo / mknod 함수로 장치 파일 생성
  • 반이중(Half-Duplex) 통신이므로 익명 파이프와 마찬가지로 2개의 파이프를 생성해야 송수신 모두 가능

4. 메시지 큐 (Message Queue)

  • 입출력 방식은 PIPE 방식과 동일하지만, 데이터의 흐름인 PIPE와 달리 Message Queue는 메모리 공간이다.
  • 데이터에 번호를 붙여 Queue에 저장하므로 여러 프로세스가 동시에 데이터를 다룰 수 있음 (하나의 PIPE에서 지정된 두 프로세스만 데이터를 전달할 수 있는 PIPE와의 차이점)
  • 메시지(데이터)에 접근하기 위해 Key 필요
  • Message type(msgtype) 단위로 queue의 데이터에 접근할 수 있음

5. 메모리 맵 (Memory Map)

  • 공유 메모리와 유사하게 메모리 공간을 공유하는 방식으로, 열린 파일에서 공유할 영역의 시작 위치와 종료 위치가 프로세스의 메모리 공간에 mapping
  • 파일을 통해 대용량 데이터를 공유해야 할 때 주로 사용
  • 대부분의 운영체제에서는 프로세스 실행 시 실행 파일의 각 segment를 메모리에 mapping하기 위해 Memory Map 파일 이용
  • Memory Map 파일은 사용하기 이전 혹은 이후에만 파일 크기 변경 가능 (사용하는 도중에는 변경 불가)
  • File I/O가 느릴 때 사용 가능

6. 소켓 (Socket)

  • 네트워크 소켓 통신을 통해 데이터를 공유하는 방식
  • Client와 Server가 소켓을 통해 통신하는 구조로, 원격으로 프로세스 간 데이터를 공유할 때 사용
  • 전이중(Full Duplex, 양방향) 통신
  • 일정 수준 이상 규모의 애플리케이션에서 주로 사용

7. RPC (Remote Procedure Call)

  • 분산 네트워크 환경에서 자주 사용
  • 원격 프로시저 호출 -> 다른 주소 공간(프로세스)에 저장된 함수나 프로시저 실행 가능
  • 서로 다른 PC에 저장된 데이터를 공유하는 방식(Stub 활용)

IPC 종류 비교

종류Shared MemoryPIPENamed PIPEMessage QueueMemory MapSocket
용도다른 프로세스와 양방향 통신부모-자식간 단방향 통신다른 프로세스와 단방향 통신다른 프로세스와 단방향 통신다른 프로세스와 양방향 통신다른 시스템과 양방향 통신
매개체메모리파일파일메모리파일+메모리소켓
통신단위구조체StreamStream구조체페이지Stream
통신방향양방향단방향단방향단방향양방향양방향
통신범위동일 시스템동일 시스템동일 시스템동일 시스템동일 시스템동일+외부 시스템


References

0개의 댓글