SMM, System Management Mode, 即系统管理模式。在intel 386SL, intel486SL引入的一种特殊的操作模式,在这种模式下,可以执行高级电源管理,硬件控制和运行OEM代码。它对于操作系统而言是完全透明的,也就是说操作系统并不知道CPU什么时候会进入和退出SMM。
SMM: System Management Mode
SMI: System Management Interrupt
SMRAM: System Management RAM
C-SEG: Compatibility Segment, 在Legacy Mode下,0xA0000~0xC0000这段地址空间被用作SMRAM和VGA Frame Buffer
H-SEG: High Segment
T-SEG: 用作4GB以下的SMRAM, 可以提供扩展的SMRAM空间
SMM拥有最高的特权等级,因此在SMM下可以执行各种特权指令和IO操作。进入SMM的方式是当收到SMI(System Management Interrupt)时,而执行RSM指令则可以退出SMM。
SMM也其模式的切换:
SMI是进入SMM的唯一途径,SMI可以由处理器的SMI#管脚有效或者是APIC(Advanced Program Interface Controller)总线的SMI信息。 它是不可屏蔽的中断,独立于其它形式的中断。
SMI的中断优先级是3, 而debug breakpoint是4, NMI是5, 当然最高的还是Reset, 它的中断优先级是1
关于SMRAM:
由于SMM的特殊性,所以进入SMM后的程序是运行在SMRAM中的,而不是随便找一段内存就可以运行。这当然是出于安全的考虑,毕竟SMM有最高的优先级,如果在哪儿都可以运行,那么其它的程序改动了内存里的一点东西,也会影响到SMM,如果这个改动是恶意的,那后果就不堪设想了。
由上图可以看出SMRAM的一个大致结构了,SMRAM的大小不是无限大的,它最初只有64KB,其起始地址是SMBASE(这个值保存在一个专门的寄存器中),在SMBASE+0x8000H处开始存放的是SMI的中断处理程序。而在SMRAM的高地址处存放着处理器进入SMM时的状态信息,这些信息在处理器退出SMM时会被恢复到处理器中。
SMBASE开机时的默认值是0x30000H,一般BIOS会把它重定位到0xA0000H处。