05. 프로세스 간 통신
공룡책 ch03. Process -3-
IPC: Inter-Process Communication
프로세스 간 통신: 서로 다른 프로세스 간의 데이터가 공유(영향을 주고 받음)될 때 필요한 메커니즘 혹은 그런 행위
IPC의 두 가지 기본적인 모델
1. Shared-Memory
통신하고 있는 프로세스가 모두 접근할 수 있는 메모리 공간을 둠
Producer-Consumer Problem
- 프로듀서 프로세스와 컨슈머 프로세스는 동시에 실행됨
- 프로듀서 프로세스는 버퍼에 데이터를 채우고 컨슈머 프로세서는 버퍼를 비움
- 프로듀서 프로세스의 메모리에 컨슈머 프로세스가 접근하게 하거나 컨슈머 프로세스의 메모리에 프로듀서 프로세스가 접근할 수 있다면 문제가 생김.
- 따라서 각 메모리는 private하게 두고 따로 버퍼로 Shared memory를 별도로 두어 문제를 해결할 수 있음
shared_memory 구현
프로듀서 프로세스 코드
item next produced;
while (true) {
/* produce an item in next produced */
while (((in + 1) % BUFFER SIZE) == out)
; /* do nothing */
buffer[in] = next produced;
in = (in + 1) % BUFFER SIZE;
}
컨슈머 프로세스 코드
item next consumed;
while (true) {
while (in == out)
; /* do nothing */
next consumed = buffer[out];
out = (out + 1) % BUFFER SIZE;
/* consume the item in next consumed */
}
두 코드는 동시에 수행된다.
프로듀서는 item을 버퍼에서 in 포인터가 가리키는 곳에 채우고 그와 동시에 컨슈머는 out 포인터가 가리키는 곳에서 다음 소비할 item을 가져온다.
버퍼는 원형 큐 자료구조에서 isFull과 isEmpty 메소드 내의 조건들을 떠올리면 좋다.
((in + 1) % BUFFER SIZE) == out인 경우 다음 생산하여 채울 곳을 out이 이미 가리키고 있으므로 버퍼가 꽉찬 상태이므로 프로듀서는 생산을 멈춘다.
마찬가지로 in == out인 경우 버퍼가 비어 있으므로 컨슈머는 소비를 멈춘다.
2. Message-Passing
커널(OS)가 프로세스 간의 데이터(메시지) 공유를 도와줌. os가 알아서 해주므로 편하지만 shared-memory 방식보다 느림
프로세스는 메시지를 보내거나(send) 받을 수(receive) 있음
direct and indirect communication
-
direct: 프로세스가 상대 프로세스를 알고 있어 메시지를 보내거나 받을 때 해당 프로세스를 명시할 수 있음
- send(P, message): send a message to process P
- receive(Q, message): receive a message from process Q
- 커뮤니케이션 링크가 자동으로 생성된다.
- 정확하게 2개의 프로세스 간의 하나의 링크만 생성됨
-
indirect: 메시지를 메일박스 혹은 포트 port라고 부르는 것에 보내고 받음
- send(A, message): send a message to port A
- receive(A, message): receive a message from port A
- 포트와 연결될 때만 링크가 생성됨
- 2개보다 많은 프로세스가 연결될 수 있음
- os는 메일박스를 create, send, receive, delete 기능을 지원하면 됨
synchronous and asynchronous communication
os에서 실제 메일박스를 구현할 때 선택하는 방식
synchronous = blocking
asynchronous = non-blocking
Blocking send: sender가 메시지가 receive가 완료될 때까지 블록됨(멈춰있음)
Non-blocking send: sender가 메시지를 보낸 이후에도 블록되지 않고 컨티뉴
Blocking receive: receiver가 메시지를 다 받아 available할 때까지 블록됨
Non-blocking receive: receiver가 블록되지 않고 작업을 계속함
Author And Source
이 문제에 관하여(05. 프로세스 간 통신), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yangju0411/05.-프로세스-간-통신저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)