Buffering, 버퍼링, Message 저장 방식
앞선 포스트에서 IPC를 통해서 Process간의 통신이 어떻게 이루어 지는지 얘기했다. 그럼 각각의 연결에서
송신된 Message를 어떻게 저정하는지에 대한 방법에 대해 알아보자.
각각의 링크별로 Message를 저장하기 위한 구현 방법. 이를 Buffering이라고 한다. 이 구현방법은 Queue의 크기를
얼마로 잡느냐에 따라서 아래의 3가지로 나눌수 있다.
Zero Capacity : Queue의 크기가 0인 경우, No-Buffering. 즉, Sender는 Receiver가 Message를 전부 받을 때까지
대기 할 수 밖에 없다. 이러한 Process 동기화 방식을 rendezvous이라고 한다.
Bounded Capacity : Queue의 크기가 한정된 수 n일때, Auto Buffering. 만일 Queue의 여유 공간이 있을 경우에는 Sender는
Message를 Queue에 기록하고 다른 일을 수행한다. 하지만 Queue의 여유 공간이 없을 경우에는 Sender는 Queue의
여유공간이 생길때까지 대기하게 된다.
Unbounded Capacity : Queue의 크기가 무한일때 , Auto Buffering, Sender는 Queue에 Message를 기록하고 다른일을 수행한다.
Zero Capacity를 제외하고 나머지 방식들은 Sender는 Receiver가 Message를 접수 했는지 알 수가 없다. 때문에 만일
상대방이 Message를 수신한 다음에 다음 명령을 수행하려고 한다면 별도의 확인 절차를 거쳐야하만 한다. 즉,
P Q
Send(Q, Message) Receive(P, Message)
Receive(Q, Message) Send(P, "Acknowledgment")
Exeption Condition, 오류 처리
이러한 Message방식의 경우 대체적으로 분산 시스템에서 유용하기에 많이 사용되고 있지만 Process간의 여러 물리적인
매체가 존개하기 때문에 Error이 발생할 확률이 높을 뿐더러 발생 위치도 다양하다.
Proecess Terminate
만일 종료된 Process Q의 Message를 Process P가 기다리고 있다면 P는 무한정 대기하게 된다.
때문에 이럴 경우 P를 종료시키거나 Q의 종료 여부를 P에게 통보해야 한다.
또한 종료된 Q에게 P가 Message를 송신 했다고 가정하자. Auto Buffering의 경우에는 Q의 처리 여부를 알려고 하지 않는한
그냥 계속 작업을 진행하면 된다. 하지만 No-Buffering의 경우에는 P는 계속 Block된다. 이때 역시 Q의 종료여부를 통보해야 한다.
Lost Message
여러가지 물리적인 매체를 통해 전송되는 도중 Message가 소실될 가능성도 있다. 이럴 경우에는
O.S나 Process가 Lost 여부를 검출해서 다시 송신시키거나 O.S가 Lost여부를 검출해서 Process에게 통보하는 방법등이 있다.
Lost를 여부를 검사하는데는 시간을 정해 그동안에 Ack신호가 돌아 오지 않을 경우 Lost되었다고 가정하는 Time-out방식등이 있다.
'C.E > OS' 카테고리의 다른 글
Thread - Multi-Thread VS Multi-Process (0) | 2013.12.09 |
---|---|
Thread - Thread란? (0) | 2013.12.09 |
Process - InterProcess Communication(IPC)_1 (0) | 2013.12.09 |
Process - Operation on Process (0) | 2013.12.09 |
Process - Schedulers (0) | 2013.12.09 |