OS #19 IPC 기법

underlier12·2020년 3월 24일
0

OS

목록 보기
19/35
post-custom-banner

19. IPC 기법

다양한 IPC 기법

Pipe

파이프는 기본적으로 단방향 통신이며 fork()로 자식 프로세스를 만들었을 때 부모/자식 간 통신을 가능하게 한다.

코드 예제

다음 예제에서 볼 수 있는 것처럼 fork()를 통해 자식 프로세스를 생성하며 부모 프로세스에는 실제 ID(Integer)값이 들어가며 자식 프로세스에는 0이 들어간다. 이를 통해 구분이 가능하며 fd[1]에서 write, fd[0]에서 read가 가능하다.

Message Queue

메세지 큐도 큐이기 때문에 기본적으로 FIFO 방식으로 데이터를 전송한다. 프로세스 제한 없이 어느 프로세스와도 데이터 송/수신이 가능하다.

코드 예제

파이프와 메세지 큐

두 IPC 기법의 차이는 다음과 같다.

  • 부모/자식 프로세스 간에만 송/수신 가능 여부
  • 단방향(P) vs 양방향(MQ)

두 기법의 공통점은 kernel 공간의 메모리를 사용한다는 점이다.

Shared Memory

공유메모리는 kernel space에 메모리 공간을 확보하고 해당 공간을 변수처럼 쓰는 형식이다. 공유 메모리 키를 가지며 여러 프로세스가 접근 가능하다는 특징이 있다.

코드 예제

Signal

유닉스에서 30년 이상 사용된 전통적인 기법으로 커널 또는 프로세스에서 다른 프로세스에 어떤 이벤트가 발생했는지 알려준다. 프로세스 관련 코드에 해당 시그널 핸들러를 등록하여 다음과 같이 시그널을 처리한다.

  • 시그널 무시
  • 시그널 블록(블록 해제 시 전달)
  • 등록 시그널 핸들러로 동작(등록되지 않을 시 기본 동작 수행)

주요 시그널

  • SIGKILL : 프로세스 강제종료
  • SIGALARM : 알람 발생
  • SIGSTP : 프로세스 정지
  • SIGCONT : 프로세스 재실행
  • SIGINT : 프로세스 인터럽트(종료)
  • SIGSEGV : 프로세스 타 메모리 영역 침범

코드 예제

시그널 핸들러 등록 및 핸들러 구현

Socket

소켓은 네트워크 통신을 위한 기술이며 기본적으로 클라이언트와 서버 등 두 개의 다른 컴퓨터 간 네트워크 기반 통신을 위한 기법이다.

하지만 소켓을 하나의 컴퓨터 안에서 두 개의 프로세스 간 통신 기법으로도 사용이 가능하다.

profile
logos and alogos
post-custom-banner

0개의 댓글