커널 오브젝트
* 커널 오브젝트(Kernel Object)
- 커널(kernel)에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록
- OS(운영체제)의 핵심 or 알맹이는 커널에 해당됨
- 리소스는 OS에 의해 생성/소멸되는 데이터를 말함
Kernel Object | Resource | |
파이프 커널 오브젝트 | ←─→ | 파이프 |
프로세스 커널 오브젝트 | ←─→ | 프로세스 |
쓰레드 커널 오브젝트 | ←─→ | 쓰레드 |
- 예를 들어 파일에 대한 접근 정보는 OS가 가지고 있어서 사용자가 파일 접근에 대해 관리하게 됨
- 파일을 생성하거나 오픈하게 되면 이에 대한 커널 오브젝트가 생성이 됨(커널 오브젝트 없이 관리되지 않음)
- 프로세스 커널 오브젝트에 프로세스에 대한 상태, 우선순위 등에 대한 정보를 담고 있음
- 따라서 커널 오브젝트마다 각기 다른 정보를 가지고 있음
* 프로세스 기반 커널 오브젝트
커널 오브젝트와 핸들의 관계
Handle | Kernel Object | Resource | ||
파이프 핸들 | ←─→ | 파이프 커널 오브젝트 | ←─→ | 파이프 |
프로세스 핸들 | ←─→ | 프로세스 커널 오브젝트 | ←─→ | 프로세스 |
쓰레드 핸들 | ←─→ | 쓰레드 커널 오브젝트 | ←─→ | 쓰레드 |
- 운영체제에 의해서 커널 오브젝트가 관리 됨
- 만약 프로세스의 우선순위를 높여주고 싶으면 직접적으로 접근이 불가
- 커널 오브젝트에 직접적 접근할 수 없게 되어 있어서 간접적으로 핸들로써 접근할 수 있음
- 커널 오브젝트 마다 핸들이 할당되어 있기 때문에 핸들 정보를 통해 커널 오브젝트에 접근이 가능
* 호출한 프로세스의 핸들 정보를 가져오는 함수: GetCurrentProcess()
- 핸들에 접근하여 프로세스의 우선순위를 높이는 함수 예
SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS);
cf) Sleep 함수를 통해 프로세스의 상태를 변경하게 되면 인자값의 시간(ns) Blocked 상태가 됨
그러나 우선순위에 밀리게 되면 Blocked 상태가 아닌 Ready 상태가 됨
또한 우선순위에 밀리게 되면 모든 함수를 완료한 뒤에 넘기는 것이 아니라 중간에도 넘어갈 수 있음
(우선순위를 넘기는 기준은 함수 단위가 아님)
'시스템 프로그래밍' 카테고리의 다른 글
7-1. 프로세스간 통신(IPC) (0) | 2022.05.17 |
---|---|
6-2. 커널 오브젝트와 핸들의 종속관계 (0) | 2022.05.14 |
5-2. 프로그래밍을 통한 프로세스의 생성 (0) | 2022.05.13 |
5-1. 프로세스의 생성과 소멸 (0) | 2022.05.12 |
4-2. Load & Store 명령어 디자인 (0) | 2022.05.12 |