好文经典收藏
写在前面
 
这是我的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处理程序只能由系统固件实现。
 
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的进入与退出对非S[b][/b][b][/b]MM软件(如操作系统)而言,是完全透明的。操作系统根本不知道什么时候系统会进入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)相关推荐

  1. 漫谈IA32的系统管理模式(SMM)以及IA32的四种CPU模式

    转载: http://bbs.csdn.net/topics/300235884 写在前面   这是我的BIOS启蒙文章第二篇了,上一篇我谈了谈什么是legacy USB,和大家聊了聊在USB键盘背后 ...

  2. Intel 64/x86_64/x86/IA-32处理器操作模式/运行模式

    Processor Operation Mode IA-32架构支持3种操作模式,和一种类操作模式(quasi-operating mode): 实地址模式/实模式(real-address mode ...

  3. 数商云供应链集采管理系统解决方案:集采系统管理模式,数字化管控企业物资

    近年来,随着多项体制改革的深入开展且取得重大成就的同时,互联网及移动互联网的普遍应用给各行业企业带来机遇与挑战.伴随企业集团物资管控力度的逐步加大,各集团已开始重视.搭建集采电商供应链管理平台对下属企 ...

  4. SMM - 系统管理模式,SMRAM

    摘自<Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes1, 2A, 2B, 2C, 2 ...

  5. 设计模式系列漫谈之五 - 迭代器模式

    故事    小美是小雪最好的朋友.有一天, 小美问小雪:"小雪,怎么你的手机短信这么多啊,是不是谈恋爱了?",小雪笑了一下,说:"还没呢",小雪停顿了一下,&q ...

  6. x64架构CPU各工作模式及内存访问

    一.背景知识 AMD和Intel的x64架构相关名称由来 由于IA-64(英特尔安腾)是Intel当初设计的不兼容IA-32处理器的一个全新架构,所以传统的32位程序无法在这个架构里运行,所以推出后卖 ...

  7. 32位x86处理器架构

    本节重点讲解了 32 位 x86 处理器的基本架构特点.这些处理器包括了 Intel IA-32 系列中的成员和所有 32 位 AMD 处理器. 操作模式 x86 处理器有三个主要的操作模式:保护模式 ...

  8. X86:2:X86处理器架构

    文章目录 2.1.3读取内存 2.1.4加载并执行程序 2.2 32位x86处理器 2.2.1操作模式 2.3 64位X86-64处理器 2.1.3读取内存 从内存读取一个值经 将想要读取的值的地址放 ...

  9. 0环权限高还是3环_环0到环3

    0环权限高还是3环 Most likely, you're aware of the hardware "protection rings" in Intel Architectu ...

最新文章

  1. 彻底搞懂Nginx的五大应用场景
  2. 支持字母数字下划线和中文的正则
  3. web服务器(LAMP)通过DNS轮询功能和nfs共享实现负载均衡
  4. python map reduce filter_Python map, reduce, filter和sorted
  5. bzoj1045 糖果传递
  6. python弹窗输入_Python中使用tkinter弹窗获取输入文本
  7. suse zypper 添加源
  8. anaconda python下载_anaconda3下载 anaconda python 3.7 for Win64 v2019.10 官方安装免费版 下载-脚本之家...
  9. sass之mixin的全局引入(vue3.0)
  10. 【李宏毅机器学习HW2】
  11. 神舟笔记本键盘灯不亮驱动
  12. 桌面窗口管理器占用内存过高解决办法
  13. Vue3+TypeScript从入门到进阶(六)——TypeScript知识点——附沿途学习案例及项目实战代码
  14. 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码
  15. 面试必问题之Docker分布式搭建
  16. C语言--师生信息管理系统(第一次小项目)
  17. Android官方文档—APP清单(uses-feature)
  18. 2021年全球与中国液压缸行业市场规模及发展前景分析
  19. 设计模式面试题 14 道
  20. 社群思维:如何打破边界

热门文章

  1. JAVA在线航班订票系统计算机毕业设计Mybatis+系统+数据库+调试部署
  2. 场景适配多元,内容生态丰富 你的生活更智能了吗?
  3. YOLOv7的食物卡路里检测系统(源码&部署教程&数据集)
  4. Sequel 使用 mysql数据库可视化
  5. Unity骨骼动画优化
  6. AngularJS—模拟AngularJS之依赖注入
  7. 【Python】计算手机销量年增长率
  8. django模型层字段选项-choice
  9. 春节期间辽宁对53个国家人员实行144小时过境免签
  10. 数字化校园建设规划方案