内存管理是操作系统中非常重要的一个部分。随着计算机技术的不断发展,内存管理的方式 也在不断演变。本文将介绍 intel 64 体系几种常见的内存管理方式。

平板式内存管理是一种比较简单的内存管理方式。它采用页式管理,屏蔽掉段式管理。具体 来说,它将逻辑地址直接映射为线性地址,定义一个代码段和一个数据段,两个段的大小都 是 4GB。这种方式的好处是简单易懂,但是它的缺点是不能进行多进程的内存隔离。

为了解决多进程内存隔离的问题,可以采用保护平板式内存管理的方式。具体来说,它定义 了内核代码段、内核数据段、用户代码段和用户数据段,每个段的基地址都是 0,大小为 4GB。进程执行内核代码时使用内核段,执行用户代码时使用用户段。这种方式的好处是可 以进行多进程的内存隔离,但是它的缺点是需要进行地址转化,影响效率。多段式内存管理 是一种完全采用段式管理的方式,屏蔽掉页式管理。它可以进行多进程的内存隔离,但是需 要进行地址转化,也会影响效率。

基于物理地址拓展的页式内存管理是一种支持更大物理地址空间的方式。它引入了物理地址 拓展(PAE)机制以支持 36 位物理地址。该管理模式中,物理地址空间被扩充到了 64GB, 但线性地址空间仍然为 4GB。页目录和页表项被扩充到了 64 位,因而一个页目录或者页表 中的项数变成了 512,一个页目录仅能描述 1GB 线性地址空间。所以引入了一个只有四个 表项的页目录指针表(PDP)。CR3 指向 PDP。地址转换机制被修改。当页目录项中的 PS 位被设置为 1 时,它描述的页变成了 2MB 页。

在 64 位模式中,段通常被关闭,不再做段界限检查。CS,DS,ES,SS 的基地址处理器统 统看作 0。但 FS 和 GS 可以不是 0,将逻辑地址转换为先行地址的时候要加上 FS 或者 GS 的基地址。FS 和 GS 的基地址位 64 位地址,兼容模式中只使用它的低 32 位,记录在 MSR 中。在 64 位模式中,对于内存的管理完全依靠分页机制。

Intel64 体系结构扩展了 PAE 机制,使之能够支持 64 位线性地址和 52 位物理地址。拓 展包括:

  1. 页目录指针表被扩充到了 512 项。
  2. 引入了一个第四级页映射表 PML4,它的每一个表项可以指向一个 PDP。
  3. 所有的四级页表表项被扩充到了 64 位。
  4. 页目录项中的 PS 标志用于控制 4KB 和 2MB 页。
  5. 所有页表项在第 63 位上新增了一个执行禁止标志 EXB。