: 커널 오브젝트의 두가지 상태와 핸들 테이블에 대한 개념을 이해하기 위해서 프로세스간 통신 기법을 예로 들것이다.

1. 프로세스간 통신(IPC(Inter-Process Communication))의 의미

: 둘 이상의 프로세스가 데이터를 주고 받는 행위

* 프로세스 사이에서 통신이 이뤄지기 위한 조건

: 서로 통신하고자 하는 프로세스가 서로 만날수 있는 여건 (공유하는 메모리 영역이 존재하는 것을 의미)이 허락되거나,

: 전화나 메신저 같은 보조 수단이 필요하다

* 프로세스들이 서로 만날 수 없는 이유

: 프로세스들은 자신에게 할당된 메모리 공간 이외에는 접근이 불가능하다.

* 프로세스들이 서로 만나지 못하게 디자인한 이유

: 프로세스간 간섭을 차단하여 안전성을 높이기 위함


2. 메일 슬롯 방식의 IPC

* 메일슬롯 원리

: 메일슬롯은 파이프와 더불어 대표적인 IPC기법이다.

: 선형적인 메모리 구조의 특성을 반영하여 메일 박스가 아니라 슬롯이 된 것으로 보인다.

: 데이터를 주고 받기 위해서 프로세스가 우체통을 마련하는 것

: Sender(발송인)는 Receiver(수신인)의 주소를 통해서 Receiver의 메일슬롯을 향해 데이터를 날린다.

: Receiver는 메일 슬롯을 통해 데이터를 얻을 수 있다.

* 메일 슬롯 구성을 위해 필요한 요소

1. Receiver가 준비해야 할 것에 대해서 먼저 살펴보자

: 데이터를 받으려면 우체통 즉, 메일 슬롯을 생성해야 한다.

: CreateMailslot 이 그 함수이다.

2. Sender가 준비해야 할 것에 대해서 살펴보자

: Sender는 Receiver가 만들어 놓은 메일 슬롯의 이름을 알아야한다.

: 메일 슬롯은 파일이 아님에도 불구하고, 파일 입출력 함수를 사용해서 데이터를 주고 받는다. 이는, 메일슬롯이 Windows 파일 시스템을 기반으로 구현되어있기 때문이다.

* 메일슬롯의 고찰과 앞으로의 전개에 대해서

: 단방향 통신만 가능하다

- 메일슬롯과 IPC에 대한 고찰

: 메일 슬롯은 한쪽 방향으로만 메시지를 전달할 수 있다. 따라서 두 프로세스가 서로 메시지를 주고 받을 수 있는 채팅 프로그램을 구현하기 위해서는 두개의 메일 슬롯을 생성해야한다.

: 브로드 캐스팅 방식의 통신을 지원한다. 즉, 하나의 Sender는 한번의 메시지 전송으로 여러 Receiver에게 동일한 메시지를 동시에 전송하는 것이 가능하다.

: 메일슬롯은 Usage Count가 1이다.

* 앞으로의 전개에 대해서 : 중간 집필 후기와 고민거리

: 커널 오브젝트의 상태와 핸들 테이블에 대한 개념에 더 관심을 가져야한다.

: Windows는 내부적으로 생성하는 대부분의 리소스들에 대해서 커널 오브젝트를 생성한다.

3. Signaled vs Non-Signaled

: 커널 오브젝트의 상태에 대한 내용을 설명할 것이다.

* 커널의 두가지 상태

- 상태에 대한 이해

: 상태라는 용어를 쓰는 이유는 상황에 따라 변하기 때문이다.

: Signaled 상태(신호를 받은 상태)와 None-Signaled 상태(신호를 받지 않은 상태)이다.

: 상태를 커널 오브젝트에 저장해둔다. 전자를 True, 후자를 False로 표현하게 된다.

- 프로세스 커널 오브젝트의 상태에 대한 이해

: 프로세스가 Running 상태일때 커널 오브젝트는 Non-Signaled 상태이다

: 프로세스가 Terminated 상태일때 커널 오브젝트는 Signaled 상태이다.

: Non-Signaled 에서 Signaled 상태로 갈 수 있지만, 반대의 경우는 불가능하다. 새로 프로세스가 생겨나기 때문이다.

* 커널 오브젝트의 두가지 상태를 확인하는 용도의 함수

: 커널 오브젝트가 상태를 지니도록 Windows 운영체제가 디자인된 것은 프로그래머에게 다야한 기능을 제공하기 위해서이다.

* 커널 오브젝트의 상태 확인이 필요한 상황의 연출

: 1~5 를 더하는 프로세스와 6~10 을 더하는 프로세스가 끝난 뒤 이 두 결과를 더하는 프로세스를 돌릴때

* 커널 오브젝트에 존재하는 종료코드

: 자식 프로세스의 종료코드는 커널 오브젝트에 저장된다.

: 부모 프로세스는 여기에 접근하여 데이터를 얻을 수 있다.

: IPC 통신을 통해 얻을 수 있다.

* 구현의 문제점

: 프로세스가 종료되지 않은 상태에서 GetExitCodeProcess가 호출되면, 상수 STILL_ACTIVE(259)값이 얻어지게 된다.

: 프로세스가 완전히 종료된 상태에서 호출되어져야 한다.

* WaitForSingleObject 함수의 유용성

: 이 함수를 통해 자식 프로세스의 결과를 자식 프로세스가 끝난 후 얻을 수 있다.

: 자식 프로세스가 Non-Signaled 에서 Signaled로 변했을 때까지 부모프로세스를 Blocked 상태에 머무르게 한다.


뇌를 자극하는 윈도우즈 시스템 프로그래밍
국내도서
저자 : 윤성우
출판 : 한빛미디어 2007.03.30
상세보기




+ Recent posts