MTRR MSR寄存器

MTRR是什么

1.MTRR介绍

MTRR的全称是Memory Type Range Registers,它们是一组组的MSR寄存器对,即范围R和类型T(目前最多有96组),用来指定特定的系统内存段的类型。

这里说的类型,是指内存的CACHE类型。换句话说,MTRR的作用就是:告诉CPU在操作不同的指定的内存的时候应该用什么手段。

上面说的类型,是指内存的CACHE类型,对应的C代码中的实现如下:

通过MTRR,系统可以优化RAM/ROM/MMIO等不同类型的内存的访问速度

要判断是否支持MTRR,需要使用CPUID命令,对应的是CPUID.EAX=01H,返回的结果在EDX:

MTRR的设置

硬件复位之后,CPU会Disable掉所有的MTRR,此时所有的系统内存都是UNCACHEABLE的。

需要BIOS来完成MTRR,且在多处理器的系统中,各个处理器的设置必须是一致的。

MTRR的设置对应到3类寄存器,首先是一个全局的MSR(IA32_MTRR_DEF_TYPE):

E:MTRR的开关;

FE:固定MTRR的开关;

Type:系统内存的默认CACHE类型,对于没有被MTRR覆盖到的内存段,就使用默认的CACHE类型;

第二类是固定MTRR,因为它们对应的内存段是固定的,所以也比较好理解,下面是所有的固定MTRR:

第三类是可变MTRR,它通过一组MSR寄存器来设置一段内存的属性,这组MSR如下所示:

第一个寄存器设定了内存的基址和类型,而第二个寄存器设置了它的大小以及使能与否。

这里还有一个概念,就是MAXPHYADDR,它表示的是最大支持的系统内存。

虽然我们说现在x86是64位的系统,但是CPU真正只是的系统内存却不是2^64,而是2^MAXPHYADDR,而这个MAXPHYADDR的大小不同系统有不同的值。关于这个值,可以通过CPUID.80000008H获取,下面是具体的代码:

MTRR查看

Linux下查看MTRR的方式:

————————————————

创建Reg1,重启后消失

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小菜鸟-BIOS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值