转载: http://bbs.csdn.net/topics/300235884

写在前面
 
这是我的BIOS启蒙文章第二篇了,上一篇我谈了谈什么是legacy USB,和大家聊了聊在USB键盘背后的那些不为人知的故事。大家可以去(http://blog.csdn.net/prostar/archive/2009/04/17/4088521.aspx)这里来看看这个文章。现在是第二篇了。今天我打算给大家讲讲什么是Ia32架构具备的系统管理模式(SMM),这是CPU四种运行模式中的一种,而且是最为神秘的运行模式。前段时间,IA32架构闹了个所谓的大BUG(其实不是BUG),就是和这个模式有关。
 
大家都知道Intel的IA32 CPU的实模式与保护模式了吧。实模式是最简单的运行模式,在这个模式下CPU运行在分段下,并且只能访问1MB的内存。而保护模式下,CPU既支持分页也支持分段。可访问的内存也增大到4GB。这个模式是主要的工作模式。
 
实模式和保护模式由于用的最多,我们大家也最熟悉,但是其实IA32 CPU还有另外两个很少为人所知的运行模式:系统管理模式(以下简称SMM)以及V86模式。本文主要探讨SMM,对V86的讨论我们放在以后吧。V86模式主要是帮助操作系统在保护模式下继续支持16位的实模式软件。
 
SMM : 概述
 
SMM是Intel在386SL之后引入x86体系结构的一种CPU的执行模式。系统管理模式只能通过系统管理中断(System Management Interrupt, SMI)进入,并只能通过执行RSM指令退出。SMM模式对操作系统透明,换句话说,操作系统根本不知道系统何时进入SMM模式,也无法感知SMM模式曾经执行过。为了实现SMM,Intel在其CPU上新增了一个引脚SMI# Pin,当这个引脚上为高电平的时候,CPU会进入该模式。在SMM模式下一切被都屏蔽,包括所有的中断。SMM模式下的执行的程序被称作SMM处理程序,所有的SMM处理程序只能在称作系统管理内存(System Management RAM,SMRAM)的空间内运行。可以通过设置SMBASE的寄存器来设置SMRAM的空间。SMM处理程序只能由系统固件实现(即Firmware,X86应该是BIOS)。
 
SMM : 执行环境
 
SMM的执行环境与实模式与保护模式都不同。SMM模式下系统没有分页与分段支持。系统完全执行在自然环境下。换言之,CPU可以寻址4GB的空间,没有逻辑地址与物理地址的区别。或者说,所有的地址都是物理地址。SMM下可以执行一切特权指令。并且一切内存保护均失效。
 
SMM : 如何进入?
 
进入SMM的唯一方法就是通过SMI,也即是系统管理中断(System Management Interrupt)。而触发SMI的唯一方法是将前述的SMI Pin引脚上加一个物理电平。而这个电平是由系统chipset根据不同的物理执行环境(如某些事件到来,某些设备需要特别服务)加到CPU上去的。
 
SMM :如何退出?
 
退出SMM的方法也只是一个。那就是执行RSM指令。CPU见到这个指令,就退出SMM。并自动的将CPU设置成进入SMM之前的执行模式。
 
SMM : 完全透明
 
SMM的进入与退出对非SMM软件(如操作系统)而言,是完全透明的。操作系统根本不知道什么时候系统会进入SMM,什么时候会退出。对于操作系统而言,SMM从来没有存在过。从某种意义上说,SMM是对系统进行监控的终极方法。那么透明是如何做到的呢?
 
SMM会在进入之前,由CPU自己主动的将当前的全部寄存器以及其他的任何需要保存的信息(公开的和不公开的全部保存)保存在之前提及的SMRAM的某个地方。然后直接跳转到SMRAM内的某一个入口地址开始执行。而退出的时候,CPU会恢复所有事先保存的信息。然后返回中断的地方继续执行程序。故而被中断的程序根本无法感知。并且SMM中断是如此的霸道,就连正在进行中的I/O操作,如果有SMI到来,那么CPU也必须暂停I/O,转发进入SMM。于是SMM内提供了一个手段,用于探测是否处于一个I/O Trap状态。
 
SMM : 幽灵搬移
 
SMM程序可以重新定位SMRAM。换言之,也许每次进入SMM的执行的入口地址都会不一样。这使得跟踪SMM的执行变得异常困难。于是一些被折磨的难受的程序员就给SMM的这个feature起了个有趣的名字:幽灵搬移。
 
SMM : 固件ONLY
 
SMM如此强大,可以说是IA32架构内的真正的无上霸主。如果这个特性被恶意代码利用,那么后果将不可想象。微软为了自己的利益,一直反对Intel在自己的CPU内放这么一个玩意。于是Intel规定SMM程序只能由系统固件使用。系统内有个SMM Lock Register,一旦设置成锁定状态,那么任何程序都不可能将自己设置成SMM处理程序了。固件会在每次启动操作系统之前,锁死SMM。

漫谈IA32的系统管理模式(SMM)以及IA32的四种CPU模式相关推荐

  1. JavaScript中函数四种调用模式

    目录 JS中函数的四种调用模式 函数调用模式 方法调用模式 构造器调用模式 上下文调用模式 JS中函数的四种调用模式 在函数的调用模式中感觉最大的区别就是: this指向 函数调用模式 即通过函数名直 ...

  2. Android Activity的launchMode四种启动模式备忘

    Android Activity的launchMode四种启动模式备忘 Android的Activity的启动模式有四种,在AndroidManifest.xml通过配置Activity的androi ...

  3. Activity之间的跳转和四种启动模式

    一.Activity的基础知识 1.每一个创建好的Activity都需要在manifests文件中进行注册. 这里就注册了2个activity! 2.打开app的时候会首先进入有intent-filt ...

  4. 函数的四种调用模式.上下文调用.call.apply

    闭包:函数就是一个闭包,一个封闭的作用域; 返回函数,要返回多个函数就用一个对象封装一下, 立即执行函数+return 回调函数 JS动态创建的DOM,不会被搜索引擎抓取,对SEO不友好. /*win ...

  5. AndroidManifest.xml文件详解(activity)(三)四种工作模式

    android:launchMode 这个属性定义了应该如何启动Activity的一个指令.有四种工作模式会跟Intent对象中的Activity标记(FLAG_ACTIVITY_*常量)结合在一起用 ...

  6. Android中Activity的四种启动模式

    每次看到这种专有词汇都十分佩服创造者的智慧,创造者一定和我一样都中二,我已然确信. 我写博客的目的,就是希望不断磨练自己,让自己能够不将一件简单的事情讲的复杂,让自己能将一件复杂的事情讲的简单.嘛嘛, ...

  7. Docker四种网络模式

    四种网络模式 host模式 使用docker run时使用–net=host指定 Docker使用的网络实际上和宿主机一样,在容器内看到的网卡ip是宿主机上的ip. [root@localhost ~ ...

  8. android sharedpre,Android SharedPreferences四种操作模式使用详解_Android_脚本之家

    Android  SharedPreferences详解 获取SharedPreferences的两种方式: 1 调用Context对象的getSharedPreferences()方法 2 调用Ac ...

  9. Docker的四种网络模式和相关网络命令等操作

    Docker网络模式 一.实现原理 二.Docker四种网络模式 三.Docker命令 1.查看网络列表 2.自定义网络固定IP 3.暴露端口 4.在宿主机环境执行容器内命令 5.怎么把宿主机的文件传 ...

最新文章

  1. Get了!用Python制作数据预测集成工具 | 附代码
  2. 部署webservice到远程服务器
  3. C#开发微信公众平台-就这么简单(附Demo)(转)
  4. vb获取数组长度_如何实现数组的二分查找
  5. 【项目总结】如何获取地图上的所有POI
  6. 微服务架构工作笔记002---了解Isito新一代微服务架构-服务网格
  7. .Net MVC框架 + WCF 搭建 集群开发
  8. js基础---字符串方法
  9. vue echart甘特图
  10. 【生信进阶练习1000days】day4-Annotation包中mapIds函数的使用
  11. 计算机多媒体软件应用,论计算机实验多媒体软件应用
  12. C语言·数组·密码编译(阿斯克码法)
  13. ddrelease64 黑苹果_GitHub - wangtufly/Precision5510-High-Sierra: DELL Precision5510 10.13.X 黑苹果教程...
  14. 微型计算机基础理论——微处理器工作概述
  15. 被积函数中有x不能直接求导_解析变限积分函数的求导问题
  16. 枚举---知识总结----------gyy加以整理以及改为C++方法
  17. 面向交通流预测的时空融合图神经网络
  18. C语言编程之计算平均成绩
  19. 什么是ASR、TTS?
  20. git branch 命令详解

热门文章

  1. cvte2019校园招聘提前批嵌入式编程题2
  2. 115网盘链接的使用方法
  3. 手机联系人头像包_苹果液态硅胶手机壳,官网同品质新颜色全型号!!
  4. [Pandas] 查看DataFrame的常用属性
  5. 什么是 DAO,它们如何融入 Gear 网络?
  6. u盘安装linux设置密码,U盘安装centos7.6步骤详细方案(图文教程)
  7. 利用微PE工具箱进行电脑装机,制作最纯净的PE安装系统
  8. 关于编译xlua的Android端Plugin的二三事
  9. 反向传播——计算图基础知识
  10. PYTHON PT时间格式 IOS8601 duration相互转换