contents Thread function Create Thread Terminate Thread

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
6장. 멀티스레드 멀티스레드 프로그래밍의 필요성을 이해하고 기본 개념을 익힌다.
Image & Video processing
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
최윤정 Java 프로그래밍 클래스 상속 최윤정
C 프로그래밍 I.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
Network Lab. Young-Chul Hwang
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
컴퓨터 프로그래밍 기초 [Final] 기말고사
MultiThread.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
10장 함수.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Chapter 25. 메모리 관리와 메모리의 동적 할당
5장. 참조 타입.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Chap08 다중 스레드 8.1 스레드 개요 8.2 Thread 클래스와 스레드 생명주기 8.3 스레드 생성과 사용
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
DK-128 ADC 실습 아이티즌 기술연구소
Sungkyunkwan University OS Project Dongkun Shin
13. 연산자 오버로딩.
Method & library.
멀티스레드 Chapter 05. * 학습목표 멀티스레드의 필요성을 이해하고 기본 개념을 익힘.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
29강 JAVA 스레드 - 스레드란? - 멀티스레드 문법 - synchronized Lecturer Kim Myoung-Ho
Device Driver 임베디드 시스템 I.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
10장 부프로그램 구현 순천향대학교 컴퓨터공학과 하 상 호.
데이터베이스실험실 석사 2학기 조정희 TCP/IP Socket Programming… 제 18장 윈도우 기반 쓰레드 사용하기 데이터베이스실험실 석사 2학기 조정희
Part 4 클래스 라이브러리 Chapter 10 : 다중 스레드 Chapter 11 : 패키지와 주요 클래스
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
Windows System Programming
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
( Windows Service Application Debugging )
제 6 장 함수(functions).
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
05. General Linear List – Homework
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
함수, 모듈.
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
9 브라우저 객체 모델.
AdcRead API 함수 분석 마이크로프로세서.
Numerical Analysis Programming using NRs
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
Windows System Programming
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
Reversing 발표자 : 박현우.
CODE INJECTION 시스템B 김한슬.
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
Presentation transcript:

Windows System Programming - Thread creation, destruction- Tutor: 20060106 배문희

contents Thread function Create Thread Terminate Thread The inner Thread C/C++ Runtime Library 2009-04-15 호남대학교 정보통신공학과

Thread First Creation 2009-04-15 호남대학교 정보통신공학과

Thread Function Thread entry point function 2009-04-15 호남대학교 정보통신공학과

Thread Funtion Thread를 생성하기 위해서 모든 스레드는 수행을 시작할 진입점 함수(entry-point function)을 반드시 가져야 한다. Thread entry-point function format DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; ... ... return (dwResult); } 프로세스 생성과 동시에 main함수를 호출해줄 스레드를 생성한다. 이러한 스레드를 주 스레드(main thread)라고 부르며 프로그래머에 의해 생성되는 쓰레드와 구분지어 말한다. 즉! 주 스레드의 진입점 함수는 _tmain이나 _tWinMain이다. 2009-04-15 호남대학교 정보통신공학과

Thread Funtion Thread entry-point funtion DWORD WINAPI ThreadFunc(PVOID pvParam){ DWORD dwResult = 0; ... ... return (dwResult); } 하나의 매개변수만 전달 가능 반드시 값을 반환해야 한다  스레드의 종료코드가 된다 스레드 함수를 포함한 스레드에서 사용되는 함수들에는 가능한 한 함수 매개변수와 지역변수만을 사용하도록 작성  만일 정적(static)이나 전역(global)변수를 사용하면 다수의 스레드가 접근: 이는 변수 값이 잘못 변경되는 원인이 됨 2009-04-15 호남대학교 정보통신공학과

Create Thread CreateThread function 2009-04-15 호남대학교 정보통신공학과

CreateThread CreateThread function format HANDLE WINAPI CreateThread( 스레드 커널 오브젝트 핸들 상속에 대한 설정 자식프로세스에게 핸들상속: SECURITY_ATTRIBUTES구조체의 bInhertHandle속성을 TRUE CreateThread function format HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 스레드 스택의 사이즈 기본값(0) : 1024*1024 스레드 함수 주소와 매개변수 스레드 함수 세부 제어 플래그 스레드 ID값을 저장할 DWORD변수 주소 CreateThread함수에 대하여 Windows가 제공하는 함수 C/C++코드로 작성할 경우 MS C/C++ 런타임 라이브러리에서 제공하는 _beginthreadex함수를 사용 각 컴파일러는 CreateThread함수를 대체할만한 함수를 제공 반드시 컴파일러에 의해 제공되는 다른 함수를 사용 2009-04-15 호남대학교 정보통신공학과

Terminate Thread Thread 종료 4가지 방법 2009-04-15 호남대학교 정보통신공학과

Terminate Thread Thread를 제거하기 위해서 스레드 함수 반환 (강추) 스레드 함수 내에서 ExitThread함수 호출 (비추) 동일한 프로세스나 다른 프로세스에게 TerminateThread함수 호출 스레드가 포함된 프로세스 종료 스레드 함수 자체의 반환이 가장 안전적이며 다른 방법은 자제 할 것을 권고 그럼에도 다른 방법이 존재 하는 것은 꼭 필요로 하는 부분이 있기 때문 단편적인 예로 ExitThread함수로 Thread를 종료할 경우 C++의 new연산으로 생성된 객체에 대하여 파괴자호출이 발생되지 않기 때문에 메모리에 그대로 남게 되어 메모리 누수가 발생되는 문제가 있다. 2009-04-15 호남대학교 정보통신공학과

The inner Thread Thread의 내부 2009-04-15 호남대학교 정보통신공학과

Thread의 내부 VOID RtlUserThreadStart(...) { ... } Thread kernel object IP SP 사용카운트 = 2 컨텍스트 다른속성과 통계 정보 Thread kernel object 다른 CPU 레지스터 정지카운트 = 1 종료코드 = STILL_ACTIVE 시그널 상태 = FALSE pfnStartAddr pvParam Thread Stack 1. CreateThread함수 호출 2. 스레드 커널 오브젝트 생성 3. 스레드 스택 메모리 공간 할당 프로세스의 주소공간으로 부터 할당 4. 초기화 완료 레지스터 셋의 값 지정 5. IP로 부터 RtlUserThreadStart함수 호출 6. 스레드 시작 VOID RtlUserThreadStart(...) { ... } NTDLL.dll 쓰레드의 실행 순서에 대한 내부 구조 2009-04-15 호남대학교 정보통신공학과

C/C++ Runtime Library C/C++ 런타임 라이브러리에 대한 고찰 2009-04-15 호남대학교 정보통신공학과

C/C++ Runtime Library C/C++ Runtime Library에 대한 고찰 해결방법 uintptr_t __cdecl _beginthreadex( void * _Security, nsigned _StackSize, unsigned (__stdcall * _StartAddress) (void *), void * _ArgList, unsigned _InitFlag, unsigned * _ThrdAddr ); 2009-04-15 호남대학교 정보통신공학과

참고문헌 뇌를 자극하는 윈도우 시스템 프로그래밍 한빛미디어 윤성우 저 제프리 리처의 WINDOWS VIA C/C++ 제프리 리처, 크리스토프 나자르 저 김명신 역 2009-04-15 호남대학교 정보통신공학과