(12)发明专利申请
(10)申请公布号 CN 110659083 A(43)申请公布日 2020.01.07
(21)申请号 201910887746.1(22)申请日 2019.09.19
(71)申请人 苏州浪潮智能科技有限公司
地址 215100 江苏省苏州市吴中区吴中经
济开发区郭巷街道官浦路1号9幢(72)发明人 张一罡
(74)专利代理机构 北京集佳知识产权代理有限
公司 11227
代理人 刘新雷(51)Int.Cl.
G06F 9/445(2018.01)
权利要求书2页 说明书7页 附图3页
(54)发明名称
一种程序故障重启后恢复内存数据的方法和系统(57)摘要
本发明公开了一种程序故障重启后恢复内存数据的方法和系统,其中方法包括步骤1,创建关键变量,关键变量用于保用户的重要数据;步骤2,监控关键变量,并判断关键变量的值是否发生改变;若是,步骤3,获取关键变量,并将关键变量写入磁盘的持久化文件;步骤4,判断预定程序是否重启;步骤5,从磁盘的持久化文件中读取关键变量至内存。通过创建关键变量保用户的重要数据,在关键变量的值发生改变后,将关键变量写入磁盘的持久化文件中,在程序重启后,将位于磁盘的持久化文件中的关键变量读取至内存中,实现内存数据的自动恢复,避免了数据丢失,提高了用户体验,增强了程序的健壮性和恢复能力。
CN 110659083 ACN 110659083 A
权 利 要 求 书
1/2页
1.一种程序故障重启后恢复内存数据的方法,其特征在于,包括:步骤1,创建关键变量,所述关键变量用于保用户的重要数据;步骤2,监控所述关键变量,并判断所述关键变量的值是否发生改变;若是,步骤3,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;步骤4,判断预定程序是否重启;步骤5,从所述磁盘的持久化文件中读取所述关键变量至内存。2.如权利要求1所述程序故障重启后恢复内存数据的方法,其特征在于,所述步骤1包括:
使用typedef自定义变量的结构体创建所述关键变量。
3.如权利要求2所述程序故障重启后恢复内存数据的方法,其特征在于,所述步骤2包括:
创建条件变量和互斥锁,并对所述关键变量进行监控。
4.如权利要求3所述程序故障重启后恢复内存数据的方法,其特征在于,所述步骤3包括:
注册回调函数;
所述关键变量的值发生改变后,执行所述回调函数;获取所述关键变量的值,并使用cJson库将所述关键变量的变量值转化成JSON文本格式的变量值;
使用fopen函数打开位于磁盘的持久化文件,使用fputs函数将所述JSON文本格式的变量值写入所述持久化文件。
5.如权利要求4所述程序故障重启后恢复内存数据的方法,其特征在于,所述步骤5还包括:
使用fopen函数打开所述持久化文件,使用fgets函数将所述JSON文本格式的变量值从所述持久化文件中读出至内存;
使用cJson库对所述JSON文本格式的变量值在所述内存的临时缓冲区解析并获得解析结果;
将位于所述缓冲区的所述解析结果的变量数据按照保存时的次序写入当前的所述关键变量中,使得当前的所述关键变量与所述程序重启之前的所述关键变量保持一致。
6.如权利要求5所述程序故障重启后恢复内存数据的方法,其特征在于,在所述步骤5之后,还包括:
步骤6,判断是否全部将所述持久化文件中的所述关键变量读取至内存;若是,步骤7,判定全部数据恢复正常。
7.一种程序故障重启后恢复内存数据的系统,其特征在于,包括:关键变量创建模块,用于创建关键变量,所述关键变量用于保用户的重要数据;监控模块,与所述关键变量创建模块连接,用于监控所述关键变量,并判断所述关键变量的值是否发生改变,并在所述关键变量的值发生改变之后,输出触发信号;
数据转移模块,与所述监控模块连接,用于在接收到所述触发信号后,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;
内存回写模块,与所述数据转移模块连接,在预定程序重启后,从所述磁盘的持久化文
2
CN 110659083 A
权 利 要 求 书
2/2页
件中读取所述关键变量至内存,实现数据恢复。
8.如权利要求7所述程序故障重启后恢复内存数据的系统,其特征在于,所述监控模块包括条件变量创建单元和互斥锁创建单元,通过所述变量创建单元创建的条件变量以及所述互斥锁创建单元创建的互斥锁对所述关键变量进行监控,所述变量创建单元在所述关键变量的值发生改变之后,输出触发信号。
9.如权利要求8所述程序故障重启后恢复内存数据的系统,其特征在于,还包括与所述数据转移模块连接的格式转换单元,所述格式转换单元在所述数据转移模块将所述关键变量写入磁盘的持久化文件的过程中将所述关键变量转换为预定的格式。
10.如权利要求9所述程序故障重启后恢复内存数据的系统,其特征在于,还包括与所述内存回写模块连接的解析单元、数据恢复提示单元,所述解析单元在所述内存回写模块从所述磁盘的持久化文件中读取所述关键变量至内存的过程中将所述关键变量解析为预定的格式,所述数据恢复提示单元检测所述解析单元实现数据恢复的过程,并在所述解析单元将所述持久化文件中所有的关键变量解析到所述内存后输出数据恢复提示。
3
CN 110659083 A
说 明 书
一种程序故障重启后恢复内存数据的方法和系统
1/7页
技术领域
[0001]本发明涉及数据恢复技术领域,特别是涉及一种程序故障重启后恢复内存数据的方法和系统。
背景技术
[0002]随着计算机技术的不断发展,其所涉及的领域几乎涵盖了人们生活的所有方面。在享受其方便的同时,一个不得不注意的事情,就是数据保存的问题,数据不能丢失,如果数据丢失造成个人信息的泄露,将给用户带来不可承受的损失,尤其是云计算大规模应用的今天,数据丢失就意味着生活不能正常进行。[0003]而当一个程序加载时,计算机会将程序的指令从ROM复制到RAM,程序运行时,又将指令从RAM复制到CPU。一个复杂的程序在运行过程中,难免会出现数据错误,而一些关键数据一旦出错,就会触发严重问题,导致程序崩溃。程序崩溃后,存储在RAM中的数据就会丢失,重启程序后,一些关键数据也无法恢复。
[0004]这对于一些保存有重要数据的程序而言是十分致命的。尤其是一些系统程序,比如存储系统,为了提供持续性的服务,会将用户配置的一些数据信息存放到内存的数据结构中。而当一些严重的数据错误发生时,为了不造成更严重的后果,程序会选择重启来重置系统。当系统重新载入内存后,所有数据结构处于初始化状态,这就会造成用户的配置丢失,给用户带来不良的体验。[0005]因此,一个稳定可靠的程序必须具有恢复核心内存数据的能力,这样才能在故障重启,掉电重启等意外发生后,也能保存原有数据,继续正常提供服务。发明内容
[0006]本发明的目的是提供了一种程序故障重启后恢复内存数据的方法和系统,实现了内存在故障重启后数据不丢失的效果,提高了系统的运行可靠性。[0007]为解决上述技术问题,本发明实施例提供了一种程序故障重启后恢复内存数据的方法,包括:[0008]步骤1,创建关键变量,所述关键变量用于保用户的重要数据;[0009]步骤2,监控所述关键变量,并判断所述关键变量的值是否发生改变;[0010]若是,步骤3,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;[0011]步骤4,判断预定程序是否重启;[0012]步骤5,从所述磁盘的持久化文件中读取所述关键变量至内存。[0013]其中,所述步骤1包括:
[0014]使用typedef自定义变量的结构体创建所述关键变量。[0015]其中,所述步骤2包括:[0016]创建条件变量和互斥锁,并对所述关键变量进行监控。[0017]其中,所述步骤3包括:
4
CN 110659083 A[0018]
说 明 书
2/7页
注册回调函数;
[0019]所述关键变量的值发生改变后,执行所述回调函数;[0020]获取所述关键变量的值,并使用cJson库将所述关键变量的变量值转化成JSON文本格式的变量值;
[0021]使用fopen函数打开位于磁盘的持久化文件,使用fputs函数将所述JSON文本格式的变量值写入所述持久化文件。[0022]其中,所述步骤5还包括:
[0023]使用fopen函数打开所述持久化文件,使用fgets函数将所述JSON文本格式的变量值从所述持久化文件中读出至内存;
[0024]使用cJson库对所述JSON文本格式的变量值在所述内存的临时缓冲区解析并获得解析结果;
[0025]将位于所述缓冲区的所述解析结果的变量数据按照保存时的次序写入当前的所述关键变量中,使得当前的所述关键变量与所述程序重启之前的所述关键变量保持一致。[0026]其中,在所述步骤5之后,还包括:[0027]步骤6,判断是否全部将所述持久化文件中的所述关键变量读取至内存;[0028]若是,步骤7,判定全部数据恢复正常。[0029]除此之外,本发明实施例还提供了一种程序故障重启后恢复内存数据的系统,包括:
[0030]关键变量创建模块,用于创建关键变量,所述关键变量用于保用户的重要数据;[0031]监控模块,与所述关键变量创建模块连接,用于监控所述关键变量,并判断所述关键变量的值是否发生改变,并在所述关键变量的值发生改变之后,输出触发信号;[0032]数据转移模块,与所述监控模块连接,用于在接收到所述触发信号后,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;[0033]内存回写模块,与所述数据转移模块连接,在预定程序重启后,从所述磁盘的持久化文件中读取所述关键变量至内存,实现数据恢复。[0034]其中,所述监控模块包括条件变量创建单元和互斥锁创建单元,通过所述变量创建单元创建的条件变量以及所述互斥锁创建单元创建的互斥锁对所述关键变量进行监控,所述变量创建单元在所述关键变量的值发生改变之后,输出触发信号。[0035]其中,还包括与所述数据转移模块连接的格式转换单元,所述格式转换单元在所述数据转移模块将所述关键变量写入磁盘的持久化文件的过程中将所述关键变量转换为预定的格式。[0036]其中,还包括与所述内存回写模块连接的解析单元、数据恢复提示单元,所述解析单元在所述内存回写模块从所述磁盘的持久化文件中读取所述关键变量至内存的过程中将所述关键变量解析为预定的格式,所述数据恢复提示单元检测所述解析单元实现数据恢复的过程,并在所述解析单元将所述持久化文件中所有的关键变量解析到所述内存后输出数据恢复提示。
[0037]本发明实施例所提供的程序故障重启后恢复内存数据的方法和系统,与现有技术相比,具有以下优点:
[0038]本发明实施例提供的程序故障重启后恢复内存数据的方法和系统,通过创建关键
5
CN 110659083 A
说 明 书
3/7页
变量保用户的重要数据,在关键变量的值发生改变后,将关键变量写入磁盘的持久化文件中,在程序重启后,将位于磁盘的持久化文件中的关键变量读取至内存中,实现内存数据的自动恢复,避免了数据丢失,提高了用户体验,增强了程序的健壮性和恢复能力。附图说明
[0039]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0040]图1为本发明实施例提供的程序故障重启后恢复内存数据的方法的一种具体实施方式的步骤流程示意图;
[0041]图2为本发明实施例提供的程序故障重启后恢复内存数据的方法的另一种具体实施方式的步骤流程示意图;
[0042]图3为本发明实施例提供的本发明实施例提供的系统的一种具体实施方式的连接结构示意图。
具体实施方式
[0043]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0044]请参考图1~图3,图1为本发明实施例提供的程序故障重启后恢复内存数据的方法的一种具体实施方式的步骤流程示意图;图2为本发明实施例提供的程序故障重启后恢复内存数据的方法的另一种具体实施方式的步骤流程示意图;图3为本发明实施例提供的本发明实施例提供的系统的一种具体实施方式的连接结构示意图。[0045]在一种具体实施方式中,所述程序故障重启后恢复内存数据的方法,包括:[0046]步骤1,创建关键变量,所述关键变量用于保用户的重要数据;这里的重要数据可以是用户配置的数据,也可以是程序运行时计算出的重要结果数据,或者其它的有价值的数据,这些数据存在于内存中,当程序停止运行后就会丢失。[0047]步骤2,监控所述关键变量,并判断所述关键变量的值是否发生改变;在程序运行时,如果用户主动写入数据,比如通过命令行对关键变量进行赋值,赋值操作会引发数据的变动,这时就需要对重要数据进行保护。[0048]若是,步骤3,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;将关键变量在其赋值发生改变之后,说明程序有崩溃的风险,将其写入磁盘的持久化文件中,而磁盘在程序崩溃、掉电、重启等过程中不会发生数据丢失,能够很好的进行数据保护,保存数据的目的在于防止其丢失,方便程序重启后再次使用,实现数据恢复。[0049]步骤4,判断预定程序是否重启;[0050]步骤5,从所述磁盘的持久化文件中读取所述关键变量至内存。[0051]通过创建关键变量保用户的重要数据,在关键变量的值发生改变后,将关键变量
6
CN 110659083 A
说 明 书
4/7页
写入磁盘的持久化文件中,在程序重启后,将位于磁盘的持久化文件中的关键变量读取至内存中,实现内存数据的自动恢复,避免了数据丢失,提高了用户体验,增强了程序的健壮性和恢复能力。
[0052]本发明中采用关键变量保存重要数据,并对其赋值进行监测,而对于如何创建关键变量不做限定,在一个实施例中,所述步骤1包括:
[0053]使用typedef自定义变量的结构体创建所述关键变量。
[0054]本发明中包括但不局限于采用typedef自定义变量的结构体创建所述关键变量,还可以采用其它的结构体,只要能够实现对于重要数据的保存,能够被后续的程序监控其运行即可。
[0055]本发明中采用关键变量保存重要数据,但是接下来重要的步骤是监控,监控其赋值是否发生改变,判断后续的将这些重要数据写入磁盘的持久性文件的时机,也是关键步骤,在本发明的一个实施例中,所述步骤2包括:[0056]创建条件变量和互斥锁,并对所述关键变量进行监控。
[0057]本发明中并不局限于通过创建条件变量以及互斥锁对关键变量进行监控,而且一般有两种方法创建互斥锁,静态方式和动态方式,本发明中对于采用哪种方式创建互斥锁不做限定。
[0058]为了保证程序的自动运行,保证在关键变量的值发生改变后,自动保存进磁盘的持久性文件,在本发明的一个实施例中,所述步骤3包括:[0059]注册回调函数;
[0060]所述关键变量的值发生改变后,执行所述回调函数;[0061]获取所述关键变量的值,并使用cJson库将所述关键变量的变量值转化成JSON文本格式的变量值;
[0062]使用fopen函数打开位于磁盘的持久化文件,使用fputs函数将所述JSON文本格式的变量值写入所述持久化文件。
[0063]回调函数会在关键变量的值发生变动后被调用。在程序运行时,如果用户主动写入数据,比如通过命令行对关键变量进行赋值,赋值操作会引发数据的变动,随后回调函数就会被执行。[0064]当然,本发明中并不局限于采用回调函数执行该操作,而且回调函数的注册可以在条件变量与互斥锁的创建过程中同步注册,也可以在关键变量创建是进行注册,在条件变量与互斥锁的创建之后自动进行关联,本发明对此不作限定。[0065]而本发明中最重要的步骤为进行数据恢复,即在程序重启之后将持久性文件的关键变量保存的重要数据还原到内存中,实现数据的恢复,保证内存中的重要数据与程序崩溃之前完全一致,在一个实施例中,所述步骤5还包括:[0066]使用fopen函数打开所述持久化文件,使用fgets函数将所述JSON文本格式的变量值从所述持久化文件中读出至内存;
[0067]使用cJson库对所述JSON文本格式的变量值在所述内存的临时缓冲区解析并获得解析结果;
[0068]将位于所述缓冲区的所述解析结果的变量数据按照保存时的次序写入当前的所述关键变量中,使得当前的所述关键变量与所述程序重启之前的所述关键变量保持一致。
7
CN 110659083 A[0069]
说 明 书
5/7页
本发明中对于采用什么格式将关键变量保存的重要数据保存到磁盘的持久性文
件中不做限定,可以是上述的采用cJson库的所述JSON文本格式,也可以是其它的格式,本领域技术人员可以针对不同的数据类型采用不同的格式,也可以将不同的数据采用统一的格式,但是不管哪种方式,都需采用文件的转换和解析,这种格式的转换可以是默认的,也可以是自定义的,本发明对此不作限定。
[0070]在完成数据恢复的过程中需要一定的时间,如果程序没有崩溃,则持续运行即可,但是在数据恢复的过程中,大多数情况下,需要将全部数据恢复之后才能进行下一步的操作,为了提高系统的利用效率,在本发明的一个实施例中,在所述步骤5之后,还包括:[0071]步骤6,判断是否全部将所述持久化文件中的所述关键变量读取至内存;[0072]若是,步骤7,判定全部数据恢复正常。
[0073]通过监测持久化文件中的所述关键变量读取至内存的进度,在全部完成之后,判定全部数据恢复正常,能够执行后续的步骤,这种方式可以是自动进行的,即在数据全部恢复后系统自动完成运行,也可以是通过显示恢复进度,类似于一些系统的安装进度等,显示进度条,或者是在完成数据恢复之后,输出相应的提醒页面,使得工作人员能明白可以进行下一步的操作。
[0074]除此之外,本发明实施例还提供了一种程序故障重启后恢复内存数据的系统,包括:
[0075]关键变量创建模块10,用于创建关键变量,所述关键变量用于保用户的重要数据;[0076]监控模块20,与所述关键变量创建模块10连接,用于监控所述关键变量,并判断所述关键变量的值是否发生改变,并在所述关键变量的值发生改变之后,输出触发信号;[0077]数据转移模块30,与所述监控模块20连接,用于在接收到所述触发信号后,获取所述关键变量,并将所述关键变量写入磁盘的持久化文件;[0078]内存回写模块40,与所述数据转移模块30连接,在预定程序重启后,从所述磁盘的持久化文件中读取所述关键变量至内存,实现数据恢复。
[0079]由于所述程序故障重启后恢复内存数据的系统为上述的程序故障重启后恢复内存数据的方法对应的系统,因而二者具有相同的有益效果,本发明在此不再赘述。[0080]本发明中通过对重要数据采用关键变量进行保存,再监测关键变量的赋值,在赋值发生改变后,说明系统出现问题,内存中数据可能会丢失,这时将其同步写入磁盘的持久性文件中,而磁盘在程序崩溃、掉电、重启等特殊情况喜爱不会发生数据丢失,在重启之后,只要从持久性文件中读取对应的只要数据,就能够实现内存数据的恢复。[0081]本发明中关键变量创建模块10,在创建关键变量的过程中,可以采用typedef自定义变量的结构体创建关键变量,也可以采用其它的结构体创建关键变量,这些关键变量会用来保存一些重要数据,比如用户配置的数据,或者程序运行时计算出的重要结果数据。这些数据存在于内存中,当程序停止运行后就会丢失。[0082]而对于监控模块20来说,其作用在于监控关键变量的值,在其发生改变之后,就需要将关键变量同步写入磁盘的持久性文件,本发明对其结构不做限定,在一个实施例中,所述监控模块20包括条件变量创建单元和互斥锁创建单元,通过所述变量创建单元创建的条件变量以及所述互斥锁创建单元创建的互斥锁对所述关键变量进行监控,所述变量创建单元在所述关键变量的值发生改变之后,输出触发信号。
8
CN 110659083 A[0083]
说 明 书
6/7页
本发明中并不局限于通过创建条件变量以及互斥锁对关键变量进行监控,来保证
共享数据操作的完整性,而且一般有两种方法创建互斥锁,静态方式和动态方式,本发明中对于采用哪种方式创建互斥锁不做限定。
[0084]而在将关键变量保存的数据写入对应的磁盘的持久性文件的过程中,可能有些格式需要进行对应的转换,比如需要件原来的A格式、B格式统一转换为C格式在持久性文件中进行存储,这样能够降低存储占用的空间,而且存储采用统一格式进行存储能够提高存储效率,因而在本发明的一个实施例中,所述序故障重启后恢复内存数据的方法和系统还包括与所述数据转移模块30连接的格式转换单元,所述格式转换单元在所述数据转移模块30将所述关键变量写入磁盘的持久化文件的过程中将所述关键变量转换为预定的格式。[0085]在一个实施例中,在条件变量以及互斥锁被创建之后,监控模块20注册回调函数,回调函数首先获取所有被监控的关键变量的值,数据转移模块30使用cJson库将获取到的变量值依次转化成JSON文本格式,然后使用fopen()函数打开位于磁盘上的持久化文件,使用fputs()函数将JSON格式的文本数据写入持久化文件,实现了数据在磁盘上的存储。[0086]而在完成程序重启之后,需要将持久性文件中的关键数据回写到内存中,而且其顺序还必须与在重启之前被监控时的顺序一致,格式也完全一致,为了提高效率,在完成数据恢复之后,能提醒工作人员,为了解决这一技术问题,在本发明的一个实施例中,所述程序故障重启后恢复内存数据的系统还包括与所述内存回写模块40连接的解析单元、数据恢复提示单元,所述解析单元在所述内存回写模块40从所述磁盘的持久化文件中读取所述关键变量至内存的过程中将所述关键变量解析为预定的格式,所述数据恢复提示单元检测所述解析单元实现数据恢复的过程,并在所述解析单元将所述持久化文件中所有的关键变量解析到所述内存后输出数据恢复提示。
[0087]本发明中对于将所述持久化文件中所有的关键变量解析到所述内存后输出数据恢复提示不做限定,可以是自动进行的,即在数据全部恢复后系统自动完成运行,也可以是通过显示恢复进度,类似于一些系统的安装进度等,显示进度条,或者是在完成数据恢复之后,输出相应的提醒页面,使得工作人员能明白可以进行下一步的操作。[0088]在本发明的一个实施例中,在回写过程中,内存回写模块40使用fopen()函数打开磁盘上的持久化文件,然后使用fgets()函数将JSON格式的文本数据从持久化文件中读出至内存,这一步是获取数据的过程;解析单元使用cJson库对JSON格式的文本数据进行解析,解析后的结果是每个被监控的关键变量的值,解析后的值处于内存中的临时缓冲区内,这一步是解析数据的过程将位于缓冲区中的变量数据依照保存时的次序写入被监控的关键变量中,这样关键变量的值就和程序故障重启前保持一致了,数据的恢复过程至此结束。[0089]综上所述,本发明实施例提供的程序故障重启后恢复内存数据的方法和系统,通过创建关键变量保用户的重要数据,在关键变量的值发生改变后,将关键变量写入磁盘的持久化文件中,在程序重启后,将位于磁盘的持久化文件中的关键变量读取至内存中,实现内存数据的自动恢复,避免了数据丢失,提高了用户体验,增强了程序的健壮性和恢复能力。
[0090]以上对本发明所提供的程序故障重启后恢复内存数据的方法和系统进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人
9
CN 110659083 A
说 明 书
7/7页
员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
10
CN 110659083 A
说 明 书 附 图
1/3页
图1
11
CN 110659083 A
说 明 书 附 图
2/3页
图2
12
CN 110659083 A
说 明 书 附 图
3/3页
图3
13
因篇幅问题不能全部显示,请点此查看更多更全内容