CN101661325B - 一种移动设备的电源动态管理方法 - Google Patents
一种移动设备的电源动态管理方法 Download PDFInfo
- Publication number
- CN101661325B CN101661325B CN200910056190.8A CN200910056190A CN101661325B CN 101661325 B CN101661325 B CN 101661325B CN 200910056190 A CN200910056190 A CN 200910056190A CN 101661325 B CN101661325 B CN 101661325B
- Authority
- CN
- China
- Prior art keywords
- power consumption
- request
- event
- driven object
- mobile device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Abstract
本发明揭示了一种基于电源动态管理的移动设备及电源动态管理方法,由于其采用了代理机制,拦截了对驱动对象的接口访问并结合事件通知,整体上监控了驱动对象的使用情况,并可以自动记录设备的功耗状态,自动切换设备的功耗状态,使设备对使用者来说始终可用,对系统来说则随时可以自动关闭,减少了驱动程序开发人员设备状态维护及查询设备电源状态的麻烦;同时由于驱动对象会被代理对象及时关闭电源,所以节省了不必要的电源,延长了待机时间,在不损失性能的前提下尽可能优化系统的功耗,而且系统工作性能稳定可靠,适用范围较为广泛,给人们的工作和生活都带来了很大的便利。
Description
技术领域
本发明涉及移动设备电源管理领域,特别涉及一种基于电源动态管理的移动设备及电源动态管理方法。
现代社会中,随着科学技术的不断进步,越来越多的人们已经开始使用移动设备,而对于众多的移动设备来说,电源的供给是必不可少的。因此电源管理是移动设备上的重要课题,在现有技术中,各类嵌入式操作系统平台均在某种程度上支持动态电源管理(DPM,Dynamic Power Management)。
现以MontaVista公司的MontaVista Linux系统和Microsoft公司的Windows Mobile系统为例进行介绍。MontaVista Linux系统是MontaVista公司对Linux内核针对移动设备做了一定裁剪和完善的Linux版本,也是移动设备上使用较为广泛的Linux系统。MontaVista系统把系统按照不同的参数分为不同的操作点(Operation Point),一个操作点对应一种功耗和性能的固定的参数搭配,比如Core电压1.1v,CPU频率13MHz,SRAM timing CAS2,由不同的策略(Policy)把一组操作点映射成一个操作状态(OperationState),系统初始化时,必须创建一些操作点,策略,和操作状态,运行过程中,系统的DMP框架负责管理Policy和在不同的操作状态间切换。在MontaVista中,驱动必须响应PM_SUSPEND和PM_RESUME请求。
而Window Mobile是Microsoft公司的以WinCE为内核,并作一定裁剪和完善的移动设备操作系统。Windows Mobile在WinCE4.0后引入了专门的电源管理程序,这个电源管理程序代替了以前散见于GWES(图形、窗口、事件子系统)的函数,定义了一系列的电源管理状态:D0、D1、D2、D3。应用程序可以接收系统电源管理状态的改变的通知,可以请求改变电源管理状态,并可以阻止系统关闭电源。在Windows Mobile中,驱动必须响应IOCTL_POWER_SET 请求,并改变设备状态。
以上的这两种技术都在某种程度上以一定的灵活性和可扩展性改善了移动设备的电源管理,但是,应用程序和驱动程序仍然在DPM中承担比较重要的责任,开发人员也需要对系统使用的策略和机制有较为深入的了解才能最大限度的节省功耗。举例而言,在Windows Mobile上,当某个设备响应电源管理程序的IOCTL_POWER_SET请求时,必须记录自己的电源管理状态,在状态改变的过程中,也必须维护自己的状态。在MontaVista中,应用程序在使用设备前必须查询设备电源管理状态,如果已经关闭,则需要开启电源。另外,二者都过于依赖应用程序进行电源管理,希望应用程序能主动关闭特定设备的电源(比如请求电源管理状态变更,或者改变策略),此举固然加大了应用程序的灵活性,但也加大了开发人员的负担。
随着计算机技术的发展,代理机制被广泛使用。代理机制在计算机领域应用的基本思想是,客户端(这个客户端是广义的,泛指任何使用某项服务的程序)对服务端发出的调用被代理拦截,经过特定处理后发送到服务端,服务端返回的结果也被代理拦截,经过处理后发送到原始客户端。这个拦截过程实现了额外的功能,使得使用服务端所必需的某些额外操作得一向客户端屏蔽。从而简化了客户端的编程,提高开发效率。
比如,在COM的远程接口调用中,客户端调用非本地接口时和本地接口并无差别,系统自动处理接口参数的列集和散集,客户调用实质上发送到其代理,这个代理对象把参数列集处理(即按照特定规律封装数据),并发送到远程接口的代理,这个远程代理把接口方法散集处理(即按照特定规律解包数据),然后调用真正的接口方法。这个过程对客户端而言是透明的,简化了客户端的编程,否则客户端将不得不使用原始的套接字(Socket),将不得不自行处理应用层协议,即传递数据的语义,以供双方分辨接口调用的参数。不得不处理容错,连接关闭和缓存等一系列问题。同理,在JAVA平台的RMI(远程方法调用)中,在CORBA的接口调用中,以及任何严肃的分布式计算环境中,都有类似的机制。
总之,代理机制可以有效的减少客户端的开发负担,自行拦截客户端的调用,并作处理,使得某些系统必要的工作对使用者透明。鉴于以上内容,有 必要提供一种移动设备的电源动态管理方法,其通过采用代理机制,实现在不损失性能的前提下尽可能优化系统功耗。
本发明的目的是提供一种基于电源动态管理的移动设备及电源动态管理方法,实现移动设备功耗的降低。
一方面,本发明提供一种移动设备的电源动态管理方法,其基于所述移动设备的控制系统,所述管理方法采用代理机制对所述移动设备进行电源动态管理,包括以下步骤:
a、为需要代理的驱动对象创建并注册对应的代理对象,以通过所述代理对象为对应的驱动对象进行代理;
b、通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件;
c、判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件:若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象并在其完成响应后转到下述步骤d;若判断结果为不适以响应,则转到下述步骤e;
d、需要功耗调低时,向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤b;不需要功耗调低时,则直接转到上述步骤b;
e、需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤c;若所述功耗调高请求发送失败,则转到上述步骤b。
所述步骤e进一步包括:
e1、在对应的驱动对象响应完所述发送的功耗请求事件后,判断所述代理对象的电源管理状态是否需要向功耗更低的方向调整;
e2、若需要调整,则启动定时器;若不需要调整,则转到所述步骤b;
e3、若有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起时,则转到上述步骤c;若没有新的功耗请求事件在定时器计时过程中 向对应的驱动对象发起,则在定时器到时时向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤b。
所述驱动对象为所述移动设备的驱动程序。
所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
另一方面,本发明提供一种基于电源动态管理的移动设备,包括基于所述移动设备控制平台的控制单元,所述控制单元用以控制所述移动设备的各单元采用代理机制对所述移动设备进行电源动态管理,所述移动设备还包括:
注册单元,用以为所述移动设备需要代理的驱动对象创建并注册对应的代理对象;
监控单元,用以通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件;
识别单元,用以判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件:若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象;若判断结果为不适以响应,则所述控制单元启动所述监控单元继续监控;
功耗调低单元,所述控制单元在所述识别单元将所述功耗请求事件发送至对应的驱动对象并在其完成响应后启动所述功耗调低单元,用以向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后启动所述监控单元继续监控;
功耗调高单元,所述控制单元在所述识别单元判断所述代理对象的电源管理状态不适以响应所述功耗请求事件时启动所述功耗调高单元,用以在需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后启动所述识别单元工作;若所述功耗调高请求发送失败,则启动所述监控单元工作。
所述功耗调高单元进一步包括以下工作内容:
在对应的驱动对象响应完所述发送的功耗请求事件后,判断所述代理对象的电源管理状态是否需要向功耗更低的方向调整;
若需要调整,则启动定时器;若不需要调整,则启动所述监控单元工作;
若有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起时,则启动所述识别单元工作;若没有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起,则在定时器到时时向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后启动所述监控单元工作。
所述驱动对象为所述移动设备的驱动程序。
所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
采用本发明所述的一种基于电源动态管理的移动设备及电源动态管理方法,由于其采用了代理机制,拦截了对驱动对象的接口访问并结合事件通知,整体上监控了驱动对象的使用情况,并可以自动记录设备的功耗状态,自动切换设备的功耗状态,使设备对使用者来说始终可用,对系统来说则随时可以自动关闭,使得驱动程序开发人员减少了设备状态维护的麻烦,另外仅仅需要响应特定的电源管理请求,也使得应用程序开发人员减少了查询设备电源状态的麻烦,只需要实现特定的业务逻辑,从而提高了系统开发效率;同时由于驱动对象会被代理对象及时关闭电源,所以节省了不必要的电源,延长了待机时间,在不损失性能的前提下尽可能优化系统的功耗,而且系统工作性能稳定可靠,适用范围较为广泛,给人们的工作和生活都带来了很大的便利。
附图说明
图1是本发明所述方法的流程图;
图2为本发明一实施例的移动设备系统架构示意图;
图3为本发明一实施例中代理对象的第一种状态机示意图;
图4为本发明一实施例中代理对象的第二种状态机示意图;
图5为本发明一实施例中代理对象的第三种状态机示意图;
图6为使用和未使用代理机制的电源动态管理方案的功耗对比示意图;
图7为使用和未使用代理机制的电源动态管理方案的CPU性能对比示意图。
具体实施方式
下面结合附图和实施例进一步说明本发明的技术方案。
参照图1,图1显示了一种移动设备的电源动态管理方法100,其基于所述移动设备的控制系统,所述管理方法采用代理机制对所述移动设备进行电源动态管理,包括以下步骤:
101、创建并注册驱动对象对应的代理对象。为需要代理的驱动对象创建并注册对应的代理对象,以通过所述代理对象为对应的驱动对象进行代理。作为一实施例,所述驱动对象为所述移动设备的驱动程序,所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
102、通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件。作为一实施例,所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
103、判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件。若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象并在其完成响应后转到下述步骤104;若判断结果为不适以响应,则转到下述步骤105。
104、进行功耗调低。需要功耗调低时,向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤102;不需要功耗调低时,则直接转到上述步骤102。
105、进行功耗调高。需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤103;若所述功耗调高请求发送失败,则转到上述步骤102。
本发明所述方法应用之移动设备包括存储装置和中央处理器(CentralProcessing Unit,CPU),所述存储装置和中央处理器虽未于图中示出,但本领域技术人员毫无疑义的知晓所述移动设备包括所述存储装置和中央处理器,应当毫无疑义的知晓所述存储设备可用于存储任意适合的可被导入或导出的数据(包括任意适合的程序代码段),且应当知晓所述中央处理器用于数据的运算和处理(例如:运行操作系统,执行任意适合的程序等)。在本实施例中,所述存储装置用于存储一操作系统及电源动态管理程序,所述中央处理器用于在运行该操作系统后,读取并执行该电源动态管理程序。
参见图2,对于本发明的基于代理机制的动态电源管理技术,主要由DPM程序,驱动对象,驱动对象的代理对象及应用程序(实际指驱动对象使用者,也包括其他系统服务,下文提及应用程序,均符合此涵义)以及操作系统内核共同来实现。驱动对象实现特定的IO请求和电源管理请求(Power_Request),代理对象拦截应用程序对驱动对象的调用,按照特定策略处理后向驱动对象转交方法调用,在调用结束后,也按照特定策略处理调用结果,在此过程中实现对设备使用的监控,自动完成电源管理状态的维护和切换。
所述移动设备中包括动态电源管理功能模块和设备驱动功能模块(动态电源管理功能模块作为本发明所述移动设备的控制单元),其中,所述的方法包括以下步骤:
(1)移动设备系统进行初始化操作;
(2)所述的动态电源管理功能模块根据设备驱动功能模块进行代理对象创建和初始化操作,包括以下步骤:
(a)所述的动态电源管理功能模块截获所述的设备驱动功能模块的接口注册请求;
(b)所述的动态电源管理功能模块判断所述的设备驱动功能模块是否需要代理,包括以下步骤:
(i)对所述的设备驱动功能模块的类型进行判断;
(ii)如果该设备驱动功能模块为外部物理设备的驱动功能模块,则返回需要代理的判断结果;
(iii)如果该设备驱动功能模块为与功耗无关的驱动程序或者伪驱动程序,则返回不需要代理的判断结果;
(c)如果需要代理,则所述的动态电源管理功能模块创建对应的代理对象,包括以下步骤:
(i)所述的动态电源管理功能模块根据所述的设备驱动功能模块的接口和该设备驱动模块的名称创建相应的代理对象;
(ii)所述的动态电源管理功能模块使用该设备驱动功能模块的名称来注册该对应的代理对象;
(d)所述的动态电源管理功能模块对所述的代理对象进行初始化操作,包括以下步骤:
(i)所述的动态电源管理功能模块初始化该代理对象的初始电源管理状态;
(ii)所述的动态电源管理功能模块初始化该代理对象的定时器定时间隔;
(3)所述的动态电源管理功能模块将功耗请求事件送至所创建的相应代理对象,其中该功耗请求事件可以为读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件或者用户的锁屏或解锁通知事件;
(4)所述的代理对象根据该功耗请求事件进行电源管理状态调整操作,并向设备驱动功能模块发送功耗调整请求,包括以下步骤:
(a)所述的代理对象接收所述的功耗请求事件;
(b)代理对象判断当前的电源管理状态是否适合响应此功耗请求事件;
(c)如果适合,则转发该功耗请求事件,并进行功耗调低处理操作,包括以下步骤:
(c)如果适合,则转发该功耗请求事件,并进行功耗调低处理操作,包括以下步骤:
(i)代理对象判断当前的电源管理状态是否需要向功耗更低的方向调整;
(ii)如果需要,则启动定时器,反之,则返回前述步骤(a);
(iii)如果有新的功耗请求事件到达,则返回上前步骤(b);
(iv)如果定时器达到系统预设的超时时间,则该代理对象向设备驱动功能模块发送功耗调低请求;
(v)如果发送成功,则该代理对象更改当前自身的电源管理状态,并返回上述步骤(a);
(vi)如果发送失败,则返回上述步骤(a);
(d)如果不合适,则进行功耗调高处理操作,包括以下步骤:
(i)该代理对象向设备驱动功能模块发送功耗调高请求;
(ii)如果发送成功,则该代理对象更改当前自身的电源管理状态,并返回上述步骤(a);
(iii)如果发送失败,则返回上述步骤(a);
(5)所述的设备驱动功能模块根据所述的功耗调整请求对设备的电源管理状态进行物理转换。
其中,本发明主要是关于移动设备上的电源管理技术,特别是关于嵌入式操作系统上对移动设备上CPU,及各个典型外设如LCD、Audio Codec等的动态电源管理技术。本发明的方法的核心是代理机制,在代理的基础上,可以自动维护设备电源状态,可以自动切换电源状态,实现外设电源管理状态的自适应管理。
上述的驱动对象应该至少具有以下功能特点:
(1)实现系统驱动接口方法,可以响应正常的IO请求,典型的比如读数据,写数据,控制请求,即IO方法(Read/Write/IO Control)。
(2)在实现驱动的接口方法同时,额外响应电源管理请求,以物理的转换设备电源管理状态,典型的比如挂起设备,恢复设备请求,即Power_Request(Power_Suspend、Power_Resume)等。
(3)驱动对象需使用某种系统提供的方法发布自己的接口,以使得应用程序或其他系统服务找到驱动对象。
上述代理对象应该至少具有以下功能特点:
(1)实现与驱动对象相同的系统驱动接口方法(但不能响应Power_Request),可以响应正常的IO请求,但不是真正操作物理设备以响应此请求,而可以使用转交或者别的方法响应此请求。
(2)一个定时器句柄,以在代理对象访问结束后激发定时策略。
(3)设备电源管理状态,以记录,转换,维护状态机。
(4)接收通知的方法,以便于处理非接口方法调用但使用外设的情况。
(5)驱动对象的指针或者句柄,便于转发调用请求。
上述的DPM程序应该至少具有以下功能特点:
(1)维护代理对象列表,使得代理对象可以被管理和控制。
(2)实现系统驱动接口方法,使得系统其他服务或者应用程序可以管理,访问电源管理程序。
注意,实现驱动接口方法是非限定性的,目的只是提供其他服务或者应用程序访问的方法。
上述应用程序应该至少具有以下功能特点:
(1)发现特定驱动对象接口服务的能力。典型的如根据约定服务名,使用系统提供的服务接口查找例程发现其感兴趣的接口服务。
(2)使用特定驱动对象接口服务的能力。典型的如设定缓冲区大小,设定控制器参数,设定IO请求包相关数据项等。
上述的内核应该至少具有以下功能特点:
(1)提供注册服务接口的方法。
(2)提供挂接到注册服务接口方法的回调机制。
(3)提供查找服务接口的方法。
在实际使用当中,基于代理机制的动态电源管理方法的实现步骤如下:
1、驱动对象:
步骤1——实现系统为驱动程序规定的接口方法。
步骤2——在某个接口方法(比如Control方法)中实现Power_Request请求。
步骤3——使用操作系统提供的发布构件对象的方法发布自己。
2、代理对象(参照图3):
步骤1——等待其他系统服务或者应用程序(以下统称客户端)对驱动接口的请求。
步骤2——判断代理对象的电源管理状态是否合适响应此IO请求。
步骤3——状态合适响应此请求,转发IO请求。不合适转后续步骤9。
步骤4——判断代理对象的电源管理状态是否需要向功耗更低方向调整。
步骤5——需要调整,则启动定时策略。不需要调整,返回上述步骤1。
步骤6——新的请求到达,返回上述步骤2。
步骤7——定时到达,给驱动对象发送Power_Request,请求调低功耗。如果成功,更改自身电源管理状态。
步骤8——停止定时策略。返回上述步骤1。
步骤9——给驱动对象发送Power_Request,请求调高功耗。如果成功,更改自身电源管理状态,转步骤2。如果失败,返回上步骤1。
上述所给出的步骤仅仅是一个典型设备的实施步骤,根据实际情况,允许适当的变化。举例而言,移动设备上LCD的使用往往既和其接口调用方法有关,也和用户输入事件相关,可以参考上述步骤给出其代理对象的实现步骤如下(参照图4):
步骤1——等待其他系统服务或者应用程序(以下统称客户端)对驱动接口的请求和用户事件通知(如按键事件或触屏事件)。
步骤2——判断代理对象的电源管理状态是否合适响应此IO请求。
步骤3——状态合适响应此请求,转发IO请求。不合适转步骤9。
步骤4——判断代理对象的电源管理状态是否需要向功耗更低方向调整。
步骤5——需要调整,则启动定时策略。不需要调整,转步骤1。
步骤6——新的请求或者用户事件通知到达,回步骤2。
步骤7——定时到达,给驱动对象发送Power_Request,请求调低功 耗。如果成功,更改自身电源管理状态。
步骤8——停止定时策略。转步骤1。
步骤9——给驱动对象发送Power_Request,请求调高功耗。如果成功,更改自身电源管理状态,转步骤2。如果失败,转步骤1。
而对于CPU也可视为一个特殊的设备,虽然其无IO方法的调用,但一样存在多个功耗状态的转换,可以使用代理对象封装。不同的是其关注的事件或者请求不一样而已,CPU的代理对象典型的关注操作系统的Idle线程被调度事件,用户的锁屏和解锁通知等,CPU的驱动对象往往和具体CPU的电源管理架构和状态有关,根据其能力不同有不同的实现,具体请参阅图5所示。
同时,上述所给的步骤仅仅涉及驱动对象的代理和必要的自动管理机制的使用(如定时机制和事件机制),并不限制其所涉代理对象具体电源管理状态的多寡和其具体实现以及与其他DPM策略的整合。比如某些CPU芯片的低功耗状态可能比较多,而某些CPU芯片则可以根据其使用状况(如利用率、IO吞吐量、Cache缺失率等)动态调频调压,均可以被整合进基于代理机制的动态电源管理技术。
而且,在所述图3至图5中的各个状态机仅供示意使用,与实际实现中不保证一致,实际上,在实际实现中,仅仅一个Suspend状态往往是不够的,某些设备可能有多个低功耗状态。
3、DPM程序:
步骤1——截获驱动对象注册(发布)接口请求。
步骤2——判断对象是否需要代理。
步骤3——需要代理,则根据驱动对象接口和驱动对象名创建代理对象并使用驱动对象名注册代理对象,实现代理。不需要则转步骤1。
步骤4——初始化代理对象,包括初始电源管理状态,定时器定时间隔等。
步骤5——接受用户请求,事件通知,根据所掌握的代理对象处理或者转发。
下面对驱动对象、代理对象、DPM程序及应用程序进行进一步的说明。
驱动对象:
步骤1:驱动程序需实现特定OS上的系统驱动接口,以响应IO请求。
以audio驱动为例,Read方法返回录音数据,Write方法写入待播放的音频数据,Control方法设置采用率,声道数等参数。Audio驱动实现上述3个方法响应应用程序或其他系统服务的IO调用。
步骤2:在IO Control方法中,实现几个约定的控制字响应Power_Request请求。
步骤2.1:控制字为1000,则使外设芯片进入Suspend状态。
步骤2.2:控制字为1001,则使外设芯片从Suspend状态恢复正常。
步骤2.3:控制字为1002,则使外设芯片进入PowerOff状态。
步骤2.4:控制字为1003,则是外设芯片从PowerOff状态回复正常。
步骤3:调用系统方法发布驱动接口,不同的系统有不同的实现,对某些系统而言,就是简单的名字约定。
代理对象:
一个代理对象具有如下的结构:
CVirtual Device(UINT DeviceID,IObject*pObject);
void InitDevPowerMode(ULONG mode);//rename this api later.
void KeepSpecifiedMode(ULONG mode,BOOL KeepOn);//disable timerpolicy
void SetChangeModeInterval(ULONG interval);
ECODE ChangeMode(DeviceMode mode);
ECODE ChangeMode();
ECODE SetMode(ULONG mode);
ECODE SetPowerMode(ULONG mode);
void UpdateInputLastUse();//event handler
void RestartTimer();
void RestartTimer(int Interval);
ULONG GetLeftInterval();
ECODE ChangeModeByStep();
void SetChangeModeCallBack(TimerCallBackProc proc);
unsigned long PowerState;//tag
int hTimer;//timer handle
BOOL KeepOn;//disable timer policyc
BOOL IgnoreControl;//ignore Control call
BOOL IgnoreRead;//ignore Read call
BOOL IgnoreTimer;//suspend device will notstop timer.
TimerCallBackProc ChangeModeCallBack;
unsigned long ModeChangeInterval;//intervalbetween mode change
RealDevice * piRealdev;//Physical Object
int DeviceID;
unsigned long SpecifiedMode;//default power mode of ProxyObject
};
PowerState有如下几个状态:
DevicePowerOff、DeviceSuspend、DeviceVeryLowPower、DeviceLowPower、DevicePowerOn。
步骤1:等待客户端对驱动接口的请求。
步骤2:根据PowerState判断代理对象的电源管理状态是否合适响应此IO请求,一般而言,如果PowerState是PowerOn状态,则认为可以响应,否则不可以。但驱动程序可以通过IgnoreControl等标志设定哪些调用可以忽略。
步骤3:可以响应,转发IO请求。否则转步骤9。
步骤4:IO请求完成,判断代理对象的电源管理状态是否需要向功耗更低方向调整。一般而言,如果PowerState不是PowerOff状态,则认为需要向下调整。
步骤5:需要调整,则调用RestartTimer()函数启动定时策略。不需要调整,回步骤1。
步骤6:新的请求到达,回步骤2。
步骤7:定时到达,调用SetMode函数给驱动对象发送Power_Request(1000号或者1002号控制字),请求调低功耗。如果成功,更改自身电源管理状态。
步骤8:停止定时策略。回步骤1。
步骤9:调用SetMode函数给驱动对象发送Power_Request(1001号或者1003号控制字,视当前PowerState而定),请求调高功耗。如果成功,更改自身电源管理状态,转步骤2。如果失败,回步骤1。
DPM程序:
步骤1:驱动对象发布接口时,截获其调用,方法是注册回调函数。此函数被调用时回调函数也被回调。
步骤2:判断对象是否需要代理:一般而言,只有物理的,具体的外设驱动需要被代理,而与功耗无涉的驱动程序,伪驱动程序(即实现系统驱动接口,以提供某些特殊服务)则不需要。
步骤3:代理驱动对象,方法因系统而异,对于支持对象机制的系统,可以返回同名对象,对应用程序透明。对于不支持对象机制的系统,则根据特定服务名约定。
步骤4:初始化代理对象,包括初始电源管理状态,定时器定时间隔等,直接使用代理对象指针即可完成。
步骤5:接受用户请求,事件通知,根据所掌握的代理对象处理或者转发,比如锁屏事件,按键事件,触屏事件需要相应调用CPU和LCD的代理对象处理。
应用程序:
步骤1:查找系统服务,方法因系统而异,对于支持对象机制的系统,可以根据特定名字查找服务。对于不支持对象机制的系统,则直接调用特定的服务(即代理对象和物理对象使用不同的函数方法名)。
此步骤与DPM程序的步骤3即实现了驱动对象的代理。此时应用程序 使用的接口实质上驱动对象的代理对象。
步骤2:使用系统服务。此步骤和未使用基于代理的电源管理技术时没有任何差别,此处不再详述。
由于本发明的方法中使用了代理机制,拦截对驱动对象的接口访问并结合事件通知,整体上监控了驱动对象的使用情况,可以自动记录设备的功耗状态,自动切换设备的功耗状态,使设备对使用者而言始终可用,对系统而言随时自动关闭,对驱动开发人员而言减少设备状态维护的麻烦而仅仅需要响应特定的电源管理请求,对应用开发人员而言减少查询设备电源状态的麻烦而仅仅需要实现特定的业务逻辑。
总之,对最终用户而言,由于驱动对象会被代理对象及时关闭电源,所以节省了不必要的电源,延长了待机时间,对应用和驱动开发人员而言,由于只关心设备本身业务逻辑而非系统电源管理状态,提高了开发效率。
对于后一点,作为本发明的主要贡献,不难理解,因代理对象的使用对其使用者是透明的,电源管理的引入对应用开发者无任何额外要求,对驱动开发者仅仅多了几个必要的请求。对于前一点,提升功耗表现和不损性能则并非显而易见,以下以图表说明。
参阅图6所示,其描述了在移动设备的典型应用场景下,本发明的方案的一种实现和未使用本方案的功耗对比(空白柱为使用本发明方案的功耗,条纹柱为未使用本发明方案的功耗),测试仪器使用Agilent高精度电源。得出的结论是:本方案在所有场合下都略有胜出,说明,由于驱动对象会被代理对象及时关闭电源,本方案在功耗提升方面是有效的。
参阅图7所示,其中描述了使用代理机制和不使用代理机制下某些典型应用所耗用的CPU时间(空白柱为使用本发明方案的耗用时间,条纹柱为未使用本发明方案的耗用时间),也即性能表现。我们使用CPU使用率衡量性能,即使用同一应用同一场景在不同情况下对CPU的耗用情况来判断性能损耗情况。可以看出,在引入代理机制后,CPU的使用率略有下降,但下降幅度非常小,可以接受。
另一方面,本发明还提供的一种基于电源动态管理的移动设备,包括基于所述移动设备控制平台的控制单元,所述控制单元用以控制所述移动 设备的各单元采用代理机制对所述移动设备进行电源动态管理,所述移动设备还包括:
注册单元,用以为所述移动设备需要代理的驱动对象创建并注册对应的代理对象;作为一实施例,所述驱动对象为所述移动设备的驱动程序,所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
监控单元,用以通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件;作为一实施例,所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
识别单元,用以判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件:若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象;若判断结果为不适以响应,则所述控制单元启动所述监控单元继续监控;
功耗调低单元,所述控制单元在所述识别单元将所述功耗请求事件发送至对应的驱动对象并在其完成响应后启动所述功耗调低单元,用以向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后启动所述监控单元继续监控;
功耗调高单元,所述控制单元在所述识别单元判断所述代理对象的电源管理状态不适以响应所述功耗请求事件时启动所述功耗调高单元,用以在需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后启动所述识别单元工作;若所述功耗调高请求发送失败,则启动所述监控单元工作。
需要指出的是,本发明所述的一种基于电源动态管理的移动设备与本发明所述的一种移动设备的电源动态管理方法100在原理和实施例上是相同或类似的,故重复部分不再赘述。
本技术领域中的普通技术人员应当认识到,以上的实施例仅是用来说明本发明,而并非用作为对本发明的限定,只要在本发明的实质精神范围内,对以上实施例的变化、变型都将落在本发明的权利要求书范围内。
Claims (8)
1.一种移动设备的电源动态管理方法,其基于所述移动设备的控制系统,其特征在于,所述管理方法采用代理机制对所述移动设备进行电源动态管理,包括以下步骤:
a、为需要代理的驱动对象创建并注册对应的代理对象,以通过所述代理对象为对应的驱动对象进行代理;
b、通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件;
c、判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件:若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象并在其完成响应后转到下述步骤d;若判断结果为不适以响应,则转到下述步骤e;
d、需要功耗调低时,向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤b;不需要功耗调低时,则直接转到上述步骤b;
e、需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤c;若所述功耗调高请求发送失败,则转到上述步骤b;
其中,所述步骤e进一步包括:
e1、在对应的驱动对象响应完所述发送的功耗请求事件后,判断所述代理对象的电源管理状态是否需要向功耗更低的方向调整;
e2、若需要调整,则启动定时器;若不需要调整,则转到所述步骤b;
e3、若有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起时,则转到上述步骤c;若没有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起,则在定时器到时时向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后转到上述步骤b。
2.如权利要求1所述的电源动态管理方法,其特征在于,所述驱动对象为所述移动设备的驱动程序。
3.如权利要求2所述的电源动态管理方法,其特征在于,所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
4.如权利要求1至3中任一项所述的电源动态管理方法,其特征在于,所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
5.一种基于电源动态管理的移动设备,包括基于所述移动设备控制平台的控制单元,其特征在于,所述控制单元用以控制所述移动设备的各单元采用代理机制对所述移动设备进行电源动态管理,所述移动设备还包括:
注册单元,用以为所述移动设备需要代理的驱动对象创建并注册对应的代理对象;
监控单元,用以通过所述代理对象监控并拦截向对应的驱动对象发起的功耗请求事件;
识别单元,用以判断所述代理对象的电源管理状态是否适以响应所述功耗请求事件:若判断结果为适以响应,则将所述功耗请求事件发送至对应的驱动对象;若判断结果为不适以响应,则所述控制单元启动所述监控单元继续监控;
功耗调低单元,所述控制单元在所述识别单元将所述功耗请求事件发送至对应的驱动对象并在其完成响应后启动所述功耗调低单元,用以向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后启动所述监控单元继续监控;
功耗调高单元,所述控制单元在所述识别单元判断所述代理对象的电源管理状态不适以响应所述功耗请求事件时启动所述功耗调高单元,用以在需要功耗调高时,向对应的驱动对象发送功耗调高请求,在功耗调高请求发送成功后更改代理对象自身的电源管理状态,随后启动所述识别单元工作;若所述功耗调高请求发送失败,则启动所述监控单元工作;
其中,所述功耗调高单元进一步包括以下工作内容:
在对应的驱动对象响应完所述发送的功耗请求事件后,判断所述代理对象的电源管理状态是否需要向功耗更低的方向调整;
若需要调整,则启动定时器;若不需要调整,则启动所述监控单元工作;
若有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起时,则启动所述识别单元工作;若没有新的功耗请求事件在定时器计时过程中向对应的驱动对象发起,则在定时器到时时向对应的驱动对象发送功耗调低请求,在功耗调低请求发送成功后更改代理对象自身的电源管理状态,随后启动所述监控单元工作。
6.如权利要求5所述的移动设备,其特征在于,所述驱动对象为所述移动设备的驱动程序。
7.如权利要求6所述的移动设备,其特征在于,所述需要代理的驱动对象为所述移动设备的涉及功耗的驱动程序。
8.如权利要求5至7中任一项所述的移动设备,其特征在于,所述功耗请求事件包括读或写数据事件、控制请求事件、用户通知事件、操作系统的线程调度事件、用户的锁屏或解锁通知事件中的一种或几种。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910056190.8A CN101661325B (zh) | 2009-08-10 | 2009-08-10 | 一种移动设备的电源动态管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910056190.8A CN101661325B (zh) | 2009-08-10 | 2009-08-10 | 一种移动设备的电源动态管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101661325A CN101661325A (zh) | 2010-03-03 |
CN101661325B true CN101661325B (zh) | 2014-11-05 |
Family
ID=41789388
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910056190.8A Expired - Fee Related CN101661325B (zh) | 2009-08-10 | 2009-08-10 | 一种移动设备的电源动态管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101661325B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103064669B (zh) * | 2012-12-18 | 2017-03-08 | 希姆通信息技术(上海)有限公司 | 智能设备的定时唤醒方法及系统 |
CN104007804A (zh) * | 2013-02-21 | 2014-08-27 | 北京金山安全软件有限公司 | 移动设备的运行方法及装置 |
CN103699207A (zh) * | 2013-12-27 | 2014-04-02 | 贝壳网际(北京)安全技术有限公司 | 电子设备控制方法及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1823495A (zh) * | 2003-08-20 | 2006-08-23 | 苹果计算机公司 | 为网络上的服务实现休眠代理的方法和装置 |
CN1833214A (zh) * | 2003-05-12 | 2006-09-13 | 佳能株式会社 | 数据处理器、数据处理方法及控制程序 |
CN101154130A (zh) * | 2006-09-30 | 2008-04-02 | 联想(北京)有限公司 | 一种虚拟机系统及其电源管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7065663B2 (en) * | 2002-12-19 | 2006-06-20 | Intel Corporation | Methods and apparatus to control power state transitions |
-
2009
- 2009-08-10 CN CN200910056190.8A patent/CN101661325B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1833214A (zh) * | 2003-05-12 | 2006-09-13 | 佳能株式会社 | 数据处理器、数据处理方法及控制程序 |
CN1823495A (zh) * | 2003-08-20 | 2006-08-23 | 苹果计算机公司 | 为网络上的服务实现休眠代理的方法和装置 |
CN101154130A (zh) * | 2006-09-30 | 2008-04-02 | 联想(北京)有限公司 | 一种虚拟机系统及其电源管理方法 |
Non-Patent Citations (4)
Title |
---|
基于面向对象的面向Agent编程平台的实现;陈贞宝等;《计算机应用》;20090131;第27卷(第1期);第14页第1段至第16页最后1段,附图1-6 * |
李豫东等.面向对象的嵌入式系统电源管理模型.《计算机工程》.2009,第35卷(第9期), * |
陈贞宝等.基于面向对象的面向Agent编程平台的实现.《计算机应用》.2009,第27卷(第1期), * |
面向对象的嵌入式系统电源管理模型;李豫东等;《计算机工程》;20090531;第35卷(第9期);第35页至第37页,附图1-5 * |
Also Published As
Publication number | Publication date |
---|---|
CN101661325A (zh) | 2010-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP1591909B1 (en) | Task-oriented processing as an auxiliary to primary computing environments | |
US10761584B2 (en) | System and method to enable prediction-based power management | |
CN105205766B (zh) | 基于云平台的移动互联网医院就诊系统 | |
US6760850B1 (en) | Method and apparatus executing power on self test code to enable a wakeup device for a computer system responsive to detecting an AC power source | |
US7457928B2 (en) | Mirroring system memory in non-volatile random access memory (NVRAM) for fast power on/off cycling | |
KR100320979B1 (ko) | 이동클라이언트컴퓨터및전력관리아키텍처 | |
DE60128396T9 (de) | Computer-peripheriegerät, das betreibbar bleibt, wenn die operationen des zentralprozessors suspendiert werden | |
CN102156532B (zh) | 在维持特定的功能的同时降低消耗功率的计算机及方法 | |
KR101075421B1 (ko) | 네트워크 프로토콜 기반의 소비전력 절감형 홈게이트웨이및 그 제어 방법 | |
US20060075185A1 (en) | Method for caching data and power conservation in an information handling system | |
US7441128B2 (en) | Power-state management of peripheral device by north bridge for power management of computer system | |
CN103765409A (zh) | 有功率效率的处理器体系结构 | |
TWI283341B (en) | Structure of dynamic management device power source and its method | |
JP2005312011A (ja) | ステートマシンの改善されたパワーマネジメントを提供するシステムおよび方法 | |
US20140136829A1 (en) | Method, Network Card, and Hard Disk Card for Accessing Shut-Down Hard Disk | |
WO2013063972A1 (zh) | 一种通信方法、通信装置及电子设备 | |
US8589954B2 (en) | Method and program for selective suspension of USB network device | |
WO2014008653A1 (en) | Method for switching a device between hibernat mode and wake-up | |
CN101661325B (zh) | 一种移动设备的电源动态管理方法 | |
TW200427260A (en) | Server management method and system thereof | |
US20060026297A1 (en) | Computer system with multiple data access channels and control method thereof | |
JPH0822424A (ja) | クライアント・サーバ・システムおよびその制御方法 | |
CN102780727A (zh) | 一种物联网终端设备的动态电源管理方法 | |
JP2000035947A (ja) | システム状態情報のリモート設定方法およびコンピュータシステム | |
EP2083537B1 (en) | Data network and method of controlling thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141105 Termination date: 20160810 |