基于链表的索引分配方法和装置制造方法

文档序号:6505701阅读:110来源:国知局
基于链表的索引分配方法和装置制造方法
【专利摘要】本发明揭示了一种基于链表的索引分配方法及装置,其通过在以太网中创建保存所有可用索引的链表,在链表中将每一段连续的索引段保存一个结点,相连的索引段之间通过指针串联起来;分配索引时,从链表的头开始,如果第一个结点的索引长度大于1,则把所述结点的索引长度减1,起始索引加1,并把原来的起始索引返回;如果第一个结点的索引长度等于1,则这个结点变为空,并将其释放。在索引回收时,遍历链表进行查找,并找到第一个起始索引大于回收目标索引的结点,回收目标索引即在这个结点和它的前一个结点之间。本发明索引分配的方法不仅能保证索引分配的正确性,有效节省内存,而且大大提升了索引分配的效率。
【专利说明】基于链表的索引分配方法和装置
【技术领域】
[0001]本发明涉及网络通信领域,尤其是涉及在以太网中通过创建链表进行表项索引分配的方法及装置。
【背景技术】
[0002]在以太网交换机中需要保存各种各样的表,比如FDB(Forwarding Database,转发数据)表,路由表等等。这些表中保存了数目不等的表项,比如FDB表中的表项可以达到几千条,几万条甚至更多,而这些表项都有一个唯一索引,用户在配置一条FDB表项时,要从这成千上万条的表项中分配一个索引给它。而分配索引的快慢直接影响到交换机的性能,所以索引分配是一项很重要的技术。
[0003]在分配索引时,传统的做法是使用位图(BITMAP),即将每个BIT位表示一个索引,如O表示这个索引还未被占,I表示已经被占。分配索引时,传统的做法是遍历这个位图,找到第一个为O的BIT,它的下标就是分配到的索引,然后将该BIT改成I。在回收索引时,直接根据索引找到对应的BIT,将该BIT改为0,下次又可以分配给其他的表项使用。
[0004]用BITMAP分配索引的做法实现简单,而且由于是用BIT来表示索引,其能保证索引分配的正确性,且不会占用太多内存。但是,这种方案的不足之处在于分配索引时效率较低。每次在申请一个新的索引时,它都要从头开始遍历每个BIT,直到找到第一个为O的BIT,在存在大量索引的时候,可能要遍历很多个BIT才找到一个有用的,而且每次都是如此;加上因为节省内存而使用效率较低的位操作,现有的技术方案在分配大量索引时效率会变得越来越低。

【发明内容】

[0005]本发明的目的在于克服现有技术的缺陷,提供一种基于链表的索引分配方法及装置,其不仅能保证索引分配时的正确性,而且能大大提供索引分配的效率。
[0006]为达到上述发明目的,本发明提出如下技术方案:一种基于链表的索引分配方法,在以太网中创建一张保存所有可用索引的链表;链表中包括至少一段索引连续的索引段,每一索引段形成一个结点,分配索引时,从链表的头开始,如果第一个结点的索引长度大于1,则把所述结点的索引长度减1,起始索引加1,并把原来的起始索引返回;如果第一个结点的索引长度等于1,则这个结点变为空,并将其释放。
[0007]其中,所述可用索引的结点通过所述双向链表相串联。
[0008]所述索引连续的索引段包括索引长度为I的索引段。
[0009]本发明还提出另一种基于链表的索引分配方法,在以太网中建立一张保存所有可用索引的链表;链表中包括至少一段索引连续的索引段,每一段索引段形成一个结点;在回收目标索引时,遍历链表,找到第一个起始索引大于回收目标索引的结点,回收目标索引即在所述结点及其前一个结点间。
[0010]更进一步地,在回收索引时,包括以下处理方法:[0011]a)如目标索引只与前结点相连,则将前结点的索引长度加I ;
[0012]b)如目标索引只与后结点相连,则将后结点起始索引减I ;
[0013]c)如目标索引与前后结点都不相连,则创建一个新的结点,该结点的起始索引为目标索引,索引长度为I,同时将该新结点的前后指针与前后结点进行双向指向;
[0014]d)如目标索引与前后结点都相连,则将后结点释放,将前结点的索引长度加I再加上后结点的索引长度,并将指针双向指向。
[0015]本发明还提出一种基于链表的索引分配装置,包括链表,所述链表中包括以太网中所有的可用索引,所述可用索引包括至少一段索引连续的索引段,每一索引段形成一个结点;所述每个结点包括指向前一个结点的前向指针和指向后一个非空结点的后向指针,以及本段索引的起始索引和索引长度。
[0016]其中,所述起始索引是本段索引的第一个索引,所述索引长度为本段索引的个数。
[0017]所述索引连续的索引段包括索引长度为I的索引段。
[0018]与现有技术相比,本发明提出基于链表的索引分配,将一段连续可用的索引保存为一个结点,相连的连续索引之间通过指针串联起来。在分配索引时大大提升了索引分配的效率,并且能有效节省内存。
【专利附图】

