内存管理(4)x86_32地址映射(扩展机制)分析

1.PAE和PSE

1.1、PAE(Physical Address Extensions)

        在x86 CPU中,只有32位地址总线,也就意味着只有4G地址空间。为了实现在32位系统中使用更多的物理内存,Intel CPU提供了PAE(Physical Address Extensions)机制,这样可以使用超过4G物理内存。
        PAE机制的打开,需要设置CR0、CR4控制寄存器和IA32_EFERMSR寄存器。设置值为CR0.PG = 1,CR4.PAE = 1和IA32_EFER.LME = 0。但PAE机制打开后,MMU会将32位线性地址转换为52位物理地址。尽管物理地址是52位(4PB),但线性地址仍然为32位,即进程可使用的虚拟内存不超过4GB。
1.2PSE(Page Size Extensions)

前面提到x86/x86_64 CPU中提供的是段页式机制,也介绍了页面。页面大小虽然是固定的,但x86/x86_64 CPU支持两种页面大小4KB和4MB。大多数情况下OS内核使用的是4KB页面,但系统中多数进程使用内存较大时,如每次申请至少4MB,则使用4MB页面较为合适。当控制寄存器CR4.PSE = 1时,页面大小是4MB。

2.PAE页面机制地址映射过程

PAE(Physical Address Extension)是IA-32架构中物理地址扩展机制。在正常情况下,32位系统只能使用4G物理内存,使能PAE机制后使地址总线达到36根,最大可以访问64G物理内存。必须设置CR0寄存器的第31bit为0(CR0.PG=1),打开页式映射机制;设置CR4寄存器第5bit为1(CR4.PAE=1)和IA32_EFERLMW=0,使能PAE机制。当逻辑处理器使用PAE页面机制时,会将32位线性地址转换为52位物理地址。
2.1 PDPTE寄存器
当使用PAE机制时,CR3寄存器的值是指向32字节对齐的页面目录指针表(Page Directory PointerTable)。
                                           图1 PAE机制下CR3寄存器的使用

页面目录指针表共有4个64bit项,称为PDPTEs每个PDPTE控制1G线性地址空间的访问。对应PDPTE,逻辑处理器维护4个架构无关的内部PDPTE寄存器,分别为PDPTE0、PDPTE1、PDPTE2、PDPTE3。

                                           图2 PAE机制下PDPTE格式

2.2逻辑地址到线性地址的映射
PAE机制仅与页面映射有关,因此逻辑地址到线性地址映射过程一样。详细步骤请参考地址映射部分的非PAE机制下映射过程。
2.3 线性地址到物理地址的映射
PAE机制可以映射4K页面或者2MB页面,在此我们仅考虑4K页面的映射过程,如下图所示。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值