11.프로세스간 통신 IPC

프로세스간 통신 IPC

 

프로세스간 통신은 메모리 공유다.

 

왜냐면, a 프로세스가 공유되는 메모리에 데이터를 올려놓고 b프로세스가 가져가는 메커니즘이다.

 

이런 매커니즘을 통신이라고도 한다.

 

 

 

 

하지만 운영체제에서 커널이 아래 그림 처럼 두 프로세스의 메모리를 분리해놓는다. 그래서 서로 접근이 불가능하다.(안정성 문제)

 

어떻게 공유 메모리로 접근을 하나?

 

그 해결책은 os 가 제공해준다. IPC 기법이 그 중 하나다.

 

 

 

메일 슬롯의 동작원리

 

리시브 프로세스가 데이터를 받고 싶을때, 시스템 콜을 통해서 우체통을 하나 만든다. os가 만든다.

그럼 우체통이 생성되고 우체통 주소가 생성된다. 

샌더 프로세스는 우체통 주소를 가지고 우체통에 데이터를 집어 넣는다. (시스템콜 함수를 통해서 os가 넣어준다.)

리시브 프로세스는 시스템 콜 함수를 통해서 데이터를 가져온다. 

 

이때 우체통은 메모리 공유라고 할 수 있다.  단 단방향이다. (샌더 프로세스는 데이터를 보낼 수만 있고, 받을 수는 없다.)

 

참고로 샌더 프로세스는 주소가 동일한 리시버 프로세스에게 동시에 데이터를 보낼 수도 있다. (브로드 캐스트 방식)

 

 

 

메일슬롯은 파일 기반으로 처리된다.

 

 

 

 

 

예제

 

Signaled vs Non-Signaled

 

커널 오브젝트의 상태

 

상태:리소스의 현재 상황을 알리기 위함.

 

 

 

 

부모프로세스가 자식프로세스를 생성하고 자식의 커널 오브젝트 핸들값 7을 얻는다. 그리고 자식프로세스가 종료되었는지 알고 싶다. 그래서 WaitForSingleObject 함수에 7을 인자로 전달한다. 

 

이때 자식 프로세스의 커널 오브젝트 번호 7이 Signaled 상태이면 바로 빠져나오고, 만약 Non-signaled 상태면 자식 프로세스가 종료될때까지 블로킹 된다. 

 

 

 

예제 모델

 

문제는 부모프로세스는 두개의 자식 프로세스가 연산을 종료하기 전에 끝나버리면 안된다.

 

이것을 막기 위해서 부모프로세스가 자식프로세스가 종료될때 까지 기다리게 하는 WaitForSingleObject 함수를 호출해야 한다.

 

WaitForSingleObject 함수에 인자값으로 자식 프로세스의 커널 오브젝트 핸들 값을 인자로 넣고 자식 프로세스가 종료될때까지 기다리게 한다. 

 

 

 

참고 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 정리 - 한빛출판네트워크