【附图说明】
[0019]图1是本发明链表中一索引段结构的方框图;
[0020]图2是本发明分配索引时的流程图;
[0021]图3A、3B是本发明第一实施例中索引分配前及分配后链表的方框图;
[0022]图4A、4B是本发明第二实施例中索引分配前及分配后链表的方框图;
[0023]图5A、5B是本发明第三实施例中索引分配前及分配后链表的方框图;
[0024]图6A、6B是本发明第四实施例在索引回收前及回收后链表的方框图;
[0025]图7A、7B是本发明第五实施例中索引回收前及回收后链表的方框图;
[0026]图8A、8B是本发明第六实施例中索引回收前及回收后链表的方框图;
[0027]图9A、9B是本发明第七实施例中索引回收前及回收后链表的方框图。
【具体实施方式】
[0028]下面将结合本发明的附图,对本发明实施例的技术方案进行清楚、完整的描述。
[0029]本发明所揭示的基于链表的索引分配方法,其通过将FDB表、路由表等这些表项中的可用索引和不可用索引区分开来,将所有可用的索引保存在一张链表中,然后在进行索引分配及索引回收时,通过在这张链表中查找到索引位置即可进行索引的分配及回收。
[0030]在一开始,所有的索引都是可用的,即只有一整块且连续的索引。随着索引会不断地分配回收,可用的索引会变得越来越离散,即一整块的索引变成了一段一段的索引,每一连续索引组成一个索引段,每一索引段上形成一个结点。把这一段一段的索引串起来,就形成了一个链表。分配索引时,这个链表的头就是下一次分配出去的索引;回收索引时,遍历链表找到回收索引的目标位置,将其回收。
[0031]本发明使用双向链表来保存可用索引,如图1所示的链表中的一段索引中,包括了指向前个结点的前向指针和指向后个结点的后向指针,以及本段可用索引的起始索引offset和索引长度size。其中,前向指针指向了前结点,起始索引表示本段索引的第一个索引,索引长度表示本段索引的个数。
[0032]当后向指针指向的后结点为空结点(也就是说没有后结点时),所述的后向指针为空指针。
[0033]如图2所示,分配索引时,从链表的头开始。如果第一个结点所在的索引段的索引长度大于1,在分配时只需要把索引长度减1,起始索引加1,然后把原来的起始索引返回即可;如果第一个结点的索引长度等于1,这个结点就变成空了,所以要将其释放。
[0034]如显示本发明第一实施例的图3A所示的链表中,最初,整个链表有100个索引可供分配使用,且这100个索引是连续的索引。经过不断的分配回收,形成如图3B所示的链表,其可用的索引有3段,分别为:0-9,20-69,90-99。头结点指向第一个结点,最后一个结点没有下一个结点。
[0035]在分配索引时,如显示本发明第二实施例的4A所示,第一个结点所在的索引段的索引长度为10大于1,因此只要把索引长度减1,起始索引加1,然后把原来的起始索引返回即可,形成如图4B所示的链表结构。
[0036]当第一个结点所在的索引段的索引长度等于I时,如显示本发明第三实施例的图5A所示,索引分配后,这个结点就变成空了,所以要将其释放,形成如图5B所示的链表结构。
[0037]在回收索引时,遍历链表进行查找,并找到第一个起始索引大于回收目标索引的结点,回收目标索引即在这个结点和它的前一个结点之间。具体回收时,一共存在以下几种情况:
[0038]I)、回收目标索引只与前结点相连。在回收索引时,当回收目标索引与前结点相连时,将前结点索引长度加I即可。
[0039]2)、回收目标索引只与后结点相连。在回收索引时,当目标索引与后结点相连时,将后结点起始索引减I即可。
[0040]3)、回收目标索引与前后结点都不相连。在回收索引时,当回收目标索引和前后结点都不相连时,则需要创建一个新的结点,该新结点的起始索引即为回收目标索引,索引长度为I ;同时所述结点与前后结点的指针分别双向指向,即将前结点的后向指针指向新结点,新结点的前向指针指向前结点,新结点的后向指针指向后结点,后结点的前向指针指向新结点。
[0041]4)、回收目标索引与前后结点都相连。在回收索引时,当回收目标索引和前后结点都相连时,将后结点释放,前结点的索引长度加上I再加上后结点的索引长度,前结点的后向指针等于后结点的后向指针。
[0042]当然,这种情况下,也可以将前结点释放,将后结点的索引长度加上I再加上前结点的索引长度,后结点的前向指针等于前结点的前向指针,其结果与释放后结点的相同的。
[0043]如图6A、6B至图9A、9B所示,分别表示本发明第四至第七实施例中回收目标索引时与上述I)至4)所对应的链表结构的示意图,如图6A所示,回收目标索引为10,前结点可用索引为0-9,后结点可用索引为20-69,目标索引只与前结点相连,则将前结点索引长度加I即可,得到图6B所示的链表结构。
[0044]图7A中,目标索引为19,前结点的可用索引为0-9,后结点可用索引为20-69,目前索引只与后结点相连,在索引回收时只需将后结点起始索引减I即可,得到图7B所示的链表结构。
[0045]图8A中,目标索引为15,前结点的可用索引为0-9,后结点的可用索引为20-69,目标索引与前后结点都不相连,在索引回收时,仓Il建一个新的结点,这个新结点的起始索引即为15,索引长度为I ;同时将前结点的后向指针指向新结点,新结点的前向指针指向前结点,新结点的后向指针指向后结点,后结点的前向指针指向新结点,得到如图8B所示的链表结构。
[0046]图9A中,目标索引50,前结点可用索引为0-49,后结点可用索引为51-80,目标索引与前后结点都相连。回收索引时,将后结点释放,前结点的索引长度加上I再加上后结点的索引长度得到结果81,前结点的后向指针等于后结点的后向指针,得到如图9B所示的链表结构。
[0047]当然,图9A中在回收索引时,也可采用释放前结点的方法,其结果与释放后结点的相同。
[0048]本发明的技术内容及技术特征已揭示如上,然而熟悉本领域的技术人员仍可能基于本发明的教示及揭示而作种种不背离本发明精神的替换及修饰,因此,本发明保护范围应不限于实施例所揭示的内容,而应包括各种不背离本发明的替换及修饰,并为本专利申请权利要求所涵盖。
【权利要求】
1.一种基于链表的索引分配方法,其特征在于:在以太网中创建保存所有可用索引的链表;链表中包括至少一段索引连续的索引段,每一索引段形成一个结点,分配索引时,从链表的头开始,如果第一个结点的索引长度大于1,则把所述结点的索引长度减1,起始索引加1,并把原来的起始索引返回;如果第一个结点的索引长度等于1,则这个结点变为空,并将其释放。
2.根据权利要求1所述的基于链表的索引分配方法,其特征在于:所述可用索引的结点通过所述双向链表相串联。
3.根据权利要求1所述的基于链表的索引分配方法,其特征在于:所述索引连续的索引段包括索引长度为I的索引段。
4.一种基于链表管理的索引分配方法,其特征在于:在以太网中建立一张保存所有可用索引的链表;链表中包括至少一段索引连续的索引段,每一段索引段形成一个结点;在回收目标索引时,遍历链表,找到第一个起始索引大于回收目标索引的结点,回收目标索引即在所述结点及其前一个结点间。
5.根据权利要求4所述的基于链表管理的索引分配方法,其特征在于:在回收索引时, a)如目标索引只与前结点相连,则将前结点的索引长度加I; b)如目标索引只与后结点相连,则将后结点起始索引减I; c)如目标索引与前后结点都不相连,则创建一个新的结点,该结点的起始索引为目标索引,索引长度为1,同时将该新结点的前后指针与前后结点进行双向指向; d)如目标索引与前后结点都相连,则将后结点释放,将前结点的索引长度加I再加上后结点的索引长度,并将指针双向指向。
6.根据权利要求5所述的基于链表管理的索引分配方法,其特征在于:所述d)中,如目标索引与前后结点都相连,也可将前结点释放,将后结点的索引长度加I再加上前结点的索引长度,并将起始索引设为前结点的起始索引,并将指针双向指向。
7.一种基于链表的索引分配装置,其特征在于:包括链表,所述链表中包括以太网中所有的可用索引,所述可用索引包括至少一段索引连续的索引段,每一索引段形成一个结点;所述每个结点包括指向前一个结点的前向指针和指向后一个非空结点的后向指针,以及本段索引的起始索引和索引长度。
8.根据权利要求7所述的基于链表的索引分配装置,其特征在于:所述起始索引是本段索引的第一个索引,所述索引长度为本段索引的个数。
9.根据权利要求7所述的基于链表的索引分配装置,其特征在于:所述索引连续的索引段包括索引长度为I的索引段。
10.根据权利要求7所述的基于链表的索引分配装置,其特征在于:当所述后向指针指向的后一个结点为空时,所述后向指针为空指针。
【文档编号】G06F17/30GK103544203SQ201310290108
【公开日】2014年1月29日 申请日期:2013年7月11日 优先权日:2013年7月11日
【发明者】陶秋平, 周志洪, 何志川, 赵茂聪 申请人:盛科网络(苏州)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1