IPC(InterProcess Communication)

노지환·2022년 2월 11일
0

운영체제

목록 보기
3/5

IPC(InterProcess Communication)

사용하는 이유?

Q) process간의 통신을 위해서! → (왜 통신해야하는데?)

A)

Information sharing(정보를 공유해야해서!)

Computation speedup(계산 속도가 빨라져서!)

modularity(모듈성?)

Convenience(편리해요!)

+전체적으로 보면, 멀티코어나 멀티CPU에서 멀티 프로세싱을 하기 위해서이다. 그 와중에 프로세스끼리 소통을 하려면 필요하기 때문이다

IPC의 종류

  • Shared memory(오른쪽) 특정공간(한 프로세스가 가지고 있는 부분)을 다른 프로세스가 접근할 수 있게 해준다!
  • Message passing(왼쪽) process A와 process B가 소통할 수 없기 때문에 kernetl을 통하여 데이터가 전송된다.

추가적으로,

  • Message Queue
  • Socket
  • ordinary&named pipe

이 있다. 추가적인 방식들은 client/server architecture에서 사용하는 communication 방법이다.

Shared Memory

shared memory를 구현하는 모델이 있다.

Producer-Consumer Model

두 프로세스가 통신할 때, 한쪽은 데이터 생산자(Producer) 역할, 다른 한쪽은 데이터를 소비(Consumer)하는 역할만 한다.

생산자와 소비자가 데이터를 주고받을 때, shared memory가 버퍼 역할을 한다.

버퍼는 circular buffer를 사용한다.

Message Passing

message passing은 shared memory를 사용하지 않기 때문에 시작하기위해서는 절차가 필요하다.

  1. communication link를 만든다.(이미 존재한다면, 다시 만들 필요는 없다!)

  2. basic primitive를 이용하여 메시지를 교환한다.

    두가지 basic primitive가 존재한다.

    send(message, dstination) or send(message)

    receive(message, host) or receive(message)

또한, message passing을 하는 방식에는 4가지가 있는데,

Direct / Indirect Communication

Synchronous / Asynchronous Communication

기본적인 메시지의 구조는 header와 body, 2부분으로 나뉜다.

Direct Communication

두개의 프로세스가 직접적으로 연결되는 것.

direct Communication에서 communication link의 특징

  • link는 자동적으로 생성된다
  • one pair processes에 링크되어 생성된다.(다른 프로세스가 껴들지 못한다!)
  • 한 링크에는 한 쌍의 프로세스만 가능하다.
  • link는 unidirectional(단방향)일 수 있지만, 대부분은 bi-directional(양방향)이다.

Indirect Communication

mailbox라는 중간 매개체를 통하여 메시지를 주고받는 것.

indirect Communication에서 communication link의 특징

  • 프로세스들이 common mailbox를 공유한다 했을 때만 link가 생긴다.
  • 하나의 link는 많은 process와 연결되어있다.
  • 프로세스 각각의 쌍들(each pair of processes)은 여러 communication link를 공유할 수 있다.
  • unidirectional 또는 bi-directional link가 가능합니다!

Synchronization

보내고 받는 process가 동기화 되어 있다는 것 → sender와 receiver가 동시에 통신을 위한 행동을 해야한다.

동기화 하는 방법에는 Blocking과 Non-blocking 두가지가 있다.

Blockingsynchronous된 방법이고,

Non-blockingnonsynchronous된 방법이다.

Blocking

Blocking send: sender block이 메시지를 받을 때까지 기다린다(block).

Blocking receive: receiver가 메시지를 사용할 수 있을 때까지 기다린다(block).

(non-blocking의 receive를 보면 좀 더 이해가 간다!)

Non-Blocking

Non-blocking send: sender가 메시지를 보내고 다른 할 일 한다.

Non-blocking receive: valid하거나 null이거나 메시지를 받는다.
여기서 공부를 해봅시다

참고

https://www.geeksforgeeks.org/inter-process-communication-ipc/

대학교 운영체제 수업자료

추가적으로..

Sync, Async, blocking, non-blocking에 대한 설명이 추가되면 좋을 거 같아서 자료를 첨부한다. (스스로도 헷갈릴 때 와서보자!)
첨부1
첨부2

profile
기초가 단단한 프로그래머 -ing

0개의 댓글