Windows System Programming -Kernel Object & Object Handle- Tutor: 20060106 배문희
contents 커널 오브젝트에 대한 이해 커널 오브젝트의 생성과 소멸 실습 커널 오브젝트란 무엇인가? Why? 소유권 Usage Count 오브젝트 핸들 실습 2009-04-01 호남대학교 정보통신공학과
커널 오브젝트(Kernel Object)에 대한 이해 커널 오브젝트란 무엇인가? Why? 2009-04-01 호남대학교 정보통신공학과
What’s the Kernel Object?? ㅡㅡ; What’s the Kernel Object?? ㅡㅡ; “커널에서 관리하는 데이터 블록” What’s the Kernel Object?? ㅡㅡ; 2009-04-01 호남대학교 정보통신공학과
커널오브젝트란 무엇인가? 프로세스의 관리를 위해 운영 체제는 PCB(Process Control Block)라고 하는 특수한 형태의 자료를 소유하게 된다고 하였다. 이것은 프로세스 상태전이와 스케줄링, 그리고 컨텍스트 스위칭 등의 프로세스 전반에 걸쳐 설명한바 있다. 그때 설명했던 PCB가 바로 커널 오브젝트이다. 그러나 PCB라는 용어는 Windows System Programming에 관련된 서적에서는 찾아볼수 없고 운영 체제 에서만 언급되는 용어로써 개념적 설명을 위한 용어가 아닌가 싶다. 지금부터 이것을 프로세스 커널 오브젝트라고 하겠다. . Open file list Register PC(Program Counter) Process ID * (Pointer) PCB(Process Control Block) State (ready, running, waiting) 준비완료 큐 꼬리 머리 큐 헤더 . Open file list Register PC(Program Counter) Process ID (Pointer) * (ready, running, waiting) State PCB7 2009-04-01 호남대학교 정보통신공학과
Why?? “동시에 여러 개의 프로세스를 관리 하자면, 운영체제 입장에서 고정적으로 저장하고 갱신해야 할 정보들이 생기기 마련” ex> 프로세스 상태 정보, 우선순위 정보 등 2009-04-01 호남대학교 정보통신공학과
이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라 한다.” 커널오브젝트란 무엇인가? “Windows 운영체제는 프로세스, 쓰레드 혹은 파일과 같은 리소스(Resource)들을 원활히 관리하기 위해 필요한 정보를 저장해야 한다. 이때 데이터를 저장하는 메모리 블록을 가리켜 커널 오브젝트라 한다.” 커널 오브젝트는 프로세스에만 특별히 존재하는 것이 아니다. 스레드, 메일 슬롯, 섹션, 파일 등의 다양한 종류가 존재한다. 2009-04-01 호남대학교 정보통신공학과
커널 오브젝트(Kernel Object) 생성과 소멸 소유권 Usage Count 오브젝트 핸들 2009-04-01 호남대학교 정보통신공학과
커널 오브젝트가 생성이 되고 나면 시스템은 새로운 프로세스... ... ” 커널 오브젝트의 운영 Handle 파이프 핸들 프로세스 핸들 쓰레드 핸들 파이프 커널 오브젝트 프로세스 커널 오브젝트 쓰레드 커널 오브젝트 Kernel Object 파이프 프로세스 쓰레드 Resource “쓰레드가 CreateProcess를 호출하면 시스템은 사용 카운트(Usage Count)가 1인 프로세스 커널 오브젝트를 생성한다. 프로세스 커널 오브젝트는 프로세스 자체를 의미하는 것이 아니며, 운영체제가 프로세스를 관리하기 위한 목적으로 생성한 데이터 구조체 이다. 커널 오브젝트가 생성이 되고 나면 시스템은 새로운 프로세스... ... ” 2009-04-01 호남대학교 정보통신공학과
Usage Count “커널 오브젝트는 프로세스가 아니라 커널에 의해 소유된다.” “커널 오브젝트는 Windows 운영체제에 종속적이다.” 즉!! 생성과 소멸에 있어서 프로세스가 관여하지 않으며, 또한 반드시 함께 생성된 커널 오브젝트와 프로세스가 동시에 삭제 되는 것은 아니다. 프로세스가 소멸하였다고 해서 커널 오브젝트가 삭제되었다고 생각하는 것은 잘못된 생각이다. “프로세스와 프로세스 커널 오브젝트는 독립적이다.” 그렇다면 운영체제가 커널 오브젝트를 삭제하는 시기는? 커널 오브젝트는 자기 자신을 참조하는 객체에 대한 Count를 저장한다. 이것을 Usage Count라고 하며 이 값이 0이 되었을때 운영체제는 커널 오브젝트를 삭제하게 된다. “참조하는 객체 수에 따라 Usage Count 조정, 값이 0이면 삭제” 그렇다면 참조는 어떻게 이루어 지는가? 커널 오브젝트에 대한 접근 권한 설정이 되어야 한다. 또한 접근 자체는 커널 오브젝트 핸들을 통하여 이루어 지고, 핸들은 커널 오브젝트를 생성 할 때 사용하는 API함수의 반환값으로 반환된다. 2009-04-01 호남대학교 정보통신공학과
커널 오브젝트(Kernel Object) 실습 Calculator1.cpp 과제: calculator1.cpp 수정 2009-04-01 호남대학교 정보통신공학과
_tmain() 2009-04-01 호남대학교 정보통신공학과 #include<stdio.h> #include<tchar.h> #include<windows.h> enum{DIV=1, MUL, ADD, MIN, ELSE, EXIT}; DWORD ShowMenu(); void Divide(double, double); void Multiple(double, double); void Add(double, double); void Min(double, double); DWORD ShowMenu(){ DWORD sel; _fputts(_T("-----Menu----- \n"),stdout); _fputts(_T("num 1: Divide \n"),stdout); _fputts(_T("num 2: Multiple \n"),stdout); _fputts(_T("num 3: Add \n"),stdout); _fputts(_T("num 4: Minus \n"),stdout); _fputts(_T("num 5: Any other operations. \n"),stdout); _fputts(_T("num 6: Exit \n"),stdout); _fputts(_T("SELECTION >>"),stdout); _tscanf(_T("%d"), &sel); return sel; } void Divide(double a, double b){ _tprintf(_T("%f/%f=%f \n\n"), a, b, a/b); void Multiple(double a, double b){ _tprintf(_T("%f*%f=%f \n\n"), a, b, a*b); void Add(double a, double b){ _tprintf(_T("%f+%f=%f \n\n"), a, b, a+b); void Min(double a, double b){ _tprintf(_T("%f-%f=%f \n\n"), a, b, a-b); _tmain() 2009-04-01 호남대학교 정보통신공학과
2009-04-01 호남대학교 정보통신공학과 int _tmain(int argc, TCHAR* argv[]) { STARTUPINFO si = {0,}; PROCESS_INFORMATION pi; si.cb = sizeof(si); TCHAR command[] = _T("C:\\WINDOWS\\system32\\calc.exe"); DWORD sel; double num1, num2; while(true) sel = ShowMenu(); if(sel == EXIT) return 0; if(sel != ELSE){ _fputts(_T("Input Num1 Num2: "), stdout); _tscanf(_T("%lf %lf"), &num1, &num2); } switch(sel) { case DIV: Divide(num1, num2); break; case MUL: Multiple(num1, num2); break; case ADD: Add(num1, num2); break; case MIN: Min(num1, num2); break; case ELSE: ZeroMemory(&pi, sizeof(pi)); CreateProcess(NULL, command, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi); break; 2009-04-01 호남대학교 정보통신공학과
Calculator1.cpp의 문제점 “커널 오브젝트에 대한 핸들 반환이 제대로 이루어 지지 않았다. 이것은 커널 오브젝트의 소멸 연산이 이루어 지지 않는 결과를 초래하게 된다.” 2009-04-01 호남대학교 정보통신공학과
Calculator1.cpp 문제점 도식화 소멸 소멸 소멸되지 않은 커널 오브젝트들 Kernel Object 부모 프로세스 UC=1 소멸 계산기 프로세스 Kernel Object UC=1 소멸 계산기 프로세스 Kernel Object UC=1 계산기 프로세스 Kernel Object UC=2 소멸되지 않은 커널 오브젝트들 2009-04-01 호남대학교 정보통신공학과
참고문헌 뇌를 자극하는 윈도우 시스템 프로그래밍 제프리 리처의 WINDOWS VIA C/C++ 한빛미디어 윤성우 저 제프리 리처의 WINDOWS VIA C/C++ 제프리 리처, 크리스토프 나자르 저 김명신 역 운영체제론 Operating Systems second Edition 홍릉과학출판사 H.M.Deitel 저 조유근, 고건 공역 응용 운영 체제 개념 Applied Operationg System Concepts Silberschatx, Galvin, Gagne 저 조유근, 고건, 김영찬 공역 2009-04-01 호남대학교 정보통신공학과