一、APM与ACPI
APM全称是 Advanced Power Management(高级电源管理)
APM电源状态包括: 就绪,待机(standby),挂起(suspend),休眠(sleep),关闭。
1. 由于基于APM的BIOS都有它自己的电源管理方案,使得计算机与计算机之间缺乏一致性,每个BIOS开发者必须精心维护自己的APM BIOS代码和功能。
2. 系统进入挂起的原因无法知晓。用户是否按了进入睡眠按钮,还是BIOS认为系统已进入了空闲状态,或者电池电压过低,这些信息APM都无法知道,但是Windows必须要知道挂起的原因,即使系统没有进入空闲状态。
3. BIOS无法知道用户在干什么,只有通过监视中断和I/O端口来猜测用户的活动。有时,BIOS会使系统处于完全混乱的状态,当系统没有空闲时将系统挂起或者当系统处于空闲状态时,却不进入挂起状态。
4. 早期版本的BIOS APM(1.0和1.1)不提供任何系统性能信息,系统是否支持睡眠状态就只有尝试将系统转入睡眠模式才知道。如果BIOS不支持睡眠模式,那将导致死机。BIOS APM 1.2解决了这个缺陷。
5. BIOS对USB设备、加插的电脑配件卡和IEEE1394设备全然不知,导致当以上设备没有进入空闲状态,而BIOS却认为系统已经进入空闲状态,从而发生冲突,使这些设备无法正常使用或系统死机。
由于APM有以上不足,因此ACPI应运而生。
ACPI全称Advanced Configuration Power Interface(高级配置电源界面),ACPI是为了解决APM的缺陷而问世的。它定义了许多新的规范:
1. ACPI将现有的电源管理BIOS代码、APM应用编程接口、PNP BIOS应用编程接口、多处理器规范表格等集合成一种新的电源管理和配置接口规范。
2. ACPI允许操作系统(不是BIOS)控制电源管理,这点与APM不相同。
3. ACPI标准定义了硬件寄存器、BIOS接口(包含配置表格、控制方法以及主板设备列举和配置)、系统和设备的电源状态和ACPI热模型。
4. BIOS支持的代码不是用汇编语言而是用AML(ACPI Machine Language,ACPI机器语言)编写的。BIOS不能决定用于电源管理或资源管理的策略或超时。
5. 使用ACPI系统的所有设备可以互相通信来了解彼此的使用情况,并且都受操作系统的控制,操作系统对正在运行的系统状态了如指掌,所以操作系统处于执行电源管理的最佳位置。
二、ACPI介绍
ACPI主要支持三种节电方式:<br /> 1、(standby即待机)显示屏自动断电,只是主机通电。这时敲任意键即可恢复原来状态<br /> 2、(suspend to ram 即挂起到内存)系统把当前信息储存在内存中,只有内存等几个关键部件通电,这时计算机处在高度节电状态,按任意键后,计算机从内存中读取信息很快恢复到原来状态。<br /> 3、(suspend to disk即挂起到硬盘)计算机自动关机,关机前将当前数据存储在硬盘上,用户下次按开关键开机时计算机将无须启动系统,直接从硬盘读取数据,恢复原来状态。<br /> ACPI共有六种状态,分别是S0到S5。它们代表的含义分别是:<br /> S0--实际上这就是我们平常的工作状态,所有设备全开,功耗一般会超过80W;<br /> S1--也称为POS(Power on Suspend = standby),这时除了通过CPU时钟控制器将CPU关闭之外,其他的部件仍然正常工作,这时的功耗一般在30W以下;(其实有些CPU降温软件就是利用这种工作原理)<br /> S2--这时CPU处于停止运作状态,总线时钟也被关闭,但其余的设备仍然运转;<br /> S3--这就是我们熟悉的STR(Suspend to RAM),这时的功耗不超过10W;<br /> S4--也称为STD(Suspend to Disk),这时系统主电源关闭,但是硬盘仍然带电并可以被唤醒;<br /> S5--这种状态是最干脆的,就是连电源在内的所有设备全部关闭,即关机(shutdown),功耗为0。
三、linux所支持的APM和ACPI
针对APM和ACPI两种不同的标准,linux内核提供了两个不同的模块来实现电源管理功能,这就是apm和acpi。需要注意,apm和acpi是互相冲突的两个模块,用户在同一时间内只能加载其中之一,如果当他们在加载的时候发现二者之一已经加载,就会自动退出。