다양한 IPC 기법

  1. file 사용
  2. message queue
  3. shared memory
  4. pipe
  5. signal
  6. semaphore
  7. socket

pipe 기법

  • pipe란 하나의 프로세스에 의해 출려도니 데이터의 값을 다른 프로세스의 입력으로 전달되도록 하는 방법
  • 2개의 프로세스간 하나의 pipe만 연결되어 있다면, 단방향 통신만 가능하다.
  • 1대1의 의사소통만 가능
  • 보내어진 순서대로 받는다
  • 용량제한이 있기 때문에, pipe가 꽉차면 더 이상 write할 수 없다.

image.png

image.png

fork를 하면 새로운 프로세스를 생성한다. 원래 프로세스는 부모 프로세스라고 한다. 새로 복사된 프로세스는 자식 프로세스라고 불린다. 부모 프로세스가 있을때, pipe로 fd를 생성한다. fd[1]을 이용해서 부모 프로세스에서는 data 를 write를 할 수 있다. 자식 프로세스는 fd[0]을 통해서 데이터를 read할 수 있다. (단, 단방향 통신이다)

메시지 큐(message queue)

image.png

image.png

  • 데이터 통신에서 송신측과 수신측의 중간 단계노드에서 전달할 메시지를 임시보관하기 위해서 사용되는 대기열 의미
  • 송신측과, 수신측 중간에 메시지를 보관하는 대기열이 존재
  • FIFO 정책으로 데이터 전송
  • message queue는 부모/자식이 아니라, 어느 프로세스간에라도 데이터 송수신이 가능
  • 먼저 넣은 데이터가 먼저 잃혀진다.
  • 파이프와 비교했을때, 양방향 통신이 가능하다

ipc기법과 커널 모드

pipe,message queue는 모두 kernel 공간의 메모리를 사용한다.
image.png

shared memory(공유 메모리)

  • 통신하는 프로세스들간에 메모리를 공유하는 것
  • 같은 메모리를 공유함으로써 정보교환이 이루어 진다.

image.png

image.png

프로세스간 커뮤니케이션

IPC 기법 이지만, 이외에도 많이 사용되는 두 가지 기술이 있다.

  • 시그널
  • 소켓

시그널(signal)

  • 유닉스에서 30년이상 사용된 전통적인 기법
  • 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생되었는지를 알려주는 기법
  • 프로세스 관련 코드에 관련 시그널 핸들러를 등록해서, 해당 시그널 처리 실행
    • 시그널 무시
    • 시그널 블록(블록을 푸는 순간, 프로세스에 해당 시그널 전달)
    • 등록된 시그널 핸들러로 특정 동작 수행
    • 등록된 시그널 핸들러가 없다면, 커널에서 기본 동작 수행

주요 시그널

  • SIGKILL : 프로세스를 죽여라
  • SIGALARM : 알람을 발생한다
  • SIGSTOP : 프로세스럴 멈춰라
  • SIGCONT : 멈춰진 프로세스를 실행해라
  • SIGINT : 프로세스에 인터럽트를 보내서 프로세스를 죽여라
  • SIGSEGV : 프로세스가 다른 메모리영역을 침범했다.

소켓(socket)

  • 소켓은 네트워크 통신을 위한 기술
  • 기본적으로는 클라이언트와 서버등 두 개의 다른 컴퓨터간의 네트워크 기반 통신을 위한 기술
  • 소켓을 하나의 컴퓨터 안에서, 두 개의 프로세스간에 통신 기법으로 사용 가능

image.png