[发明专利]从嵌入式软件系统中的堆栈损坏故障中恢复有效
申请号: | 201210462807.8 | 申请日: | 2012-11-16 |
公开(公告)号: | CN103116532A | 公开(公告)日: | 2013-05-22 |
发明(设计)人: | D.达斯 | 申请(专利权)人: | 通用汽车环球科技运作有限责任公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07 |
代理公司: | 中国专利代理(香港)有限公司 72001 | 代理人: | 崔幼平;杨楷 |
地址: | 美国密*** | 国省代码: | 美国;US |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 嵌入式 软件 系统 中的 堆栈 损坏 故障 恢复 | ||
技术领域
本发明大体涉及软件故障恢复,并且更具体地,涉及一种用于从软件系统中的堆栈上溢和堆栈下溢故障中恢复的方法,该方法还原已损坏的内存区域、终止有故障的或已损坏的任务,以及估计该有故障的或已损坏的任务的输出和下一个状态。
背景技术
现代车辆以控制车辆性能的许多方面的自动系统为特征。这些系统使用变得日益精致且复杂的软件,且一些车辆包含包括数以百万的代码行数的系统。考虑到软件的复杂性,汽车制造商将车辆带入市场的短时间,以及车辆可被操作的状况的宽范围,该软件必定经历临时故障。
常见类型故障是堆栈上溢或堆栈下溢(统称,“堆栈上溢/下溢”或“堆栈损坏”)故障。在堆栈上溢/下溢故障中,程序试图将数据写入到内存堆栈的在规定的范围之外的一部分——要么在堆栈的起点上方(下溢),要么超过堆栈的最大范围(上溢)。堆栈上溢/下溢故障通常导致一些系统数据和/或堆栈内存的一些部分的损坏。虽然熟知用于堆栈上溢/下溢故障的检测技术,但是恢复技术不令人满意。在典型的软件系统中,对堆栈上溢/下溢故障的响应是要么重新启动所有的软件程序要么重新启动处理器硬件本身。因为许多嵌入式汽车系统实时运行,因此它们不能承受硬件或软件重新启动所花费的相对长时间的不工作。
存在对如下堆栈上溢/下溢故障恢复技术的需要:该技术不需要硬件或软件重新启动,但其在内存和处理器使用方面是足够有效的从而在高度资源受限的汽车环境中是可行的。
发明内容
根据本发明的教义,公开了一种用于从堆栈上溢/下溢故障中恢复而不重新启动软件或硬件的方法和系统。在应用程序中的每个任务切换运行时,内存堆栈的一部分被拷贝到备用位置,使得堆栈的一部分在它随后在下一个任务的执行期间被堆栈上溢或堆栈下溢故障损坏时可被还原。状态变量数据类似地被拷贝到备用位置,使得它在下一个任务经历故障时可用来还原或估计该任务的输出。公开了用于选择对哪类状态变量数据以及内存堆栈的哪部分进行拷贝以备用的技术、以及用于检测堆栈上溢/堆栈下溢故障和在这种故障情况下还原状态变量和内存数据的技术。
本发明还提供如下方案:
1. 一种用于从在处理器上运行的软件应用中的堆栈上溢或堆栈下溢故障中恢复的方法,所述方法包括:
配置物理内存空间以包括堆栈内存和备用内存位置;
在应用程序中的任务切换时,将所述堆栈内存的一部分以及一组状态变量拷贝到所述备用内存位置;
确定堆栈上溢或堆栈下溢故障是否在前一个任务的执行期间发生;
如果所述堆栈上溢或堆栈下溢故障在所述前一个任务的执行期间发生,则还原对于所述前一个任务的已保存的一组状态变量;
如果所述堆栈上溢或堆栈下溢故障在所述前一个任务的执行期间发生,则终止所述前一个任务;
如果所述堆栈上溢或堆栈下溢故障在所述前一个任务的执行期间发生,则还原所述堆栈内存的已保存部分;以及
开始下一个任务。
2. 根据方案1所述的方法,其特征在于,将所述堆栈内存的一部分拷贝到所述备用内存位置包括:将在用于所述下一个任务的堆栈警告器上方的堆栈内存段和在用于所述下一个任务的堆栈警告器下方的堆栈内存段拷贝到所述备用内存位置。
3. 根据方案1所述的方法,其特征在于,将一组状态变量拷贝到所述备用内存位置包括:将用于所述下一个任务的状态变量拷贝到所述备用内存位置。
4. 根据方案1所述的方法,其特征在于,确定在前一个任务的执行期间是否发生堆栈上溢或堆栈下溢故障包括:检查对于所述前一个任务的警告器值。
5. 根据方案1所述的方法,其特征在于,还原对于所述前一个任务的已保存的一组状态变量包括:针对所述前一个任务使用估计算法来估计所述已保存的一组变量的改进值。
6. 根据方案1所述的方法,其特征在于,还原堆栈内存的已保存部分包括:确定来自所述前一个任务的执行的堆栈上溢或堆栈下溢的量是否超过堆栈内存的已保存部分的大小。
7. 根据方案6所述的方法,其特征在于,还原堆栈内存的已保存部分包括:如果来自所述前一个任务的执行的堆栈上溢的量超过所述堆栈内存的已保存部分的大小,则利用所述堆栈内存中的较低的内存地址递归地估计任务的输出和状态。
8. 根据方案7所述的方法,其特征在于,如果来自所述前一个任务的执行的堆栈上溢的量超过堆栈内存的已保存部分的大小,则堆栈内存的已保存部分的大小被增加用于所述软件应用程序的未来执行。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于通用汽车环球科技运作有限责任公司,未经通用汽车环球科技运作有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210462807.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:双电池供电的电子猫眼可视门铃
- 下一篇:一种滤波补偿模块