插入节点的方法和装置的制作方法

文档序号:7699572阅读:110来源:国知局
专利名称:插入节点的方法和装置的制作方法
技术领域
本发明涉及数据通信领域,特别涉及一种插入节点的方法和装置。
背景技术
随着网络的迅猛发展,路由表项的数量越来越大,比如,核心路由器的IPv4 FIB(Forwad Information Base,转发信息表)已经要求实现百万条的数量级。如果 用TCAM(Ternary Content Addressable Memory,三重内容可寻址存4诸器)实现,目 前成熟的18Mb TCAM只能实现256Kx72b的规格,此时就需要4片18Mb的TCAM 才能达到1M条的要求。因此,用TCAM实现在成本、功耗、实现难度上都很难 接受。基于算法的路由查找技术已成为数据通信业界通用的做法,在路由容量、 成本和功耗上相比与TCAM器件有较大的优势。
基于算法的查找技术现阶段有多种实现方式,如基于triestree (实验树)的 方式,基于range match (范围匹配)的方式,以及部分基于TCAM器件的查找方 式。其中,range match的方式多采用二叉树(Binary Tree )来实现路由表项的维 护和管理,即将路由表项的边界值作为二叉树的节点,排序后组成一棵路由边 界值的二叉树,以便进行后续的查找。
二叉树中搜索、插入、删除的复杂度都和树的高度相关,树高是制约二叉 树时间效率的瓶颈。理论上,任意高度为h平衡二叉树能容纳2^ — l个节点,即 h-O(lgn),且对此平衡二叉树节点的插入、删除所需要的维护代价最小。
为了达到一定的查找性能,在硬件实现的以二叉树为^s出的查找系统中, 使用层高固定的二叉树来实现待路由表项的维护。同时,为了节省存储空间以 及减少每次查找需要读取的数据量,并不使用节点带指针的方式来指示下一层 节点位置,仅靠节点的位置关系向下继续查找。
由于此类系统中二叉树的层高受限,且没有指针指示节点挪动后的新的位 置,在有新的节点插入时,将造成较多的节点搬移动作,尤其是在新插入的节 点为递增或递减节点时,随着节点个数的增加,搬移动作将会剧烈增加,从而影响整个系统的节点插入速率,在实际应用体现为路由表项更新速度很慢,特 别是在路由震荡时,整个系统收敛时间较长。
现有技术提供了如下两种方法来实现在二叉树中插入节点 第一种方法使用硬件逻辑来进行节点的顺序搬移,将需要搬移的节点顺次 挪动位置,使需要插入节点的位置形成空洞(hole),最后将待插入节点插入到 新出现的空洞。在进行节点搬移时,该方法还需要遵守两条基本原则第一、 不能破坏二叉树中各节点位置的大小关系;第二、从树的根节点向下,寻找到 每一个有效节点的路径上都不能出现空洞。其中,插入待插入节点前的二叉树
如图l所示,插入待插入节点后的二叉树如图2所示。
但该方法的缺陷在于,在插入递增或递减的节点时,对节点的搬移量将逐 步增加,当节点数目增加到百万个的数量级时,几乎每次搬移都需要搬移所有 的节点数目,从而使路由表项的更新性能将显著下降。
第二种方法是在插入递增或递减节点时,计算出插入节点后整个树型结构 所能形成的最佳状态平衡二叉树,再将其树型结构一一映射到硬件存储空间中, 使之在总的树型维护时间内,所需要搬移的节点数目最少,达到提高节点插入 速率的目的。在这种搬移模式下,每插入一些节点后,将强制地调整整个树型 结构,使其形成一棵平衡的二叉树,进而达到平均搬移次数最少的目的。其中, 插入待插入节点前的二叉树如图3所示,插入待插入节点后的二叉树如图4所示。
但该方法的缺陷在于,将一棵不平衡的二叉树整理为平衡的二叉树的过程 比较繁瑣,特别是在二叉树的容量较大时,需要在高性能的硬件上使用软件来 实现,此时软件还需要建立带指针的二叉树来映射硬件中存储的树型结构,以 便作平衡操作时使用,负荷比较大,并且需要占用一定的shadow (镜像)内存 空间。此外,在计算好平衡二叉树中各节点的位置后,需要通过某种接口例如 PCI ( Pedpherd Component Interconnect,周边元件扩展)接口 ,将重新排列好的 节点下发到硬件逻辑中,以便能进行高速的查找,在数据量4艮大的情况下,软、 硬件之间的接口容易成为性能的瓶颈。

