Linux Msr
1. MSR
1.1 介绍
A model-specific register (MSR) is any of various control registers in the x86 instruction set used for debugging, program execution tracing, computer performance monitoring, and toggling certain CPU features.
1.2 通过代码读取 CPUID 信息
git clone https://github.com/01org/msr-tools.git
gcc -o rdmsr rdmsr.c
1.3 通过工具
如果 MSR 0x48b 的第 57 位 (位数从 0 开始) 为 1, 那么就支持 tsc scaling,有个工具叫 msr-tools,提供一个命令 rdmsr,可以直接查看 MSR。下载地址如下。
http://www.rpmfind.net/linux/rpm2html/search.php?query=msr-tools
1.4 通用寄存器
数据寄存器
EAX,EBX,ECX,EDX
指针寄存器
ESP,堆栈地址; EBP,基地址
变址寄存器
ESI,源地址; EDI,目的地址
标志寄存器
EFLAGS,控制任务状态和模式切换、中断处理、指令追踪和访问权限控制。寄存器中的标志位需要特权指令代码才可以修改(特权指令:运行在内核态下的代码)。
控制寄存器(CR0—CR4)
控制寄存器决定处理器的操作模式和当前执行任务的一些特征
- CR0,控制系统的工作模式和处理器的状态。
- PG:分页有效时,置位为1,清空时为0.与PE一同使用.该指令表明是否使用页表将线性地址转换成物理地址
- CD: cache 缺失设置位
- NW:直写无效(直写:高速缓存中的数据始终保持与主存储器中数据匹配 )
- AM: 对齐功能屏蔽(与EFLAGS寄存器中 AC标志位一同使用)
- WP:写保护
- NE: 数字错误标志位(与浮点协处理器共同使用)
- ET: 扩展类型.设置有效位时,支持 ntel 387 DX 数学协处理器指令.
- TS: 每当任务切换时就设置该位,并且在解释协处理器指令之前测试该位
- EM;该位表明是否需要仿真协处理器的功能
- MP:协处理器监视标志位
- PE: 保护模式使能,当设置有效位,CPU工作在保护模式.反之,实模式.
- CR1,保留。
- CR2,保留出错的线性地址。
- CR3,页目录基址的物理地址和PCD和PWT标志位(和CACHE有关)。
- PCD:控制当前页目录表的缓冲,当设置清空时,缓冲.置位时,缓冲无效.与CR0中的CD或PG一同使用
- PWT:控制cache采取直写还是回写的策略.当设置清空时,回写有效.当置位时,直写有效.
- CR4,一些结构的扩展,表明对于特定的处理器和操作系统执行支持。
- VME:虚地址模式.当清空时,无效.
- PVI:保护模式虚中断,当清空时,无效
- TSD:时间戳允许标志位.当清空时,允许RDTSC指令执行在任务特权级上.当置位时,只允许工作在特权级0.
- DE:调试扩展.置位,表明DR4与DR5将产生没有定义的异常
- PSE:当置位,使用4M的页面;清空,使用4K的页面
- PAE:置位,使用36物理内存的分页机制.清空时,使用32位分页机制
- MCE:置位,使用机器检查异常机制.
- PGE:置位,启动全局页面.当写CR3时,也不会被替换.
- PCE:置位,表明使RDPMC指令工作在任何保护级别.
- OSFXSR:置位.表明操作系统支持FXSAVE and FXRSTOR指令
- OSXMMEXCPT:置位.表明操作系统支持不可屏蔽的SIMD浮点异常.
调试寄存器
作用:调试寄存器主要作用是调试应用代码、系统代码、开发多任务操作系统.来监视代码的运行和处理器的性能.
- DR0—DR3:调试地址寄存器;保留32位断点的线性地址
- DR4—DR5:保留.还没有定义
- DR6: 调试状态寄存器
- B0–B3:断点状态的监测
- BD:调试寄存器访问监测。置位,表明在指令流中,下一条指令访问其中的一个调试寄存器。
- BS:单步执行标志位
- BT:任务切换标志位
- DR7: 调试控制寄存器
- L0–L3:局部断点使能标志位。
- G0–G3:全局断点使能标志位。
- LE AND GE:置位,表明处理器可以监测导致数据断点的指令,推荐置位为1。
- GD:通用监测使能标志位,表明是否开启调试寄存器保护。
- LEN0 through LEN3:用了表明相应断点地址寄存器内存位置的大小。
中断和异常管理寄存器
IDT寄存器,主要可以描述任务门、中断门、陷阱门
内存管理寄存器
- GDTR:全局段描述符表寄存器
- LDTR: 局部段描述符表寄存器
- IDTR: 中断描述符表寄存器,指向中断向量表
- Task register: 任务寄存器,指向处理器当前所需当前任务的信息TSS。系统中,一个任务由两部分组成:任务的运行空间和任务状态段(TSS).任务的运行空间包括一个代码段、一个堆栈段、若干数据段.TSS指明了任务的运行空间和任务的状态.在多任务系统中,TSS还提供了连接任务的机制.