프로그래밍
커널 오브젝트와 핸들
금룡섭
2012. 6. 6. 15:52
Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스들을 원활히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라 한다.
프로그래머는 직접 커널 오브젝트를 조작할 수 없다.
그러나 MS에서 제공해 주는 시스템 함수를 이용하면 간접적 조작은 가능하다.
Windows는 커널 오브젝트를 생성할 때마다 핸들이라는 정수값을 하나씩 부여한다. 이 정수값만 알 수 있다면, 커널 오브젝트를 지시하는 것은 쉬운 일이 된다.
쓰레드의 종료 시점을 알기 위해서는 커널 오브젝트의 상태를 알아야 한다.
커널 오브젝트에는 두 가지 상태(state)가 있다.
- 종료된 상태 : signaled 상태 - TRUE
- 종료되지 않은 상태 : non-signaled 상태 - FALSE
운영체제는 프로세스나 쓰레드가 종료되면 해당 커널 오브젝트를 signaled 상태로 변경한다.
-> 프로세스와 쓰레드의 커널 오브젝트 상태가 초기에는 non-signaled 상태
커널 오브젝트의 상태를 알 수 있는 방법
- WaitForSingleObject(), WaitForMultipleObjects()