四极管:电源管理概述(一)
翻译msdn Windows CE 5.0 Documentation中
Developing a Device Driver->
Power
Management内容。
电源管理模块管理设备的电源,并整体改进操作系统的电源使用效率;它提供每一个设备的电源管理,同时能与不支持电源管理的应用程序及驱动程序共存。
使用电源管理模块可以有效的减少目标设备的电源消耗,同时,能在reset(复位)、on(运行)、idle(空闲)、和supend(挂起)的电源状态,并保护RAM中的文件系统。
电源管理具有以下特性:
1、使设备具有自行电源管理功能;
2、建立一种在系统中使用设备电源在挂起和恢复状态间切换的机制;
3、一个对系统环境、电源状态和设备电源状态有统一认识的模块。你可以自定义电源管理,使全系统的电源分配适合您的设备;
4、当系统挂起或者恢复时,使系统跳过所有代码调用PowerOffSystem函数。
This API should only be called by the Power Manager, or by the OEM if the Power Manager is not present and after
FileSystemPowerFunction is called.
一、 电源管理架构
在不依赖电源管理器的模型的情况下,只能对设备进行简单的管理。电源管理器为OEM厂商和设备驱动程序的开发提供了较大的灵活性。在电源管理器的模型下,设备驱动开发人员不用为了兼容电源管理模型而牺牲驱动程序本身的性能。在电源管理器的模型下,操作系统在挂起或者恢复时,设备会收到中断处理时产生的标识信息,所以在设备挂起状态时可以做的工作和有多长时间做这一工作都被阉割限制,下面的介绍描述了Windows CE的电源管理结构。
使用电源管理器时,设备会从I/O控制代码(IOCTLs)收到电源状态改变的通知。因为IOCTLs在线程中执行,这样子驱动开发者就可以更为灵活的处理电源的状态的改变。使用IOCTLs可以区分系统电源和设备电源在状态。这样子,在系统运行时可以关闭一些设备,而某些设备也可以在系统挂起时任然开启。
电源管理器除了管理设备电源,还向应用程序通知其他与电源相关发生的事件。例如:当系统从挂起状态恢复时,电源管理器会向应用程序发出相应的通知。
电源管理器是一个名为pm.dll的动态链接库(DLL),系统运行时被Device.exe进程直接调用。当电源管理API被应用程序调用时,Device.exe调用pm.dll的入口函数。在Platform Builder 4.0及其后续版本中提供了Pm.dll的源代码,OEM厂商可以根据其设备修改Pm.dll。
电源管理器做为设备,应用程序和定义操作系统电源状态之间的调解者。电源管理器定义了下列规则,使上述三部分进行通信:
1)系统电源状态限定了所有设备的最大功耗;
2)应用程序以最小功耗来获取指定设备的最低性能等级。
3)当设备功耗在其最大功耗与最小功耗范围内时,电源管理器允许设备自行管理电源;
4)如果最小功耗高于最大功耗,那么,在应用程序请求设备运行期间,设备电源将持续提升。
5)、设备可以在一个或多个电源状态下运行。电源状态以有限的数字表示。详见设备电源状态章节。
6)系统转为挂起状态后,对应用程序有用的最小功耗将被取消。
系统电源状态是描述所有设备中最大的设备电源状态。系统电源状态由OEM厂商定义,并在注册表中描述,同时,在电源管理器中可以加入部分支持代码。OEM厂商可以定义任意数量的系统电源状态。欲了解更多信息,请参阅系统电源状态章节。
在电源管理器框架内部,OEM厂商可以定义系统电源状态来设定最大设备电源状态。设备调用DevicePowerNotify来控制其电源等级,应用程序调用SetPowerRequirement来确认它们所需要的设备运行在一个可以接受的性能水平。