转自:http://user.qzone.qq.com/31731705/blog/1323414733
PAE 即为物理地址扩展(Physical Address Extension),详细的内容请Google。
我的电脑是Win7,CPU是双核处理器,信息如下,
0: kd> !sysinfo cpuinfo
[CPU Information]
~MHz = REG_DWORD 2527
Component Information = REG_BINARY 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Configuration Data = REG_FULL_RESOURCE_DESCRIPTOR ff,ff,ff,ff,ff,ff,ff,ff,0,0,0,0,0,0,0,0
Identifier = REG_SZ x86 Family 6 Model 23 Stepping 10
ProcessorNameString = REG_SZ Intel(R) Core(TM)2 Duo CPU P8700 @ 2.53GHz
Update Signature = REG_BINARY 0,0,0,0,7,a,0,0
Update Status = REG_DWORD 6
VendorIdentifier = REG_SZ GenuineIntel
MSR8B = REG_QWORD a0700000000
1: kd> r cr4
cr4=000406f9
0000 0000 0000 0100 0000 0110 1 1 11 1001
虚拟地址(VA,32位,这里全用0表示) 00,000000000,000000000,000000000000
高2位:页目录指针的索引,接下来9位:页目录的索引,再接下来9位:页表索引,低12位:页内偏移,每个页目录项或者页表项占8个Bytes。
0xC0200000-->0x40000000
0xC0400000-->0x80000000
0xC0600000-->0xC0000000
也就是说,页表(PTE)放在0xC0000000到0xC07FFFFF区域,映射了整个内存区域。
每4K内存映射到8个Byte上,得到这样的公式:页表的地址PTE = 0xC0000000 + VA >> 12 << 3
0xC0600000-->0xC0000000
0xC0601000-->0xC0200000
0xC0602000-->0xC0400000
0xC0603000-->0xC0600000
0xC0600000,0xC0601000,0xC0602000,0xC0603000这4页不仅是页表,还是页目录(PDE),因为它的内容是页表的地址。每个4K的页目录映射到2M的页表,总共有4个页目录,16K。
0xC0603000-->0xC0600000
0xC0603008-->0xC0601000
0xC0603010-->0xC0602000
0xC0603018-->0xC0603000
0xC0603020-->0xC0604000
......
0xC0604000-->0xC0800000