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