专利名称:分配存储器的方法和设备的利记博彩app
技术领域:
本发明一般涉及网络处理器,特别是涉及为网络处理器分配存储器的方法和设备。
背景技术:
诸如网络处理器之类的硬件可以连接存储器,接收数据集并且将该数据集存储到存储器中。可以利用变尺寸的组表目(group entry)(例如,组合在一起的存储器的一个或多个表目)把数据集的诸多部分存储到存储器中。为了建立变尺寸的组表目,存储器可以分成一个或多个区域,其每个区域在接收任何数据之前被分配一个尺寸。分配给存储器区域的尺寸基于由硬件预期接收的数据集的尺寸。
如果预期接收的数据实际上被硬件接收,则基于预期接收的数据,将分配给存储器每个区域的尺寸也许是足够的。但是,如果硬件接收一组不同数据,则其中的数据集的部分必须存储在不同于预期数据集的尺寸的组表目中,这种预分配给存储器区域的尺寸可能导致存储器的效率低下的分配。
例如,基于由硬件预期接收的数据集,存储器的一个区域被预分配尺寸四,存储器的剩余区域可以被预分配为十六的尺寸。因此,存储器的一个区域包括尺寸为四的组表目(例如,每个组表目包括被组合在一起的四个单存储器表目)以及存储器的剩余区域包括尺寸为十六的组表目(每个组表目包括被组合在一起的十六个单存储器表目)。如果预期的数据集被硬件接收,则数据集的大多数部分可以被存储在十六表目的组表目中。但是,如果硬件接收不同于预期数据集的一组数据,该数据集的所有部分可以被存储在四表目(four-entry)的组表目中,则存储器的组表目也许被效率低下地分配。由于存储器仅仅包括四表目的组表目的一个区域,一旦四表目的组表目被用来存储数据集的多个部分,则十六表目的组表目必须用来存储数据集的剩余的部分。因此,用来存储数据集的十六表目的组表目中的每个的一部分将未被使用,因而存储器被效率低下的分配。
所以,为网络处理器分配存储器的方法和设备是人们期望的。
发明内容
在本发明的第一方面,提供了第一方法。第一方法包括以下步骤(1)接收数据集;(2)确定由数据集一部分所需的尺寸的自由组表目是否存在于存储器的多个区域之一中;(3)如果数据集的该部分所需的尺寸的自由组表目不存在于存储器多个区域之一中,则确定存储器是否包括未分配尺寸的一个或多个区域;(4)如果存储器包括未分配尺寸的一个或多个区域,则把未分配尺寸的存储器区域之一分配给数据集的该部分所需的尺寸,从而建立动态分配尺寸的存储区域,动态分配尺寸的存储器区域包括数据集的该部分所需的尺寸的一个或多个组表目。
在本发明的第二方面中,设有第一设备,包括一个存储器、多个寄存器和连接存储器和多个寄存器的动态分配逻辑。动态分配逻辑适于(1)接收数据集;(2)确定数据集的该部分所需的尺寸的自由组表目是否存在于多个存储器区域之一中;(3)如果数据集的该部分所需的尺寸的自由组选项不存在于存储器的多个区域之一中,则确定存储器是否包含未分配尺寸的一个或多个区域;(4)如果存储器包括未分配尺寸的一个或多个区域,则把未分配尺寸的存储器区域之一分配给数据集的该部分所需的尺寸,从而创建动态分配尺寸的存储器区域。本发明还提供了许多其它方面。
从以下的详细说明、所附的权利要求和附图,可以使本发明的其它特征和方面更加清楚。
图1是本发明的为网络处理器动态分配存储器的示例硬件的方框图;图2是本发明的包含在存储器的一区域中的节点分配表寄存器的方框图;图3显示了根据网络处理器接收的数据从存储器动态分配尺寸的组表目的新方法。
图4显示了当收到修改的数据集时动态分配存储器的新方法。
具体实施例方式
诸如网络处理器之类的硬件可以连接到存储硬件接收的数据集的存储器。该存储器可以被分成多个区域(section),在硬件中接收任何数据之前,根据预期被硬件接收的数据集,为每个区域分配一个尺寸。由于上述原因,这种对存储器区域的尺寸的预分配可能导致对不同于预期数据集的数据集的存储器效率低下的分配。本发明的方法和设备允许按数据集的需要从存储器中动态分配变尺寸的表目。
图1是本发明的为网络处理器动态分配存储器的硬件的方框图。为网络处理器动态分配存储器的硬件100可以包括网络处理器102,该网络处理器102可以包括连接到存储器106(比如SRAM或类似物)的逻辑104(比如,专用集成电路(ASIC))。也可以使用其它存储器106(例如,DRAM等)。存储器106可以被分成多个区域110-114。每个区域110-114可以包括寄存器(例如,节点分配表寄存器(NAT))116-120,用于存储说明存储器区域110-114的结构的控制结构。在一个实施例中,包括4096个表目的存储器106被分成64个区域110-114,其每个包括64个表目。存储器106可以包括更多或更少的表目,并且可以被分成更多或更少的区域。ASIC 104可以包括动态分配逻辑108,它根据硬件100接收的数据集的一部分,从存储器106的一个或多个区域110-114中分配变尺寸的表目,并且更新对应于分配表目的区域110-114的NAT 116-120。动态分配逻辑108可以根据硬件100所接收的已修改数据集的一部分,对存储器106的一个或多个区域110-114解除预先分配的表目的分配,并且更新对应于解除表目分配的区域110-114的NAT116-120。
下面参照图2说明NAT 116-120的结构,其中图2是包含在本发明的存储器102的区域110-114中的NAT 116-120的方框图。如图所示,NAT 116-120存储说明区域110-114结构的控制结构,区域110-114包括多个单表目。在一个实施例中,可以使用存储器106的32位字中的21个位存储NAT 116-120。可以使用更大或更小的字存储NAT 116-120。NAT 116-120可以包括一个节点尺寸字段202,用于指示被分配给存储器106的区域110-114的尺寸。被分配给区域110-114的尺寸可以指示区域110-114的单表目的数量,区域110-114将被组合在一起,以形成存储数据集的一部分的表目(例如,组表目或者节点)。NTA 116-120的两个位可以用来在节点尺寸字段202中存储一个值。所以,节点尺寸字段值可以用来把四个尺寸之一分配给区域110-114。例如,存储器106的区域110-114可以被分配为一、四、十六或者六十四的尺寸。因此,区域110-114的表目可以被组合在一起,以根据分配给区域110-114的尺寸并利用节点尺寸字段形成组表目,每个组表目包括一、四、十六或者六十四表目。更多或更少位可以被用来在节点尺寸字段202中存储一个值。
NAT 116-120可以包括自由空间计数字段204,用来指示区域110-114中的自由组表目或者节点的数目。自由组表目或者节点是可用于存储数据集的一部分的组表目或节点。NAT 116-120可以包括头部指针字段206和尾部指针字段208,用于存储说明自由组表目或者节点的队列的结构。更具体地说,头部指针字段206可以存储区域110-114的自由组表目或者节点的队列中的第一自由组表目或者节点的指针。同样,尾部指针字段208可以存储区域110-114的自由组表目或者节点的队列中的最后自由组表目或者节点的指针。除了队列中最后组表目或者节点外,队列中的每个自由组表目或者节点都可以包括队列中下一个自由组表目或者节点的指针。队列中最后组表目或者节点中的指针的值可以被设置为空值。
收到数据集时分配表目下面参照图1、图2和图3说明动态分配用于网络处理器的存储器的硬件100的操作,其中图3图示说明了根据由网络处理器接收的数据,从存储器中动态分配一个尺寸的组表目的新方法。参见图3,方法300开始于步骤302。在步骤304,可以接收一组数据。例如,硬件100可以接收将要存储在存储器106的表(例如,路由表)中的数据,比如硬件100具有通信路由(例如,路由信息)的互联网协议(IP)或者媒体访问控制(MAC)地址。数据集(例如,IP和/或MAC地址)可以被存储在存储器106中,由此创建唯一标识每个IP和/或MAC地址的树结构。树结构的不同节点可以用来存储每个地址的一部分。如果数据集包括具有相同部分的地址,则对应于该地址部分的树结构的节点将不需要像数据集中许多地址的同一部分不相同时所需的节点那样大(例如,将不需要许多表目),以用来唯一标识数据集中每个地址。可以使用一种算法确定存储树结构的每个节点所需的存储器表目(例如组表目)的尺寸,以便利用树结构可以唯一地标识由硬件100接收的数据集中的每个地址。
在步骤306中,确定数据集的一部分所需的尺寸(例如,初始尺寸)的自由组表目是否存在于存储器的多个区域之一中。动态分配逻辑108可以访问存储器106的一个或多个NAT 116-120(例如,先前分配一个尺寸的NAT),以作出上述确定。动态分配逻辑108可以并行访问NAT 116-120。更具体地说,动态分配逻辑108可以访问NAT 116-120中的一个或多个的节点尺寸字段202,以确定对应于NAT 116-120的存储器106的区域110-114是否被分配给数据集的一部分所需的尺寸,因此动态分配表108包括所需尺寸的组表目。如上所述,一种算法可以被用来确定存储数据集的一个或多个部分所需的组表目尺寸,由此可以唯一地标识由硬件100接收的数据集的该部分。
如果动态分配逻辑108访问NAT 116-120并且确定NAT 116-120被分配给所需的尺寸(例如,分配区域110-114的尺寸匹配数据所需的尺寸),则动态分配逻辑108可以访问NAT 116-120的自由空间计数字段204,以确定对应于NAT 116-120的区域110-114是否包含自由组表目。在一个实施例中,如果存储在NAT 116-120的自由空间计数小于六十四并且不为零,则自由组表目存在于对应于NAT 116-120的存储器106的区域110-114中。在步骤306中,如果确定数据集的该部分所需的自由组表目存在于存储器的多个区域之一中,则执行步骤308。在步骤308中,可以从该区域中分配存储数据的数据集的该部分所需的尺寸的初始组表目。动态分配逻辑108可以访问对应于区域110-114的NAT 116-120的头部指针字段206,以确定可用于存储包含在区域110-114的数据的组表目的队列中的第一组表目(例如,未被使用的或者自由的)。动态分配逻辑108可以从队列中分配第一组表目来存储数据集的该部分。
作为选择,如果自由空间计数为零,则区域110-114不包括任何自由组表目。如果分配给数据集的该部分所需的尺寸的区域110-114不包括自由组表目,则动态分配逻辑108确定数据集的该部分所需的尺寸的自由组表目不存在于存储器106的多个区域110-114中,并执行步骤310。
在步骤310中,确定存储器是否包含未分配尺寸的一个或多个区域。动态分配逻辑108可以访问存储器106中的一个或多个NAT 116-120,以作出上述决定,并且可以并行访问NAT 116-120。更具体地说,动态分配逻辑108可以访问一个或多个NAT 116-120的自由空间计数字段204,以确定未分配的尺寸位(size-bit)是否被设置,该尺寸位指示对应于NAT 116-120的区域110-114是未分配尺寸的区域。在一个实施例中,自由空间计数字段204的最高有效位(MSB)是未分配尺寸位。当未分配尺寸位(例如,处于高逻辑状态)被设置时,区域110-114是未分配尺寸的区域,并且存储于节点尺寸字段202中的值无效。反之,当未分配尺寸位未被设置(例如,处于低逻辑状态)时,区域110-114被分配给由节点尺寸字段202指示的尺寸。尽管在上述实施例中,自由空间计数字段204包括未分配尺寸位,但是在其它实施例中,NAT 116-120的其它字段可以包括未分配尺寸位。
如果存储器包括未分配尺寸的一个或多个区域,则执行步骤312。在步骤312中,未分配尺寸的一个区域可以被分配给数据集的一部分所需的尺寸,由此创建动态分配尺寸的区域,它包括数据集的该部分所需尺寸的一个或多个组表目。动态分配逻辑108可以访问和更新与未分配尺寸的区域110-114对应的NAT 116-120的节点尺寸字段202,使区域110-114被分配给数据集的该部分所需的尺寸。所以,区域110-114的表目将被组合在一起,形成组表目,其每个组表目包括由分配给区域110-114的尺寸指示的多个表目。
如上所述,在一个实施例中,节点尺寸字段202可以存储两个位。因此,每个区域110-114可以被分配四个可能尺寸中的一个,并且区域110-114的组表目可以包括由节点尺寸字段指示的多个表目(例如,单表目、四表目、十六表目或者六十四表目的表目组)。例如,如果区域110-114被分配尺寸为四,则区域110-114的表目可以被分组为每个包括四表目的多个组表目。为了建立一连串的四表目的组表目,当尺寸被分配给区域110-114时,可以更新区域110-114的每第四表目,使其包括指向区域110-114中下一个表目的指针。作为选择,需要时可以更新区域110-114的一个或多个表目,使其包括指向区域110-114中下一个表目的指针。例如,当区域110-114被分配给尺寸为四时,可以更新存储器106的区域110-114的第四表目(例如,第一组表目的最后表目),使其包括指向第五存储器表目(例如,第二组表目的第一表目)的指针。当分配第一组表目时,可以更新存储器106的区域110-114的第八存储器表目(例如,第二组表目的最后表目),使其包括指向区域110-114的第九存储器表目(例如,第三组表目的第一表目)的指针,由此最小化区域110-114被分配尺寸时建立的指针数量。
通过利用步骤304、306、310和312,未分配尺寸的存储器的未分配区域可以被动态分配一个尺寸。由于分配给区域110-114的尺寸是基于由硬件100接收的数据集的一部分的,因此对存储器106的一个或多个区域110-114动态分配尺寸是高效率的。此后执行步骤308。
在步骤308,可以从区域分配用于存储数据的数据集的该部分所需的尺寸的初始组表目。在此情况下,区域是动态分配尺寸的区域。动态分配逻辑108可以访问对应于区域110-114的NAT 116-120的头部指针字段206,以确定可用于存储被包含在区域110-114中的数据(例如,未使用的或者自由的)的组表目队列中的第一组表目。动态分配逻辑108可以从存储数据集的该部分的队列中分配第一组表目。照这样,可以根据数据集的该部分所需的尺寸,动态地为存储数据集的该部分分配的组表目确定尺寸,以使得使用可以由硬件100建立并且是存储部分数据所需的最小尺寸组表目。因此,基于数据集的该部分动态确定主表目尺寸,将使用来存储数据的组表目中未用表目的总数最小。
一旦动态分配逻辑108从动态分配尺寸的区域110-114中分配数据集的该部分所需的尺寸的初始组表目,动态分配逻辑108就可以访问和更新对应于动态分配尺寸的区域110-114的NAT 116-120,以反映该组表目的分配。更具体地说,头部指针字段206将被更新为包括指向队列中新的第一组表目的指针。例如,在分配之前,被分配的组表目包括指向队列中下一个组表目的下一个组表目指针。在分配之后,头部指针字段206可以被更新为包括来自被分配的组表目的下一个组表目指针。由于当分配组表目来存储数据集的该部分时,该组表目从可用于组表目的队列中删除,因此减少了队列中的表目(例如,组表目)的数量。因此,动态分配逻辑108可以把自由空间计数字段204中存储的值递减1,以反映队列的变化。尽管在上述实施例中自由空间计数字段包括自由组表目的数量,但是在其它实施例中,自由空间计数字段包括自由存储器表目的数量。因此,当分配组表目时,动态分配逻辑108可以把自由空间计数字段204中存储的值递减适当数目(例如,每个组表目中的存储器表目的数目)。
作为选择,如果在步骤310中确定存储器不包括未分配尺寸的一个或多个区域,则可以执行步骤314。在步骤314中,确定数据集的该部分所需的自由组表目的尺寸是否等于可以被分配给一个区域(进而被分配给一个组表目)的最大尺寸。如果是则执行步骤316。例如,如果一个区域以及由此而包含在该区域中的组表目可以被分配的最大尺寸是六十四,并且数据集的该部分需要六十四表目的组表目存储部分数据,则执行步骤316。
在步骤316,硬件可能输出错误状态。由于可以在部分数据所需的尺寸(例如,最大尺寸)的自由组表目不存在以及未分配尺寸的区域不存在的在前步骤(例如步骤310)中确定错误状态,因此不能建立数据所需尺寸的组表目。因而,数据集的该部分不被写入存储器中,以及硬件100可以输出错误状态,该错误状态指示硬件100不能分配存储器106来存储数据集的该部分。此后执行步骤322。
作为选择,如果数据集的该部分所需的自由组表目的尺寸不等于可以被分配给一个区域(进而是一个组表目)的最大尺寸,则执行步骤318。在步骤318中,数据集的该部分所需的尺寸被增加到大于在前所需尺寸的下一个尺寸。例如,所需尺寸可以从四表目的组表目增加到十六表目的组表目。此后,执行步骤320。
在步骤320中,确定尺寸大于(例如已增加的所需尺寸)数据集的该部分所需的尺寸的自由组表目是否存在于被分配给尺寸大于数据集的该部分所需尺寸的区域中。在区域110-114被分配给更大可用尺寸之前,先检查分配给最小可用尺寸的一个或多个区域110-114,该最小可用尺寸大于数据集的该部分所需的尺寸。类似于步骤306,动态分配逻辑108可以例如并行访问一个或多个NAT 116-120(例如,先前分配一个尺寸的NAT),用于作出上述决定。动态分配逻辑108可以访问一个或多个NAT 116-120的节点尺寸字段202,以确定对应于NAT 116-120的区域110-114是否被分配给大于待存储的数据集的该部分所需的尺寸的最小可用尺寸(例如增加的所需尺寸)。例如,(1)如果数据集的该部分需要用于存储数据集的该部分的尺寸为四的区域(例如,四表目的组表目);(2)如果自由组表目未存在于分配给尺寸为四的存储器的区域中;(3)如果存储器的区域不是未分配尺寸的区域;(4)如果包含在硬件100中的为网络处理器动态分配存储器的存储器106的区域110-114可以被分配一、四、十六或者六十四之一的尺寸,以及由此在区域110-114中分别包括被组合在一起的一、四、十六或六十四表目的多个组表目(例如,数据集的该部分所需的组表目的尺寸不等于可以建立的组表目的最大尺寸),则动态分配逻辑108将访问一个或多个NAT(例如,事先分配一个尺寸的NAT)的节点尺寸字段202,以确定对应于NAT 116-120的部分110-114是否被分配尺寸为十六(例如,包括十六表目的组表目)。如果这样的区域不存在,则执行上述的步骤314。
如果动态分配逻辑108确定存储器106的区域110-114被分配给大于数据集的该部分所需的尺寸的下一个尺寸(例如,最小可用的),则动态分配逻辑108可以确定区域110-114是否包括自由组表目。如上所述,动态分配逻辑108可以访问与区域110-114对应的NAT 116-120的自由空间计数字段204,以作出上述确定。如果动态分配逻辑108确定区域110-114不包括用于存储数据集的该部分的自由组表目,则执行步骤314。
在步骤314中,确定所需的尺寸(例如,已增加的所需尺寸)是否等于可以建立的最大组表目尺寸。如果在步骤314中确定已增加的所需尺寸不等于可以建立的组表目的最大尺寸,则再次执行步骤318和320。照此方式,动态分配逻辑108可以确定存储器106的任何其它区域110-114(被分配给大于数据集的该部分所需尺寸的最小可用尺寸)是否包括自由组表目。如果确定存储器106的区域110-114(被分配给大于数据集的该部分所需尺寸的最小可用尺寸)不包括自由组表目,则动态分配逻辑108可以以相同方式确定分配给下一个(例如,最小可用的)更大尺寸的存储器106区域110-114是否包括自由组表目。同样,动态分配逻辑108可以为下一个(例如,最小可用的)更大尺寸的存储器106区域110-114重复该处理,直至发现包含自由组表目的区域110-114,或者输出一个错误状态。
如果大于数据所需尺寸(例如,先前需要的尺寸)的尺寸(例如,已增加的所需尺寸)的自由组表目存在,则执行步骤308。在步骤308中,来自存储器区域的初始组表目被分配来存储数据。更具体地说,尺寸大于数据集的该部分所需尺寸的初始组表目被分配来存储来自被分配给这样一个尺寸的区域110-114的数据,所述尺寸大于数据集的该部分所需的尺寸。如上所述,动态分配逻辑108可以访问对应于区域110-114的NAT 116-120的头部指针字段206,以确定可用于存储来自区域110-114的数据的组表目队列中的第一组表目,此后,从队列中分配第一组表目,用于存储数据集的该部分。由于组表目来自所分配的尺寸大于数据集的该部分所需尺寸的区域110-114,因此,组表目包括比用于存储数据集的该部分所需的表目更多的表目。因此,在存储数据集的该部分的时候,组表目的某些表目未被使用。然而,由于动态分配逻辑108在执行步骤318以及此后的步骤308之前,确定先前分配给数据集的该部分所需的尺寸的区域110-114不包括自由组表目以及未分配尺寸的区域110-114不存在,因此使用于存储数据集的该部分的组表目中未用表目的总数目最小。
一旦动态分配逻辑108分配尺寸大于数据集的该部分所需尺寸的初始组表目,动态分配逻辑108就访问和更新与尺寸大于数据集的该部分所需尺寸的区域110-114对应的NAT 116-120。更具体地说,可以按上述方式更新头部指针字段206和自由空间计数字段204。在执行步骤308后,执行步骤322。
在步骤322中,结束方法300。通过利用图3的方法300,当接收数据集时可以高效地从存储器分配表目。更具体地说,可以从被动态分配数据集的该部分所需的尺寸的存储器106的区域110-114分配表目,或者从被分配了大于数据集的该部分所需尺寸的尺寸的区域110-114分配表目,以这种方式,使得用于存储数据的组表目中未用(例如,浪费的)表目的总数目最小。
当收到修改的数据集时解分配和/或分配组表目现在参照图1-4说明用于存储器动态分配的硬件的操作,其中图4图示说明了当收到修改的数据集时动态分配存储器的新方法。参见图4,方法400开始于步骤402。此后,可以执行步骤304-320(如虚线框A所示)。步骤304-320说明了根据网络处理器接收的数据从存储器动态分配一个尺寸的组表目的新方法。由于步骤304至320已经参照图3进行了说明,因此这里不再对其进行详细说明。
在步骤404中,接收修改的数据集。如上述的步骤304所述,硬件100可以接收待存储在存储器106的表(例如,路由表)中的数据,诸如硬件100具有通信路由(例如路由信息)的IP和/或MAC地址。数据集可以被存储在存储器106中,以便建立唯一标识数据集的每个部分(IP和/或MAC地址)的树结构。树结构的不同节点可以存储每个IP和/或MAC地址的不同部分。可以用来存储数据集的树结构以及用来确定树结构的每个节点的尺寸的算法已经在上文中描述,这里将不再进行说明。
硬件100可以在操作期间接收标识到达装置的新通信路由(例如,路由信息)的数据,或者接收标识到达无效装置的在前存在的通信路由的数据。硬件100可以适当地更新存储器106中存储的数据(例如,路由信息),以反映新接收的数据。因此,通过接收新数据(比如包括建立通信路由的装置地址或者删除不再建立通信路由的装置地址的路由信息),硬件100接收修改的数据集。
在步骤406中,确定是否可以在来自存储器106的另一区域110-114的不同尺寸的组表目中更有效地存储修改的数据集的一部分,以使得组表目中无用表目的数目最小。一个算法可以用来确定存储已修改数据集的一部分所需的组表目的尺寸,进而确定已修改数据集的一部分可以被存储在更小的组表目中、相同尺寸的组表目中,还是必须被存储在更大组表目中并且仍然唯一标识已修改数据集的每个部分。
例如,已修改数据集可包括将要存储在存储器106的表中的更少或更多数量的IP和/或MAC地址。如果已修改数据集减少地址相同部分是不同的地址的数量,则对应于该地址部分的树结构的节点可以被存储在更小的组表目中,并且仍然唯一地标识已修改数据集中的每个地址。反之,如果已修改数据集增加了地址相同部分是不同的地址数量,则对应于该地址部分的树结构的节点可能需要被存储在更大的组表目中,以继续唯一地标识已修改数据集中的每个地址。
如果确定已修改数据集的一部分没有被高效地存储在不同尺寸的组表目中,则执行步骤408。在步骤408中,已修改数据集的一部分将被存储在现存的组表目中。
作为选择,如果在步骤406中确定(例如,通过使用算法)已修改数据集的一部分可以被高效地存储在来自存储器另一区域的不同尺寸的组表目中,使用来存储数据的组表目中的未用表目的总数量最小,则动态分配逻辑108可以对已修改数据集的一部分执行步骤306-320。因此,动态分配逻辑108可以确定先前被分配给已修改数据集的一部分所需的不同尺寸的区域是否包括自由组表目,未分配尺寸的区域110-114是否存储于存储器106中,和/或尺寸大于已修改数据集的一部分所需的不同尺寸的自由组表目是否存在。由于上文已经详细说明了步骤306-320,因此这里将不再对其进行说明。在该讨论中,假定通过执行图3的步骤306-320,在存储器中发现了已修改数据集的一部分所需的不同尺寸的自由组表目。然后执行步骤410。
在步骤410中,可以分配来自存储器的另一区域的已修改数据集的一部分所需的不同尺寸的组表目,以存储已修改数据集的一部分。更具体地说,根据上述确定,动态分配逻辑108可以从先前分配给不同尺寸的存储器106的区域110-114、分配给不同尺寸的存储器106的先前未分配区域110-114或者先前分配给大于该不同尺寸的尺寸的区域110-114,分配已修改数据集的该部分所需的不同尺寸的组表目。动态分配逻辑108可以访问与区域110-114对应的NAT 116-120的头部指针字段206,以确定自由组表目的队列中的第一组表目,并且分配该组表目来存储已修改数据集的一部分。这样,分配了至少与不同尺寸一样大的最小尺寸的可用组表目,用于存储已修改数据集的一部分。一旦已修改数据集的一部分所需的不同尺寸的组表目被分配,就把已修改数据集的一部分写到(例如存入)组表目上。如以上步骤308所述,当动态分配逻辑108从包含在区域110-114的自由组表目的队列分配一个组表目时,动态分配逻辑108可以访问对应于区域110-114的NAT116-120。动态分配逻辑108可以更新NAT 116-120的头部指针字段206,使其包含指向队列中新的第一组表目的指针。在分配之前,该指针已经被包含在所分配的组表目中,以作为指向自由组表目的队列中下一个组表目的下一个表目指针。如上所述,动态分配逻辑108还可以把NAT 116的自由空间计数字段204递减一个数(例如,一),以反映自由组表目的队列的变化。
在步骤412中,对初始组表目被分配的存储器区域解除初始组表目的分配。由于在步骤406中确定已修改数据集的一部分(例如,对应于树结构的节点)可以被更有效地存储于不同尺寸的组表目中,因此与树结构的节点对应的、用于存储一部分原始数据集的初始组表目例如被解除分配。更具体地说,可以清除存储在初始组表目中的数据(例如,把零写入初始组表目)。动态分配逻辑108可以更新与初始组表目被分配的区域110-114对应的NAT116-120。更具体地说,为了把新近解分配的组表目放置到包含在初始组表目被分配的区域110-114中的自由组表目队列的尾部,动态分配逻辑108可以更新尾部指针字段208,使其包含指向新近解除分配的表目的指针,把包含在队列的先前的最后组表目中的下一个表目指针更新到指向新近解除分配的组表目,并且将自由空间计数字段204中存储的值递增一个数(例如,1),以反映存储器106的区域110-114中包含的自由组表目的变化。
如果解除组表目分配导致该被解除分配的表目最初被分配的存储器106区域110-114的所有表目成为自由,则动态分配逻辑108可以分配区域110-114为一个未分配尺寸。更具体地说,如果动态分配逻辑108把与解除组表目分配的区域110-114对应的NAT的自由空间计数字段204递增到指示区域110-114中所有表目未被使用的值,则动态分配逻辑108维护包含在NAT116-120的字段(例如,自由空间计数字段204)中的一个位,以服务于把对应于NAT 116-120的区域110-114分配给一个未分配的尺寸。这样,分配给存储器106的区域110-114的尺寸可以被调整,以适应于已修改数据集。
方法400结束于步骤414。通过利用图4的方法400,可以动态和有效分配连接到硬件的存储器,以适应于硬件100所接收的已修改数据集。
上述说明仅仅公开了本发明的示范性实施例。本领域熟练技术人员将容易地明白落入本发明范围的本发明的上述公开的实施例的各种修改。例如,尽管在上述实施例中,存储器106的区域110-114可以被分配为一、四、十六或者六十四的尺寸,进而包含在区域110-114中的组表目可以包括组合在一起的一、四、十六或者六十四表目,但是也可以使用更多或更少数目的尺寸。此外,可以使用不同的尺寸。尽管在上述实施例中,存储器106中存储的数据集包括路由信息(例如,IP和/或MAC地址),但是在其它实施例中,其它类型的数据也可以被存储在存储器106中。此外,尽管在上述实施例中,组表目对应于用来存储数据集的树结构中的节点,但是在其它实施例中,组表目可以对应于用于存储数据的另一类型结构中的节点。此外,尽管在上述实施例中,NAT 116-120存储描述区域110-114的结构的数据的21个位,但是在其它实施例中,NAT 116-120可以存储更多或更少的数据位。
当硬件100准备分配存储器106时,可以利用一个命令(例如,地址路由表(ART)刷新命令)重新初始化NAT 116-120。ART刷新命令可以维持对应于区域110-114的NAT 116-120的自由空间计数字段204中的一个位,该位指示区域110-114的所有表目都未被使用,该刷新命令设置区域头部指针字段使其包括指向区域110-114中的第一表目,设置尾部指针字段208使其包括指向区域110-114中的最后表目的指针,而把节点尺寸字段202设置到指示区域110-114中每个表目是组表目的一个值。
因此,尽管已经结合本发明的示范性实施例说明了本发明,但是应当理解是,其它实施例可以落入由以下权利要求所限定的本发明精神和范围之内。
权利要求
1.一种方法,包括接收数据集;确定数据集的一部分所需的尺寸的自由组表目是否存在于存储器的多个区域之一中;如果数据集的所述部分所需的尺寸的自由组表目不存在于存储器的多个区域之一中,则确定存储器是否包括未分配尺寸的一个或多个区域;以及如果存储器包括未分配尺寸的一个或多个区域,则把未分配尺寸的区域之一分配给数据集的该部分所需的尺寸,由此建立动态分配的尺寸的区域,该动态分配尺寸的区域包括数据集的该部分所需尺寸的一个或多个组表目。
2.根据权利要求1所述的方法,其中,确定数据集的该部分所需的尺寸的自由组表目是否存在于存储器的多个区域之一中的步骤包括确定用于唯一标识数据集每个部分的该数据集部分所需的尺寸的自由组表目是否存在于存储器的多个区域之一中。
3.根据权利要求1所述的方法,其中,确定存储器是否包括未分配尺寸的一个或多个区域的步骤包括访问用于存储器的一个或多个区域的控制结构,所述控制结构存储关于区域结构的信息。
4.根据权利要求1所述的方法,还包括从动态分配尺寸的区域分配数据集的该部分所需尺寸的初始组表目,以存储数据集的该部分。
5.根据权利要求4所述的方法,还包括接收已修改数据集;确定已修改数据集的一部分是否可以被更有效地存储在来自存储器另一区域的不同尺寸的组表目中,以使得用于存储已修改数据集的组表目中未用表目的总数最小;从存储器的另一区域分配已修改数据集的该部分所需的不同尺寸的组表目,以存储已修改数据集的该部分;和对分配了初始组表目的存储器的区域解除初始组表目的分配。
6.根据权利要求5所述的方法,还包括更新存储关于其它区域的结构的信息的控制结构。
7.根据权利要求5所述的方法,还包括更新存储关于分配了初始组表目的存储器区域的结构的信息的控制结构。
8.根据权利要求5所述的方法,其中对分配了初始组表目的存储器区域解除初始组表目的分配的步骤留下该区域的所有表目不使用。
9.根据权利要求8所述的方法,还包括清除区域的组表目尺寸分配。
10.根据权利要求1所述的方法,还包括如果存储器不包括未分配尺寸的一个或多个区域,则确定尺寸大于部分数据所需的尺寸的自由组表目是否存在,其中在区域分配给更大可用尺寸之前,检查分配给大于部分数据所需尺寸的最小可用尺寸的区域。
11.根据权利要求10所述的方法,还包括如果尺寸大于部分数据所需的尺寸的自由组表目存在于分配给尺寸大于部分数据所需尺寸的区域中,则从分配给尺寸大于部分数据所需尺寸的区域中,分配尺寸大于数据集的该部分所需尺寸的初始组表目,用于存储数据集的该部分。
12.根据权利要求10所述的方法,还包括如果尺寸大于部分数据所需的尺寸的自由组表目不存在,则输出错误状态。
13.根据权利要求11所述的方法,还包括接收已修改数据集;确定已修改数据集的一部分是否可以被更有效地存储在来自存储器另一区域的不同尺寸的组表目中,以使得用于存储已修改数据集的组表目中未用表目的总数最小;从存储器的另一区域分配已修改数据集的该部分所需的不同尺寸的组表目,以存储已修改数据集的该部分;和对分配了初始组表目的存储器的区域解除初始组表目的分配。
14.根据权利要求13所述的方法,还包括更新存储关于其它区域的结构的信息的控制结构。
15.根据权利要求13所述的方法,还包括更新存储关于分配了初始组表目的存储器区域的结构的信息的控制结构。
16.根据权利要求13所述的方法,其中对分配了初始组表目的存储器区域解除初始组表目的分配的步骤留下该区域的所有表目不使用。
17.根据权利要求16所述的方法,还包括清除区域的组表目尺寸分配。
18.一种设备,包括一个存储器;多个寄存器;和连接存储器和多个寄存器的动态分配逻辑,并且适合于接收数据集;确定数据集的一部分所需的尺寸的自由组表目是否存在于存储器的多个区域之一中;如果数据集的所述部分所需的尺寸的自由组表目不存在于存储器的多个区域之一中,则确定存储器是否包括未分配尺寸的一个或多个区域;以及如果存储器包括未分配尺寸的一个或多个区域,则把未分配尺寸的区域之一分配给数据集的该数据集部分所需的尺寸,由此建立动态分配的尺寸的区域。
19.根据权利要求18所述的设备,其中,动态分配逻辑还适合于确定用于唯一标识数据集每个部分的该部分数据所需的尺寸的自由组表目是否存在于存储器的多个区域之一中。
20.根据权利要求18所述的设备,其中,动态分配逻辑还适合于访问用于存储器的一个或多个区域的控制结构,所述控制结构存储关于区域结构的信息。
21.根据权利要求18所述的设备,其中,动态分配逻辑还适合于从动态分配尺寸的区域分配数据集的该部分所需尺寸的初始组表目,以存储数据集的该部分。
22.根据权利要求21所述的设备,其中,动态分配逻辑还适合于接收已修改数据集;确定已修改数据集的一部分是否可以被更有效地存储在来自存储器另一区域的不同尺寸的组表目中,以使得用于存储已修改数据集的组表目中未用表目的总数最小;从存储器的另一区域分配已修改数据集的该部分所需的不同尺寸的组表目,以存储已修改数据集的该部分;和对分配了初始组表目的存储器的区域解除初始组表目的分配。
23.根据权利要求22所述的设备,其中,动态分配逻辑还适合于更新存储关于其它区域的结构的信息的控制结构。
24.根据权利要求22所述的设备,其中,动态分配逻辑还适合于更新存储关于分配了初始组表目的存储器区域的结构的信息的控制结构。
25.根据权利要求22所述的设备,其中,动态分配逻辑还适合于对分配了初始组表目的存储器区域解除初始组表目的分配,留下该区域的所有表目不使用。
26.根据权利要求25所述的设备,其中,动态分配逻辑还适合于清除区域的组表目尺寸分配。
27.根据权利要求18所述的设备,其中,动态分配逻辑还适合于如果存储器不包括未分配尺寸的一个或多个区域,则确定尺寸大于部分数据所需的尺寸的自由组表目是否存在,其中在区域分配给更大可用尺寸之前,检查分配给大于部分数据所需尺寸的最小可用尺寸的区域。
28.根据权利要求27所述的设备,其中,动态分配逻辑还适合于如果尺寸大于部分数据所需的尺寸的自由组表目存在于分配给尺寸大于部分数据所需尺寸的区域中,则从分配给尺寸大于部分数据所需尺寸的区域,分配尺寸大于数据集的该部分所需尺寸的初始组表目,用于存储数据集的该部分。
29.根据权利要求27所述的设备,其中,动态分配逻辑还适合于如果尺寸大于部分数据所需的尺寸的自由组表目不存在,则输出错误状态。
30.根据权利要求23所述的设备,其中,动态分配逻辑还适合于接收已修改数据集;确定已修改数据集的一部分是否可以被更有效地存储在来自存储器另一区域的不同尺寸的组表目中,以使得用于存储已修改数据集的组表目中未用表目的总数最小;从存储器的另一区域分配已修改数据集的该部分所需的不同尺寸的组表目,以存储已修改数据集的该部分;和对分配了初始组表目的存储器的区域解除初始组表目的分配。
31.根据权利要求30所述的设备,其中,动态分配逻辑还适合于更新存储关于其它区域的结构的信息的控制结构。
32.根据权利要求30所述的设备,其中,动态分配逻辑还适合于更新存储关于分配了初始组表目的存储器区域的结构的信息的控制结构。
33.根据权利要求30所述的设备,其中,动态分配逻辑还适合于对分配了初始组表目的存储器区域解除初始组表目的分配,留下该区域的所有表目不使用。
34.根据权利要求33所述的设备,其中,动态分配逻辑还适合于清除区域的组表目尺寸分配。
全文摘要
在本发明的第一方面,提供了第一方法,该第一方法包括以下步骤(1)接收数据集(a set of data);(2)确定数据集的一部分(a portion of the set ofdata)所需的尺寸的自由组表目(free group entry)是否存在于存储器的多个区域之一中;(3)如果数据集的所述部分所需的尺寸的自由组表目不存在于存储器的多个区域之一中,则确定存储器是否包括未分配尺寸的一个或多个区域;(4)如果存储器包括未分配尺寸的一个或多个区域,则把未分配尺寸的区域之一分配给数据集的该部分所需的尺寸,由此建立动态分配尺寸的区域。此外还提供多个其它方面。
文档编号H04L12/56GK1601487SQ20041008266
公开日2005年3月30日 申请日期2004年9月27日 优先权日2003年9月25日
发明者约翰·D·艾里什, 伊布拉希姆·A·乌达, 詹姆斯·A·斯蒂恩伯格, 贾森·A·汤普森 申请人:国际商业机器公司