상세 컨텐츠

본문 제목

06.1 커널 오브젝트에 대한 이해

Programming/Windows System

by RACC8N 2020. 4. 5. 17:57

본문

커널 오브젝트 : 커널에서 관리하는 중요한 정보를 담아둔 데이터 블록

 

프로세스를 생성하는 실질적인 주체는 프로그래머가 아니라 운영체제이다.

> 또한 생성된 프로세스를 관리하는 것도 운영체제가 한다.

> 운영체제가 프로세스를 관리하려면 프로세스에 관련된 정보가 있어야한다.

> 프로세스 관리 구조체 : 프로세스를 관리하기 위해 필요한 구조체

프로세스가 생성될 때마다 '프로세스 관리 구조체' 변수가 하나씩 생성되고, 새롭게 생성된 프로세스 정보들로 초기화 되는데 이것이 바로 커널오브젝트의 정체이다.

프로세스가 생성될 때에만 커널 오브젝트가 생성되는 것은 아니다.

> 쓰레드 생성, IPC를 위한 파이프나 메일슬롯 생성, 파일 생성.

※ 파일 역시 Windows 커널에 의한 관리 대상이다.

 

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

 

Windows 커널에 의해서 관리되는 리소스 수만큼 커널 오브젝트가 생성된다.

프로그래머는 커널 오브젝트를 직접 조작할 수 없다.

-> 함수 호출에 의한 간접적인 조작은 가능하다. 

 

프로세스 우선순위(Priority) 변경 함수 SetPriorityClass

hProcess 우선순위를 변경할 프로세스의 핸들(Handle)
dwPriorityClass 새롭게 적용할 우선순위 정보 전달

SetPrioirtyClass 함수에 Handle이라는 용어가 등장하였다. 

> 핸들이란 커널 오브젝트에 할당되는 숫자에 지나지 않는다.

 

"hProcess가 가리키는 프로세스의 우선순위를 dwPriorityClass로 변경시킨다."

> 오브젝트 핸들(Handle)을 통한 커널 오브젝트의 조작

 

Windows는 커널 오브젝트를 생성할 때마다 핸들이라는 정수값을 하나씩 부여한다.

핸들 정보를 얻는 방법은 커널 오브젝트의 종류(프로세스, 쓰레드, 파일)에 따라서 다양하다.

 

프로세스 커널 오브젝트 핸들 GetCurrentProcess

현재 실행되고 있는 프로세스의 핸들을 얻을 때 사용된다.

 

 

 

관련글 더보기

댓글 영역