《软件调试》读书笔记一

一、分页机制
关键词:CR0、CR2、CR3、CR4、页目录、页目录表项、页表、页表项、内存页(物理内存被分成若干个特定大小的页,也叫物理页)


CR0:该寄存器中的PG标志用于是否启用分页分页机制


CR2:该寄存器中保存的是一个线性地址


CR3:该寄存器中保存的是页目录的物理地址(指基地址)


CR4:该寄存器中的PAE(Physical Address Extension)标志用来是否启用物理地址扩展,启用的话,可以寻址高达64GB的物理内存,不启用的话,最多寻址4GB的物理内存。该寄存器中的PSE(Page Size Extension)标志位用于启用大页面支持,PAE=1时大页面为2M或4M,PAE为0时,大页面为4KB。




页目录:页目录用来存放页目录表项,它是一个线性表,简称PDE;一个页目录大小最大为4K,最多有1024个表项,


页目录项:“页目录项”就是“页目录”里存放的项,因为一个“页目录项”大小为4byte(32b);当没有启用PAE时,一共有两种PDE格式,分别用于指向4kb的“页表”和4MB的“内存页”。其中前者PDE格式中高20位代表4k大小页表的基地址的高20位,该基地址的低12位固定为0,所以页表一定是4KB边界对齐的(这种PDE格式中的内存页大小是4KB,因为它通过页表寻找内存页,页表中高20位表示内存页的高20位,低12位为内存页的大小)。后者PDE格式中高10位代表4MB“内存页”的基地址的高10位,该4MB的内存页一定是按4MB对齐的。


页表:“页表”用来存放"页表项",每个"页表"大小4KB,有1024个"页表项"。


页表项:"页表项"就是"页表"存放的项,占4个字节。页表项中高20位存储“内存页”的基地址,后12位为标志位。


注:为什么要用二级索引,(X86中)因为页大小为4KB,而内存4GB,要索引这4GB,就要1M个页,而要索引这1M个页就要1M个索引,一个索引要4byte内存(32位系统),所以要1M乘以4Byte=4MB的连续物理内存才能建立这个索引。为了避免占用如此巨大的内存空间,所以有了二级页表机制(页目录表和页表)。
注:2MB和4MB的大内存页直接映射到"页目录项",不需要使用"页表"。
疑问:CR4中PAE(Physical Address Extension)和PSE的作用,PDE中PS的作用。


一、未开启PAE
线性地址转换成物理地址步骤:
情况一(内存页大小为4KB):
首先CR2中得到“线性地址”,然后CR3中得到“页目录”的基地址,然后"线性地址"中的高10位为偏移(偏移指的是页目录项中的第几个,好比数组中的下标)找到目标“页目录项”,然后从“页目录项”中得到“页表”的基地址,然后在“线性地址”中的中10位得到“页表项”的偏移,然后在“页表项”中得到“内存页”的基地址,然后在“线性地址”中的后12位得到“物理内存”的偏移。


情况二(内存页大小为4MB):
首先CR2中得到“线性地址”,然后CR3中得到“页目录”的基地址,然后“线性地址”中的高10位得到“页目录项”的偏移,然后从“页目录项”的高10位得到“内存页”的基地址,然后从“线性地址”中的后22位得到“物理地址”的偏移。
二、开启PAE


cr4寄存器中的PAE标志激活,页目录项中的页大小标志PS启用大尺寸(PAE启动时为2MB)
Intel的寻址能力达到2^36=64GB,因此Intel改变了分页机制。64GB的RAM被分为2^24个内存页,而页表项的内存页基地址段字段从20位扩展到24位,然后加上它的12位标志位,总和为36位,根据内存对齐,所以你页表大小为64位(8byte),结果一个大小4KB的页表含有512个页表项。“页目录表项”大小也有64bit,4KB的“页目录表”有512个“页目录表项”,Intel还引入一个叫做页目录指针表的新表,它有4个表项,表项的作用是指向“页目录表”的基地址,由此可知,“页目录指针表项”的大小也为64bit,然后就是cr3包含一个27bit的页目录指针表的基地址段。因为它存放在RAM的前4GB中,并在32字节(2^5)的倍数上对齐,因此27bit足以表示这种表的基地址。


当把线性地址映射到4KB的页时(页目录项中PS标志清零),32位线性地址按下列方式解释
cr3  指向一个页目录指针
线性地址位31-30  指向页目录指针中的一个
线性地址位29-21  指向页目录中的512个项中的一个
线性地址位20-12  指向页表中的512个项中的一个
线性地址位11-0   指向4KB内存页中的偏移量






当把线性地址映射到2MB的页时(页目录项中PS标志置为1),32位线性地址按下列方式解释


cr3 指向一个PDPT
线性地址位31-30  指向页目录指针中的一个
线性地址位29-21  指向页目录中的512个项中的一个
线性地址位20-0   指向2MB内存页中的偏移量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值