6.15. 电源和资源管理

Written by Hiten Pandya and Tom Rhodes.

以有效的方式利用硬件资源是非常重要的。在提出 ACPI 之前,管理电源使用和系统散热对操作系统是很困难的。硬件被嵌入的 BIOS 接口管理,例如可插拔 BIOS (PNPBIOS)或者高级电源管理(APM)等等。电源和资源管理是现代操作系统的关键组成部分。例如你可能当系统温度过高的时候让你的操作系统能监视到(并且可能提醒你)。

在 FreeBSD 使用手册的这一章节,我们将提供 ACPI 全面的信息。参考资料会在末尾。ACPI 在FreeBSD 5.X及以上的操作系统中作为一个默认的内核模块被支持。对于 FreeBSD 4.9,ACPI 可以通过在内核配置文件中添加 device acpi 并且重新编译内核来启用。

6.15.1. 什么是 ACPI?

高级配置和电源接口(ACPI)是一个业界标准的硬件资源和电源管理接口(因此而得名)。它是 操作系统控制的配置和电源管理(Operating System-directed configuration and Power Management),也就是说,它给操作系统(OS)提供了更多的控制和弹性。现代操作系统``延伸''了当前即插即用接口(像是 FreeBSD4.X 中使用的 APM)的限制,在 ACPI 的介绍之前。ACPIAPM(高级电源管理)的直接继承者。

6.15.2. 高级电源管理(APM)的缺点

高级电源管理(APM) 基于它的行动简单的控制系统的电源使用。 APM BIOS 被(系统)厂商支持并且区分于硬件平台。操作系统的APM驱动有权使用一个允许电源级别管理的 APM 软件接口

APM 中有四个主要问题。首先,电源管理通过(不同的厂家)BIOS 来完成,并且操作系统没有任何关于它的知识。一个例子是,用户在 APM BIOS 中为硬盘设置空闲时间(idle-time)的值,BIOS 不经过操作系统同意将会让硬盘驱动器停止转动。第二,APM 的逻辑是嵌入在 BIOS 中的,它在操作系统之外工作。这意味着用户只能通过刷新新的 ROM 来修复问题;它是很危险的,并且如果失败了,它会让系统处于一个不可修复的状态。第三,APM 是一个区别于不同厂家的技术,这意味着有很多或者类似的错误在一个型号的BIOS中被发现,而在另外的地方却没有解决。最后但不是只剩下的就是 APM BIOS 没有足够的地方执行复杂的电源策略,或者它很好的适应了机器的用途(or one that can adapt very well to the purpose of the machine)。

即插即用 BIOS(PNPBIOS)在很多情况下不可靠。PNPBIOS 是 16位的技术,所以操作系统为了用PNPBIOS的``接口''方法不得不用16位模拟器。

FreeBSD APM 驱动在 apm(4) 手册页中有描述。

6.15.3. 配置 ACPI

acpi.ko 驱动默认的在启动时通过 loader(8) 被加载并且不应该被编译进内核。原因是这个模块跟系统很容易的工作在一起,比方说不用为了 acpi.ko 而重新编译内核。这对更简单的测试来说很有利。另一个原因是系统启动后再启动 ACPI 不是很有用,并且在一些情况下会失败。拿不准的话只要全部禁止 ACPI 即可。这个驱动不应该而且不能被卸载,因为系统通过它跟各种各样的硬件打交道。ACPI 可以通过 acpiconf(8) 来禁止。实际上通过 ACPI 的交互可以通过 acpiconf(8) 来完成。简单的说,如果任何关于 ACPI 的信息在 dmesg(8) 的输出中,那么它很可能已经运行了。

Note: ACPIAPM 不能共存并且应该份开始用。后来装载的如果注意到另一个在运行将会终止执行。

最简单的表现形式是,ACPI 可以通过 acpiconf(8)-s 标志和一个 1-5 的选项来使系统进入休眠状态。5 选项将会像下面动作一样让系统软关机:

# halt -p

其他选项也是可行的。查看 acpiconf(8) 手册页以获得更多信息。

6.15.4. 调试和禁止 ACPI

几乎所有在 ACPI 中的东西都是显而易见的,直到它不工作为止。作为用户来讲通常要知道有些东西工作的不太好。acpi(4) 驱动支持很多调试选项,它甚至可能有选择的关闭 ACPI 系统的一些部分。要了解更多的调试操作信息,请查阅 acpi(4) 手册页。

有时因为不同的原因,acpi.ko 必须被卸载。这只能在启动时刻通过 loader(8) 来完成。你可以在每次启动系统的时候,在 loader(8) 提示符下输入 unset acpi_load 命令,或者要停止 acpi(4) 驱动的自动装载,添加下面一行到文件 /boot/loader.conf

exec="unset acpi_load"

FreeBSD 5.1-RELEASE 和以后的版本有一个启动菜单来控制 FreeBSD 如何被启动。其中一个选项用来关闭 ACPI。所以要关闭 ACPI 只要在菜单中选择 2. Boot FreeBSD with ACPI disabled