一种双向链表访问检错的方法及装置的制作方法

文档序号:7887940阅读:162来源:国知局
专利名称:一种双向链表访问检错的方法及装置的制作方法
技术领域
本发明实施例涉及通信技术领域,尤其涉及一种双向链表访问检错的方法及装置。
背景技术
当前现场可编程门阵列(Field Programmable Gate Array, FPGA)被用来处理越来越复杂的业务,FPGA对链表操作和使用越来越频繁。图1是一种通常的双向链表结构示意图,如图1所示,该双向链表有n+1个节点,节点0是链表的首节点,节点η是链表的尾节点,每个链表节点具有三个属性数据、前驱节点指针和后继节点指针,其中,数据就是链表节点管理的数据;前驱节点指针存放着在该链表上与该节点相邻的前驱节点的内存地址, 对于节点0来说,该地址为空值,对于节点1来说其前驱节点指针指向节点0 ;后继节点指针存放着在该链表上与该节点相邻的后继节点的内存地址,对于节点η来说,该地址为空值,对于节点1来说其后继节点指针指向节点2。在用FPGA对链表进行管理时,由于链表操作复杂、使用频繁,容易出错,操作出现错误后很难马上发现,并且容易导致系统崩溃。在 FPGA实现对链表的管理时,引起链表访问错误的原因主要有三种1、存储链表的外部存储器出现比特位(bit)跳变导致链表内容错误,举例来说,如图1中,如果外部存储器存放节点0的后继节点指针对应的位置出现错误bit跳变,则该后继节点指针可能变为非法指针, 当FPGA对该后继节点指针内容进行修改或访问时,将会导致系统崩溃;2、应用程序读写越界造成链表内容被改写,举例来说,如图1,当应用程序写越界将节点0的后继节点指针改写为非法指针,当FPGA对该后继节点指针内容进行修改或访问时,将会导致系统崩溃;3、 FPGA外存控制器错误导致读写非预期的链表节点地址。FPGA在链表访问过程中会记录当前访问到的链表的节点的指针,并将该指针存储在FPGA的逻辑控制器中。在FPGA继续访问时,会从该指针继续访问链表,访问链表时会通过FPGA的外存控制器来操作外部存储器, 外存控制器用来接收逻辑控制器对外部存储器的访问请求,并根据该访问请求对外部存储器进行相应访问,在这个访问过程中如果出现外存控制器错误,可能导致返回给FPGA错误的链表节点,如图1所示,当FPGA访问到链表节点1时,会将节点1的指针存储在FPGA的逻辑控制器中,当FPGA后续继续访问该链表时,利用该逻辑控制器中存储的前次链表访问的节点1的指针通过外存控制器访问外部存储器中的链表,如果外部控制器错误导致访问外部存储器的非节点1的其他节点,对这个其他节点内容进行修改或访问可能会导致系统崩溃。目前,通常会利用指针冗余备份的方法来实现实时检错,在存储链表指针时,FPGA会同时存储两份相同的链表,在对链表节点访问时,只有读出的两份链表节点的数据内容相同才认为链表访问正确,否则认为链表访问发生了异常,该方法对于防止存储链表的外部存储器出现bit跳变和应用程序读写越界造成链表内容被改引起的链表访问错误比较有效, 但对于FPGA外存控制器错误导致读写非预期的链表节点地址引起的链表访问错误并不适用,因为只是比较两份链表节点的数据内容是否相同,并不能说明所访问的链表指针是否正确。

