一种应用程序的内存错误修复方法

文档序号:6358974阅读:186来源:国知局
专利名称:一种应用程序的内存错误修复方法
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种应用程序的内存错误修复方法。
背景技术
由于内存错误导致应用程序出现异常时,现有技术的处理方案是当检测到内存错误,将错误信息发送给BIOS (Basic Input Output System,基本输入输出系统),由BIOS 对硬件错误进行修复,或者,BIOS将该错误信息发送给内核(具体可以是操作系统OS内核),由内核进行硬件错误的修复;如果硬件修复失败,则由OS内核向出现异常的应用程序进程发送ki 11信号,使该进程关闭。发明人在实现本发明的过程中,发现现有技术中至少存在如下问题现有的内存错误修复方案,会导致应用程序意外重启,造成关键数据丢失,降低了应用程序使用的可靠性和安全性。

发明内容
本发明实施例提供一种应用程序的内存错误修复方法,从而避免应用程序意外重启导致的关键数据丢失问题。一种应用程序的内存错误修复方法,包括当应用程序占用的内存发生错误时,挂起所述应用程序的进程;唤醒所述应用程序对应的错误修复程序,所述错误修复程序是在所述应用程序启动时创建的;所述错误修复程序对发生的错误进行修复处理,如果修复失败,所述错误修复程序对所述应用程序的关键数据进行保存后,关闭所述应用程序;如果修复成功,所述错误修复程序将挂起的进程恢复。由上述本发明实施例提供的技术方案可以看出,本发明实施例中,当内存错误导致应用程序异常时,通过预先创建的错误修复程序对内存错误尝试修复,在修复失败时对应用程序的关键数据进行保存,因此,提高了应用程序应用的可靠性和安全性。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明实施例提供的方法流程图;图2为本发明一个应用实施例提供的创建错误修复线程的方法流程图;图3为本发明一个应用实施例提供的错误修复的方法流程图4为本发明另一个应用实施例提供的创建错误修复进程的方法流程图;图5为本发明另一个应用实施例提供的错误修复的方法流程图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明实施例提供一种应用程序的内存错误修复方法,其实现方式如图1所示, 具体包括如下操作S101、当应用程序占用的内存发生错误时,挂起该应用程序的进程;其中,具体可以根据发生错误的内存地址判断该内存错误导致了哪个应用程序异

