-
-
[原创]分页模式之我见(简述)
-
发表于: 2021-6-28 14:22 4554
-
本文是对前两天发的帖子《物理地址、线性地址、逻辑地址之我见》的补充。如有谬误,敬请指正!
分页模式从推出至今已有四种模式:32-bit、PAE、4-level 和 5-level。每种模式都与物理地址和线性地址的宽度息息相关。下表截取自 Intel 手册:
上表中物理地址位宽仅为参考值,具体值由 MAXPHYADDR 决定,如何获取 MAXPHYADDR 详见我的另一篇帖子。
由于各模式都有两至三种不同大小的页面,因此,线性地址的分割也存在多种格式,虽然如此,但各种格式大同小异。下表简略说明了各格式:
上表仅列举了不同宽度线性地址分割 4 KB 页面的情况,其他尺寸页面的分割只需将 OFFSET 的宽度扩大以覆盖掉最近的表项即可。
在 32 ~ 57 Bits 的线性地址中存在 2 ~ 5 个表,每个表占 4 KB 物理地址,因此,每个表中可存放 1024/512 个表项(4096÷4/4096÷8),唯独 PAE.PDPTE 例外。
顶级表的入口地址总是存在于 CR3 寄存器中。
不知道,各位看官有没有发现,物理地址和线性地址的宽度总是不一样的,也就是说并非一一对应,该死的牙膏厂(Intel)!一次性都 64 Bits 就没有这么麻烦了。
我在早先学习分页时,就被两个地址宽度不一的问题,困扰了很久。后来几经磨砺,才渐渐的明白了其中原委。其实很简单……由于各个表项都是可编程的,管理地址空间的软件(OS),只要不分配或动态调整超出范围的地址即可。
整体而言,分页模式依据线性地址位宽区分,可归纳为两大类 32/48+,其他都是子集而已。
同时,本文并未对每种表的属性,以及,各模式的开关和切换做任何说明,原因有三:1、太麻烦……;2、一些属性我也不清楚具体何用;3、作为入门,以上内容够用,毕竟不是人人都写操作系统。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [原创]分页模式之我见(简述) 4555
- [原创]物理地址、线性地址、逻辑地址之我见 10906
- [原创]Windows(x86)页表与虚拟空间之我见 16190