2017-03-09 51 views
0

我想在xen-4.5.0上做一些内存管理,并且对MTRR(内存类型范围注册表)有些困惑。当我试图获得IA32_MTRRCAP寄存器的值时,我得到了值1d0a。为什么我在IA32_MTRRCAP寄存器的保留位上得到1?

但是,在2016年12月发布的英特尔手册中,IA32_MTRRCAP寄存器的位12-63全部标记为保留,而我在位12上得到1。为什么?与此同时,当我试图从MTRR读取内存信息时,我找不到它们中的大部分内存地址。

我试过这些与英特尔Skylake处理器的几台机器上,他们的情况是一样的。但在配备Intel Haswell处理器的机器上,IA32_MTRRCAP的价值并不奇怪,我也可以从MTRR读取所有内存信息。

Skylake中MTRRs的编程方式是否改变了?我只能用这种方式猜测。

感谢。

回答

0

我假设读取的值是正确的 - 就像它们是。
保留位不一定是零,保留意思是“英特尔工程师在内部使用”。

1.3.2保留位和软件兼容性

在许多寄存器和存储器布局描述,某些比特被标记为保留。当比特被标记为 保留时,对于与未来处理器的兼容性来说是必不可少的,因为软件将这些比特看作是具有未来效果的 。

保留位的行为不应该被认为是不确定的,但不可预知的

软件应遵循以下原则处理保留位:

  • 测试含有这样的位寄存器的值时,不要依赖任何保留位的状态。
    测试前掩盖掉保留位。
  • 存储到存储器或寄存器时,不要依赖任何保留位的状态。
  • 不依赖于保留写入任何保留位的信息的能力。
  • 加载一个寄存器时,请始终加载保留位,使用文档中指示的值(如果有),或者用先前从同一寄存器中读取的值加载它们。


避免在英特尔64和IA-32寄存器在保留位的状态的任何软件的依赖。 取决于保留寄存器位的值,将使软件取决于处理器处理这些位的未指定方式。依赖保留值的程序有可能与未来的处理器不兼容。


MTTRs还没有SKYLAKE微架构改变,其建筑的行为仍然是你提到的手册中定义的。

相关问题