※ 아래는 윤성우 뇌를 자극하는 윈도우즈 프로그래밍 한빛미디어(주) 2022년
Chapter06(p.165 ~ 207)를 읽고 정리한 내용입니다.
- 커널 : 컴퓨터를 운영하는데 있어 중심이 되는 운영체제 핵심부분(운영체제라고도 함)
- 커널 오브젝트 : 커널에서 관리하는 중요한 정보를 담아둔 데이터 블록
(프로세스가 생성될 때 마다 '프로세스 관리 구조제' 변수가 하나씩 생성되고, 새롭게 생성된 프로세스 정보들로 초기화 된다. 이러한 정보들을 담아둔 데이터 블록을 커널 오브젝트라 한다.)
- 핸들 : 커널 오브젝트에 할당되는 숫자
(참고)
(1) 핸들은 프로세스에 종속적이다.
(2) 프로세스 핸들은 프로세스의 커널 오브젝트를 가리키기 위한 것이고,
프로세스 ID는 프로세스 자체를 구분짓기 위한 것이다.
커널 오브젝트은 운영체제에 종속적이므로 아래와 같은 특징을 가진다.
-> 소멸 시점은 운영체제에 의해 결정된다.
-> 여러 프로세스에 의해 접근이 가능하다.
즉, 소멸 시점은 프로세스의 종료되는 시점과 무관하다.
자식 프로세스의 종료 코드는 자식 프로세스의 커널 오브젝트에 저장된다.
부모 프로세스가 자식 커널 오브젝트를 참조하고 있으면 자식 프로세스가 종료되어도 자식 커널 오브젝트는 소멸되지 않는다.
이렇게 접근이 가능한 참조 횟수를 UsageCount라고 한다.
UsageCount는 커널 오브젝트의 멤버로 windows가 관리한다.
부모 프로세스가 자식 프로세스의 커널 오브젝트를 참조하고 반환하지 않은 상태로
자식 프로세스의 실행, 종료를 반복하면 자식 프로세스의 커널 오브젝트는 종료되지 못하고 누적되는 문제점이 생긴다.
-> 해결 방법 : 부모 프로세스가 자식 프로세스를 실행 시 마다 얻게 되는 프로세스 핸들과 쓰레드 핸들을 인자로 CloseHandle 함수를 호출한다.