本文将简要地介绍MSR(Model Specific Register)。内容来源于x86 CPU的MSR寄存器

1. 概念

MSR(Model Specific Register)是x86架构中的概念,指的是在x86架构处理器中,一系列用于控制CPU运行、功能开关、调试、跟踪程序执行、监测CPU性能等方面的寄存器。

2. 发展

到Intel Pentium处理器的时候,Intel正式引入RDMSRWRMSR两个指令用于读和写MSR寄存器,这个时候MSR就算被正式引入。在引入RDMSRWRMSR指令的同时,也引入了CPUID指令,该指令用于指明具体的CPU芯片中,哪些功能是可用的,或者这些功能对应的MSR寄存器是否存在,软件可以通过CPUID指令查询某些功能是否在当前CPU上是否支持。

3. MSR的访问方式

每个MSR寄存器都会有一个相应的ID,即MSR Index,或者也叫作MSR寄存器地址,当执行RDMSR或者WRMSR指令的时候,只要提供MSR Index就能让CPU知道目标MSR寄存器。这些MSR寄存器的编号(MSR Index)、名字及其各个数据区域的定义可以在Intel x86架构手册”Intel 64 and IA-32 Architectures Software Developer’s Manual”的Volume 4中找到。

4. 相关介绍

MSR顾名思义就是Model Specific,即不同的CPU型号或不同的CPU厂商(Intel和AMD都会做x86架构的处理器),它的MSR寄存器可能是不一样的,它会根据具体的CPU型号的变化而变化,每款新的CPU都有可能引入新的MSR寄存器。

事实证明,MSR寄存器的引入用处还是很大的,有一些MSR寄存器甚至是MSR寄存器的部分区域将会被固定下来,并且未来的CPU都会支持这些MSR寄存器或者MSR寄存器的部分区域,这类MSR寄存器就叫做“Architecture MSRs”,Architecture MSR由于历史的原因(Pentium处理器是32位的),它的名字都是以”IA32_”为前缀的,即使是在目前主流的64位x86处理器中也是这样命名。

对于Intel的x86 CPU和AMD的x86 CPU而言,它们的MSR寄存器可能会有区别,但是可能因为各种原因,或者为了软件的兼容性,它们的部分MSR寄存器是一样的,如IA32_LSTAR。


参考资料:

  1. x86 CPU的MSR寄存器
  2. How do x86 CPUs use the model-specific registers?