使用超级状态存储加快嵌入式软件启动过程的方法技术

技术编号:9738610 阅读:199 留言:0更新日期:2014-03-06 13:48
本发明专利技术涉及嵌入式软件技术领域,尤其涉及一种使用超级状态存储加快嵌入式软件启动过程的方法。本发明专利技术通过在静态内存区划出一块区域作为动态分配内存,并修改程序中的动态分配函数和释放内存函数至定制版本,使得动态分配和释放内存动作在该区域中进行,程序启动时产生的动态数据和静态数据都会存到静态内存区,然后将启动完成时静态内存中的数据都以状态文件形式存到外部存储器中,在程序再启动时可直接调用状态文件,恢复到静态内存区,一步完成启动。通过这种方法,可大大提高程序启动速度。

【技术实现步骤摘要】
使用超级状态存储加快嵌入式软件启动过程的方法
本专利技术涉及嵌入式软件
,尤其涉及一种使用超级状态存储加快嵌入式软件启动过程的方法。
技术介绍
在某些场合下,对于嵌入式设备的启动时间有很高的要求。这里所说的启动时间,是指从装置上电到功能可以正常工作的状态所需要的时间。例如,用于监控、保护的设备在因故障重启后,要求尽快进入工作状态。嵌入式设备的启动过程大致可分为硬件初始化、操作系统启动和业务软件启动三个步骤。一般来说,硬件初始化和操作系统启动耗费时间很短(一般在1秒内),业务软件启动的时间很大程度上决定了整个嵌入式系统的启动时间。目前,加快嵌入式软件启动的手段主要有:1)改进硬件性能通过使用性能更好的硬件来提高整体的速度,软件启动的时间也会相应缩短。例如:使用更快的处理器,存取更快的存储芯片或者更大的RAM等。这种方式一般都能奏效,但是会显著增加嵌入式设备的硬件成本,而且硬件性能的提升和最终启动时间的缩短是线性关系的,很难实现大幅度的提升。2)裁剪软件功能根据具体使用的情况对嵌入式软件进行裁剪,只保留必要的部分。在嵌入式软件功能比较复杂,而在各种应用场合下都只是使用其中一个部分的情况下,通过量身定制的裁剪,可以节省掉未使用功能的启动时间而提升软件启动的速度。这种方法的局限在于,如果软件的大部分功能都是不可裁剪的则不使用。另一方面,大量量身定制的裁剪会给软件或配置文件版本维护带来很大的困难。3)保存中间数据有些嵌入式软件在启动过程中,需要读取比较复杂的配置文件,并根据配置文件生成相应的内存结构供后续功能使用。一般配置文件都是文本格式的,比较典型的是XML文件。由于文本文件的格式比较复杂,解析时需要进行大量的错误判断,因此解析过程相当慢。为了提高解析的速度,可以把解析生成的内存结构以二进制文件的形式保存起来。在程序启动时,先检查一下当前的二进制文件版本和配置文件版本是否一致,不一致则重新解析并保存,一致的话,就直接解析二进制文件。因为二进制文件与内存数据结构是一致的,解析时间相对于直接解析文本的配置文件会大大缩短。这种方式目前应用比较广泛。4)内存完整转储这种方式是在装置断电前,将整个内存的数据以及CPU等硬件状态全部转储到永久存储的设备上,下次装置上电直接将内存数据恢复,然后设置CPU及硬件状态让装置继续从断电时的状态运行的一种方法。这种方法的特点是不需要软件程序做任何修改,但是需要保存整个内存的完整镜像,在内存容量比较大的情况下,需要占用外部存储设备的空间比较大,保存和读取的时间也比较长。一般在规模比较大的操作系统上提供这些功能,例如嵌入式Windows、嵌入式Linux等。上述几种手段基本都存在一定问题,无法在成本较低的情况下快速提高软件启动速度。
技术实现思路
针对上述问题,本专利技术通过将动态内存静态化,提供一种使用超级状态存储加快嵌入式软件启动过程的方法。一个程序所使用的内存区域,大致可分为四个部分:静态区、常量区、堆区、栈区,其中静态区用于存放程序的全局变量和静态变量,常量区存放程序中定义的常量数据,堆区用于运行时动态从中分配内存,栈区则保存函数调用的参数和返回值以及局部变量等。在程序开始启动到启动完成这两个状态,发生变化的数据都在静态区、堆区、栈区几个区域。静态区中的变量每次程序启动都会放在相同的位置,只有值会变化;堆区中分配的动态内存,每次运行都会有新的情况,因此其位置和数据都可能发生变化;栈区中的数据其实体现的是函数的调用关系和内部状态,与程序的整体运行状态没有太大关系。因此,影响程序启动速度的关键在于静态区中的静态内存和堆区中的动态内存。对于静态内存,从程序启动开始到启动完成的状态之间,发生变化的只有内存中的全局或静态数据值及程序的执行位置。因此,只要将启动完成时的全局或静态数据保存到外部存储器,在程序每次启动时,直接从外部存储器读入内存中的静态内存区并保存在原来的位置,并将程序跳至上次启动完成的位置执行,就可以一步完成启动。其启动所需的时间仅仅是从外部存储将其全局与静态变量区域读取到内存中所需的时间。由于程序使用的全局与静态变量数量有限,整个启动过程需要的时间很短。对于动态分配的内存,即使动态分配的内存在内存中的地址每次运行都会有变化,但是它总会被程序静态内存区中的某个指针直接或间接使用,当我们使用上一步所描述的保存方案来存储和恢复启动完成的状态时,这个指针同样也会被保存下来,但是其指向的动态内存却很难保存,上述保存静态数据的方法在此不能直接使用。因此,本专利技术考虑到将动态内存静态化的方法,借鉴C语言标准库中的分配算法,将动态分配转为静态分配,将所有动态分配的内存块都转移到静态内存区中,进行状态保存时,可将动态数据与静态数据一起存到静态内存区,这样,指向动态内存的指针,恢复后也恰好指向静态内存区中的“动态”数据(实际已变为静态数据),从而在程序启动时直接调用该状态,提高程序启动速度。本专利技术采用如下步骤实现上述设想:一种使用超级状态存储加快嵌入式软件启动过程的方法,包括如下步骤:步骤1、确定软件程序的启动完成点;该启动完成点就是程序运行到某一时刻,之后程序功能可以正常使用的执行点。根据应用软件的不同,启动完成点略有不同,程序员可根据经验判断具体程序的启动完成点。步骤2、判断外部存储器是否存在状态文件,若不存在,则按步骤3进行,否则,按步骤4进行;判断时可使用程序尝试打开状态文件,根据打开是否成功判断状态文件是否存在。步骤3、进行软件启动过程并将启动完成时内存中的数据保存到外部存储器:(3-1)在静态内存区划出一块用于作为动态分配内存的区域,修改程序中的动态分配函数和释放内存函数至定制版本,使得动态分配和释放内存动作在该区域中进行;(3-2)进行程序启动过程,直到程序执行到启动完成点;(3-3)在外部存储器中创建状态文件,将到启动完成点时静态内存区中存储的数据存到状态文件中;由于(3-1)中已修改了动态分配函数,在程序启动过程中,在静态内存区为动态分配指定内存区域,存储动态数据,因此,此时静态内存区中存储的数据既有原动态数据,也有原静态数据,在此统称为静态数据,不再区分,都统一存到状态文件中。(3-4)恢复动态分配函数和释放内存函数的原有行为;由于启动已经完成,后续功能中没必要再将动态内存分配至静态内存区域,所以恢复原有的动态分配函数和释放内存函数。(3-5)跳至启动完成点继续执行程序后续功能;保存完状态文件后,继续从启动完成点开始执行程序。步骤4、从状态文件中读取数据至静态内存区,然后跳至启动完成点,继续执行程序后续功能;如果外部存储器中存在状态文件,则可直接调用,无需做任何调整即可达到启动完成的状态。进一步,步骤(3-1)中,修改函数时通过编译时使用宏替换实现,也可通过运行时动态修改函数机器代码进行跳转的方式实现。根据上述方法,将动态分配函数和释放内存函数修改至定制版本,该定制版本的特点是所有分配和释放动作都不在堆区进行,而是在预先划分好的一块静态内存区(通常称为“内存池”)中进行。其中,步骤(3-1)中通过定义一个大的静态数组的形式预留空间作为内存池。上述内容所述的状态文件包括至少一个静态内存数据块,保存内容包括静态数据块的地址、静态数据块的大小、静态数据块的内容。本专利技术与目本文档来自技高网
...
使用超级状态存储加快嵌入式软件启动过程的方法

