32位---->两级页表映射 页目录项--页面表--物理页面
段寄存器16位,其中低两位表示的是在内核态或者用户态。第底三位表示的是GDT,LDT,其余十三位用来表示在GDT中的偏移。GDT中的段描述项,表示基址32位,P位是否在内存中,还有表示读写可执行权限 共64字节
CR3中存储--PGD地址
MMU中:
页目录项 20位表示下一层的页面地址 最低位P位表示所映射的页面是否在内存中
页面表 P表示所映射的页面是否在内存中
引入物理扩展页---三级页表 页目录 PGD 页中间目录 PMD 页表 PT 物理页面
支持大于4G的物理内存36位----虚拟地址依然是32位
每一页能存放的PTE数目从1024变成了512
64位----四级分页模型 9 9 9 9 12 ==> 页全局目录(page global Ditectory) 页上级目录 页中间目录 页表(page table) 页内偏移
地址转换过程基本过程如下:
1.从CR3寄存器中读取页目录所在物理页面的基址(即所谓的页目录基址),从线性地址的第一部分获取页目录项的索引,两者相加得到页目录项的物理地址。
2.第一次读取内存得到pgd_t结构的目录项,从中取出物理页基址取出(具体位数与平台相关,如果是32系统,则为20位),即页上级页目录的物理基地址
3.从线性地址的第二部分中取出页上级目录项的索引,与页上级目录基地址相加得到页上级目录项的物理地址。
4.第二次读取内存得到pud_t结构的目录项,从中取出页中间目录的物理基地址。
5.从线性地址的第三部分中取出页中间目录项的索引,与页中间目录基址相加得到页中间目录项的物理地址。
6.第三次读取内存得到pmd_t结构的目录项,从中取出页表的物理基地址。
7.从线性地址的第四部分中取出页表项的索引,与页表基址相加得到页表项的物理地址。
8.第四次读取内存得到pte_t结构的目录项,从中取出物理页的基地址。
9.从线性地址的第五部分中取出物理页内偏移量,与物理页基址相加得到最终的物理地址。
10.第五次读取内存得到最终要访问的数据。
整个过程是比较机械的,每次转换先获取物理页基地址,再从线性地址中获取索引,合成物理地址后再访问内存。不管是页表还是要访问的数据都是以页为单 位存放在主存中的,因此每次访问内存时都要先获得基址,再通过索引(或偏移)在页内访问数据,因此可以将线性地址看作是若干个索引的集合。