IT공부/IT서적

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 6장. 커널 오브젝트와 오브젝트 핸들

shine94 2024. 12. 31. 16:47

* 해당 글은 윤성우의 뇌를 자극하는 윈도우즈 시스템 프로그래밍 도서를 읽고 정리한 글입니다

   https://product.kyobobook.co.kr/detail/S000001223395

 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 | 윤성우 - 교보문고

뇌를 자극하는 윈도우즈 시스템 프로그래밍 |

product.kyobobook.co.kr

 

 

 

 

* 커널

   컴퓨터를 운영하는데 있어서 중심이 되는 운영체제 핵심 부분을 뜻함

 

* 커널 오브젝트

   Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스(Resource)들을

   원활히 관리하기 위해 필요한 정보를 저장해야 한다.

   이때 데이터를 저장하는 메모리 블록을 가리켜  커널 오브젝트라 한다

   → 프로세스가 생성될 때마다 프로세스 관리 구조체 변수가 하나씩 생성되고 새롭게 생성된 프로세스 정보들로 초기화

 

* 메모리 블록(memory block)

   OS 또는 프로그램이 기억 공간을 임시적으로 분할하여 사용하는 하나의 단위

 

* 핸들(Handle)

   커널 오브젝트에 할당되는 숫자

   각각의 프로세스가 자신만의 핸들 테이블을 하나씩 구성하고 관리한다

 

* 프로세스의 우선순위(Priority) 변경

BOOL SetPriorityClass(
  [in] HANDLE hProcess,
  [in] DWORD  dwPriorityClass
);

 

hProcess

 : 우선순위를 변경할 프로세스의 핸들(Handle)을 전달한다

dwPriorityClass

 : 새롭게 적용할 우선순위 정보를 전달한다

 

    https://learn.microsoft.com/ko-kr/windows/win32/api/processthreadsapi/nf-processthreadsapi-setpriorityclass

 

SetPriorityClass 함수(processthreadsapi.h) - Win32 apps

지정된 프로세스의 우선 순위 클래스를 설정합니다. 이 값은 프로세스의 각 스레드의 우선 순위 값과 함께 각 스레드의 기본 우선 순위 수준을 결정합니다.

learn.microsoft.com

 

* 현재 실행되고 있는 프로세스의 핸들 얻기

HANDLE GetCurrentProcess();

 

    https://learn.microsoft.com/ko-kr/windows/win32/api/processthreadsapi/nf-processthreadsapi-getcurrentprocess

 

GetCurrentProcess 함수(processthreadsapi.h) - Win32 apps

현재 프로세스에 대한 의사 핸들을 검색합니다.

learn.microsoft.com

 

* 프로세스 핸들은 프로세스의 커널 오브젝트를 가리키기(구분짓기) 위한 것이고,

   프로세스 ID는 프로세스 자체를 구분짓기 위한 것이다

 

* 프로세스가 소멸된다고 해서 커널 오브젝트가 소멸된다고 말할 수 없다

   소멸될 수도, 소멸되지 않을 수도 있다 >> 운영체제 결정 사항

 

* 운영체제는 커널 오브젝트 소멸 시점을 어떻게 결정하는가?

   커널 오브젝트를 참조하는 대상이 하나도 없을 때, 소멸시키는 것이 가장 이상적이고,

   이것이 Windows가 커널 오브젝트를 소멸시키기를 결정하는 방식이다

 

* Usage count

   커널 오브젝트 참조 카운트

 

* 핸들을 반환하면서 커널 오브젝트의 Usage count를 하나 감소시키는 기능

BOOL CloseHandle(
  [in] HANDLE hObject
);

 

hObject

 : 열린 객체에 대한 유요한 핸들

 

   https://learn.microsoft.com/ko-kr/windows/win32/api/handleapi/nf-handleapi-closehandle

 

CloseHandle 함수(handleapi.h) - Win32 apps

열린 개체 핸들을 닫습니다.

learn.microsoft.com

 

* 커널 전역 데이터 구조, 전역 or 프로세스별 커널 오브젝트

   https://shine94.tistory.com/359

 

[ETC] 커널 전역 데이터 구조, 전역 or 프로세스별 커널 오브젝트

* 커널   컴퓨터를 운영하는데 있어서 중심이 되는 운영체제 핵심 부분 * 프로세스별 커널 오브젝트   프로세스 생성시, 각 프로세스마다 독립적인 커널 오브젝트가 생성된다   ㄴ 커널 오브

shine94.tistory.com