9.커널 오브젝트

커널 오브젝트

 

커널 오브젝트란 커널에 의해 관리되는 리소스 정보를 담고있는 데이터 블록이다.

 

여기서 리소스란 운영체제에 의해서 생성 및 관리되고 소멸된다는 것이다.

 

예) 파일(리소스)에는 읽기전용 쓰기전용이 있는데, 이런 모드는 운영체제에 의해 관리된다.

 

fopen(“test.txt” ,“r”);

 

위의 함수로 test 파일을 읽기 전용으로 열기를 시도했다.

 

운영체제는 저 파일을 찾아서 읽어 오려고 하는데 저 파일이 쓰기 전용이다.

 

그러면 운영체제에 의해서 읽어 오는것이 불가능하게 된다.

 

 

 

 

 

프로세스 기반 커널 오브젝트 (우선순위가 있다.)

 

프로세스가 생성될때 마다 아래 그림처럼 프로세스 관리 구조체 변수가 하나씩 생성되고, 새롭게 생성된 프로세스 정보들로 초기화되는데, 이것이 바로 커널오브젝트의 정체다. 그렇다면 프로세스 관리 구조체 변수는 모든 프로세스 마다 동일할까? 아니다. 커널 오브젝트의 종류에 따라서 서로 다른 구조체를 기반으로 생성된다. 대상에 따라서 관리되어야 할 사항이 다르기 때문에, 커널오브젝트의 형태(커널오브젝트를 구성하는 멤버)도 다를 수 밖에 없다.

 

예로 파일이 생성될 때는, 생성되는 파일 커널 오브젝트 안에 파일의 속성 (읽기모드, 쓰기 모드) 정보가 저장되어야 한다. 그래서 Read 모드로 열린 파일에 데이터를 저장하려는 경우에 os에 의해 접근이 안된다. 

 

반면 프로세스 커널 오브젝트에는 파일 속성 정보를 저장할 필요가 없다. 그대신 우선순위를 저장하기 위한 멤버가 필요하다. 스케쥴링을 위해서필요하다.

 

 

 

 

os는 프로세스 , 쓰레드, 파일과 같은 리소스들을 원활히 관리하기 위해서 필요한 정보를 저장해야 한다. 

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

 

 

커널 오브젝트 : 데이터 블록

 

리소스 : 프로세스 , 파일 등.

 

 

커널 오브젝트(구조체변수)와 핸들(숫자)의 관계

 

커널 오브젝트는 운영체제에 의해 관리된다. 프로세스의 커널오브젝트에는 우선순위가 있다. 프로그래머가 직접적으로 접근할 수 있는 영역이 아니다. 

 

예로 프로세스의 우선순위가 마음에 안든다. 바꾸고 싶다. 그래서 커널 오브젝트에 접근하고 싶다. 그러나 직접적으로 접근할 수 없다. 대신 간접적으로 접근할 수 있다. 이를 위해서 핸들 정보를 준다. 프로세스가 생성될때마다 프로세스 커널 오브젝트가 생성되는데 이때 고유 번호가 부여된다. 이때 이 고유 번호를 이용해서 핸들정보를 얻을 수 있고, 이것을 통해서 우선순위를 올려줄 수 있다. 

 

 

참고로 리소스 마다 핸들을 얻는 방법이 다르다. 

 

 

 

 

GetCurentProcess() 함수를 이용해서 프로세스의 핸들을 얻고, setPriorityClass 함수를 이용해서 우선순위를 올려주었다. 이때 우선순위를 올려주는 함수 setPriorityClass 에 프로세스 핸들의 정보를 넣었다.

 

 

 

실행결과

 

 

 

 

 

 

 

 

참고 

뇌를 자극하는 윈도우즈 시스템 프로그래밍 정리 - 한빛출판네트워크