1. 커널 오브젝트에 대한 이해
Windows 운영체제는 프로세스, 쓰레드, 파일 등의 리소스들을 관리하는데, 이때 필요한 데이터들을 저장하는 메모리 블록을 커널 오브젝트라고 한다.
ms에서 제공하는 시스템 함수를 통해 커널 오브젝트를 간접적으로 조작할 수 있다. 그 예로, 오브젝트 핸들(커널 오브젝트에 할당된 숫자)을 인자로 받는 SetPriorityClass() 함수를 통해 프로세스의 우선 순위를 변경할 수 있다.
2. 커널 오브젝트와 핸들의 종속 관계
커널 오브젝트는 프로세스가 아닌 운영체제에 종속적이다. 따라서 커널 오브젝트는 운영체제에 의해 소멸 시점이 결정된다. 또, 여러 프로세스에 의해 접근이 가능하다.
핸들은 운영체제가 아닌 프로세스에 종속적이다.
3. 커널 오브젝트와 Usage Count
프로세스가 소멸된다고 해서 커널 오브젝트가 소멸된다고 단언할 수 없다. CloseHandle()는 핸들이 가리키는 리소스를 해제하고 커널 오브젝트를 소멸시키는 일을 하는 것이 아니라, 단지 핸들을 반환하며 Usage Count를 1 감소시킬 뿐이다. 자식 프로세스의 핸들은 자식 프로세스의 커널 오브젝트에 저장되므로, 만약 자식 프로세스를 소멸시킬 때 커널 오브젝트까지 소멸된다면 부모 프로세스는 종료 코드를 얻을 수 없다.
커널 오브젝트를 참조하는 대상의 개수가 0일 때 소멸시키는 것이 Windows가 정한 방식이다.
자식 프로세스를 생성하자마자 CloseHandle() 함수를 호출한다면 Usage Count를 1로 만들 수 있다.
바탕화면에 있는 아이콘을 더블 클릭 하여 프로세스를 생성할 경우, 생성된 프로세스의 Usage Count는 2이다. 바탕화면 역시 독립적으로 실행 중에 있는 프로세스이다.
'개인 공부 > 윈도우즈 시스템 프로그래밍' 카테고리의 다른 글
05: 프로세스 생성과 소멸 (0) | 2022.05.30 |
---|---|
04: 컴퓨터 구조 - 2 (0) | 2022.04.20 |
03: 64비트 기반 프로그래밍 (0) | 2022.04.07 |
02: 아스키코드와 유니코드 (0) | 2022.04.01 |
01: 컴퓨터 구조 (0) | 2022.03.23 |