长模式下的分页

前提

  • 如果开启了长模式,则必须同时开启分页模式,因为长模式弱化了分段模型
  • 而分段模型也确实有很多不足,不适应现在操作系统和应用软件的发展
  • 长模式也扩展了 CPU 的位宽,使得 CPU 能使用 64 位的超大内存地址空间
  • 所以,长模式下的虚拟地址必须等于线性地址且为 64 位

4KB 页

4KB 页的构成

  • 在这里插入图片描述

  • 该分页方式下,64 位虚拟地址被分为 6 个位段,分别是:

    • 保留位段,顶级页目录索引、页目录指针索引、页目录索引、页表索引、页内偏移,顶级页目录、页目录指针、页目录、页表
  • 各占有 4KB 大小,其中各有 512 个条目,每个条目 8 字节 64 位大小

  • CR3 已经变成 64 位的 CPU 的寄存器,它指向一个顶级页目录,里面的顶级页目项指向页目录指针,依次类推

  • 注意

    • 虚拟地址 48 到 63 这 16 位是根据第 47 位来决定的,47 位为 1,它们就为 1,反之为 0
    • 这是因为 x86 CPU 并没有实现全 64 位的地址总线,而是只实现了 48 位,但是 CPU 的寄存器却是 64 位的
    • 这种最高有效位填充的方式,即使后面扩展 CPU 的地址总线也不会有任何影响

CR3、顶级页目录项、页目录指针项、页目录项、页表项

CR3

  • 在这里插入图片描述

顶级页目录项

  • 在这里插入图片描述

页目录指针项

  • 在这里插入图片描述

页目录项

  • 在这里插入图片描述

页表项

  • 在这里插入图片描述

总结

  • 长模式下的 4KB 分页下,由一个顶层目录、二级中间层目录和一层页表组成了 64 位地址翻译过程
  • 顶级页目录项指向页目录指针页,页目录指针项指向页目录页,页目录项指向页表页,页表项指向一个 4KB 大小的物理页
  • 各级页目录项中和页表项中依然存在各种属性位,这在图中已经说明
  • 其中的 XD 位,可以控制代码页面是否能够运行

2MB 页

2MB 页构成

  • 在这里插入图片描述

  • 在这种分页方式下,64 位虚拟地址被分为 5 个位段 :保留位段、顶级页目录索引、页目录指针索引、页目录索引,页内偏移,顶级页目录、页目录指针、页目录

  • 各占有 4KB 大小,其中各有 512 个条目,每个条目 8 字节 64 位大小

  • 长模式下 2MB 和 4KB 分页的区别

    • 2MB 分页下是页目录项直接指向了 2MB 大小的物理页面,放弃了页表项
    • 然后把虚拟地址的低 21 位作为页内偏移,21 位正好索引 2MB 大小的地址空间

CR3、顶级页目录项、页目录指针项、页目录项

CR3

  • 在这里插入图片描述

顶级页目录项

  • 在这里插入图片描述

页目录指针项

  • 在这里插入图片描述

页目录项

  • 在这里插入图片描述

总结

  • 上图中没有了页表项,取而代之的是,页目录项中直接存放了 2MB 物理页基地址
  • 由于物理页始终 2MB 对齐,所以其地址的低 21 位为 0,用于存放页面属性位
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值