预计阅读本页时间:-
5.8.2 操作系统问题
操作系统在能量管理上扮演着一个重要的角色,它控制着所有的设备,所以它必须决定关闭什么设备以及何时关闭。如果它关闭了一个设备并且该设备很快再次被用户需要,可能在设备重启时存在恼人的延迟。另一方面,如果它等待了太长的时间才关闭设备,能量就白白地浪费了。
这里的技巧是找到算法和试探法,让操作系统对关于关闭什么设备以及何时关闭能够作出良好的决策。问题是“良好”是高度主观的。一个用户可能觉得在30s未使用计算机之后计算机要花费2s的时间响应击键是可以接受的。另一个用户在相同的条件下可能会发出一连串的诅咒。
1.显示器
广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元
现在我们来看一看能量预算的几大消耗者,考虑一下对于它们能够做些什么。在每个人的能量预算中最大的项目是显示器。为了获得明亮而清晰的图像,屏幕必须是背光照明的,这样会消耗大量的能量。许多操作系统试图通过当几分钟的时间没有活动时关闭显示器而节省能量。通常用户可以决定关闭的时间间隔,因此将屏幕频繁地熄灭和很快用光电池之间的折中推回给用户(用户可能实际上并不希望这样)。关闭显示器是一个睡眠状态,因为当任意键被敲击或者定点设备移动时,它能够(从视频RAM)即时地再生。
Flinn和Satyanarayanan(2004)提出了一种可能的改进。他们建议让显示器由若干数目的区域组成,这些区域能够独立地开启和关闭。在图5-46中,我们描述了16个区域,使用虚线分开它们。当光标在窗口2中的时候,如图5-46a所示,只有右下角的4个区域必须点亮。其他12个区域可以是黑暗的,节省了3/4的屏幕功耗。
当用户移动鼠标到窗口1时,窗口2的区域可以变暗并且窗口1后面的区域可以开启。然而,因为窗口l横跨9个区域,所以需要更多的电能。如果窗口管理器能够感知正在发生的事情,它可以通过一种对齐区域的动作自动地移动窗口1以适合4个区域,如图5-46b所示。为了达到这一从9/16全功率到4/16全功率的缩减,窗口管理器必须理解电源管理或者能够从系统的某些其他做这些工作的部分接收指令。更加复杂的是能够部分地照亮不完全充满的窗口(例如,包含文本短线的窗口可以在右手边保持黑暗)。

2.硬盘
另一个主要的祸首是硬盘,它消耗大量的能量以保持高速旋转,即使不存在存取操作。许多计算机,特别是笔记本电脑,在几秒钟或者几分钟不活动之后将停止磁盘旋转。当下一次需要磁盘的时候,磁盘将再次开始旋转。不幸的是,一个停止的磁盘是休眠而不是睡眠,因为要花费相当多的时间将磁盘再次旋转起来,导致用户感到明显的延迟。
此外,重新启动磁盘将消耗相当多额外的能量。因此,每个磁盘都有一个特征时间Td 为它的盈亏平衡点,Td 通常在5~15s的范围之间。假设下一次磁盘存取预计在未来的某个时间t到来。如果t<Td ,那么保持磁盘旋转比将其停止然后很快再将其开启要消耗更少的能量。如果t>Td ,那么使得磁盘停止而后在较长时间后再次启动磁盘是十分值得的。如果可以做出良好的预测(例如基于过去的存取模式),那么操作系统就能够做出良好的关闭预测并且节省能量。实际上,大多数操作系统是保守的,往往是在几分钟不活动之后才停止磁盘。
节省磁盘能量的另一种方法是在RAM中拥有一个大容量的磁盘高速缓存。如果所需要的数据块在高速缓存中,空闲的磁盘就不必为满足读操作而重新启动。类似地,如果对磁盘的写操作能够在高速缓存中缓冲,一个停止的磁盘就不必只为了处理写操作而重新启动。磁盘可以保持关闭状态直到高速缓存填满或者读缺失发生。
避免不必要的磁盘启动的另一种方法是:操作系统通过发送消息或信号保持将磁盘的状态通知给正在运行的程序。某些程序具有可以自由决定的写操作,这样的写操作可以被略过或者推迟。例如,一个字处理程序可能被设置成每隔几分钟将正在编辑的文件写入磁盘。如果字处理程序知道当它在正常情况下应该将文件写到磁盘的时刻磁盘是关闭的,它就可以将本次写操作推迟直到下一次磁盘开启时,或者直到某个附加的时间逝去。
3.CPU
CPU也能够被管理以节省能量。笔记本电脑的CPU能够用软件置为睡眠状态,将电能的使用减少到几乎为零。在这一状态下CPU惟一能做的事情是当中断发生时醒来。因此,只要CPU变为空闲,无论是因为等待I/O还是因为没有工作要做,它都可以进入睡眠状态。
在许多计算机上,在CPU电压、时钟周期和电能消耗之间存在着关系。CPU电压可以用软件降低,这样可以节省能量但是也会(近似线性地)降低时钟速度。由于电能消耗与电压的平方成正比,将电压降低一半会使CPU的速度减慢一半,而电能消耗降低到只有l/4。
对于具有明确的最终时限的程序而言,这一特性可以得到利用,例如多媒体观察器必须每40ms解压缩并显示一帧,但是如果它做得太快它就会变得空闲。假设CPU全速运行40ms消耗了x焦耳能量,那么半速运行则消耗x/4焦耳的能量。如果多媒体观察器能够在20ms内解压缩并显示一帧,那么操作系统能够以全功率运行20ms,然后关闭20ms,总的能量消耗是x/2焦耳。作为替代,它能够以半功率运行并且恰好满足最终时限,但是能量消耗是x/4焦耳。以全速和全功率运行某个时间间隔与以半速和四分之一功率运行两倍长时间的比较如图5-47所示。在这两种情况下做了相同的工作,但是在图5-47b中只消耗了一半的能量。

