Windows_/Windows32_API

Windows :: 커널 오브젝트, 핸들 object Handle

sosal 2014. 7. 24. 10:04
반응형

/*

 * http://sosal.kr/

 * made by so_Sal

 */



커널 오브젝트 :: 커널에 의해 관리되는 리소스 정보를 담고 있는 Data block.
커널? :: 모든 운영체제들이 가지고 있는 핵심이 되는 부분.
우리가 프로세스 실행을 명령하면, 그 일을 수행하는것은 커널이다.

//사실 운영체제와 커널은 초기에 같은의미로 쓰였지만, 운영체제라는 단어의 의미가
//점점더 확장되면서 (상업적이라던지, 사용자의 편의를 위한 부분 등..) 하는일이
//더 많아지면서 다른 의미로 쓰이지만, 사실 운영체제를 공부한다고 한다면
//커널을 공부한다고 생각하시면 되겠습니다.

다양한 링크리스트나 트리같은 자료구조의 경우에는
프로그래머가 정보들을 직접 다루고 있다고 할 수 있습니다.

하지만 프로그래머가 프로세스를 생성하는 함수를 구현하여 프로그램을 만들었다고 했을때
프로세스를 생성하는일을 프로그래머가 했다고 할 수 있을까요?
아닙니다. 그 일은 커널이 관리하는 것입니다.
정의를 다시 한번 보실까요,

커널 오브젝트
:: 커널에 의해 관리되는 리소스 정보를 담고 있는 Data block.

명렁은 프로그래머가 내리겠지만, 실제로 그 일을 한것은 운영체제(커널)이 한것입니다.
이제 대충 커널이란 의미가 느낌이 오나욥?
그렇다면 커널이 명령을 수행하기 위해서는, 명령에 대한 정보가 있어야겠죠?
명령을 수행하기 위한 명령 대상의 정보들을 커널 오브젝트라고 합니다.

만약 사용자가 FILE 삭제 명령을 내렸다고 가정해볼때,
프로그래(또는 사용자)의 요청을 적절히 허용해주기 위해서는
OS(커널) 나름대로  리소스에대한 컨트롤 할수있는 정보가 필요한데
이러한 정보를 담은 데이타 블록을 커널 오브젝트라고 합니다.

이해가.. 되셨나요 ㅠ
대략적인 그림을(아래)을 보면..! (프로세스에 한정된 내용입니다만..)


프로그래머가 프로세스 생성을 요청합니다.
프로세스 커널 오브젝트에 실제 데이타 정보가 담기고,
그 프로세스를 관리하는것은 커널(OS)의 몫이죠?
프로세스에는 상태정보 (running, block, ready, zombie 등등..)
그리고 우선순위 (프로세스가 CPU를 점거할때 순위라고 할까요~) 등
이런 정보가 "프로세스 커널 오브젝트" 로 저장되어
커널에 의해 관리가 됩니다.
(물론 프로세스 이외에 파일, 스레드, 파이프 등등 커널 오브젝트라는 범위는 아주 넓습니다.)

그렇다면 커널 오브젝트란에 OS에 의해 간섭되는것인데..
프로세스 커널 오브젝트 안에 있는 정보들중 하나 우선순위를
프로그래머가 높이고 싶다면? (프로세스에 대해서 계속 예를 들자는.. 그런 의미입니다.)
커널 오브젝트는 사용자가 직접 접근하지 못합니다. (안정성을 위해.. 그렇게 만들어짐)
직접접근하지 못한다면, 분명히 간접적으로 접근하는 방법이 있겠지요!!

그것은.. 그거슨... Handle. 핸들입니다.

Handle
OS가 커널 오브젝트를 관리하기 위해서는 각각의 커널 오브젝트에 번호를 줍니다.
이 번호를 Handle 정보라고 하는데, 우리는 handle 번호를 반환 받을 수 있습니다.
커널 오브젝트에 직접적인 접근은 불가능 하지만, 이러한 핸들번호를 들고와서
간접적으로 커널 오브젝트에 접근할 수 있습니다.
그러면 위에서 말하던 우선순위를 고쳐주기 위해서는
프로세스 커널 오브젝트의 핸들값을 반환하여 간접적으로 접근해주면
우선순위, 상태정보 등등 가져올 수 있고, 수정도 가능하게 되겠습니다.

위에서 어렵게 커널오브젝트, 핸들에 대해서 설명했지만, 사실 아주 간단한겁니다.
Kernel object :: 결국 단순한 구조체 변수입니다.
Handle :: 단순한 숫자입니다.


핸들의 특징

핸들은 정수값을 갖며, 대부분의 경우 4바이트.
핸들을 사용하는 이유는 오로지 객체들간의 구분을 위한것이다.

핸들은 운영체제가 직접 관리하며, 프로세스마다 독립적이다.

같은종류의 핸들끼리는 절대 중복된 값을 가지지 않는다.
이는 프로세스, 스레드의 ID에도 적용된다.