发明内容
本发明实施例提供了一种双向链表访问检错的方法及装置,在FPGA对链表管理过程中,解决在应用程序通过FPGA访问双向链表时,出现链表访问错误而无法及时、有效检测出来,导致系统崩溃的问题。为达到上述目的,本发明实施例提供了一种双向链表访问检错的方法,所述方法包括在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节点,所述方法包括根据所述当前指针获取所述双向链表的节点;所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等时,确定所述双向链表访问出错。本发明实施例提供了一种双向链表访问检错的装置,所述装置包括初始化单元,用于在双向链表生成时,在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节点;获取单元,用于根据所述当前指针获取所述双向链表的节点;确定单元,用于所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等时,确定所述双向链表访问出错。综上,本发明实施例提供了一种双向链表访问检错的方法及装置,在应用程序通过FPGA对链表进行访问时,能够对链表访问进行及时、有效的检错。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是现有技术中一种通常的双向链表结构示意图;图2是本发明实施例一提供的一种双向链表访问检错的方法流程示意图;图3是本发明实施例提供的一种双向链表访问检错的方法中双向链表示意图;图4是本发明实施例提供的一种双向链表访问检错的方法中链前次指针和当前指针更新后的示意图;图5是本发明实施例提供的一种双向链表访问检错的方法中另一种双向链表示意图;图6是本发明实施例二提供的第一种双向链表访问检测的装置示意图;图7是本发明实施例二提供的第二种双向链表访问检测的装置示意图;图8是本发明实施例二提供的第三种双向链表访问检测的装置示意图。
具体实施例方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一本发明实施例提供了一种双向链表访问检错的方法,参见图2,图2为本发明实施例的方法流程图,包括102,根据当前指针获取所述双向链表的节点;104,所述获得的双向链表的节点的前驱节点指针与前次指针不相等时,确定所述双向链表访问出错。可编程器件对链表管理时,链表存放在外部存储器中。可编程器件包含逻辑控制器和外存控制器等。可编程器件可以为FPGA或专用集成电路(Application Specific Integrated Circuit,ASIC),本发明实施例以FPGA为例进行描述,FPGA通过逻辑控制器和外存控制器访问外部存储器中的链表。逻辑控制器存放前次访问的链表节点的指针及当前要访问的链表节点的指针。当FPGA接收到应用程序访问外部存储器中的链表节点的请求时,根据逻辑存储器中存放的当前要访问的链表节点指针,通过FPGA的外存控制器访问外部存储器中的链表节点。在这个过程中如果出现外存控制器错误,可能导致访问错误的链表节点。在双向链表生成后,在逻辑控制器中存放双向链表的当前指针和前次指针,该当前指针用于标识本次要访问的该双向链表节点,该前次指针用于标识前次访问的该双向链表节点,该当前指针初始化指向该双向链表的首节点,该前次指针初始化为空值,所谓的初始化是指在链表生成后,在对链表操作前,对和链表有关的变量的初始值设置。举例来说,如图3所示,图3为该双向链表示意图,其中节点0的前驱节点指针为空值,节点0的后继节点指针初始化为节点1,当前指针初始化指向节点0,前次指针初始化指向空值。当应用程序通过FPGA访问该双向链表时,FPGA利用逻辑控制器中存放的当前指针通过FPGA的外存控制器访问该双向链表。在应用程序通过FPGA访问该双向链表时,根据逻辑控制器中的该当前指针访问该双向链表,获得该双向链表的节点,判断该节点的前驱节点指针与该前次指针是否相等,如果不相等则确定该链表访问出错,进一步,如果确认该链表访问出错可以通知网管该双向链表访问出错,并停止应用程序对该双向链表的访问。如果该节点的前驱节点指针与该前次指针相等,则将该前次指针进行修改,修改后的前次指针的值为该当前指针的值。然后修改当前指针,修改后的当前指针的值为该节点的后继节点指针的值。如图4所示,图4为确定该节点的前驱节点指针与该前次指针相等时,该当前指针和前次指针修改后的示意图,前次指针修改为指向节点0,当前指针修改为指向节点1。下次应用程序通过FPGA访问该双向链表时,FPGA根据逻辑控制器中的该当前指针通过FPGA的外存控制器访问到外部存储器中该双向链表的节点1,通过判断节点1的前驱节点指针是否和前次指针相等来判断链表是否出错,如果判断节点1的前驱节点指针和前次指针相等,则将该前次指针修改为指向节点1,该当前指针修改指向节点2。当该应用程序通过FPGA继续访问该双向链表的后续节点时,其操作过程与上述对节点0或节点1的操作类似,在此不在赘述。优选地,在双向链表初始化时,双向链表的首节点的前驱节点指针初始指向该双向链表首节点,所述前次指针初始指向所述双向链表的首节点。如图5所示,双向链表节点0的前驱节点指针可以初始化指向节点0,当前指针初始化指向节点0,前次指针初始化指向节点 0,这样实现优点在于,提高了对该双向链表的首节点的检测准确度,在对节点0进行检测时,进行比较的前次指针和当前指针的前驱节点指针值都为节点0的地址,而不是空值,在内存的操作中,内存的内容初始化通常都是设置为空值,这样,当外存控制器出错时,通过当前指针访问的可能不是节点0,而访问到另一内存,而恰好该内存地址的内容都是空值, 则无法判断出链表访问错误。而节点0的地址在外部存储器中是唯一的,在其他内存位置出现与该地址相同的值的概率很小,因此,通过把双向链表的首节点的前驱节点指针和前次指针初始指向双向链表的首节点能够提高对该双向链表首节点的检测准确度。本发明实施例提供的链表检错的方法好处在于,每次FPGA通过逻辑控制器访问外存储器的双向链表时,都会有个预期结果,这个预期结果是通过前次指针来判断的,如果通过逻辑控制器获得的外部存储器的双向链表的节点的前驱节点指针与该前次指针不相等,则认为获得链表节点不满足预期结果,因此可以判断该双向链表错误。这样能够解决由于FPGA的外存控制器错误引起的链表访问错误的问题,举例来说,如图3如果应用程序通过FPGA访问该双向链表时,利用逻辑控制器的当前指针通过FPGA的外存控制器访问该双向链表时,如果FPGA的外存控制器出错,导致本该访问该双向链表的节点1,但错误的访问了该双向链表的节点n,由于节点η的前驱节点指针为节点η-1的地址与该前次指针指向节点0的地址不相等,则可判断该双向链表访问出错。同时,本发明实施例提供的技术方案对于由于外部存储器出现错误BIT位跳变或应用程序读写越界造成链表节点前驱节点指针被改写引起的链表访问错误同样适用,举例来说,如图3所示,如果外部存储器存放节点 1的前驱节点指针对应的位置出现错误bit跳变,该前驱节点指针变为非法指针,那么当应用程序通过FPGA访问该双向链表时,利用逻辑控制器的当前指针获得该双向链表的节点1 时,由于节点1的前驱节点指针已经变为非法指针,该前次指针将和节点1的前驱节点指针不相等,因此,可以判断出该双向链表访问错误。可见,通过本发明实施例提供的方法,当应用程序通过FPGA访问双向链表时,能够对双向链表的访问进行实时检错,当链表访问出错时上报网管并停止应用程序对链表访问,能够有效解决链表访问出错导致系统崩溃的问题。实施例二 本发明实施例提供了一种双向链表访问检错的装置,参见图6,图6为本发明实施例的装置示意图,该装置包括初始化单元602,获取单元604,确定单元606。初始化单元602,用于在双向链表生成时,在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节占.
^ \\\ 获取单元604,用于根据所述当前指针获取所述双向链表的节点;确定单元606,用于所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等,则确定所述双向链表访问出错。可编程器件对链表管理时,链表存放在外部存储器中。可编程器件包含逻辑控制器和外存控制器等。可编程器件可以为FPGA或专用集成电路(Application Specific
7Integrated Circuit,ASIC),本发明实施例以FPGA为例进行描述,FPGA通过逻辑控制器和外存控制器访问外部存储器中的链表。逻辑控制器存放前次访问的链表节点的指针及当前要访问的链表节点的指针。当FPGA接收到应用程序访问外部存储器中的链表节点的请求时,根据逻辑存储器中存放的当前要访问的链表节点指针,通过FPGA的外存控制器访问外部存储器中的链表节点。在这个过程中如果出现外存控制器错误,可能导致访问错误的链表节点。在双向链表生成后,初始化单元602在逻辑控制器中存放双向链表的当前指针和前次指针,该当前指针用于标识本次要访问的该双向链表节点,该前次指针用于标识前次访问的该双向链表节点,该当前指针初始化指向该双向链表的首节点,该前次指针初始化为空值,所谓的初始化是指在链表生成后,在对链表操作前,对和链表有关的变量的初始值设置。举例来说,如图3所示,图3为该双向链表示意图,其中节点0的前驱节点指针为空值,节点0的后继节点指针初始化为节点1,当前指针初始化指向节点0,前次指针初始化指向空值。当应用程序通过FPGA访问该双向链表时,FPGA利用逻辑控制器中存放的当前指针通过FPGA的外存控制器访问该双向链表。在应用程序通过FPGA访问该双向链表时,获取单元604根据逻辑控制器中的该当前指针访问该双向链表,获得该双向链表的节点,确定单元606判断该节点的前驱节点指针与该前次指针是否相等,如果不相等则确定该链表访问出错。下次应用程序通过FPGA访问该双向链表时,获取单元604根据逻辑控制器中的该当前指针通过外存控制器访问到外部存储器中该双向链表的节点1,确定单元606通过判断节点1的前驱节点指针是否和前次指针相等来判断链表是否出错,如果判断节点1的前驱节点指针和前次指针相等,该前次指针修改为指向节点1,该当前指针修改指向节点2。当该应用程序通过FPGA继续访问该双向链表的后续节点时,其操作过程与上述对节点0或节点1的操作类似,在此不在赘述。优选地,在双向链表初始化时,初始化单元602可以将双向链表的首节点的前驱节点指针初始指向该双向链表首节点,所述前次指针初始指向所述双向链表的首节点。如图5所示,双向链表节点0的前驱节点指针可以初始化指向节点0, 当前指针初始化指向节点0,前次指针初始化指向节点0,这样实现优点在于,提高了对该双向链表的首节点的检测准确度,在对节点0进行检测时,进行比较的前次指针和当前指针的前驱节点指针值都为节点0的地址,而不是空值,在内存的操作中,内存的内容初始化通常都是设置为空值,这样,当外存控制器出错时,通过当前指针访问的可能不是节点0,而访问到另一内存,而恰好该内存地址的内容都是空值,则无法判断出链表访问错误。而节点 0的地址在外部存储器中是唯一的,在其他内存位置出现与该地址相同的值的概率很小,因此,通过把双向链表的首节点的前驱节点指针和前次指针初始指向双向链表的首节点能够提高对该双向链表首节点的检测准确度。 本发明实施例提供的链表检错的方法好处在于,每次FPGA通过逻辑控制器访问外存储器的双向链表时,都会有个预期结果,这个预期结果是通过前次指针来判断的,如果通过逻辑控制器获得的外部存储器的双向链表的节点的前驱节点指针与该前次指针不相等,则认为获得链表节点不满足预期结果,因此可以判断该双向链表错误。这样能够解决由于FPGA的外存控制器错误引起的链表访问错误的问题,举例来说,如图3如果应用程序通过FPGA访问该双向链表时,利用逻辑控制器的当前指针通过FPGA的外存控制器访问该双向链表时,如果FPGA的外存控制器出错,导致本该访问该双向链表的节点1,但错误的访问了该双向链表的节点n,由于节点η的前驱节点指针为节点η-1的地址与该前次指针指向节点0的地址不相等,则可判断该双向链表访问出错。同时,本发明实施例提供的技术方案对于由于外部存储器出现错误BIT位跳变或应用程序读写越界造成链表节点前驱节点指针被改写引起的链表访问错误同样适用,举例来说,如图3所示,如果外部存储器存放节点 1的前驱节点指针对应的位置出现错误bit跳变,该前驱节点指针变为非法指针,那么当应用程序通过FPGA访问该双向链表时,利用逻辑控制器的当前指针获得该双向链表的节点1 时,由于节点1的前驱节点指针已经变为非法指针,该前次指针将和节点1的前驱节点指针不相等,因此,可以判断出该双向链表访问错误。该装置还可以包括处理单元702,用于当该节点的前驱节点指针与该前次指针相等,将该前次指针进行修改,修改后的前次指针的值为该当前指针的值。然后修改当前指针,修改后的当前指针的值为该节点的后继节点指针的值。如图4所示,图4为确定该节点的前驱节点指针与该前次指针相等时,该当前指针和前次指针修改后的示意图,前次指针修改为指向节点0,当前指针修改为指向节点1。进一步,该装置还可以包括通告单元802,如图8所示。通告单元802,用于当判断单元606判断该双向链表访问出错之后,通知网管该双向链表访问出错,并停止应用程序对该双向链表的访问。本发明实施例提供的装置可以由网络设备或可编程控制器来实现,网络设备可以为路由器或交换机,可编程控制器可以为FPGA或ASIC。可见,通过本发明实施提供的装置,当应用程序通过可编程器件访问双向链表时, 能够对双向链表的访问进行实时检错,当链表访问出错时上报网管并停止应用程序对链表访问,能够有效解决链表访问出错导致系统崩溃的问题。本领域普通技术人员可以理解实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
权利要求
1.一种双向链表访问检错的方法,其特征在于,在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节点,所述方法包括根据所述当前指针获取所述双向链表的节点;所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等时,确定所述双向链表访问出错。
2.根据权利要求1所述的方法,其特征在于,该方法进一步包括所述双向链表的首节点的前驱节点指针初始指向所述双向链表首节点,所述前次指针初始指向所述双向链表的首节点。
3.根据权利要求1所述的方法,其特征在于,该方法进一步包括所述双向链表的首节点的前驱节点指针初始为空值,所述前次指针初始为空值。
4.根据权利要求1至3任一所述的方法,其特征在于,该方法进一步包括所述获得的双向链表的节点的前驱节点指针与所述前次指针相等时,将所述前次指针内容进行修改,修改后的所述前次指针的值为所述当前指针的值,并将所述当前指针进行修改,修改后的所述当前指针的值为所述获得的双向链表的节点的后继节点指针的值。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述双向链表访问出错之后, 进一步包括通知网管所述双向链表访问出错,并停止对所述双向链表的访问。
6.一种双向链表访问检错的装置,其特征在于,包括初始化单元,用于在双向链表生成时,在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节点;获取单元,用于根据所述当前指针获取所述双向链表的节点;确定单元,用于所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等时,确定所述双向链表访问出错。
7.根据权利要求6所述的装置,其特征在于,进一步包括所述初始化单元设置所述双向链表的首节点的前驱节点指针初始指向所述双向链表首节点,所述前次指针初始指向所述双向链表的首节点。
8.根据权利要求6所述的装置,其特征在于,进一步包括所述初始化单元设置所述双向链表的首节点的前驱节点指针初始为空值,所述前次指针初始为空值。
9.根据权利要求6至8任一权利要求所述的装置,其特征在于,包括处理单元,用于当所述获得的双向链表的节点的前驱节点指针与所述前次指针相等时,将所述前次指针内容进行修改,修改后的所述前次指针的值为所述当前指针的值,并将所述当前指针进行修改,修改后的所述当前指针的值为所述获得的双向链表的节点的后继节点指针的值。
10.根据权利要求6至9任一权利要求所述的装置,其特征在于,包括通告单元,用于当所述判断单元判断所述双向链表访问出错之后,通知网管所述双向链表访问出错,并停止对所述双向链表的访问。
全文摘要
本发明实施例提供一种双向链表访问检错的方法及装置,该方法包括在逻辑控制器中存放所述双向链表的当前指针和前次指针,所述当前指针用于标识本次要访问的所述双向链表节点,所述前次指针用于标识前次访问的所述双向链表节点,所述当前指针初始指向所述双向链表的首节点,所述方法包括根据所述当前指针获取所述双向链表的节点;所述获取的双向链表的节点的前驱节点指针与所述前次指针不相等时,确定所述双向链表访问出错。本发明实施例还提供了一种双向链表访问检错的装置。通过本发明实施例提供的方法及装置,在应用程序通过FPGA对链表进行访问时,能够对链表访问进行实时检错,以避免由于链表访问错误导致系统崩溃。
文档编号H04L12/26GK102546305SQ20121001817
公开日2012年7月4日 申请日期2012年1月19日 优先权日2012年1月19日
发明者张恒 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1