巾οS102、唤醒上述应用程序对应的错误修复程序,该错误修复程序是在上述应用程序启动时创建的;S103、错误修复程序对发生的错误进行修复处理,如果修复失败,该错误修复程序对上述应用程序的关键数据进行保存后,关闭该应用程序;如果修复成功,该错误修复程序将挂起的进程恢复,以便该应用程序继续运行。本发明实施例提供的方法,当内存错误导致应用程序异常时,通过预先创建的错误修复程序对内存错误尝试修复,在修复失败时对应用程序的关键数据进行保存,因此,提高了应用程序应用的可靠性和安全性。如上所述,错误修复程序是在应用程序启动时创建的。则,创建错误修复程序的具体实现方式如下在上述应用程序启动时,创建该应用程序对应的错误修复程序;将该错误修复程序ID和该应用程序的进程ID关联保存到错误处理模块;将该错误修复程序阻塞在内核态。另外,在上述S103中,修复成功后,仍将错误修复程序阻塞在内核态,等待下次被调用。其中,错误处理模块位于内核的底层模块;关联保存错误修复程序ID和应用程序的进程ID是指,保存错误修复程序ID、应用程序的进程ID,和它们之间的对应关系。在本发明实施例中,可以为启动的应用程序均创建对应的错误修复程序,也可以为那些指定需要保护的应用程序创建对应的错误修复程序。本发明实施例提供的方法中,上述S102的具体实现方式可以是当上述应用程序占用的内存发生错误时,获取该应用程序的进程ID ;根据该进程ID,在上述错误处理模块中查找该应用程序对应的错误修复程序ID ;根据该错误修复程序ID,唤醒该错误修复程序。其中,唤醒的具体实现方式可以是通过调用内核提供的唤醒函数来唤醒错误修复程序;还可以是通过软中断的方式唤醒错误修复程序;也可以是操作系统中常用的其他唤醒方式。本发明实施例提供的方法,上述S103中错误修复程序对发生的错误进行修复处理的具体实现方式可以是该错误修复程序获取上述错误处理模块发来的发生内存错误信息,该内存错误信息可以但不仅限于包括发生错误的内存地址、发生错误的上下文信息等;根据该内存错误信息对发生的错误进行修复处理,修复的具体实现方式可以但不仅限于根据发生错误的内存地址及异常应用程序中各个地址段范围,定位出错的业务数据,并通过重新加载业务数据的方式进行错误修复;或者,在定位到出错的业务数据后,尝试为出错的业务数据重新分配内存区域,将这部分业务数据迁移至新分配的内存区域。其中,内存错误信息是预先保存到错误处理模块中的。本发明实施例提供的方法中,还可以先对发生错误的内存地址进行判断,当该发生错误的内存地址对应的内存页是上述应用程序的只读页时,通过现有的只读页修复方法进行错误修复,如果修复成功,则错误修复结束;如果修复失败,则执行上述S101,挂起上述应用程序的进程;当该发生错误的内存地址对应的内存页不是只读页时,则执行上述 S101,挂起上述应用程序的进程。在本发明实施例提供的方法中,上述的错误修复程序可以是错误修复线程,也可以是错误修复进程。如果是错误修复线程,则上述挂起该应用程序的进程的具体实现方式为挂起该应用程序中除了该错误修复线程外的线程。下面将对本发明实施例在实际应用过程中的具体实现方式进行详细的说明。一个应用实施例在这个应用实施例中,通过创建错误修复线程来对应用程序进行修复,其处理过程如下在需要保护的应用程序启动阶段,如图2所示,包括如下操作S201、在该应用程序的进程中创建一个错误修复线程;S202、将该错误修复线程ID、该进程ID关联保存在错误处理模块;S203、将该错误修复线程阻塞在内核态,等待被唤醒。在发生内存错误阶段,如图3所示,包括如下操作S301、获取发生错误的内存地址;S302、判断发生错误的内存地址所在的区域,如果在应用程序区域,执行S304,如果在内核区域,执行S303;S303、进行内核修复处理,如果修复成功,错误修复流程结束,否则,执行S314 ;S304、获取内存错误导致异常的应用程序的进程ID和错误修复线程ID,执行 S305 ;S305、判断出错线程是否为错误修复线程,如果是,则执行S306,否则,执行S307 ;判断出错线程是否为错误修复线程的具体实现方式可以是将出错线程ID与错误处理模块中保存的错误修复线程ID进行匹配,如果有错误修复线程ID与出错线程ID相同,则表明该错误修复线程出错。S306、关闭上述异常的应用程序,错误修复流程结束;S307、将上述异常的应用程序的进程ID与错误处理模块中保存的进程ID进行匹配,如果匹配成功,执行S308,否则,执行S306 ;S308、判断发生错误的内存地址对应的内存页是否为异常的应用程序的只读页, 如果是,执行S309,否则,执行S310 ;S309、通过只读页冗余等只读页修复方法在内核对内存错误进行修复,如果修复成功,则错误修复流程结束,如果修复失败,执行S310 ;S310、挂起异常的应用程序的进程中除错误修复线程外的线程;将发生错误的内存地址保存到错误处理模块;在错误处理模块中查找匹配成功的进程ID关联的错误修复线程ID,并唤醒该错误修复线程,执行S311 ;其中,发生错误的内存地址与对应的进程ID及线程ID关联保存,以便错误修复线程在进行错误修复是能够正确查找到该内存地址。S311、被唤醒的错误修复线程根据发生错误的内存地址,对错误进行修复,如果修复成功,执行S312,否则,执行S313 ;S312、被唤醒的错误修复线程恢复挂起的线程,且该错误修复线程阻塞在内核态, 等待下一次被唤醒;S313、被唤醒的错误修复线程对异常的应用程序的关键数据进行保存后,关闭该应用程序,错误修复流程结束;S314、重启系统,错误修复流程结束。上述应用实施例提供的方法中,当内存错误导致应用程序异常时,出现异常的应用程序能够参与错误修复,在错误修复失败时,使得应用程序的关键数据能够及时得到保存,防止由于硬件错误导致的应用程序意外崩溃,提高了应用程序使用的安全性和稳定性。 另外,现有的错误修复过程中,通过向应用程序的进程发送信号指令指示应用程序关闭,但一个应用程序的进程中可能包含多个线程,无法确定由哪个线程来处理接收到的信号,可能导致错误数据扩散。而本应用实施例中,将除了错误修复线程之外的其他线程挂起,从而避免了该问题。另一个应用实施例在这个应用实施例中,通过创建错误修复进程来对应用程序进行修复,其处理过程如下在需要保护的应用程序启动阶段,如图4所示,包括如下操作S401、为该应用程序创建一个错误修复进程;S402、将该错误修复进程ID和该应用程序的进程ID关联保存在错误处理模块;S403、将该错误修复进程阻塞在内核态,等待被唤醒。在发生内存错误阶段,如图5所示,包括如下操作S501、获取发生错误的内存地址;S502、判断发生错误的内存地址所在的区域,如果在应用程序区域,执行S504,如果在内核区域,执行S503;S503、进行内核修复,如果修复成功,错误修复流程结束,否则,执行S513 ;S504、获取内存错误导致异常的应用程序的进程ID和关联的错误修复进程ID,执行 S505 ;S505、将上述异常的应用程序的进程ID与错误处理模块中保存的应用程序进程 ID进行匹配,如果匹配成功,执行S507,否则,执行S506 ;S506、关闭上述异常的应用程序,错误修复流程结束;S507、判断发生错误的内存地址对应的内存页是否为异常的应用程序的只读页, 如果是,执行S508,否则,执行S509 ;S508、通过只读页冗余等只读页修复方法在内核对内存错误进行修复,如果修复成功,则错误修复流程结束,如果修复失败,执行S509 ;
S509、挂起异常的应用程序的进程;将发生错误的内存地址保存到错误处理模块; 在错误处理模块中查找匹配的应用程序的进程ID关联的错误修复进程ID,并唤醒该错误修复进程,执行S510;S510、被唤醒的错误修复进程根据发生错误的内存地址,对错误进行修复,如果修复成功,执行S511,否则,执行S512 ;S511、被唤醒的错误修复进程恢复挂起的进程,且该错误修复进程阻塞在内核态, 等待下一次被唤醒;S512、被唤醒的错误修复进程对异常的应用程序的关键数据进行保存后,关闭该应用程序,错误修复流程结束;S513、重启系统,错误修复流程结束。上述应用实施例提供的方法中,当内存错误导致应用程序异常时,通过创建的与该异常的应用程序关联的错误修复进程参与错误修复,在错误修复失败时,使得应用程序的关键数据能够及时得到保存,防止由于硬件错误导致的应用程序意外崩溃,提高了应用程序使用的安全性和稳定性。另外,现有的错误修复过程中,通过向应用程序的进程发送信号指令指示应用程序关闭,但一个应用程序的进程中可能包含多个线程,无法确定由哪个线程来处理接收到的信号,可能导致错误数据扩散。而本应用实施例中,将异常的应用程序的进程挂起,不需要向该进程发送信号,从而避免了该问题。实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此, 任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换, 都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种应用程序的内存错误修复方法,其特征在于,包括当应用程序占用的内存发生错误时,挂起所述应用程序的进程; 唤醒所述应用程序对应的错误修复程序,所述错误修复程序是在所述应用程序启动时创建的;所述错误修复程序对发生的错误进行修复处理,如果修复失败,所述错误修复程序对所述应用程序的关键数据进行保存后,关闭所述应用程序;如果修复成功,所述错误修复程序将挂起的进程恢复。
2.根据权利要求1所述的方法,其特征在于,该方法还包括 在所述应用程序启动时,创建所述错误修复程序;将所述错误修复程序ID和所述进程ID关联保存到错误处理模块; 将所述错误修复程序阻塞在内核态。
3.根据权利要求2所述的方法,其特征在于,所述唤醒所述应用程序对应的错误修复程序包括当应用程序占用的内存发生错误时,获取所述应用程序的进程ID ;根据所述进程ID,在所述错误处理模块中查找所述应用程序对应的错误修复程序ID ;根据所述错误修复程序ID,唤醒所述错误修复程序。
4.根据权利要求2或3所述的方法,其特征在于,所述错误修复程序对发生的错误进行修复处理包括所述错误修复程序获取所述错误处理模块发送的内存错误信息,根据所述内存错误信息对发生的错误进行修复处理,所述内存错误信息包括发生错误的内存地址。
5.根据权利要求4所述的方法,其特征在于,所述挂起所述应用程序的进程,进一步包括对发生错误的内存地址进行判断,当所述发生错误的内存地址对应的内存页是所述应用程序的只读页时,通过只读页修复方法进行错误修复,如果修复失败,挂起所述应用程序的进程;当所述发生错误的内存地址对应的内存页不是所述应用程序的只读页时,挂起所述应用程序的进程。
6.根据权利要求1 5任意一项所述的方法,其特征在于,所述错误修复程序为所述应用程序的进程中的错误修复线程,则所述挂起所述应用程序的进程包括挂起所述应用程序中除所述错误修复线程外的线程。
7.根据权利要求1 5任意一项所述的方法,其特征在于,所述错误修复程序为错误修复进程。
8.根据权利要求1 7任意一项所述的方法,其特征在于,通过软中断唤醒所述错误修复程序。
9.根据权利要求1 8任意一项所述的方法,其特征在于,在所述错误修复程序对发生的错误进行修复处理成功后,该方法还包括将所述错误修复线程阻塞在内核态。
全文摘要
本发明涉及一种应用程序的内存错误修复方法,包括当应用程序占用的内存发生错误时,挂起所述应用程序的进程;唤醒所述应用程序对应的错误修复程序,所述错误修复程序是在所述应用程序启动时创建的;所述错误修复程序对发生的错误进行修复处理,如果修复失败,所述错误修复程序对所述应用程序的关键数据进行保存后,关闭所述应用程序;如果修复成功,所述错误修复程序将挂起的进程恢复。由于当内存错误导致应用程序异常时,通过预先创建的错误修复程序对内存错误尝试修复,在修复失败时对应用程序的关键数据进行保存,因此,提高了应用程序应用的可靠性和安全性。
文档编号G06F11/07GK102308285SQ201180001191
公开日2012年1月4日 申请日期2011年7月26日 优先权日2011年7月26日
发明者刘奖, 范文林 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1