MTRR是什么

MTRR是什么

1.MTRR介绍

MTRR的全称是Memory Type Range Registers,它们是一组组的MSR寄存器对,即范围R和类型T(目前最多有96组),用来指定特定的系统内存段的类型。
这里说的类型,是指内存的CACHE类型。换句话说,MTRR的作用就是:告诉CPU在操作不同的指定的内存的时候应该用什么手段。
在这里插入图片描述

为什么要这样做呢?在一般情况下,内存都是应该是被设置为有cache来帮助CPU操作内存的。这样一来,整个系统的效率就会比较高。
但是某些设备所使用的内存却比较特殊,比如说Frame buffer。那么就需要软件(一般情况下是BIOS)配置CPU的相关寄存,来表明CPU在处理某些范围的内存的时候,需要做什么样的动作(也就是类型)。
总的来说它们允许CPU优化不同类型的内存如RAM,ROM和帧缓冲内存(frame buffer),内存操作映射I / O设备。这种做法简化了内存控制系统的硬件设计引脚。

2.举例

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

//
// Memory cache types
//
typedef enum {
  CacheUncacheable    = 0,
  CacheWriteCombining = 1,
  CacheWriteThrough   = 4,
  CacheWriteProtected = 5,
  CacheWriteBack      = 6,
  CacheInvalid        = 7
} MTRR_MEMORY_CACHE_TYPE;

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

下面是一个设置MTRR的例子:
在这里插入图片描述

3.判断MTRR的支持情况

因为MTRR是MSR寄存器,因此它是跟CPU有关的,并不是所有的CPU都支持。

不过现在的x86平台CPU都支持该功能,事实上从P6型号开始就只是MTRR了。

要判断是否支持MTRR,需要使用CPUID命令,对应的是CPUID.EAX=01H,返回的结果在EDX:
在这里插入图片描述
当确定是否支持之后,还需要确定MTRR的支持情况,这对应于一个MSR寄存器(IA32_MTRRCAP)
在这里插入图片描述
它是一个只读的寄存器,具体的BIT位说明如下:

SMRR:确定是否支持System-Management Range Register;

FIX:确定是否支持Fixed Range MTRR(两种类型的MTRR,可变和固定);

WC:Write Combining的CACHE类型是否支持;

VCNT:可变MTRR的支持个数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值