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