일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- priority_queue
- c++
- 운영체제
- arduino compiler
- 자료구조
- 아두이노 컴파일러
- set
- list
- LineTracer
- 컴퓨터 그래픽스
- Arduino
- stl
- Visual Micro
- 통계학
- html
- 아두이노 소스
- Algorithm
- 아두이노
- map
- 시스템프로그래밍
- vector
- C언어
- 라인트레이서
- queue
- Stack
- 수광 소자
- Array
- Deque
- directx
- WinAPI
- Today
- Total
Kim's Programming
커널 오브젝트(Kernel Object) 본문
이러한 정보들을 저장하기 위해 프로세스당 프로세스를 관리하기 위한 구조체 같은 것을 만들게 되는데 이것을 Kernel Object라고 부르게됩니다. 또한 이 커널 오브젝트에는 프로세스를 만든 후에 이 프로세스에 대한 정보를 가득 차게 됩니다.
물론 커널 오브젝트 기반이 되는 프로세스 관리 구조체는 공개되지 않고 있습니다. 하지만 커널 오브젝트들이 프로세스가 생성될 때만 사용되지는 않습니다. 프로세스 내에서의 쓰레드를 생성할 때, IPC(Inter Process Communication)를 위해 사용되는 파이프나 메일슬롯을 생성할 때도 커널 오브젝트를 생성해서 필요한 정보를 채우게 됩니다. 그래야 윈도우에서 관리할 수가 있습니다. 또 파일을 생성할 때도 커널 오브젝트가 생성되어 윈도우 커널에 의한 관리 대상이기 떄문입니다. 하지만 커널 오브젝트는 프로그래머가 직접 조작 할 수는 없습니다.
커널 오브젝트의 조작
커널 오브젝트의 조작이 직접 조작으로는 불가능하지만 아예 불가능 한 것은 아닙니다. 윈도우즈에서 관리하는 리소스 틍성(예를 들어 프로세스 우선순위)를 변경해야할때 직접적으로는 불가능하지만 마이크로소프트에서 제공해 주는 시스템 함수를 통해서 커널 오브젝트에서 제공하는 함수를 통해서는 간접적으로는 조절할 수 있습니다. 우선 순위를 변경하는 함수는 다음과 같습니다.
1 | BOOL SetPriorityClass( HANDLE hProcess, DWORD dwPriorityClass ); | cs |
첫 번째 파라메터는 우선순위를 변경할 프로세스의 핸들(Handle)을 전달하며 두번째 파라메터는 우선순위 정보를 전달하게 됩니다.
하지만 또 핸들을 알아봐야 겠지요?
핸들
우선순위를 변경할 때는 특정 커널 오브젝트를 가르켜야 하는데 윈도우즈는 항상 커널오브젝트를 만들 때 마다 핸들이라는 정수값을 부여하게 됩니다. 마치 이름같은 것입니다.
이런식으로 우리는 커널 오브젝트에 간접적인 접근이 가능하게 되고 이런식으로 조절하게 됩니다.
'Programming > System Programming' 카테고리의 다른 글
커널 오브젝트 그리고 Usage Count (0) | 2016.01.01 |
---|---|
구조적 예외처리 - SEH(Structured Exception Handling) (0) | 2015.12.30 |
파일처리함수(2/2) (0) | 2015.12.25 |
파일처리함수(1/2) (0) | 2015.12.24 |
프로세스(Process) - CreateProcess (2) | 2015.12.23 |