일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- OpenGL
- shader
- 컴퓨터 아키텍쳐
- 운영체제
- 윈도우 프로그래밍
- 그래픽스기초
- Geometry Modeling
- 그래픽스
- 오픈지엘
- modeling
- 렌더링
- Win32 API
- 윈도우 구조
- shader programming
- MFC
- 베지에 곡선
- MFC 윈도우 프로그래밍
- win32
- 윈도우
- 컴퓨터 구조
- 윈도우프로그래밍
- bezier curve
- Graphics
- denoising
- Mesh Processing
- 셰이더
- window programming
- c4d
- 핵심 API로 배우는 윈도우프로그래밍
- 셰이더프로그래밍
- Today
- Total
오다기리 박의 알고리즘 노트
6장. 커널 오브젝트와 오브젝트 핸들 본문
6장. 커널 오브젝트와 오브젝트 핸들
1. 커널 오브젝트
커널이란 컴퓨터를 운영하는 데 있어서 중심이 되는 운영체제 핵심 부분
커널 오브젝트란 커널에서 관리하는 중요한 정보를 담아둔 데이터 블록
커널 오브젝트의 이해
프로세스를 생성, 관리하는 주체는 운영체제
프로세스가 생성될 때마다 ‘프로세스 관리 구조체’ 변수가 하나씩 생성되고 새롭게 생성된 프로세스 정보들로 초기화된다. -> 커널 오브젝트!!
프로그래머가 직접조작 불가
그 이외의 커널 오브젝트들
프로세스 내에서 프로그램 흐름을 구성하는 쓰레드를 생성할 때, IPC(Inter Process Communication)를 위해 사용되는 파이프나 메일슬롯을 생성할 때에도 커널 오브젝트 생성.
Windows에서는 파일을 생성할 때에도 커널 오브젝트 생성. (파일조차도 Windows 커널에 의한 관리 대상이므로)
커널 오브젝트의 종류에 따라서 서로 다른 구조체를 기반으로 생성된다.
Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스들을 원활히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록이 커널 오브젝트이다.
오브젝트 핸들을 이용한 커널 오브젝트의 조작
Windows에서 관리하는 리소스의 특성을 변경 시키려면 시스템 함수를 이용하여 커널 오브젝트를 간접적으로 조작해야한다.
ex) 프로세스의 우선순위 변경
BOOL SetPriorityClass(
HANDLE hProcess, -> 우선순위를 변경할 프로세스의 핸들
DWORD dwPriorityClass -> 새롭게 적용할 우선순위 정보를 전달
);
이 함수로 hProcess가 가리키는 프로세스의 우선순위를 dwPriorityClass로 변경시킨다.
2. 커널 오브젝트와 핸들의 종속 관계
커널 오브젝트의 종속 관계
커널 오브젝트는 프로세스에 종속적인 것이 아니라, Windows 운영체제에 종속적이다.
CreateProcess호출은 프로세스 생성에 대한 요청이며 운영체제가 커널 오브젝트를 생성하는 것이다.
커널 오브젝트의 소멸시점은 운영체제에 의해서 결정된다.
커널 오브젝트는 여러 프로세스에 의해서 접근이 가능하다. (함수 호출을 통한 간접 접근)
핸들의 종속 관계
핸들(핸들 테이블)은 운영체제에 종속적이지 않고 프로세스에 종속적이다.
예)
“A 프로세스가 B 프로세스를 생성한다. 그러자 B 프로세스는 자신의 우선순위를 높인다. 잠시 후 열받은 A 프로세스는 B 프로세스의 우선순위를 원래대로 돌려 놓는다.”
-> A 프로세스가 B 프로세스 우선순위를 변경시킨다는 것은, B 프로세스의 커널 오브젝트에 A 프로세스가 접근 가능하다는 뜻이 된다. 이는 하나의 커널 오브젝트에 둘 이상의 프로세스가 접근 가능하다는 결론으로 이어진다.
3. 커널 오브젝트와 Usage Count
CloseHandle 함수
A 프로세스 생성하면 A 프로세스를 위한 커널 오브젝트 생성
A 프로세스 소멸하면 A 프로세스를 위한 커널 오브젝트 소멸될 수도, 안될 수도.CloseHandle(B) : B 프로세스에 대해서 더 이상 관여할 바 아니니 핸들을 반환하면서 커널 오브젝트의 Usage Count - 1
커널 오브젝트와 Usage Count
자식 프로세스의 종료코드는 자식 프로세스의 커널 오브젝트에 저장된다.
때문에 프로세스가 종료되었다고 해서 커널 오브젝트까지 동시에 소멸시키지는 않는다.
Windows는 커널 오브젝트를 참조하는 대상이 하나도 없을 때(커널 오브젝트의 Usage Count (참조 횟수)=0일 때) 커널 오브젝트를 소멸시킨다.
프로세스는 생성과 동시에 Usage Count =1
커널 오브젝트에 접근 가능한 대상(핸들)이 늘어날 때마다 Usage Count +1
프로세스(or쓰레드) 종료시 Usage Count - 1
자식 프로세스 생성이 완료되면 부모 프로세스가 CreateProcess 호출 과정에서 PROCESS_INFORMATION 구조체를 통해 자식 프로세스의 핸들을 얻기 때문에 실제로 Usage Count는 2가된다. (프로세스와 쓰레드만 해당)
Usage Count와 CloseHandle
프로세스 종료
CloseHandle
부모 프로세스는 자식 프로세스 생성후, CloseHandle로 핸들을 반환해줘야 Usage Count=1이 되어 자식 프로세스 종료시에 커널 오브젝트가 소멸 될 수 있다.
'운영체제' 카테고리의 다른 글
8장. 프로세스간 통신(IPC) 2 (0) | 2018.08.25 |
---|---|
7장. 프로세스간 통신(IPC) 1 (0) | 2018.08.08 |
5장. 프로세스의 생성과 소멸 (0) | 2018.08.08 |
4장. 컴퓨터 구조에 대한 두 번째 이야기 (0) | 2018.08.08 |
3장. 64비트 기반 프로그래밍 (0) | 2018.08.08 |