用于产生和使用改进的树形位图数据结构的方法和装置的制作方法

文档序号:6452054阅读:226来源:国知局
专利名称:用于产生和使用改进的树形位图数据结构的方法和装置的制作方法
技术领域
本发明特别涉及通信和计算机系统;并且本发明尤其涉及、但不限于,例如在路由器、包交换系统或者其他通信或计算机系统中,当确定最长前缀匹配时产生和使用改进的树形位图数据结构。
背景技术
通信产业正迅速改变以适应新兴技术和不断增长的用户需求。用户对新应用和已有应用的改进性能的需求正促使通讯网络和系统供应商采用具有更高速度和容量(例如,更宽的带宽)的网络和系统。在实现这些目标的努力中,一种很多通信供应者采用的普遍方法是采用包交换技术。越来越多地利用各种包技术,如IP(Internet Protocol,网际协议),建立和扩充公共和私有的通讯网络。
例如交换机或者路由器的网络设备一般基于一个或多个标准接收、处理和前向转发或丢弃包,这些标准包括包使用的协议的类型、包的地址(例如,源、目的地、群组)和被请求服务的类型或质量。此外,在每个包上一般执行一个或多个安全操作。但在这些操作可被执行前,在该包上一般必须执行包分类的操作。
IP转发需要以网速进行最长匹配前缀计算。现在的IP版本IPv4,使用32位目的地地址,并且一个核心因特网路由器能够容纳超过200,000个前缀。前缀一般用跟着一个’*’的位串(例如,01*)表示,以指示这些后面位的值不重要。对于目的地路由,在路由表中的每一个前缀条目一般包括一个前缀和下一个跳转值。例如,假设数据库只包括两个前缀条目(01*-->L1;0100*-->L2)。如果路由器收到一个目的地地址从01000开始的包,那么该地址和第一个前缀(01*)和第二个前缀(0100*)都匹配。因为第二个前缀是最长匹配,包应该被送到下一个跳转L2。另一方面,一个目的地地址从01010开始的包,应该被送到下一个跳转L1。下一个跳转信息将一般指定在路由器上的一个输出端口,并且可能指定一个数据链路地址。
图1A举例图示了示为表10A中的节点1A-9A和二进位TRIE 10B中的节点1B-9B的一组前缀P1-9。二进位TRIE 10B中也示出了占位符/空节点11B-18B,其代表不匹配节点(也就是说,不可能作为最长匹配前缀结果的节点)。例如,串1110000匹配前缀P1(1B)、P2(2B)和P5(5B),其中最长的匹配前缀是P5(5B)。
在Eatherton等人于1999年8月10号申请、现正在审理中的美国专利申请09/371,907,”使用树形位图的数据结构和对一个数据库中的数据快速分类的方法(Data Structure Using a Tree Bitmap and Method forRapid Classification of Data in a Database)”中描述了一种一般被称为”树形位图”的已知方法,所述专利申请引用于此以供参考。树形位图是一种多位TRIE算法,它通过将节点分组成步组(sets of strides)来实现对二进制搜索TRIE的表达(representation)。步一般被定义为被分组在一起的二进位TRIE的树级别的数目,或者定义为在单个的读操作中访问的一个树中的级别的数目,代表一个树或TRIE中的多个级别。图1B用示了一个这样将节点P1-P9(1B-9B)和空节点11B-18B(图1A)分成步20-25的例子。在这个例子中,步的大小是三。
在一个已知的树形位图算法的实现中,一个特定的TRIE节点的所有子节点被连续存储,这允许对所有子(children)只使用一个指针(指针指向子节点块的开始),因为每一个子节点能够作为相对于该单个指针的偏移量被计算。这能减少所需指针的数目并减小TRIE节点的尺寸。
另外,每个TRIE节点有两个位图,一个用于所有在内部被存储的前缀,一个用于外部指针。内部位图具有一个为被存储在这个节点中的每一个前缀设置的1位。这样,对一个r位TRIE节点,长度小于r的可能前缀有(2r)-1个,因此,使用(2r)-1位图。外部位图包含一个位,该位用于所有可能的2r个子指针。一个TRIE节点具有固定的大小,并且只包含一个外部指针位图、一个内部下一个跳转信息位图和一个指向子节点块的独立指针。与内部前缀相关的下一个跳转被以与每一个TRIE节点相关联的独立数组形式存储在该TRIE节点里。为了存储器分配目的,结果数组通常是普通节点大小的偶数倍(例如,对于16位下一个跳转指针,和8字节节点,一个结果节点被最多4个下一个跳转指针需要,两个结果节点被最多8个需要等等)。将下一个跳转指针放到一个独立的结果数组中,每个TRIE节点可能需要两个存储器访问(一个给TRIE节点,一个为存储的前缀提取(fetch)结果节点)。一般使用一种不访问结果节点直到搜索结束的简单延迟策略。然后访问结果节点,该结果节点对应于包含一个有效前缀的路径中碰到的最后的TRIE节点。这只是在除了每个TRIE节点所需的那个存储器查询(memory reference)之外,在末端加了一个单独的存储器查询。
图1C图示了图1A-B所示的前缀例子的一个树形位图实现的表达。如所示的,根节点30代表第一级别TRIE。子指针31将根节点30连接到包含第二级别步的子数组40。在级别3,有两个子数组50和60,它们从子数组40分别通过子指针41和42被连接。
最长前缀匹配是通过从根节点开始被找到的。目的地地址的开始位(first bits)(对应于根节点的步,在这个例子中是3)被用于索引到在比如位置P上的根节点的外部位图。如果一个1被定位在这个位置,那么有一个有效子指针。这个1左边、不包括这个1的1的数目(假设为I)被确定。因为指向子块起始位置的指针(比如为C)和每一个TRIE节点的大小(比如为S)是已知的,所以指向子节点的指针能够被计算为C+(I*S)。
在转移到下一个子之前,检查内部位图以查看是否有一个对应于位置P的存储的前缀。为了这样做,设想从右边开始逐位地移去P的位,并索引到内部位图的相应位置,以寻找遇到的第一个1。例如,假设P是101,并且在根节点位图中使用3位步。最右边的位被首先移去,导致前缀10*。因为10*对应于内部位图中的第六位位置,作检查以确定在那个位置是否有个1。如果没有,最右边的两个位被移去(导致前缀1*)。因为1*对应于内部位图的第三个位置,作检查以确定在那是否有个1。如果在那找到一个1,那么搜索结束。如果在那没有找到一个1,那么前三位被移去,并且执行对一个条目的搜索,该条目对应于内部位图的第一个条目中的*。
一旦已经确定一个匹配的被存储的前缀存在于一个TRIE节点中,来自于与TRIE节点相关的结果节点、对应于下一个跳转的信息不会被立即提取。而是,计数前缀位置之前的位的数量以指示该信息在结果数组中的位置。访问结果数组对每个TRIE节点都将使用一个额外的存储器查找。否则,在记忆被存储的前缀位置和相应的父TRIE节点的同时,检查子节点。此目的是记忆在搜索路经中包含被存储的前缀的最后的TRIE节点T和相应的前缀位置。当搜索结束时(也就是说,遇到了一个在外部位图的相应位置上设有一个0的TRIE节点),对应于在已经计算出的位置上的T的结果数组被访问以读完下一个跳转信息。
图1D图示了一个全部树形位图搜索的实现的伪码。假设一个函数treeFunction,如果有最长匹配前缀的话,该函数能在一个特定的节点中通过查询(consult)内部位图,找到最长匹配前缀的位置。”LongestMatch”跟踪指向迄今所见最长匹配的指针。当没有子指针(也就是说,在节点的外部位图中没有位被设置)时循环结束,然后执行对LongestMatch所指的结果节点的延迟(lazy)访问,以获得最后的下一个跳转。伪码假设正被搜索的地址已经被分成步,并且stride[i]包含对应第i步的位。
使步保持不变,一种减少每一个随机访问的大小的方法是分裂内部和外部位图,这有时被称为分裂树形位图。这是通过在每一个TRIE节点中只放置外部位图实现的。如果没有存储器分段(segmentation),来自相同父的子TRIE节点和内部节点能够在存储器中被连续放置。如果存在存储器分段,使内部节点分散在多个存储体中是一个坏的设计。在被分段的存储器的情况下,对TRIE节点的一个选择是使指针指向子数组、内部节点和结果数组。
如图1E所示的一种替换方法,使TRIE节点指向内部节点,并且内部节点指向结果数组。为了使这个最优化运作,每个子必须具有一个位,该位能指示父节点是否包含一个前缀,该前缀是迄今最长的匹配。如果在路径中有一个前缀,搜索引擎记录内部节点的地点(从最后节点的数据结构中计算出来),作为包含迄今最长匹配前缀。然后,当搜索结束时,相应的内部节点被访问,然后对应于内部节点的结果节点被访问。注意,核心算法延迟地访问下一个跳转信息;分裂树形算法甚至延迟地访问内部位图。能这样做是因为,任何时候只要前缀P被存储在节点X中,匹配P的X的所有子能够存储一个位,该位表示父具有一个存储的前缀。软件索引(reference)实现使用这种优化来节省内部位图处理;硬件实现使用它只是为了减小访问的宽度大小(因为位图处理在硬件中不是问题)。分裂树形位图的一个好处是,如果一个节点只包含路径而没有内部前缀,能够使用一个空内部节点指针,并且在内部位图上没有空间被浪费。
用这种优化,外部和内部位图分别在搜索节点和内部节点之间被分裂。以这种方式分裂位图导致了减小的节点大小,这利于硬件实现。每一个搜索节点Sj有两个指针一一个指向子,另一个指向内部节点,Ij。内部节点Ij保持一个指针指向叶数组LAj,对应于属于这个节点的前缀。例如,图1E图示了搜索节点S1(111)、S2(112)和S3(113),内部节点I1(121)、I2(115)和I3(114),和叶数组LA1(122)、LA2(116)和LA3(123),以及它们之间通过指针的互连。另外,叶数组LA1(122)、LA2(116)和LA3(123)分别包含叶节点L1(122A)、L2(116A)和L3(123A)。注意,以实线图示的节点是在一个树形位图查找例子中被访问的节点,这个例子在下文中描述。
现在,考虑查找继续进行访问搜索节点S1(111)、S2(112)和S3(113)的情况。如果parent_has_match标记设置在S3(113)中,这意味着,在在叶数组LA2(116)中的叶节点L2(116A)中的一个中有某个前缀,该前缀是当前的最长匹配。在这种情况下,内部节点I2(115)的地址被保存在查找上下文中。现在假设S3(113)不是这个查找扩展路径。在叶数组LA3(123)中可能有某个前缀,该前缀为最长匹配前缀。因此,I3(114)首先被访问,并且它的内部位图被检查来寻找最长匹配前缀。如果没有找到最长匹配前缀,那么地址已经被保存的内部节点I2(115)被提取,它的位图被分析,并且对应最长匹配的叶节点L2(116A)被返回。上述访问顺序是S1(111)、S2(112)、S3(113)、I3(114)、I2(115)、L2(116A)。这个例子显示有这样的情况,即在最长匹配能够被确定前,需要访问两个内部节点,并且分析两个内部位图。
在硬件实现中,存储器访问速度通常是和节点处理时间相对立的瓶颈。基于硬件的树形位图搜索引擎的一般实施,使用多个存储信道来存储树形位图数据结构。在这种情况下,树形位图节点以这样的方式在存储信道中遍布,使得对于每一个查找,所被访问的连续节点落在不同的存储信道中。如果一个独立的存储信道能够承受每秒”x”次访问,那么对于同时进行的多个查找,假如每个存储信道每次查找最多被访问一次,那么就能够实现平均每秒”x”次查找。如果这些信道中的任何一个在每次查找中被访问两次,那么包转发速度下降一半,因为那个特定的信道成为瓶颈。
因此,沿着任何从树的根部到底部(bottom)的路径的所有内部节点,都需要被存储在不同的存储信道中。因为两个内部节点都需要被放置到不同的存储信道中,所以当存储信道的数目有限时,访问两个内部节点就出现了问题,并且哪两个内部节点将被访问取决于特定的树形位图和查找值。例如,参照图1E,被访问的内部节点可能是I3(114)和I2(115),或者I3(114)和I1(121),或者I2(115)和I1(121)。因此,在这个例子中,所有的七个节点S1(111)、S2(112)、S3(113)、I1(121)、I2(115)、I3(114)和L2(116)需要处于单独的存储器模块中。当存储器模块少于7时就有问题了。
当确定最长前缀匹配时,需要用来产生和使用改进的树形位图数据结构的新方法和装置,尤其是,但是不限于,减少存储器访问的次数和/或提供一个比以前的树形位图实现具有优势的那些方法和装置。

