CN117112310A - 后台任务进度保存和恢复方法、装置、设备及存储介质 - Google Patents
后台任务进度保存和恢复方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN117112310A CN117112310A CN202311346325.0A CN202311346325A CN117112310A CN 117112310 A CN117112310 A CN 117112310A CN 202311346325 A CN202311346325 A CN 202311346325A CN 117112310 A CN117112310 A CN 117112310A
- Authority
- CN
- China
- Prior art keywords
- progress
- saving unit
- unit
- background task
- flag
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 105
- 238000004321 preservation Methods 0.000 claims abstract description 160
- 230000002159 abnormal effect Effects 0.000 claims description 26
- 238000011084 recovery Methods 0.000 claims description 20
- 238000004590 computer program Methods 0.000 claims description 14
- 230000005856 abnormality Effects 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 10
- 238000004891 communication Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 2
- 239000003990 capacitor Substances 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1441—Resetting or repowering
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明提供一种后台任务进度保存和恢复方法、装置、设备及存储介质,涉及存储技术领域,该后台任务进度保存方法包括:以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;变形区的起始地址的长度大于一次原子写的长度;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。本发明可以通过软件实现两次原子写过程中发生掉电时的掉电保护。
Description
技术领域
本发明涉及存储技术领域,尤其涉及一种后台任务进度保存和恢复方法、装置、设备及存储介质。
背景技术
在存储技术领域,用户最关心的是数据读写性能和数据安全性。在使用存储设备时难免出现意外掉电等异常状况,如果在突发状况来临时未保存关键数据到非易失内存,则在再次上电后会丢失存储设备运行时的关键数据或系统状态,影响软件系统的稳定性和可靠性。在存储技术领域发生上述问题,最严重的后果是用户数据永久丢失,造成不可估量的损失。
嵌入式软件系统应对异常掉电,一般是软件或硬件都会保存关键数据,用来在下次上电恢复启动时使用。但是在软件保存数据中会遇到这种场景,保存的关键数据单位长度大于一次原子写的长度。例如需要保存地址,地址的长度为37位,一次原子写的长度为32位,存储一份完备地址数据需要完成两次原子写。如果在两次原子写过程中发生掉电会造成数据丢失,导致软件无法恢复为原来的正常状态。
对于这种情况,目前掉电保护的方案通常有三种:加备用电源、使用法拉电容和使用专业掉电保护芯片,但这三种方式都需改变硬件。
因此,现有技术的不足在于:无法通过软件实现两次原子写过程中发生掉电时的掉电保护。
发明内容
本发明提供一种后台任务进度保存和恢复方法、装置、设备及存储介质,用以解决现有技术中无法通过软件实现两次原子写过程中发生掉电时的掉电保护的缺陷。
第一方面,本发明提供一种后台任务进度保存方法,包括:
以变形区为单位运行后台任务,并为所述后台任务绑定第一进度保存单元和第二进度保存单元;所述变形区的起始地址用于表征所述后台任务的当前运行进度,所述变形区的起始地址的长度大于一次原子写的长度;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
针对每个变形区,基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元;所述目标进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
将所述变形区的起始地址写入所述目标进度保存单元,并更新所述目标进度保存单元中的所述第一标志位;所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的。
根据本发明提供的一种后台任务进度保存方法,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元,包括:
将所述第一进度保存单元和所述第二进度保存单元的所述第一标志位进行异或运算后取反,得到所述位运算结果;
基于所述位运算结果,确定所述目标进度保存单元。
根据本发明提供的一种后台任务进度保存方法,所述基于所述位运算结果,确定所述目标进度保存单元,包括:
在所述位运算结果为预设第一值的情况下,确定所述目标进度保存单元为所述第二进度保存单元。
根据本发明提供的一种后台任务进度保存方法,所述基于所述位运算结果,确定所述目标进度保存单元,包括:
在所述位运算结果为预设第二值的情况下,确定所述目标进度保存单元为所述第一进度保存单元。
根据本发明提供的一种后台任务进度保存方法,所述变形区的起始地址的长度为37比特,所述数据字区域包括32比特的数据位的第一数据字区域和包括5比特的数据位、所述第一标志位和所述第二标志位的第二数据字区域;
所述将所述变形区的起始地址写入所述目标进度保存单元,包括:
将所述变形区的起始地址的前32比特的数据写入所述第一数据字区域;
将所述变形区的起始地址的后5比特的数据写入所述第二数据字区域。
根据本发明提供的一种后台任务进度保存方法,在为所述后台任务绑定第一进度保存单元和第二进度保存单元之后,还包括:
将所述第一进度保存单元和所述第二进度保存单元的所述第一标志位和所述第二标志位均初始化为预设第二值。
根据本发明提供的一种后台任务进度保存方法,所述更新所述目标进度保存单元中的所述第一标志位,所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的,包括:
将所述目标进度保存单元的所述第一标志位进行比特位翻转;
在所述目标进度保存单元首次写入数据时,将所述目标进度保存单元的第二标志位设置为预设第一值。
根据本发明提供的一种后台任务进度保存方法,还包括:通过滑动变形区窗口遍历每个所述变形区。
根据本发明提供的一种后台任务进度保存方法,各所述变形区的长度相同,所述变形区窗口的长度与单个所述变形区的长度相同。
根据本发明提供的一种后台任务进度保存方法,还包括:在遍历完所述后台任务对应的所有变形区之后,释放所述第一进度保存单元和所述第二进度保存单元。
第二方面,本发明还提供一种后台任务进度恢复方法,包括:
读取第一进度保存单元和第二进度保存单元的第二标志位;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
在所述第二进度保存单元的所述第二标志位已更新的情况下,读取所述第一进度保存单元和所述第二进度保存单元的所述第一标志位;
基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;所述第三进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常;起始地址为所述变形区的起始地址,所述变形区的起始地址的长度大于一次原子写的长度;
将所述第三进度保存单元中写入的起始地址与所述变形区的长度进行相加,得到所述后台任务的当前运行进度。
根据本发明提供的一种后台任务进度恢复方法,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元,包括:
在所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果为预设第一值的情况下,确定所述后台任务的上一运行进度写入正常的第三进度保存单元为所述第二进度保存单元;所述另一进度保存单元为所述第一进度保存单元;
所述在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常,包括:
在所述第二进度保存单元中写入的起始地址减去所述第一进度保存单元中写入的起始地址得到的差值不等于所述变形区的长度的情况下,确定所述第一进度保存单元中所述后台任务的当前运行进度写入异常。
根据本发明提供的一种后台任务进度恢复方法,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元,包括:
在所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果为预设第二值的情况下,确定所述后台任务的上一运行进度写入正常的第三进度保存单元为所述第一进度保存单元;所述另一进度保存单元为所述第二进度保存单元;
所述在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常,包括:
在所述第一进度保存单元中写入的起始地址减去所述第二进度保存单元中写入的起始地址得到的差值不等于所述变形区的长度的情况下,确定所述第二进度保存单元中所述后台任务的当前运行进度写入异常。
根据本发明提供的一种后台任务进度恢复方法,还包括:在所述第三进度保存单元中写入的起始地址减去所述另一进度保存单元中写入的起始地址得到的差值等于所述变形区的长度的情况下,将所述另一进度保存单元中写入的起始地址确定为所述后台任务的当前运行进度。
根据本发明提供的一种后台任务进度恢复方法,还包括:在所述第一进度保存单元和所述第二进度保存单元的所述第二标志位均为预设第二值的情况下,确定所述后台任务未开始运行。
根据本发明提供的一种后台任务进度恢复方法,还包括:在确定所述后台任务未开始运行之后,确定所述后台任务的当前运行进度为第一个所述变形区的起始地址。
第三方面,本发明还提供一种后台任务进度保存装置,包括:
运行模块,用于以变形区为单位运行后台任务;所述变形区的起始地址用于表征所述后台任务的当前运行进度,所述变形区的起始地址的长度大于一次原子写的长度;
绑定模块,用于为所述后台任务绑定第一进度保存单元和第二进度保存单元;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
确定模块,用于针对每个变形区,基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元;所述目标进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
写入模块,用于将所述变形区的起始地址写入所述目标进度保存单元,并更新所述目标进度保存单元中的所述第一标志位;所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的。
第四方面,本发明还提供一种后台任务进度恢复装置,包括:
第一读取模块,用于读取第一进度保存单元和第二进度保存单元的第二标志位;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
第二读取模块,用于在所述第二进度保存单元的所述第二标志位已更新的情况下,读取所述第一进度保存单元和所述第二进度保存单元的所述第一标志位;
单元确定模块,用于基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;所述第三进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
异常确定模块,用于在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于所述变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常;起始地址为所述变形区的起始地址,所述变形区的起始地址的长度大于一次原子写的长度;
进度恢复模块,用于将所述第三进度保存单元中写入的起始地址与所述变形区的长度进行相加,得到所述后台任务的当前运行进度。
第五方面,本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述第一方面任一种所述的后台任务进度保存方法,或实现如上述第二方面任一种所述的后台任务进度恢复方法。
第六方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述第一方面任一种所述的后台任务进度保存方法,或实现如上述第二方面任一种所述的后台任务进度恢复方法。
第七方面,本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述第一方面任一种所述的后台任务进度保存方法,或实现如上述第二方面任一种所述的后台任务进度恢复方法。
本发明提供的后台任务进度保存和恢复方法、装置、设备及存储介质,首先,以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;也即,设计两个进度保存单元保存后台任务的运行进度;变形区的起始地址用于表征后台任务的当前运行进度,由于变形区的起始地址的长度大于一次原子写的长度,保存一份完整的变形区的起始地址,需要完成两次原子写,故设计了新的数据结构,即第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;并且,数据字区域中设置有第一标志位和第二标志位,第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;针对每个变形区,通过第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,可以确定该变形区的起始地址要写入的目标进度保存单元为第一进度保存单元还是第二进度保存单元;最后,将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位,使得各变形区的起始地址可以交替写入第一进度保存单元和第二进度保存单元,可以保证在两次原子写过程中发生掉电时其中一个进度保存单元中的运行进度写入正常;目标进度保存单元中的第二标志位是在首次写入数据时更新的,也即,在恢复时通过第二标志位是否更新可以判断出目标进度保存单元是否首次写入数据,从而根据后台任务的上一运行进度写入正常的进度保存单元和一个变形区的长度恢复出后台任务的当前运行进度。因此,本发明可以通过软件实现两次原子写过程中发生掉电时的掉电保护,从而大大提升软件系统可靠性与系统效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的后台任务进度保存方法的流程示意图;
图2是本发明实施例提供的第一进度保存单元和第二进度保存单元的数据结构示意图;
图3是本发明实施例提供的保存后台任务的运行进度时第一标志位和第二标志位的变化示意图;
图4是本发明实施例提供的后台任务进度恢复方法的流程示意图;
图5是本发明实施例提供的后台任务的当前运行进度写入异常时第一标志位和第二标志位的示意图;
图6是本发明实施例提供的后台任务的当前运行进度写入正常时第一标志位和第二标志位的示意图;
图7是本发明实施例提供的后台任务进度保存装置的结构示意图;
图8是本发明实施例提供的后台任务进度恢复装置的结构示意图;
图9是本发明实施例提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图3描述本发明的后台任务进度保存方法。
请参照图1,图1是本发明实施例提供的后台任务进度保存方法的流程示意图。如图1所示,该方法可以包括以下步骤:
步骤101、以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;变形区的起始地址用于表征后台任务的当前运行进度,变形区的起始地址的长度大于一次原子写的长度;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
步骤102、针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;目标进度保存单元为第一进度保存单元或第二进度保存单元;
步骤103、将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。
在步骤101中,关于变形区,独立磁盘组成的具有冗余性的阵列(Redundant Arrayof Independent Disks,RAID)中若干连续条带正在进行变形操作,这些连续条带组成变形区,变形区的大小取决于并发条带数量。
其中,RAID是由很多块独立的磁盘组合成一个容量巨大的磁盘组。RAID可以利用个别磁盘提供数据所产生的加成效果提升整个磁盘系统效能。利用这项技术,将数据切割成许多区段,分别存放在各个硬盘上。
条带(stripe)是把连续的一段数据按照一定尺寸(size)切分成多个数据块,这些数据块可以存储在指定数量的磁盘中。
以变形区为单位运行后台任务,也即,每遍历完一个变形区,保存一次后台任务的运行进度。
为后台任务绑定第一进度保存单元和第二进度保存单元;也即,设计两个进度保存单元保存后台任务的运行进度。
对于每个正在遍历的变形区,该变形区的起始地址用于表征后台任务的当前运行进度。后台任务的运行进度的定义为变形区的起始水位线(Start Water Mark,SWM),用变形区的起始地址表示。变形区的起始地址为RAID中逻辑块的起始地址(Start Logic BlockAddress,SLBA)。
由于变形区的起始地址的长度大于一次原子写的长度,保存一份完整的变形区的起始地址,需要完成两次原子写,故设计了新的数据结构,即第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域。
并且,数据字区域中设置有第一标志位和第二标志位,第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志。
可选地,在为后台任务绑定第一进度保存单元和第二进度保存单元之后,还包括:将第一进度保存单元和第二进度保存单元的第一标志位和第二标志位均初始化为预设第二值。在目标进度保存单元首次写入数据时,将目标进度保存单元的第二标志位设置为预设第一值。在本实施例中,预设第一值可以为1,预设第二值可以为0。
在步骤102中,针对每个变形区,通过第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,可以确定该变形区的起始地址要写入的目标进度保存单元是第一进度保存单元还是第二进度保存单元。
在步骤103中,将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位。由于第一标志位为写入数据时比特位翻转标志,会随着数据的写入而翻转,使得各变形区的起始地址可以交替写入第一进度保存单元和第二进度保存单元,可以保证在两次原子写过程中发生掉电时其中一个进度保存单元中的运行进度写入正常。
目标进度保存单元中的第二标志位是在首次写入数据时更新的,也即,在恢复时通过第二标志位是否更新可以判断出目标进度保存单元是否首次写入数据,从而根据后台任务的上一运行进度写入正常的进度保存单元和一个变形区的长度恢复出后台任务的当前运行进度。
本发明实施例提供的后台任务进度保存方法,首先,以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;也即,设计两个进度保存单元保存后台任务的运行进度;变形区的起始地址用于表征后台任务的当前运行进度,由于变形区的起始地址的长度大于一次原子写的长度,保存一份完整的变形区的起始地址,需要完成两次原子写,故设计了新的数据结构,即第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;并且,数据字区域中设置有第一标志位和第二标志位,第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;针对每个变形区,通过第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,可以确定该变形区的起始地址要写入的目标进度保存单元为第一进度保存单元还是第二进度保存单元;最后,将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位,使得各变形区的起始地址可以交替写入第一进度保存单元和第二进度保存单元,可以保证在两次原子写过程中发生掉电时其中一个进度保存单元中的运行进度写入正常;目标进度保存单元中的第二标志位是在首次写入数据时更新的,也即,在恢复时通过第二标志位是否更新可以判断出目标进度保存单元是否首次写入数据,从而根据后台任务的上一运行进度写入正常的进度保存单元和一个变形区的长度恢复出后台任务的当前运行进度。因此,本发明实施例可以通过软件实现两次原子写过程中发生掉电时的掉电保护。
进一步地,还可以大幅度降低算法的时间、空间复杂度,同时有效加速RAID阵列后台任务保存进度的速率,提高系统在异常掉电情况下的可靠性。
在一种示例实施例中,变形区的起始地址的长度为37比特,数据字区域包括32比特的数据位的第一数据字区域和包括5比特的数据位、第一标志位和第二标志位的第二数据字区域;步骤103可以包括:将变形区的起始地址的前32比特的数据写入第一数据字区域;将变形区的起始地址的后5比特的数据写入第二数据字区域。
示例性地,如图2所示,设计两个进度保存单元保存后台任务的运行进度,即第一进度保存单元和第二进度保存单元。
一次原子写的长度为32比特,而变形区的起始地址的长度为37比特,也即变形区的起始地址的长度大于一次原子写的长度。因此,保存一份完整的变形区的起始地址,需要完成两次原子写,故设计了如图2所示的新的数据结构。
具体地,第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域,即第一数据字区域DW0和第二数据字区域DW1,第一数据字区域DW0包括32比特的数据位(SLBA[0,31]);第二数据字区域DW1包括5比特的数据位(SLBA[32,36])、第一标志位flag1和第二标志位flag2。
在写入数据时,将变形区的起始地址的前32比特的数据写入第一数据字区域,然后将变形区的起始地址的后5比特的数据写入第二数据字区域。
在本实施例中,设计了第一进度保存单元和第二进度保存单元的具体数据结构,第一进度保存单元和第二进度保存单元的数据字区域包括32比特的数据位的第一数据字区域和包括5比特的数据位、第一标志位和第二标志位的第二数据字区域,在写入数据时,将变形区的起始地址的前32比特的数据写入第一数据字区域,然后将变形区的起始地址的后5比特的数据写入第二数据字区域,可以将长度为37比特的变形区的起始地址通过两次原子写进行写入。
在一种示例实施例中,步骤102可以包括以下子步骤:
步骤1021、将第一进度保存单元和第二进度保存单元的第一标志位进行异或运算后取反,得到位运算结果;
步骤1022、基于位运算结果,确定目标进度保存单元。
在步骤1022中,可选地,在位运算结果为预设第一值的情况下,确定目标进度保存单元为第二进度保存单元。在位运算结果为预设第二值的情况下,确定目标进度保存单元为第一进度保存单元。在本实施例中,预设第一值可以为1,预设第二值可以为0。
示例性地,如图3所示,初始化后第一进度保存单元和第二进度保存单元的第一标志位均为0。
对于第一次写入,对两个第一标志位进行异或运算后取反得到1,确定目标进度保存单元为第二进度保存单元。将第二进度保存单元的第一标志位进行比特位翻转,使得第二进度保存单元的第一标志位翻转为1。由于第二进度保存单元是首次写入数据,还将第二进度保存单元的第二标志位设置为1。
对于第二次写入,对两个第一标志位进行异或运算后取反得到0,确定目标进度保存单元为第一进度保存单元。将第一进度保存单元的第一标志位进行比特位翻转,使得第一进度保存单元的第一标志位翻转为1。由于第一进度保存单元是首次写入数据,还将第二进度保存单元的第二标志位设置为1。
对于第三次写入,对两个第一标志位进行异或运算后取反得到1,确定目标进度保存单元为第二进度保存单元。将第二进度保存单元的第一标志位进行比特位翻转,使得第一进度保存单元的第一标志位翻转为0。两个进度保存单元的第二标志位不变。
以此类推,使各变形区的起始地址可以交替写入第一进度保存单元和第二进度保存单元。
在本实施例中,可以通过对第一进度保存单元和第二进度保存单元的第一标志位进行异或运算后取反,确定变形区的起始地址要写入的目标进度保存单元为第一进度保存单元还是第二进度保存单元,从而使各变形区的起始地址可以交替写入第一进度保存单元和第二进度保存单元。
可选地,通过滑动变形区窗口遍历每个变形区。也即,在当前变形区内所有条带完成后,滑动变形区窗口,变形区窗口每滑动一次,后台任务就会把当前运行进度写入对应的进度保存单元。优选地,各变形区的长度相同,变形区窗口的长度与单个变形区的长度相同,可以便于快速准确地遍历各个变形区。
可选地,在遍历完后台任务对应的所有变形区之后,释放第一进度保存单元和第二进度保存单元,可以释放后台任务的运行进度所占的存储空间。
下面结合图4-图6描述本发明的后台任务进度恢复方法。
请参照图4,图4是本发明实施例提供的后台任务进度恢复方法的流程示意图。如图4所示,该方法可以包括以下步骤:
步骤401、读取第一进度保存单元和第二进度保存单元的第二标志位;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
步骤402、在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;
步骤403、基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;第三进度保存单元为第一进度保存单元或第二进度保存单元;
步骤404、在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定另一进度保存单元中后台任务的当前运行进度写入异常;起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度;
步骤405、将第三进度保存单元中写入的起始地址与变形区的长度进行相加,得到后台任务的当前运行进度。
在步骤401中,采用两个进度保存单元保存后台任务的运行进度,后台任务的运行进度用变形区的起始地址表示。
第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域,可以保存长度大于一次原子写的长度的变形区的起始地址。
数据字区域中设置有第一标志位和第二标志位,第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志。每写入一次数据,第一标志位的比特位翻转一次。第二标志位仅在首次写入数据时更新,其他时候保持不变。
读取第一进度保存单元和第二进度保存单元的第二标志位,可以判断出是否首次写入数据。
在步骤402中,由于第一次写入数据时是写入第二进度保存单元中,在第二进度保存单元的第二标志位已更新的情况下,意味着进度保存单元已经从初始化阶段进入数据写入阶段,读取第一进度保存单元和第二进度保存单元的第一标志位,用于后续判断数据是否写入异常。
可选地,在第二进度保存单元的第二标志位更新为预设第一值的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位。在本实施例中,预设第一值可以为1。
在步骤403中,计算第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,根据异或运算结果确定第一进度保存单元和第二进度保存单元中后台任务的上一运行进度写入正常的第三进度保存单元。
在步骤404中,进度保存单元中写入的起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度。
第三进度保存单元为第一进度保存单元或第二进度保存单元。如果第三进度保存单元为第一进度保存单元,那么另一进度保存单元为第二进度保存单元。如果第三进度保存单元为第二进度保存单元,那么另一进度保存单元为第一进度保存单元。
判断第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值是否等于变形区的长度。若否,则意味着另一进度保存单元在两次原子写的过程中仅第一次原子写正常,第二次原子写错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得另一进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度。也即,另一进度保存单元中后台任务的当前运行进度写入异常。
在步骤405中,由于第三进度保存单元中写入的上一运行进度正常,将第三进度保存单元中写入的起始地址与变形区的长度进行相加,便可以得到后台任务的当前运行进度,从而通过软件实现两次原子写过程中发生掉电时的掉电保护。
本发明实施例提供的后台任务进度恢复方法,首先,读取第一进度保存单元和第二进度保存单元的第二标志位,由于第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域,数据字区域中设置有第一标志位和第二标志位,第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志,通过第二标志位是否更新可以判断出是否首次写入数据,也即是否从初始化阶段进入数据写入阶段;而后,在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元,第三进度保存单元为第一进度保存单元或第二进度保存单元;然后,由于变形区的起始地址的长度大于一次原子写的长度,一个完整的变形区的起始地址的保存需要完成两次原子写;在判断出第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,则意味着另一进度保存单元在两次原子写的过程中仅第一次原子写正常,第二次原子写错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得另一进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度;也即,另一进度保存单元中后台任务的当前运行进度写入异常;最后,由于第三进度保存单元中写入的上一运行进度正常,将第三进度保存单元中写入的起始地址与变形区的长度进行相加,便可以得到后台任务的当前运行进度,从而通过软件实现两次原子写过程中发生掉电时的掉电保护。
进一步地,还可以大幅度降低算法的时间、空间复杂度,同时有效加速RAID阵列后台任务保存进度的速率,提高系统在异常掉电情况下的可靠性。
在一种示例实施例中,步骤403包括:在第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第一值的情况下,确定后台任务的上一运行进度写入正常的第三进度保存单元为第二进度保存单元;另一进度保存单元为第一进度保存单元;
步骤404包括:在第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定第一进度保存单元中后台任务的当前运行进度写入异常。
具体地,在第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第一值的情况下,确定第二进度保存单元的上一运行进度写入正常。在本实施例中,预设第一值可以为1。在第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,意味着第一进度保存单元在两次原子写的过程中仅第一次原子写正常,第二次原子写错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得第一进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度;也即,第一进度保存单元中后台任务的当前运行进度写入异常。
在本实施例中,可以通过第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第一值确定第二进度保存单元的上一运行进度写入正常。以及,通过第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值不等于变形区的长度确定第一进度保存单元在第二次原子写时出现了错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得另一进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度,从而确定出第一进度保存单元中后台任务的当前运行进度写入异常。
在另一种示例实施例中,步骤403包括:在第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第二值的情况下,确定后台任务的上一运行进度写入正常的第三进度保存单元为第一进度保存单元;另一进度保存单元为第二进度保存单元;在本实施例中,预设第二值可以为0;
步骤404包括:在第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定第二进度保存单元中后台任务的当前运行进度写入异常。
示例性地,如图5所示,第一进度保存单元和第二进度保存单元的第一标志位均为1,异或运算结果为0,确定第一进度保存单元的上一运行进度写入正常。在第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,意味着第二进度保存单元在两次原子写的过程中仅第一次原子写正常,第二次原子写错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得第二进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度;也即,第二进度保存单元中后台任务的当前运行进度写入异常。
需要说明的是,图5中第二进度保存单元的第二数据字区域的“×”表示本次第二次原子写时没有写入,出现了数据丢失,但是上一次写入的数据仍然保存在第二进度保存单元的第二数据字区域中。
在本实施例中,可以通过第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第二值确定第一进度保存单元的上一运行进度写入正常。以及,通过第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值不等于变形区的长度确定第二进度保存单元在第二次原子写时出现了错误,导致第二次原子写的剩余地址数据没有写入,保留的是上一次写入时的剩余地址数据,使得第二进度保存单元中保存的起始地址不同于完整起始地址,差值不等于变形区的长度,从而确定出第二进度保存单元中后台任务的当前运行进度写入异常。
在一种示例实施例中,在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,将另一进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
具体地,在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,意味着另一进度保存单元中写入的起始地址是完整的,两次原子写过程中没有出现错误,将另一进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
可选地,在第三进度保存单元为第二进度保存单元的情况下,确定另一进度保存单元为第一进度保存单元;在第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,意味着第一进度保存单元中写入的起始地址是完整的,两次原子写过程中没有出现错误,将第一进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
可选地,在第三进度保存单元为第一进度保存单元的情况下,确定另一进度保存单元为第二进度保存单元;如图6所示,在第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,意味着第二进度保存单元中写入的起始地址是完整的,两次原子写过程中没有出现错误,将第二进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
在一种示例实施例中,在第一进度保存单元和第二进度保存单元的第二标志位均为预设第二值的情况下,确定后台任务未开始运行。可选地,在确定后台任务未开始运行之后,确定后台任务的当前运行进度为第一个变形区的起始地址,可以表征后台任务未开始运行。在本实施例中,预设第二值可以为0。
下面对本发明提供的后台任务进度保存和恢复装置进行描述,下文描述的后台任务进度保存和恢复装置与上文描述的后台任务进度保存和恢复方法可相互对应参照。
请参照图7,图7是本发明实施例提供的后台任务进度保存装置的结构示意图。如图7所示,该装置可以包括:
运行模块701,用于以变形区为单位运行后台任务;变形区的起始地址用于表征后台任务的当前运行进度,变形区的起始地址的长度大于一次原子写的长度;
绑定模块702,用于为后台任务绑定第一进度保存单元和第二进度保存单元;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
确定模块703,用于针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;目标进度保存单元为第一进度保存单元或第二进度保存单元;
写入模块704,用于将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。
在一种示例实施例中,确定模块703包括:
位运算单元,用于将第一进度保存单元和第二进度保存单元的第一标志位进行异或运算后取反,得到位运算结果;
确定单元,用于基于位运算结果,确定目标进度保存单元。
在一种示例实施例中,确定单元具体用于:在位运算结果为预设第一值的情况下,确定目标进度保存单元为第二进度保存单元。
在一种示例实施例中,确定单元具体用于:在位运算结果为预设第二值的情况下,确定目标进度保存单元为第一进度保存单元。
在一种示例实施例中,变形区的起始地址的长度为37比特,数据字区域包括32比特的数据位的第一数据字区域和包括5比特的数据位、第一标志位和第二标志位的第二数据字区域;
写入模块704具体用于:将变形区的起始地址的前32比特的数据写入第一数据字区域;将变形区的起始地址的后5比特的数据写入第二数据字区域。
在一种示例实施例中,还包括:
初始化模块,用于在为后台任务绑定第一进度保存单元和第二进度保存单元之后,将第一进度保存单元和第二进度保存单元的第一标志位和第二标志位均初始化为预设第二值。
在一种示例实施例中,写入模块704具体用于:将目标进度保存单元的第一标志位进行比特位翻转;在目标进度保存单元首次写入数据时,将目标进度保存单元的第二标志位设置为预设第一值。
在一种示例实施例中,还包括:
遍历模块,用于通过滑动变形区窗口遍历每个变形区。
在一种示例实施例中,各变形区的长度相同,变形区窗口的长度与单个变形区的长度相同。
在一种示例实施例中,还包括:
释放模块,用于在遍历完后台任务对应的所有变形区之后,释放第一进度保存单元和第二进度保存单元。
请参照图8,图8是本发明实施例提供的后台任务进度恢复装置的结构示意图。如图8所示,该装置可以包括:
第一读取模块801,用于读取第一进度保存单元和第二进度保存单元的第二标志位;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
第二读取模块802,用于在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;
单元确定模块803,用于基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;第三进度保存单元为第一进度保存单元或第二进度保存单元;
异常确定模块804,用于在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定另一进度保存单元中后台任务的当前运行进度写入异常;起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度;
进度恢复模块805,用于将第三进度保存单元中写入的起始地址与变形区的长度进行相加,得到后台任务的当前运行进度。
在一种示例实施例中,单元确定模块803具体用于:在第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第一值的情况下,确定后台任务的上一运行进度写入正常的第三进度保存单元为第二进度保存单元;另一进度保存单元为第一进度保存单元;
异常确定模块804具体用于:在第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定第一进度保存单元中后台任务的当前运行进度写入异常。
在一种示例实施例中,单元确定模块803具体用于:在第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果为预设第二值的情况下,确定后台任务的上一运行进度写入正常的第三进度保存单元为第一进度保存单元;另一进度保存单元为第二进度保存单元;
异常确定模块804具体用于:在第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定第二进度保存单元中后台任务的当前运行进度写入异常。
在一种示例实施例中,还包括:进度确定模块,用于在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,将另一进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
在一种示例实施例中,进度确定模块具体用于:
在第三进度保存单元为第二进度保存单元的情况下,确定另一进度保存单元为第一进度保存单元;
在第二进度保存单元中写入的起始地址减去第一进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,将第一进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
在一种示例实施例中,进度确定模块具体用于:
在第三进度保存单元为第一进度保存单元的情况下,确定另一进度保存单元为第二进度保存单元;
在第一进度保存单元中写入的起始地址减去第二进度保存单元中写入的起始地址得到的差值等于变形区的长度的情况下,将第二进度保存单元中写入的起始地址确定为后台任务的当前运行进度。
在一种示例实施例中,还包括:运行确定模块,用于在第一进度保存单元和第二进度保存单元的第二标志位均为0的情况下,确定后台任务未开始运行。
在一种示例实施例中,运行确定模块还用于:在确定后台任务未开始运行之后,确定后台任务的当前运行进度为第一个变形区的起始地址。
在一种示例实施例中,第二读取模块802具体用于:在第二进度保存单元的第二标志位更新为预设第一值的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位。
图9示例了一种电子设备的实体结构示意图,如图9所示,该电子设备可以包括:处理器(processor)910、通信接口(Communications Interface)920、存储器(memory)930和通信总线940,其中,处理器910,通信接口920,存储器930通过通信总线940完成相互间的通信。
处理器910可以调用存储器930中的逻辑指令,以执行后台任务进度保存方法,该方法包括:
以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;变形区的起始地址用于表征后台任务的当前运行进度,变形区的起始地址的长度大于一次原子写的长度;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;目标进度保存单元为第一进度保存单元或第二进度保存单元;
将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。
或者,处理器910可以调用存储器930中的逻辑指令,以执行后台任务进度恢复方法,该方法包括:
读取第一进度保存单元和第二进度保存单元的第二标志位;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;
基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;第三进度保存单元为第一进度保存单元或第二进度保存单元;
在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定另一进度保存单元中后台任务的当前运行进度写入异常;起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度;
将第三进度保存单元中写入的起始地址与变形区的长度进行相加,得到后台任务的当前运行进度。
此外,上述的存储器930中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上。
所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的后台任务进度保存方法,该方法包括:
以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;变形区的起始地址用于表征后台任务的当前运行进度,变形区的起始地址的长度大于一次原子写的长度;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;目标进度保存单元为第一进度保存单元或第二进度保存单元;
将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。
或者,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的后台任务进度恢复方法,该方法包括:
读取第一进度保存单元和第二进度保存单元的第二标志位;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;
基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;第三进度保存单元为第一进度保存单元或第二进度保存单元;
在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定另一进度保存单元中后台任务的当前运行进度写入异常;起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度;
将第三进度保存单元中写入的起始地址与变形区的长度进行相加,得到后台任务的当前运行进度。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序。
该计算机程序被处理器执行时实现以执行上述各方法提供的后台任务进度保存方法,该方法包括:
以变形区为单位运行后台任务,并为后台任务绑定第一进度保存单元和第二进度保存单元;变形区的起始地址用于表征后台任务的当前运行进度,变形区的起始地址的长度大于一次原子写的长度;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
针对每个变形区,基于第一进度保存单元和第二进度保存单元的第一标志位的位运算结果,确定目标进度保存单元;目标进度保存单元为第一进度保存单元或第二进度保存单元;
将变形区的起始地址写入目标进度保存单元,并更新目标进度保存单元中的第一标志位;目标进度保存单元中的第二标志位是在首次写入数据时更新的。
或者,该计算机程序被处理器执行时实现以执行上述各方法提供的后台任务进度恢复方法,该方法包括:
读取第一进度保存单元和第二进度保存单元的第二标志位;第一进度保存单元和第二进度保存单元均包括两次原子写的长度的数据字区域;数据字区域中设置有第一标志位和第二标志位;第一标志位为写入数据时比特位翻转标志,第二标志位为首次写入数据标志;
在第二进度保存单元的第二标志位已更新的情况下,读取第一进度保存单元和第二进度保存单元的第一标志位;
基于第一进度保存单元和第二进度保存单元的第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;第三进度保存单元为第一进度保存单元或第二进度保存单元;
在第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定另一进度保存单元中后台任务的当前运行进度写入异常;起始地址为变形区的起始地址,变形区的起始地址的长度大于一次原子写的长度;
将第三进度保存单元中写入的起始地址与变形区的长度进行相加,得到后台任务的当前运行进度。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (20)
1.一种后台任务进度保存方法,其特征在于,包括:
以变形区为单位运行后台任务,并为所述后台任务绑定第一进度保存单元和第二进度保存单元;所述变形区的起始地址用于表征所述后台任务的当前运行进度,所述变形区的起始地址的长度大于一次原子写的长度;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
针对每个变形区,基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元;所述目标进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
将所述变形区的起始地址写入所述目标进度保存单元,并更新所述目标进度保存单元中的所述第一标志位;所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的。
2.根据权利要求1所述的后台任务进度保存方法,其特征在于,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元,包括:
将所述第一进度保存单元和所述第二进度保存单元的所述第一标志位进行异或运算后取反,得到所述位运算结果;
基于所述位运算结果,确定所述目标进度保存单元。
3.根据权利要求2所述的后台任务进度保存方法,其特征在于,所述基于所述位运算结果,确定所述目标进度保存单元,包括:
在所述位运算结果为预设第一值的情况下,确定所述目标进度保存单元为所述第二进度保存单元。
4.根据权利要求2所述的后台任务进度保存方法,其特征在于,所述基于所述位运算结果,确定所述目标进度保存单元,包括:
在所述位运算结果为预设第二值的情况下,确定所述目标进度保存单元为所述第一进度保存单元。
5.根据权利要求1至4任一项所述的后台任务进度保存方法,其特征在于,所述变形区的起始地址的长度为37比特,所述数据字区域包括32比特的数据位的第一数据字区域和包括5比特的数据位、所述第一标志位和所述第二标志位的第二数据字区域;
所述将所述变形区的起始地址写入所述目标进度保存单元,包括:
将所述变形区的起始地址的前32比特的数据写入所述第一数据字区域;
将所述变形区的起始地址的后5比特的数据写入所述第二数据字区域。
6.根据权利要求1至4任一项所述的后台任务进度保存方法,其特征在于,在为所述后台任务绑定第一进度保存单元和第二进度保存单元之后,还包括:
将所述第一进度保存单元和所述第二进度保存单元的所述第一标志位和所述第二标志位均初始化为预设第二值。
7.根据权利要求6所述的后台任务进度保存方法,其特征在于,所述更新所述目标进度保存单元中的所述第一标志位,所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的,包括:
将所述目标进度保存单元的所述第一标志位进行比特位翻转;
在所述目标进度保存单元首次写入数据时,将所述目标进度保存单元的第二标志位设置为预设第一值。
8.根据权利要求1至4任一项所述的后台任务进度保存方法,其特征在于,还包括:
通过滑动变形区窗口遍历每个所述变形区。
9.根据权利要求8所述的后台任务进度保存方法,其特征在于,各所述变形区的长度相同,所述变形区窗口的长度与单个所述变形区的长度相同。
10.根据权利要求8所述的后台任务进度保存方法,其特征在于,还包括:
在遍历完所述后台任务对应的所有变形区之后,释放所述第一进度保存单元和所述第二进度保存单元。
11.一种后台任务进度恢复方法,其特征在于,包括:
读取第一进度保存单元和第二进度保存单元的第二标志位;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
在所述第二进度保存单元的所述第二标志位已更新的情况下,读取所述第一进度保存单元和所述第二进度保存单元的所述第一标志位;
基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;所述第三进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常;起始地址为所述变形区的起始地址,所述变形区的起始地址的长度大于一次原子写的长度;
将所述第三进度保存单元中写入的起始地址与所述变形区的长度进行相加,得到所述后台任务的当前运行进度。
12.根据权利要求11所述的后台任务进度恢复方法,其特征在于,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元,包括:
在所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果为预设第一值的情况下,确定所述后台任务的上一运行进度写入正常的第三进度保存单元为所述第二进度保存单元;所述另一进度保存单元为所述第一进度保存单元;
所述在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常,包括:
在所述第二进度保存单元中写入的起始地址减去所述第一进度保存单元中写入的起始地址得到的差值不等于所述变形区的长度的情况下,确定所述第一进度保存单元中所述后台任务的当前运行进度写入异常。
13.根据权利要求11所述的后台任务进度恢复方法,其特征在于,所述基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元,包括:
在所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果为预设第二值的情况下,确定所述后台任务的上一运行进度写入正常的第三进度保存单元为所述第一进度保存单元;所述另一进度保存单元为所述第二进度保存单元;
所述在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常,包括:
在所述第一进度保存单元中写入的起始地址减去所述第二进度保存单元中写入的起始地址得到的差值不等于所述变形区的长度的情况下,确定所述第二进度保存单元中所述后台任务的当前运行进度写入异常。
14.根据权利要求11所述的后台任务进度恢复方法,其特征在于,还包括:
在所述第三进度保存单元中写入的起始地址减去所述另一进度保存单元中写入的起始地址得到的差值等于所述变形区的长度的情况下,将所述另一进度保存单元中写入的起始地址确定为所述后台任务的当前运行进度。
15.根据权利要求11至14中任一项所述的后台任务进度恢复方法,其特征在于,还包括:
在所述第一进度保存单元和所述第二进度保存单元的所述第二标志位均为预设第二值的情况下,确定所述后台任务未开始运行。
16.根据权利要求15所述的后台任务进度恢复方法,其特征在于,还包括:
在确定所述后台任务未开始运行之后,确定所述后台任务的当前运行进度为第一个所述变形区的起始地址。
17.一种后台任务进度保存装置,其特征在于,包括:
运行模块,用于以变形区为单位运行后台任务;所述变形区的起始地址用于表征所述后台任务的当前运行进度,所述变形区的起始地址的长度大于一次原子写的长度;
绑定模块,用于为所述后台任务绑定第一进度保存单元和第二进度保存单元;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
确定模块,用于针对每个变形区,基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的位运算结果,确定目标进度保存单元;所述目标进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
写入模块,用于将所述变形区的起始地址写入所述目标进度保存单元,并更新所述目标进度保存单元中的所述第一标志位;所述目标进度保存单元中的所述第二标志位是在首次写入数据时更新的。
18.一种后台任务进度恢复装置,其特征在于,包括:
第一读取模块,用于读取第一进度保存单元和第二进度保存单元的第二标志位;所述第一进度保存单元和所述第二进度保存单元均包括两次原子写的长度的数据字区域;所述数据字区域中设置有第一标志位和第二标志位;所述第一标志位为写入数据时比特位翻转标志,所述第二标志位为首次写入数据标志;
第二读取模块,用于在所述第二进度保存单元的所述第二标志位已更新的情况下,读取所述第一进度保存单元和所述第二进度保存单元的所述第一标志位;
单元确定模块,用于基于所述第一进度保存单元和所述第二进度保存单元的所述第一标志位的异或运算结果,确定后台任务的上一运行进度写入正常的第三进度保存单元;所述第三进度保存单元为所述第一进度保存单元或所述第二进度保存单元;
异常确定模块,用于在所述第三进度保存单元中写入的起始地址减去另一进度保存单元中写入的起始地址得到的差值不等于变形区的长度的情况下,确定所述另一进度保存单元中所述后台任务的当前运行进度写入异常;起始地址为所述变形区的起始地址,所述变形区的起始地址的长度大于一次原子写的长度;
进度恢复模块,用于将所述第三进度保存单元中写入的起始地址与所述变形区的长度进行相加,得到所述后台任务的当前运行进度。
19.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至10任一项所述的后台任务进度保存方法,或实现如权利要求11至16任一项所述的后台任务进度恢复方法。
20.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述的后台任务进度保存方法,或实现如权利要求11至16任一项所述的后台任务进度恢复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311346325.0A CN117112310B (zh) | 2023-10-18 | 2023-10-18 | 后台任务进度保存和恢复方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311346325.0A CN117112310B (zh) | 2023-10-18 | 2023-10-18 | 后台任务进度保存和恢复方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117112310A true CN117112310A (zh) | 2023-11-24 |
CN117112310B CN117112310B (zh) | 2024-02-20 |
Family
ID=88800422
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311346325.0A Active CN117112310B (zh) | 2023-10-18 | 2023-10-18 | 后台任务进度保存和恢复方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117112310B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104218A (zh) * | 2019-11-29 | 2020-05-05 | 北京浪潮数据技术有限公司 | 存储系统数据同步方法、装置、设备及可读存储介质 |
CN113110729A (zh) * | 2021-04-07 | 2021-07-13 | 山东英信计算机技术有限公司 | 提升服务器数据安全性的供电方法、系统和存储介质 |
CN113360312A (zh) * | 2021-06-24 | 2021-09-07 | 苏州浪潮智能科技有限公司 | 一种硬盘故障处理方法、装置、设备及存储介质 |
CN113760333A (zh) * | 2021-09-16 | 2021-12-07 | 海宁奕斯伟集成电路设计有限公司 | 软件升级方法、装置、电子设备及计算机可读存储介质 |
CN113785275A (zh) * | 2020-12-17 | 2021-12-10 | 深圳杰睿联科技有限公司 | Flash数据掉电保护方法及设备 |
CN115373882A (zh) * | 2022-07-29 | 2022-11-22 | 苏州浪潮智能科技有限公司 | 存储系统故障恢复方法、系统、计算机设备及存储介质 |
CN115793985A (zh) * | 2023-01-09 | 2023-03-14 | 苏州浪潮智能科技有限公司 | 一种安全存储方法、装置、设备及存储介质 |
WO2023116346A1 (zh) * | 2021-12-20 | 2023-06-29 | 深圳大普微电子科技有限公司 | 异常掉电下Trim数据的恢复方法、系统及固态硬盘 |
-
2023
- 2023-10-18 CN CN202311346325.0A patent/CN117112310B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111104218A (zh) * | 2019-11-29 | 2020-05-05 | 北京浪潮数据技术有限公司 | 存储系统数据同步方法、装置、设备及可读存储介质 |
CN113785275A (zh) * | 2020-12-17 | 2021-12-10 | 深圳杰睿联科技有限公司 | Flash数据掉电保护方法及设备 |
WO2022126470A1 (zh) * | 2020-12-17 | 2022-06-23 | 深圳杰睿联科技有限公司 | Flash数据掉电保护方法及设备 |
CN113110729A (zh) * | 2021-04-07 | 2021-07-13 | 山东英信计算机技术有限公司 | 提升服务器数据安全性的供电方法、系统和存储介质 |
CN113360312A (zh) * | 2021-06-24 | 2021-09-07 | 苏州浪潮智能科技有限公司 | 一种硬盘故障处理方法、装置、设备及存储介质 |
CN113760333A (zh) * | 2021-09-16 | 2021-12-07 | 海宁奕斯伟集成电路设计有限公司 | 软件升级方法、装置、电子设备及计算机可读存储介质 |
WO2023116346A1 (zh) * | 2021-12-20 | 2023-06-29 | 深圳大普微电子科技有限公司 | 异常掉电下Trim数据的恢复方法、系统及固态硬盘 |
CN115373882A (zh) * | 2022-07-29 | 2022-11-22 | 苏州浪潮智能科技有限公司 | 存储系统故障恢复方法、系统、计算机设备及存储介质 |
CN115793985A (zh) * | 2023-01-09 | 2023-03-14 | 苏州浪潮智能科技有限公司 | 一种安全存储方法、装置、设备及存储介质 |
Non-Patent Citations (1)
Title |
---|
王彩霞;: "数据恢复技术的分析与实践", 信息与电脑(理论版), no. 06 * |
Also Published As
Publication number | Publication date |
---|---|
CN117112310B (zh) | 2024-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20090210742A1 (en) | Methods, systems and media for data recovery using global parity for multiple independent RAID levels | |
CN114281270B (zh) | 一种数据存储方法、系统、设备以及介质 | |
JP2003131817A (ja) | Raid論理ドライブ・マイグレーションにおいてデータをマイグレーションするための方法及びシステム | |
CN111045870B (zh) | 一种保存与恢复元数据的方法、装置和介质 | |
CN113626256B (zh) | 一种虚拟机磁盘数据备份方法、装置、终端及存储介质 | |
CN112000512B (zh) | 一种数据修复方法及相关装置 | |
CN112596672B (zh) | 主控芯片的存储处理方法及装置、处理器和电子设备 | |
CN110647295B (zh) | 缩短ssd上电恢复时间的方法、系统、设备及存储介质 | |
CN110597779A (zh) | 一种分布式文件系统中的数据读写方法及相关装置 | |
CN110333971A (zh) | Ssd坏块表备份方法、装置、计算机设备及存储介质 | |
CN117112310B (zh) | 后台任务进度保存和恢复方法、装置、设备及存储介质 | |
US20160055063A1 (en) | Progress recording method and recovering method for encoding operation on storage device | |
US7577804B2 (en) | Detecting data integrity | |
CN109857708B (zh) | 一种嵌入式系统的数据存取方法及计算机可读存储介质 | |
CN108874318B (zh) | 固态硬盘的数据恢复方法以及固态硬盘 | |
US9286936B1 (en) | Zone based band mapping | |
CN108572882B (zh) | 一种数据存储的方法及存储设备 | |
CN114064346A (zh) | 一种纠删码数据一致性保障方法及系统 | |
CN111984472B (zh) | 一种数据快照方法、装置及相关设备 | |
CN110795155B (zh) | 系统启动方法及装置、电子设备、存储介质 | |
EP2176809A1 (en) | Data storage method, apparatus and system for interrupted write recovery | |
JP4204060B2 (ja) | 情報処理システムのデータ復旧方法及びディスクサブシステム | |
CN118193294A (zh) | NAND flash数据损坏后的恢复方法、装置、计算机设备及存储介质 | |
CN118051383A (zh) | 一种分区损坏切换备份的方法及系统 | |
CN103294570B (zh) | 一种内存数据的备份方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |