【我所認知的BIOS】-->MTRR (MEMORY TYPE RANGE REGISTERS)
最新推荐文章于 2024-02-02 10:31:38 发布
By LightSeed
2009-9-27
内存类型范围寄存器(MTRRs,翻译过来真别扭,后面都以MTRR直接来说了)提供了一种机制,这种机制其实就是确定在系统内存中物理一段内存的类型。这个类型其实是正对CPU来说的,见图1
图1 内存的类型
这些类型,其实是告訴CPU在解析或者说操作内存的时候应该用什么手段。就这么简单。为什么要这样做呢?一般情况下,内存都是应该是被设置为有cache来帮助CPU操作内存的,这样的话整个系统的效率就会比较高。但是某些设备所使用的内存却比较特殊,比如说Frame buffer就是一种很好的例子。那么软件(一般情况下是BIOS)就需要配置CPU的相关寄存来申明那些范围的内存在处理的时候需要做什么样的动作(这就是类型)。总的来说它们允许CPU优化不同类型的内存如RAM,ROM和帧缓冲内存(frame buffer),内存操作映射I / O设备。这种做法简化了内存控制系统的硬件设计引脚。
MTRR机制允许多达96个内存范围(memory ranges)在物理内存的定义,它定义了一系列的MSRs,这些寄存器分别去说明MSR定义中包含的那段内存的具体类型。图2是MTRRs物理内存映射的示意图。
图2 MTRRs物理内存映射示意
而每一段的内存可以被定义的类型有多个,见图3.
图3 Memory Types That Can Be Encoded in MTRRs
硬件复位之后,P6及大多最近的处理器系列禁用所有的固定和可变MTRRs,这使得所有的物理内存的类型都成为了uncacheable。初始化软件应该依据系统定义的存储器映射设置MTRRs成特定的类型。典型的,BIOS(基本输入/输出系统)软件来配置MTRRs。
在一个多处理器系统中,使用的P6系列或者较新的处理器系列,每个处理器必须使用相同的MTRR内存映射,从而使软件的内存有一致的视点。
MTRR的功能可用性是模型具体。软件可以判定处理器上MTRRs是否支持。它只需要通过执行CPUID指令,读取的MTRR Flag的状态(EDX的bit 12)状态。
如果MTRR标志被置为1(表明该处理器采用MTRRs),MTRRs的其他信息可以从64位的寄存器IA32_MTRRCAP中获得(MTRRcap MSR是P6系列处理器的名字)。IA32_MTRRCAP MSR是一个只读的MSR,它可以用RDMSR指令读取。图4显示了IA32_MTRRCAP MSR的内容。
图4 IA32_MTRRCAP Register
寄存器中的这些Flags和相应区域的功正如:
•VCNT(variable range registers count)区域(field&#