发明内容
公开了在确定一个最长的前缀匹配时,例如在路由器、包交换系统,或者其他通信或计算机系统、设备或系统中,用来产生和使用改进的树形位图数据结构的方法和装置。一个实施例包括一个数据结构。数据结构包括,第一搜索节点,第一子数组,其具有第一内部节点和第二搜索节点;和第一叶数组,其具有多个第一叶数组条目。第一搜索节点包括一个指向第一子数组的指针。第一内部节点包括一个指向第一叶数组的指针。第二搜索节点包括一个指向多个第一叶数组条目中的一个的指针。


所附的权利要求详细地阐明了本发明的特征。从下面结合附图的详细描述中,本发明和它的优点可以被最好的理解。这些附图是图1A-E是已知的树形位图系统的框图或其他图示;图2A是一个实施例中使用的改进的树形位图数据结构的框图;图2B是一个实施例中使用的改进的树形位图数据结构的框图;图3A是一个实施例中使用的,通过使用树形位图执行一个最长前缀匹配操作的进程的框图;图3B-C图示了一个实施例中使用的,从一个树形位图中增加和删除节点的进程的伪码的框图;图4是一个实施例的框图,该实施例产生和/或使用一个树形位图数据结构来确定一个最长前缀匹配;图5是一个实施例的框图,该实施例产生和/或使用一个树形位图数据结构来确定一个最长前缀匹配;图6A图示了一个实施例中使用的搜索要求和结果消息格式;图6B图示了一个实施例中使用的节点数据单元的一个格式;图6C图示了一个实施例中使用的进程,该进程用来确定一个树形位图数据结构的一个实施例中的下一个相关节点或单元的地址;图7图示了一个实施例中使用的进程,该进程用来从一个收到的包或其他信息中摘录数据,将这些数据转送到一个树形位图系统,并且根据从树形位图系统接收到的结果来处理收到的包或其他信息;和图8A-D图示了一个实施例中使用的进程,该进程用来执行一个树形位图最长前缀或者其他查找操作。
具体实施例方式
公开了当确定一个最长前缀匹配时,例如在路由器、包交换系统或者其他通信或计算机组件、设备或系统中,用来产生和使用改进的树形位图数据结构的方法和装置。这里所描述的实施例包括了各种元件或限制,其中没有一个元件或限制被认为是关键性的元件或限制。每一项权利要求独立完整地陈述本发明的一个方案。此外,所描述的一些实施例包括,但不限于,系统、网络、集成电路芯片、嵌入式处理器、ASIC(ApplicationSpecific Integrated Circuit,特定用途集成电路)、方法和包含指令的计算机可读介质。以下描述的实施例实现了在本发明范围和原则内的不同方案和构造,其中图说明了示例性的非限制性的构造。
术语“包”使用在这里指所有类型的包或者任何其它单位的信息或数据,包括,但不限于,固定长度的信元、可变长度的包,其中每一个可以或不可以分为更小的包或信元。术语“包”使用在这里也指包本身或包指示,例如,但不限于,包或包报头的全部或部分、数据结构值、指针或索引,或者包的任何其他部分或标识。而且,这些包可以包含一种或多种类型的信息,包括,但不限于,语音、数据、视频和音频信息。在这里术语“项目”用来指包或者任何其它单位或段的信息或数据。
术语“系统”在这里通用于描述任何数目的组件、元件、子系统、设备、包交换元件、包交换机、路由器、网络、计算机和/或通信设备或机构、或其组件的组合。术语“计算机”在这里通用于描述任何数目的计算机,包括,但不限于,个人电脑、嵌入式处理器和系统、控制逻辑、ASIC、芯片、工作站、大型机等。术语“设备”在这里通用于描述任何类型的机构,包括计算机或系统或其组成部分。术语“任务”和“过程”在这里通用于描述任何类型的运行的程序,包括,但不限于,计算机进程、任务、线程、执行应用程序、操作系统、用户进程、设备驱动程序、本地码、机器或其他语言等,并且可以是交互的和/或非交互的、本地和/或远程执行的、在前台和/或后台执行的、在用户和/或操作系统地址空间内执行的、一个例程库和/或独立的应用程序,并且不限于任何特定存储器分区技术。图中所示的步骤、连接和信号与信息的处理,包括,但不限于,任何框图、流程图和消息队列表,在保持在本发明范围和原则内的其他实施例中,可以以相同或不同的串行或并行次序和/或由不同组件和/或进程、线程等,和/或通过不同的连接并结合其他功能来执行。
此外,术语“网络”和“通信机制”在这里通用于描述一个或多个网络、通信媒体或通信系统,包括,但不限于,因特网,私有或公共电话,蜂窝状的、无线的、卫星的、电缆的、局域、城域的和/或广域的网络,通过电缆的电连接、总线等等,以及例如消息传送、进程间通信、共享存储器等的内部通信机构。
术语“存储机构”包括任何类型的存储器、存储设备或其他用于以任何形式保存指令或数据的机构。“计算机可读介质”是一个可扩展的术语,包括了任何存储器、存储设备、存储机构、和包括了例如网络接口卡及其缓存的接口和设备的其他存储和信令机构,以及任何通信设备和所接收和传送的信号,和计算机化的系统能够解释、接收和/或传送的其它当前和发展中的技术。术语“存储器”包括任何随机访问存储器(RAM)、只读存储器(ROM)、闪存、集成电路和/或其他存储器组件或元件。术语“存储设备”包括任何固态存储介质、盘驱动器、磁盘、网络化的服务、磁带驱动器和其他存储设备。存储器和存储设备可以存储由处理器和/或控制逻辑执行的计算机可执行指令,和由处理器和/或控制逻辑操纵的数据。术语“数据结构”是一个可扩展的术语,指任何数据元素、变量、数据结构、数据库、和/或能应用于数据以方便解释该数据或对其执行操作的一个或多个或一个组织的体系(scheme),例如,但不限于,存储器位置或设备、集合、队列、树结构、堆栈、列表、链接列表、数组、表格、指针等。一个数据机构一般保存在存储机构中。术语“关联存储器”指的是所有类型的公知的或开发出来的关联存储器,包括但不局限于二进制(binary)和三进制(ternary)内容可寻址存储器、哈希(hash)表、TRIE和其他数据结构等等。
术语“一个实施例”在这里用来指一个特定的实施例,其中每次提到“一个实施例”可能指的是不同的实施例,在这里描述关联特性、元件和/或限制时,重复使用该术语并不导致每个实施例必须包括的一套累积的关联特性、元件和/或限制,虽然某个实施例一般可以包括所有这些特性、元件和/或限制。此外,短语“用于xxx的装置”一般包括包含了用于执行xxx的计算机可执行指令的计算机可读介质。
此外,术语“第一”、“第二”等在这里通常用来代表不同单元(如,第一元件、第二元件)。在这里使用这些术语不一定意味一个排序,如一个单元或事件比另一个发生或到来得更早,而是提供一个区别特定单元的机制。此外,短语“基于x”和“响应于x”用来表示最小的一组项目x,从它衍生或引起了某些事物,其中“x”是可延伸的,并且不一定描述在其上执行操作等等的一个完整列表的项目。另外,短语“耦合到”用来表示两个元件或设备之间的一定程度的直接或间接连接,而耦合设备修改或不修改被耦合的信号或通信的信息。术语“子集”用来表示包括了一个集合中元素的全部、少于全部的组。此外,术语“或”在这里用来表示连续项目中的一个或多个,包括全部,的交替选择。
本发明公开了当确定一个最长前缀匹配时,例如在路由器、包交换系统中,用来产生和使用改进的树形位图数据结构的方法和装置。一个实施例组织树形位图,使得在一个查找操作中必须被访问的内部节点数最少。在TRIE或搜索节点的每一个中都包括一个指向父的叶或结果数组中的最佳匹配条目的指针,这允许对这个结果的直接访问而不用必须分析相应的内部节点。而且,一个实施例将一个特定级别的内部节点存储为其子数组中的第一个单元。此外,一个实施例使用通用搜索引擎,该引擎能够同时遍历多个树形位图或其他数据结构,并且执行完整搜索、部分搜索,并且重新开始部分搜索,例如在收到在其上搜索的额外数据后。
一个实施例包括对树形位图数据结构以及相关的查找和更新方案的改进。这些一般改善了查找性能,并且可能节约存储器访问以用于某些硬件实施例。一个实施例以这样的方式组织树形位图,使得每次查找最多需要一个内部节点访问。例如,一个实施例修改树形位图结构,以避免必须以S1、S2、S3、I3、I2和L2的顺序(也就是说,前面描述的涉及图1E的顺序)访问内部节点I2。在这个例子中并且也参照图1E,匹配叶节点L2(116A)在分析I2(115)中的内部位图后被确定。对这个访问顺序的分析,使得观察到了对每一个通过节点S3(113)的查找,随后的对I2(115)的内部位图分析总是产生相同的匹配叶节点L2(116)。这样,在一个实施例中,一个新的树形位图数据结构和相关的查找和更新方案,被用来避免以这个典型的查找顺序在I2(115)对内部位图分析。
一个实施例使用数据结构,该数据结构包括,第一搜索节点;第一子数组,包括第一内部节点和第二搜索节点;和第一叶数组,包括多个第一叶数组条目。一般,第一搜索节点包括一个指向第一子数组的指针,第一内部节点包括一个指向第一叶数组的指针;并且第二搜索节点包括一个指向第一叶数组多个条目中的一个的指针。
在一个实施例中,第一内部节点是第一子数组的第一单元。在一个实施例中,第一内部节点的指针和第二搜索节点的指针指示不同的第一叶数组条目。在一个实施例中,数据结构还包括第二子数组,其中,第二搜索节点包括一个指向第二子数组的指针。在一个实施例中,数据结构还包括第二叶数组,该数组包括多个第二叶数组条目,其中,第二子数组包括第二内部节点,该第二内部节点包括一个指向第二叶数组的指针。在一个实施例中,第二内部节点是第二子数组的第一单元。在一个实施例中,第二子数组包括第三搜索或结束节点,其中,第二搜索或结束节点包括一个指向多个第二叶数组条目中的一个的指针。在一个实施例中,第二内部节点的指针和第三搜索或结束节点的指针,指示不同的第二叶数组条目。在一个实施例中,第一搜索节点代表第一长度的步,第二搜索节点代表第二长度的步,其中,第一长度和第二长度是不同的。在一个实施例中,第一搜索节点包括第一长度的第一提示符,第二搜索节点包括第二长度的第二提示符。
一个实施例遍历代表多个前缀的树形数据结构,多个前缀被区分成具有大于一的许多树级别的多个步,多个步中的每一步用树形位图表示,并且子路径的指出用扩展位图表示。在一个实施例中,在树形数据结构中位于当前级别的搜索节点被接收。响应确定一个新的最佳匹配是否存在,当前最佳匹配标识符被更新。在确定匹配的下一级别节点是否存在中,索引到当前级别的扩展位图。在一个实施例中,这个遍历被重复,直到匹配的下一级别节点确实存在,然后用当前级别的搜索节点指出的内部节点被提取,并且基于当前最佳匹配标识符或者基于当前级别搜索节点中指向叶节点的指针,搜索结果被识别。在一个实施例中,响应确定搜索节点不存在于当前级别,索引到一个结束节点以识别搜索结果。在一个实施例中,基于在结束节点中的指针,当前最佳匹配标识符被更新。
一个实施例,基于一个输入搜索数据串,遍历一个存储在一个或多个计算机可读介质中的树形数据结构。一般,一个部分完成的树形遍历的搜索进程上下文被接收,其中搜索进程上下文一般包括下一个节点地址或者某个其他节点提示符。树形数据结构的遍历,从这个节点输入串的下一部分重新开始。一个实施例将一般包括下一个节点地址的查找请求分配给多个存储设备中的一个。查找结果从多个存储设备中的一个设备中被接收,查找结果包括一个搜索节点。响应确定一个新的最佳匹配是否存在,当前最佳匹配标识符被更新。索引到搜索节点的当前级别扩展位图,以确定匹配的下一个级别的节点是否存在。下一个节点地址的新值被产生,作为对搜索进程上下文的新值。
在一个实施例中,搜索进程上下文还包括一个最佳匹配提示,和所使用的输入搜索数据串的长度。在一个实施例中,最佳匹配提示包括一个匹配标记和一个叶节点指针。在一个实施例中,多个树形数据结构被存储在计算机可读介质中,并且这些树形数据能够被同时遍历。
基于输入数据串、用来遍历一个或多个树形数据结构的节点的一种实施例装置,包括树形位图下一个地址机构,该机构用来确定一个或多个树形数据结构中的一个特定的树形数据结构的下一个节点的存储地址,下一个节点对应输入数据串的一部分,多个存储设备,这些设备用来存储一个或多个树形数据结构,并且用来响应于提取请求、返回下一个节点;和一个存储器管理器,被耦合到树形位图下一个地址机构和多个存储设备,用来将提取请求分送给多个存储设备中的一个。一般,一个或多个树形数据结构中的每一个,包括第一搜索节点,第一子数组包括第一内部节点和第二搜索节点,并且第一叶数组包括多个第一叶数组条目。在一个实施例中,第一搜索节点包括一个指向第一子数组的指针,第一内部节点包括一个指向第一叶数组的指针;并且第二搜索节点包括一个指向多个第一叶数组条目中的一个条目的指针。
在一个实施例中,一个或多个树形数据结构包括具有至少两个不同树的节点。在一个实施例中,树形位图下一个地址还确定多个存储设备中的一个,并为存储器管理器提供多个存储设备中的一个设备的提示。在一个实施例中,下一个节点包括多个存储设备中具体的一个设备的提示,在那里,存储器管理器将提取请求分配给多个存储设备中的那个具体的设备。在一个实施例中,多个存储设备包括第一类型的第一存储设备和第二类型的第二存储设备,其中第一类型和第二类型是不同的。在一个实施例中,第一存储类型为树形数据结构中的每一个存储第一级别的节点。
图2A图示了这样的一个实施例,其具有搜索节点S1(211)、S2(212)和S3(213),内部节点I1(221)、I2(224)和I3(214),和叶数组LA1(222)、LA2(215)和LA3(223),叶节点L1(222A-B)、L2(215A-B)和L3(223A-B)以及它们之间通过指针的互连。注意,以实线图示的节点是在下文中要描述的、在一个树形位图查找例子中被访问的节点。同样,如图2A所示,指针220、230和240从它们各自的搜索节点212、213和225直接指向了父节点的叶节点222A、215A和223B(对应最佳匹配条目)。同样,注意图2A只显示了一个路径,而其他路径的搜索节点将指向在叶数组(222,215,223)中的不同的叶节点(222A-B、215A-B、223A-B)。在一个实施例中,在控制时间(例如,当树形位图正在被编程时),已知叶L2(215A)包含的是对应节点S3(213)的最长匹配。所以,通过直接将指向叶节点L2(215A)的指针存储在节点S3(213)中,那么在上述的访问顺序中,在访问叶节点L2(215)之前,将不必访问I2(224)。
在一个实施例中,搜索节点S1(211)、S2(212)、S3(213)和S4(225)每一个在它们相应的父节点叶数组中都包含一个指向最佳匹配叶的parent_best_leaf_pointer(210,220,230和240)。示出了具有指向叶数组LA1(222)中叶节点L1(222A)的指针220的搜索节点S2(212),具有指向叶数组LA2(215)中叶节点L2(215A)的指针230的搜索节点S3(213),具有指向叶数组LA3(223)中叶节点L3(23B)的指针240的搜索节点S4(225)。在一个实施例中,一个零或空parent_best_leaf_pointer标识出在父节点中没有更新的、这样的最长匹配前缀。
在某些实施例中,使节点的大小最小化是非常重要的。在一个实施例中,通过释放搜索节点中的内部节点指针,以及通过将该内部节点设置为子数组中的第一个节点,从前面的树形位图实现(implementation)中提取搜索节点中的空间。然后,内部节点能够通过搜索节点中的子指针被访问,并且搜索节点的节点结构中被释放了的内部节点指针空间(来自前面的实现)被用来存储指向父节点叶数组中的最佳匹配叶节点的指针。参照例子,S3中的内部节点指针235(也就是,S3->I3),用链接S3->L2(230)替代,其中L2是级别2中对应S3(213)的最长匹配。
图2B图示了一种新的树形位图数据结构的一个实施例。如所示的,内部节点被设置为搜索节点的子数组中的第一个单元。因此子和内部节点使用同一指针被访问。例如,内部节点I1(261)是子数组260的第一个单元,内部节点I2(281)是子数组280的第一个单元。
更详细地说,搜索节点S1(250)包括一个指向子数组260的指针256,子数组260包括内部节点I1(261)和子单元265。内部节点I1(261)包括一个指向可以包括零或更多单元的叶数组LA1(270)的指针267,在这个例子中,叶数组LA1(270)包括单元叶节点L1(271),该节点是搜索节点S2(262)的最佳叶父节点结果。注意,子单元265包括搜索节点S2(262),其包括直接指向叶节点L1271的指针268。注意,为了便于读者理解,在子单元265和叶数组LA1(270)中使用了一串圆点,以表示在子单元265中更多可能的搜索节点和指向叶数组LA1(270)中条目的指针。搜索节点S2(262)还包括指向子数组280的指针266,该子数组280包括内部节点I2(281)和包括结束节点E3(282)的子单元285。内部节点I2(281)包括指向叶数组LA2(290)的指针277。结束节点E3(282)包括直接指向叶节点L2(291)的指针288,叶节点L2(291)是结束节点E3(282)的最佳叶父节点结果。
以概括术语描述一个实施例,只有当Sk不是一个特定查找的扩展前缀时,搜索节点Sk的内部节点Ik才被访问。如果Sk是扩展前缀,那么Ik永远不需要被访问。换句话说,在一个实施例中,永远没有Ik和Sk+1在同一个查找中都需要被访问的情况。因此,Ik和Sk+1一般可以都放在同一存储器模块中。在一个实施例中,如果”parent_has_match”标记被设置在下一个级别的搜索节点Sk+1中,内部节点地址Ik在查找中被记忆。在新的方案中,如果Sk+1中的”parent_best_leaf_pointer”是非零,它直接指向是最长匹配前缀的、在级别”k”的叶节点。在一个实施例中,上述节点结构改变能够应用于除内部节点和叶节点之外的所有树形位图节点。
图3A图示了在一个实施例中所使用的、在一个树形位图上执行查找的进程。进程从进程块300开始,并继续进行到进程块302,在那里搜索从在级别k=0的根节点开始。然后,在进程块304中,current_best_leaf被初始化为zero=0(例如,迄今没有匹配),parent_best_leaf_pointer被初始化为zero=0(例如,迄今没有匹配)。
接着,如进程块306中所确定的,如果当前节点是搜索节点Sk(例如,不是结束节点Ek),那么如进程块308中所确定的,如果Sk中的parent_best_leaf_pointer是非零,那么在进程块310中,current_best_leaf被设置为parent_best_leaf_pointer的值。
接着,在进程块312中,使用取决于步的来自查找关键字的接着的几个位,索引到Sk的”扩展位图”。如果如进程块314中所确定的,Sk是扩展前缀,那么在进程块316中,计算在子数组中的下一级别节点的地址(一般包括一个考虑内部节点Ik是子数组中的第一个节点的调节)。接着,在进程块318中,在级别k+1的节点被提取,并且进程返回到进程块306。
否则,Sk不是扩展前缀(如进程块314中所确定的),那么,在进程块320中,内部节点Ik被提取,其中Ik是Sk的子数组中的第一个单元。如果如进程块322中所确定的,通过分析内部位图在Ik中有最长匹配前缀,那么,在进程块324中,结果从级别k的叶节点被提取,并且如进程块338所提示的,进程结束。否则,在进程块326中,使用保存的current_best_leaf直接访问对应迄今的最长前缀的叶来提取结果,并且如进程块338所提示的,进程结束。
否则,在进程块306中,当前节点被确定为一个结束节点,并且进程继续进行到进程块330。如果,如进程块330中所确定的,如果Ek中的parent_best_leaI_pointer是非零的,那么在进程块332中current_best_leaf被设置为parent_best_leaf_pointer的值。
接着,如进程块334中所确定的,如果在Ek中有一个最长匹配前缀,那么在进程块336中,结果从在级别k的叶节点被提取,并且如进程块338所指示的,进程结束。否则,在进程块326中,使用保存的current_best_leaf直接访问对应迄今最长前缀的叶节点,结果被提取,并且如进程块338所提示的,进程结束。
图3B图示了一个实施例中使用的进程,以在一个叶节点被加入时,当向一个树形位图数据结构中插入前缀时更新parent_best_leaf_pointer。假设Pk是在级别k被插入的前缀。假设Sk是对应的搜索节点。假设Setk+1是Sk的子数组中从Pk派生的那些节点的集合。换句话说,Pk是Setk+1中的所有搜索节点的前缀。在一个实施例中,Setk+1是所有节点的集合,在这些节点中当Pk被插入时,需要设置”parent_has_match”标记。
在软件的一个实施例中,下面的附加变量连同”parent_best_leaf_pointer”一起被保存在每一个搜索节点中。注意,在一个实施例中,这些只在控制软件节点结构中需要,在硬件结构中不需要。Bestleaf_offset(Sk+1)基本上是用在它的叶数组中parent_best_leaf(Sk+1)所指叶的偏移量。”bestleaf_length”是用parent_best_leaf(Sk+1)指向的前缀的长度。
下面是对图3B中所图示的伪码中所使用的术语/函数/变量的定义。Children_array(Sk)是搜索节点Sk的子数组指针。Bestleaf_offset(Sk+1)是搜索节点Sk+1的纯软件”bestleaf_offset”变量的值。Parent_best_leaf(Sk+1)是在搜索节点Sk+1中新引进的”parent_best_leaf_pointer”的值。Bestleaf_length(Sk+1)是搜索节点Sk+1的纯软件”bestleaf_length”变量的值。当在一个已经存在的叶数组中插入一个新的前缀时,New_leaf_array_base(Pk)是在树形位图中位置的地址,并且整个叶数组连同被插入的前缀Pk被拷贝到该位置。
基本上,如图3B图示的伪码中所描述的,前缀的实际插入与在前的实现同样进行,加入了更新在下一级别搜索节点中的parent_best_leaf_pointer,而不是更新parent_has_match标记。对于处于一致的状态、所有parent_best_leaf_pointer都指向正确的叶的树形位图数据结构来说,图3B中图示的伪码示出了在一个前缀插入后,所有的parent_best_leaf_pointer是怎样又被变到一致状态的。
另外,当一个新的搜索节点Sk+1被插入到Sk的子数组中时(例如,当树的新支被创建作为前缀插入的结果时),parent_best_leaf(Sk+1)需要被确定。本质上,在Sk的叶数组Lk中、是对应Sk+1的最长前缀的叶节点的偏移量是通过分析Sk的内部节点Ik中的内部位图被确定的。
另外,当一个前缀被删除时,parent_best_leaf_pointer必须被更新。假设Pk是在级别k被删除的前缀。假设Sk是对应的搜索节点。假设Setk+1是Sk的子数组中那些节点的集合,对于这些节点来说Pk是最佳叶。图3C图示了在一个实施例中被用以更新在前缀被删除的搜索节点的子节点中的parent_best_leaf_pointer的进程。
图4图示了用来实现树形位图数据结构的系统400的一个实施例,该系统,例如但是不限于计算机或通信系统。在一个实施例中,系统400使用这样的一个树形位图数据结构来根据本发明确定最长前缀匹配。在一个实施例中,系统400使用树形位图数据结构通过接404编程另一个设备,例如遍历引擎500(图5)。
在一个实施例中,系统400包括处理器401、存储器402、存储设备403和可选接404,它们一般通过一个或多个通信机构409(为了说明目的示为总线)耦合。系统400的各种实施例可以包括或多或少的单元。系统400的操作一般被处理器401控制,通过使用存储器402和存储设备403以执行一个或多个排定的任务或进程。存储器402是一种计算机可读介质,并且一般包括随机存储器(RAM)、只读存储器(ROM)、闪存、集成电路、和/或其他存储组件。存储器402一般存储将要被处理器401执行的计算机可执行指令,和/或被处理器401操纵、用来实现本发明的功能的数据。存储设备403是另一种类型的计算机可读介质,并且一般包括固态的存储介质、磁盘驱动器、磁盘、网络服务、磁带驱动器和其他存储设备。存储设备403一般存储将要被处理器401执行的计算机可执行指令,和/或被处理器401操纵、用来实现本发明的功能的数据。
图5图示了用来遍历等级(hierarchal)数据结构的一个实施例的框图,该数据结构,包括,但是不限于树形位图或者其他树形数据结构。一个请求设备501,例如一个处理器或其他控制逻辑,产生被遍历引擎500接收的查找请求,并且将该请求存储在请求缓冲器512中。因为遍历引擎能够被用来同时在多个和甚至独立的树形位图和/或其他数据结构上执行搜索,所以维护处理器502用一个或多个树形位图和/或其他数据结构编程遍历引擎500。在一个实施例中,请求设备501和/或维护处理器与系统400(图4)通信。在一个实施例中,请求设备501和/或维护处理器502被包含在遍历引擎500中。
在一个实施例中,遍历引擎500包括请求缓冲器512,用来接收和缓冲搜索请求;一个存储器管理器520,用来控制对存储设备和控制器521-529、以及对SRAM和控制器530的读和写操作,结果被发到树形位图下一个地址逻辑514或输出队列535。输出队列535将搜索结果传送到请求设备501。树形位图下一个地址逻辑514处理从请求缓冲器512接收到的搜索请求和从存储设备和控制器521-529以及从SRAM和控制器530接收到的中间结果,并且可能确定下一个节点的存储器地址,并将存储器读请求发送给存储器管理器520。
被遍历引擎500接收或产生的搜索请求可以包括一个完整的或部分的串,基于该串找到最长匹配前缀或其他结果。例如,在一个实施例中,遍历引擎500包括基于一个查找串的第一个部分搜索、返回结果、然后基于结果和查找串的额外部分从它停止搜索的地方继续该搜索的能力。此外,在一个实施例中,遍历引擎500将继续在数据结构中搜索,直到接收到一个结果、用尽了搜索数据、或者遇到一个停止节点(在下面进一步描述)。
在一个实施例中所使用的搜索请求的格式在图6A中示出。初始搜索请求601包括一个指示初始(与继续的相对)搜索请求的搜索类型域和一个包括要匹配的信息的搜索数据域。被继续的搜索请求602,包括一个指示继续的搜索的搜索类型域,一个指示从哪里重新开始该搜索的开始地址域,一个包括该查找串额外部分的搜索数据域,一个迄今有效叶标记和指向迄今最佳叶的指针的域,其中这个标记指示指向迄今最佳叶的指针的域是否填充相应的指针(在搜索的前面部分被确定)。
图6A还图示了一个实施例所使用的搜索响应(search response)的格式。响应(继续的搜索(continuing search))结果603,包括一个搜索结果类型域、一个下一个节点地址域、一个迄今有效叶标记、一个指向迄今最佳叶的指针的域和所使用的搜索数据的长度。响应(叶访问)结果604包括一个搜索结果类型域和最后所得到的叶节点数据域。
维护处理器502(图5),通过提交请求到更新控制器539,能够装入并提取一个或多个树形位图或其他数据结构,该更新控制器539发送更新请求到存储器管理器520,并且能够接收来自存储设备和控制器521-529以及来自SRAM和控制530的信息。
图6B图示了一个实施例中所使用的节点或数据结构单元(element)的格式。搜索/结束/停止节点611包括一个节点类型域、一个指示当前节点中使用的步的大小的子数组集群(cluster)大小,这样数据结构能够使用可变长度的步和节点。搜索/结束/停止节点611还包括扩展位图、子(例如子数组)指针域、迄今最佳叶指针、内部节点存在标记和错误纠正码域。内部节点612包括节点类型域、叶数组指针域、迄今最佳叶指针域、内部位图域和错误纠正码域。叶节点613包括节点类型域、相关的返回数据域和错误纠正码域。跳转节点614包括节点类型域、被比较的数据域、被比较的长度域、迄今最佳叶域、子(例如子数组)指针域和错误纠正码域。
返回图5,搜索请求,例如,但是不限于在这里所描述的那些,被请求缓冲器512接收。如果节点的存储器地址基于接收到的搜索请求很容易被得到,那么请求被直接发送到存储器管理器520。否则,搜索请求被发送到树形位图下一个地址逻辑514,在那里存储器地址被计算。注意,该树形位图下一个地址逻辑514也接收存储器读结果并计算下一个节点的存储器地址,或者发送存储器读结果(例如,节点)到输出队列535。
图6C图示了一个实施例中所使用的、计算或确定下一个地址(例如,在数据结构中相关的下一个节点或者单元的地址)的进程。进程从进程块650开始,并且继续进行到进程块652,在那里提取查找串的下一部分的当前步长和子位图。注意,在一个实施例中,条目的步长在每一个条目间可以改变。而且,一个实施例支持子数组的可变大小,这个大小被子数组集群(cluster)大小识别。接着,在进程块654中,计数在条目的子位图中直到匹配查找串的位置的1的数量。这样,这个计数识别哪个单元是感兴趣的下一个。在进程块656中,基于子指针加上指针域宽度乘以该计数,计算下一个地址。然后,在进程块658中,包括所确定的下一个地址、要使用的存储体和存储信道的查找请求被发送到存储器管理器,并且如进程块659所指示的,进程结束。
由请求设备501(图5)和遍历引擎500的进程,在图7和图8A-D中通过流程图被进一步描述,现在我们就转到这些图。
图7图示了在一个实施例中由请求设备501(图5)使用的进程。进程从进程块700开始,并且继续进行到进程块702,在那里包或者其他信息被接收。接着,在进程块704中,存储器搜索请求,例如初始搜索请求601(图6A),被发送到遍历引擎500(图5)。接着,在进程块706中,结果从遍历引擎500被接收。如进程块708所确定的,如果搜索没有结束(例如,在搜索请求中有更多位需要提供给遍历引擎,例如对于图6A中被继续的搜索请求602),进程返回到进程块704以产生和传送搜索请求。否则,在进程块710中,基于所接收的结果处理包或其他信息。对于这个搜索,如进程块712所指示的,进程结束。
图8A-D图示了在一个实施例中所使用的、用以遍历树形位图或其他数据结构的进程。进程从进程块800开始,并且继续进行到进程块802,在那里初始或被继续的搜索请求被接收。接着,如进程块804所确定的,如果第一个存储器访问将要在SRAM和控制器530中被执行,那么SRAM查找地址在进程块806中被确定,并且在进程块808中该存储器访问(也就是,查找)请求被发送到SRAM控制器用来执行存储器访问。否则,或者经由连接器8A(111)继续,在进程块810中,基于能够服务该请求的对存储设备的某种分配方案,查找请求被转发给外部存储设备中的一个。在一个实施例中,一个或多个树形位图或其他数据结构中的每一个,在外部存储器中的每一个中被复制。在一个实施例中,某些树形位图或其他数据结构填充外部存储器的子集。
接着,在进程块812中,查找结果被接收。如果,如进程块814中所确定的,查找结果包括一个跳转节点,那么进程通过连接器8B(816)继续进行到图8B中的连接器8B(830)。否则,如果,如进程块818中所确定的,查找结果包括一个内部节点,那么进程通过连接器8C(820)继续进行到图8C中的连接器8C(850)。否则,如果如进程块822中所确定的,查找结果包括一个叶节点,那么在进程块824中,查找的返回值在进程块824中被发送,并且如进程块826中所指出的,进程结束。否则,进程通过连接器8D(828)继续进行到图8D中的连接器8D(870)。
转到图8B,进程通过连接器8B(830)或8E(840)继续。从连接器8B(830)开始,如进程块832中所确定的,如果有一个对应于当前节点的最佳叶,那么在进程块834中这个最佳叶被作为在搜索中发现的迄今当前最佳叶存储。接着,如进程块836中所确定的,跳转节点中提供的跳转位匹配查找串的紧接着的数据位,那么,在进程块838中,跳转节点中指定的地址被用作下一个地址值,并且进程通过连接器8A(839)返回到图8A中的连接器8A(811)。跳转节点允许搜索数据串与可能对应一个或多个TRIE的程序串做比较,因此,可以被用以节省存储器访问和查找时间。当在查找串中有不改变的长串时,例如在IPv6查找中,这个跳转节点特征尤其有用。
否则,或者从连接器8E(840)继续,如果在进程块842中最佳匹配已经被确定,那么这个最佳匹配值被用作下一个地址,进程通过连接器8A(847)继续进行到图8A中的连接器8A(811)。否则,最佳匹配结果没有被定位,并且在进程块844中没有匹配结果被发送,那么如在进程块845中所指示的,这个搜索的进程结束。
转到图8C,从连接器8C(850)开始,如进程块852中所确定的,如果有一个对应于当前节点的最佳叶,那么在进程块854中这个最佳叶被作为搜索中发现的迄今当前最佳叶存储。接着,如进程块856中所确定的,如果偏移量位标记在树形位图中被设置(也就是说,树形位图将要被分析),那么,在进程块858中,叶节点的地址被计算,并且进程通过连接器8A(859)继续进行到图8A中的连接器8A(811)。否则,进程通过连接器8E(857)继续进行到图8B中的连接器8E(840)。
转到图8D,从连接器8D(870)开始,如进程块872中所确定的,如果有一个对应于当前节点的最佳叶,那么在进程块873中这个最佳叶被作为搜索中发现的迄今当前最佳叶存储。接着,如进程块874中所确定的,如果在外部位图中相应位没有被设置(例如,没有这个查找的外部查找),那么进程继续进行到进程块876。如果子节点不是内部节点,那么如在进程块880中所确定的,如果有查找串的匹配,那么在进程块881中下一个地址被设置给最佳地址,并且进程通过连接器8A(883)继续进行到图8A中的8A(811)。否则,在进程块882中,不匹配结果在进程块882中被发送,如在进程块883中所指示的,进程结束。否则,如果在进程块876中一个内部节点被确定,那么在进程块878中,下一个地址被设置为子指针的值,并且进程通过连接器8A(879)继续进行到图8A中的连接器8A(811)。
否则,子节点的下一个地址在进程块884中被计算。如在进程块886中所确定的,如果当前节点是一个结束节点(例如,指示一个停止遍历标识(indication)),那么在进程块888中搜索状态被返回或发送,并且如在进程块889中所指示的,进程结束。否则,进程通过连接器8A(887)继续进行到图8A中的连接器8A(811)。
考虑到我们的发明的原理可以被应用到很多可能的实施例中,在这里参照图/图形所描述的实施例及其方面只是图示性的而不应该作为对本发明的范围的限制。对于例子和对本领域的技术人员将显然的,许多进程块操作能够被重新排序,在其他操作之前、之后或者实质上与其他操作同时地被执行。同样,数据结构的许多不同的形式能够被用于多种实施例中。这里所描述的本发明,考虑了所有可以落在下面的权利要求和其等价物的范围内的这样的实施例。
权利要求
1.一种计算机可读介质,在其上存储有数据结构,数据结构包括第一搜索节点;第一子数组,包括第一内部节点和第二搜索节点;和第一叶数组,包括多个第一叶数组条目;其中,第一搜索节点,包括一个指向第一子数组的指针;其中,第一内部节点,包括一个指向第一叶数组的指针;并且其中,第二搜索节点,包括一个指向多个第一叶数组条目中的一个的指针。
2.权利要求1中的计算机可读介质,其中,第一内部节点是第一子数组的第一个单元。
3.权利要求1中的计算机可读介质,其中,第一内部节点的指针和第二搜索节点的指针指示不同的所述第一叶数组条目。
4.权利要求1中的计算机可读介质,包括第二子数组;并且其中,第二搜索节点包括一个指向第二子数组的指针。
5.权利要求4中的计算机可读介质,包括第二叶数组,该数组包括多个第二叶数组条目;并且其中,第二子数组包括第二内部节点,该第二内部节点包括一个指向第二叶数组的指针。
6.权利要求5中的计算机可读介质,其中,第二内部节点是第二子数组的第一单元。
7.权利要求6中的计算机可读介质,其中,第二子数组包括第三搜索或结束节点,其中,所述第三搜索或结束节点包括一个指向多个第二叶数组条目中的一个的指针。
8.权利要求7中的计算机可读介质,其中,第二内部节点的指针和第三搜索或结束节点的指针,指示不同的所述第二叶数组条目。
9.权利要求1中的计算机可读介质,其中,第一搜索节点代表第一长度的步,第二搜索节点代表第二长度的步,其中,第一长度和第二长度是不同的。
10.权利要求9中的计算机可读介质,其中,第一搜索节点包括第一长度的第一指示符,第二搜索节点包括第二长度的第二指示符。
11.一种使用树形数据结构执行的方法,该数据结构代表多个前缀,前缀被区分为大于一的多个树级别的多个步,多个步中的每一步用树形位图表示,子路径的标识用扩展位图表示,该方法包括(a)提取树形数据结构中当前级别的一个搜索节点;(b)响应于确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符;(c)索引到当前级别扩展位图,以确定匹配的下一级别节点是否存在;(d)响应于所述确定匹配的下一级别节点存在,重复步骤(a)、(b)和(c),使得当前级别是基于所述索引到当前级别扩展位图而识别的下一级别,以确定用搜索节点指示的内部节点中的偏移量;和(e)响应所述确定匹配的下一级别节点不存在,执行步骤包括提取一个用当前级别搜索节点指示的内部节点;和基于当前最佳匹配标识符、或者基于在当前级别搜索节点中到叶节点的指针识别搜索结果。
12.权利要求11中的方法,包括响应于确定搜索节点不存在于当前级别,索引到一个结束节点以识别搜索结果。
13.权利要求12中的方法,包括基于结果节点中的指针,更新当前最佳匹配识别符。
14.一种装置,用于基于一个树形数据结构来确定搜索结果,该树形数据结构代表多个前缀,多个前缀被区分为大于一的多个树级别的多个步,多个步中的每一步用树形位图表示,子路径的标识用扩展位图表示,该装置包括用来提取在树形数据结构中当前级别的搜索节点的装置;用来响应于确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符的装置;用来索引到当前级别扩展位图,以确定匹配的下一级别节点是否存在的装置;用来索引到当前级别扩展位图,以确定用搜索节点指示的内部节点中的偏移量的装置;用来提取用当前级别搜索节点指示的内部节点的装置;和用来基于当前最佳匹配标识符、或者基于当前级别搜索节点中指向叶节点的指针来识别搜索结果的装置。
15.权利要求14中的装置,包括用来索引到一个结束节点以识别搜索结果的装置。
16.权利要求15中的装置,包括用来基于结束节点中的指针更新当前最佳匹配识别符的装置。
17.一种计算机可读介质,包含用来执行步骤的计算机可执行指令,执行步骤是通过使用一个树形数据结构,该数据结构代表多个前缀,多个前缀被区分为大于一的多个树级别的多个步,多个步中的每一步用树形位图表示,子路径的标识用扩展位图表示,所述步骤包括(a)提取树形数据结构中当前级别的一个搜索节点;(b)响应于确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符;(c)索引到当前级别扩展位图,以确定匹配的下一级别节点是否存在;(d)响应于所述确定匹配的下一级别节点存在,重复步骤(a)、(b)和(c),使得当前级别是基于所述索引到当前级别扩展位图而识别的下一级别,以确定用搜索节点指示的内部节点中的偏移量;和(e)响应所述确定匹配的下一级别节点不存在,执行步骤包括提取用当前级别搜索节点指示的内部节点;和基于当前最佳匹配标识符、或者基于在当前级别搜索节点中到叶节点的指针识别搜索结果。
18.权利要求17中的计算机可读介质,具有用来执行步骤的计算机可执行指令,步骤包括响应于确定搜索节点不存在于当前级别,索引到一个结束节点以识别搜索结果。
19.权利要求18中的计算机可读介质,具有用来执行步骤的计算机可执行指令,步骤包括基于结束节点中的指针更新当前最佳匹配识别符。
20.一种基于一个输入搜索数据串、用来遍历存储在一个或多个计算机可读介质中的树形数据结构的方法,该方法包括对输入搜索数据串的多个部分中的每一部分都执行一套步骤,这套步骤包括(a)接收一个部分完成的树遍历的搜索进程上下文,搜索进程上下文包括下一个节点地址;(b)重新开始所述对树形数据结构的遍历,包括重复执行步骤(i)到(iv),用来遍历对应输入串的多个部分中的下一个的树形数据结构(i)将包括下一个节点地址的查找请求分送到多个存储设备中的一个;(ii)从所述多个存储设备中的一个中接收查找结果,查找结果包括一个搜索节点;(iii)响应确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符;(iv)索引到搜索节点的当前级别扩展位图,以确定一个匹配的下一级别节点是否存在;(v)产生下一个节点地址的新值;和(c)产生搜索进程上下文的新值。
21.权利要求20中的方法,其中,搜索进程上下文包括一个最佳匹配标识,和所使用的输入搜索数据串的长度。
22.权利要求21中的方法,其中,最佳匹配标识包括一个匹配标记和一个叶指针。
23.权利要求20中的方法,其中,一个或多个计算机可读介质包括多个不同的树形数据结构;并且其中,对多个输入搜索数据串中的每一个都执行步骤(a)、(b)和(c),该多个输入搜索数据串中的每一个对应多个不同树形数据结构中的每一个。
24.一种计算机可读介质,包含用于执行一种方法的计算机可执行指令,该方法用来基于一个输入搜索数据串、遍历一个树形数据结构,该方法包括对输入搜索数据串的多个部分中的每一个执行一套步骤,这套步骤包括(a)接收一个部分完成的树遍历的搜索进程上下文,搜索进程上下文包括下一个节点地址;(b)重新开始所述对树形数据结构的遍历,包括对应下一个输入串的多个部分,重复执行用来遍历树形数据结构的步骤(i)到(iv)(i)将包括下一个节点地址的查找请求分送到多个存储设备中的一个;(ii)从所述多个存储设备中的一个中接收查找结果,查找结果包括一个搜索节点;(iii)响应确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符;(iv)索引到搜索节点的当前级别扩展位图,以确定一个匹配的下一级别节点是否存在;(v)产生下一个节点地址的新值;和(c)产生搜索进程上下文的新值。
25.权利要求24中的计算机可读介质,其中,搜索进程上下文包括一个最佳匹配提示,和所使用的输入搜索数据串的长度。
26.权利要求25中的计算机可读介质,其中,最佳匹配提示包括一个匹配标记和一个叶指针。
27.权利要求24中的计算机可读介质,其中,对多个输入搜索数据串中的每一个都执行步骤(a)、(b)和(c),该多个输入搜索数据串中的每一个对应多个不同树形数据结构中的每一个。
28.一种基于输入搜索数据串,用来遍历一个或多个树形数据结构的节点的装置,该装置包括树形位图下一个地址机构,该机构用来确定所述的一个或多个树形数据结构中特定的一个树形数据结构的下一个节点的存储器地址,下一个节点对应于输入数据串的一部分;多个存储设备,用来存储所述的一个或多个树形数据结构,以及用来响应于提取请求、返回所述下一个节点;和存储器管理器,被耦合到树形位图下一个地址机构和多个存储设备,用来将提取请求分送给多个存储设备中的一个;其中,所述的一个或多个树形数据结构中的每一个,都包括第一搜索节点;第一子数组,包括第一内部节点和第二搜索节点;和第一时数组,包括多个第一叶数组条目;其中,第一搜索节点包括一个指向第一子数组的指针;其中,第一内部节点包括一个指向第一叶数组的指针;并且其中,第二搜索节点包括一个指向多个第一叶数组条目中的一个的指针。
29.权利要求28中的装置,其中,所述的一个或多个树形数据结构包括至少两个不同的树的节点。
30.权利要求28中的装置,其中,树形位图下一个地址还确定多个存储设备中的所述一个,并且为存储器管理器提供多个存储设备中的所述一个的标识。
31.权利要求30中的装置,其中,下一个节点包括多个存储设备中特定的一个的标识,其中,存储器管理器将提取请求分送给多个存储设备中特定的一个。
32.权利要求28中的装置,其中,多个存储设备包括第一类型的第一存储设备和第二类型的第二存储设备,其中,第一类型和第二类型是不同的。
33.权利要求32中的装置,其中,第一存储器类型为树形数据结构的每一个存储第一级别的节点。
34.一种基于输入搜索数据串,用来遍历存储在一个或多个计算机可读介质中的一个树形数据结构的装置,该装置包括用来接收一个部分完成的树遍历的搜索进程上下文的装置,该搜索进程上下文包括下一个节点地址;和用来重新开始对树形数据结构的所述遍历的装置;用来将包括下一个节点地址的查找请求分送给多个存储设备中的一个的装置;用来从多个存储设备中的所述一个中接收查找结果的装置,该查找结果包括一个搜索节点;用来响应确定一个新的最佳匹配是否存在,更新当前最佳匹配标识符的装置;用来索引到搜索节点的当前级别扩展位图,以确定一个匹配的下一级别节点是否存在的装置;用来产生下一个节点地址的新值的装置;和用来产生搜索进程上下文的新值的装置。
35.权利要求34中的装置,其中,搜索进程上下文包括一个最佳匹配标识,和所使用的输入搜索数据串的长度。
36.权利要求35中的装置,其中,最佳匹配标识包括一个匹配标记和一个叶指针。
全文摘要
公开了用来在例如路由器、包交换系统中,在确定最长前缀匹配时,产生和使用一种改进的树形位图数据结构的方法和装置。一个实现组织树形位图,以最小化在一个查找操作过程中必须被访问的内部节点的数量。在TRIE或搜索节点的每一个中都包含有一个指向叶或结果数组中迄今最佳匹配条目的指针,这允许对这个结果的直接访问而不用必须分析相应的内部节点。而且,一个实现将特定级别的内部节点存储为在它的子数组中的第一个单元。此外,一个实现使用能够同时遍历多个树形位图或其他数据结构的通用搜索引擎,并且执行完全搜索、部分搜索和例如在接收到要搜索的额外数据后重新开始部分搜索。
文档编号G06F17/30GK1462004SQ0312292
公开日2003年12月17日 申请日期2003年4月24日 优先权日2002年5月31日
发明者维贾伊·兰加拉詹, 达利特·沙吉, 威廉·N·伊瑟顿 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1