IPC

신명철·2022년 2월 3일
0

OS

목록 보기
9/27

프로세스 간 통신

프로세스가 시스템에서 실행 중인 다른 프로세스들에 영향을 주거나 받는다면 이는 협력적인 프로세스들이다. 프로세스 협력을 허용하는 환경을 제공하는 데는 다음과 같은 이유가 있다.

  • 정보 공유(Information Sharing)
    • 여러 응용 프로그램이 동일한 정보(ex. 복사, 붙여넣기 등)에 접근을 한다면 이를 병행적으로 접근할 수 있는 환경을 제공해야 한다.
  • 계산 가속화(Computation Speedup)
    • 특정 태스크(Task)를 빨리 처리하려면 이를 서브 태스크로 나누어서 병렬로 실행하게 해야한다.
  • 모듈성(Modularity)
    • 시스템의 기능을 별도의 프로세스들 혹은 스레드들로 나누어서 모듈식 형태로 시스템을 구성할 수 있다.

IPC (InterProcess Communication)

프로세스는 OS 로 부터 독립적인 메모리 공간을 할당받는다. 따라서, 프로세스 간에 데이터를 교환하기 위해서는 프로세스 간 통신(InterProcess Communication, IPC) 가 필요하다.
IPC 에는 두 가지 모델이 있다.

  • Shared Memory System
  • Message Passing System

Shared Memory System

  • 공유메모리는 협력 프로세스간 공유 메모리 영역이 생성되고 해당 영역을 기반으로 정보 교환이 이루어진다. 동기화(Synchronization)가 중요한 분야이다.
  • 속도가 빠르기 때문에 많은 양의 데이터를 전달하는 경우에 많이 사용한다.
  • 다음과 같은 두 가지 유형의 버퍼가 사용된다.
    • 무한버퍼 : 버퍼 크기에 제한이 없어서 소비자 프로세스는 생산을 기다려야 할 수도 있지만, 생산자 프로세스는 언제든 새로운 데이터를 생산할 수 있다.
    • 유한버퍼 : 버퍼의 크기가 고정되어 있어서 버퍼가 비어있으면 소비자 프로세스는 대기해야 한다. 버퍼가 차 있으면 생산사 프로세스가 대기한다.

Message Passing System

  • 협력 프로세스들 간에 교환되는 메세지를 통해 통신이 이루어진다.

Naming

  • 통신을 원하는 각 프로세스는 서로의 이름을 명시한다.
    send(sender, message)
    receive(receiver, message)
  • 다음과 같은 특징을 갖는다.
    • 통신을 원하는 모든 프로세스의 쌍 사이에 연결이 자동적으로 구축된다.
    • 프로세스들은 통신하기 위해 서로의 신원만 알면 된다.
    • 연결은 정확히 두 프로세스 사이에서만 연관된다.
    • 통신하는 프로세스들의 각 쌍 사이엔 정확하게 하나의 연결이 존재해야 한다.

Synchronization

동기화에는 다양한 옵션이 존재한다. 동기식, 비동기식 방식으로 메시지가 전달된다.

  • Sync Send : 송신하는 프로세스는 메시지가 수신 프로세스 또는 메일박스에 의해 수신될 때까지 Block 된다.
  • Async Send : 송신 프로세스가 메시지를 보내고 작업을 재시작한다.
  • Sync Receive : 메시지가 이용 가능할 때까지 수신 프로세스가 Block 된다.
  • Async Receive : 송신하는 프로세스가 유효한 메시지 또는 NULL 을 받는다.

Buffering

교환되는 메시지들은 임시 큐에 들어가 있다. 임시 큐를 구현하는 방법은 다음과 같이 3가지로 나뉜다.

  • Zero Capacity(무용량) : 큐의 최대 길이가 0 이다. 즉, 링크는 자체 안에 대기하는 메시지들을 가질 수 없다. 이 경우 송신자는 메시지를 수신할 때까지 기다려야 한다.
  • Bounded Capacity(유한 용량) : 큐는 유한한 길이 n 을 가진다. 즉 최대 n 개의 메시지가 그 안에 들어갈 수 있다. 큐가 만원이 아니면 메시지는 큐에 놓이고, 큐가 만원이면 송신자는 큐 안에 가용 공간이 생길 때 까지 Block 된다.
  • Unbounded Capacity (무한 용량) : 큐가 잠재적으로 무한한 길이를 가진다. 메시지들이 얼마든지 큐 안에서 대기할 수 있다. 그렇기 때문에 송신자는 Block 되지 않는다.
profile
내 머릿속 지우개

0개의 댓글