컴퓨터공학/운영체제

IPC blocking/non-blocking

황태건 2023. 11. 6. 18:41

IPC의 message passing 방식에서, 동기화 방법에 따른 구분(blocking/non-blocking)이 솔직히 조금 헷갈릴 수 있다. 아님 말고

 

blocking과 non-blocking message passing을 '파일 다운로드'에 빗대어 설명할 수 있다.

우리가 어떤 프로그램을 다운받거나 업데이트할 때, 프로그램을 설치하면서도 다른 작업이 가능해서 하던 게임을 계속 플레이할 수 있던 적도 있었고, 반면 프로그램 설치가 완료될 때까지 컴퓨터가 다른 동작을 멈춰 게임이 폭망해버린 경험도 있었을 것이다.

 

앞의 경우를 리눅스에서는 후면(background) 처리, 뒤의 경우를 전면(foreground) 처리라고 한다. 그리고 이 후면 처리 방식으로 진행되는 message passing을 non-blocking, 전면 처리 방식을 blocking이라고 볼 수 있다.

 

프로세스 P1이 blocking send를 실행하면, P1은 상대 프로세스 P2가 이를 전부 받기까지, 즉 '프로그램 설치'가 완료될 때까지 기다려야한다. 마찬가지로 blocking receive를 실행하는 P2는 P1의 전송이 성공적으로 끝나고 P2에서 메세지 수신이 완료될 때까지 다음 작업을 수행할 수 없다.

 

P3과 P4는 non-blocking send, receive로 통신한다고 해보자. P3은 send를 실행하면서 다음 작업을, 즉 '하던 게임 플레이'를 할 수 있다. 게임을 한 판을 끝내고 나면 어느덧 OS가 알아서 메세지 전송을 마무리 해놨을 것이다. P4 역시 receive와 게임 플레이를 동시에 할 수 있다.

 

blocking 방식은 시간은 조금 지체되겠지만 어떤 경우에는 반드시 필요하다. 예를 들어 설치하는 프로그램이 지금 하던 게임에 필요한 툴이라면 어떨까? 당장 사용해야 하는 프로그램을 non-blocking 방식에서 띄엄띄엄 다운받는 건 꽤 곤란한 일일 것이다. 따라서 시스템 설계자는 프로세스 간 동기화 필요성과 실행 시간을 잘 고려하여 두 방식을 적절히 사용해야 한다.

 

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

CPU scheduling 헷갈리기 쉬운 부분  (0) 2023.11.16
멀티 어쩌구 구분하기  (1) 2023.11.08
프로세스 ready&waiting state  (0) 2023.11.03