* 아직은 많이 부족하기 때문에 제가 자신이 생길 때 까지 본 글은 제 블로그에 대한 링크만 허용합니다. 객체
메모리 메니저나 프로세스 메니저, I/O 메니저 등의 커널의 Excutive 에 해당하는 요소들과 윈도우 서브시스템의 경우 빠른 실행이 필요하기 때문에 커널 에서 실행 됩니다. 그리고 이러한 객체들은 객체 메니저 (Object Manager)를 통해 정의 되고 외부에 노출 되게 됩니다. 이 객체의 종류를 3가지로 나눈다면 커널의 실행부 객체와 커널 객체 그리고 GDI/User 객체로 나눌 수 있습니다. 실행부 객체는 실제 커널 실행부의 여러가지 요소로 이루어져 있습니다. 그리고 이 실행부 객체 중 윈도우 커널를 위해 서비스를 제공하는 객체들의 집합을 커널 오브젝트라고 부릅니다. 그리고 GDI/User 객체의 경우 커널과는 관계 없이 빠른 GUI 화면 처리를 위한 객체입니다. 이렇게 객체들은 실행부의 여러 부분들을 의미하며, 이중 일부가 커널 객체가 됩니다. 그리고 이 객체는 바로 객체 관리자를 통해서 이루어 지게 됩니다. Windows 7의 경우 42개의 객체가 정의되어 있으며, 아래 그림은 윈도우 API를 통해 외부에 오픈되어 있는 실행부 객체에 대한 설명입니다. 저는 개인적으로 이 객체가 자바나 C#의 클래스와 비슷하다고 생각하는데, 실제 이 객체는 여러 변수로 이루어진 구조체와 해당 객체의 서비스에 따른 여러 함수들로 이루어져 일관성 있는 서비스 메커니즘을 제공하고 있습니다. 위의 그림에서와 같이 객체 관리자는 객체의 해더를 통해 객체에 대한 일괄적인 관리를 하게 되고 실제 실행부의 각 객체들은 이 객체의 바디 부분을 통해 실제 객체를 컨트롤 합니다. 그리고 객체 해더의 Type 객체에 대한 포인터는 특정 개체들에 대한 일반적인 정보들이 들어 있으며, 추가적으로 Object Subheader 를 통해 객체에 따라 특수한 설정들을 표현하기 하기도 하고 해당 특정 상황 (시스템 부팅 이나 객체 생성 등)에서의 객체의 특성을 표현하기도 합니다 그리고 이런 해더와 함께 객체 관리자는 모든 객체에 공통적으로 적용되는 서비스도 제공하고 있습니다. 아래와 같은 서비스를 통해 객체 관리자에게 요구되는 일반적인 관리 프로세스가 가능하게 됩니다. |