类似地,如果用户以每秒1个字符的速度键入字符,但是处理字符所需的工作要花费100ms的时间,操作系统最好检测出长时间的空闲周期并且将CPU放慢10倍。简而言之,慢速运行比快速运行具有更高的能量效率。
4.内存
对于内存,存在两种可能的选择来节省能量。首先,可以刷新然后关闭高速缓存。高速缓存总是能够从内存重新加载而不损失信息。重新加载可以动态并且快速地完成,所以关闭高速缓存是进入睡眠状态。
更加极端的选择是将主存的内容写到磁盘上,然后关闭主存本身。这种方法是休眠,因为实际上所有到内存的电能都被切断了,其代价是相当长的重新加载时间,尤其是如果磁盘也被关闭了的话。当内存被切断时,CPU或者也被关闭,或者必须自ROM执行。如果CPU被关闭,将其唤醒的中断必须促使它跳转到ROM中的代码,从而能够重新加载内存并且使用内存。尽管存在所有这些开销,将内存关闭较长的时间周期(例如几个小时)也许是值得的。与常常要花费一分钟或者更长时间从磁盘重新启动操作系统相比,在几秒钟之内重新启动内存想来更加受欢迎。
5.无线通信
越来越多的便携式计算机拥有到外部世界(例如Internet)的无线连接。无线通信必需的无线电发送器和接收器是头等的电能贪吃者。特别是,如果无线电接收器为了侦听到来的电子邮件而始终开着,电池可能很快耗干。另一方面,如果无线电设备在1分钟空闲之后关闭,那么就可能会错过到来的消息,这显然是不受欢迎的。
针对这一问题,Kravets和Krishnan(1998)提出了一种有效的解决方案。他们的解决方案的核心利用了这样的事实,即移动的计算机是与固定的基站通信,而固定基站具有大容量的内存与磁盘并且没有电源限制。他们的解决方案是当移动计算机将要关闭无线电设备时,让移动计算机发送一条消息到基站。从那时起,基站在其磁盘上缓冲到来的消息。当移动计算机再次打开无线电设备时,它会通知基站。此刻,所有积累的消息可以发送给移动计算机。
当无线电设备关闭时,生成的外发的消息可以在移动计算机上缓冲。如果缓冲区有填满的危险,可以将无线电设备打开并且将排队的消息发送到基站。
应该在何时将无线电设备关闭?一种可能是让用户或应用程序来决定。另一种方法是在若干秒的空闲时间之后将其关闭。应该在何时将无线电设备再次打开?用户或应用程序可以再一次做出决定,或者可以周期性地将其打开以检查到来的消息并且发送所有排队的消息。当然,当输出缓冲区接近填满时也应该将其打开。各种各样的其他休眠方法也是可能的。
6.热量管理
一个有一点不同但是仍然与能量相关的问题是热量管理。现代CPU由于高速度而会变得非常热。桌面计算机通常拥有一个内部电风扇将热空气吹出机箱。由于对于桌面计算机来说减少功率消耗通常并不是一个重要的问题,所以风扇通常是始终开着的。
对于笔记本电脑,情况是不同的。操作系统必须连续地监视温度,当温度接近最大可允许温度时,操作系统可以选择打开风扇,这样会发出噪音并且消耗电能。作为替代,它也可以借助于降低屏幕背光、放慢CPU速度、更为激进地关闭磁盘等来降低功率消耗。
来自用户的某些输入也许是颇有价值的指导。例如,用户可以预先设定风扇的噪音是令人不快的,因而操作系统将选择降低功率消耗。
7.电池管理
在过去,电池仅仅提供电流直到其耗干,在耗干时电池就不会再有电了。现在笔记本电脑使用的是智能电池,它可以与操作系统通信。在请求时,它可以报告其状况,例如最大电压、当前电压、最大负荷、当前负荷、最大消耗速率、当前消耗速率等。大多数笔记本电脑拥有能够查询与显示这些参数的程序。在操作系统的控制下,还可以命令智能电池改变各种工作参数。
某些笔记本电脑拥有多块电池。当操作系统检测到一块电池将要用完时,它必须适度地安排转换到下一块电池,在转换期间不能导致任何故障。当最后一块电池濒临耗尽时,操作系统要负责向用户发出警告然后促成有序的关机,例如,确保文件系统不被破坏。
8.驱动程序接口
Windows系统拥有一个进行电源管理的精巧的机制,称为ACPI(Advanced Configuration and Power Interface,高级配置与电源接口)。操作系统可以向任何符合标准的驱动程序发出命令,要求它报告其设备的性能以及它们当前的状态。当与即插即用相结合时,该特性尤其重要,因为在系统刚刚引导之后,操作系统甚至还不知道存在什么设备,更不用说它们关于能量消耗或电源管理的属性了。
ACPI还可以发送命令给驱动程序,命令它们削减其功耗水平(当然要基于早先获悉的设备性能)。还存在某些其他方式的通信。特别地,当一个设备(例如键盘或鼠标)在经历了一个时期的空闲之后检测到活动时,这是一个信号让系统返回到(接近)正常运转。