CN103713962B - 一种检测数据链表方法及电子设备 - Google Patents
一种检测数据链表方法及电子设备 Download PDFInfo
- Publication number
- CN103713962B CN103713962B CN201210379926.7A CN201210379926A CN103713962B CN 103713962 B CN103713962 B CN 103713962B CN 201210379926 A CN201210379926 A CN 201210379926A CN 103713962 B CN103713962 B CN 103713962B
- Authority
- CN
- China
- Prior art keywords
- value
- data link
- link table
- counter
- abnormality
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种检测数据链表方法及电子设备,该方法应用于一电子设备,所述电子设备包括第一存储单元,所述第一存储单元中设置有第一数据链表,其中,所述第一数据链表包括M个节点,M为大于等于2的整数,所述方法包括:当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态,以及检测所述第一数据链表的尾指针是否为异常状态,其中,所述第一操作为读和/或写操作,所述第一计数器用于计数第一数据链表中节点为第一状态的节点个数;当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态。
Description
技术领域
本发明涉及数据通信领域,尤其涉及一种检测数据链表方法及电子设备。
背景技术
随着数据业务的高速发展,网络融合趋势越来越强烈,在开发数据芯片时,已经不单单是单一的一种业务,而是数据、语音、视频等等各种不同的业务混杂融合在一起,针对各种业务通常利用QoS(Quality of Service,服务质量)将不同业务的不同优先级分配其共享的资源,从而确保该类业务的正常运行。
目前,实现上述共享资源功能就需要通过链表指针对业务进行调度,即利用链表管理方式,实现有限的RAM(Random-Access Memory,随即存取存储器),比如,FPGA(Field-Programmable Gate Array,现场可编程门阵列)的片内RAM的资源的共享;再比如,FPGA的片外静态RAM或者动态RAM的资源的共享。如果电路受到干扰,就会导致链表异常,使得整个网络瘫痪。在通讯领域是绝对不允许的这种情况发生。
现有技术提出了如下的检错机制,即采用为链表指针配置校验位的方式实现对链表进行检错,通常会为每个链表指针配置多个链表校验位,校验位越多,检错能力越强,漏检概率越低。
但是本申请发明人发现在现有技术中,链表的深度越大,共享资源就越多,业务划分粒度就越细,而每一个链表都需要对应若干校验位,链表的深度越深,校验位的位数就越多,这样每增加1bit校验位所消耗的存储资源也就也多,就需要很大的存储空间,使得耗费本已很紧张的有限存储资源来存储校验位,存在资源占用率高的技术问题。但是如果减少校验位,又会导致漏检概率增大的技术问题,一单漏检,整个系统就会混乱崩溃。系统级的崩溃将导致业务长时间中断和数据大量丢失会对运营商和用户造成巨大的损失。
发明内容
本发明提供一种检测数据链表的方法及电子设备,用以解决现有技术中由于存储资源要存储若干校验位而导致的资源占用率高的技术问题。
一方面,本发明通过本申请的一个实施例,提供一种检测数据链表的方法,应用于一电子设备,所述电子设备包括第一存储单元,所述第一存储单元中设置有第一数据链表,其中,所述第一数据链表包括M个节点,M为大于等于2的整数,所述方法包括:当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态,以及检测所述第一数据链表的尾指针是否为异常状态,其中,所述第一操作为读和/或写操作,所述第一计数器用于计数第一数据链表中节点为第一状态的节点个数;当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态。
可选的,所述检测所述第一存储单元的第一计数器是否为异常状态,具体包括:当对所述第一数据链表存在第一操作时,获得在所述第一操作后所述第一计数器的第一值;将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前所述第一计数器的值当所述第一值与所述第二值相关时,确定所述第一计数器为正常状态;当所述第一值与所述第二值不相关时,确定所述第一计数器为异常状态。
可选的,所述检测所述第一数据链表的尾指针是否为异常状态,具体包括:获得在所述第一操作之后所述第一数据链表的尾指针的第一值;将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前,所述尾指针的值;当所述第一值与所述第二值相关时,确定所述尾指针为正常状态;当所述第二值与所述第一值不相关时,确定所述尾指针为异常状态。
可选的,所述第一存储单元中还设置有至少一位标识位,所述至少一位标识位用于标识所述第一数据链表的异常类型。
可选的,在确定所述第一数据链表为异常之后,所述方法还包括:根据所述第一操作以及所述第一计数器和所述尾指针的异常状态,确定所述第一数据链表的异常类型;基于所述异常类型,更改所述至少一个标识位的值;锁存所述至少一个标识位的值。
可选的,在确定所述第一数据链表为异常状态之后,所述方法还包括:获得第一控制指令;响应所述第一控制指令,控制所述第一数据链表初始化。
可选的,所述第一数据链表具体为队列链表。
可选的,所述第一数据链表具体为空闲链表。
另一方面,本发明通过本申请的另一实施例提供一种电子设备,所述电子设备包括第一存储单元,所述第一存储单元设置有第一数据链表,所述第一数据链表包括M个节点,M为大于等于2的整数,所述电子设备还包括:控制模块,用于对所述M个节点中的任一节点进行第一操作,其中,所述第一操作为读和/或写操作;第一计数器,用于计数第一数据链表中节点为第一状态的节点个数;第一数据链表处理模块,用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态,以及检测所述第一数据链表的尾指针是否为异常状态;当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态。
可选的,所述第一数据链表处理模块具体包括:第一检测模块,用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态;还用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表的尾指针是否为异常状态;第一确定模块,当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态。
可选的,所述第一检测模块具体包括:第一获得子模块,用于当对所述第一数据链表存在第一操作时,获得在所述第一操作后所述第一计数器的第一值;第一比较子模块,用于将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前所述第一计数器的值;第一确定子模块,用于当所述第一值与所述第二值相关时,确定所述第一计数器为正常状态;还用于当所述第一值与所述第二值不相关时,确定所述第一计数器为异常状态。
可选的,所述第一检测模块具体包括:第二获得子模块,用于在所述第一操作之后所述第一数据链表的尾指针的第一值;第二比较子模块,用于将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前,所述尾指针的值;第二确定子模块,用于当所述第一值与所述第二值相关时,确定所述尾指针为正常状态;还用于当所述第二值与所述第一值不相关时,确定所述尾指针为异常状态。
可选的,所述第一存储单元中还设置有至少一位标识位,所述至少一位标识位用于标识所述第一数据链表的异常类型。
可选的,所述电子设备还包括:第二确定模块,用于根据所述第一操作以及所述第一计数器和所述尾指针的异常状态,确定所述第一数据链表的异常类型;第一更改模块,用于基于所述异常类型,更改所述至少一个标识位的值;第一锁存模块,用于锁存所述至少一个标识位的值。
可选的,所述控制模块还用于获得第一控制指令;响应所述第一控制指令,控制所述第一数据链表初始化。
可选的,所述第一数据链表具体为队列链表。
可选的,所述第一数据链表具体为空闲链表。
本申请实施例中提供的一个或多个技术方案,至少具有如下技术效果或优点:
1、由于采用检测第一计数器和尾指针是否为异常状态来确定第一数据链表是否异常状态,就不用每个链表都配置对应的若干校验位,也不用在第一存储单元中来存储校验位,有效地解决了现有技术中由于存储资源要存储若干校验位而导致的资源占用率高的技术问题,进而实现了资源占用率低的数据链表检测。
2、由于采用检测第一计数器和尾指针是否为异常状态来确定第一数据链表是否异常状态,就不用对每个链表指针配置若干校验位,也不会出现由于校验位数较少出现漏检的情况,有效地解决了现有技术中减少校验位会出现漏检的技术问题,进而提供了一种可靠的数据链表检测方法。
3、由于采用将第一计数器和尾指针的第一值与第二值进行比较,根据两个值是否关联来判断第一计数器和尾指针是否为异常状态,更为简单的确定第一数据器和尾指针是否为异常状态,省去了对校验位的逐位检测,提供了一种简单的数据链表检测方法。
4、由于在确定第一数据链表为异常后,根据第一操作来确定第一数据链表的异常类型,能够清楚的确定第一数据链表的异常类型,再根据异常类型,改变并锁存标识位的值,以方便用户识读。
5、由于在确定第一数据链表异常之后,控制第一数据链表初始化,实现第一数据链表的恢复,重新分配资源,提高了系统的可靠性。
附图说明
图1为本发明一实施例中的数据链表处理模块原理示意图;
图2为本发明一实施例中检测数据链表的方法流程图;
图3为本发明一实施例中第一数据链表的结构示意图;
图4为本发明一实施例中更改标识位并锁存结果的方法流程图;
图5为本发明一实施例中电子设备的结构示意图。
具体实施方式
本申请实施例通过提供一种检测数据链表的方法及一种电子设备,解决了现有技术中存在的由于存储资源要存储若干校验位而导致的资源占用率高的技术问题。
本申请实施例中的技术方案为解决上述存在的资源占用率的问题,总体思路如下:
当对M个节点中的任一节点存在读和/或写操作时,通过检测计数第一数据链表中节点为第一状态的节点个数的第一计数器是否为异常状态,以及检测第一数据链表的尾指针是否为异常状态;当第一计数器及尾指针中至少有一个为异常状态时,确定第一数据链表为异常状态。这样,就不用每个链表都对应若干校验位,也不用在第一存储单元的资源来存储校验位,有效地解决了现有技术中由于存储资源要存储若干校验位而导致的资源占用率高的技术问题,实现了资源占用率低的数据链表检测。
为了更好的理解上述技术方案,下面将结合说明书附图以及具体的实施方式对上述技术方案进行详细的说明。
数据链表为一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。
数据链表的初始状态为将所有空闲节点连接在一起,这里所说的空闲节点就是指节点的数据域中没有存放数据的节点。那么,当系统工作一段时间后,如图1所示,空闲节点就会在物理上变得不连续,但是在逻辑上还是通过数据链表的方式将当前的空闲节点连接在一起。当然,对于队列链表也是一样,这里所说的队列链表就是指节点的数据域中存放有数据的节点。在系统工作一段时间后,队列节点也会在物理上变得不连续,但是在逻辑上还是通过数据链表的方式将当前队列节点连接在一起的。
在物理上不连续而逻辑上连续的数据链表会由于电路受到干扰,而导致数据链表出现异常,那么,本发明通过一实施例,提供一种检测数据链表的方法,应用于一电子设备,比如,笔记本电脑,智能手机,平板电脑,该电子设备包括第一存储单元,如RAM,第一存储单元中设置有第一数据链表,该第一数据链表包括M个节点,由于数据链表特殊的结构,M应为大于等于2的整数,也就是说M可以为2,4,5,20,40,本申请不做限定。在具体实施过程中,第一数据链表可以为M个节点的队列链表,也可以为M个节点的空闲链表,当然第一存储单元还可以同时设置有M个节点的队列链表和M个节点的空闲链表,本申请不做具体限定。
如图2所示,该方法包括:
S101:当对M个节点中的任一节点存在第一操作时,检测第一数据链表所对应的第一计数器是否为异常状态,以及检测第一数据链表的尾指针是否为异常状态,其中,第一操作为读和/或写操作,第一计数器用于计数第一数据链表中节点的个数;
S102:当第一计数器及尾指针中至少有一个为异常状态时,确定第一数据链表为异常状态。
下面以空闲链表为例,对上述方案进行详细说明。
请结合图2及图3,例如,空闲链表初始化之后,空闲节点数为16,当系统工作一段时间之后,原本数据链表中的7个节点的数据域内存储有数据,那剩下的9个节点就是空闲节点,组成9个节点的空闲链表,即本实施例中的第一数据链表。然后,对第一数据链表9个节点中的任意一个节点,会存在一个第一操作,该第一操作可以是写操作还可以是读操作,接下来,执行S101,同时检测第一数据链表所对应的第一计数器是否为异常状态,以及检测第一数据链表的尾指针是否为异常状态,这里所说的第一计数器是用来对第一数据链表中节点为第一状态的节点个数进行计数的,当第一数据链表为空闲链表时,第一计数器就是用来计数空闲链表中的空闲节点数;当第一数据链表为队列链表时,第一计数器就是用来计数队列链表中的队列节点数;在本实施例中,由于第一数据链表为空闲链表,所以第一数据链表用来计数空闲节点数。
在具体实施例中,S101中的检测第一数据链表所对应的第一计数器是否为异常状态,可以为:当对第一数据链表存在第一操作时,获得在第一操作后第一计数器的第一值;将第一值与第二值比较,判断第一值是否与第二值相关,其中,第二值为在第一操作前第一计数器的值;当第一值与第二值相关时,确定第一计数器为正常状态;当第一值与第二值不相关时,确定第一计数器为异常状态。
具体来讲,当第一操作为读操作,也就是读取任一个节点中的数据时,获得第一计数器当前的第一值,也就是完成读操作之后,第一计数器的值,然后,将第一值与第二值比较,这里的第二值是在读操作之前时刻的第一计数器的值。比如,在读操作之前,第一计数器的值为6,由于读操作读取了一个节点中的数据,那该节点就变成了空闲节点,空闲节点数加1,此时,第一计数器的值应为7。当第一值为7时,则认为第一值与第二值相关,确定第一计数器为正常状态;当第一值不变仍为6时,或者第一值为大于7或小于6的任一值时,则认为第一值与第二值不相关,确定第一计数器为异常状态。
进一步,空闲链表初始化之后,空闲节点数为16,即M为16,系统工作一段时间以后,在M小于等于2时,就认为第一数据链表为空,比如,M等于2,也就是说此时第一数据链表中没有空闲节点,第一计数器的第二值为0,那么在读操作之后,第一计数器的第一值应该为1。若第一值为1,就认为第一值与第二值相关,确定第一计数器为正常状态;若第一值仍为2,或者小于2的任一值,或者大于1的任一值,就认为第一值与第二值不相关,确定第一计数器为异常状态。
当第一操作为写操作,也就是往任一节点写入数据时,获得第一计数器当前的第一值,也就是完成写操作之后,第一计数器的值,然后,将第一值与第二值比较,这里的第二值是在写操作之前时刻的第一计数器的值。比如,在写操作之前,第一计数器的值为6,由于写操作写入了一个节点的数据,那么该节点就由空闲节点变成了队列节点,此时,第一计数器的值应为5。当第一值为5时,则认为第一值与第二值相关,确定第一计数器为正常状态;当第一值不变仍为6时,或者第一值为大于6或小于5的任一值时,则认为第一值与第二值不相关,确定第一计数器为异常状态。
进一步,空闲链表初始化之后,空闲节点数为16,即M为16,系统工作一段时间以后,在M大于等于14时,就认为第一数据链表为满,比如,M等于14,也就是说此时第一数据链表中全是空闲节点,第一计数器的第二值为14,那么在写操作之后,第一计数器的第一值应该为13。若第一值为13,就认为第一值与第二值相关,确定第一计数器为正常状态;若第一值仍为14,或者大于14任一值,或者小于13任一值,就认为第一值与第二值不相关,确定第一计数器为异常状态。
当然,对第一计数器的异常状态判断不仅限于上述几种情况,上述实施例只为举例,并非用于限定本申请,为了说明书的简洁,不再一一列举其他情况。
进一步,S101中的检测第一数据链表的尾指针是否为异常状态,可以为:获得在第一操作之后第一数据链表的尾指针的第一值;将第一值与第二值比较,判断第一值是否与第二值相关,其中,第二值为在第一操作前,尾指针的值;当第一值与第二值相关时,确定尾指针为正常状态;当第二值与第一值不相关时,确定尾指针为异常状态。
具体来讲,当第一操作为读操作,也就是读取任一个节点中的数据时,获得第一数据链表的尾指针当前的第一值,也就是完成读操作之后,尾指针的值,然后,将第一值与第二值比较,这里的第二值是在读操作之前时刻的尾指针的值。比如,在读操作之前,空闲链表中有8个节点,分别是节点4、7、8、10、11、13、14、16,尾指针的值为16,由于读操作读取了一个节点中的数据,那该节点就变成了空闲节点,空闲节点数加1,此时,尾指针的值应该指向空闲链表中的除上述节点外的节点,即节点1、2、3、5、6、9、12、15中的任意一个节点,假如指向节点2,那么,此时尾指针的值就应该为2。当第一值为2时,则认为第一值与第二值相关,确定尾指针为正常状态;当第一值不变仍为16时,或者为4、7、8、10、11、13、14中的任一值时,则认为第一值与第二值不相关,确定尾指针为异常状态。
当第一操作为写操作,也就是往任一节点写入数据时,在第一数据链表中有足够多的空闲空间时,假设在第一操作之前的操作为读操作,也就是说,在读操作之后,尾指针才具有第二值,那么,此时的第一数据链表的最后一个空闲节点是刚刚压入第一数据链表的。那么,获得尾指针当前的第一值,也就是完成写操作之后,尾指针的值,然后,将第一值与第二值比较。比如,在写操作之前,尾指针的值为16,由于节点16是刚刚压入空闲链表的,那么,应该弹出的是节点2,而不应该是节点16,也就是说尾指针的值应还是16,而不应该是节点16的上一节点的节点14的地址,即尾指针的值不应为14。当第一值仍为16时,则认为第一值与第二值相关,确定尾指针为正常状态;当第一值变成14时,则认为第一值与第二值不相关,确定尾指针为异常状态。
当然,对第一数据链表尾指针的异常状态判断不仅限于上述几种情况,本领域普通技术人员可根据具体情况设定,本申请不做具体限定。
根据上面的描述,可知由于采用将第一计数器和尾指针的第一值与第二值进行比较,根据两个值是否关联来判断第一计数器和尾指针是否为异常状态,很简单的就能确定第一数据器和尾指针是否为异常状态,提供了一种简单的数据链表检测方法。
对于第一计数器以及尾指针的检测,可以像本实施例一样同时进行,也可以分别进行。当先对第一计数器进行检测时,若检测出第一计数器为异常状态,则不用再去检测尾指针是否为异常状态;同样的,当先对尾指针进行检测,若检测出尾指针为异常状态,则不用检测第一计数器是否为异常状态,本申请不做具体限定。
在判断出第一计数器和尾指针的异常状态之后,执行S102,即:当第一计数器及尾指针中至少有一个为异常状态时,确定第一数据链表为异常状态。
在具体实施例中,可以根据第一计数器及尾指针上是否为异常状态,来确定第一数据链表是否为异常状态。比如,以真值表来表示上述三者之间的关系,其中,值为1则表示为异常状态,值为0表示为正常状态。
本实施例中的真值表如下所示:
第一计数器 | 尾指针 | 第一数据链表 |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
也就是说,当第一计数器为正常状态,且尾指针也为正常状态时,第一数据链表确定为正常状态;当第一计数器为正常状态,且尾指针为异常状态时,第一数据链表确定为异常状态;当第一计数器为异常状态,且尾指针为正常状态时,第一数据链表确定为异常状态;当第一计数器为异常状态,且尾指针也为异常状态时,第一数据链表确定为异常状态。
另一实施例中,在第一存储单元中还可以设置有用于标识第一数据链表的异常类型的至少一位标识位,以方便用户对第一数据链表的异常类型进行识读,其中,这些标识位的位数是根据检测的第一计数器/尾指针的情况而定。当只检查第一计数器或者只检测尾指针时,就只用设置2位标识位,而同时检测第一计数器和尾指针时,就设置4位标识位,当然,还有其他的设置方式,本领域技术人员可自行设定,本申请不做具体限定。在本实施例中,由于同时检测第一计数器以及尾指针,所以设置有4位标识位。
那么,在确定第一数据链表为异常之后,如图4所示,该方法还包括:
S201:根据第一操作以及第一计数器和尾指针的异常状态,确定第一数据链表的异常类型;
S202:基于异常类型,更改至少一个标识位的值;
S203:锁存至少一个标识位的值。
具体来说,当确定第一数据链表为异常后,执行S201,可以根据第一操作以及第一计数器和尾指针的异常状态,确定第一数据链表的异常类型,比如:第一种,当第一操作为读操作时,第一计数器确定为异常状态,且尾指针为正常状态;第二种,当第一操作为写操作时,第一计数器确定为异常状态,且尾指针为正常状态;第三种,当第一操作为读操作时,第一计数器确定为正常状态,且尾指针为异常状态;第四种,当第一操作为写操作时,第一计数器确定为正常状态,且尾指针为异常状态。当然,还可以有其他类型异常,本领域技术人员可自行设定,本申请不做具体限定。
接下来,在确定第一数据链表为异常类型之后,执行S202,更改至少一个标识位的值。
最后,执行S203,锁存至少一个标识位的值。
比如,确定第一数据链表的异常类型为第一种时,更改4位标识位中的由右向左第一位,即将第一位由0改为1,此时,4位标识位为1000,锁存1000这个值;再比如,确定第一数据链表的异常类型为第三种时,更改4位标识位中由右向左的第三位,即将第三位由0改为1,此时,4位标识位为0010,锁存0010这个值,当然,还可以有其他情况,本申请不做具体限定。
通过上述步骤,根据第一操作和第一数据链表的异常状态,更改至少一个标识位对应位置的值,使得用户能够识读第一数据链表的异常类型,进一步,对上述标识位的值进行锁存,使得第一数据链表的异常类型保存起来,方便用户日后识读。
另一实施例中,在确定第一数据链表为异常之后,或者在锁存标识位的值之后,为了恢复第一数据链表,重新分配资源,提高系统的可靠性,该方法还包括:获得第一控制指令;响应第一控制指令,控制第一数据链表初始化。
至此,就完成了对第一数据链表的检测,异常判断,以及恢复的过程。应用上述方案,采用检测第一计数器和尾指针是否为异常状态来确定第一数据链表是否异常状态,不用在第一存储单元中存储若干校验位,实现资源占用率低的数据链表检测,并且不用给每个链表指针配置若干校验位,也就不会出现由于校验位数较少出现漏检的情况,提供一种可靠的数据链表检测方法;进一步,采用将第一计数器和尾指针的第一值与第二值进行比较,根据两个值是否关联来判断第一计数器/尾指针是否为异常状态,更为简单有效地确定了第一计数器/尾指针是否为异常状态,提供了一种简单的数据链表检测方法;进一步,在确定第一数据链表为异常后,根据第一操作来确定第一数据链表的异常类型,这样就能够很清楚的知道第一数据链表的异常类型,并能在明确异常类型之后,锁存标识位,方便用户识读;进一步,控制第一数据链表初始化,使得第一数据链表恢复,重新分配资源,提高了系统的可靠性。
如将上述方案应用于队列链表,具体的检测过程是相似的,在此就不一一赘述,本领域普通技术人员可以在理解上述方案的情况下,实现对队列链表的检测。
基于同一发明构思,本发明通过本申请的另一实施例还提供一种电子设备,比如,笔记本电脑,智能手机,平板电脑。
如图5所示,该电子设备包括:第一存储单元10,第一存储单元10设置有第一数据链表20,该第一数据链表20可以为队列链表,也可以为空闲链表,在本实施例中,第一数据链表20为空闲链表。如图3所示,第一数据链表20包括M个节点,由于数据链表特殊的结构,M应为大于等于2的整数,也就是说M可以为2,4,5,20,40,本申请不做限定。在具体实施过程中,第一数据链表20可以为M个节点的队列链表,也可以为M个节点的空闲链表,当然第一存储单元10还可以同时设置有M个节点的队列链表和M个节点的空闲链表,本申请不做具体限定。
请参考图5,该电子设备还包括:控制模块30,用于对M个节点中的任一节点进行第一操作,其中,第一操作为读和/或写操作;第一计数器40,用于计数第一数据链表20中节点为第一状态的节点个数;第一数据链表处理模块50,用于当对M个节点中的任一节点存在第一操作时,检测第一数据链表20所对应的第一计数器40是否为异常状态,以及检测第一数据链表20的尾指针是否为异常状态;当第一计数器40及尾指针中至少有一个为异常状态时,确定第一数据链表20为异常状态。
进一步,第一数据链表处理模块50具体包括:第一检测模块,用于当对M个节点中的任一节点存在第一操作时,检测第一数据链表20所对应的第一计数器40是否为异常状态;还用于当对M个节点中的任一节点存在第一操作时,检测第一数据链表20的尾指针是否为异常状态;第一确定模块,当第一计数器40及尾指针中至少有一个为异常状态时,确定第一数据链表20为异常状态。
进一步,第一检测模块具体包括:第一获得子模块,用于当对第一数据链表20存在第一操作时,获得在第一操作后第一计数器40的第一值;第一比较子模块,用于将第一值与第二值比较,判断第一值是否与第二值相关,其中,第二值为在第一操作前第一计数器40的值;第一确定子模块,用于当第一值与第二值相关时,确定第一计数器40为正常状态;还用于当第一值与第二值不相关时,确定第一计数器40为异常状态。
进一步,第一检测模块具体包括:第二获得子模块,用于在第一操作之后第一数据链表20的尾指针的第一值;第二比较子模块,用于将第一值与第二值比较,判断第一值是否与第二值相关,其中,第二值为在第一操作前,尾指针的值;第二确定子模块,用于当第一值与第二值相关时,确定尾指针为正常状态;还用于当第二值与第一值不相关时,确定尾指针为异常状态。
进一步,第一存储单元10中还设置有至少一位标识位,至少一位标识位用于标识第一数据链表20的异常类型。
进一步,该电子设备还包括:第二确定模块60,用于根据第一操作以及第一计数器40和尾指针的异常状态,确定第一数据链表20的异常类型;第一更改模块70,用于基于异常类型,更改至少一个标识位的值;第一锁存模块80,用于锁存至少一个标识位的值。
进一步,控制模块30还用于获得第一控制指令;响应第一控制指令,控制第一数据链表20初始化。
进一步,第一数据链表20具体为队列链表。
进一步,第一数据链表20具体为空闲链表。
上述本申请实施例中的技术方案,至少具有如下的技术效果或优点:
1、由于采用检测第一计数器和尾指针是否为异常状态来确定第一数据链表是否异常状态,就不用每个链表都配置对应的若干校验位,也不用在第一存储单元中来存储校验位,有效地解决了现有技术中资源占用率高的技术问题,进而实现了资源占用率低的数据链表检测。
2、由于采用检测第一计数器和尾指针是否为异常状态来确定第一数据链表是否异常状态,就不用对每个链表指针配置若干校验位,也不会出现由于校验位数较少出现漏检的情况,有效地解决了现有技术中减少校验位会出现漏检的技术问题,进而提供了一种可靠的数据链表检测方法。
3、由于采用将第一计数器和尾指针的第一值与第二值进行比较,根据两个值是否关联来判断第一计数器和尾指针是否为异常状态,更为简单的确定第一数据器和尾指针是否为异常状态,省去了对校验位的逐位检测,提供了一种简单的数据链表检测方法。
4、由于在确定第一数据链表为异常后,根据第一操作来确定第一数据链表的异常类型,能够清楚的确定第一数据链表的异常类型,再根据异常类型,改变并锁存标识位的值,以方便用户识读。
5、由于在确定第一数据链表异常之后,控制第一数据链表初始化,实现第一数据链表的恢复,重新分配资源,提高了系统的可靠性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种检测数据链表的方法,应用于一电子设备,所述电子设备包括第一存储单元,所述第一存储单元中设置有第一数据链表,其中,所述第一数据链表包括M个节点,M为大于等于2的整数,其特征在于,所述方法包括:
当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态,以及检测所述第一数据链表的尾指针是否为异常状态,其中,所述第一操作为读和/或写操作,所述第一计数器用于计数第一数据链表中节点为第一状态的节点个数;
当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态;
其中,所述检测所述第一存储单元的第一计数器是否为异常状态,具体包括:当对所述第一数据链表存在第一操作时,获得在所述第一操作后所述第一计数器的第一值;将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前所述第一计数器的值;当所述第一值与所述第二值相关时,确定所述第一计数器为正常状态;当所述第一值与所述第二值不相关时,确定所述第一计数器为异常状态。
2.如权利要求1所述的方法,其特征在于,所述检测所述第一数据链表的尾指针是否为异常状态,具体包括:
获得在所述第一操作之后所述第一数据链表的尾指针的第一值;
将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前,所述尾指针的值;
当所述第一值与所述第二值相关时,确定所述尾指针为正常状态;
当所述第二值与所述第一值不相关时,确定所述尾指针为异常状态。
3.如权利要求1所述的方法,其特征在于,所述第一存储单元中还设置有至少一位标识位,所述至少一位标识位用于标识所述第一数据链表的异常类型。
4.如权利要求3所述的方法,其特征在于,在确定所述第一数据链表为异常之后,所述方法还包括:
根据所述第一操作以及所述第一计数器和所述尾指针的异常状态,确定所述第一数据链表的异常类型;
基于所述异常类型,更改所述至少一个标识位的值;
锁存所述至少一个标识位的值。
5.如权利要求1所述的方法,其特征在于,在确定所述第一数据链表为异常状态之后,所述方法还包括:
获得第一控制指令;
响应所述第一控制指令,控制所述第一数据链表初始化。
6.如权利要求1所述的方法,其特征在于,所述第一数据链表具体为队列链表。
7.如权利要求1所述的方法,其特征在于,所述第一数据链表具体为空闲链表。
8.一种电子设备,所述电子设备包括第一存储单元,所述第一存储单元设置有第一数据链表,所述第一数据链表包括M个节点,M为大于等于2的整数,其特征在于,所述电子设备还包括:
控制模块,用于对所述M个节点中的任一节点进行第一操作,其中,所述第一操作为读和/或写操作;
第一计数器,用于计数第一数据链表中节点为第一状态的节点个数;
第一数据链表处理模块,用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态,以及检测所述第一数据链表的尾指针是否为异常状态;当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态;
其中,所述第一数据链表处理模块具体包括:第一检测模块,用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表所对应的第一计数器是否为异常状态;还用于当对所述M个节点中的任一节点存在第一操作时,检测所述第一数据链表的尾指针是否为异常状态;第一确定模块,当所述第一计数器及所述尾指针中至少有一个为异常状态时,确定所述第一数据链表为异常状态;所述第一检测模块具体包括:第一获得子模块,用于当对所述第一数据链表存在第一操作时,获得在所述第一操作后所述第一计数器的第一值;第一比较子模块,用于将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前所述第一计数器的值;第一确定子模块,用于当所述第一值与所述第二值相关时,确定所述第一计数器为正常状态;还用于当所述第一值与所述第二值不相关时,确定所述第一计数器为异常状态。
9.如权利要求8所述的电子设备,其特征在于,所述第一检测模块具体包括:
第二获得子模块,用于在所述第一操作之后获得所述第一数据链表的尾指针的第一值;
第二比较子模块,用于将所述第一值与第二值比较,判断所述第一值是否与所述第二值相关,其中,所述第二值为在所述第一操作前,所述尾指针的值;
第二确定子模块,用于当所述第一值与所述第二值相关时,确定所述尾指针为正常状态;还用于当所述第一值与所述第二值不相关时,确定所述尾指针为异常状态。
10.如权利要求8所述的电子设备,其特征在于,所述第一存储单元中还设置有至少一位标识位,所述至少一位标识位用于标识所述第一数据链表的异常类型。
11.如权利要求10所述的电子设备,其特征在于,所述电子设备还包括:
第二确定模块,用于根据所述第一操作以及所述第一计数器和所述尾指针的异常状态,确定所述第一数据链表的异常类型;
第一更改模块,用于基于所述异常类型,更改所述至少一个标识位的值;
第一锁存模块,用于锁存所述至少一个标识位的值。
12.如权利要求8所述的电子设备,其特征在于,所述控制模块还用于获得第一控制指令;响应所述第一控制指令,控制所述第一数据链表初始化。
13.如权利要求8所述的电子设备,其特征在于,所述第一数据链表具体为队列链表。
14.如权利要求8所述的电子设备,其特征在于,所述第一数据链表具体为空闲链表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210379926.7A CN103713962B (zh) | 2012-10-09 | 2012-10-09 | 一种检测数据链表方法及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210379926.7A CN103713962B (zh) | 2012-10-09 | 2012-10-09 | 一种检测数据链表方法及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103713962A CN103713962A (zh) | 2014-04-09 |
CN103713962B true CN103713962B (zh) | 2017-07-18 |
Family
ID=50406963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210379926.7A Expired - Fee Related CN103713962B (zh) | 2012-10-09 | 2012-10-09 | 一种检测数据链表方法及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103713962B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105404555A (zh) * | 2015-12-29 | 2016-03-16 | 重庆安碧捷科技股份有限公司 | 医疗多线程共享资源分配处理方法及系统 |
CN106528598B (zh) * | 2016-09-23 | 2019-10-18 | 华为技术有限公司 | 一种链的管理方法及物理设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1790279A (zh) * | 2004-12-17 | 2006-06-21 | 华为技术有限公司 | 一种链表运行时错误检测的方法 |
CN101594201A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 链式队列管理结构整合错误数据过滤的方法 |
CN101788928A (zh) * | 2009-01-24 | 2010-07-28 | 华为技术有限公司 | 一种检测链表的方法和装置 |
CN102546305A (zh) * | 2012-01-19 | 2012-07-04 | 华为技术有限公司 | 一种双向链表访问检错的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6988180B2 (en) * | 2003-09-29 | 2006-01-17 | Microsoft Corporation | Method and apparatus for lock-free, non-blocking hash table |
US8312457B2 (en) * | 2009-12-14 | 2012-11-13 | Microsoft Corporation | Maintaining a count for lock-free linked list structures |
-
2012
- 2012-10-09 CN CN201210379926.7A patent/CN103713962B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1790279A (zh) * | 2004-12-17 | 2006-06-21 | 华为技术有限公司 | 一种链表运行时错误检测的方法 |
CN101788928A (zh) * | 2009-01-24 | 2010-07-28 | 华为技术有限公司 | 一种检测链表的方法和装置 |
CN101594201A (zh) * | 2009-05-20 | 2009-12-02 | 清华大学 | 链式队列管理结构整合错误数据过滤的方法 |
CN102546305A (zh) * | 2012-01-19 | 2012-07-04 | 华为技术有限公司 | 一种双向链表访问检错的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103713962A (zh) | 2014-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108595157B (zh) | 区块链数据的处理方法、装置、设备和存储介质 | |
CN103647850B (zh) | 一种分布式版本控制系统的数据处理方法、设备及系统 | |
CN104424256B (zh) | 布隆过滤器生成方法和装置 | |
CN106919494A (zh) | 安卓应用日志的实现方法和装置 | |
CN113489593B (zh) | Json报文的核对方法和json报文的核对装置 | |
CN103176892A (zh) | 一种页面监控方法及系统 | |
US20220100486A1 (en) | Model deployment method, model deployment device and terminal equipment | |
CN111310829A (zh) | 基于混淆矩阵的分类结果检测方法、装置及存储介质 | |
JP2017174418A (ja) | モデルチェックのためのデータ構造抽象化 | |
CN103713962B (zh) | 一种检测数据链表方法及电子设备 | |
CN114116013B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
WO2021128171A1 (zh) | 芯片的形式验证方法、设备和存储介质 | |
CN102298112A (zh) | 一种可编程逻辑器件的测试方法及系统 | |
CN112257362A (zh) | 逻辑代码的验证方法、验证装置以及存储介质 | |
CN106648465A (zh) | 云平台中存储虚拟资源的方法及装置 | |
US8453116B2 (en) | Efficient invariant inference for program verification | |
CN108710658A (zh) | 一种数据记录的存储方法及装置 | |
CN112052330B (zh) | 一种应用程序关键词的分配方法及装置 | |
CN114298840A (zh) | 一种基于零知识证明的区块链交易背书方法及系统 | |
CN106250492B (zh) | 索引的处理方法及装置 | |
CN112422635A (zh) | 数据核对方法、装置、设备、系统及存储介质 | |
US20140337265A1 (en) | Controllability checking systems and methods | |
CN112019368B (zh) | 一种vnf迁移方法、装置及存储介质 | |
CN112286594B (zh) | 对象序列化和反序列化方法及设备、电子设备和介质 | |
CN112084827B (zh) | 数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20170512 Address after: 210012 Nanjing, Yuhuatai District, South Street, Bauhinia Road, No. 68 Applicant after: Nanjing Zhongxing Software Co., Ltd. Address before: 518057 Nanshan District Guangdong high tech Industrial Park, South Road, science and technology, ZTE building, Ministry of Justice Applicant before: ZTE Corporation |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170718 Termination date: 20191009 |
|
CF01 | Termination of patent right due to non-payment of annual fee |