非易失处理器备份容量设定、内存备份方法及系统与流程

文档序号:12665133阅读:203来源:国知局
非易失处理器备份容量设定、内存备份方法及系统与流程
本发明涉及嵌入式系统(EmbeddedSystem)领域,尤其涉及非易失处理器备份容量设定、内存备份方法及系统。
背景技术
:物联网系统(cyberphysicalsystems,简称CPS)作为计算进程和物理进程的统一体,是集成计算、通信与控制于一体的智能系统。像医疗网络物理系统(MCPS)作为CPS的一个类别,它涉及到传感器,嵌入式软件和网络能力等,而且需要开发可穿戴技术。可穿戴技术使得像血压、体温等测量仪器可方便携带,使用户能够及时监测自己的健康状态。人们希望可穿戴设备设计得体积和重量都很小,以方便随身携带。在可穿戴设备中,电池不再是具有优势的供电方式,因为电池往往存在体积大、重量大、安全健康危险、需频繁充电等缺点,因此,研究人员现在正积极寻求一些替代能源。在所有可能的解决方案中,能量采集(自供能)是满足可穿戴设备的尺寸和功率要求的最有前途的技术之一。能量采集器是周围的环境中获得能量,比如动能、电磁辐射(包括光和RF)、热能等,并通过使用一些能量转换技术实现对设备的电容进行充电,再对电子设备进行供电。这些能够利用外界条件实现自己给自己充电的嵌入式系统,称为自供能系统;这类嵌入式设备,称为自供能设备(仪器)。由于自供能系统特殊的供电方式,导致他们都有一个固有的缺点,就是能量的不稳定性。因为能量不稳定就会使得整个系统会频繁中断,从而导致性能严重下降。可能存在的最坏的情况就是系统中的大型任务永远不会完成。由于目前处理器中存储单元均为易失性存储,断电后存储内容会丢失,因此每次掉电后任务都需要重新从头开始执行。非易失存储器(non-volatilememory,简称NVM)是指当电源关掉后,所存储的数据不会消失的计算机存储器,所以基于NVM的非易失处理器(non-volatileprocessors,简称NVP),就能解决自供能系统中每次掉电任务需重新从头开始运行的问题。如图1所示,当每次发生掉电时,处理器中的内容,都将保存到NVM中做好备份,当下次供电恢复时,再从NVM中将备份内容拷贝到处理器中,恢复程序之前的状态,然后接着继续执行下去。NVP系统的一般系统架构如图2所示,从周围的环境中采集的能量为整个系统供电。在NVP系统中同样有专门存储能量的单元如电容器,当电源不足时,利用电容器中的剩余能量将处理器中的需保存的内容备份到非易失性存储器中。那么,在非易失处理器的设计中,需要给处理器配备多大的NVM用于备份是一个重要问题。需要备份的内容主要包括寄存器的内容和片上存储器的内容两大部分。一方面,嵌入式系统通常具有少量寄存器,其值在程序执行期间被频繁修改。因此,对于寄存器组,在断电发生时可以全部备份。另一方面,片上存储器比寄存器大得多,如果断电前片上存储器中的内容全部备份,其所需要的性能和能耗开销会很大,同时,保证所有易失逻辑都可以成功备份的安全设计是为处理器添加一块与片上存储同样大小的NVM,这会导致可穿戴嵌入式设备体积和重量的明显增长。因此,减小用于片上存储备份的NVM的容量是提高可穿戴设备便携性及性能能效的有效方式。技术实现要素:本发明的目的就是为了解决上述问题,提供非易失处理器备份容量设定、内存备份方法及系统,对于功能特定的嵌入式设备,为了达到保证非易失处理器总能够成功备份的目的,其用于备份所需的最小NVM容量,以及在该NVM配置下的数据备份方案。为了探讨备份片上存储所需NVM的大小,我们需要分析片上存储里需要备份的数据大小情况,其中栈空间是片上存储的重要组成部分,且栈空间大小随程序的执行有明显的变化规律。因此,对于非易失处理器片上存储的备份,对于栈空间以外的内存数据我们采用全部备份的方式,而对于栈空间部分,我们根据其动态大小规律去确定栈空间可以成功备份所需要的NVM大小及其备份方案。为了实现上述目的,本发明采用如下技术方案:非易失处理器备份容量设定、内存备份方法,包括如下步骤:步骤(1):将原二进制程序反汇编成反汇编程序,依据反汇编程序中指令的先后关系建立程序控制流程图CFG;CFG是controlflowgraph的缩写;步骤(2):依据控制流程图CFG建立整个程序的拓扑序列表Seq,依据拓扑序列表Seq的拓扑顺序对每一条指令进行栈版本分析;输出存储整个程序的栈版本表SL和每条指令的栈的版本集合SVS;步骤(3):建立剩余能量分配模型;依据剩余能量分配模型进行可行备份点选择;步骤(4):设计栈备份所需的非易失存储器NVM空间;步骤(5):利用启发式算法来确定备份标签的位置:备份标签的作用是为了接收到能量警告信号后,先让程序继续执行,直到遇到标签再触发备份操作;所述步骤(1)中:将反汇编程序分为四大类:无条件跳转指令、条件跳转指令、函数调用指令和顺序执行指令;依据每条指令的实现功能,建立每条指令的入边集合和出边集合,所述入边集合包括当前指令的所有前一条指令的集合;当前指令的前一条指令有一种或多种;所述出边集合包括当前指令的所有后一条指令的集合;当前指令的后一条指令有一种或多种。控制流程图CFG是个有向图,控制流程图中每一个点就是一条指令,依据每条指令的前继和后继关系,用箭头表示指令之间的先后依赖关系,然后构建出整个程序的CFG。所述步骤(2)中:步骤(21):假设SVS表示每条指令的栈的版本集合,SL表示存储整个程序的栈版本表,lp表示循环次数,先进行变量初始化;步骤(22):根据指令是否对栈的存储空间大小产生影响,将指令分为stack-affected指令和stack-unaffected指令;stack-affected指令指的是指令执行将影响栈大小的指令;stack-unaffected指令指的是指令执行但不会影响栈大小的指令;步骤(23):依据控制流程图CFG建立整个程序的拓扑序列表Seq;拓扑序列表就是依据CFG中指令的先后依赖关系建立的一张序列表;在建立拓扑序列表的过程中,不考虑循环回跳边;步骤(24):依据拓扑序列表Seq的拓扑顺序对每一条指令进行分析;若当前指令是stack-unaffected指令,则当前指令直接继承前一条指令的栈的版本集合SVS;若当前指令是stack-affected指令,进一步分析当前指令的执行对栈的影响且是否会产生新版本的栈,若产生则对存储整个程序的栈版本表SL和当前指令的栈的版本集合SVS做相应的修改;若未产生则进入步骤(25);步骤(25):重复步骤(24),执行lp次,结束;步骤(26):最后输出存储整个程序的栈版本表SL和每条指令的栈的版本集合SVS。所述步骤(3)中:步骤(31):建立剩余能量分配模型;首先剩余的可用能量既要满足后续的程序执行,又要满足栈的备份;位置p是一个可行的备份位置,则剩余的可用能量要能够支持程序执行到p并且备份p的栈中的所有内容:aveEne≥Ene(Ins)+Ene(backup)(1)其中,aveEne表示剩余的可用能量,Ene(Ins)表示执行指令消耗能量,Ene(backup)表示备份操作消耗能量。步骤(32):计算执行指令消耗能量;根据与处理器对应的指令集和每个指令执行过程中消耗的能量计算指令执行消耗能量Ene(Ins),执行指令消耗能量Ene(Ins)包含所有类型指令执行所消耗的能量;步骤(33):计算备份操作消耗能量;根据不同的NVM备份过程中能量消耗情况,以及要备份的内容备份过程中消耗的能量与要备份的内容所占据的存储空间成比例,计算备份操作消耗能量Ene(backup);步骤(34):备份位置选择;依据剩余能量分配模型,为每一条指令计算出对应的可行备份点集合,其中需备份的栈最小的备份点是最理想的备份位置。所述步骤(34)包括如下步骤:步骤(341):列出每个指令ci的j条可能路径pij;可能路径是在任何一条指令ci的位置,发生能量警告时,在剩余可用能量范围内,指令可能经过的所有路径;步骤(342):利用步骤(26)得到的每条指令的栈版本集合SVS,取相应的栈版本集合SVS中栈存储空间最大的栈版本对应的栈的存储空间作为指令ci所需的栈大小s(ci),确定每条指令备份所需预留的能耗Ene(backup);步骤(343):依据剩余能量分配模型,针对每一条可能路径pij判断该路径上的每个指令ci是否是可行备份点;若是,就保存在可行备份点数据库中,若否则返回步骤(342)继续判断。所述步骤(4)中:步骤(41):从步骤(342)获取指令ci所需的栈大小s(ci);步骤(42):在剩余的可用能量范围内,从每一条指令开始的可能路径包括一条或多条。针对每条指令ci的每一条可能的路径pij,取可能路径pij的可行备份点的指令所需备份的栈存储空间的最小值作为每条路径的所需备份的栈存储空间RS(pij);然后取RS(pij)的最大值作为该指令所需备份的栈存储空间RS(ci);步骤(43):取所有指令的所需备份的栈存储空间RS(ci)的最大值作为栈备份所需的NVM的存储空间大小stk。所述步骤(5)利用启发式算法来确定备份标签的位置,算法步骤如下:步骤(51):从步骤(43)获取栈备份所需的NVM的存储空间大小stk;avaEne表示剩余的可用能量;s(ci)表示每条指令的栈存储空间,SET表示是备份标签集合;步骤(52):初始化备份标签集合SET,只要满足s(ci)≤stk,就将ci加入SET中,即所有栈的存储空间小于等于栈备份所需的NVM的存储空间大小的指令都加入标签集合;步骤(53):将备份标签集合SET中的标签指令按入边和出边的数目的加和从小到大排列;步骤(54):接下来循环检测每一个标签指令ci的是否可以删除,必须满足所有指令在去掉这个标签的前提下都可以成功备份,若可以,就将ci从集合SET中删除;若不可以就保留。所述栈空间状态包括栈存储空间大小和内容;所述步骤(2):依据建立的CFG,对反汇编程序运行过程中所有指令对应的栈空间状态进行静态分析;然后基于CFG的指令的入边和出边信息得到栈版本;每条指令执行后的所有的栈版本组成栈版本集合;每条指令对应多个栈版本,不同执行情况下每条指令的所占用的栈存储空间大小不同;所占用的栈存储空间的最大值为该指令对应的栈备份所需的NVM存储空间容量。步骤(5)备份标签的位置选择要满足:501)对于每条指令,每一条可能的路径应包含至少一个可行的备份位置;502)所有选定的备份位置,要备份的栈大小要小于等于系统的栈大小;503)应尽量最小化所选的备份标签的位置。如指令a->b,在控制流程图CFG中需要画一条有向边指令a指向指令b。例如:程序中,执行完指令a后执行指令b,那么在控制流程图CFG中,a是b的入边,b是a的出边;比如指令a,b,在去环后的CFG中的关系是a->b,那么在拓扑序列表中,指令a一定在b的前面;栈的版本:包括栈存储空间大小和栈内容;如果栈存储空间大小相同,内容不同也属于不同的版本;SL:存放程序中可能出现的所有的栈版本;SVS:存放每一条指令可能出现的栈版本,是SL的子集;可行备份点:在任何一条指令Ci处发生能量警告时的可能路径上,能够成功备份的所有的点,都是可行备份点。非易失处理器备份容量设定、内存备份系统,包括:控制流程图建立单元:将原二进制程序反汇编成反汇编程序,依据反汇编程序中指令的先后关系建立程序控制流程图CFG;CFG是controlflowgraph的缩写;控制流程图建立单元:将原二进制程序反汇编成反汇编程序,依据反汇编程序中指令的先后关系建立程序控制流程图CFG;CFG是controlflowgraph的缩写;栈版本分析单元:依据控制流程图CFG建立整个程序的拓扑序列表Seq,依据拓扑序列表Seq的拓扑顺序对每一条指令进行栈版本分析;输出存储整个程序的栈版本表SL和每条指令的栈的版本集合SVS;可行备份点选择单元:建立剩余能量分配模型;依据剩余能量分配模型进行可行备份点选择;非易失处理器备份容量设定单元:设计栈备份所需的非易失存储器NVM空间;备份标签筛选单元:利用启发式算法来确定备份标签的位置:备份标签的作用是为了接收到能量警告信号后,先让程序继续执行,直到遇到标签再触发备份操作。本发明的有益效果:1通过对程序中栈的动态变化分析,减小了自供能系统中栈备份所需的NVM空间大小;2减少了自供能系统中备份的能量开销;3提高了自供能系统中能量的利用率;4提高了程序的执行效率。附图说明图1为易失性处理器和非易失性处理器工作原理示意图;图2为NVP系统的一般系统架构;图3(a)为示例程序;图3(b)为示例程序运行中栈的使用情况;图4为非易失处理器备份容量设定、内存备份系统技术方案流程图;图5(a)为反汇编示例程序;图5(b)为反汇编示例程序对应建立的CFG。具体实施方式下面结合附图与实施例对本发明作进一步说明。图3(a)和图3(b)展示了一个栈空间大小随程序执行动态变化的例子,其中图3(a)是示例程序,图3(b)是程序运行中栈的使用情况。程序运行中每发生一次函数调用,栈空间就会增加一个帧用于保存返回地址及局部变量。假设系统在时间t1处接收到能量报警信号,若采用传统的备份方法,立即备份,即在收到断电警告信号后立即备份,则需要将t1时处理器的状态备份到NVM中,NVM用于备份栈的大小为4帧;若不采用立即备份的方法,剩余的能量可以支撑运行到t2且可以完成备份(因为NVM备份一个字节的能耗往往远大于处理器执行一条指令的能耗),此时NVM用于备份的栈的大小为1帧,与立即备份的方法相比减少了75%。所以我们希望在接受到能量报警信号后,先不立即进行备份,可以继续执行一段时间,并找到更好的和可靠的备份位置,使得备份的栈内容更少,从而使得备份栈内容所需的NVM容量更小。因此,对于一个特定程序,在断电信号随时可能发生的情况下,我们需要通过分析确定能够确保备份成功的前提下所需要的最小NVM容量,以及该配置下的备份方案。本发明的主要思想是通过静态分析程序,得到系统NVM用于栈备份的空间大小,并在程序中插入合适的备份标签作为备份信号,在运行时,一旦接收到能量警告,程序可以继续执行,直到遇到标签就执行备份操作。下面介绍一下我们提出的非易失处理器中基于栈空间感知的NVM及备份方案设计,方案流程图如下图,图4所示。1,建立CFG为了建立某个程序的CFG,需要知道每条指令的入边集合和出边集合。根据指令对入边集合和出边集合的影响,可分为四大类,包括跳转指令、条件跳转指令、函数调用指令、一般指令,然后,依据每条指令的具体含义,建立每条指令的入边集合和出边集合,完成整个程序的CFG。2,栈版本管理依据建立的CFG,静态分析程序运行过程中所有可能的栈空间状态(包括栈空间大小和内容),然后对每条指令标记出在该条指令执行之后所有可能的栈版本。由于程序执行路径的多样性,通常每条指令对应多个可能的栈版本,也就意味着不同执行情况下某指令对应的栈空间大小是不同的,其中所占栈空间最大值即为该指令对应的栈空间大小,即若该指令执行结束时发生断电,栈备份所需的NVM大小。因此,我们需要分析每条指令所对应的栈版本集合,这可以通过分析指令执行对栈的影响情况来进行。根据指令是否对栈的大小产生影响可分为两大类,stack-affected指令和stack-unaffected指令。stack-affected指令指的是指令执行将影响栈大小改变的指令,例如push,pop,call,return等。stack-unaffected指令指的是指令执行但不会影响栈大小的指令,例如mov,add,jnc,jmp等。此分类有助于基于CFG派生的指令的入边和出边信息分析栈版本。不同的栈状态版本通过栈大小和栈内容的信息来区分,只要大小或内容不同的栈状态就属于不同的版本。带有循环的栈版本分析是很复杂的,因为理论上由于循环次数的不确定性会有产生无限多种栈版本。为了实现对循环CFG的静态分析,我们采用WCET分析工作中的解决方案,即设置程序中循环的次数上限。本发明所采用的技术方案如下:栈版本分析的方法包括如下步骤:1)SVS表示每条指令的栈的版本集合,SL表示存储整个程序的栈版本表,lp表示程序的循环次数,先进行变量初始化;2)依据CFG建立整个程序的拓扑序列表,Seq;3)依据拓扑顺序对每一条指令进行分析。若指令i是stack-unaffected指令,直接继承前继指令的栈的类型集合SVS;否则需进一步分析该指令的执行对栈的影响且是否会产生新类型的栈类型,并对SL,该指令的SVS做相应的修改。4)重复上述步骤3),执行lp次,结束。栈类型分析算法的执行过程如下:3,可行备份点选择理论上,在程序执行期间,备份操作可以在程序的任何一条指令发生。思考因能量不足发出警告时,若不立即进行备份,如何在剩余的可用能量范围内找到合适的备份位置?首先剩余的可用能量要至少满足后续的程序执行和栈备份。例如,位置p是一个可行的备份位置,则剩余的可用能量要能够支持程序执行到p并且备份p的栈中的所有内容。即,aveEne>=Ene(Ins)+Ene(backup)(1)其中,aveEne表示剩余的可用能量,Ene(Ins)表示执行指令的消耗的能量,Ene(backup)表示备份操作消耗的能量。如果运行到某条指令时因能量不足发出警告,应该检查所有可能的后续执行路径寻找可行的备份位置。因剩余的可用能量有限,所以要检查的所有可能的后续执行路径也是有限的。为了准确地估计Ene(Ins),应根据应用的指令集建立指令执行的能量模型,包含所有类型指令执行所消耗的能量。由于备份操作实质上是写入外部NVM,所以Ene(backup)的能量模型取决于具体的NVM技术且与要备份的内容大小成比例。有了Ene(Ins)和Ene(backup)的能量模型,就可以为每一条指令计算出对应的可行备份点集合,其中需备份的栈最小的备份点是最理想的备份位置。如图5(a)和图5(b)所示的反汇编程序和相应的CFG,根据2确定栈类型的方法,设置循环次数为2,可以得到每条指令的需备份的栈大小,如下表表1所示。表1指令c1c2c3c4c5c6栈Size012211在本实例中,假设剩余的可用能量(仅用于指令执行和备份的能量)为2.2单元,备份1位消耗的能量为1单元,执行一条指令消耗的能量为0.2单元。根据不等于(1),对于每个可能的路径,可以计算出可行的备份点,结果如下表表2所示。以指令c1为例,设循环边界为2,存在三条可能的路径:c1→c6(p11),c1→c2→c3→c4→c5→c6(p12),c1→c2→c3→c4→c2→c3→c4→c5→c6(p13)。如果在指令c1处因能量不足发出警告,剩余的2.2单元的能量仅用于指令执行和备份使用。在路径p11中,c1是一个可行的备份点,执行c1消耗0.2单元的能量,备份消耗能量为0(参考表1),同理c6也是一个可行的备份点。在路径p12中,c3是一个不可行的备份点,因为执行到c3已消耗0.6单元的能量,还需2单元能量备份,此时只剩1.6单元能量,不够用于备份使用,所以c3不是一个可行的备份点。同理以类似的方法可以获得其他可行的备份点。本实例中所有可行的备份点已在表2中用灰色标记出来了。表2备注:pij表示指令ci的第j条路径;s(ci)表示指令ci备份所需的栈大小;RS(pij)表示路径pij中备份所需的栈大小;RS(ci)表示指令ci最终的备份所需的栈大小。4,栈备份所需的NVM空间设计在确定所有可行的备份位置之后,要决定在能够确保栈空间成功备份前提下所需要NVM的最小容量。能够保证成功备份的前提条件是每一条路径具有至少一个可行的备份点。基于3中例子解释一下系统栈设计的思想。对指令c1,在路径p11中,备份所需的栈大小为取可行的备份点c1和c6的栈的最小值,为0,同理,可求路径p12,p13的结果。然后,指令c1最终NVM备份的栈大小要取c1每条路径中栈的最大值,即max{p1,p2,p3}=0,同理分析其他的指令。而系统栈大小设计要满足所有指令能够成功备份,所以要取所有指令最终栈备份大小的最大值,如表2最后一栏所计算的结果。5,插入备份标签备份标签的作用是为了系统接收到能量警告信号后,先让程序继续执行,直到遇到标签再触发备份操作。理论上,所有可行的备份位置都插入备份标签,但是,这将在代码方面带来很大的开销。因此,我们想在能保证成功备份的前提下,想办法减少备份点数目,最终在真正的备份点处插入备份标签。那么备份标签的位置选择要满足:1)对于每条指令,每一条可能的路径应包含至少一个可行的备份位置。2)所有选定的备份位置,要备份的栈大小要小于等于系统的栈大小。3)应尽量最小化所选的备份标签的位置。为了找到最佳解决方案,我们建立ILP公式来导出备份标签的位置。目标为:其中,Xi表示指令i是否被标记为备份标签的二进制变量,n表示整个程序的指令数目。如表1所示,可以为每个指令导出一组可行路径。真正运行时无论走那条路径,路径上都至少有一个可行的备份位置。即,∑X(Pijm)≥1(3)其中Pijm表示指令i的第j条可能的路径上第m个可行的备份位置。如上述实例中的指令c1,有:X1+X6≥1(forp11)X1+X2+X5+X6≥1(forp12)X1+X2≥1(forp13)这意味着,对于任一条指令,都必须保证每条可能路径上至少包含一个可行备份位置。由于ILP求解算法通常非常耗时,又因所有可能的路径数量也是非常多的,所有设计了启发式算法来确定备份标签的位置,算法步骤如下:1)设置变量stk表示系统栈大小;avaEne表示剩余的可用能量;s(ci)表示每条指令的栈大小;2)初始化备份标签集合SET,只要满足s(ci)<=stk,就将ci加入SET中,即所有栈的大小小于等于系统栈大小的指令都加入标签集合;3)将备份标签集合SET中的标签指令按入边和出边的数目从小到大排列;4)接下来循环检测每一个标签指令ci的是否可以删除,若某标签可以删除,则必须满足所有指令在去掉这个标签的前提下都可以成功备份,若可以,就将ci从SET删除;5)结束返回最终的备份标签集合。确定备份标签位置的启发式算法的执行过程如下:下面基于3中的例子,进一步解释一下该启发式算法的思想。SET初始为{c1,c2,c5,c6},进行排序后的顺序是c2,c1,c5,c6。在示例中,剩余可用能量为2.2,系统栈大小为1,首先检查c2备份标签能否被删除,若在c2出发生能量警告,假设删除c2,查看所有的路径,在p22中,运行到c6,执行指令所消耗的能量为1.4单元,还需1单元能量用于备份,但此时剩余0.8单元能量,不够用于备份的,所以c2备份标签是不能删除的。同理,检查其他的备份标签,最终结果,c1标签可以删除,SET={c2,c5,c6}。上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1