Enterprise Just Builder

Solution for Enterprise Software Architecture

bios

理解 ACPI (一) ACPI 简介及加电过程

在引入高级配置和电源接口 (ACPI — Advanced Configuration and Power Interface) 之前, 高级电源管理 (APM) BIOS 被广泛用于电源管理。在 APM 中,大部分的电源管理控制逻辑都驻留在 APM BIOS 代码中。支持 APM 的操作系统通过固定的 BIOS API 与 APM BIOS 进行通信,这些 API 提供了 BIOS 功能的基本访问。支持 APM 的操作系统必须定期轮询 APM 以处理 APM 相关事件。

APM 存在着以下三个缺陷: 首先,除非供应商提供专有程序,否则很多 APM 功能都要在操作系统启动前,进入 BIOS 菜单来配置,比如设置显示器关闭前的空闲时间。而且 APM 电源管理配置的具体策略是由 BIOS 供应商设定的,比如某 APM BIOS 的策略是在关闭显示器的同时降低 CPU 时钟频率或休眠网卡等设备,如果不想这么做,就必须修改 BIOS。 其次,APM 是 BIOS 级别的代码,运行在操作系统之外,因此开发和调试 APM 代码都十分困难,更糟糕的是用户只能通过重刷 ROM 的方式来解决 APM 的错误,而重刷 BIOS 相当危险,一旦发生错误,系统就再无法启动了。最后,由于 APM 是各个供应商专有的,为相同的功能而进行的重复开发投入是种巨大浪费。

不同于 APM 直接基于 BIOS 的管理方式,ACPI 中不再由 BIOS 代码来作出决策,而是通过操作系统内核来统一管理所有设备,从而解决了 APM 配置机制的局限性,换句话说,ACPI 允许操作系统直接对电源和散热进行管理,还允许系统硬件产生的 Hot-Plug 事件,让操作系统从用户的角度上直接支配即插即用设备。因而 ACPI 比其他机制更加灵活。

ACPI 主要提供下列功能:1

  • 系统电源管理(System power management):ACPI 提供了让系统作为一个整体进入或离开睡眠状态的机制,让设备唤醒系统。
  • 设备电源管理(Device power management):ACPI 表描述了电源信息(包括主板设备、设备电源状态以及设备所连接的电源层– Power Planes) 和让设备进入低功耗状态的控制信息,这样操作系统就可根据资源占用来控制设备进入低功耗状态。
  • 处理器电源管理(Processor power management):当操作系统处于空闲且非睡眠状态,可以通过 ACPI 提供的命令让处理器进入低功耗状态。
  • 设备和处理器性能管理(Device and processor performance management):操作系统在工作时可以根据 ACPI 的定义,让设备和处理器进入不同的性能状态
  • 配置/即插即用(Configuration/Plug and Play):ACPI 指定了用来枚举和配置主板设备的信息,这些信息按层次结构排列,当发生诸如 docking/undocking 之类的事件时,操作系统就可准确知道该事件影响了哪个设备。
  • 系统事件(System Event): ACPI 提供了通用的事件机制操作用于处理如散热、电源管理、坞站或设备的插拔等事件。
  • 电池管理(Battery management):兼容 ACPI 的电池设备需要具有智能电池子系统接口(Smart Battery subsystem interface)或者控制型电池接口(Control Method Battery interface),前者通过嵌入式控制器的接口控制,后者则完全由 AML 控制方法进行操控。
  • 温度管理(Thermal management):ACPI 允许 OEM 自由定义散热温度区间。
  • 嵌入式控制器(Embedded Controller):ACPI 提供了标准接口让操作系统和嵌入式控制器进行通讯。
  • SMBus 控制器(SMBus Controller): ACPI 提供了标准接口让操作系统和 SMBus 进行通讯。

当然为此操作系统内核中要添加额外的 ACPI 支持。支持 ACPI 的操作系统就可以叫做 OSPM (Operating System-directed configuration and Power Management) 。 支持 OSPM 的至少要求实现:

>>> 阅读全文

 

, , , ,

X86/x64 架构的系统地址表初始化(2): 基于 PCIe 的系统

如果读者对 PCI 总线协议还不太了解,建议您先阅读上一篇文章:《X86/x64 架构的系统地址表初始化(1): 基于 PCI 的系统》,以获得足够的背景知识方便理解本文。1

我们在第一篇文章中讨论了基于 PCI 的 X86/X64 系统的系统地址表的初始化。本文我们将关注更现代的系统,即基于 PCI Express 的 X86/X64 系统。后文 PCI Express 统一简称为 PCIe,以和 PCI Express 规格书保持一致。

我们将要研究基于 PCIe 的 X86/X64 系统的系统地址表初始化过程。和上一篇文章一样,重点在于理解 PCIe 总线协议的地址映射机制。要理解在 PCIe 系统上如何访问 PCI 扩展 ROM, 了解地址映射十分重要。

