数据处理方法及相关装置
技术领域
本申请涉及计算机领域,尤其涉及数据处理方法及相关装置。
背景技术
目前,终端设备具备上传数据和下载数据的功能,终端设备可以记录用户的使用习惯,将相关数据上传到后台服务器,后台服务器根据收集的大量数据分析后,再向终端设备推送适合用户的运行模式,以提升用户体验。在与后台服务器交互的过程中,如果用户所处的环境没有网络或者终端设备从网络中断开,终端设备无法将收集到的数据上传到后台服务器,这时就需要把数据保存到终端设备的内存中,等到终端设备再次接入网络的情况下,再将保存的数据上传到后台服务器。
在上述场景中,会涉及到对终端设备的内存的读写操作,一方面,在将数据保存到终端设备的内存中时需要将数据保存到内容为空的内存区域中,即需要找到内存中最后一个存储有数据的存储地址,从该存储地址的下一个存储地址开始存储数据,另一方面,在将保存的数据上传到服务器中时,需要确定在终端设备从网络中断开之前上传的最后一个数据的存储地址,然后以该存储地址的下一个存储地址开始读取数据并上传,以提高传输的效率。在一些快速读写算法中,主要通过最后读写地址管理来实现对数据的快速读写,即用一个索引地址对应的内存中存入最后一个写入的数据的地址和最后一个读取的数据的地址,每次要读写数据时先从该索引地址对应的内存中读取地址,再根据读取到的最后读写地址进行读写操作。虽然这种方法可以实现快速读写操作,但是无法抗干扰,如果该索引地址中的内容错误,则会导致后续的读写操作找不到最后一个读写地址,造成读数据或写数据混乱。
发明内容
本申请提供数据处理方法及相关装置,可以解决因索引地址中的内容错误而造成的读数据或写数据混乱的问题。
第一方面,本申请实施例提供一种数据处理方法,可以应用于具备上传数据和下载数据功能的终端设备,包括:
获取数据处理指令,所述数据处理指令包括数据写入指令或数据读取指令;
查找索引扇区中的最后一个内容不为空的索引区域对应的第一索引地址,所述索引区域用于存储数据存储地址和对应的校验数据,所述数据存储地址为针对数据存储区的每次数据处理操作对应的最后存储地址;
在查找到所述第一索引地址的情况下,将所述第一索引地址确定为目标索引地址;
从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
如果对所述数据存储地址的校验未通过,则将所述目标索引地址的前一个索引地址重新确定为目标索引地址,并执行所述从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验的步骤;
如果对所述数据存储地址的校验通过,则将从所述目标索引地址对应的索引区域中读取到的数据存储地址确定为第一存储地址;
根据所述第一存储地址执行所述数据处理指令。
结合第一方面,在一些可能的实现方式中,如果对所述数据存储地址的校验未通过,并且所述目标索引地址为所述索引扇区的首个索引地址,则将所述数据存储区的首个存储地址确定为所述第一存储地址,并执行所述根据所述第一存储地址执行所述数据处理指令的步骤。
结合第一方面,在一些可能的实现方式中,查找所述索引扇区中的内容不为空的索引区域对应的第一索引地址包括:以所述索引扇区的首个索引地址为起始,按从前向后的顺序查找内容为空的索引区域对应的第二索引地址;在所述第二索引地址不为所述首个索引地址的情况下,将所述第二索引地址的前一个索引地址确定为所述第一索引地址。
结合第一方面,在一些可能的实现方式中,可以用头字符来区分内容为空的索引区域和内容不为空的索引区域,内容为空的索引区域和内容不为空的索引区域的头字符不同,例如,可以将内容为空的索引区域的头字符设计为第一字符,将内容不为空的头字符设计为第二字符,则按从前向后的顺序查找内容为空的索引区域对应的第二索引地址包括:按从前向后的顺序查找头字符与第一字符相同索引区域对应的第二索引地址,所述头字符位于每个索引区域的前N个字节,N为大于或等于1的正整数。
结合第一方面,在一些可能的实现方式中,在所述第二索引地址为所述首个索引地址的情况下,确定未查找到所述第一索引地址。
结合第一方面,在一些可能的实现方式中,所述方法还包括:在未查找到所述第一索引地址的情况下,将所述数据存储区的首个存储地址确定为所述第一存储地址,并执行所述根据所述第一存储地址执行所述数据处理指令的步骤。
结合第一方面,在一些可能的实现方式中,所述根据所述第一存储地址执行所述数据处理指令包括:根据所述第一存储地址确定所述数据处理指令对应的第二存储地址;根据所述数据处理指令在所述第二存储地址对应的存储区域中写入或读取数据并校验;如果校验未通过,则将所述第二存储地址的后一个存储地址重新确定为第二存储地址,将初始值为零的重处理计数器的值加一,如果所述重处理计数器的值小于第一数值,则执行所述根据所述数据处理指令在所述第二存储地址对应的存储区域中写入或读取数据并校验的步骤,如果所述重处理计数器的值等于所述第一数值,则确定执行所述数据处理指令失败;如果校验通过,则确定执行所述数据处理指令成功。
结合第一方面,在一些可能的实现方式中,所述根据所述第一存储地址执行所述数据处理指令之后还包括:根据所述第一索引地址和所述目标索引地址确定第三索引地址;确定所述数据处理指令对应的最后存储地址;在所述第三索引地址对应的索引区域中写入所述数据处理指令对应的最后存储地址。
结合第一方面,在一些可能的实现方式中,所述根据所述第一索引地址和所述目标索引地址确定第三索引地址包括:如果所述目标索引地址为所述第一索引地址,则将所述目标索引地址的后一个索引地址确定为第三索引地址;如果所述目标索引地址不为所述第一索引地址,则将所述索引扇区的首个索引地址确定为第三索引地址。
结合第一方面,在一些可能的实现方式中,在未查找到该第一索引地址的情况下,将所述索引扇区的首个索引地址确定为第三索引地址。
第二方面,本申请实施例提供一种数据处理装置,该数据处理装置可以为具备上传数据和下载数据功能的终端设备,包括:
指令获取模块,用于获取数据处理指令,所述数据处理指令包括数据写入指令或数据读取指令;
第一查找模块,用于查找索引扇区中的最后一个内容不为空的索引区域对应的第一索引地址,所述索引区域用于存储数据存储地址和对应的校验数据,所述数据存储地址为针对数据存储区的每次数据处理操作对应的最后存储地址;
第一地址确定模块,用于在查找到所述第一索引地址的情况下,将所述第一索引地址确定为目标索引地址;
校验模块,用于从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
如果校验模块对所述数据存储地址的校验未通过,则第一地址确定模块还用于将所述目标索引地址的前一个索引地址重新确定为目标索引地址,所述校验模块从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
第二地址确定模块,用于如果校验模块对所述数据存储地址的校验通过,则将从所述目标索引地址对应的索引区域中读取到的数据存储地址确定为第一存储地址;
指令执行模块,用于根据所述第一存储地址执行所述数据处理指令。
第三方面,本申请实施提供另一种数据处理装置,包括处理器、存储器以及通信接口,所述处理器、存储器和通信接口相互连接,其中,所述通信接口用于接收和发送数据,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,执行上述第一方面和第一方面各个可能的实现方式中的任意一种方法。
第四方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时使所述计算机执行上述第一方面和第一方面各个可能的实现方式中的任意一种方法。
本申请实施例中,在获取到数据处理指令的情况下,首先从索引扇区中查找到最后一个内容不为空的索引区域对应的第一索引地址,并将第一索引地址作为初始的目标索引地址对目标索引地址对应的索引区域中的数据存储地址进行校验,直到找到校验成功的数据存储地址所在的索引区域,将该索引区域中的数据存储地址作为第一存储地址,并根据第一存储地址执行数据处理指令。数据存储地址为一次数据操作对应的最后读地址和最后写地址,在当前的从索引地址对应的索引区域中读取数据存储地址的过程中,在对数据存储地址的校验不通过的情况下,从当前的索引地址的上一个索引地址对应的索引区域中获取数据存储地址,直到找到校验成功的数据存储地址,避免因一个或几个索引地址中的内容发生错误而找不到数据存储地址,从而避免出现读数据或写数据混乱的问题,可以抗干扰。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例的内存的内部区域分布示意图;
图2是本申请实施例提供的一种数据处理方法的流程示意图;
图3是本申请实施例提供一种执行数据处理指令的方法的流程示意图;
图4是本申请实施例提供的一种保存数据存储地址的方法的流程示意图;
图5是本申请实施例提供的一种数据处理装置的结构示意图;
图6是本申请实施例提供的另一种数据处理装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的主要发明原理可包括:用一个索引扇区来滚动存储多个最后读地址和最后写地址,一个索引地址对应的索引区域存储一次操作最后的最后读地址和最后写地址,在需要执行读数据操作或写数据操作时,首先从索引扇区中的最新的一个内容不为空的索引区域中获取内容并对该内容进行校验,如果当前的索引地址对应的索引区域中的内容出现错误,则依次获取上一个有效的索引地址对应的索引区域中的内容,直到找到存储有有效内容的索引区域,从该索引区域中获取最后读地址和最后写地址,然后根据获取到的最后读地址执行读数据操作,或者根据获取到的最后写地址执行写数据操作,防止因一个或几个索引地址的内容发生错误而造成的读数据或写数据混乱。
在介绍本申请实施例的数据处理方法之前,首先对本申请实施例的内存中的内部区域的划分进行介绍。参见图1,图1是本申请实施例的内存的内部区域分布示意图,如图所示,内存中有多个扇区,扇区为内存的最小擦除单位,即如果要对内存进行擦除,则一次最少擦除一个扇区,扇区由多个地址连续的存储单元组成,存储单元为最小读写单位,即如果要读写内存中的数据,则一次最少读或写一个存储单元的数据。内存中有两种功能不同的存储区,分别为数据存储区101和索引存储区102,数据存储区101用于存储数据,索引存储区102用于存储多个最后读地址(最后一个读取的数据所在的地址)和/或多个最后写地址(最后一个写入的数据所在的地址)。为便于区分,本申请实施例中,将数据存储区包含的扇区称之为存储扇区,将存储扇区中的存储单元称之为存储区域,将数据存储区的地址称之为存储地址,将索引存储区包含的扇区称之为索引扇区,将索引扇区中的存储单元称之为索引区域,将索引存储区的地址称之为索引地址。数据存储区101包括多个存储地址连续的存储扇区。索引存储区102包括一个索引扇区,索引扇区中的索引区域用于存储最后读地址和最后写地址。
接下来介绍本申请实施例的方法,参见图2,图2是本申请实施例提供的一种数据处理方法的流程示意图,如图所示,所述方法包括:
S201,获取数据处理指令,所述数据处理指令包括数据写入指令或数据读取指令。
这里,在需要将数据保存到内存中的情况下,可获取到数据写入指令;在需要读取内存中的数据的情况下,可获取到数据读取指令。
S202,查找第一索引地址,所述第一索引地址为索引扇区中的最后一个内容不为空的索引区域所对应的索引地址,所述索引区域用于存储数据存储地址和对应的校验数据,所述数据存储地址为针对数据存储区的每次数据处理操作对应的最后存储地址。
本申请实施例中,数据存储地址包括最后读地址和最后写地址,即每一次数据操作对应的最后读地址和最后写地址。
这里,第一索引地址为最新的一个存储有数据存储地址的索引区域对应的索引地址。
例如,索引扇区有20个索引地址(索引地址1~20),索引地址1~9对应的索引区域中均存储有数据存储地址,索引地址11~20对应的索引区域中未存储有数据,则索引地址9为第一索引地址。
这里,可以通过以下方式查找该第一索引地址:
一、以索引扇区的首个索引地址为起始,按从前向后的顺序查找内容为空的索引区域对应的第二索引地址,在该第二索引地址不为索引扇区的首个索引地址的情况下,将该第二索引地址的前一个索引地址确定为第一索引地址。
例如,索引扇区的索引地址为索引地址1~索引地址100,假设当前索引地址1~索引地址19的对应的索引区域的内容不为空,索引地址20~索引地址100对应的索引区域的内容为空,则从索引地址1对应的索引区域开始查找,查找到索引地址20对应的索引区域的内容为空,则将索引地址20的前一个索引地址即索引地址19确定为第一索引地址。
可选的,在该第二索引地址为索引扇区的首个索引地址的情况下,确定未查找到内容不为空的索引区域对应的第一索引地址。
例如,索引扇区的索引地址为索引地址1~索引地址100,从索引地址1对应的索引区域开始查找,查找到索引地址1对应的索引区域的内容为空,则确定未查找到内容不为空的索引区域对应的第一索引地址。
二、以索引扇区的最后一个索引地址为起始,从后向前的顺序查找内容不为空的索引区域对应的第四索引地址,并将第四索引地址确定为第一索引地址。
例如,索引扇区的索引地址为索引地址1~索引地址100,假设当前索引地址1~索引地址19的对应的索引区域的内容不为空,索引地址20~索引地址100对应的索引区域的内容为空,则从索引地址100对应的索引区域开始查找,查找到索引地址19对应的索引区域的内容不为空,则将索引地址19确定为第一索引地址。
在一种可能的实施方式中,可以通过头字符区分内容为空的索引区域和内容不为空的索引区域,内容为空的索引区域的头字符为第一字符,内容不为空的头字符为第二字符;其中,头字符可以位于每个索引区域的前N个字节,N为大于或等于1的正整数,N小于等于索引区域包含的字节总数,例如,索引区域共有12个字节,则头字符位于索引区域前1个字节、前2个字节,等等。
具体的,例如头字符位于索引区域的前2个字节,第一字符例如可以为0xFF0xFF,第二字符例如可以为0x55 0xAA,等等。
在通过头字符区分内容为空的索引区域和内容不为空的索引区域的情况下,按从前向后的顺序查找内容为空的索引区域对应的第二索引地址具体为:按从前向后的顺序查找头字符与第一字符相同的索引区域对应的第二索引地址;按从后向前的顺序查找内容不为空的索引区域对应的第四索引地址具体为:按从后向前的顺序查找头字符与第二字符相同的索引区域对应的第四索引地址。
具体的,例如,按从前到后的顺序查找头字符为0xFF0xFF的索引区域对应的第二索引地址,或者,按从后到前的顺序查找头字符为0x55 0xAA的索引区域对应的索引地址。
在可选实施方式中,还可以有其他的方式用于区分内容为空的索引区域和内容不为空的索引区域,例如,内容为空的索引区域和内容不为空的索引区域的尾字符不同,其中,尾字符位于每个索引区域的后M个字节,M为大于或等于1的正整数,不限于这里的描述,本申请不对区分内容为空的索引区域和内容不为空的索引区域的方式进行限制。
S203,在查找到所述第一索引地址的情况下,将所述第一索引地址确定为目标索引地址。
例如,索引扇区的索引地址为索引地址1~索引地址100,索引地址19为第一索引地址,则将索引地址19确定为目标索引地址。
可选的,在未查找到该第一索引地址的情况下,可以将数据存储区的首个存储地址确定第一存储地址,执行步骤S207。
S204,从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验。
具体的,该校验数据可以为循环冗余校验(Cyclic Redundancy Check,CRC)校验数据,则通过校验数据对从目标索引地址对应的索引区域中读取到的数据存储地址进行校验具体为:对数据存储地址进行模2运算得到余数,将该余数与从目标索引地址对应的索引区域中读取到的CRC校验数据进行比较,若该余数与该CRC校验数据相同,则数据存储地址的校验通过;若该余数与该CRC校验数据不同,则对数据存储地址的校验未通过。
S205,如果对所述数据存储地址的校验未通过,则将所述目标索引地址的前一个索引地址重新确定为目标索引地址,并执行步骤S204。
例如,索引扇区的索引地址为索引地址1~索引地址100,索引地址19为当前的目标索引地址,如果对数据存储地址的校验未通过,则将索引地址19的前一个索引地址即索引地址18重新确定为目标索引地址。
S206,如果对所述数据存储地址的校验通过,则将从所述目标索引地址对应的索引区域中读取到的数据存储地址确定为第一存储地址,执行步骤S207。
可选的,如果对数据存储地址的校验未通过,且所述目标索引地址为索引扇区的首个索引地址,可以将数据存储区的首个存储地址确定为第一存储地址,执行步骤S207。
S207,根据所述第一存储地址执行所述数据处理指令。
本申请实施例中,第一存储地址包括最后读地址和最后写地址,在该数据处理指令为数据读取指令的情况下,根据第一存储地址中的最后读地址执行该数据处理指令;在该数据处理指令为数据写入指令的情况下,根据第一存储地址中的最后写地址执行该数据处理指令。
在本申请实施例中,在获取到数据处理指令的情况下,首先从索引扇区中查找到最新的一个内容不为空的索引区域对应的第一索引地址,并将第一索引地址作为初始的目标索引地址对目标索引地址对应的索引区域中的数据存储地址进行校验,直到找到校验成功的数据存储地址所在的索引区域,将该索引区域中的数据存储地址作为第一存储地址,并根据第一存储地址执行数据处理指令。数据存储地址为一次数据操作对应的最后读地址和最后写地址,在从当前的索引地址对应的索引区域中读取数据存储地址的过程中,如果对数据存储地址的校验不通过,则从当前的索引地址的上一个索引地址对应的索引区域中获取数据存储地址,直到找到校验成功的数据存储地址,避免因一个或几个索引地址中的内容发生错误而找不到数据存储地址,从而避免出现读数据或写数据混乱的问题,可以抗干扰。
在一些可能的实施例中,根据第一存储地址执行数据处理指令的具体实现方式可以如图3所示,包括以下步骤:
S301,根据第一存储地址确定数据处理指令对应的第二存储地址。
本申请实施例中,由图2对应的实施例可知,第一存储地址有以下几种情况:1)第一存储地址为从索引区域中读取到的数据存储地址;2)第一存储地址不为从索引区域中读取的数据地址,第一存储地址为数据存储区的首个存储地址。
如果数据处理指令为数据写入指令,在第1)种情况下,将第一存储地址中的最后写地址的下一个存储地址确定为第二存储地址,其中,在最后写地址为数据存储区的最后一个存储地址的情况下,最后写地址的下一个存储地址为数据存储区的首个存储地址,即将数据存储区的首个存储地址确定为第二存储地址;在第2)种情况下,最后读地址与最后写地址均为数据存储区的首个存储地址,将最后写地址确定为第二存储地址。
举例来对数据处理指令为数据写入指令的情况下根据第一存储地址确定数据处理指令对应的第二存储地址进行说明。
1)第一存储地址为从索引区域中读取到的数据存储地址。
第一存储地址中的最后写地址为存储地址5,第一存储地址中的最后读地址为存储地址2,则将存储地址5的下一个存储地址即存储地址6确定为第二存储地址;第一存储地址中的最后写地址为存储地址1,第一存储地址中的最后读地址为存储地址1,将存储地址1的下一个存储地址即存储地址2确定为第二存储地址。
2)第一存储地址不为从索引区域中读取的数据存储地址,第一存储地址为数据存储区的首个存储地址。
第一存储地址中的最后写地址为存储地址1,第一存储地址中的最后读地址为存储地址1,将存储地址1确定为第二存储地址。
可选的,在数据处理指令为数据写入指令的情况下,如果第二存储地址为数据存储区的首个存储地址或者存储扇区的首个存储地址,则确定第二存储地址之后还包括:擦除第二存储地址对应的存储扇区。
例如,第二存储地址为图1所示的存储地址n+1,则在确定第二存储地址之后,擦除图1所示的存储扇区2,又如,第二存储地址为图1所示的存储地址1,则在确定第二存储地址之后,擦除图1所示的存储扇区1。
例如,数据存储区有3个存储扇区,第一个存储扇区对应的存储地址为存储地址1~100,第二个存储扇区对应的存储地址为存储地址101~200,第三个存储扇区对应的存储地址为存储地址201~300,如果第二存储地址为存储地址1,则需要擦除第一存储扇区,如果第二存储地址为存储地址101,则需要擦除第二存储扇区,如果第二存储地址为存储地址201,则需要擦除第三存储扇区。
如果数据处理指令为数据读取指令,在第1)种情况下,如果第一存储地址中的最后读地址不为第一存储地址中的最后写地址,则将最后读地址的下一个存储地址确定为第二存储地址,其中,在最后读地址为数据存储区的最后一个存储地址的情况下,最后读地址的下一个存储地址为数据存储区的首个存储地址,即将数据存储区的首个存储地址确定为第二存储地址;在第2)种情况下,最后读地址与最后写地址均为数据存储区的首个存储地址,确定当前没有新的数据可读。
举例来对数据处理指令为数据读取指令的情况下根据第一存储地址确定数据处理指令对应的第二存储地址进行说明。
1)第一存储地址为从索引区域中读取到的数据存储地址。
第一存储地址中的最后写地址为存储地址5,第一存储地址中的最后读地址为存储地址2,则将存储地址2的下一个存储地址即存储地址3确定为第二存储地址;第一存储地址中的最后写地址为存储地址1,第一存储地址中的最后读地址为存储地址1,确定当前没有新的数据可读。
2)第一存储地址不为从索引区域中读取的数据存储地址,第一存储地址为数据存储区的首个存储地址。
第一存储地址中的最后写地址为存储地址1,第一存储地址中的最后读地址为存储地址1,确定当前没有新的数据可读。
S302,根据所述数据处理指令在所述第二存储地址对应的存储区域中写入或读取数据并校验。
在一种可能的实现方式中,可以通过CRC校验的方式对所述数据进行校验。
在该数据处理指令为数据读取指令的情况下,从第二存储地址对应的存储区域中读取第一数据以及CRC校验数据,并对该第一数据进行模2运算得到余数,如果该余数与该CRC校验数据相同,则确定校验通过,执行步骤S305;如果该余数与该CRC校验数据不同,则确定校验未通过,执行步骤S303。
在该数据处理指令为数据写入指令的情况下,获取该数据写入指令中的第二数据,对该第二数据进行模2运算生成该第二数据对应的CRC校验数据,将该第二数据以及该CRC校验数据写入第二存储地址对应的存储区域中,从该存储区域中获取第二数据以及CRC校验数据,对该第二数据进行模2运算得到余数,如果该余数与该CRC数据相同,则确定校验通过,执行步骤S305;如果该余数与CRC校验数据不同,则确定校验未通过,执行步骤S303。
S303,如果校验未通过,则将所述第二存储地址的后一个存储地址重新确定为第二存储地址,将初始值为零的重处理计数器的值加一。
具体的,例如当前的第二存储地址为存储地址3,则将该存储地址3的下一个存储地址即存储地址4重新确定为第二存储地址。
本申请实施例中,如果重处理计数器的值小于第一数值,则执行步骤S302;如果重处理计数器的值小于第一数值等于第一数值,则执行步骤S304。
本申请实施例中,第一数值为重复读取数据或写数据的次数,第一数值可以设置为2,3,4等数值。
S304,确定执行所述数据处理指令失败。
S305,如果校验通过,则确定执行所述数据处理指令成功。
可选的,在执行完该数据处理指令之后,将重处理计数器的值设置为零。
具体的,在该数据处理指令为数据读取指令的情况下,如果第二存储地址等于第一存储地址中的最后读地址,则确定当前没有新的数据可读。
在执行数据处理指令的过程中,在当前的存储地址写入或读取数据不成功的情况下,在当前的存储地址的下一个存储地址继续执行写入或读取数据的操作并对重复处理的次数进行计数,直到重复处理的次数超过一定次数才确定执行数据处理指令失败,通过多次尝试的方式可以提高读写数据的成功率。
在一些可能的实施例中,在执行该数据处理指令之后还可以将该数据处理指令对应的数据存储地址存入索引区域中,将数据处理指令对应的数据存储地址存储索引区域的具体实现方式可以如图4所示,具体包括以下步骤:
S401,根据第一索引地址和目标索引地址确定第三索引地址。
由图2对应的实施例可知,第一索引地址为索引扇区中的最新的一个存储有数据存储地址的索引区域对应的索引地址,目标索引地址初始等于第一索引地址,目标索引地址在确定第一存储地址的过程中可能会发生变化。在目标索引地址未发生变化的情况下,目标索引地址为第一索引地址,说明第一索引地址对应的索引区域中的数据存储地址通过校验,第一索引地址为一个有效的索引地址,由于第一索引地址为最新的一个索引地址,可确定索引扇区中当前保存的内容全为有效数据,可以继续向后保存数据存储地址,即如果所述目标索引地址为所述第一索引地址,则将所述目标索引地址的后一个索引地址确定为第三索引地址;在目标索引地址发生变化的情况下,目标索引地址不为第一索引地址,说明第一索引地址对应的索引区域中的数据地址通过校验,第一索引地址为一个无效的索引地址,可确定索引扇区中当前保存的内容中有无效数据,需要重新保存数据,即如果所述目标索引地址不为所述第一索引地址,则将所述索引扇区的首个索引地址确定为第三索引地址。
可选的,在未查找到该第一索引地址的情况下,将索引扇区的首个索引地址确定为第三索引地址。
可选的,在该第三索引地址为索引扇区的首个索引地址的情况下,确定第三索引地址之后还包括:擦除该索引扇区。
S402,确定所述数据处理指令对应的最后存储地址。
本申请实施例中,可根据图3对应的实施例确定数据处理指令对应的最后存储地址,其中,最后存储地址包括最后读地址和最后写地址。
具体的,在该数据处理指令为数据写入指令的情况下,可根据第一存储地址确定最后读地址,根据第二存储地址确定最后写地址。
例如,第一存储地址中的最后读地址为存储地址1,最后写地址为存储地址2,数据处理指令为数据写入指令,根据数据写入指令写入数据之后,第二存储地址为存储地址4,则将存储地址1确定为最后读地址,将存储地址4确定为最后写地址。
具体的,在该数据处理指令为数据读取指令的情况下,可根据第一存储地址确定最后写地址,根据第二存储地址确定最后读地址。
例如,第一存储地址中的最后读地址为存储地址1,最后写地址为存储地址4,数据处理指令为数据读取指令,根据数据读取指令读取数据后,第二存储地址为存储地址3,则将存储地址3确定为最后读地址,将存储地址4确定为最后写地址。
S403,在所述第三索引地址对应的索引区域中写入所述数据处理指令对应的最后存储地址。
具体的,对该最后存储地址进行模2运算生成该最后存储地址对应的CRC校验数据,将该最后存储地址以及该CRC校验数据写入第三索引地址对应的索引区域中。
可选的,在该第三索引地址对应的索引区域中写入数据处理指令对应的最后存储地址之后还包括:从第三索引地址对应的索引区域中获取最后存储地址和CRC校验数据,并通过该CRC校验数据对该最后存储地址进行校验,在校验通过的情况下,确定在第三索引地址对应的索引区域中写入数据成功。
具体的,可以对从第三索引地址对应的索引区域中获取到的最后存储地址进行模2运算得到余数,如果该余数与该从第三索引地址对应的索引区域中获取到的CRC校验数据相同,则确定校验通过,如果该与数据与该从第三索引地址对应的索引区域中获取到的CRC校验数据不同,则确定校验未通过。
本申请实施例中,通过将每次数据处理指令对应的最后存储地址保存在索引区域中,最后存储地址包括最后读地址和最后写地址,在对存储的最后存储地址的校验通过的情况下,确定最后存储地址写入成功,在后续需要继续读数据或者写数据时,可以从最新的索引地址对应的索引区域中获取得到最后读地址或最后写地址,然后从该最后读地址对应的存储区域读取数据,或者从该最后写地址对应的存储区域写数据,实现对数据的快速读写,提高数据读写效率。
上面介绍了本申请的方法,下面介绍本申请的装置。
参见图5,图5是本申请实施例提供的一种数据处理装置的结构示意图,如图所示,所述装置50包括:
指令获取模块510,用于获取数据处理指令,所述数据处理指令包括数据写入指令或数据读取指令;
第一查找模块520,用于查找索引扇区中的最后一个内容不为空的索引区域对应的第一索引地址,所述索引区域用于存储数据存储地址和对应的校验数据,所述数据存储地址为针对数据存储区的每次数据处理操作对应的最后存储地址;
第一地址确定模块530,用于在查找到所述第一索引地址的情况下,将所述第一索引地址确定为目标索引地址;
校验模块540,用于从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
如果校验模块540对所述数据存储地址的校验未通过,则第一地址确定模块530还用于将所述目标索引地址的前一个索引地址重新确定为目标索引地址,所述校验模块从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
第二地址确定模块550,用于如果校验模块540对所述数据存储地址的校验通过,则将从所述目标索引地址对应的索引区域中读取到的数据存储地址确定为第一存储地址;
指令执行模块560,用于根据所述第一存储地址执行所述数据处理指令。
可选的,如果校验模块540对所述数据存储地址的校验未通过,并且所述目标索引地址为所述索引扇区的首个索引地址,则第二地址确定模块550还用于将所述数据存储区的首个存储地址确定为所述第一存储地址。
可选的,第一查找模块520具体用于:以所述索引扇区的首个索引地址为起始,按从前向后的顺序查找内容为空的索引区域对应的第二索引地址;
在所述第二索引地址不为所述首个索引地址的情况下,将所述第二索引地址的前一个索引地址确定为所述第一索引地址。
可选的,第一查找模块520具体用于:按从前向后的顺序查找头字符与第一字符相同的索引区域对应的第二索引地址,所述头字符位于每个索引区域的前N个字节,N为大于或等于1的正整数。
可选的,第一查找模块520还用于:在所述第二索引地址为所述首个索引地址的情况下,确定未查找到所述第一索引地址。
可选的,在第一查找模块520未查找到所述第一索引地址的情况下,第二地址确定模块550还用于将所述数据存储区的首个存储地址确定为所述第一存储地址。
可选的,指令执行模块560具体用于:根据所述第一存储地址确定所述数据处理指令对应的第二存储地址;
根据所述数据处理指令在所述第二存储地址对应的存储区域中写入或读取数据并校验;
如果校验未通过,则将所述第二存储地址的后一个存储地址重新确定为第二存储地址,将初始值为零的重处理计数器的值加一,如果所述重处理计数器的值小于第一数值,则执行所述根据所述数据处理指令在所述第二存储地址对应的存储区域中写入或读取数据并校验的步骤,如果所述重处理计数器的值等于所述第一数值,则确定执行所述数据处理指令失败;
如果校验通过,则确定执行所述数据处理指令成功。
可选的,所述装置50还包括:第三地址确定模块570,用于根据所述第一索引地址和所述目标索引地址确定第三索引地址;
第四地址确定模块580,用于确定所述数据处理指令对应的最后存储地址;
存储地址写入模块590,用于在所述第三索引地址对应的索引区域中写入所述数据处理指令对应的最后存储地址。
可选的,第三地址确定模块570具体用于:如果所述目标索引地址为所述第一索引地址,则将所述目标索引地址的后一个索引地址确定为第三索引地址;
如果所述目标索引地址不为所述第一索引地址,则将所述索引扇区的首个索引地址确定为第三索引地址。
需要说明的是,图5对应的实施例中未提及的内容可参见方法实施例的描述,这里不再赘述。
在本申请实施例中,数据处理装置在获取到数据处理指令的情况下,首先从索引扇区中查找到最新的一个内容不为空的索引区域对应的第一索引地址,并将第一索引地址作为初始的目标索引地址对目标索引地址对应的索引区域中的数据存储地址进行校验,直到找到校验成功的数据存储地址所在的索引区域,将该索引区域中的数据存储地址作为第一存储地址,并根据第一存储地址执行数据处理指令。数据存储地址为一次数据操作对应的最后读地址和最后写地址,在数据处理装置从当前的索引地址对应的索引区域中读取数据存储地址的过程中,如果对数据存储地址的校验不通过,则从当前的索引地址的上一个索引地址对应的索引区域中获取数据存储地址,直到找到校验成功的数据存储地址,避免因一个或几个索引地址中的内容发生错误而找不到数据存储地址,从而避免出现读数据或写数据混乱的问题,可以抗干扰。
参见图6,图6是本申请实施例提供的另一种数据处理装置的组成结构示意图,如图所示,该装置60包括处理器601、存储器602以及通信接口603。处理器601连接到存储器602和通信接口603,例如处理器601可以通过总线连接到存储器602和通信接口603。
处理器601被配置为支持所述数据处理装置执行图2-图4所述的数据处理方法中相应的功能。该处理器601可以是中央处理器(Central Processing Unit,CPU),网络处理器(Network Processor,NP),硬件芯片或者其任意组合。上述硬件芯片可以是专用集成电路(Application-Specific Integrated Circuit,ASIC),可编程逻辑器件(ProgrammableLogic Device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(ComplexProgrammable Logic Device,CPLD),现场可编程逻辑门阵列(Field-Programmable GateArray,FPGA),通用阵列逻辑(Generic Array Logic,GAL)或其任意组合。
存储器602用于存储程序代码等。存储器602包括内部存储器,内部存储器可以包括以下至少一项:易失性存储器(例如动态随机存取存储器(DRAM)、静态RAM(SRAM)、同步动态RAM(SDRAM)等)和非易失性存储器(例如一次性可编程只读存储器(OTPROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)。存储器602还可以包括外部存储器,外部存储器可以包括以下至少一项:硬盘(Hard Disk Drive,HDD)或固态硬盘(Solid-State Drive,SSD)、闪驱,例如高密度闪存(CF)、安全数字(SD)、微型SD、迷你型SD、极限数字(xD)、存储棒等。
所述通信接口603用于接收或发送数据。
处理器601可以调用所述程序代码以执行以下操作:
获取数据处理指令,所述数据处理指令包括数据写入指令或数据读取指令;
查找索引扇区中的最后一个内容不为空的索引区域对应的第一索引地址,所述索引区域用于存储数据存储地址和对应的校验数据,所述数据存储地址为针对数据存储区的每次数据处理操作对应的最后存储地址;
在查找到所述第一索引地址的情况下,将所述第一索引地址确定为目标索引地址;
从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验;
如果对所述数据存储地址的校验未通过,则将所述目标索引地址的前一个索引地址重新确定为目标索引地址,并执行所述从所述目标索引地址对应的索引区域中读取数据存储地址和校验数据,并通过所述校验数据对所述数据存储地址进行校验的步骤;
如果对所述数据存储地址的校验通过,则将从所述目标索引地址对应的索引区域中读取到的数据存储地址确定为第一存储地址;
根据所述第一存储地址执行所述数据处理指令。
需要说明的是,各个操作的实现还可以对应参照图2-图4所示的方法实施例的相应描述;所述处理器601还可以用于执行上述方法实施例中的其他操作。
本申请实施例还提供一种计算机存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时使所述计算机执行如前述实施例所述的方法,所述计算机可以为上述提到的数据处理装置的一部分。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。