发明内容
为了减少搬移量,提高插入效率,简化软硬件接口,本发明实施例提供了 一种插入节点的方法和装置。所述技术方案如下
8一方面,本发明实施例提供了一种插入节点的方法,包括
获取完全二叉或多叉树树型结构的连续空洞,才艮据连续空洞顶层的层级和 所述完全二叉或多叉树树型结构的层数确定偏移量,才艮据所述连续空洞的顶层 的层级获取起始插入地址,所述完全二叉或多叉树树型结构的层数至少为4层, 所述偏移量表示连续节点搬移操作中,每轮搬移节点的数目;
当有连续变化的节点插入时,获取搬移起始地址,根据所述搬移起始地址 和所述偏移量得到包含待插入位置的满节点子树的地址范围;
根据所述满节点子树的地址范围得到^:移结束地址;
才艮据所述拍更移起始地址、所述拍i移结束地址、所述起始插入地址和所述偏 移量进行连续空洞拥S:移;
当连续空洞搬移完成后,从所述搬移结束地址开始向所述连续空洞方向对 偏移量减1个节点进行清零操作;
将所述连续变化的节点插入到包含待插入位置的满节点子树。 另一方面,本发明实施例提供了一种插入节点的装置,包括 第一获取模块,用于获取完全二叉或多叉树树型结构的连续空洞,根据连 续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,根据 所述连续空洞的顶层的层级获取起始插入地址,所述完全二叉或多叉树树型结 构的层数至少为4层,所述偏移量表示连续节点搬移操作中,每轮搬移节点的 数目;
第二获取模块,用于当有连续变化的节点插入时,获取搬移起始地址,根 据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址范 围;
第三获^^莫块,用于根据所述满节点子树的地址范围得到搬移结束地址;
搬移模块,用于根据所述搬移起始地址、所述搬移结束地址、所述起始插 入地址和所述偏移量进行连续空洞搬移;
清零模块,用于当连续空洞搬移完成后,从所述搬移结束地址开始向所述 连续空洞方向对偏移量减1个节点进行清零操作;
插入模块,用于将所述连续变化的节点插入到包含;f寺插入位置的满节点子树。
在本发明实施例中,当需要向完全二叉或多叉树树型结构中插入连续变化的节点时,利用一片连续的多个空洞,并一起搬移多个节点,可以显著降低叉 树在处理递增或递减的节点插入时所需要的搬移次数,提高插入效率,从而提 高路由表项的更新性能。此外,依据本发明实施例的技术方案完成节点的快速 搬移和维护,可以显著减小软件层面所需要的计算负载量,简化软硬件之间的
接口;也不需要占用额外的shadow空间,节省了内存空间。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描 述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不 付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图l是现有技术一提供的插入待插入节点前的示意图2是现有技术一提供的插入待插入节点后的示意图3是现有技术二提供的插入待插入节点前的示意图4是现有技术二提供的插入待插入节点后的示意图5是本发明实施例 一提供的插入待插入节点前的示意图6是本发明实施例 一提供的插入节点的方法的流程图7是本发明实施例一提供的完成节点搬移的示意图8是本发明实施例二4是供的插入节点装置的示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明 实施方式作进一步地详细描述。显然,所描述的实施例仅仅是本发明一部分实 施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在 没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范 围。
在完全二叉或多叉树树型结构中,在连续变化的节点进行插入操作时,当 查找到多个连续空洞时,则进行一次多个节点的连续搬移,这样可在待插入节 点位置形成多个空洞,此时,在对后面插入的多个节点时,可以减少搬移量, 提高插入效率。实施例一
本发明实施例提供了一种插入节点的方法,如图6所示,包括 101:获取完全二叉或多叉树树型结构的连续空洞,根据连续空洞顶层的层 级和完全二叉或多叉树树型结构的层数确定偏移量,根据连续空洞的层级获取 起始插入地址,其中,该完全二叉或多叉树树型结构的层数至少为4层。
为了描述方便,本发明实施例以二叉树为例,但在实际应用中,并不限于 二叉树,也可以是三叉树或多叉树。如图5所示的二叉树,该二叉树的层高x 为7,从顶层至底层依次为0、 1、 2、 3、 4、 5、 6层,右侧有连续63个空洞, 连续空洞的最顶点位置的空洞的层级n取值为1,偏移量offset^ 2"—"—2)=16, 所述偏移量表示连续节点搬移操作中,每轮搬移节点的数目。其中,根据子树 的个数公式2" -l可知,连续空洞个数为63个,从而可知连续空洞顶层的地址, 当得知连续空洞顶层的地址后,在图5中向右平推31,即可得知起始插入地址, 向左平推31,即可得知最后一个空洞地址,用指针r一hole一t叩指向起始插入地 址。
102:当有连续变化的节点插入时,获取搬移起始地址,根据搬移起始地址 和偏移量得到包含4寺插入位置的满节点子树的地址范围。
具体地,将搬移起始地址加偏移量得到与连续空洞相邻的满节点子树的地 址范围为(搬移起始地址+l,搬移起始地址+偏移量-1 ),判断相邻的满节点子 树的地址范围是否包含待插入位置,如果是,则得到包含待插入位置的满节点 子树的地址范围。如杲不是,将相邻的满节点子树的地址范围的第二边界地址 加偏移量,得到下一个相邻的满节点子树的地址范围为U般移起始地址+偏移量 xm+l,搬移起始地址+偏移量x (m+l)-l),判断下一个相邻的满节点子树的 地址范围是否包含待插入位置,直到得到包含待插入位置的满节点子树的地址 范围,m为搬移节点的轮数,m的取值为1、 2、 3、 4、 5、 6......。在本实施例
中,m取值为1、 2。
需要说明的是,第二边界地址为靠近连续空洞方向的地址,远离连续空洞 方向的地址为第一边界地址,在图5中,由于连续空洞位于右侧,因此,第一 边界地址为拥定移起始地址+偏移量x (m+l)-l,该地址远离连续空洞方向, 第二边界地址为搬移起始地址+偏移量x m+l,该地址靠近连续空洞方向。
以图5为例,用指针i二src指示搬移起始地址;将搬移起始地址加上偏移量后减l,得到与连续空洞相邻的满节点子树的地址范围为(搬移起始地址+l,搬
移起始地址+16-l),此时m-O,判断得到的满节点子树地址范围是否包含待插 入位置,如果不是,则冲艮据得到的满节点子树地址范围和偏移量offset,得到下 一个相邻的满节点子树地址范围为(搬移起始地址+16x 1+1,搬移起始地址+16 x2-l),此时,m=l,并判断得到的下一个相邻的满节点子树的地址范围是否包 含待插入位置,如果不是,则根据得到的下一个相邻的满节点子树的地址范围 和偏移量offset,得到第三个相邻的满节点子树的地址范围为(搬移起始地址+16 x2+l,搬移起始地址+16 x 3-1 ),此时,m=2,判断得到第三个相邻的满节点子 树的地址范围是否包含待插入节点的位置,本领域人员可以理解的,通过持续 的判断和不断的满节点子树的推移,根据节点的搬移起始地址和offset可以得到 包含待插入位置的满节点子树的地址范围。
在本发明实施例中,如图5所示,可以得知第三个满节点子树的地址范围 包含待插入节点位置。
103:根据102得到满节点子树的地址范围得到拍i移结束地址。
具体地,将包含待插入位置的满节点子树的地址范围中的第二边界地址减2 得到搬移结束地址。
如图5所示,第三个满节点子树地址范围包含待插入节点位置,将第三个 满节点子树地址范围的第二边界地址减2得到最后一个需搬移节点,即第二个 满节点子树的3层最右側节点,用指针r—dst指示最后一个需搬移节点,该节点 对应的地址即为搬移结束地址。
104:根据搬移起始地址、搬移结束地址、起始插入地址和偏移量进行连续 空洞搬移。
具体地,将起始插入位置地址增1得到第一插入地址,将搬移起始地址对 应的节点复制到第一插入地址,将偏移量减1得到第一偏移量;
将第一插入地址增2得到第二插入地址,将搬移起始地址增1得到第一朝殳 移地址,将第一搬移地址对应的节点复制到第二插入地址,将所迷第一偏移量 减l得到第二偏移量;
将第二插入地址依次增l,将第一搬移地址依次增l,将第一搬移地址依次 增1后的地址对应的节点复制到第二插入地址依次增1后的地址,同时,将所 述第二偏移量依次减1;当第二偏移量等于2时,复制当前待4般移地址对应的节点复制到当前待插 入地址,当前待搬移地址增l,当前待插入位置层地址减1,将所述第二偏移量
减l得到第三偏移量;
判断当前待搬移地址增1后的地址是否为搬移结束地址,如果是,将当前 待搬移地址增1得到的地址对应的节点复制到当前待插入位置层地址减1得到 的待插入地址,将所述第三偏移量置0,并结束连续空洞搬移。
进一步地,当判断当前待搬移地址增1后的地址不是搬移结束地址时,将 搬移起始地址赋值给起始插入地址;
将起始插入地址增i得到当前待插入地址,判断另一当前待搬移节点的地
址是否是所述搬移结束地址,如果是,将另一当前待搬移节点复制到当前待插 入地址,结束连续空洞搬移;如果不是,完成另一当前待搬移节点的搬移后, 判断另 一 当前待搬移节点的下 一 节点的地址是否为所述搬移结束地址,直到完 成搬移结束地址对应节点的搬移。
以图5为例,为了实现连续空洞搬移操作,用指针rjiole一top指向起始插入 地址,指针r—rsc指向搬移起始地址,指针r一rsd指向搬移结束地址,连续空洞 搬移操作通过3个指针的平移操作完成,具体如下
指针r—hole—t叩地址增l得到第一插入地址,即指针rJiole—top指向二叉树 5层最右侧空洞位置,将指针r—rsc指向的节点^:移到第一插入地址复制第一插 入地址,同时将偏移量offset减1得到笫一偏移量;
将第一插入地址增2,得到第二插入地址,即指针r—hole—top指向二叉树4 层最右侧空洞位置,将指针r—rsc地址增1得到第一搬移地址,即指针rjsc指 向与连续空洞相邻的第一个满节点子树的3层最右侧节点,此时,将指针r一rsc 指向的节点搬移到此时r一hole一top指向的空洞位置,同时,将第一偏移量减1 得到第二偏移量。
将第二插入地址增l,得到第三插入地址,即指针r—hole—top指向二叉树6 层从最右侧数第3个空洞位置,将第一搬移地址增l,得到第二搬移地址,即指 针r一rsc指向与连续空洞的相邻的第一满节点子树2层最右侧节点,将此时指针 r一rsc指向的节点搬移到此时指针r_hole_top指向的空洞位置,同时将第二偏移 量减l;
在本实施例中,为了保持节点的连续性,对于开始2个节点的插入做了特殊处理。从第三个节点开始,指针rJiole—top的地址依次增1,同时,指针rjsc 的地址依次增1 ,将当前指针r一rsc指向的节点搬移到当前指针r_hole_top指向 的空洞位置,同时第二偏移量依次减1 。
当第二偏移量等于2时,则表示第一轮需要搬移的16节点已经搬移完14 个节点,此时,指针r一hole—top指向二叉树1层最右侧空洞位置,指针r—rsc指 向图5中第一个满节点子树的2层的最右边节点,将此时指针r一rsc指向的节点 复制到指针r—holejop指向的空洞位置,同时,第二偏移量减1,当前插入层地 址减l,即指针r—rsc指向图5中第一个满节点子树的3层的最右边节点,指针 r—hole_top地址增1,即指针r—hole_top指向二叉树顶层空洞地址,判断此时指 针r一rsc指向的节点的地址是否为搬移结束地址,如果是,将指针rjsc指向的 节点搬移到指针r一hole—top指向的空洞,将第二偏移量置0,并结束连续空洞搬 移。如果不是,则将搬移起始地址赋值给起始插入地址,将开始下一轮节点的 搬移。
在本实施例中,由于第一满节点子树3层最左侧节点的地址不是搬移结束 地址,此时,指针r一hole—t叩指向二叉树顶层节点位置,指针i二rsc指向二叉树 2层的节点,如图7所示;判断此时指针rjsc指向的节点的地址是不是搬移结 束地址,如果不是,则将此时指针r—rsc指向的节点搬移到指针r—holej叩指向 的空洞位置。接下来,将指针r_rsc地址依次增1,指针r—hole—top地址依次增1, 判断此时指针rjsc指向的节点的地址是不是l般移结束地址,如果不是,将当前 指针r—rsc指向的节点搬移到指针rJioleJop指向的空洞,如此反复,直到当前 指针r—rsc指向的节点的地址为搬移结束地址,则结束连续空洞搬移;如果不是, 继续进行下一轮节点的搬移操作,在本实施例中,此时,指针r一rsc指向的节点 为指针r一rsd指向的节点,因此,连续空洞搬移结束。
105;当连续空洞搬移完成后,从搬移结束地址开始向靠近连续空洞方向对 offset减1个节点进行清零操作。
具体地,为了使后续待插入节点填入二叉树,在连续空洞搬移完成后,需 要从搬移结束地址向靠近连续空洞方向对offset减1个节点进行清零操作,即对 第二轮搬移的节点进行清零操作,以便待插入节点在插入第三个满节点子树时, 为第三个满节点子树中的节点的搬移空出位置。
106:将连续变化的节点插入到包含待插入位置的满节点子树。具体地,为了将待插入节点插入到第三个满节点子树,需要对第三个满节 点子树进行常规的节点拥^移操作,同时将待插入节点插入到待插入位置。 其中,连续变化的节点为递增节点或递减节点。
在本发明实施例中,釆用高度为22,每个节点为32b的BinaryTree来实现大 容量路由表项的存储和查找。硬件实现架构是FPGA ( FPGA Field Programmable Gate Array,现场可编程门阵列)和DDR2 ( Double Data Rate,双倍速)SDRAM (Synchronous Dynamic Random Access Memory , 同步动态随机存取存储器), Binary Tree的节点存储在DDR2 SDRAM和FPGA内部,控制平面CPU (Central Processing Unit,中央处理器)通过PCI接口对FPGA和DDR2 SDRAM进行读写操 作。
在采用本发明实施例所述的插入方法前,插入512K递增或递减顺序的节点 平均插入速率小于350entry/s。采用本发明实施例的方法后,对递增或递减的插 入动作进行连续的空位搬移,而控制平面CPU相对于现有技术的操作并不增加 计算负载量,对递增或递减分布的1M节点平均插入速率都可以超过1200 entry/s。此外,通过仿真可知,采用本发明实施例的方法,在1/2空洞连续搬移 情况下,需4般移的节点^:量减少为原来的30%。
在本发明实施例中,当需要向二叉树中插入递增或递减的节点时,利用一 片连续的多个空洞,并一起搬移多个节点,可以显著降低叉树在处理递增或递 减的节点插入时所需要的搬移次数,提高插入效率,从而提高路由表项的更新 性能。此外,只需要用FPGA/ASIC (Application Specific Integrated Circuit,专 用集成电路)硬件逻辑,即可依据本发明实施例的方法完成节点的快速搬移和 维护,可以显著减小软件层面所需要的计算负载量,筒化软硬件之间的接口; 也不需要占用额外的shadow空间,节省了内存空间。
实施例二
基于与方法实施例相同的发明构思,本发明实施例提供了 一种插入节点的 装置,如图8所示,包括
第一获取模块801,用于获取完全二叉或多叉树树型结构的连续空洞,根据 连续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,才艮 据所述连续空洞的顶层的层级获取起始插入地址,所述完全二叉或多叉树树型结构的层数至少为4层,所述偏移量表示连续节点搬移操作中,每轮搬移节点 的数目;
第二获取模块802,用于当有连续变化的节点插入时,获取搬移起始地址, 根据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址 范围;
第三获取模块803,用于根据所述满节点子树的地址范围得到搬移结束地
址;
具体地,第三获^Mt块803,用于将所述包含待插入位置的满节点子树的地 址范围的第二边界减2得到搬移结束地址,所述第二边界地址为靠近连续空洞 方向的地址;
搬移模块804,用于根据所述搬移起始地址、所述4般移结束地址、所述起始 插入地址和所述偏移量进行连续空洞搬移;
清零模块805,用于当连续空洞搬移完成后,从所述搬移结束地址开始向所 述连续空洞方向对所述偏移量减1个节点进行清零4喿作;
插入^^莫块806,用于将所述连续变化的节点插入到包含待插入位置的满节点 子树。
其中,第一获取模块801根据连续空洞顶层的层级和完全二叉或多叉树树 型结构的层数确定偏移量,包括
第一获取模块801获取偏移量=2"—"—2),其中,x为完全二叉或多叉树 树型结构的层数,n为连续空洞顶层的层级。详细过程可以参见方法实施例的 101,在此不再赘述。
其中,第二获取模块802根据搬移起始地址和偏移量得到包含待插入位置 的满节点子树的地址范围,包括
第二获取模块802将搬移起始地址加偏移量得到与连续空洞相邻的满节点 子树的地址范围为(搬移起始地址+l,搬移起始地址+偏移量-1 ),判断相邻的 满节点子树的地址范围是否包含待插入位置,如果是,则得到包含待插入位置 的满节点子树的地址范围。
进一步地,第二获取模块802,还用于当判断相邻的满节点子树的地址范围 不包含待插入位置时,将所述相邻的满节点子树的地址范围的第 一边界地址加 所述偏移量,得到所述下一个相邻的满节点子树的地址范围为(#:移起始地址+偏移量x m+l,搬移起始地址+偏移量x ( m+l ) -1 ),判断下一个相邻的满节点 子树的地址范围是否包含待插入位置,直到得到包含待插入位置的满节点子树 的地址范围,其中,第一边界地址为远离所述连续空洞方向的地址,m为4般移 节点的轮数,m的取值为1、 2、 3、 4、 5、 6......。需要说明的是,第二获取模块802的详细过程可以参见方法实施例102,在 此不再赘述。其中,搬移模块804根据搬移起始地址、搬移结束地址、起始插入地址和 偏移量进行连续空洞搬移,包括将起始插入位置地址增1得到第一插入地址,将4般移起始地址对应的节点 复制到第一插入地址,将所述偏移量减1得到第一偏移量;将第一插入地址增2得到第二插入地址,将搬移起始地址增1得到第一搬 移地址,将第一搬移地址对应的节点复制到第二插入地址,将所述第一偏移量 减l得到第二偏移量;将第二插入地址依次增l,将第一搬移地址依次增l,将第一搬移地址依次 增1后的地址对应的节点复制到第二插入地址依次增1后的地址,同时,将所 述第二偏移量依次减1;当所述第二偏移量等于2时,复制当前4寺搬移地址对应的节点复制到当前 待插入地址,当前待4般移地址增1,当前待插入位置层地址减1,将所述第二偏 移量减l得到第三偏移量;判断当前待搬移地址增1后的地址是否为搬移结束地址,如果是,将当前 待搬移地址增1得到的地址对应的节点复制到当前待插入位置层地址减1得到 的待插入地址,将所述第三偏移量置O,并结束连续空洞搬移。进一步地,搬移模块804,还用于当判断当前待搬移地址增l后的地址不是 搬移结束地址时,将搬移起始地址赋值给起始插入地址;将起始插入地址增1得到当前待插入地址,判断另一当前待搬移节点的地 址是否是所述搬移结束地址,如果是,将另一当前待搬移节点复制到当前待插 入地址,结束连续空洞搬移;如果不是,完成另一当前待搬移节点的搬移后, 判断另一当前待搬移节点的下一节点的地址是否为所述搬移结束地址,直到完 成搬移结束地址对应节点的搬移。需要说明的是,搬移模块的详细过程可以参见方法实施例的104,在此不再赘述。其中,连续变化的节点为连续递增的节点或连续递减的节点。在本发明实施例中,当需要向树型结构汇中插入递增或递减的节点时,利 用一片连续的多个空洞,并一起搬移多个节点,可以显著降低叉树在处理递增 或递减的节点插入时所需要的搬移次数,提高插入效率,从而提高路由表项的更新性能。此外,只需要使用FPGA/ASIC硬件逻辑,即可完成节点的快速搬移 和维护,可以显著减小软件层面所需要的计算负载量,简化软硬件之间的接口; 也不需要占用额外的shadow空间,节省了内存空间。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是 可以通过程序来指令相关的硬件来完成,所述程序可以存储于一计算机可读取 存储介质中,所述存储介质为计算机的软盘、硬盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。
权利要求
1、一种插入节点的方法,其特征在于,包括获取完全二叉或多叉树树型结构的连续空洞,根据连续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,根据所述连续空洞的顶层的层级获取起始插入地址,所述完全二叉或多叉树树型结构的层数至少为4层,所述偏移量表示连续节点搬移操作中,每轮搬移节点的数目;当有连续变化的节点插入时,获取搬移起始地址,根据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址范围;根据所述满节点子树的地址范围得到搬移结束地址;根据所述搬移起始地址、所述搬移结束地址、所述起始插入地址和所述偏移量进行连续空洞搬移;当连续空洞搬移完成后,将所述连续变化的节点插入到包含待插入位置的满节点子树。
2、 如权利要求l所述的方法,其特征在于,所述根据连续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,包括确定所述偏移量=2"—"—2),其中,x为所述完全二叉或多叉树树型结构的层数,n为连续空洞顶层的层级。
3、 如权利要求1所述的方法,其特征在于,所述^艮据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址范围,包括将所述搬移起始地址加所述偏移量得到与所述连续空洞相邻的满节点子树的地址范围,判断所述相邻的满节点子树的地址范围是否包含待插入位置,如果是,则得到所述包含待插入位置的满节点子树的地址范围。
4、 如权利要求3所述的方法,其特征在于,还包括当判断所述相邻的满节点子树的地址范围不包含待插入位置时,将所述相邻的满节点子树的地址范围的第一边界地址加所述偏移量,得到所述下一个相邻的满节点子树的地址范围,判断所述下一个相邻的满节点子树的地址范围是否包含待插入位置,直到得到包含待插入位置的满节点子树的地址范围,其中,所述第 一边界地址为远离所述连续空洞方向的地址。
5、 如权利要求l所述的方法,其特征在于,所述根据所述搬移起始地址、所述搬移结束地址、所述起始插入地址和所述偏移量进行连续空洞搬移,包括:将起始插入位置地址增1得到第一插入地址,将搬移起始地址对应的节点复制到第一插入地址,将所述偏移量减l得到第一偏移量;将所述第一插入地址增2得到第二插入地址,将搬移起始地址增1得到第一搬移地址,将所述第一搬移地址对应的节点复制到所述第二插入地址,将所述第一偏移量减1得到第二偏移量;将所述第二插入地址依次增1,将所述第一^:移地址依次增1,将所述第一搬移地址依次增1后的地址对应的节点复制到所述第二插入地址依次增1后的地址,同时,将所述第二偏移量依次减1;当所述第二偏移量等于2时,复制当前待搬移地址对应的节点复制到当前待插入地址,当前待搬移地址增l,当前待插入位置层地址减1,将所述第二偏移量减l得到第三偏移量;判断当前待搬移地址增1后的地址是否为搬移结束地址,如果是,将当前待搬移地址增1得到的地址对应的节点复制到当前待插入位置层地址减1得到的待插入地址,将所述第三偏移量置0,并结束连续空洞^:移。
6、 如权利要求5所述的方法,其特征在于,还包括当判断当前待搬移地址增1后的地址不是搬移结束地址时,将搬移起始地址赋值给起始插入地址;将起始插入地址增1得到当前待插入地址,判断另一当前待搬移节点的地址是否是所述搬移结束地址,如果是,将另一当前待搬移节点复制到当前待插入地址,结束连续空洞搬移;如果不是,完成另一当前待搬移节点的搬移后,判断当前待搬移节点的下一节点的地址是否为所述搬移结束地址,直到完成搬移结束地址对应节点的拍史移。
7、 如权利要求l所述的方法,其特征在于,所述根据所述满节点子树的地址范围得到搬移结束地址包括将所述包含待插入位置的满节点子树的地址范围的第二边界地址减2得到搬移结束地址,所述第二边界地址为靠近连续空洞方向的地址。
8、 如权利要求l所述的方法,其特征在于,当连续空洞搬移完成后,所述方法还包括从所述纟般移结束地址开始向所述连续空洞方向对偏移量减1个节点进行清零操作。
9、 一种插入节点的装置,其特征在于,包括第一获取模块,用于获取完全二叉或多叉树树型结构的连续空洞,根据连续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,根据所述连续空洞的顶层的层级获取起始插入地址,所述完全二叉或多叉树树型结构的层数至少为4层,所述偏移量表示连续节点搬移操作中,每轮搬移节点的数目;第二获取模块,用于当有连续变化的节点插入时,获取搬移起始地址,根据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址范围;第三获取模块,用于根据所述满节点子树的地址范围得到搬移结束地址;搬移模块,用于根据所述搬移起始地址、所述搬移结束地址、所述起始插入地址和所述偏移量进行连续空洞^:移;插入模块,用于将所述连续变化的节点插入到包含待插入位置的满节点子树。
10、 如权利要求9所述的装置,其特征在于,所述第一获取模块根据连续空洞顶层的层级和所述完全二叉或多叉树树型结构的层数确定偏移量,包括所述第一获取模块获取所述偏移量=2"—"_2),其中,x为完全二叉或多叉树树型结构的层数,n为连续空洞顶层的层级。
11、 如权利要求9所述的装置,其特征在于,所述第二获取模块根据所述搬移起始地址和所述偏移量得到包含待插入位置的满节点子树的地址范围,包括所述第二获取模块将所述搬移起始地址加所述偏移量得到与所述连续空洞相邻的满节点子树的地址范围,判断所述相邻的满节点子树的地址范围是否包含待插入位置,如果是,则得到所述包含待插入位置的满节点子树的地址范围。
12、 如权利要求11所述的装置,其特征在于,所述第二获取模块,还用于当判断所述相邻的满节点子树的地址范围不包含待插入位置时,将所述相邻的满节点子树的地址范围的第 一边界地址加所述偏移量,得到所述下一个相邻的满节点子树的地址范围,判断所述下一个相邻的满节点子树的地址范围是否包含待插入位置,直到得到包含待插入位置的满节点子树的地址范围,其中,所述第 一边界地址为远离所述连续空洞方向的地址。
13、 如权利要求9所述的插入节点的装置,其特征在于,所述搬移模块根据所述搬移起始地址、所述搬移结束地址、所述起始插入地址和所述偏移量进行连续空洞搬移,包括将起始插入位置地址增1得到第一插入地址,将搬移起始地址对应的节点复制到所述第一插入地址,将所述偏移量减1得到第一偏移量;将所述第一插入地址增2得到第二插入地址,将^:移起始地址增1得到第一搬移地址,将所述第一搬移地址对应的节点复制到所述第二插入地址,将所述第一偏移量减1得到第二偏移量;将所述第二插入地址依次增1,将所述第一搬移地址依次增1,将所述第一搬移地址依次增1后的地址对应的节点复制到所述第二插入地址依次增1后的地址,同时,将所述第二偏移量依次减1;当所述第二偏移量等于2时,复制当前待搬移地址对应的节点复制到当前待插入地址,当前待搬移地址增l,当前待插入位置层地址减1,将所述第二偏移量减l得到第三偏移量;判断当前待搬移地址增1后的地址是否为搬移结束地址,如果是,将当前待搬移地址增1得到的地址对应的节点复制到当前待插入位置层地址减1得到的待插入地址,将所述第三偏移量置O,并结束连续空洞搬移。
14、 如权利要求13所述的装置,其特征在于,所述搬移模块,还用于当判断当前待搬移地址增1后的地址不是搬移结束地址时,将纟般移起始地址I武值给起始插入地址;将起始插入地址增1得到当前待插入地址,判断另一当前待搬移节点的地址是否是所述搬移结束地址,如果是,将另一当前待搬移节点复制到当前待插入地址,结束连续空洞搬移;如果不是,完成另一当前待搬移节点的搬移后,另 一判断当前待搬移节点的下一节点的地址是否为所述搬移结束地址,直到完成搬移结束地址对应节点的搬移。
15、 如权利要求9所述的装置,其特征在于,所述装置还包括清零模块,用于当连续空洞搬移完成后,从所述搬移结束地址开始向所述连续空洞方向对偏移量减1个节点进行清零操作。
全文摘要
本发明实施例一种公开了插入节点的方法和装置,属于数据通信领域。所述方法包括获取二叉树或多叉树树型结构的连续空洞,根据连续空洞顶层的层级和所述二叉树或多叉树树型结构的层数确定偏移量,该二叉树或多叉树树型结构的层数至少为4层;当有连续变化的节点插入时,获取起始搬移地址,根据起始搬移地址和偏移量得到包含待插入位置的满节点子树的地址范围;获取搬移结束地址;根据起始搬移地址、搬移结束地址、起始插入地址和偏移量进行连续空洞搬移;当连续空洞搬移完成后,对搬移结束地址的相邻的偏移量个节点进行清零操作;将连续变化的节点插入到包含待插入位置的满节点子树。在本实施例中,可以减少搬移量,提高节点插入效率。
文档编号H04L12/56GK101521627SQ20091008158
公开日2009年9月2日 申请日期2009年4月13日 优先权日2009年4月13日
发明者毅 易 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1