IPC 종류

4e5ung·2021년 6월 21일
0

IPC

프로세스들 사이에 서로 데이터를 주고받는 행위.

  • PIPE
  • Named PIPE
  • Message Queue
  • Shared Memory
  • Memory Map
  • Socket
  • Semaphore

PIPE

  • 파이프는 두 개의 프로세스를 연결하고 하나의 프로세스는 데이터를 쓰기만 하고, 다른 프로세스는 데이터를 읽기만 함.
  • 부모 자식(프로세스) 간에 단방향 통신으로 자주 사용.(한쪽 방향으로만 통신이 가능한 PIPE의 특징 때문에 Half-Duplex(반이중) 통신)
  • 읽기/쓰기, 즉 송/수신을 모두 하기 원한다면 두 개의 파이프를 만들어야 함.
  • read()와 write()가 기본적으로 block mode로 작동되기에 프로세스가 read 대기중이라면 read가 끝나기전에는 write를 할 수 없음.

장점

  • PIPE는 간단하게 사용할 수 있음.
  • 한쪽 프로세스는 단지 읽기만하고 다른 프로세스는 단지 쓰기만 하는 단순한 데이터 흐름에 적합.

단점

  • Full-Duplex(전이중) 통신 방식으로 활용하려면 PIPE를 두개 만들어야 하는데, 구현이 꽤나 복잡해 질 수 있음.
  • buffer가 상대적으로 작기때문에 overflow 유발.
  • 부모 자식 관계의 프로세스들 사이에서 가능.

Named PIPE

  • 통신을 할 프로세스가 명확히 알 수 있는 경우 사용.
  • 부모프로세스와 무관하게 전혀 다른 모든 프로세스들 사이에서 통신이 가능, 프로세스간에 통신을 위해 이름이 있는 파일을 매개체로 사용.
  • mkfifo를 통해 Named PIPE를 생성, mkfifo가 성공하면 이름이 명명된 파일이 생성되고 이를 활용해서 프로세스 간에 통신.

장점

  • PIPE와 동일.

단점

  • PIPE와 동일.

Message Queue

  • FIFO(First-In First-Out, 선입선출) 자료구조를 가지는 통신설비로 커널에서 관리.
  • 입출력 방식으로보면 위에 Named PIPE와 동일하지만 Named PIPE는 데이터의 흐름이라면 Message Queue는 메모리.
  • Message Queue에 쓸 데이터에 번호를 붙힘으로써 다수의 프로세스가 동시에 데이터를 쉽게 다룰 수 있음.

장점

  • 비동기 방식이기에 방대한 처리량이 있다면 큐에 넣은 후 나중에 처리 가능.
  • 다수의 프로세스들이 큐에 메시지를 보낼 수 있고 다수의 프로세스들이 큐로부터 메시지를 꺼낼 수 있음.
  • 분산처리 및 경쟁처리 방식에 사용 가능.

단점

  • 메시지 무결성 확보가 안됨.
  • Queue에 데이터를 넣고 나오는 과정에서 오버헤드가 발생 가능.
  • 데이터가 많이 쌓일수록 추가적인 메모리 자원이 필요.

Shared Memory

  • 프로세스간 메모리 영역을 공유해서 사용할 수 있도록 허용.
  • 프로세스가 공유 메모리 할당을 커널에 요청하면 커널은 해당 프로세스에 메모리 공간을 할당.

장점

  • 공유 메모리는 중개자 없이 곧바로 메모리에 접근할 수 있기 때문에 모든 IPC중에서 가장 빠르게 작동.
    (커널메모리영역에서 관리, 빠르게 접근 가능)

단점

  • 메시지 전달 방식이 아니기에 데이터를 읽어야하는 시점을 알 수 없음.
  • 커널 설정에 종속적이기에 사용하기전에 커널에서 허용하고 있는 공유메모리 사이즈를 확인 필요.

Memory Map

  • 메모리 영역을 공유해서 사용할 수 있도록 허용.
  • 열린 파일을 메모리에 맵핑시켜서 공유.

장점

  • 데이터가 메모리에 이미 올라와있는 것처럼 간단하게 접근 가능.
  • 일반적인 파일 IO에 비해 나은 성능.
  • 비동기 IO를 사용하지만 시스템에서 처리해주기 때문에 스레드 문제를 걱정할 필요 없음.

단점

  • 일반 파일 IO에 비해 상당히 많은 메모리를 요구.
  • 많은 데이터를 얼마나 오랫동안 메모리에 유지할 지 컨트롤할 수 없음.

Socket

  • 같은 도메인 내에서 연결 될 수 있고 프로세스들 사이의 통신을 가능.
  • 서버에서는 bind, listen, accept 진행해 소켓 연결을 위한 준비.
  • 클라이언트에서는 connect을 통해 서버에 요청하고 연결이 수립 된 후에서는 socket에 send 함으로써 데이터를 주고 받음. (연결이 끝나면 반드시 close()로 clear)
    -네트워크를 통해 프로세스간에 통신을 진행한다

장점

  • 서버/클라이언트 환경을 구축하는데 용이.
  • 범용적인 IPC로써 양방향 통신이 가능.
  • 패킷 단위로 주고 받음으로 직관적으로 이해하기 쉬운 코드를 만들 수 있음.

단점

  • Internet UDP와는 달리 경로를 지정할 수 없음.(다중의 클라이언트를 받아들이는 서버의 경우 문제가 될 수 있음)

Semaphore

  • 프로세스 간 데이터를 동기화하고 보호하는데 그 목적이 있음.
  • 운영 체계 또는 프로그램 작성 내에서 공유 자원에 대한 접속을 제어하기 위해 사용되는 신호.

장점

  • 많은 Thread들은 크리티컬 섹션을 허락받아야 사용 가능.(크리티컬 섹션끼리충돌 발생 하지 않음, 동기화)

단점

  • 많은 Thread들은 block을 당할 수 있음. 즉, CPU가 가만히 waiting하는 시간 낭비가 발생.

정리

IPC 종류PIPENamed PIPEMessage QueueShared MemoryMemory MapSocket
공유 매개체파일파일메모리메모리파일+메모리소켓
통신 단위StreamStream구조체구조체페이지Stream
통신 방향단방향(부모-자식)단방향단방향양방향양방향양방향
통신 범위동일 시스템동일 시스템동일 시스템동일 시스템동일 시스템동일 +외부시스템

ref:) https://www.byfuls.com/programming/read?id=63

0개의 댓글