728x90
커널 오브젝트
- 커널에 의해 관리되는 리소스 정보를 담고 있는 데이터 블록
-> 커널 : 운영체제가 가지고 있는 핵심 부분
-> 리소스 : 운영체제에 의해 생성 및 소멸되는 것
- 리소스에 접근하는 것은 O/S에 의해 관리되고 있음
-> O/S는 관리를 위해 리소스의 정보를 가지고 있어야 함
- 리소스 생성 시 그에 맞는 커널 오브젝트도 같이 생성됨
- 프로세스와 커널 오브젝트 생성 단계
커널 오브젝트와 핸들의 관계
- 핸들 : 직접적으로 접근이 불가능한 커널 오브젝트의 정보를 간접적으로 접근할 수 있게 해 줌
- 핸들 정보 예제
// operation1.cpp
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR * argv[])
{
STARTUPINFO si = { 0, };
PROCESS_INFORMATION pi;
si.cb = sizeof(si); // 구조체 사이즈 설정
TCHAR command[] = _T("operation2.exe"); // operation2.exe 실행 명령어
CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); // 프로세스 생성
while (1)
{
for (DWORD i = 0; i < 10000; i++)
for (DWORD i = 0; i < 10000; i++); // Busy Waiting
/*
Busy Waiting : 다음 실행을 막아줌.
우선순위가 높은 프로세스가 등장하면 Ready 상태로 바뀜
Sleep을 안쓰는 이유 : 프로세스가 Blocked 상태로 바뀜
*/
_fputts(_T("operation1.exe \n"), stdout);
}
return 0;
}
// operation2.cpp
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
int _tmain(int argc, TCHAR* argv[])
{
SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
/*
SetPriorityClass(_In_ HANDLE hProcess, _In_ DWORD dwPriorityClass);
SetPriorityClass() : 우선순위 변경 함수
GetCurrentProcess() : 자신의 핸들 값 반환
HIGH_PRIORITY_CLASS : 높은 우선순위 부여
*/
while (1)
{
for (DWORD i = 0; i < 10000; i++)
for (DWORD i = 0; i < 10000; i++);
_fputts(_T("operation2.exe \n"), stdout);
}
return 0;
}
- 실행을 시켜보면 우선순위가 높은 operation2.exe가 더욱 많이 출력되는 것을 확인할 수 있음
- operation1.cpp의 _fputts 함수가 호출되어 완료되기 이전에 우선순위가 넘어갈 수 있음
728x90
'Programming > System Programming' 카테고리의 다른 글
윈도우즈 시스템 프로그래밍 - 6. 커널 오브젝트와 오브젝트 핸들(3) (0) | 2020.07.16 |
---|---|
윈도우즈 시스템 프로그래밍 - 6. 커널 오브젝트와 오브젝트 핸들(2) (0) | 2020.07.16 |
윈도우즈 시스템 프로그래밍 - 5. 프로세스의 생성과 소멸(2) (0) | 2020.07.15 |
윈도우즈 시스템 프로그래밍 - 5. 프로세스의 생성과 소멸(1) (0) | 2020.07.15 |
윈도우즈 시스템 프로그래밍 - 4. 컴퓨터 구조에 대한 두 번째 이야기(4) (0) | 2020.07.12 |