Cooperating Processes
Independent Process vs. Cooperating Process
일반적인 프로그램들은 다른 프로그램들과 협력하지 않는 independent한 프로그램이다.
Independent process는 다른 process의 실행에 영향을 주거나 받지 않는다.
어떠한 프로그램들은 다른 프로그램들과 협력한다.
Cooperating process는 다른 process의 실행에 영향을 주거나 받는다.
다음과 같은 경우에 cooperating process를 사용한다.
- information sharing : 다른 프로그램과 정보를 공유하는 경우
- computation speed up : 나눠서 연산을 수행함으로써 속도를 높이는 경우
- modularity : 여러 프로그램들로 모듈화 하는 경우
- convenience : 다른 여러 개발 편의상
Interprocess Communication (IPC)
프로세스 간 통신을 의미한다.
IPC를 다음과 같이 구분할 수 있다.
- mechanism 관점 : 어떤 방식으로 IPC를 구현할 것인가
- shared memory communication
- 프로세스 간 서로 접근할 수 있는 공유 메모리를 사용한다.
- operation : 공유 메모리에 read/write
- message passing communication
- network channel을 이용한다.
- operation : send/receive
- shared memory communication
- communication link 관점 : 어떻게 link를 사용할 것인가
- logical link
- 프로그래밍 상에서 어떤 방식으로 연결할 것인가
- 물리적인 연결 방법과는 무관
- physical link
- 어떤 물리적인 방식으로 연결할 것인가
- 예시
- mechanism은 shared memory communication을 사용하지만, 프로그래밍은 send/recieve를 사용한다.
- 이는 physical link는 shared memory이지만, logical link는 message passing을 이용한다.
- logical link
- communication types 관점
- direct and indirect communication
- synchronous and asynchronous communication
Communication Type
Direct Communication
프로세스들이 직접적으로 메시지를 주고받는 방식이다.
메시지를 주고받는 상대방을 지정해야 한다.
- <pre>send(P, message)</pre>
- P : 메시지를 받는 destination process
- <pre>receive(Q, message)</pre>
- Q : 메시지를 보내는 source process
다음과 같은 특징을 가진다.
- link들은 자동으로 만들어진다.
- 한 쌍의 프로세스에는 하나의 link만 존재한다.
Indirect Communication
제 3의 영역을 이용해서 메시지를 주고받는 방식이다.
메시지를 주고받는 상대방을 지정하지 않고 제 3의 영역인 mailbox를 지정한다.
다음과 같은 operation이 존재한다.
- create a new mailbox
- send/receive messages through mailbox
- <pre>send(A, message)</pre> / <pre>receive(A, message)</pre>
- A : mailbox
- destroy mailbox
Synchronization
- synchronous : 메시지를 주고받을 때 프로세스가 blocking을 당한다.
- asynchronous : non-blocking 한다. (blocking하 지 않는다.)
휴대폰 간에 메시지를 보내는 것은 blocking이 없으므로 asynchronous로 볼 수 있다.
반면, 전화를 거는 것은 상대방이 받지 않으면 전화를 할 수 없는 blocking이 있으므로 synchronous로 볼 수 있다.
Producer-Consumer Problem
Cooperating process의 대표적인 model이다.
모든 cooperating process는 데이터를 주고받는다.
Data나 information을 제공하는 프로세스를 producer, 제공받는 프로세스를 consumer라고 한다.
정보를 주고받는 매개체를 buffer라고 한다.
Producer는 buffer에 정보를 넣고, consumer는 buffer에서 정보를 꺼내간다.
Buffer에 넣을 수 있는 정보의 크기에 따라 다음과 같이 구분한다.
- unbounded buffer
- buffer에 넣을 수 있는 정보의 크기가 무한한다.(제한되지 않는다.)
- buffer의 크기가 제한되어있지 않다.
- bounded buffer
- buffer에 넣을 수 있는 정보의 크기가 제한되어있다.
- buffer의 크기가 제한되어있다.
Bounded Buffer
정보의 공유에 사용하는 버퍼의 크기가 제한되어 있다.
주로 공유 메모리 영역에 정의되어 있다.
다음과 같은 구조로 정의한다.
#define BUFFER_SIZE 5
typedef struct {
// 주고 받을 데이터의 형식
...
} item;
item buffer[BUFFER_SIZE]; // 버퍼
int in = 0; // producer가 정보를 넣을 때의 위치
int out = 0; // consumer가 정보를 읽을 때의 위치
다음과 같은 문제를 고려해야 한다.
- buffer가 full인데 producer가 쓰는 경우
- consumer가 정보를 읽지 않았을 때 producer가 정보를 넣지 말아야 한다.
- 아무 조건 없이 정보를 in/out 하면 안된다.
- buffer가 empty인데 consumer가 읽는 경우
- consumer가 읽을 정보가 없는데 읽으면 안된다.
- buffer full과 buffer empty가 구분되지 않는 경우
- buffer full과 buffer empty를 구분해야 한다.
- 단순히 <pre>in == out</pre> 이면 구분할 수 없다.
- buffer의 공간이 낭비되는 경우
- 위 두개의 문제를 해결할 때 buffer의 공간이 사용되지 않아서 낭비되는 현상이 발생한다.
- synchronization을 통해서 해결을 할 수 있다.
Bounded Buffer의 문제
'Computer Science > Operating System' 카테고리의 다른 글
Multi-threading (0) | 2021.06.18 |
---|---|
Thread (0) | 2021.06.18 |
프로세스 생성/종료 (0) | 2021.06.17 |
Process Scheduling (Context Switching) (0) | 2021.06.16 |
Process, PCB(Process Control Block) (0) | 2021.06.16 |
댓글