728x90

1.    Kernel Object

user space에서 데이터 영역에 접근하는 경우 kernel space에 존재하는 기계어 영역을 거쳐서 OS의 데이터 영역에 접근해야한다.

 

kernal object는 누가 만들었고, 언제 만들었고, 전체 크기...etc를 담고 있는 것을 의미한다.

커널 오브젝트는 자신을 참조하는 것이 다 사라진 경우 삭제한다.

사용자가 kernel object를 직접적으로 참조할 수 있는 경우는 극히 일부이다.

따라서 포인터 대신 Handle이라는 메커니즘을 적용한다.

 

2.    Object Handle

handle을 통해 kernel space에 존재하는 데이터에 접근할 수 있게 된다.

바로 주소값을 활용해 kernel space에 접근이 가능하다면, 보안상의 문제나, 오류가 발생하는 경우 치명적인 결과가 발생할 수 있다.

이러한 경우를 피하기 위해서 Handle을 통해 데이터에 접근하도록 하여, 직접적인 접근을 막는다.

 

3.    States of kernel object

모든 커널 오브젝트는 state를 가진다.

Statesignaled statenon-signaled state가 존재한다. 각 오브젝트마다 의미를 갖는다.

 

1. signaled state : 쓰레드 종료

2. non-signaled state : 쓰레드 실행 중

 

main에서 thread를 활용해 병렬적으로 프로그램이 동작하는 경우, 일정 구간에서 thread의 실행이 모두 종료되었는지 확인이 필요한 경우가 생긴다.

 

그러한 경우

DWORD WaitForSingleObject(

HANDLE hHandle,

  DWORD  dwMilliseconds

);

를 활용해 thread의 종료를 파악하여 thread가 종료될 때 까지 기다리도록 코드를 작성할 수 있다.

+ Recent posts