1 / 19

프로세스와 쓰레드

프로세스와 쓰레드. 프로세스와 쓰레드 및 SEH. 프로세스와 쓰레드 관계. 프로세스와 쓰레드 (1). 프로세스 프로그램 ( 코드 ) 가 메모리상에 읽혀져서 실행중인 상태 . 각 프로세스는 별도의 리소스를 할당 받음 . 쓰레드 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델 . 쓰레드들은 같은 프로세스에 있는 자원과 상태를 공유한다. 프로세스와 쓰레드 (2). 쓰레드 1. 쓰레드 2. 프로세스 제어블록 (PCB). 쓰레드 제어 블록. 쓰레드 제어 블록. 핸들 테이블.

umed
Download Presentation

프로세스와 쓰레드

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 프로세스와 쓰레드 프로세스와 쓰레드 및 SEH

  2. 프로세스와 쓰레드 관계

  3. 프로세스와 쓰레드(1) • 프로세스 • 프로그램(코드)가 메모리상에 읽혀져서 실행중인 상태. • 각 프로세스는 별도의 리소스를 할당 받음. • 쓰레드 • 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델. • 쓰레드들은 같은 프로세스에 있는 자원과 상태를 공유한다.

  4. 프로세스와 쓰레드(2) 쓰레드1 쓰레드2 프로세스 제어블록 (PCB) 쓰레드 제어 블록 쓰레드 제어 블록 핸들 테이블 . . . 프로세스 주소공간 사용자 스택 사용자 스택 커널 스택 커널 스택

  5. 커널 객체와 핸들 테이블(1) • 커널 객체(Kernel Object) • 커널에서 리소스를 원활히 관리하기 위해 중요한 정보를 담아둔 데이터 블록. • 커널 객체는 운영체제 종속적이며, 소멸시점은 운영체제에 의해 결정된다. • 핸들 테이블 • 프로세스에서 사용하는 모든 핸들들에 대한 커널 객체 포인터 정보를 배열 형태로 가지고 있는 공간.

  6. 커널 객체와 핸들 테이블(2) 커널 영역 유저 영역 프로세스 핸들 테이블 =커널 객체 헤더= HandleCount = 1 ReferenceCount = 2 핸들 5 =커널 객체 Body= union Body{ 파일객체; 타이머; 쓰레드; … } ObjectReference

  7. 핸들 테이블과 핸들 31 26 18 9 1 25 17 10 2 0 핸들값(32bit) Tag Unused Layer1Index Layer2Index Layer3Index Layer3Array Layer1Array EProcess Layer2Array

  8. EPROCESS와 PEB • EPROCESS • 커널영역의 메모리에 표현된 프로세스 정보. • PEB • 유저영역의 메모리에 표현된 프로세스의 추가적인 정보. • 불필요한 커널레벨 진입을 줄임.

  9. EPROCESS

  10. PEB

  11. ETHREAD 와 TEB • ETHREAD • 실제로 CPU에 의해 명령어가 실행되어지는 실행의 주체. • 쓰레드가 하나 생성될 때마다 ETHREAD구조체가 생성됨. • TEB • (이미지 로더와 DLL들)유저모드 컴포넌트의 컨텍스트 정보를 저장. • 커널모드에서만 쓸수 있는 영역에 Write 하기 위해서 필요.

  12. ETHREAD

  13. TEB

  14. 전체 구조 프로세스 실행시 커널/유저 영역의 개략적인 상태 Vad Vad =TEB= Peb 쓰레드ID 유저영역 =PEB= Ldr =LDR_MODULE= Vad LDR_MODLE … 커널영역 커널Obj헤더 커널Obj헤더 =ETHREAD= Teb 프로세스ID 쓰레드ID ThreadListEntry =핸들테이블= EPROCESS ETHREAD =EPROCESS= 프로세스ID ObjectTable ThreadListHead Peb VadRoot ActiveProcessLinks ETHREAD 커널 Obj … EPROCESS 커널 Obj …

  15. Structured Exception Handling(1) • 키워드 • _try • _except() • _finally • 특징 • _try{} _except(){} 혹은 _try{} finally{}형태로만 사용 가능.

  16. Structured Exception Handling(2) • try{ } finally{ } • 프로그램이 정상/비 정상적으로 실행되더라도 반드시 실행되어야 하는 코드가 있는경우. try{ pMem = MemAlloc(100); a = b/c; //c=0 //MemRelease(pMem); }_finally{ if(pMem != NULL){ MemRelease(pMem); }

  17. Structured Exception Handling(3) • _try{ } _except(EXCEPTION_EXECUTE_HANDLER){ } • 예외상황 발생시 예외처리 _try{ a = b/c; //c=0 print(“did you see this?); }_except(EXCEPTION_EXECUTE_HANDLER){ //예외 처리 }

  18. Structured Exception Handling(4) • _try{ } _except(EXECPTION_CONTINUE_EXECUTION){ } • 예외상황 발생시 계속 진행 global int a = 0; _try{ int c = 10/a; print(“did you see this?”); }_except( RecoverException( GetExceptionCode() )){ } RecoverException(DWORD Ecode) { if(Ecode == 0나누기 예외) { a = 2; } return EXCEPTION_CONTINUE_EXECUTION; }

  19. Structured Exception Handling(5) • _try{ } _except(EXCEPTION_CONTINUE_SEARCH){ } • 밖에 있는 예외 핸들러를 통해 예외를 처리. DivideZero(){ _try{ a = b/c; //c=0 }_exception( EXCEPTION_CONTINUE_SEARCH){ } } _try{ DivideZero(); print(“did you see this”); }_except(EXCEPTION_EXECUTE_HANDLER){ //예외 처리 }

More Related