Windows System Programming

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

신입생 Study 커리큘럼 OneScore. Contents 후니의 시스코 네트워킹 (4 주 ) 01/ Network 생활코딩 – 웹 서비스 만들기 (4 주 ) Wowhacker 웹 게임 (4 주 ) 02/ Web 뇌를 자극하는 윈도우 시스템 프로그래밍 (4 주 ) 리버싱.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
contents Thread function Create Thread Terminate Thread
DB 프로그래밍 학기.
DB 프로그래밍 학기.
Database Laboratory, Hong Ik University
제14장 동적 메모리.
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
C 프로그래밍 I.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
Chapter 4 Multi-Threaded Socket
-Part2- 제3장 포인터란 무엇인가.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
제 14장 Multicast & Broadcast
양방향 파이프의 활용 양방향 통신 파이프는 기본적으로 단방향이므로 양방향 통신을 위해서는 파이프를 2개 생성한다.
07. 디바이스 드라이버의 초기화와 종료 김진홍
제3장 스택과 큐.
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
C 프로그래밍.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
Signal & Inter-Process Communication
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
자료구조: CHAP 4 리스트 (3) 순천향대학교 컴퓨터공학과 하 상 호.
TCP/IP Socket Programming…
제2장 프로세스 이나현.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
27장. 모듈화 프로그래밍.
2015 운영체제 특강 수업 소개 Special Topics on Operating Systems
19. 함수 포인터와 void 포인터.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
Linux/UNIX Programming
School of Electronics and Information. Kyung Hee University.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
LabVIEW WiznTec 주임 박명대 1.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Unix 시스템 인천대학교 전자계산학과 성미영
9강. 클래스 실전 학사 관리 프로그램 만들기 프로그래밍이란 결국 데이터를 효율적으로 관리하기 위한 공구
Signal & Inter-Process Communication
Linux/UNIX Programming
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
운영체제 (Operating System) (하드웨어와 응용 프로그램 사이의 인터페이스 역할을 담당하는 시스템 소프트웨어)
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
C 프로그래밍 I.
3. 모듈 (5장. 모듈).
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
운영체제 (Operating Systems)
System Security Operating System.
Numerical Analysis Programming using NRs
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
Completion Port기반의 채팅프로그램
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
13. 포인터와 배열! 함께 이해하기.
유승석 FILE I/O File Input/Output 유승석 SD50 – C# & .NET Platform.
Signal & Inter-Process Communication
2. 프로세스 B 안우진 - 운영체제 -.
Presentation transcript:

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 호남대학교 정보통신공학과