UEFI应用与编程--SMM(一)

章节13
系统管理
这一章主要描述IA32体系结构的两个方面,一个是被用来做管理系统资源的系统管理模式(SMM),另一个是热量监视设施。


SMM提供了一个交替的操作环境可以用来监视和管理多种系统资源,被用于有效能的使用,管理硬件,或运行专有代码。关于硬件支持SMM的更多细节描述,可以参看每种IA32处理器的开发手册。


热量监视设施开启了监视和控制IA32处理器核心温度的功能。


13.1系统管理模式简要
系统管理模式是一个专用的模式用来提供掌握系统范围的功能,比如电源管理,系统硬件管理,或者运行专有的OEM设计的代码。SMM只能被系统固件使用,不能被应用程序或者一般的系统软件使用。SMM的主要优点是提供了一个独特而且简单独立的处理器环境用来透明的操作操心系统,执行软件应用。


当SMM通过SMI被调用,处理器存下当前处理器状态,然后切管到SMRAM里的单独的操作环境。当处于SMM,处理器执行SMI句柄代码去执行一些操作,比如关闭未使用硬盘驱动器或者显示器的电源,执行专门的代码,或者将整个系统置于挂起状态。当SMI句柄完成了它的操作,它就执行恢复指令(RSM),这个指令让处理器重新装载和储存处理器的上下文,切换到保护模式或者实模式,恢复执行被中断的应用程序或者操作系统程序或者任务。


下面的SMM机制对于应用程序和操作系统来说是透明的:
1.进入SMM只有一种方法,那就是通过SMI。
2.处理器在一个单独的地址空间(SMRAM)执行SMM代码,这个地址空间是不能被其他操作模式访问的。
3.一旦进入SMM,处理器保存被中断程序或任务的上下文。
4.一旦进入SMM,所有的通常的中断都被操作系统禁用。
5.RSM指令只能在SMM中被执行。


SMM是一个接近实地址模式的模式,以至于没有特权等级和地址映射。SMM程序可以寻址到4GB内存 而且可以执行所有的IO和适用的系统指令。章节13.5,“SMI句柄执行环境”有更多的关于SMM执行环境的信息。
注意:
物理地址拓展(PAE)机制在P6系列的处理器上是不被支持的,当处理器处于SMM的时候。
13.2系统管理中断(SMI)
进入SMM只有一种方式,要么通过处理器上的SMI#针脚发送一个SMI信号,要么通过APIC总线接收一个SMI消息。SMI是一个不可屏蔽的外部中断用来独立操作来自处理器的中断,异常处理机制和本地APIC。SMI优先级要高于NMI 和可屏蔽中断。SMM不可重入,那就意味着在SMM中,SMI是被禁用的。
注意:
在奔腾4,Intel志强和P6系列的处理器中,一个被指派为应用处理器的处理器,当MP初始化序列等待一个启动IPI(SIPI) 时,这个处理器处在一个SMI被屏蔽的模式。然而如果在一个应用处理器等待SIPI模式的时候收到了一个SMI,这个SMI将会被挂起。在处理SIPI之前,处理器然后会马上响应一个SIPI收据来处理挂起的SMI并且进入SMM。
13.3在SMM和其它处理器操作模式下切换
              +---------------------+           SMI#
              |                     |
     +------> |  Real-Address       | +--------------------------+
     |        |  Mode               |                            |
     |        |                     |  <--------------------+    |
     |        +----+------+---------+          Reset or RSM |    |
     |       Reset ^      |                                 |    |
     |       or    |      | PE=1                            |    |
     |       PE=0  |      v                                 |    v
     |             |                                        |
     |        +----+----------------+             +---------+---------+
Reset|        |                     | SMI#        |                   |
     |        |  Protected Mode     +---------->  | System Management |
     |        |                     |             | Mode              |
     |        |                     | <---------+ |                   |
     |        +----+------+---------+   RSM       +-------+-----------+
     |             ^      |                               |
     |        VM=0 |      v VM=1                      ^   |
     |             |                                  |   |
     |        +----+----------------+                 |   |
     |        |                     |                 |   |
     |        |  Virtual-8086       |     SMI#        |   |
     +--------+  Mode               |  +--------------+   |
              |                     |                     |
              |                     | <-------------------+
              +---------------------+     RSM
图2-2. Transitions Among the Processor’s Operating Modes


图2-2显示了处理器如何在SMM和其他处理器操作模式(保护模式,实地址模式,或虚拟8086模式)下转换。当处理器处在实地址模式,保护模式,或者虚拟8086模式时,发送一个SMI信号,往往导致处理器切换到SMM。一旦执行RSM指令,处理器总是返回为当SMI被出发时所在的模式。
13.4 SMRAM
当处于SMM时,处理器在SMRAM空间执行代码和存储数据。SMRAM空间被映射到处理器的物理地址空间而且可以向上寻址4GB大小。处理器用这个空间来存储处理器的上下文和SMI句柄的代码,数据还有栈。这个空间也可以被用来存储系统管理信息(例如掉电设备的系统配置和规格信息)和OEM指定的信息。
默认的SMRAM的大小是64KB,起始于一个被称作SMBASE(见图13-1)物理内存的物理基址。SMBASE的默认值是30000H,这个值具体依赖的是硬件重置时的值。处理器在地址为【SMBASE + 8000H】的位置来查找SMI句柄的第一个指令。在【SMBASE + FE00H】和【SMBASE + FFFFH】之间存储的是处理器的状态。查看13.4.1章节,“SMRAM 状态存储图”来获得处理器状态存储区域映射的描述。
系统逻辑要求至少解码物理地址范围【SMBASE + 8000H】到【SMBASE + FFFFH】之间的SMRAM。如果需要更大的区域,那么更大的区域也会被解码。SMRAM的大小在32KB到4GB之间。


