1.1.1 APM 概览
APM 规范的设计目标是:延长电池寿命; APM 试图对 OS 隐藏一切实现细节,而倾
向于在 APM BIOS 中实现。
APM 定义了系统中五种通用的电源状态: Full On, APM Enabled, APM Standby,
APM Suspend,和 Off。 Full On 状态没有电源管理, APM Eanbled 状态会禁用某些用不着
的设备, APM Standby 状态的设计目的是瞬间唤醒(wakeup)系统, APM Suspend 可以选择
挂起到 RAM(suspend-to-RAM),也可以选择挂起到磁盘(hibernate-to-disk)。
APM 也为设备定义了类似的电源状态: Device On, Device Power Managed,
Device Lower Power, 和 Device Off。 当处于 Device Off 状态时,计算机就无法得知设
备的上下文了。 但是,在 Device Off 时,应该由谁来负责保存和恢复设备呢, 是位于 OS
中的 APM 设备驱动程序, 还是 APM BIOS? 在这一点上 APM 规范有些含混不清。
APM 规范定义了 CPU 核心的控制状态: Full On, Slow Clock, 和 Off。 只要
中断到来,CPU 就会马上转入 Full On 状态。
支持 APM 的 OS,会有一个 APM 驱动程序,用来和 APM BIOS 通信。 当 APM 驱动程
序和 APM BIOS 建立起通信连结后,它们「一起合作来进行电源管理」,意思是,OS 调用
BIOS 例程来查询和修改 APM BIOS 的默认设置, OS 以至少每秒一次的频率轮寻 BIOS,看有
没有 APM BIOS 事件发生。
APM BIOS 可以向 APM 驱动程序发送事件。 举例来说,当检测到一段时间的 CPU
空闲后,APM BIOS 产生一个「System Standby Request Notification」,通知 OS:需要
suspend。 OS 接到通知后,必须在一定时间内调用「Set Power Function」函数,否则的
话,BIOS 就直接把系统 suspend 了。 当 resume 时,APM BIOS 产生一个「System Standby
Resume Notification」来通知 OS──对 OS 来说,此时是更新自己时钟的好时机。
OS 还可以禁止 APM 向自己发送 suspend/resume 请求。 取而代之,OS 自己决定什
么时候主动要求 APM 来执行这些操作。
OS 也可以在其 IDLE 例程中调用 APM BIOS,告诉它 CPU 现在空闲。这样,APM
BIOS 就可以降低 CPU 的频率和电压。
APM BIOS 知道机器的 AC/DC 电源状态, APM 驱动程序可以查询 BIOS 来获得当前
的电源状态,也可以对 AC/DC 的改变进行轮询。
APM BIOS 知道电池的状态, APM 驱动程序可以查询电池的配置和电量,也可以对
「Battery Low Notification」事件进行轮询。
APM 为了电源管理,保存了一个硬编码的设备列表,包括显示器、磁盘、并口、
串口、网络适配器、PCMCIA 插槽等。 OS 可以轮询它们的状态,激活/禁用 APM BIOS 对它们
的管理,以及对状态的改变进行轮询。