프로세스의 종류
- 프로세스에는 두 개의 타입이 있다. 첫 번째로는 Independent process, 두 번째로는 Co-operating process이다.
- independent processs는 다른 프로세스의 실행에 의해서 어떤 영향도 받지 않는 반면에 co-operating process는 다른 실행된 프로세스에게 영향을 받는다.
- 독립적인 프로세스가 효율적으로 보이겠지만 사실은 co-operative process가 연산 속도, 편의, 모듈화의 관점에서 더 유용하다.
- IPC(Inter process communication)은 프로세스들이 소통할 수 있도록 해준다.
IPC의 종류
- 프로세스들이 소통할 수 있는 방법은 총 두 가지이다. 첫 번째로는 메모리 공유, 두 번째로는 메시지 전달 방식이다. 물론, 운영체제는 이 두 가지 방식을 서로 보완해가며 사용하고 있다.
IPC - 메모리 공유 방법(Shared Memory Method)
- 메모리 공유 방법(Shared Memory Method) : 생산자(Producer)와 소비자(Consumer) 프로세스가 있다고 가정한다. 이 때, 두 프로세스는 버퍼라는 공간 혹은 메모리 위치를 공유하고 있다. 이러한 버퍼에서는 생산자가 아이템을 생산해내는 공간이며, 소비자가 필요하다면 아이템을 소비하는 곳이다.
- 이 방법에는 두 가지의 문제가 있다.
- 첫 번째 문제는 unbounded buffer problem이다. 이 문제는 버퍼에 상한성이 없을 때(limit가 없을 때), 프로듀서가 끊임없이 아이템을 생산해내는 문제이다.
- 두 번째 문제는 bounded buffer problem이다.이 문제는 생산자와 소비자가 메모리를 공유하고 있을 때, 생산자가 아이템을 생산해내게 된다. 그러면 만약, 생산자가 생산해낸 아이템들이 버퍼의 사이즈와 같다면, 생산자는 소비자가 아이템을 소비할 때까지 기대한다. 소비자 또한 사용 가능한 아이템들이 있는지 확인할 때, 만약 아이템이 없다면, 소비자는 생산자가 아이템을 생산할 때까지 기다릴 것이다.
IPC - 메시지 전달 방법(Messaging Passing Method)
- 이 방법에서는 프로세스들은 공유된 메모리를 사용하지 않으면서 서로 소통한다.
- 이 방법에서는 두 개의 순서를 따른다. 첫 번째로는 Communication Link를 만든다.(이미 있다면 굳이 다시 만들 필요가 없다) 두 번째로는 적어도 두 개의 기본적인 동작으로 메시지를 교환한다.(send, receive)
- 메시지의 크기는 유동적일 수도 있고 혹은 제한적일 수도 있다.
- 메시지는 두 개의 부분인 헤더와 바디로 나뉜다. 헤더는 메시지의 type, destination id, source id, message length, control information을 담고 있다. 기본적으로, 메시지는 FIFO 스타일을 이용하여 보낸다.
IPC - 메시지 전달 방법의 Communication Link
- 링크는 메시지의 갯수를 몇 개나 수용할 수 있는지에 대한 수용량에 따라 종류가 다르다.(링크에는 큐가 있는데, 큐의 크기가 다르다는 뜻)
- zero capacity의 경우, 발신자는 수신자가 메시지를 받았음을 알려줄 때까지 기다린다. non-zero capacity의 경우에는, 프로세스는 메시지를 받았는지, 혹은 메시지를 보냈는지 전혀 알 수 없다. 이렇기 때문에 발신자는 수신자와 명시적으로(분명하게 뜻을 보여주는) Communication을 해야한다.
- 이러한 경우를 보충하기 위해서는 direct communication link나 indirected communication link가 있다.
IPC 시스템의 예
- Posix : 공유 메모리 방식
- Mach : 메시지 전달 사용
- Windows xP : 로컬 프로시저 호출을 사용하여 메시지 전달 사용
References
'조열심 카테고리 > Backend 공부' 카테고리의 다른 글
| Django 특정 비밀번호 에러 안 뜨게 하기 (0) | 2022.12.20 |
|---|---|
| Django kakao allauth 구현 (0) | 2022.12.20 |
| [Django] 자기 관리 웹 애플리케이션 제작 -1- (0) | 2022.08.14 |
| [Backend] 1. 메모리와 메모리 관리 (0) | 2022.07.18 |