본문 바로가기

프로그래밍

커널 오브젝트와 핸들

Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스들을 원활히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라 한다.

프로그래머는 직접 커널 오브젝트를 조작할 수 없다.
그러나 MS에서 제공해 주는 시스템 함수를 이용하면 간접적 조작은 가능하다.

Windows는 커널 오브젝트를 생성할 때마다 핸들이라는 정수값을 하나씩 부여한다. 이 정수값만 알 수 있다면, 커널 오브젝트를 지시하는 것은 쉬운 일이 된다.

쓰레드의 종료 시점을 알기 위해서는 커널 오브젝트의 상태를 알아야 한다.

커널 오브젝트에는 두 가지 상태(state)가 있다.
- 종료된 상태 : signaled 상태 - TRUE
- 종료되지 않은 상태 : non-signaled 상태 - FALSE

운영체제는 프로세스나 쓰레드가 종료되면 해당 커널 오브젝트를 signaled 상태로 변경한다.
-> 프로세스와 쓰레드의 커널 오브젝트 상태가 초기에는 non-signaled 상태

커널 오브젝트의 상태를 알 수 있는 방법
- WaitForSingleObject(), WaitForMultipleObjects()