一种检测链表的方法和装置的制作方法

文档序号:7944565阅读:105来源:国知局
专利名称:一种检测链表的方法和装置的制作方法
技术领域
本发明涉及通信领域,特别涉及一种检测链表的方法和装置。
背景技术
现在的数据芯片设计中,尤其是通信领域的数据芯片设计中,不再是以往的单一 化业务,而是数据、语音、视频等等各种不同的业务混杂融合在一起,针对各类业务的处理 方式通常为利用QoS(Quality of Service,服务质量)_的共享资源按优先级分配,即根据 业务的QoS,按业务的优先级分配资源针对高优先级的业务(例如语音、视频等),使该类 业务分配得到更多的资源,从而确保该类业务的正常运行,而针对低优先级的业务(例如 网络下载等),利用高优先级业务的空闲期对该类业务进行处理。 实现上述共享资源功能就需要通过链表指针对业务进行调度,即利用链表管理的 方式,实现有限的RAM (Random-Access Memory,随机存取存储器)资源的共享。如果链表指 针出错,就会导致整个系统的崩溃,因此,需要检测链表错误的机制,从而恢复系统的正常 运行。而对于数据处理芯片,尤其是通信领域的数据芯片,业务是不能中断的,这就要求检 测机制必须在芯片的运行过程中且不中断业务的前提下进行检错。 现有技术提出了如下的检错机制,即采用为链表指针配置校验位的方式实现对链 表进行检错,通常会为每个链表指针配置多个链表校验位,检错能力的强弱与校验位的位 宽有关,校验位越多,检错能力越强,漏测概率越低。 发明人在实现本发明的过程中,发现上述现有技术至少存在如下缺点和不足一 方面,需要每一个链表都对应若干检验位,而链表的深度是很大的,共享资源越多,业务划 分粒度越细,相应需要的链表深度就越大,这样每增加lbit校验位所消耗的存储资源也就 越多,就需要很大的存储空间,需要耗费本已很紧张的有限存储资源来存储校验位,而如果 减少校验位会导致漏检概率又变得非常大, 一旦漏检,整个系统就会混乱,系统也就崩溃 了,而系统级的崩溃将导致业务长时间的中断和数据大量的丢失,会造成对运营商和用户 巨大的损失,对于运营商和用户都是无法容忍的。另一方面,该方法通过校验位的方式导致 仍然存在一定的漏检概率,其中,漏检概率的大小与校验位的数目有关,校验位越少,漏检 率越大。

发明内容
在系统运行过程中,对链表的进行检错时,为了提高检错率,并降低对资源耗费,
本发明实施例提供了一种检测链表的方法和装置。所述技术方案如下 —方面,提供了一种检测链表的方法,链表由多条队列组成,所述方法包括 在业务运行过程中,接收到固有空闲时间指示信号后,获取所述链表中待扫描队
列的状态信息,所述状态信息包括本次扫描的起始位置值、所述队列的尾值,所述队列的
待扫描项数; 从所述起始位置值开始,对所述队列进行扫描;
根据所述待扫描项数,判断扫描到的最后一个扫描项的值与所述队列的尾值是否
相等,如果否,所述链表出错。
另一方面,提供了一种检测链表的装置,所述装置包括 获取模块,在业务运行过程中,接收到固有空闲时间指示信号后,获取链表中待扫 描队列的状态信息,所述状态信息包括本次扫描的起始位置值、所述队列的尾值,所述队 列的待扫描项数; 扫描模块,用于从所述获取模块获取的起始位置值开始,对所述队列进行扫描;
检测模块,用于根据所述待扫描项数,判断所述扫描模块扫描到的最后一个扫描 项的值与所述队列的尾值是否相等,如果否,所述链表出错。
本发明实施例提供的技术方案的有益效果是 利用固有空闲时间(如RAM等存储资源的刷新间隙或业务处理间隙)对链表错误 进行检测,实现了业务运行中的检测,可以不中断业务的正常处理;提高检错率,做到链表 错误无漏检;并且解决检错率与资源消耗的冲突,降低有限RAM等资源的消耗。