在物理层上 PCIe 完全不同于 PCI。但在逻辑层上,PCIe 只是 PCI 的扩展。事实上,在 PCIe 平台上可以引导专为 PCI 总线设计的操作系统,只要该 OS 支持 PCI 总线规范,就不会有问题。PCIe 是 PCI 扩展也意味着要理解 PCIe 协议,就要先熟悉 PCI 总线协议。这就是我建议您先阅读第一篇文章的原因。

约定
本文使用以下约定:

>>> 阅读全文

 

, , , , , ,

X86/X64 架构的系统地址表初始化 (1):PCI 总线系统

去年我在《信息安全杂志》上发表了“恶意的 PCI 扩展 ROM”一文,文中并未对 PCI 扩展 ROM 1的地址映射展开讨论,这篇文章2在此作出补充。系统程序员常对设备内存(如 PCI 设备内存)是如何映射到系统地址空间感到疑惑不已。本文详细论述了系统地址表的初始化过程,尤其是那些控制着设备内存映射到系统地址表的 PCI 芯片寄存器的初始化。注意:只有带内存的 PCI 设备才有地址映射的要求,比如显卡、带有板载缓冲区或支持 PCI 扩展 ROM 的网卡等。

由于 X86/X64 架构的总线协议必须保持向后兼容,因此其系统地址表十分复杂。系统所使用的总线协议规定了总线设备的内存到系统地址表的地址映射关系。因此,要了解系统地址表的初始化,就必须了解特定的总线协议的地址映射机制。本文重点关注基于 PCI 总线协议的系统。以当今的的标准来衡量,PCI 总线协议略显老旧了。但是,弄清楚它在软件/固件的最底层中所起到的作用仍非常重要。不了解 PCI 总线协议,就无法理解后续的 PCI Express (PCIe) 总线协议。而 PCIe 现在基本成为 X86/X64 系统的主流总线协议。 本系列文章的第 2 部分将讨论基于 PCIe 的系统。

约定
本文常常可见“内存”或“存储器”这个词,且含义不尽相同。为了避免困惑,本文约定如下:

  • “主存储器” 或者 “主存” 指的是安装在主板上的 RAM 模块。
  • “内存控制器” 指的是 CPU 或者芯片组中用以控制和存取 RAM 模块的部分
  • “可刷新存储器” 指的是主板上存储 BIOS/UEFI 的芯片或者存储 PCI 扩展 ROM 内容的芯片。
  • “内存范围” 或 “内存地址范围” 指的是设备在 CPU 内存空间所占用的范围,即从基地址(起始地址)到结束地址的范围(基地址+内存大小)
  • “内存空间”指的是 CPU 所能访问的内存地址集,即 CPU 所能寻址的内存。这里的内存包括 RAM、ROM 以及其它 CPU 所能寻址的存储器。
  • “PCI 扩展 ROM” 除非另有定义,否则指的是 PCI 设备上的 ROM 芯片。

启动过程概述
本节将详细解释系统启动过程,这有助于后续了解系统地址表及其它与总线协议相关的内容。在涉及这些内容之前,你需要对启动过程有清晰的认识。

X86/X64 的启动从执行平台固件(BIOS/UEFI)开始。执行平台固定比启动操作系统要早,甚至是在 “启动加载器” 加载并执行操作系统之前。平台固件的执行过程可以简单概括如下:

>>> 阅读全文

 

, ,

FreeBSD 的 ACPI 实现

几乎所有现代计算机系统的硬件都允许对电源使用进行管理、对系统温度进行监测,并将之维持在适当水平。由此一定水平的电源消耗就能带来最佳的性能。这对于使用电池的移动平台尤为重要,因为不必要的电源消耗会减少电池续航时间,在结束工作前,你就不得不重新充电。节电对桌面系统也同样重要,在系统空闲时关闭显示器、磁盘驱动器等设备显著可以降低能耗。1

不幸的是,在传统 PC 中, 用于电源及散热配置管理的大多数软件都与 BIOS 紧密相关。而且,除非受管的设备所连接的是即插即用总线(如 PCI),否则操作系统就很难便捷地检测、配置或管理设备。例如 ISA PnP 机制适用于枚举外置 ISA 卡设备而不是板载设备。而 PnP BIOS 则适用于枚举板载设备,但也很难扩展成通用方法。另外 PnP BIOS 是 16 位的,所以操作系统必须通过 16 位虚拟环境才能调用 PnP BIOS 的函数。

在引入高级配置和电源管理接口 (ACPI — Advanced Configuration and Power Management Interface) 前, 高级电源管理 (APM) BIOS 被广泛用于电源管理。在 APM 中,大部分的电源管理控制逻辑都驻留在 APM BIOS 代码中。支持 APM 的操作系统通过固定的 BIOS API 与 APM BIOS 进行通信,这些 API 提供了 BIOS 功能的基本访问。支持 APM 的操作系统必须定期对 APM 进行轮询以处理 APM 相关事件。APM BIOS 还可使用特殊系统管理中断,该中断对操作系统是不可见的。APM 提供了四种状态:运行、暂停、休眠和软关闭。