【技术保护点】
一种使用超级状态存储加快嵌入式软件启动过程的方法,其特征在于包括如下步骤:步骤1、确定软件程序的启动完成点;步骤2、判断外部存储器是否存在状态文件,若不存在,则按步骤3进行,否则,按步骤4进行;步骤3、进行软件启动过程并将启动完成时内存中的数据保存到外部存储器:(3?1)在静态内存区划出一块用于作为动态分配内存的区域,修改程序中的动态分配函数和释放内存函数至定制版本,使得动态分配和释放内存动作在该区域中进行;(3?2)进行程序启动过程,直到程序执行到启动完成点;(3?3)在外部存储器中创建状态文件,将到启动完成点时静态内存区中存储的数据存到状态文件中;(3?4)恢复动态分配函数和释放内存函数的原有行为;(3?5)跳至启动完成点继续执行程序后续功能;步骤4、从状态文件中读取数据至静态内存区,然后跳至启动完成点,继续执行程序后续功能。

【技术特征摘要】
1.一种使用超级状态存储加快嵌入式软件启动过程的方法,其特征在于包括如下步骤:步骤1、确定软件程序的启动完成点;步骤2、判断外部存储器是否存在状态文件,所述的状态文件包括至少一个静态内存数据块,保存内容包括静态数据块的地址、静态数据块的大小、静态数据块的内容;若不存在,则按步骤3进行,否则,按步骤4进行;步骤3、进行软件启动过程并将启动完成时内存中的数据保存到外部存储器:(3-1)在静态内存区划出一块用于作为动态分配内存的区域,修改程序中的动态分配函数和释放内存函数至定制版本,使得动态分配和释放内存动作在该区域中进行;(3-2)进行程序启动过程,直到程序执行到启动完成点;(3-3)在外部存储器中创建状态文件,将到启动完成点时静态内存区中存储的数...

【专利技术属性】
技术研发人员:周文俊刘国华丛春涛杨冰孙发恩贺强孟庆媛朱晓磊宋先慧袁文广
申请(专利权)人:积成电子股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1