引言
普适计算、智能空间等概念前所未有地扩展了嵌入式系统的应用范围。同时也对嵌入式系统的功能、可靠性、成本、体积、功耗提出了更严格的要求。各种移动终端、可穿戴设备、消费类电子产品、传感器网络节点等典型嵌入式设备对能耗越来越敏感,电源管理技术正成为这些产品设计的关键所在。电源管理技术正由传统的基于电源管理器件和外设控制为主的静态控制方式,转到以具备智能电源管理功能的嵌入式微处理器结合操作系统为核心的智能管理软件的动静态结合的综合控制模式。
为了应对电源管理技术面临的挑战,芯片厂商推出了效率越来越高的电源管理芯片以及对能耗管理功能更加强大、精细的微处理器。以此为基础,如何设计高效、智能的系统软件对嵌入式设备进行能源管理,已成为研究热点。本文将以典型硬件的电源管理功能为基础,分析几种代表性嵌入式操作系统的电源管理实现,探讨电源管理系统软件现状及研究应用前景。
电源管理基本概念与方法
在电池供电的嵌入式系统中,一般采用高效率的电源管理芯片用于供电管理,或采用大容量的电池以解决能耗需求。但这两种技术的发展还无法满足快速增加的芯片动态功耗和静态功耗。当电路工作或逻辑状态翻转时会产生动态功耗,未发生翻转时漏电流会造成静态功耗。在供电电压Vdd下消耗的功率P如公式(1)所示:
这里C为电容,fC为开关频率,Vdd为电源电压,IQ为漏电流。C*V2dd*fC为动态功耗;VddIQ为静态功耗。随着芯片运行速度的提高和工艺尺寸的不断缩小、密度增加,其动态功耗和静态功耗也在不断增长,加剧了电源管理的复杂性。
有一种方法可以协调高性能与低功耗之间的矛盾,就是根据系统负载进行性能调节。从公式(1)中我们可以得知,对一个给定负载,动态功耗的量值与供电电压的平方成正比,与运行频率成正比。减少供电电压并同时降低处理器的时钟速度,功耗将会呈平方速度下降,代价是增加了运行时间。此外,还可以通过停止芯片模块的时钟和电源供应的办法,将能耗降至最低,代价是重新启动该模块时需要额外能耗。因此,通过有效地利用上述能耗管理方法,得到性能和功耗间的最佳平衡,达到节能最大化。
嵌入式微处理器对电源管理的支持
从8位单片机到32位高性能处理器,都在一定程度上支持电源管理功能。例如处理器支持多种电源状态,如图1所示。
系统电源状态转化
系统在运行态(Run)时,设备全部正常工作。在空闲态时,处理器按照特定的模式,进行相应的节能。在挂起状态下,处理器挂起,主存储器运行在节能的自刷新模式,只有功耗管理电路、唤醒电路继续工作。现有的单片机、ARM等32位RISC处理器一般都支持以上模式,下面分别加以介绍。
单片机的电源管理支持
在传感器网络应用中,传感器节点一般采用低廉的8/16位单片机,其电池寿命至关重要。节点工作时按功率消耗由小到大有睡眠(sleep)、空闲(idle)、接收(receive)及发送(transmit)等四种模式。大多时间内,节点都处于睡眠与空闲模式,只有少量能耗。
ATMEL采用picoPower技术的AVR微控制器显著降低了功耗。这些技术包括一个超低功耗晶振、睡眠模式下自动终止和重激活欠压检测器、能完全停止对外围设备电力供应的省电寄存器以及能够关闭特定管脚输入的数字输入中断寄存器。picoPower技术使工作电流大幅度降低,减少了断电状态下不必要的功耗,使电池使用寿命得到了延长。
ARM的电源管理技术
ARM以其优秀的低功耗技术在消费类电子等领域得到广泛应用。ARM实现了不同级别的低功耗管理技术,如表1所示。
表1 ARM不同级别的低功耗管理技术
据ARM估计,32位的Cortex-M3处理器内核以0.19mW/MHz(0.18微米)极低的功耗在特殊应用中占据优势。32位Cortex-M3设备执行任务的速度比8位设备快许多倍,所以活动模式中所用的时间更短,平均功率相应降低。其功耗如表2所示。
表2 Cortex-M3能量消耗
高端ARM处理器还支持功能更强大的电源管理功能,通过电压调节与频率调节相结合,极大地降低功耗,提高能量效率。动态电压调节(DVS)是通过对系统的负载预测,在一个开环电压控制系统中用多组能耗级别的频率、电压对来实现。自适应电压调节(AVS)用一个闭环电压控制系统来实现,它无需配对的频率、电压,能提供更优的节能效果。
例如以TI的 OMAP1610(ARM926E核)处理器为例,内部可以调节参数包括:CPU电压,DPLL频率控制,CPU频率控制,交通控制器(TC),外部设备控制器,DSP运行频率,DSP MMU频率,LCD刷新频率。通过定义操作点(Operation Points,OP)数据结构来抽象表示频率、电压等能耗级别,如表3所示。
表3 OMAP1610操作点参数
其中,192MHz-1.5V操作点参数1500表示OMAP3.2核心电压1500mV;16表示DPLL频率控制12MHz晶振输入倍频16倍;1表示分频为1;1表示OMAP3.2核心分频为1(所以它运行在192MHz);2表示TC(交通控制器)分频为2(所以它运行在96MHz);如果使用TI的DSP代码,则后四个参数为不可控,均使用默认值。
更先进电源管理功能的嵌入式微处理器还有90nm工艺的Marvel PAX300系列,提供更细颗粒的电源管理技术(称为MSPM),API和驱动程序;飞思卡尔iMX31支持DVFS(动态的电压和频率调节)和DPTC(动态的处理器温度补偿)等技术,它配合飞思卡尔MC13783和MC34704 IC管理器件,Linux驱动和策略管理代码,用户可以方便地构建一个具备优秀电源管理能力的嵌入式系统。
ARM 与国家半导体(NS)开发出了先进的能量管理解决方案,智能能量管理器(IEM)预测软件决定了处理器可以运行的最低性能级别,同时,通过智能能量控制器(IEC)的帮助、通过自适应功率控制器(APC)与外部能量管理单元(EMU)一起工作,使处理器运行在能保证应用软件正确运行的最低电压和频率下。
典型嵌入式系统能耗组成
典型嵌入式系统,例如移动终端,其能耗主要部件包括嵌入式微处理器(CPU)、内存、LCD及背光,电源转换部件,其他部件还可能包括基带处理器、DSP、外设控制器等。据统计,CPU占20%~25%,LCD以及背光占用了20%,内存占15%,电源转换占5%~10%,其他的组成占用剩余的30%~40%。典型嵌入式系统的能耗组成如图2所示。
在这些元件中,有些元件性能指标和能耗固定;有些元件可在不同时间工作,并有多种可控的耗能状态。后者的有效使用成为系统节能的关键所在。
三种典型嵌入式操作系统电源管理实现
伴随着消费电子产品的普及,电源管理已经成为重要技术指标和产品的有机组成。传感器网络的普及迫切需要一种小型化、有极高能耗管理能力的网络化小型操作系统。源于斯坦福大学的TinyOS是其中典型代表。Windows CE在嵌入式移动终端设备中得到广泛应用,其能耗管理实现与Windows CE内核架构紧密相关。Linux以其开放性和可定制等特点在嵌入式领域得到极大的发展。本文选择上述三种典型嵌入式操作系统,对其电源管理实现进行讨论与分析。
TinyOS
在无线传感器网络中,每个传感器节点都是典型的嵌入式系统,主要功耗器件有处理器、内存、带A/D的传感器和无线收发单元等。传感器由于存储容量小、运算能力弱、功耗低、易失效等特点,对嵌入式开发提出了更高要求。无线传感器网络的特点决定了降低系统功耗是系统设计的核心,决定了电源管理是传感网专用操作系统重要组成。对电源管理的支持优劣,决定了整个传感器网络系统生存周期长短。TinyOS操作系统是一个传感网专用操作系统的典型代表。它具有基于组件的特性,采用相互关联的模块进行能量管理。
- TinyOS的每个设备都可以通过StdControl.stop命令被停止。
- 负责管理外围硬件设备的组件将切换该设备到低功耗状态。
- TinyOS的HPLPowerManagement构件通过检查处理器的I/O引脚和控制寄存器状态,识别当前硬件的状态,将处理器转人相应的低功耗模式。
- 调度器会在就绪任务队列为空时,自动将处理器置于低功耗模式。但是保留外围设备的运行,以至于他们中的任何一个可以唤醒系统。
- 系统的定时器服务可以工作在大多数处理器的极低功耗的省电模式下。
Windows CE
Windows CE从4.0版本引入电源管理器(Power Manager)来提供管理电源框架。 电源管理器负责管理设备电源,提高操作系统整体能耗效率,并且与不支持电源管理功能的设备和应用兼容,在内核OAL层、设备驱动程序和应用程序之间充当中间人角色。电源管理器还严格区分系统的电源状态与设备的电源状态,让一些智能设备可管理自己的电源状态。
电源管理器结构
- Windows CE电源管理器PM.DLL直接与设备管理器Device.exe链接,并支持三个接口:
- 驱动程序接口:被需要进行电源管理的设备的驱动程序使用。
- 应用程序接口:被需要利用电源管理的应用程序使用。
- 提醒接口(Notification):被需要接受电源事件提醒的应用程序使用。
电源管理器直接或间接地与应用程序和驱动程序交互。电源管理器与驱动程序主要通过驱动程序接口进行交互,与应用程序通过API和提醒接口进行交互,如图3所示。
- 系统电源状态
Windows CE系统电源状态的改变可以作为一个OEM事件,或者通过OEM的应用程序和工具调用SetPowerState()函数产生。Windows CE支持以下几种电源状态:(1)ON状态,用户在主动使用设备。(2)UserIdle状态,用户与设备停止交互,但仍有可能使用设备。(3)SystemIdle状态,在经过一段时间的UserIdle后进入此状态,但是驱动和系统仍然活动。(4)Suspend状态,当驱动程序和系统进程不再与系统交互时进入此状态。(5)ColdReboot和Reboot状态,冷启动后系统电源状态。
- 设备电源管理
Windows CE设备电源状态管理和系统相分离。驱动程序需要实现:(1)响应电源管理器的请求,报告它的电源能力。(2)处理电源管理器发送的电源请求。(3)启动后给设备加电。(4)关闭时给设备停止供电。(5)如果它可以唤醒系统,则为设备启用唤醒功能。设备还可以通过调用RegisterPower Relationship()函数告诉电源管理器它为独立的子设备驱动处理电源请求。例如总线设备驱动或某些设备驱动代理。
电源管理器和支持电源管理的设备之间的交互包括两种机制:(1)电源管理器到驱动程序,电源管理器使用DeviceIoControl()函数向设备驱动程序发送I/O控制(IOCTLs)。设备必须能响应管理器的电源管理能力查询、状态设置等IOCTLs。(2)驱动程序到电源管理器,驱动程序使用DevicePower Notify()函数与电源管理器交互,请求电源管理器把它的设备置于某种状态。如果电源管理器接受该请求则通过发送IOCTL_POWER_SET等IOCTLS来进行设置。
- 应用程序与电源管理器交互
Windows CE应用程序与电源管理有两种交互机制:(1)应用程序接口,用以获取当前系统和设备的电源状态;(2)电源事件提醒接口,提供电源事件的提醒。应用程序接口中,GetSystemPowerState()函数用来返回当前系统电源状态。SetSystemPowerState()函数可被OEM程序或者其他应用程序调用,来把系统电源状态设置为需要值。SetDevicePower()用来设置设备电源状态。为了实现提醒接口,应用程序还得通过CreateMsgqueue()函数建立消息队列,将其句柄传给电源管理器。而后电源管理器把提醒发送到消息队列中,调用者可选择可用提醒的一个子集进行响应。
- OAL层实现
在Windows CE中,在OAL层,电源管理需要实现OEMIdle()和OEMPowerOff()函数。当系统中没有任何可调度的线程时,操作系统调用OEMIdle()函数,可以在其中实现降低处理器的频率以达到省电的目的。当有外部中断时,CPU可从其中恢复。OEMPowerOff函数基于硬件平台实现,进行CPU寄存器保存、设置及唤醒恢复等功能。
嵌入式Linux
嵌入式Linux电源管理结构
Linux标准内核标准电源管理有ACPI、APM等机制。这些机制依赖于PC机的BIOS功能实现。嵌入式系统一般都没有实现BIOS支持,对其能耗管理机制需要进行其他定义。消费类电子产品联盟—CELF对能耗管理作了定义,其框架如图4所示。
图4 CELF电源管理规范
CELF的能耗管理框架分为内核层和用户层。内核层又划分为体系结构无关层和体系结构相关层。体系结构相关层主要提供可管理硬件支持,例如处理器电压和运行频率调节,各种总线运行频率管理,设备的关断管理等。内核体系结构无关层在体系结构相关层的基础上为用户层提供APIs,进行各种能耗管理功能的支持。它包含一个能耗管理(PM)引擎,根据系统任务负载选择系统运行状态;提供能耗管理的挂起和恢复方法;提供VST技术,通过估计下次准确唤醒时间来确保在进入深度睡眠时,不被原来固定时间产生的定时器中断唤醒;还包含了各种外部设备关闭/开启的操作逻辑。
用户通过编制具有一定智能的管理策略驻留程序,利用系统提供的能耗管理机制,进行有效的系统能耗管理。
此外,在某些实现中,也可以将ACPI中的BIOS调用进行映射,在内核用软件实现回调函数,用以支持没有BIOS的电源管理。
嵌入式Linux内核电源管理实现分析
2.6内核提供了一个电源管理框架,在其基础之上容易实现各种电源管理规范,例如ACPI和APM规范。2.6内核中的设备驱动模型(Linux Driver Model,LDM)是内核对电源管理基础支持。Kobject基本结构嵌入到描述设备模型的组件的bus、devices、 drivers结构中。这些容器就是通过kobject连接起来形成树状结构。每个对象的属性(attribute)以文件形式输出到kobject对应的sysfs目录下。通过这种文件系统接口,可以对平台进行有效的电源管理。
就嵌入式系统而言,电源管理可以分为静态电源管理,动态电源管理,设备电源管理等三个方面。
静态电源管理
Linux内核支持ON, Standby, Suspend, 和Hibernate四种电源状态。Standby指“带电挂起”,通过将CPU置于halt状态,将设备置于D1状态来达到节能的目的(ACPI规范中按能耗从高到低分D0~D3)。节能效果不明显,但是响应延迟最小。Suspend就是挂起到RAM。在该状态下,所有设备被置于D3状态,整个系统,除主存处于节电的自刷新模式(self-refresh)外,全部关闭电源。响应延迟比Standby大。Hibernate 是通过将系统状态保存到非易挥发性存储中(通常是磁盘),关闭整个系统的电源。延迟时间最长,但比一次完整启动来得短。通常情况下嵌入式设备都没有支持这种方式。
通过sysfs文件系统接口触发系统级电源状态转化。转换管理是通过注册好的驱动来进行。例如,prepare函数确认系统能够进入所请求的状态,并且进行相应的准备工作。例如通过禁止抢占和“冷冻”所有进程来准备进入所请求的电源状态。Save函数枚举所有注册有电源管理能力的设备,保存系统和处理器的低层状态。接着PM核心禁止了中断,关闭外部设备电源,调用Sleep函数根据挂起级别进入睡眠状态。在嵌入式设备挂起过程中可以通过写入某些特殊的非易失性处理器寄存器来记录挂起的原因和挂起时的代码执行地址。系统上电后引导程序先执行,从特殊寄存器中判断系统是否从深度睡眠(Hibernation)中恢复。如果是,则负责从非易挥发性存储介质中恢复所有的硬件上下文。如果不是,系统负责从sleep()函数处返回。给所有设备上电,恢复中断。Restore函数被用来恢复系统的低层调用,恢复设备上下文。Cleanup函数从sleep状态恢复必须进行的清尾工作,例如抢占重新被允许,系统恢复正常执行。当一次完整的转换完成后,CPU执行权还给之前执行的进程。
- 动态电源管理
(1)动态电源管理原理
如图5所示,系统无任务时进入空闲,可被中断唤醒,处理完后重新进入空闲或者回到任务态。如果系统被挂起到RAM中,进入深度睡眠。可以关闭除了中断控制器和唤醒源之外的所有设备,实现最大限度地省电。根据运行时不同的任务负载,系统应该有对应的不同电源级别。如图示中的任务、任务-、任务+等代表电源需求的状态。在完成任务的同时,进行最大化的节能。
图5 操作状态间的转换
(2)动态电源管理设计
在Linux架构下实现动态电源管理,需要(1)用户层的管理策略;(2)内核模块需要为应用层提供的接口;(3)硬件无关的通用电源管理逻辑控制框架;(4)管理特定硬件的平台相关电源控制层。
用户层策略通过sysfs文件系统接口(或proc文件系统接口)以及系统调用接口(APIs)来进行电源管理。内核硬件无关层提供电源管理逻辑控制,针对任务负载情况选择反映当前任务电源状态的电源操作点(相关可控的硬件参数)。内核硬件相关层主要对应系统的各种总线和设备时钟电源参数管理,并管理多种设备的参数约束。
- 设备驱动电源管理
在某些设备闲置时可以被主动关闭,从而节电。在2.6内核中需要实现总线以及设备的电源管理支持,在驱动中需要实现设备驱动的suspend/resume函数。
关闭一个设备,其驱动的suspend方法需要两个不同的调用,一个用来保存状,另外一个用来关闭设备电源。相反,resume方法需要一个调用用来给设备供电,另一个调用来恢复设备的状态。在关闭一个总线设备时必须关闭所有的下一级子设备。相反地,重新使能总线设备时,必须先使能根设备,然后再使能子设备。
- 用户层电源管理策略
嵌入式系统如何做到有效的平台级能耗管理需要在内核提供的机制上实现一个智能化的管理软件,监控系统电源状态,处理相应电源事件,执行针对特定应用制定的管理策略。现有的Linux ACPI和APM的后台驻留进程,可以供嵌入式系统实现参考。商业的嵌入式linux 公司MontaVista 在其Moblinux 4.0以后的版本也提供一个用户态的电源管理策略和界面。
嵌入式操作系统电源管理实现比较
嵌入式操作系统的电源管理功能实现结构中,主要可以分为核心层、接口层、应用策略管理层。核心层需要提供一个体系结构无关的电源管理框架,感知系统负载,进行系统电源状态管理。核心层还需要一个体系结构相关层,提供硬件相关的电源状态管理,例如进行电压/频率调节及相应的约束管理。核心层还需要提供一个用户编程接口,用户层通过编程来利用系统提供的电源管理机制。并且根据不同的应用需求编制智能化的管理策略。
在电源管理功能上大致可以分为(1)系统级电源管理,(2)动态电源管理,(3)设备电源管理等三类。操作系统检查任务负载情况,如果没有需要运行的任务,则一般进入空闲等节能状态,等待唤醒。可以在空闲一段时间后进入深度睡眠,挂起到RAM中或者硬盘上。在运行任务期间,操作系统还可以利用硬件提供的电源管理功能动态调节芯片运行电压和频率,对系统进行更加细致的电源管理。操作系统还应该能够管理闲置的设备,关闭设备并提供恢复手段。
上面我们分析的三种典型的嵌入式操作系统在电源管理方面是各有特色;TinyOS 简练小巧有基本的内核态和系统级的电源管理功能,但是相对比较简单;WindowsCE电源管理模块结构清楚,特别有提供了应用程序的接口,但是到目前看到的为止Windows CE/Mobile 开放给用户的电源管理功能还待提升;Linux 是开源代码,具有丰富的硬件电源管理支持,策略和动态的电源管理功能,但是相当实现的零散和分散,应用软件的接口不清晰和标准,需要用户作的工作比较多。
总结和展望
消费类电子如近年流行的智能手机、GPS、移动电视都迫切需要高效的电源管理,传感网节点需要电源管理,以便大规模部署,全球变暖等国际性的问题也对电子产业节能和环保提出了更高的要求。现有的能源管理技术中还有许多问题有待于研究和解决,例如,(1)设计更加节能的芯片,减少系统的静态功耗,半导*造工艺的改进,在芯片级别进行更好性能监测,通过设计优良的负载预测算法,在系统运行中对能耗级别进行更加精细调节。(2)在系统软件的设计上需要规范定义一个适合应用体系的框架结构,比如Intel 发起的PPM(Power police mangment) 和APM(application power management)就是一个基于Linux 的开源项目,它推动着一个系统级和应用相关的电源管理软件系统。(3)在网络化的系统中,如何进行网络化能耗管理,在通讯过程中达到能耗最小化,例如研究能耗感知的路由算法,选择一个最节能路径,避免不必要的唤醒与睡眠。(4)电源管理的QoS,一个旨在更好的管理硬件系统,以达到性能和功耗平衡的系统。比如CPU的空闲管理,能耗高的Wi-Fi和其他网络设备管理等。(5)电源管理的测试和分析工具。总之,电源管理技术是一个结合微电子、集成电路、嵌入式系统和软件的综合学科,是一个正在快速发展的研究课题。它对电子产品的设计具有关键性影响,一个电源管理设计的好产品可以帮助产品在市场竞争中脱颖而出,克敌制胜。