什么是SYSTEM MANAGEMENT MODE(SMM)

[复制链接]
perseverance 发表于 2008-1-26 18:42:55 | 显示全部楼层 |阅读模式
System Management Mode (SMM) is intended to be used for advanced power-management features and other operating-system-independent functions. The chipset is programmed to recognize many types of events and timeouts. When such an event occurs, the chipset asserts the SMI# input pin. At the next instruction boundary, the microprocessor saves its entire state and enters SMM.

一、概述
只有SMI才会引起进入SMM,处理器保护现场,切换到SMRAM里的一个独立地址空间执行SMM代码,RSM指令会使系统返回到原来的正常模式。SMM相当于实模式,没有特权级和地址映射,可寻址4GB,可执行所有I/O和可用系统指令。
SMI优先级在所有中断里最高。当处于SMM状态,处理器不识别后继的SMI请求,但第一个SMI请求可以被锁存,并在系统退出SMM后被处理。
RSM指令只能在SMM状态下执行,否则会产生“操作符无效”异常(exception)。RSMSMRAM里的处理器内容存回处理器,接着把控制权还给被中断程序。若处理器在SMRAM中侦测到无效状态,会shut down并产生一特殊总线周期以标识该状态。
当收到SMI时,若处理器处于HALT状态,处理器从SMM返回会稍有不同,SMBASE地址也会有所改变。
二、SMRAM
SMM时,处理器在SMRAM里执行代码和存储数据,也用其来存储系统管理信息(如系统配置和power-down设备的特殊信息)及OEM SPEC信息。SMRAM被映射到物理空间,最大是4GB,默认是64KB,开始于物理空间里的SMBASE(硬件RESET后,默认值是3000H)。
处理器在[SMBASE+8000H]寻找SMI处理程序的第一条指令。[SMBASE+FE00H][SMBASE+FFFFH]存放处理器状态,即处理器的所有寄存器值。

SMRAM

SMBASE+FFFFH:
Start of State Aave Area
SMBASE+FE00H:

SMI Handler Entry Point
SMBASE+8000H:

  

SMBASE+8000H
三、SMI执行环境
SMM与实模相似但有所不同,它可以寻址4GB,加上“E”前缀就可以访问1MB以上空间,DATASTACK可以在4GB的任何地方。
                                      寄存器初始值:

EFLAGS

0000 0002H

EIP

0000 8000H

CS

SMBase(default: 3000h)

DSESFSGSSS

0000H

CR0

Set PEEMTSPG to 0,其它不变

DR7

0400H








四、SMM中的中断和exception
进入SMM后,所有HW中断都被禁止(包括可屏蔽硬件中断、单步中断、断点陷阱、NMISMIA20M中断)。软件中断和exception能发生,但建议不要,否则可能会产生不可预料的后果。
NMI会被堵在SMI服务程序入口处,且只有第一个NMI会被锁存并在退出SMM后被执行。但也可以通过使能INTR引脚并有效INTR的方式来在SMM中使能NMI。在一般情况下,NMI是不可嵌套的,但也有例外。若从NMI处理程序进入SMM,同时有收到新的NMI,就可以在退出SMM后实现嵌套,也就是在老的NMI处理程序里处理新的NMI
五、在SMM里保存FPU状态
有时在SMM里有必要保存FPU状态,最安全的办法是先置处理器于保护模式下再存FPU,尽管FSAVE可以以四种格式中任一种来存PFU内容。一般默认是在实模方式下进行,但若在非16位实模下发生SMI就必须进入保护模式执行FSAVEFRSTOR,否则无法正确保存和恢复相关FPU信息。但存完FPU信息后,SMI处理程序可以继续在保护模式下执行,但建议其主要在16/32实模下运行。
六、SMM版本识别
31                                                        18 17 16 15                                                                  0
Reserved



SMM版本标识



Bit 17 =1 : SMBASE重定位使能
Bit 16=1 :
支持I/O指令重启

1)
SMBASE
重定位
SMBASE默认是30000H,放在处理器内部的SMBASE寄存器里,我们可以通过在[SMBASE+FEF8H]处设置SMBASE区来重定位SMRAM。后续SMI请求会在新地址处执行SMI处理程序和存放状态存储器(系统重启后会把SMBASE寄存器又写成30000H,但INIT不会改变它)。
SMBASE重定位到1MB以上地址,实模下的软件操作就不能初始化段寄存器到SMBASE
SMBASE可用“E”前缀来访问32位地址大小。
2)
I/O
指令重启

就是允许从SMM状态返回时从被中断I/O指令处重新执行。I/O指令重启区[SMBASE+FF00H]控制I/O指令重启,值为FFH时允许重启。但该I/O指令并不是造成SMI的原因。
若从I/O指令进入SMM又收到SMI,处理器会先处理新的SMI再重启该I/O指令。
七、自动HALT重启
         若处理器在HALT状态进入SMM,要在[SMBASE+FF02]处置自动HALT重启标志位。SMI处理程序可将它清零或不予理睬,这样返回时就相应地执行HLT指令后的下一条指令或仍回到HALT状态。
自动HALT重启标志值


进入SMM后的值

退出SMM后标志值

退出SMM状态后处理器行为

0

0

1

1

0

1

0

1

返回到被中断程序或任务的下一条指令
不可预料
返回到HLT指令后的下一条指令
回到HALT状态
八、多处理器SMM注意事项

l
MP系统中任一处理器都要能响应SMI

l
每个处理器都有自己的SMRAM空间。

l
不同处理器的SMRAM可在同一内存空间重叠,但它们的状态存储区和动态数据存储区却要彼此独立,代码和静态数据可共享。

l
SMI处理程序要为每个处理器初始化SMBASE

l
处理器可通过自己的SMI引脚或从APIC接口收到的SMI来响应本地SMIAPIC接口可将SMI分给不同的处理器)。



上一篇:什么是BIOS
下一篇:BIOS与CMOS的区别
klosexu 发表于 2011-4-26 14:39:03 | 显示全部楼层
好东东要顶起,呵呵!虽然地址不同系统可能会不同,但是概念是一样的。
回复

使用道具 举报

mrk 发表于 2011-8-4 14:22:00 | 显示全部楼层
谢谢分享 很适合我这种小白
50 字节以内
不支持自定义 Discuz! 代码
回复

使用道具 举报

mrk 发表于 2011-8-4 15:16:42 | 显示全部楼层
50 字节以内
不支持自定义 Discuz! 代码
回复

使用道具 举报

yyj4968 发表于 2011-8-20 18:34:06 | 显示全部楼层
非常好的文章啊!
回复

使用道具 举报

本版积分规则

QQ|Archiver|手机版|小黑屋|个人研发笔记 京ICP备18037383号-1

GMT+8, 2020-10-29 13:26

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表