32 位的操作系统也能使用超过4G的内存-PAE 技术简介

概述

阅读本文章前请确认对X86下的分页机制有最基本的了解,否则将难以理解本文中提到的内容。
本文介绍的内容均位X86架构下的PAE技术,而不是ARM架构下的LPAE技术,虽然两者从本质来说是一样的。

介绍下列内容:

  • PAE 技术因何问世
  • PAE 技术可以干什么
  • PAE 技术实现原理
  • 为什么我们所用的 32 位操作系统只能使用 4GB 的内存

PAE 技术因何问世

PAE(Physical Address Extension,中文译名:物理地址扩展)技术最初是为了弥补32位地址在服务上不够用的情况。因为32位的地址最多只能支持4GB的内存,而这对于很多服务器来说是远远不够的,而那时64位的CPU和操作系统还没有普及,这个技术临时缓解了一下这类问题。

PAE 技术可以干什么

PAE技术可以使得多个进程使用的总内存大于 4GB,但是单个进程的所使用的内存上限依然只有 4GB。

PAE 技术实现原理

  • 地址线由 32 根增加到 36 根,寻址空间自然也就从 4GB 增加到了 64GB。
  • 改动了分页机构使其可以适应36根地址线的寻址空间。

本文主要介绍分页机构的改动。

未启动 PAE 下的分页机制

4K 分页

未启动 PAE 下的 4K 分页
  1. CR3 寄存器中取出页目录的基址。
  2. 取出线性地址中的 22 位~31 位共 10 位作为页目录项页目录中的索引,由此找到页目录项
  3. 根据页目录项中的内中找到对应的页表的基址。
  4. 取出线性地址中的 12 位~21 位共 10 位作为页表项页表中的索引,由此找到页表项
  5. 取出线性地址中的 0 位~11 位共 12 位作为页内偏移,从页表项中取出页基址,两者相加则到物理地址

4M分页

未启动 PAE下的 4M 分页
  1. CR3 寄存器中取出页表的基址。
  2. 取出线性地址中的 22 位~31 位共 10 位作为页表项页表中的索引,由此找到页表项
  3. 取出线性地址中的 0 位~21 位共 22 位作为页内偏移,从页表项中取出页基址,两者相加则到物理地址

启动 PAE 下的分页机制

<>4K 分页

启动 PAE下的 4K分页
  1. CR3 寄存器中取出页目录指针表的基址。
  2. 取出线性地址的 30 位~31 位共 2 位作为页目录指针页目录指针表中的索引,由此找到页目录指针
  3. 根据页目录指针获得对应的页目录的基址
  4. 取出线性地址中的 21 位~29 位共 9 位作为页目录项页目录中的索引,由此找到页目录项
  5. 根据页目录项找到对应页表的基址。
  6. 取出线性地址中的 12 位~20 位共 9 位作为页表项页表中索引,由此找到页表项
  7. 取出线性地址中的 0 位~11 位共 12 位作为页内偏移,从页表项中取出页基址,两者相加则到物理地址

4M 分页

启动  PAE 下的 4M 分页
  1. CR3 寄存器中取出页表指针表的基址。
  2. 取出线性地址的 30 位~ 31 位共 2 位作为页表指针页表指针表中的索引,由此找到页表指针
  3. 根据页表指针找到对应的页表的基址。
  4. 取出线性地址中的 21 位~29 位共 9 位作为页表项页表中的索引,由此找到页表项
  5. 取出线性地址中的 0 位~21 位共 22 位作为页内偏移,从页表项中取出页基址,两者相加则到物理地址

本文作者:ADD-SP
本文链接https://www.addesp.com/archives/242
版权声明:本博客所有文章除特别声明外,均默认采用 CC-BY-NC-SA 4.0 许可协议。
暂无评论

发送评论 编辑评论


上一篇
下一篇