운영체제

05. 프로세스간 통신

syom 2021. 9. 5. 03:25

0 - 프로세스가 동시에 동작하는 방법 두가지

  • 독립적 (문제없음) : 공유하는 데이터가 없는 것
  • cooperating process (이때 문제가 생길 수 있음) : 공유하는 데이터가 있는 것

1 - IPC : Inter-Process Communication

: 프로세스끼리 데이터를 공유할 때 필요한 메커니즘

  • 데이터를 주고 받는 것

1.1 - IPC 의 기본적인 요소

  • 메모리를 공유하는 것 (shared memory)
  • 메세지를 주고 받는 것 (message passing)

1.2 - Producer-Consumer Problem

  • 예 : 컴파일러가 어셈블리 코드를 생산하고, 어셈블러가 소비하는 것
  • 예 : 웹서버가 HTML 파일을 생산하고, 브라우저가 소비하는 것

2 - shared-memory

  • 각 프로세스가 동시에 실행되고 있다고 가정할 때, 생산자는 버퍼를 채우고 소비자는 버퍼를 비운다.
  • 각 프로세스가 공유된 메모리를 사용한다
  • 관리는 O/S가 함
  • 구조 : 실제로 이렇게 정의하진 않지만 공유된 메모리에 선언되어있다고 가정

  • 생산자의 경우

  • 소비자의 경우

2.1 - shared-memory 의 문제점

  • 공유된 메모리를 응용프로그램 프로그래머가 관리를 해야한다

3 - Message-Passing

  • O/S 가 각 프로세스가 서로 메세제를 주고받도록 api를 제공하는 것

3.1 - message-passing facility

  • send(message)
  • receive(message)

3.2 - message-passing 구조

  • 생산자의 경우

  • 소비자의 경우

(O/S에서 처리하기때문에 단순히 보내고 받기만 한다)

⇒ 다수의 prosumer 가 있는 경우는 공유메모리를 써야할 것이다

3.3 - communication Links

  • 두개의 프로세스가 있다면 서로 보내고 받는것만 한다
  • 종류
    1. 직접 공유 (direct): send(P, message) / receive(Q, message)
    2. ⇒ 링크는 자동적으로, 확실한 두개의 프로세스, 확실한 하나의 링크
    3. : 명시적으로 이름을 정해서 보내는 것
    4. 간접 공유 (indirect): mailbox : 메세지를 보내고, 받는 객체⇒ 두개의 프로세스가 mailbox를 공유⇒ 복잡한 커뮤니케이션도 가능
    5. ⇒ 두 개 이상이여도 관계없음
    6. : send(A, message) / receive(A, message)
    7. : 매개체(mailboxes, ports)를 통해서 보내는 것
    8. synchronous : 필요할때
    9. asynchronous : 아무데나 때되면
    10. 자동으로
    11. 명시적으로

3.4 - OS가 제공해주는 것

  • mailbox 를 새로 만드는 것
  • mailbox 를 통해 메세지를 주고 받게 하는것
  • mailbox 를 지우는 것

3.5 - 구현할때 두가지 다른 옵션

  • blocking or non-blocking : synchronous or asynchronous
  • Blocking send 는 간단하게 생산자가 보내려는 크기보다 mailbox 크기가 작을 때 다 보내질 때 까지 대기(block)하는것이고, non-blocking send 는 send 하고 난 뒤에 OS 측에서 다 보내줄거라 보장하고 다른 할 일을 하는 것을 말한다
  • Blocking receive / non-blocking receive
  • blocking 은 느린 대신 다 보내질때 까지 대기하기 때문에 동기화가 되어있다 (synchronous) non-blocking 은 상대가 다 받았다고 확정할 수 없다(asynchronous)0 - 프로세스가 동시에 동작하는 방법 두가지

'운영체제' 카테고리의 다른 글

07. 스레드의 이해  (0) 2021.09.07
06. 프로세스간 통신의 실제  (0) 2021.09.06
04. 프로세스의 생성  (0) 2021.09.04
03. 프로세스의 이해  (0) 2021.09.03
02. 운영체제의 개념과 구조  (0) 2021.09.02