IPC (Inter Process Communication)

이유석·2022년 2월 4일
0

CS - Operating System

목록 보기
6/20


IPC

정의

  • 프로세스는 독립적으로 실행된다. 즉, 독립 되어있다는 것은 다른 프로세스에게 영향을 받지 않는다고 말할 수 있다.

  • 이런 독립적 구조를 가진 프로세스 간의 통신 을 해야 하는 상황이 있을 것이다. 이를 가능하도록 해주는 것이 바로 IPC 통신 이다.

프로세스 간의 통신이 필요한 이유

  • 정보 공유
  • 연산 속도 향상
  • 모듈화 (기능의 분리를 위해)
  • 편리성 (사용자가 여러 작업을 동시에 수행해야 할때)

프로세스는 커널이 제공하는 IPC 설비를 이용해 프로세스간 통신을 할 수 있게 된다.

커널 : 운영체제의 핵심적인 부분으로, 다른 모든 부분에 여러 기본적인 서비스를 제공해줌


Producer - Consumer Problem

정의

  • IPC를 위해, 생산자 프로세스는 소비자 프로세스가 필요로한 정보 생산 후 전송
  • 이를 위해 Buffer를 공유한다.

Buffer

  • 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 해당 데이터를 보관하는 메모리의 영역
  • 특징에 따른 분류
    • unbounded-buffer : buffer의 크기 제한이 없다.
      • 소비자 : 버퍼에 아무 데이터가 없을 시, 기다린다.
      • 생산자 : 버퍼가 가득 차 있어도 기다리지 않는다. (용량이 무한하기 때문)
    • bounded-buffer : buffer의 크기가 고정되어 있다.
      • 소비자 : 버퍼에 아무 데이터가 없을 시, 기다린다.
      • 생산자 : 버퍼가 가득 차 있으면, 소비될때 까지 기다린다.

IPC 종류

Shared Memory

  • 서로 다른 프로세스간에도 일부 주소 공간을 공유하게 함

  • 프로세스가 공유 메모리 할당을 커널에 요청하면, 커널은 해당 프로세스에 메모리 공간을 할당해주고 이후 모든 프로세스는 해당 메모리 영역에 접근할 수 있게 된다.

    • 중개자 없이 곧바로 메모리에 접근할 수 있어서 IPC 중에 가장 빠르게 작동함
  • 서로 다른 프로세스들이 공유 자원에 접근할 때, Synchronize (동기화) 문제 발생 가능

bounded buffer 의 동기화 문제

  • 해결책 : IPC는 (buffer 크기 -1) 의 용량만 사용 가능
    • 마지막 1 개의 공간은 output을 위해 사용됨

Message Passing

  • 커널을 통해 메시지 전달 (공유 자원 없이)

  • IPC 장치가 제공하는 2 가지 연산

    • send(message)
    • receive(message)
  • message의 크기는 고정되거나 변할 수 있다.

Communication Link

  • 정의 : 서로 다른 프로세스들이 메시지를 주고받기 위한 통로

  • Direct Communication (직접 통신)

    • 수신자와 발신자 이름을 명백하게 제시하여야 한다.
    • 한 링크는 한쌍의 프로세스들과만 연관된다.
      • 두 프로세스 사이에 오직 하나의 링크만 존재한다.
    • 보통 양방향 통신이다. (단방향도 가능)
  • Indirect Communication (간접 통신)
    • 메시지들을 mailbox(또는 port)를 통하여 전달된다.
    • 각각의 mailbox는 unique id를 갖는다.
    • 한 링크에 여러 프로세스들이 참여할 수 있다.
      • 두 프로세스 사이에 여러개의 링크가 존재할 수 있다.
    • 단방향 또는 양방향이다.

Synchronization

  • Message Passing 은 blocking 방식 또는 non-blocking 방식으로 구현된다.

  • blocking 방식

    • 발신자는 수신자가 메시지를 받을때까지 block 된다.
    • 수신자는 수신가능한 메시지가 있을때까지 block 된다.
  • non-blocking 방식

    • 발신자는 계속해서 메시지를 Buffer에 보내고 다른 작업을 계속 한다.
    • 수신자는 유효한 메시지 또는 Null 메시지를 받는다.

Ordinary(익명) Pipe

  • 파이프는 두 개의 프로세스를 연결한다.
    • write-end : 하나의 프로세스는 데이터를 쓰기만 한다.
    • read-end : 다른 하나의 프로세스는 데이터를 읽기만 한다.
  • 즉, 단방향(반이중, undirectional) 이다.
    • 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.
  • Parent-Child 관계가 성립해야 한다.

Named Pipe (FIFO)

  • 통신할 프로세스들을 전혀 모르는 상태에서 통신이 가능하다.

  • 즉, 익명 파이프의 확장된 상태로 부모 프로세스와 무관한 다른 프로세스도 통신이 가능한 것

    • 통신을 위해 이름있는 파일을 사용 한다.
  • 단방향(반이중, undirectional) 이다.

    • 양쪽으로 모두 송/수신을 하고 싶으면 2개의 파이프를 만들어야 한다.

Socket (소켓)

  • 프로세스 간 통신의 종착점이다.

  • 클라이언트와 서버가 소켓을 통해서 통신하는 구조로, 원격에서 프로세스 간 데이터를 공유할 때 사용한다.

  • (host의)IP 주소와 port 번호를 통해 연결된다.

  • loop back : 클라이언트와 서버가 같은 호스트에서 TCP/IP를 이용하여 서로 통신할 수 있도록 하는 것입니다.

profile
https://github.com/yuseogi0218

0개의 댓글