1. 가상 주소
세그먼트 레지스터 (16bit) |
메모리 주소 (Virtual Address) |
[*] 세그먼트 레지스터 -> GDT 또는 LDT의 Segment Descriptor 을 참조 (GDTR -> GDT, LDTR-> LDT)
- GDT : 모든 프로그램이 참조 가능한 세그먼트 디스크립터 테이블
- LDT : 태스크당 독립적으로 세그먼트 디스크립터 테이블 정의
- 세그먼트 레지스터가 참조한 세그먼트 디스크립터의 Base Bits와 가상 주소를 더해서 선형 주소를 구하게 된다.
(이를 Sementation이라고 함)
2. 선형 주소
DIR (10 bit) |
Page (10 bit) |
Offset (12 bit) |
- 위에서 Segmentation 과정을 거쳐서 구한 선형 주소를 위와 같이 표현된다.
- 이제 선형 주소는 Paging 과정을 거쳐 물리주소로 접근하게 된다. 페이징 과정은 아래와 같다.
[*] CR3 : 프로세스 별로 고유한 값을 가짐. -> Page Directory를 가리킴
[*] DIR : Page Directory 에서의 Offset 값. -> Page Table를 가리킴
[*] Page : Page Table에서의 Offset 값. -> 해당 페이지의 물리 메모리를 가리킴
[*] Offset : 물리 메모리 에서의 Offset 값. -> 드디어 물리 메모리에 접근
==> CR3 -> [Page Directory] + DIR -> [Page Table] + Page -> [Physical Address] + Offset
'Programming > WDK' 카테고리의 다른 글
SSDT 후킹 (0) | 2014.02.22 |
---|---|
메모리 접근 (0) | 2014.01.19 |
WDK빌드 환경 ( + Visual Studio ) (0) | 2014.01.13 |