Kernel Object (커널 오브젝트)

 

cf) Windows 기반 에서만 적용되는 개념


1. System Resource (시스템 리소스)

- 우리가 사용하고자 하는 시스템의 자원이다. (파일, 스레드, 프로세스, 뮤텍스...)
- 시스템 리소스는 OS(정확히는 Kernel)가 생성 및 유지, 관리 한다.

cf) 프로그래밍 시 로그파일을 만들기 위해선, 커널에게 ‘파일’ 이라는 시스템 리소스를 생성
   하라고 부탁한다.

 

2. Kernel Object (커널 오브젝트)

- 시스템 리소스인 파일을 생성 했다면, 이제 그 파일을 유지 및, 관리 해야 한다.
  파일은 시스템 리소스 이기 때문에 kernel 이 유지 관리 한다.
  유지, 관리를 하기 위해서 kernel 은 Kernel Object 라는 것을 만든다.
- Kernel Object 는 시스템 리소스를 유지 관리하기 위한 데이터 블록 이다. (C구조체 유사)
- 시스템 리소스마다 유지해야 하는 정보가 다르기 때문에 각각 다른 데이터 블록 형태를 갖음 

Cf). 프로그램의 기본 실행 단위 : Linux    -> Process
                                           Windows -> Thread

Cf). Windows 프로그램의 실행
    Process 실행 -> Main Thread 생성  (무조건 생성 된다.)
    Main Thread (CRT 함수) 가 main 함수를 실행 시킨다.

 

3. System Resource, Kernel Object, Handle 과의 관계

Ex) System Resource 의 생성 (파일)


- Kernel 이 시스템 리소스인 파일을 생성 한다.
- Kernel 은 파일을 유지, 관리 하기 위해 파일에 대한 Kernel Object 를 생성 한다.
- Kernel 은 Kernel  Object 를 가리키는 Handle을 리턴해 준다.
- 즉, 우리는 Handle 을 통해서 Kernel Object 에 접근 하는 것이고,
   Kernel Object가 System Resource 에 접근 하게 되는 것이다.

 

Ex) System Resource 의 유지, 관리


- Handle 을 통해 Kernel Object 에 접근한다.

    Kernel Object 는 파일을 관리하는 여러 데이터를 이용해 파일을 관리 한다.

 


4. 프로세스의 Kernel Object Handle Table
   - 프로세스가 초기화 되면 운영체제는 프로세스를 위해 Kernel Object Handle Table 을

     할당 한다. (각각의 프로세스 마다)
   - 이 핸들 테이블은 User Object 나 GDI Object 에 의해서는 사용되지 않고 오직,

     Kernel Object 만을 위해 사용 한다.
     cf). windows application 프로그래밍시 사용하게 되는 Object
           - Kernel Object : 파일, 프로세스, 스레드, 세마포어...
           - User Object   : 윈도우, 커서, 캐럿...
           - GDI Object     : 팬, 브러시, 폰트, 비트맵...
   - 새로운 프로세스가 생성 되면, 프로세스의 핸들 테이블이 생성이 되고, 테이블은 비어있다.


5. 프로세스가 핸들 테이블을 다루는 방법

- 프로세스가 초기화 되면 자신의 Program 영역에 비어있는 커널 오브젝트 객체 테이블을  생성한다.
   - 프로세스가 시스템 리소스를 사용하기 위해 커널에 요청하면 커널은 커널 영역에 리소스를 생성하고
     커널 오브젝트를 생성 한다.
   - 커널 오브젝트를 가리키는 주소는 프로세스의 커널 오브젝트 핸들 테이블에 기록이 되고, 핸들 테이블에
     있는 핸들 값을 리턴해 주게 된다.

   - 프로세스가 리소스 사용을 마쳤으면 CloseHandle() 함수를 호출 하게 된다.
   - 함수는 호출이 리터되기 직전에 커널 오브젝트 핸들 테이블을 참조하여 핸들 값으로 커널 오브젝트에
     접근한다.  커널 오브젝트 내에 카운트 값을 1 감소 시킨다.
   - 커널 오브젝트의 카운트 값이 0 이 되면 커널은 커널 오브젝트를 메모리 해제 시킨다.
   - 커널 오브젝트 핸들 테이블에서 해당 커널 오브젝트 값을 삭제 한다.




last update 09.02.10

Posted by six605
,