SMRAM的位置可以通过改变SMBASE的值来改变(见13.11章节,“SMBASE重定位“)。需要注意的是在多处理器系统中,所有的处理器被初始化为相同的SMBASE(30000H)。初始化软件必须依次的将每个处理器放置于SMM而且改变SMBASE已达到在其它处理器之间不相互重叠SMRAM的目的。
13.4.1 SMRAM 状态存贮图
一旦处理器进入SMM,它会写下它自己的状态到SMRAM中的状态存储区。这个状态存储区开始于【SMBASE + 8000H + 7FFFH】向下拓展至【SMBASE + 8000H + 7E00H】。表13-1显示了这个状态存储图。第一行中的偏移和SMBASE的值加8000H有关。保留区域不应该被软件使用。
一些在SMRAM的状态存储区域(第三行被标记为YES)的一些寄存器或许可以被SMI句柄读或更,这些被更改的寄存及将通过RSM指令还原到处理器的寄存器。一些寄存器镜像是只读的,而且必须不能被更改(更改这些寄存器将会导致不可预料的行为)。SMI句柄不应该依赖任何的存储在被标记为保留的区域里的值。
                           SMRAM


SMBASE+FFFFH +-----------------------------------------------+
             |       Start of State Save Area                |
             |                                               |
             |                                               |
             +-----------------------------------------------+
             |                                               |
             |                                               |
             |                                               |
             |                                               |
             |        SMI Handler Entry Point                |
SMBASE+8000H +-----------------------------------------------+
             |                                               |
             |                                               |
             |                                               |
             |                                               |
             |                                               |
      SMBASE +-----------------------------------------------+


图13-1. SMRAM Usage


Offset
Added to SMBASE + 8000H)  Register                                    Writable?
7FFCH                     CR0                                         No
7FF8H                     CR3                                         No
7FF4H                     EFLAGS                                      Yes
7FF0H                     EIP                                         Yes
7FECH                     EDI                                         Yes
7FE8H                     ESI                                         Yes
7FE4H                     EBP                                         Yes
7FE0H                     ESP                                         Yes
7FDCH                     EBX                                         Yes
7FD8H                     EDX                                         Yes
7FD4H                     ECX                                         Yes
7FD0H                     EAX                                         Yes
7FCCH                     DR6                                         No
7FC8H                     DR7                                         No
7FC4H                     TR*                                         No
7FC0H                     Reserved                                    No
7FBCH                     GS*                                         No
7FB8H                     FS*                                         No
7FB4H                     DS*                                         No
7FB0H                     SS*                                         No
7FACH                     CS*                                         No
7FA8H                     ES*                                         No
7FA7H - 7F98H             Reserved                                    No
7F94H                     Reserved                                    No
7F93H - 7F8CH             Reserved                                    No
7F88H                     Reserved                                    No
7F87H - 7F04H             Reserved                                    No
7F02H                     Auto HALT Restart Field (Word)              Yes
7F00H                     I/O Instruction Restart Field (Word)        Yes
7EFCH                     SMM Revision Identifier Field (Doubleword)  No
7EF8H                     SMBASE Field (Doubleword)                   Yes
7EF7H - 7E00H             Reserved                                    No
表 13-1. SMRAM State Save Map


注意:
高位的两个字节被保留
接下来的寄存器被保存(但不可读)还原一旦退出SMM。
1.控制寄存器CR4(当处于SMM时这个寄存器被全部清0s)。
2.被隐藏的段描述符信息被存储于段寄存器CS,DS,ES,FS,GS和SS。
如果一个SMI请求因为处理器掉电的缘故被发出,所有被保留的位于SMM的状态存储的值必须被存储到非易失存储器中。
SMI或者RSM指令的时候下面的状态不会自动的被存储或被还原,分别是:
1.调试寄存器DR0到DR3。
2.x87 FPU寄存器。
3.MTRRs。
4.控制寄存器CR2。
5.特殊模式寄存器(针对P6系列和奔腾处理器)或测试寄存器TR3到TR7(针对奔腾和Intel486处理器)。
6.陷阱控制器的状态。
7.机器检查结构寄存器。
8.APIC内部中断状态(ISR,IRR,等)。
9.微码更新状态。
如果一个SMI被用来关掉处理器,在回到SMM之前需要一个加电重置,这将会重置许多状态到默认值。所以一个SMI句柄将要触发关闭电源时应该先马上读取上面所列出的寄存器,然后存储它们(连同剩下的RAM)到非易失记存储器中。在上电重置之后,随着剩下的系统状态,SMI句柄的配置信息应该恢复。任何时候SMI句柄改变这些处理器中的寄存器时,必须存储并且还原它们。
注意:
MSRs的一个小的子集(例如时间戳计数器和性能监视计数器)不是可以任意可写的,因此不能被存储和还原。基于SMM的掉电和重置只应该由操作系统执行,而且执行过程中不需要使用或者依赖这些寄存器的值。操作系统的开发者应该知道这个事实并且确保他们的操作系统可以辅助关机和重置软件对这些寄存器的值不可预料的改变能够免疫。
13.4.2 SMRAM缓存

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值