본문 바로가기
Programming/WDK

가상주소-선형주소-물리주소 변환

by bbolmin 2014. 1. 25.



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