虚拟地址最低的12bit(2的12次方等于4096),作为页内偏移,刚好可以索引4KB,也就是一个物理页中的每个字节。 一个虚拟 地址转换成物理地址的计算过程就是,处理器通过CR3找到当前页目录所在物理页,取虚拟地址的高10bit,然后把这10bit左移2bit(因为每个页目录项4个字节长,左移2bit相当于乘4)得到在该页中的地址,取出该地址处PDE(4个字节),就找到了该虚拟地址对应 页表所在物理页,取虚拟地址第12位到第21位这10位,然后把这10bit左移2bit(因为每个页表项4个字节长,左移2bit相当于乘4)得到在该页中的地址,取出该地址处的PTE(4个字节),就找到了该虚拟地址对应物理页的地址,最后加上12bit的页内偏移得到了物理地址。 32bit的一个指针,可以寻址范围0x00000000-0xFFFFFFFF,4GB大小。也就是说一个32bit的 指针可以寻址整个4GB 地址空间的每一个字节。一个 页表项负责4K的 地址空间和 物理内存的映射,一个页表1024项,也就是负责1024*4k=4M的地址空间的映射。一个页目录项,对应一个 页表。一个页目录有1024项,也就对应着1024个 页表,每个页表负责4M 地址空间的映射。1024个 页表负责1024*4M=4G的 地址空间映射。