图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片

MTRRs The memory type range registers: Intel® 在 P6 之后向系统提供了 MTRRs 技术,MTRRs 运行为 RAM、ROM、Frame-Buffer 内存和 MMIO 对应的物理区域设置不同的 Memory Type. MTRRs 机制通过提供一系列的 MSR 寄存器用于指定物理区域范围和 Memory Type,上表描述了 MTRR 映射物理区域的范围,可以分为三类:

  • 固定物理区域 MTRRs(Fixed MTRRs), MTRRs 提供了多个 MSR 寄存器,这些寄存器针对固定的物理区域可以设置指定的 Memory Type
  • 可变物理区域 MTRRs(Variable MTRRs), MTRRs 提供了多对 MSR 寄存器,每一对寄存器可以设置物理区域和 Memory Type
  • 默认 MTRR(Default MTRRs), MTRRs 提供了一个 MSR 用于设置默认的 Memory Type,针对不在前两种覆盖范围的物理区域,均采用默认的 Memory Type.

图片无法显示,请右键点击新窗口打开图片

上表描述了 MTRRs 可以配置的 Memory Type 种类,以及每种类型的编码. MTRRs 支持 UC、WC、WT、WP 和 WB 五种 Memory Type,当在 MTRRs 寄存器中配置了 Reserved 之后会引起 general-protection exception (#GP). 当系统 Reset 之后,硬件会 Disable 所有的 Fixed 和 variable MTRRs,并将所有物理区域设置为 Uncached,因此系统初始化需要为指定的物理区域设置指定的 Memory Type, 典型的做法是 BIOS 负责 MTRRs 的初始化,然后操作系统或软件再结合 PAT 设置最终的 Memory Type。PAT(Page Attribute Table) 技术可以提供页级的 Memory Type 设置能力,PAT 与 MTRRs 组合形成最终的 Memory Type,因此 MTRRs 机制只是设置物理区域的 Memory Type,但不能决定最终的 Memory Type。

图片无法显示,请右键点击新窗口打开图片

MTRR Memory type 指明通过 MTRRs 机制对某段物理区域设置的 Memory Type,PAT Entry Value 通过页表的 PAT、PWT、PAT 属性进行设置的 Memory Type,两者结合形成 Effective Memory Type, 其为最终生效的 Memory Type.

图片无法显示,请右键点击新窗口打开图片

BiscuitOS 内存管理之分页大专题订阅入口

图片无法显示,请右键点击新窗口打开图片