图1是本发明实施例1提供的检测链表的方法流程示意图。 图2是本发明实施例2提供的检测链表的方法流程示意图。 图3是本发明实施例2提供的初始化后的链表示意图。 图4是本发明实施例2提供的初始化后的队列状态指示存储示意图。 图5是本发明实施例2提供的数据处理芯片运行中链表扫描原理示意图。 图6是本发明实施例2提供的数据的存入过程示意图。 图7是本发明实施例2提供的数据读走过程示意图。 图8是本发明实施例3提供的检测链表的装置示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方
式作进一步地详细描述。 实施例1 在系统运行过程中,对链表的进行检错时,为了提高检错率,并降低对资源耗费, 由于一个链表可以认为由不同的队列组成,只要保证每个队列检测正确,则可以实现整个 链表的检测,相应地,本发明实施例提供了 一种检测链表的方法,参见图1 ,该方法内容如 下 Sl :在业务运行过程中,接收到固有空闲时间指示信号后,获取链表中待扫描队列 的状态信息。 其中,上述状态信息包括本次扫描的起始位置值、队列的尾值,队列的待扫描项 数; S2 :从起始位置值开始,对队列进行扫描; S3:根据待扫描项数,判断扫描到的最后一个扫描项的值与队列的尾值是否相等, 如果否,则该链表出错。
5
其中,上述固有空闲时间具体包括RAM资源的刷新间隙;或,业务间隙。 本发明实施例提供的检测链表的方法,利用RAM等存储资源的刷新间隙或业务处
理间隙对链表错误进行检测,实现了业务运行中的检测,可以不中断业务的正常处理;提高
检错率,做到链表错误无漏检;并且解决检错率与资源消耗的冲突,降低有限RAM等资源的
消耗。为了对本发明实施例提供的方法进行详细描述,详见下述实施例。 实施例2 在系统运行过程中,对链表的进行检错时,为了提高检错率,并降低对资源耗费,本发明实施例提供了一种检测链表的方法,参见图2,该方法内容如下
步骤101 :获取触发链表扫描指示信号。 其中,上述触发链表扫描指示信号具体包括RAM资源的刷新指示有效信息,或,业务间隙指示有效信息。 步骤102 :获取待扫描的队列标识,根据该队列标识获取该队列的队列状态信息、扫描状态信息。 其中,上述队列状态信息包括队列头que_head对应的值、队列尾que_tail对应的值等; 上述扫描状态信息包括扫描计数器scarucnt对应的值、扫描标签指针scan—bptr对应的值等。 步骤103 :保存队列尾que_tail对应的值。 其中,可以将队列尾qUe_tail对应的值,赋值给扫描尾寄存器,以方便后续操作。
步骤104 :判断该队列是否为新队列,如果是,则执行步骤105 ;否则;执行步骤
106。 其中,定义初次进行扫描的队列为新队列。 步骤105 :设置起始扫描点为队列头quejiead对应的值,然后执行步骤107。
步骤106 :设置起始扫描点为扫描标签指针SCan_bptr对应的值,然后执行步骤
107。 步骤107 :对循环计数器l00p_cnt赋初值,根据起始扫描头,依次对链表进行扫描,每扫描一次将当前扫描计数器scarucnt对应的值减1。 其中,优选地,为了提高扫描效率,可以对循环计数器loop_Cnt赋初值为0。
步骤108 :判断当前扫描计数器scarucnt对应的值是否为O,如果是,则执行步骤109 ;否则,执行步骤112。 其中,优选地,本实施例以在判断当前扫描计数器scarucnt对应的值是否为预设值时,以该预设值是0为例,另外,该预设值还可以其它某一特定的值,本实施例对此不做限制。 步骤109 :判断当前扫描到链表值chain_bptr是否等于队列尾que_tail对应的值,如果是,则执行步骤110 ;否则,执行步骤111。 其中,当前扫描到链表值chain—bptr即为上述步骤103的扫描尾寄存器中寄存的队列尾que_tail对应的值。 步骤110 :说明链表正确,等待下一次触发链表扫描指示信号的到来。
步骤111 :说明链表错误,执行恢复处理。
其中,当通过上述方法检测处链表错误后,所执行的恢复处理可以为直接对链表
进行复位重新初始化链表,或者,向上层处理器CPU上报报警信息,让该CPU判断如何处理。
具体的恢复处理操作可以根据具体的需要进行,本实施例对此不做任何限制。 步骤112 :根据循环计数器loop—cnt初值和预设的扫描最大值N,判断本次扫描次
数是否到达本次扫描最大值,如果是,则执行步骤113 ;否则,执行步骤114。 其中,上述预设的扫描最大值N,为根据RAM资源的刷新时间,或,业务间隙时间的
长度来设置的,为了避免扫描错误,该值N的具体取值需要大于数据的出队速度,否则,将
超过扫描标签指针,造成扫描错误。 步骤113 :当执行到该步骤113时,说明达到本次扫描最大值,但还没有将该队列 扫描完毕,则寄存当前扫描标签指针sCan_bptr对应的值和当前扫描寄存器对应的值。
其中,上述当前扫描标签指针scanj3ptr对应的值,用于当下次触发链表扫描指 示信号的到来时,从该当前扫描标签指针scanj3ptr对应的值作为起始扫描点,继续进行 扫描。其中,上从该当前扫描标签指针scarubptr对应的值作为起始扫描点,继续进行扫描 时,根据扫描寄存器初始值和该当前扫描寄存器对应的值,得到未扫描个数,从而获知继续 进行扫描时,需要进行的扫描个数。 步骤114 :继续扫描下一跳,同时将当前扫描计数器scarucnt对应的值减l,将当 前扫描次数计数器lo0p_Cnt对应的值加l,然后执行步骤108。 综上,为本发明实施例提供的检测链表的方法流程,可以在系统运行时利用RAM
等存储资源的刷新间隙或业务处理间隙对链表错误进行检测的方法。当用于管理资源共享
的链表由于干扰或是异常而导致错误发生时,可以通过该方法及时检测出错误,从而可以
通过复位的方式重新初始化链表,实现链表的恢复,提高了系统的可靠性。 本领域技术人员可以获知,在数据处理芯片上电时,会初始化的一条链表,参见图
3,提供了初始化后的链表示意图。其中,链表地址与共享资源地址是一一对应的关系。并且
针对共享该共享资源的业务条数(简称为队列)会有各自存在自身的头指针quej!ead(或
称为队列头)和尾指针que_tail (或称为队列尾),参见图4,为初始化后的队列状态指示
存储示意图,其中,该队列的队列头初始取值为0,队列尾初始取值为O,扫描计数器初始取
值为0。基于毎个队列只需设置一个扫描计数器scarucnt再结合上述本发明实施例提供的
方法,便可以实现对链表的扫描。 参见图5,利用本发明实施例提供的检测链表的方法得到的数据处理芯片运行中
链表扫描原理示意图,其中,位于图左侧的链表为该数据处理芯片运行中的某个瞬间的示
例,由于数据处理芯片上电运行一段时间后,会随着不同业务队列的出队入队,整个链表看
起来将是杂乱无章的。实际上,一个链表就是由一条一条的队列组成的碎链杂糅在一起而
形成的,只要将每一条队列从头扫描到尾,也就表示这个链表也就完成了扫描。 其中,队列头que_head和队列尾que_tail分别指示的是本条队列链的头指针和
尾指针(同时也是当前时刻第一个信元数据与最后一个信元数据在RAM资源中存储的地址
或偏移值);当前扫描计数器scarucnt指示的数值为从当前时刻到扫描完本条队列所需要
的扫描次数;扫描标签指针SCan_bptr像书签一样,寄存了已经扫描到的位置,指示本次扫
描已经扫描到的位置,即指示出了下次扫描的起始位置。 其中,如前文所述,链表扫描的触发开始条件是RAM等资源的刷新指示有效或者
7业务间隙指示有效。如果扫描的是一个全新的队列(包括整个链表的第一次扫描),则扫描 的起始地址是该队列的队列头que—head ;如果扫描的不是一个新队列,则从扫描标签指针 开始,即从上次扫描已经扫描到的位置开始,继续完成该队列的扫描。如图5所示,本实施 例为了便于说明,以第一次扫描,且扫描的是一个新的队列为例,相应地,本次扫描的起始 点就是队列头quejiead(本实施例取值为是0),然后依次对该链表进行扫描从0扫描到 1, 1扫描到3,3扫描到4……,从设置的扫描计数器scarucnt的初始值开始,在扫描过程中 每扫描一次,扫描计数器scarucnt当前值将减1,当扫描次数达到最大扫描次数N后(本 实例中假设当扫描N次后扫描到10处),就需要寄存当前扫描状态,其中,最大扫描次数N 的具体取值需要根据RAM资源刷新时间或者业务间隙时间的长短来设置,但要大于出队速 度,否则将超过扫描标签指针,造成扫描错误。其中,如图5所示,上述所需要寄存的当前扫 描状态包括扫描标签指针SCan_bptr的值(即当前扫描到的位置)和扫描计数器Scan_ cnt的当前值(即指示出该队列还存在的未扫描的个数)。 然后,等待第二次开始条件的有效,即RAM等资源的刷新指示有效或者业务间隙 指示有效。当第二次开始条件满足后,扫描重新启动,则以当前扫描标签指针scanj3ptr为 起始地址开始扫描,从10扫描到11, 11扫描到14,每次扫描计数器scarucnt还是减l,直 到扫描计数器scarucnt等于0,此时判断当前扫描到的值SCan_bptr (即当前扫描到的链表 值chain—bptr)是否等于队列尾,如果不相等,说明本段链表(或者说队列链错误),无法从 队列头追溯到队列尾,如果相等,说明本段链表正确,可以从队列头追溯到队列尾,此时本 段链表扫描结束,继续等待下一次开始条件的满足,满足后继续扫描下一条队列。但是如果 扫描N次直到扫描计数器scarucnt还是役有等于0,则和第一次扫描的处理过程一样,寄存 当前状态,等待下一次扫描开始条件的满足后继续进行扫描。
关于上述触发扫描的条件进行说明,详见如下 在数据处理芯片中,当采用DDR (Double Data Rate,双倍速)RAM做为存储资源,由 于DDR RAM有一个固定的刷新周期,于是,为了确保数据处理芯片在处理业务时的连续不中 断,则本发明实施例提供的方法,便可以利用DDR RAM的刷新间隙来进行。具体实现如下
首先,将DDR RAM的刷新指示作为链表扫描的使能条件。 其次,针对不同的队列设置各自队列的队列头、队列尾,同时设置扫描指针和扫描 计数器。 然后,依照上述本发明实施例提供的方法,可以实现对队列的检测。由于数据处理
芯片是对多种业务混合处理,即可以分为多个队列,于是一个链表就被拆分成不同的队列
链,只要实现每个队列链的检测,便进而可以实现对整个链表的检测功能。 在数据处理芯片中,当采用静态RAM做为存储资源,则可以利用业务处理间隙,链
表扫描便可以利用业务处理间隙来进行。具体实现如下 首先,设置业务处理间隙指示作为链表扫描的使能条件。 其次,针对不同的队列设置队列头尾指针,同时设置扫描指针和扫描计数器。 然后,依照上述本发明实施例提供的方法,可以实现对队列的检测。由于数据处理
芯片是对多种业务混合处理,即可以分为多个队列,于是一个链表就被拆分成不同的队列
链,只要实现每个队列链的检测,便进而可以实现对整个链表的检测功能。 同理,当采用DDR RAM做为存储资源时,也可以采用业务处理间隙指示作为链表扫描的使能条件,本实施例对此不做任何限制。 为了实现链表的扫描,在业务正常处理时,需要对队列扫描状态做并行处理,以辅 助链表扫描的处理。本发明实施例将数据存入共享资源的过程叫做入队,将数据取出发走 共享资源的过程称作出队,参见图6,为数据的存入过程(也就是入队过程)示意图,图7, 为数据读走过程,也就是出队过程示意图。其中,对于入队,只需要在每次入队时,链表扫描 计数器加1即可。对于出队操作,只需要对一种情况做处理,那就是对于下一次扫描使能有 效将要新开始的扫描队列,并且此队列和要出队的队列相等一致时,链表扫描计数器减l, 对于其他情况,不需要做额外处理。 同理可知,本发明实施例提供的方法适用于在各类数据共享系统的检错中,如计 算机磁盘检错、内存检错等。 综上所述,本发明实施例提供的检测链表的方法,不用中断业务的正常处理,便可 以对链表进行检错,充分利用了系统的效率,提高了整体系统的稳定性,并且解决了检错率 与资源消耗的冲突,降低了有限的RAM资源或其他存储资源的消耗;并可以提高检错率,做 到链表错误无漏检,保证系统运行的可靠性。
实施例3 参见图8,本发明实施例提供了一种检测链表的装置,装置包括 获取模块,在业务运行过程中,接收到固有空闲时间指示信号后,获取链表中待扫
描队列的状态信息,状态信息包括本次扫描的起始位置值、队列的尾值,队列的待扫描项
数; 扫描模块,用于从获取模块获取的起始位置值开始,对队列进行扫描; 检测模块,用于根据待扫描项数,判断扫描模块扫描到的最后一个扫描项的值与
队列的尾值是否相等,如果否,则该链表出错。 进一步地,装置还包括 处理模块,用于执行a当本次扫描的次数达到本次扫描最大值时,寄存达到本次 扫描最大值时本次扫描的中止位置值和待扫描项数;还用于执行b再次接收到固有空闲时 间指示信号后,从前一次寄存的中止位置开始继续进行扫描;还用于执行c如果扫描完队 列,则结束执行c,否则,返回再次执行步骤a,直至根据待扫描项数扫描完整个队列。
其中,检测模块在根据待扫描项数,判断扫描模块扫描到的最后一个扫描项的值 与队列的尾值是否相等时,检测模块还包括 比对单元,用于当待扫描项数等于预设值,则判断最后扫描到的链表的值与队列 的尾值是否相等。 综上所述,本发明实施例提供的检测链表的装置,不用中断业务的正常处理,便可 以对链表进行检错,充分利用了系统的效率,提高了整体系统的稳定性,并且解决了检错率 与资源消耗的冲突,降低了有限的RAM资源或其他存储资源的消耗;并可以提高检错率,做 到链表错误无漏检,保证系统运行的可靠性。 综上,本发明实施例提供的技术方案,在不中断业务的运行的前提下,实现的链表 检错,通过寄存扫描中间状态,包括扫描指针与扫描计数的方式,并针对不同业务设置不同 队列头和队列尾指针,要扫描的链表便是由这些不同业务构成的一段段队列链杂糅而成。 其中,本发明实施例提供的技术方案利用RAM等资源的刷新间隙或业务处理间隙来实现对链表检错的处理。 一条队列需要l次或多次扫描,依靠扫描指针和扫描计数来寄存处理间隙却未扫描完的中间状态。每次扫描计数等于0或某一特定值时,通过对比队列尾指针与扫描指针来判断该段队列链是否正确,如果相等则正确,如果不相等则错误。扫描完一条队列后等待下一次条件满足时再扫描下一队列。将对整个链表的检错分解为对于每条队列链的检错,如果每条队列链都没有错误,则整个链表也没有错误。于是,不用中断业务的正常处理,便可以对链表进行检错,充分利用了系统的效率,提高了整体系统的稳定性,并且解决了检错率与资源消耗的冲突,降低了有限的RAM资源或其他存储资源的消耗;并可以提高检错率,做到链表错误无漏检,保证系统运行的可靠性。 本发明实施例中的"接收"一词可以理解为主动从其他模块获取也可以是接收其他模块发送来的信息。 本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。 本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。 本发明实施例中的部分步骤,可以利用软件实现,相应的软件程序可以存储在可读取的存储介质中,如光盘或硬盘等。 以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种检测链表的方法,其特征在于,链表由多条队列组成,所述方法包括在业务运行过程中,接收到固有空闲时间指示信号后,获取所述链表中待扫描队列的状态信息,所述状态信息包括本次扫描的起始位置值、所述队列的尾值,所述队列的待扫描项数;从所述起始位置值开始,对所述队列进行扫描;根据所述待扫描项数,判断扫描到的最后一个扫描项的值与所述队列的尾值是否相等,如果否,所述链表出错。
2. 如权利要求1所述的方法,其特征在于,所述根据所述待扫描项数,判断扫描到的最 后一个表项的值与所述队列的尾值是否相等,之前进一步包括a. 当本次扫描的次数达到本次扫描最大值时,寄存达到本次扫描最大值时本次扫描的 中止位置值和待扫描项数;b. 再次接收到固有空闲时间指示信号后,从前一次寄存的中止位置开始继续进行扫描;c. 如果扫描完队列,则结束本步骤,否则,返回步骤a,直至根据所述待扫描项数扫描 完整个队列。
3. 如权利要求1或2所述的方法,其特征在于,所述根据所述待扫描项数,判断扫描到 的最后一个扫描项的值与所述队列的尾值是否相等,包括当所述待扫描项数等于预设值,则判断扫描到的最后一个扫描项的值与所述队列的尾 值是否相等。
4. 如权利要求1或2所述的方法,其特征在于,如果判断扫描到的最后一个扫描项的值 与所述队列的尾值相等,所述方法还包括等待接收下次固有空闲时间指示信号,对所述链表的另一待扫描队列进行扫描,直到 对所述链表扫描完毕。
5. 如权利要求1或2所述的方法,其特征在于,所述固有空闲时间,具体包括 RAM资源的刷新间隙;或,业务间隙。
6. —种检测链表的装置,其特征在于,所述装置包括获取模块,在业务运行过程中,接收到固有空闲时间指示信号后,获取链表中待扫描队列的状态信息,所述状态信息包括本次扫描的起始位置值、所述队列的尾值,所述队列的 待扫描项数;扫描模块,用于从所述获取模块获取的起始位置值开始,对所述队列进行扫描; 检测模块,用于根据所述待扫描项数,判断所述扫描模块扫描到的最后一个扫描项的 值与所述队列的尾值是否相等,如果否,所述链表出错。
7. 如权利要求6所述的装置,其特征在于,所述装置还包括处理模块,用于执行a当本次扫描的次数达到本次扫描最大值时,寄存达到本次扫描 最大值时本次扫描的中止位置值和待扫描项数;还用于执行b再次接收到固有空闲时间指 示信号后,从前一次寄存的中止位置开始继续进行扫描;还用于执行c如果扫描完队列,则 结束执行c,否则,返回再次执行步骤a,直至根据所述待扫描项数扫描完整个队列。
8. 如权利要求6或7所述的装置,其特征在于,所述检测模块在根据所述待扫描项数, 判断所述扫描模块扫描到的最后一个扫描项的值与所述队列的尾值是否相等时,所述检测模块还包括比对单元,用于当所述待扫描项数等于预设值,则判断最后扫描到的链表的值与所述 队列的尾值是否相等。
全文摘要
本发明公开了一种检测链表的方法和装置,属于通信领域。方法包括链表由多条队列组成,在业务运行过程中,接收到固有空闲时间指示信号后,获取链表中待扫描队列的状态信息,所述状态信息包括本次扫描的起始位置值、所述队列的尾值,所述队列的待扫描项数;从所述起始位置值开始,对所述队列进行扫描;根据所述待扫描项数,判断扫描到的最后一个扫描项的值与所述队列的尾值是否相等,如果否,所述链表出错。本发明利用RAM等存储资源的刷新间隙或业务处理间隙对链表错误进行检测,实现了业务运行中的检测,可以不中断业务的正常处理;提高检错率,做到链表错误无漏检;并且解决检错率与资源消耗的冲突,降低有限RAM等资源的消耗。
文档编号H04L12/56GK101788928SQ20091000570
公开日2010年7月28日 申请日期2009年1月24日 优先权日2009年1月24日
发明者宋涛 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1