有三大因素制约着 APM 的使用。首先,除非供应商提供特殊的程序,否则很多 APM 功能都要在操作系统加载前通过供应商专有的 BIOS 菜单进行配置,比如设置关闭显示器前的系统空闲时间。此外,实施 APM 电源管理配置的具体策略是由 BIOS 供应商指定的。例如,某 APM BIOS 的策略是在关闭显示器的同时也降低 CPU 时钟频率或关闭网卡等设备,如果不修改 BIOS ,你就无法修改这一策略。

其次,APM 是 BIOS 级别代码,运行在操作系统的范围外。这使得开发和调试 APM 代码极其困难。而用户也只能通过烧写 ROM 的方式来解决 APM 的错误。重刷 BIOS 相当危险,因为一旦发生错误,系统就再无法使用了。

>>> 阅读全文

 

, , , , ,

Windows 开/关转换性能分析

简介
Windows 开/关转换(即启动、休眠、关机过程)的性能对用户体验是至关重要的,因为它提高了用户对计算机的感受程度,并提供一致的开/关机体验。

对于以下的用户场景,开/关机转换性能非常重要:

  • 用户将硬件和操作系统的启动时间作为主要的性能指标。
  • 系统更新可以保护 Windows 用户并及时引入新功能,但用户对漫长的更新和重新启动周期感到沮丧。过长的关机时间会让用户感到烦躁,并增加了系统管理员的服务时间。较长的关机时间,也对移动系统的可靠性产生不利影响,例如增加了因电力不足而意外关机的风险。
  • 移动用户希望他们的计算机的能迅速转换到睡眠状态。睡眠性能对保持数据的完整性是非常重要的。如果从休眠状态恢复的时间太长,用户将忽略睡眠功能,而是直接关闭计算机。

本文会详细介绍 Windows 的开/关转换,重点介绍每个转换阶段的性能漏洞,并展示了如何通过使用 Windows 性能工具包(WPT)识别和分析这些问题。性能分析往往是必要的,因为诸如应用程序、驱动程序、服务和设备等这些系统扩展,如果没有经过优化,都会对开/关转换时间产生负面影响。优化不良的系统扩展通常由下面原因导致:

  • 延迟
  • 缺乏并行
  • 过多的资源消耗

本文可以帮助用户大大减少开/关转换时间。我们将这些性能优化应用到了实验室的许多系统上,在一些系统中,启动到桌面的时间减少了将近50%。某些系统上,开机时间减少到 40 到 50 秒。但是转换过程中的驱动程序,服务,或应用程序的影响是各不同的,因此你的测试结果也不尽相同。

表1是某四台真实机器的 Windows 7 的启动时间。这一数据显示了从BIOS POST 结束后到 Post Boot 阶段(系统空闲状态)所经过时间。启动阶段在本文后面的“引导转换”一节中会进一步说明。

>>> 阅读全文

 

, , , , ,

Windows 8 之用UEFI 保护操作系统预启动环境

文章评价: 英文原文,本文翻译与中文MSDN略有不同
指导原则 – 安全问题绝不妥协
UEFI 安全启动协议是实现跨平台和固件安全的基础,与体系结构无关。在固件(firmware)被允许执行前,基于公钥(Public Key Infrastructure -PKI) 构件会验证其映像,安全启动有助于减少 boot loader attack 的风险。在 Windows 8 中,Microsoft基于该协议改进了平台安全性。

微软正和其伙伴合作,确保安全启动能为客户带来良好的安全体验。微软支持 OEM 灵活地决定谁来管理安全认证,如何让客户导入并管理这些认证以及管理安全启动。我们相信为 OEM 提供这种灵活性以及允许用户决定如何管理自己的系统来说非常重要。

对于 Windows 用户,Microsoft 正用 Windows 验证计划来确保带有 Windows 8 的系统默认就启用了安全启动;这样固件将不允许以编程方式来控制安全启动(以防止恶意软件关闭固件中的安全选项);在未经授权的情况下,OEM 禁止更新固件,因为这可能会危及系统的完整性。。

大部分的策略对于 UEFI 固件来说并不是新东西,如今大部分的 PC 也带有某种形式上的固件验证。甚至现存的老旧系统也支持诸如 BIOS 密码,一种已经被 OEM 和最终用户使用多年的安全启动的形式。但是,有了安全启动和 UEFI,微软和业界可以用更高的高度来创建更良好,更完整的系统,最终提供给用户更强有力的保护以应对不断增加的威胁。

什么是UEFI?
UEFI (Unified Extensible Firmware Interface) 由 UEFI 论坛管理,该论坛由芯片、硬件、系统、固件和操作系统厂商联合组建。该该论坛负责维护有关的规范、测试工具和参考实现,以便在不同的 UEFI PC 间使用。Microsoft 是该论坛的董事成员,该论坛对于任何个人或公司开放,并可免费加入。

>>> 阅读全文

 

, , ,