▣ 프로세스와 쓰레드
● 프로세스(process)
- 윈도우 기본 요소
- 프로세스 메모리 주소 공간 :
· 프로그램을 실행시키기 위해 사용
· 각 프로그램은 자신만의 고유한 주소 공간에서 실행되는 것을 보장하기 위한 것
· 시스템은 프로세스 주소공간 안에 코드 모듈을 로드
· 실행되는 프로세스는 반드시 최소 하나 이상의 쓰레드를 가져야 함
● 쓰레드(thread)
- 가장 기본적인 코드 실행 유닛
- 매 순간마다 프로세스는 항상 쓰레드를 실행 시킴(즉, 실행코드를 실행함)
- 쓰레드가 마지막으로 실행됐을 때의 프로세스 상태를 시스템에게 알려주는 CONTEXT Data 구조체와 스택공간으로 사용된 하나 또는 두개의 메모리 공간이 결합된 데이터 구조체일 뿐
- 유저모드코드와 커널모드커널을 번갈아 가면서 실행(하나의 쓰레드는 두개의 스택을 가질 수 있음)
- 유저모드스택과 커널모드스택 분리(보안성, 안정성)
● scheduler and dispatcher
- 스케줄러와 디스페처에 의해 쓰레드 관리
- 어느 쓰레드를 얼마만큼의 시간동안 실행시킬지 판단하고, 현재 실행 중인 쓰레드를 다른 쓰레드로 바꾸기 위한 실질적인 컨텍스트 스위칭을 수행함
# 윈도우 커널은 선점형이고 인터럽트 가능함 → 이는 커널 모드에서 실행되고 있는 쓰레드는 유저모드의 쓰레드와 만찬가지로 인터럽트될 수 있음을 의미함
● 컨텍스트 스위칭
EX: 쓰레드가 CPU를 점유하고 그 쓰레드에 대한 실질적인 인터럽트를 수행하면 안되는 경우가 있음(예:GetMessage 처리 시)
이 때 커널은 프로세서의 전체상태를 저장하고 다른 쓰레드로 스위칭해서 그 쓰레드를 실행 시킴
어느 한 프로그램의 실행이 한가한 시점에는 충분히 다른 프로그램이 CPU를 사용할 수 있고 프로세서의 실행이 지연되는 것을 막기 위해 쓰레드 스위칭을 수행함
● 퀀텀(Quantum)
- 모든 쓰레드가 연속적으로 실행될 수 있는 최대 크기의 시간
- 커널은 로우레벨 하드웨어 타이머를 이용해서 쓰레드가 얼마 동안 실행되고 있는지 모니터링함
'Security > Reverse Engineering' 카테고리의 다른 글
[Reversing]API (0) | 2010.05.04 |
---|---|
[Reversing]프로세스 동기화, 초기화 과정 (0) | 2010.05.04 |
[Reversing]네임드 객체 (0) | 2010.05.03 |
[Reversing]객체와 핸들 (0) | 2010.05.03 |
[Reversing]색션 객체, VAD트리, User mode Mem, Mem 관리 API (0) | 2010.04.29 |