存储器执行写操作的方法以及存储器与流程

文档序号:21816155发布日期:2020-08-11 21:26阅读:330来源:国知局
存储器执行写操作的方法以及存储器与流程

本申请涉及信息技术领域,并且更具体地,涉及存储器执行写操作的方法以及存储器。



背景技术:

网络设备(例如路由器)可以接收报文并对报文进行转发。网络设备接收到报文后,对报文进行转发前,可以对报文进行缓存。报文缓存技术可以提高网络设备的出端口的带宽的利用率。

基于上述报文缓存技术,网络设备可以将接收到的报文缓存在网络设备的报文缓存器(packetbuffer,pb)中。目前,报文缓存器包括多个bank,每个bank包括多个容量相等的bank单元(bankcell)用于为报文提供存储空间。当报文缓存器接收到报文后,会基于bank单元的容量对报文进行分段处理,以得到多个报文片段,并将报文片段分别存储到一个bank单元中,每个bank单元仅存储一个报文片段。

然而,报文的尺寸通常不是bank单元的容量的整数倍,也就是说,将报文按照bank单元的容量,进行分段处理得到的多个报文片段中,最后一个生成的报文片段的尺寸通常远远小于bank单元的容量,导致bank单元中的存储空间被浪费,降低了存储空间的利用率。例如,一个报文的尺寸为129字节(byte,b),bank中bank单元的容量都为128b,按照bank单元的容量对报文进行分段处理,可以得到两个报文片段,第一个报文片段的尺寸为128b,第二个报文片段的尺寸为1b。将两个报文片段分别存储至两个bank单元,对于存储第二个报文片段的bank单元而言,会有127b的存储空间被浪费。



技术实现要素:

本申请提供一种向存储器中写报文的方法以及存储器,以提高存储器中存储空间的利用率。

第一方面,提供一种存储器,所述存储器包括控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述控制器用于接收写请求,所述写请求用于请求写入第一报文片段;所述控制器用于从所述第一bank单元的多个存储单元中选择第一存储单元;所述控制器用于将所述第一报文片段写入所述选择的所述第一存储单元,所述第一存储单元的容量大于或者等于所述第一报文片段的尺寸。

在本申请实施例中,通过将一个bank单元划分为多个存储单元以存储报文片段,有利于提高存储空间的利用率,避免了现有技术中每个bank单元仅存储一个报文单元,当报文单元的尺寸较小时,导致bank单元浪费的存储空间较大。

在一种可能的实现方式中,所述第一bank包括多个子bank,每个子bank包括至少一个存储单元,所述多个子bank分别包括所述第一bank单元包含的多个存储单元,所述多个子bank与所述第一bank单元包含的多个存储单元一一对应;所述控制器用于从所述第一bank单元的多个存储单元中选择第一存储单元包括:所述控制器用于从所述多个子bank中选择第一子bank;以及从选择的所述第一子bank包含的至少一个存储单元中选择所述第一存储单元。

在本申请实施例中,以子bank与bank单元的形式划分出多个存储单元,有利于快速定位到存储单元。

在一种可能的实现方式中,所述控制器包含多个空闲地址池控制器fapc,所述多个fapc与所述多个子bank一一对应,每个fapc记录对应的子bank中处于空闲状态的存储单元的地址;所述控制器用于从选择的所述第一子bank包含的至少一个存储单元中选择所述第一存储单元包括:所述控制器用于从所述多个fapc中的第一fapc记录的存储单元的地址中,选择所述第一存储单元的地址,所述第一fapc对应所述第一子bank。

在本申请实施例中,通过每个子bank对应的fapc管理处于空闲状态的存储单元,以便于有多个报文片段需要存储时,可以并行地为报文片段分配存储单元,有利于减少存储报文的时延。

在一种可能的实现方式中,所述第一报文片段是第一报文中的片段,所述第一报文还包括第二报文片段,所述存储器包括第二存储单元;所述控制器还用于将所述第二报文片段写入所述第二存储单元,所述控制器记录指示所述第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段的信息。

在本申请实施例中,通过信息关联第一存储单元与第二存储单元,指示第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段,并将信息存储在控制器中,以便于控制器可以根据该信息还原报文。

可选地,所述信息还指示在所述报文中所述第一存储单元存储的报文片段位于所述第二存储单元存储的报文片段之前。

在本申请实施例中,通过第一存储单元与第二存储单元指示第一存储单元中的报文片段与第二存储单元中的报文片段在报文中的先后顺序,有利于控制器根据该顺序将报文片段还原为报文。

在一种可能的实现方式中,所述信息以数组表示,所述数组中的第x个元素在所述数组中的元素编号对应所述第一存储单元,所述第x个元素的值指示所述第二存储单元,x为正整数。

在本申请实施例中,通过数组的方式关联第一存储单元存储的报文片段与第二存储单元存储的报文片段,有利于简化记录上述信息的方式。

第二方面,提供了一种存储器,所述存储器包括控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述控制器用于接收读请求,所述读请求携带待读取的第一报文片段的存储地址;所述控制器用于根据所述存储地址,确定存储所述第一报文片段的存储单元;所述控制器用于从所述存储单元中读取所述第一报文片段。

在本申请实施例中,通过将一个bank单元划分为多个存储单元以存储报文片段,有利于提高存储空间的利用率,避免了现有技术中每个bank单元仅存储一个报文单元,当报文单元的尺寸较小时,导致bank单元浪费的存储空间较大。

在一种可能的实现方式中,所述第一bank包括多个子bank,每个子bank包括至少一个存储单元,所述多个子bank分别包括所述第一bank单元包含的多个存储单元,所述多个子bank与所述第一bank单元包含的多个存储单元一一对应;所述bank的控制器用于根据所述存储地址,确定存储所述第一报文片段的存储单元,包括:所述控制器用于根据所述存储地址,从所述多个子bank中选择第一子bank;以及根据所述存储地址,从所述第一子bank包含的至少一个存储单元中选择所述第一存储单元。

在本申请实施例中,以子bank与bank单元的形式划分出多个存储单元,有利于快速定位到存储单元。

在一种可能的实现方式中,所述控制器包含多个空闲地址池控制器fapc,所述多个fapc与所述多个子bank一一对应,每个fapc记录对应的子bank中处于空闲状态的存储单元的地址。

在本申请实施例中,通过每个子bank对应的fapc管理处于空闲状态的存储单元,以便于有多个报文片段需要存储时,可以并行地为报文片段分配存储单元,有利于减少存储报文的时延。

在一种可能的实现方式中,所述第一报文片段是第一报文单元中的片段,所述第一报文单元还包括第二报文片段,所述控制器获取指示所述第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段的信息。

在本申请实施例中,通过信息关联第一存储单元与第二存储单元,指示第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段,并将信息存储在控制器中,以便于控制器可以根据该信息还原报文。

可选地,所述信息还指示在所述报文中所述第一存储单元存储的报文片段位于所述第二存储单元存储的报文片段之前。

在本申请实施例中,通过第一存储单元与第二存储单元指示第一存储单元中的报文片段与第二存储单元中的报文片段在报文中的先后顺序,有利于控制器根据该顺序将报文片段还原为报文。

在一种可能的实现方式中,所述信息以数组表示,所述数组中的第x个元素在所述数组中的元素序号对应所述第一存储单元,所述第x个元素的值指示所述第二存储单元,x为正整数。

在本申请实施例中,通过数组的方式关联第一存储单元存储的报文片段与第二存储单元存储的报文片段,有利于简化记录上述信息的方式。

第三方面,提供一种存储器,所述存储器包括控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述控制器用于接收释放请求,所述释放请求携带请求释放的第一存储单元的存储地址;所述控制器用于根据所述存储地址,确定所述第一存储单元;所述控制器用于记录所述第一存储单元处于空闲状态。

在本申请实施例中,通过将一个bank单元划分为多个存储单元以存储报文片段,有利于提高存储空间的利用率,避免了现有技术中每个bank单元仅存储一个报文单元,当报文单元的尺寸较小时,导致bank单元浪费的存储空间较大。

在一种可能的实现方式中,所述第一bank包括多个子bank,每个子bank包括至少一个存储单元,所述多个子bank分别包括所述第一bank单元包含的多个存储单元,所述多个子bank与所述第一bank单元包含的多个存储单元一一对应;所述控制器用于根据所述存储地址,确定所述第一存储单元,包括:所述控制器用于根据所述存储地址,从所述多个子bank中选择第一子bank;以及根据所述存储地址,从所述第一子bank包含的至少一个存储单元中选择所述第一存储单元。

在本申请实施例中,以子bank与bank单元的形式划分出多个存储单元,有利于快速定位到存储单元。

在一种可能的实现方式中,所述控制器包含多个空闲地址池控制器fapc,所述多个fapc与所述多个子bank一一对应,每个fapc记录对应的子bank中处于空闲状态的存储单元的地址,所述控制器用于记录所述第一存储单元处于空闲状态,包括:所述控制器将所述第一存储单元的地址添加至所述第一子bank对应的fapc中。

在本申请实施例中,通过每个子bank对应的fapc管理处于空闲状态的存储单元,以便于有多个报文片段需要存储时,可以并行地为报文片段分配存储单元,有利于减少存储报文的时延。

在一种可能的实现方式中,所述第一报文片段是第一报文单元中的片段,所述第一报文单元还包括第二报文片段,所述控制器用于根据所述第一存储单元以及信息,确定存储第二存储单元,所述信息指示所述第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段;所述控制器用于记录所述第二存储单元处于空闲状态。

在本申请实施例中,通过信息关联第一存储单元与第二存储单元,指示第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段,并将信息存储在控制器中,以便于控制器在释放存储单元时可以根据信息释放报文对应的多个存储单元,以提高释放存储单元的效率。

在一种可能的实现方式中,所述信息以数组表示,所述数组中的第x个元素在所述数组中的元素序号指示所述第一存储单元,所述第x个元素的值指示所述第二存储单元,x为正整数。

在本申请实施例中,通过数组的方式关联第一存储单元存储的报文片段与第二存储单元存储的报文片段,有利于简化记录上述信息的方式。

第四方面,提供了一种存储器执行写操作的方法,包括第一方面中的一个或多个方法步骤。

第五方面,提供了一种存储器执行读操作的方法,包括第二方面中的一个或多个方法步骤。

第六方面,提供了一种存储器执行释放操作的方法,包括第三方面中的一个或多个方法步骤。

第七方面,提供了一种存储器,所述存储器中的控制器包括输入、输出端口处理器和存储器。该处理器用于控制输入、输出端口收发信号,该存储器用于存储计算机程序,该处理器用于从存储器中调用并运行该计算机程序,使得该存储器上述各方面中的方法。

第八方面,提供了一种计算机程序产品,所述计算机程序产品包括:计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。

需要说明的是,上述计算机程序代码可以全部或者部分存储在第一存储介质上,其中第一存储介质可以与处理器封装在一起的,也可以与处理器单独封装,本申请实施例对此不作具体限定。

第九方面,提供了一种计算机可读介质,所述计算机可读介质存储有程序代码,当所述计算机程序代码在计算机上运行时,使得计算机执行上述各方面中的方法。

附图说明

图1是网络交换设备的示意性架构图。

图2是报文缓存器200的架构的示意图。

图3示出了bank的架构的示意性框图。

图4是本申请实施例的存储器执行写操作的方法的示意性流程图。

图5示出了一种存储单元的划分方式的示意图。

图6是本申请实施例的控制器的示意图。

图7是本申请实施例的报文中报文片段的位置的示意图。

图8示出了本申请实施例中索引关系的存储方式的示意图。

图9示出了本申请实施例中索引关系的存储方式的示意图。

图10是本申请实施例的存储器执行读操作的方法的流程图。

图11是本申请实施例的存储器执行释放操作的方法的流程图。

图12是本申请另一实施例的控制器的示意性框图。

具体实施方式

下面将结合附图,对本申请中的技术方案进行描述。

为了便于理解,先结合图1介绍本申请实施例适用的网络设备的架构。图1是网络交换设备的示意性架构图。图1所示的网络交换设备100包括入口媒体访问控制(mediaaccesscontrol,mac)110,上行报文处理器(ingresspacketprocesser,ipp)120,交换缓存器(switchbuffer,swb)130,下行报文处理器(egresspacketprocesser,epp)140,以及出口mac150。其中,swb130包括准入控制模块(admissioncontrol,ac)131,队列管理(queuemanagement,qm)模块132、调度器(scheduler,sc)133以及报文缓存器pb134。

一个报文(packet)在进入网络交换设备100后,入口mac110将该报文分割成多个报文片段。ipp120对多个报文片段转发处理,多个报文片段被转发至swb130。swb130中的ac131负责检查报文单元是否满足准入条件,若满足准入条件,则报文单元被允许缓存pb134中。相应地,qm模块132负责维护一个报文的多个报文片段的控制信息,以便后续可以根据控制信息对报文片段进行转发。若不满足准入条件,则报文片段可以被丢弃。

若需要从报文缓存器中读取报文片段时,sc133负责从qm模块132中调度用于请求读取所述报文片段的读请求出队,并发送至pb134,pb134在接收读请求后,根据读请求将报文片段发送到epp140,而后在出口mac模块150中读出的报文片段被重新组成为完整的报文,并继续转发。

下文结合图2详细介绍图1中的pb134。图2是报文缓存器200的架构的示意图。应理解,虽然pb134与pb200使用的编号不同,但是可以指代相同的设备。图2所示的pb200包括输入交叉开关矩阵(inputcrossbar,ixb)210,输出交叉开关矩阵(outputcrossbar,oxb)220以及bank230。其中,ixb用于从w1至wp共p个写输入端口接收的报文片段转发至目标bank,以便目标bank缓存报文片段。oxb用于对从目标bank中读取报文片段传输至r1至rq共q个输出端口,其中p、q为正整数。bank230用于为报文片段提供缓存空间。

其中,bank230的具体结构可以参见图3。图3示出了bank的架构的示意性框图。图3所示的bank230包括控制器231和bank存储器232。

bank存储器232,为报文提供存储空间。bank存储器232被划分为一个或多个位宽相同的bank单元233,例如,bank单元1至bank单元b,每个单元用于存储一个报文片段。

控制器231,用于为待写入的报文片段分配bank单元,以及确定待读取的报文片段所在的bank单元。

需要说明的是,上述控制器231可以与bank存储器232集成在一个bank内,又称“bank控制器”。也可以是与bank存储器232是两个分立的器件,用于控制、管理存储器中的存储资源,本申请实施例对此不作限定。

可选地,控制器231可以包括一个空闲地址池控制器(freeaddresspoolcontroller,fapc),fapc以栈的形式记录存储器中处于空闲状态的bank单元,处于空闲状态的bank单元指能够存储报文片段的bank单元,具体可以包括两种情况:情况一,bank单元中存储的报文片段已经被转发至目标节点,此时bank单元处于空闲状态。或者,情况二,bank单元原来没有存储报文片段,此时bank单元处于空闲状态。

例如,存储器中处于空闲状态的bank单元为bank单元1,bank单元3以及bank单元b,则fapc中记录的地址分别为bank单元1的地址(或称“偏移量”)offset1,bank单元3的地址offset3以及bank单元b的地址offsetb。若有待写入的报文片段时,fapc可以弹出(pop)一个bank单元的地址,用于存储该报文片段。

在图3所示的bank中可以看出,存储器232被划分为一个或多个位宽相同的bank单元,且处于空闲状态的bank单元的地址被记录在fapc中。由于fapc的数据结构,每次fapc只能弹出一个处于空闲态的bank单元,且仅用于存储一个报文片段。然而,报文的尺寸通常不是bank单元的容量的整数倍,将报文按照bank单元的容量,进行分段处理得到的多个报文片段中,最后一个生成的报文片段的位宽通常远远小于bank单元的容量,此时,最后一个生成的报文片段依然需要占用一整个bank单元,导致bank单元中的存储空间被浪费,降低了存储空间的利用率。例如,如图3所示,一个报文的尺寸为129b,bank中bank单元的容量都为128b,按照bank单元的容量对报文进行分段处理,可以得到两个报文片段,报文片段1的尺寸为128b,报文片段2的尺寸为1b,将报文片段1存储至bank单元1中,将报文片段2存储至bank单元2中,则对于bank单元2而言,仅有1b的存储空间用于存储报文片段2(参见图3中阴影部分),剩余的127b的存储空间被浪费。

为了避免上述问题,提高bank中存储空间的利用率,本申请提供了一种新的bank,并提供了基于新的bank的写报文、读报文以及释放存储资源的方法。下文将结合图4至图11详细介绍。

需要说明的是,本申请实施例中的报文片段的尺寸(或者说位宽)会小于或等于现有技术中的报文片段,即上文中存储在bank单元中的报文片段。为了便于区分,在下文介绍本申请实施例的技术方案时,将现有技术中的报文片段称为“报文单元”(packetcell),而本申请实施例中涉及的报文片段依然称为报文片段。也就是说,下文中涉及的“报文单元”占用整个bank单元的存储空间,“报文片段”占用整个存储单元的存储空间。

图4是本申请实施例的存储器执行写操作的方法的示意性流程图。所述存储器包括控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述方法包括步骤410至步骤430。

应理解,上述存储器可以是图2所示的pb,或者是pb中用于缓存报文的存储器,可以包括一个或多个bank。第一bank可以是存储器中的任一个bank,其具体结构可以参见图3。还应理解,上述第一bank包括一个或多个bank单元,上述第一bank单元可以是第一bank中的任意一个bank单元。

还应理解,上述第一bank单元可以是第一bank中的任意一个bank单元,且上述第一bank单元包括多个存储单元,可以理解为,第一bank中的每个bank单元都被预先的划分为多个存储单元。可选地,每个bank单元包括的多个存储单元的容量可以相同也可以不同,本申请实施例对此不作限定。

410,所述控制器接收写请求,所述写请求用于请求写入第一报文片段。

上述第一报文片段可以理解为对报文中的有效数据按照存储单元的容量进行分割后得到的,上述第一报文片段可以理解为是报文的有效数据中的全部或部分有效数据,还可以理解为是报文单元中的全部或部分有效数据。

第一报文片段是报文单元的全部或部分有效数据,可以理解为,若报文被分割为报文单元之后,报文单元的尺寸小于或等于存储单元的容量,则可以直接将报文单元存储在存储单元中,无需对报文单元进一步分割,此时,报文片段可以包括报文单元中的全部有效数据。若报文被分割为报文单元之后,报文单元的尺寸大于存储单元的容量,则需要对报文单元按照存储单元的容量进一步分割,以使得分割后的报文片段的位宽小于或等于存储单元的容量。

在本申请实施例中,可以先在报文缓存器中(例如,入口mac110)按照bank单元的容量将报文分割为多个报文单元,再在控制器(例如,控制器231)中按照存储单元的容量将报文单元进一步分割为多个报文片段,如此,可以保证在报文到bank之前,能够按照现有技术中报文单元的传输方式,复用已有的pb中各个模块到bank之前的数据通路。避免了直接将报文划分为多个报文片段后,导致报文片段的数量急剧增大,从而需要调整pb中现有的通路以匹配大量的报文片段,最终使得pb中各个模块到bank之前的数据通路的连接方式的过于复杂度。

当然为了减少报文分割的次数,也可以直接按照存储单元的容量,将报文直接分割为报文片段,则第一报文片段是报文的全部或部分有效数据,可以理解为,若报文的尺寸小于或等于存储单元的容量,则可以直接将报文存储在存储单元中,无需对报文进行分割,此时,报文片段可以包括报文中的全部有效数据。若报文的尺寸大于存储单元的容量,则需要对报文按照存储单元的容量进行分割,以使得分割后的报文片段的位宽小于或等于存储单元的容量。

基于上述原因,为了使得本申请实施例的方法更好的与现有的swb架构兼容,在下文中介绍的本申请实施例的方法时,通常以报文单元包含的多个报文片段为例进行介绍,应理解,报文单元的范围可以扩展到报文,并且方法流程与下文介绍的相似,只要将报文单元扩展到报文即可,为了简洁,不再详细赘述。

420,所述控制器从所述第一bank单元的多个存储单元中选择第一存储单元。

可选地,第一bank单元的多个存储单元对应多个标识,步骤420可以包括控制器从多个标识中选择第一标识,所述第一标识为所述第一存储单元的标识。具体的,上述标识可以是存储单元所在的bank单元的偏移量,也可以是存储单元的地址,或者是其他可以标识存储单元的信息。本申请实施例对此不作限定。

需要说明的是,控制器可以随机从第一bank单元中选择第一存储单元,还可以按照上文介绍的方式从第一bank单元中选择处于空闲状态的存储单元作为第一存储单元,本申请实施例对此不作限定。关于记录处于空闲状态的存储单元的方式会在下文中详细描述,为了简洁,在此不再赘述。

430,所述控制器将所述第一报文片段写入所述选择的所述第一存储单元,所述第一存储单元的容量大于或者等于所述第一报文片段的尺寸。

需要说明的是,在复用现有的bank连接方式的情况下,选择的第一存储单元对应的地址总线与第一报文片段在报文单元中的位置不匹配,此时需要通过存储器中的输入总线移位器(inputbusshifter,ibs)将第一报文片段复制到第一存储单元对应的地址总线对应的端口,以便通过第一存储单元对应的地址总线将第一报文片段写入第一存储单元。

例如,一个报文单元的尺寸是256b,其中有效数据位宽是128b,即第一报文片段为128b,且对应地址总线的低128b位,假设第一存储单元对应的是地址总线的高128b位,则ibs根据第一存储单元对应的是地址总线,将第一报文片段的有效数据从地址总线的低128b移位至地址总线的高128b,使其与第一存储单元在地址总线上位置对齐。

在本申请实施例中,通过将一个bank单元划分为多个存储单元以存储报文片段,有利于提高存储空间的利用率,避免了现有技术中每个bank单元仅存储一个报文单元,当报文单元的尺寸较小时,导致bank单元浪费的存储空间较大。

在将第一bank中的bank单元划分为多个存储单元的划分方式有很多种,例如,每个bank单元可以被划分为数量不同的存储单元。又例如,每个bank单元被划分为数量相同的存储单元,本申请实施例对此不作具体限定。

图5示出了本申请实施例的存储单元的划分方式的示意图。应理解,图5所示的bank可以是基于图3所示的bank中的存储资源的划分方式的改进。图5所示的bank包含的多个存储单元以矩阵的形式排列,该矩阵包含b行n列,b和n为正整数。其中,矩阵中每行(row)复用现有bank的划分方式,b行存储单元对应b个bank单元,即bank1至bankb,每行的存储单元属于一个bank单元。n列存储单元对应n个子bank,即子bank1至子bankn,每个子bank中不同存储单元属于不同的行,或者说每个子bank中不同存储单元属于不同的bank单元。

相应地,基于图5所述的bank,存储单元可以通过一个bank单元与子bank唯一确定。例如,n个子bank中属于同一bank单元的存储单元可以复用bank单元的偏移量,即,bank单元1的偏移量(offset)为offset1,则n个子bank中属于bank单元1的存储单元的偏移量都为offset1。bank单元2的偏移量为offset2,则n个子bank中属于bank单元2的存储单元的偏移量都为offset2,依次类推,bank单元b的偏移量为offsetb,则n个子bank中属于bank单元b的存储单元的偏移量都为offsetb,如此,可以基于每个bank单元的偏移量以及子bank唯一确定一个存储单元。

应理解,上述偏移量仅仅是表示bank单元的一种方式,复用了现有技术中指示bank单元的方式,与现有技术的兼容性较好。本申请实施例并不限定表示bank单元的方式,例如,可以为不同的bank单元配置唯一行id等。

还应理解,上述结合偏移量与子bank的标识唯一标识一个存储单元,相对于每个存储单元对应唯一的标识而言,有利于减少标识存储单元的标识的数量,并便于存储单元的快速定位。当然,也可以为不同的存储单元配置不同的偏移量,这样,可以仅仅通过偏移量唯一标识一个存储单元,虽然增多了偏移量的数量,但是有利于简化表示bank中存储单元的复杂度。

可选地,上述bank中每个子bank中的存储单元的容量可以相同,上述bank中至少两个子bank中的存储单元的容量可以不相同。本申请实施例对此不作限定。

基于图5所示的存储单元的划分方式,上述步骤420,可以包括所述控制器从所述多个子bank中选择第一子bank;以及从选择的所述第一子bank包含的至少一个存储单元中选择所述第一存储单元。

可选地,控制器从多个子bank中选择第一子bank包括控制器从多个处于非满(non-full)状态的子bank中选择第一子bank。处于非满状态的子bank包括一个或多个处于空闲状态的存储单元。

需要说明的是,上述选择第一存储单元的过程中,控制器可以根据子bank(即第一子bank)和bank单元(第一bank单元)定位第一存储单元,而控制器选择第一子bank和第一bank的先后顺序,本申请实施例不作限定,即可以先选择第一子bank再选择第一bank,也可以先选择第一bank再选择第一子bank。

在上文中介绍的控制器选择第一存储单元的过程中,可以从处于空闲状态的存储单元中选择第一存储单元,如此,控制器需要记录bank中处于空闲状态的存储单元。在一种可能的实现方式中,控制器都可以包括多个fapc(包括第一fapc),每个子bank对应一个fapc,每个fapc记录对应的子bank中处于空闲状态的存储单元。

图6是本申请实施例的控制器的示意图。图6所示的控制器包括n个fapc,fapc1至fapcn,每个fapc对应一个子bank,记录对应的子bank中处于空闲状态的存储单元。fapc1用于记录子bank1中处于空闲状态的存储单元,fapc2用于记录子bank2中处于空闲状态的存储单元,依次类推,fapcn用于记录子bankn中处于空闲状态的存储单元。

相应地,步骤420,包括:所述控制器用于从所述多个fapc中的第一fapc中记录的存储单元的地址中,选择所述第一存储单元的地址,所述第一fapc对应所述第一子bank。

需要说明的是,fapc可以以栈的形式记录处于空闲状态的地址,还可以以数组的方式记录处于空闲状态的地址,本申请实施例对此不作限定。

还应理解,上述bank中的每个子bank对应一个fapc仅是通过fapc管理处于空闲状态的存储单元的一种可能的实现方式,还可以为在控制器中设置多个fapc,每个fapc用于管理一个bank单元中处于空闲状态的存储单元,或者,还可以通过一个fapc管理多个子bank中处于空闲状态的存储单元,本申请实施例对此不作限定。

在本申请实施例中,上述控制器通过多个fapc分别管理多个子bank中处于空闲状态的存储单元的方式,如此,当待写入的报文片段为多个时,对应的可以由多个fapc并行地为多个报文片段中的每个报文片段弹出处于空闲状态的存储单元,以便存储对应的报文片段,有利于减小存储报文片段的时延。避免了控制器通过一个fapc管理bank中的多个子bank时,如果待写入的报文片段为多个,则多个报文片段需要等待fapc为逐个为报文片段弹出处于空闲状态的存储单元。当然,控制器通过一个fapc管理多个子bank有利于减少控制器中fapc的数量,以降低成本。

当报文单元的报文片段被写入存储单元后,需要将报文单元的存储地址反馈至swb中的qm模块,以便后续可以通过存储地址读取报文单元。在本申请实施例中,由于一个报文单元可能被分割为多个报文片段写入多个存储单元,因此,报文单元的存储地址需要包括多个存储单元的地址。然而,一个swb中通常会设置多个qm模块共同管理报文在存储器中的存储情况,也就是说,报文单元的地址需要反馈给多个qm模块,如果报文单元的存储地址包括多个存储单元的存储地址,则会导致每个qm模块存储报文单元的存储地址的存储空间增大。为了减少每个qm模块存储报文单元的存储地址的存储空间,本申请实施例提供了一种新的存储地址的表示方式,报文单元的存储地址可以由三部分组成,即bank标识、子bank标识以及报文片段的位置关系标识。

其中,bank标识用于指示报文单元被写入的bank,例如,可以为bankid。

子bank标识用于指示报文单元被写入的子bank,具体地可以通过多个标识位分别对对应每个子bank的状态。例如,n个子bank可以与n个标识位一一对应,当标识位的取值为1时表示该标识位对应的子bank存储有报文片段,当标识位的取值为0时表示该标识位对应的子bank未存储报文片段。

例如,子bank标识为其中子bank标识包括n个标识位,n个标识位以从左到右的顺序分别对应子bank1至子bankn,当标识位的取值为1时表示该标识位对应的子bank存储有报文片段,当标识位的取值为0时表示该标识位对应的子bank未存储报文片段,则上述子bank标识为标识在子bank1和子bankn中存储有报文片段。

需要说明的是,上述n个子bank可以与n个标志位一一对应,可以指n个标志位以从左到右的顺序分别对应子bank1至子bankn,还可以指n个标志位以从右到左的顺序分别对应子bank1至子bankn,还可以将n个子bank和n个标志位随机对应,并记录最终的标志位与子bank的对应关系即可,本申请实施例对此不作限定。

报文片段的位置关系标识用于指示各个报文片段在报文单元中的位置,各个报文片段在报文单元中的位置可以通过控制器确定存储报文片段的多个存储单元的先后顺序间接指示。其中,确定存储单元的先后顺序可以通过存储单元之间的索引关系的规定。

上述报文片段在报文单元中的位置关系可以细化为两个层面的信息,即报文片段在报文单元中相邻,报文片段在报文单元的先后顺序。这两层信息可以通过报文片段的位置关系指示,还可以通过两种独立的信息分别指示,本申请实施例对此不作具体限定。

需要说明的是,由于存储地址中仅携带报文片段的位置关系标识,相应地,报文单元中的位置关系需要由控制器维护,以便在读报文的过程中,可以根据存储地址中的报文片段的位置关系标识确定报文单元中的位置关系。下文在介绍记录报文单元中的位置关系的过程中会连通确定存储单元的先后顺序的过程一起介绍,以便更好的理解本申请实施例的方法。而在方案的实际执行中确定存储单元的先后顺序的过程是在根据读请求中携带的存储地址读报文,以及释放存储资源的过程中执行的。

报文单元被分割为第一报文片段以及第二报文片段,且第一报文片段位于第二报文片段之前,则可以控制控制器先确定存储第一报文片段的第一存储单元,再确定存储第二报文片段的第二存储单元。而控制器确定多个存储单元的先后顺序则可以通过多个存储单元之间的索引关系控制。例如,控制器根据第一存储单元才能索引到第二存储单元时,控制器需要先确定了第一存储单元之后,才能根据第一存储单元索引第二存储单元。

需要说明的是,控制器确定多个存储单元的先后顺序,也可以理解为,控制器将多个存储单元按照确定多个存储单元的先后顺序链接起来,因此,用于存储索引关系的存储器可以称为地址链接器(addresslinker,al)。相应地,存储单元之间的索引关系使用al表示。

具体而言,上述存储报文单元的多个存储单元之间的索引关系,可以通过每两个存储单元之间的索引关系表示。为了便于区分,在下文介绍本申请实施例的方法时,用“索引关系”指示存储报文单元的全部存储单元之间的关联关系,用“子索引关系”指示存储报文单元的多个存储单元中两个存储单元之间的关联关系。即m个存储单元之间的索引关系可以包括m-1个子索引关系,m为大于等于1的正整数。

需要说明的是,若报文单元存储在2个存储单元中,则上述索引关系与子索引关系为相同的存储单元之间的关联关系。

例如,报文单元包括第一报文片段、第二报文片段以及第三报文片段,第一报文片段、第二报文片段与第三报文片段之间的位置关系可以参见图7,即第一报文片段与第二报文片段相邻,第二报文片段与第三报文片段相邻,且第一报文片段在报文单元中的位置位于第二报文片段的位置之前,第二报文片段在报文单元中的位置位于第三报文片段的位置之前。

假设第一报文片段存储至第一子bank中的存储单元1,第一子bank中的存储单元1的偏移量为offset1,第二报文片段存储至第二子bank中的存储单元2,且第二子bank中的存储单元2的偏移量为offset2,第三报文片段存储至第三子bank中的存储单元3,且存储单元3的偏移量为offset3,则需要两个子索引关系关联上述3个存储单元,其中子索引关系用al表示,则第一子索引关系表示为al1[offset1]=offset2,第二子索引关系表示为al2[offset2]=offset3。

需要说明的是,上述表示子索引关系的方式al1[offset1]=offset2,以及al2[offset2]=offset3仅仅为了便于说明使用的一种表示方式,在实际应用中,上述子索引关系可以通过键值对或数组等可以表示上述逻辑关系的数据结构表示,本申请实施例对此不作限定。

若通过键值对的数据结构表示子索引关系时,可以记录两个键值对数据,第一键值对数据以第一存储单元的偏移量为键(key),第二存储单元的偏移量为值(value),第二键值对数据以第二存储单元的偏移量为键,第三存储单元的偏移量为值。

若通过数组的形式表示子索引关系时,需要通过两个数据可以通过第一数组中的第x个元素在所述数组中的元素序号(x)对应所述第一存储单元,所述第x个元素的值指示所述第二存储单元。其中,第一存储单元与第二存储单元可以位于相同的子bank,也可以位于不同的子bank。

可选地,第x个元素的值可以为第二存储单元的地址,或者第二存储单元的偏移量,或者其他可以表示第二存储单元的标识。

例如,数组1包括3个元素,(元素a)1,(元素b)2以及(元素c)3。这个3个元素在数组中的元素序号可以通过下标的表示,即元素a的下标为1,元素a的元素序号为1;元素b的下标为2,元素b的元素序号为2;元素c的下标为3,元素c的下标为3。假设上述数组表示子bank1中存储单元的索引关系,且子bank1中包含3个存储单元,存储单元1的偏移量为offset1,存储单元2的偏移量为offset2,存储单元3的偏移量为offset3,则下标为1的元素可以对应偏移量为offset1的存储单元1,下标为2的元素可以对应偏移量为offset2的存储单元2,下标为3的元素可以对应偏移量为offset3的存储单元3。

相应地,下标为1的元素的取值元素a,元素a为offset4,则可以确定存储单元1对应偏移量为offset4的存储单元;下标为2的元素的取值元素b,元素b为offset5,则可以确定存储单元2对应偏移量为offset5的存储单元;下标为3的元素的取值元素c,元素c为offset6,则可以确定存储单元3对应偏移量为offset6的存储单元。

需要说明的是,若基于图5所示的存储单元的划分方式,上述偏移量为offset4的存储单元、偏移量为offset5的存储单元以及偏移量为offset6的存储单元,还需要结合存储地址中的子bank标识确定。若bank中每个存储单元的偏移量不同,则可以直接确定上述存储单元的位置。

应理解,上述仅列举了通过存储单元的偏移量关联各个存储单元,上述偏移量可以替换为存储单元的存储地址,例如物理地址,在本申请实施例中对此不作具体限定。

还应理解,表示存储报文单元的多个存储单元之间的索引关系的方式还有很多种,本申请实施例对此不作限定。例如,还可以通过一个键值对的数据结构表示多个存储单元之间的索引关系,基于图7所示,可以以第一存储单元的地址为键,第二存储单元的地址为第一值,第三存储单元的地址为第二值,其中,键值对中两个值的先后顺序可以指示第二存储单元和第三存储单元中存储的报文片段在报文单元中的位置。

可选地,上述报文片段的位置关系的标识可以直接使用报文单元中存储第一个报文片段的存储单元的偏移量。

例如,在图7中可以以offset1作为报文片段的位置关系的标识,相应地,确定了存储单元1的偏移量offset1之后,可以根据offset1以及al1[offset1]=offset2,确定偏移量offset2,再根据offset2以及al2[offset2]=offset3,确定偏移量offset3,最终结合偏移量与子bank标识确定存储单元1、存储单元2以及存储单元3。在确定各个存储单元的偏移量的过程中,根据确定存储单元的偏移量的先后关系也可以获取各个存储单元中的报文片段在报文单元中位置的先后顺序,即上述3个存储单元确定的先后顺序为:存储单元1至存储单元2再到存储单元3,相应地,报文片段之间的位置关系为第一报文片段与第二报文片段相邻,第二报文片段与第三报文片段相邻,且第一报文片段在报文单元中的位置位于第二报文片段的位置之前,第二报文片段在报文单元中的位置位于第三报文片段的位置之前。

需要说明的是,上述确定存储单元的先后顺序间接指示报文片段在报文单元中的位置,可以包括随着确定存储单元的时间增大,则存储单元中存储的报文片段在报文单元中的位置越靠后。或者随着确定存储单元的时间增大,则存储单元中存储的报文片段在报文单元中的位置越靠前。本申请实施例对此不作限定。

在本申请实施例中,通过存储单元的索引关系规定确定存储单元的先后顺序,以间接指示报文片段在报文单元中的位置,避免了控制器还需要存储额外的信息记录报文片段在报文单元中的位置,有利于节省存储资源。当然,如果记录单独的信息指示报文片段在报文单元中的位置,也可以不用通过存储单元之间的索引关系间接指示报文片段在报文单元中的位置。

上述多个存储单元之间的索引关系可以使用两种方式存储,下文结合图8至图9进行介绍。在图8或图9所示的存储器中控制器包括多个地址链接器,每个地址链接器对应一个子bank,用于记录与子bank中存储单元相关的存储单元的索引关系。

存储方式一,存储报文单元的多个存储单元之间的索引关系包括多个子索引关系时,多个子索引关系分别存储至对应的地址链接器中,其中对应的地址链接器为子索引关系中作为索引的存储单元所在的子bank对应的地址链接器。

例如,图8示出了本申请实施例中索引关系的存储方式的示意图。图8所示的控制器810中包括第一地址链接器至第三地址链接器,其中第一地址链接对应子bank1,第二地址链接器对应子bank2,第三地址链接器对应子bank3(图中未示出)。假设图7中的第一报文片段存储至第一子bank中的存储单元1,第一子bank中的存储单元1的偏移量为offset1,第二报文片段存储至第二子bank中的存储单元2,且第二子bank中的存储单元2的偏移量为offset2,第三报文片段存储至第三子bank中的存储单元3,且存储单元3的偏移量为offset3,则关联3个存储单元的子索引关系为:al1[offset1]=offset2,al2[offset2]=offset3,其中,al1中以存储单元1的偏移量为索引,确定存储单元2的偏移量,因此,将al1存储至第一地址链接器中。al2中以存储单元2的偏移量为索引,确定存储单元3的偏移量,因此,将al2存储至第二地址链接器中。

在本申请实施例中,将不同的索引关系分别存储至对应的地址链接器中,有利于均衡各个地址链接器的负担,合理利用地址链接器中的存储资源。

存储方式二、存储报文单元的多个存储单元之间的索引关系存储至对应的地址链接器中,其中对应的地址链接器为索引关系中第一个作为索引的存储单元所在的子bank对应的地址链接器。

需要说明的是,上述多个存储单元之间的索引关系可以包括一个子索引关系,或者多个子索引关系。由于子索引关系可以用al表示,若多个存储单元之间的索引关系包括多个子索引关系时,多个子索引关系可以称为“al组”(algroup)。

例如,图9示出了本申请实施例中索引关系的存储方式的示意图。图9所示的控制器910中包括第一地址链接器至第三地址链接器,其中第一地址链接器对应子bank1,第二地址链接器对应子bank2,第三地址链接器对应子bank3。假设图7中的第一报文片段存储至第一子bank中的存储单元1,第一子bank中的存储单元1的偏移量为offset1,第二报文片段存储至第二子bank中的存储单元2,且第二子bank中的存储单元2的偏移量为offset2,第三报文片段存储至第三子bank中的存储单元3,且存储单元3的偏移量为offset3,则关联3个存储单元的子索引关系为:al1[offset1]=offset2,al2[offset2]=offset3,其中,al1与al2为一个al组,且在al组中第一个作为索引的存储单元为存储单元1,则上述al组存储在存储单元1中所在的子bank对应的地址链接器中即第一地址链接器。

在本申请实施例中,属于一个al组的索引关系存储在一个地址链接器中,以便后读取存储报文单元的存储单元之间的索引关系时,可以以al组为单位在一个地址链接器中读取,以简化读取索引关系的流程。

下文结合具体的例子,基于图8和图9所示的两种存储方式,分别介绍向存储器中写报文片段的方法。应理解,上文中介绍的“报文片段的尺寸”、“存储单元的容量”都可以通过位宽体现。

假设基于图8所述的存储器中,在banka包含的4个子bank中,且每个子bank的位宽为wb。banka存在3个非满(non-full)子bank和1个满(full)子bank,其中子bank3为满子bank,即子bank3中没有处于空闲状态的存储单元。其他3个非满的子bank分别为子bank1,子bank2和子bank4。且需要向banka中写有效数据位宽为3wb的报文单元。

步骤1,控制器将位宽为3wb的报文单元分割为3个位宽为wb的报文片段,第一报文片段、第二报文片段以及第三报文片段。

步骤2,控制器根据报文单元的有效位宽3wb选择3个子bank用于存储报文单元,子bank1,子bank2和子bank4。

步骤3,子bank1对应的fapc1,子bank2对应的fapc2,以及子bank4对应的fapc4分别弹出一个处于空闲状态的存储单元的偏移量。

具体地,子bank1对应的fapc1弹出一个处于空闲状态的存储单元的偏移量为offset1,对应存储单元1,子bank2对应的fapc2弹出一个处于空闲状态的存储单元的偏移量为offset2,对应存储单元2,子bank4对应的fapc4弹出一个处于空闲状态的存储单元的偏移量为offset4,对应存储单元4。

需要说明的是,在执行了步骤3,确定每个报文片段对应的存储单元之后,需要将存储报文片段的存储单元反馈给输入总线移位器ibs,以便ibs根据报文片段与存储单元之间的对应关系,将报文片段调整至与存储单元对应的数据总线上传输。

步骤4,控制器向存储单元1中写第一报文片段,向存储单元2中写第二报文片段,向存储单元3中写第三报文片段。

步骤5,控制器在子bank1对应的地址链接器中记录存储单元之间的索引关系al1[offset1]=offset2,在子bank2对应的地址链接器中记录存储单元之间的索引关系al2[offset2]=offset4。

步骤6,banka所在的pb返回报文单元的存储地址给qm。

存储地址为a+1101+offset1,其中,a为存储该报文单元的banka的bankid。1101表示在当前bank中子bank1、子bank2、子bank4参与存储该报文单元的报文片段,而子bank3没有存储该报文单元的报文片段。offset1表示存储第一报文片段的存储单元的偏移量。

需要说明的是,上述步骤4、步骤5以及步骤6之间的执行顺序,本申请实施例不作具体限定,步骤4、步骤5和步骤6可以同时执行,也可以在执行步骤4之前,先执行步骤6。

假设基于图9所述的存储器中,在banka包含的4个子bank中,且每个子bank的位宽为wb。banka存在3个非满(non-full)子bank和1个满(full)子bank,其中子bank3为满子bank,即子bank3中没有处于空闲状态的存储单元。其他3个非满的子bank分别为子bank1,子bank2和子bank4。且需要向banka中写有效数据位宽为3wb的报文单元。

步骤1,控制器将位宽为3wb的报文单元分割为3个位宽为wb的报文片段,第一报文片段、第二报文片段以及第三报文片段。

步骤2,控制器根据报文单元的有效位宽3wb选择3个子bank用于存储报文单元,子bank1,子bank2和子bank4。

步骤3,子bank1对应的fapc1,子bank2对应的fapc2,以及子bank4对应的fapc4分别弹出一个处于空闲状态的存储单元的偏移量。

具体地,子bank1对应的fapc1弹出一个处于空闲状态的存储单元的偏移量为offset1,对应存储单元1,子bank2对应的fapc2弹出一个处于空闲状态的存储单元的偏移量为offset2,对应存储单元2,子bank4对应的fapc4弹出一个处于空闲状态的存储单元的偏移量为offset4,对应存储单元4。

需要说明的是,在执行了步骤3,确定每个报文片段对应的存储单元之后,需要将存储报文片段的存储单元反馈给输入总线移位器ibs,以便ibs根据报文片段与存储单元之间的对应关系,将报文片段调整至与存储单元对应的数据总线上传输。

步骤4,控制器向存储单元1中写第一报文片段,向存储单元2中写第二报文片段,向存储单元3中写第三报文片段。

步骤5,控制器在子bank1对应的地址链接器中记录报文单元对应的al组:al1[offset1]=offset2,以及al2[offset2]=offset4。

步骤6,banka所在的pb返回报文单元的存储地址给qm。

上文结合图1至图9说明了本申请实施例中存储器执行写操作的方法,下文结合图10介绍本申请实施例的存储器执行读操作的方法。需要说明的是,图10所示的方法与图4所示的方法相对应,图10所示的方法适用的存储器的架构、存储地址的表示方式、索引关系的存储方式、索引关系的表示方式也如上文所述。为了简洁,下文不再详细赘述,重点介绍与上文所示方法的区别之处。

图10是本申请实施例的存储器执行读操作的方法的流程图。图10所示的控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述方法包括步骤1010至步骤1030。

1010,控制器接收读请求,所述读请求携带待读取的第一报文片段的存储地址。

应理解,上述第一报文片段可以是通过图4所示的方法存储的“第一报文片段”,也可以不同于与图4所涉及的第一报文片段。

1020,控制器根据所述存储地址,确定存储所述第一报文片段的第一存储单元。

1030,控制器用于从所述第一存储单元中读取所述第一报文片段。

可选地,基于图5所示的存储器,可以通过子bank以及bank单元唯一确定存储单元,则步骤1020包括:控制器根据所述存储地址,从多个子bank中确定第一子bank;控制器根据所述存储地址,从所述第一子bank包含的存储单元中,确定所述第一存储单元。

需要说明的是,上述确定存储单元的过程中,可以先根据存储地址确定子bank,再根据存储地址确定bank单元。也可以先根据存储地址确定bank单元,再根据存储地址确定子bank,本申请实施例对此不作限定。

另外,关于存储地址的其他的具体形式可以参见上文中的介绍,在此不再赘述。

可选地,参见图6,所述控制器包含多个空闲地址池控制器fapc,所述多个fapc与所述多个子bank一一对应,每个fapc记录对应的子bank中处于空闲状态的存储单元的地址。

可选地,所述第一报文片段是第一报文单元中的报文片段,所述第一报文单元还包括第二报文片段,所述控制器获取用于指示所述第一报文片段与所述第二报文片段之间的位置关系信息,所述位置关系信息指示在所述第一报文中所述第一存储单元中的报文片段为位于所述第二存储单元中的报文片段之前,且与所述第二存储单元中的报文片段相邻,所述控制器根据所述第一报文片段、所述第二报文片段以及所述位置关系信息,得到所述第一报文单元。需要说明的是,上述位置关系信息可以包括指示所述第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段的信息。

需要说明的是,所述控制器根据所述第一报文片段、所述第二报文片段以及所述位置关系信息,得到所述第一报文单元,可以通过bank中的输出总线移位器(outputbusshifter,obs)调整报文片段的在地址总线上的位置,使得报文单元的各个报文片段在地址总线上的位置恢复到该报文单元进入pb时的位置,最终并将调整好的报文单元经oxb发送到读端口。

下文结合具体的例子,结合图8和图9分别介绍从存储器中读报文片段的方法。

假设基于图8所述的存储器中,banka包含4个子bank以及3个bank单元,且控制器在子bank1对应的地址链接器中记录存储单元之间的索引关系al1[offset1]=offset2,在子bank2对应的地址链接器中记录存储单元之间的索引关系al2[offset2]=offset4。

步骤1,控制器接收读请求,读请求用于请求读取报文单元,读请求携带报文单元的存储地址为a+1101+offset1,其中,a为存储该报文单元的banka的bankid。1101表示在当前bank中子bank1、子bank2、子bank4参与存储该报文单元的报文片段,而子bank3没有存储该报文单元的报文片段。offset1表示存储第一报文片段的存储单元的偏移量。

步骤2,控制器根据存储地址确定存储报文单元的子bank,以及存储第一报文片段的存储单元的偏移量offset1。

步骤3,控制器根据offset1,以及索引关系al1[offset1]=offset2,确定存储第二报文片段的存储单元2的偏移量为offset2;再根据offset2以及al2[offset2]=offset4,确定存储第三报文片段的存储单元3的偏移量为offset4。

具体地,控制器根据第一偏移量offset1,从子bank1对应的地址链接器中获取索引关系al1[offset1]=offset2,并根据获取的索引关系确定第二偏移量offset2。然后,控制器根据第二偏移量offset2,子bank2对应的地址链接器中获取索引关系al2[offset2]=offset4,并根据获取的索引关系确定第三偏移量为offset4。

步骤4,控制器结合存储报文单元的子bank,以及通过索引关系确定的存储单元的偏移量,确定存储报文单元的3个存储单元为:子bank1中偏移量为offset1的存储单元1,子bank2中偏移量为offset2的存储单元2,以及子bank4中偏移量为offset4的存储单元3。

步骤5,控制器从存储单元1读取第一报文片段,从存储单元2中读取第二报文片段男,从存储单元3中读取第三报文片段。

步骤6,控制器根据确定存储单元的先后顺序,确定第一报文片段,第二报文片段以及第三报文片段之间的位置,并生成报文单元。

步骤7,控制器反馈报文单元。具体地,将报文单元反馈至qm或者epp。

假设基于图9所述的存储器中,banka包含4个子bank以及3个bank单元,且控制器在子bank1对应的地址链接器中记录的al组包括al1[offset1]=offset2,以及al2[offset2]=offset4。

步骤1,控制器接收读请求,读请求用于请求读取报文单元,读请求携带报文单元的存储地址为a+1101+offset1,其中,a为存储该报文单元的banka的bankid。1101表示在当前bank中子bank1、子bank2、子bank4参与存储该报文单元的报文片段,而子bank3没有存储该报文单元的报文片段。offset1表示存储第一报文片段的存储单元的偏移量。

步骤2,控制器根据存储地址确定存储报文单元的子bank,以及存储第一报文片段的存储单元的偏移量offset1。

步骤3,控制器根据第一偏移量offset1,从子bank1对应的地址链接器中获取al组包括al1[offset1]=offset2,以及al2[offset2]=offset4。

具体地,控制器根据offset1,以及索引关系al1[offset1]=offset2,确定存储第二报文片段的存储单元2的偏移量为offset2;再根据offset2以及al2[offset2]=offset4,确定存储第三报文片段的存储单元3的偏移量为offset4。

步骤4,控制器结合存储报文单元的子bank,以及通过索引关系确定的存储单元的偏移量,确定存储报文单元的3个存储单元为:子bank1中偏移量为offset1的存储单元1,子bank2中偏移量为offset2的存储单元2,以及子bank4中偏移量为offset4的存储单元3。

步骤5,控制器从存储单元1读取第一报文片段,从存储单元2中读取第二报文片段男,从存储单元3中读取第三报文片段。

步骤6,控制器根据确定存储单元的先后顺序,确定第一报文片段,第二报文片段以及第三报文片段之间的位置,并生成报文单元。

步骤7,控制器反馈报文单元。具体地,将报文单元反馈至qm或者epp。

通常,为了提高存储单元的利用率,当bank中存储的报文片段被发送至目标设备后,可以释放存储报文片段的存储资源,将存储报文片段的存储单元的偏移量重新压至控制器的fapc中,以标识该存储单元处于空闲状态。下文结合图11介绍本申请实施例的释放存储器中存储单元的方法。

需要说明的是,图11所示的方法与图4所示的方法相对应,图11所示的方法适用的存储器的架构、存储地址的表示方式、索引关系的存储方式、索引关系的表示方式也如上文所述。为了简洁,下文不再详细赘述,重点介绍与上文所示方法的区别之处。

图11是本申请实施例的存储器执行释放操作的方法的流程图。所述存储器包括控制器以及第一bank,所述第一bank包括第一bank单元,所述第一bank单元包含多个存储单元,所述方法包括步骤1110至步骤1130。

1110,所述控制器用于接收释放请求,所述释放请求携带请求释放的第一存储单元的存储地址。

1120,所述控制器用于根据所述存储地址,确定所述第一存储单元。

1130,所述控制器用于记录所述第一存储单元处于空闲状态。

可选地,参见图6所示的存储器,所述第一bank包括多个子bank,每个子bank包括至少一个存储单元,所述多个子bank分别包括所述第一bank单元包含的多个存储单元,所述多个子bank与所述第一bank单元包含的多个存储单元一一对应,步骤1120,包括:所述控制器根据所述存储地址,从所述多个子bank中选择第一子bank;以及根据所述存储地址,从所述第一子bank包含的至少一个存储单元中选择所述第一存储单元。

可选地,所述控制器包含多个空闲地址池控制器fapc,所述多个fapc与所述多个子bank一一对应,每个fapc记录对应的子bank中处于空闲状态的存储单元的地址,步骤1130,包括:所述控制器将所述第一存储单元的地址添加至所述第一子bank对应的fapc中。

可选地,所述第一报文片段是第一报文单元中的片段,所述第一报文单元还包括第二报文片段,所述控制器用于根据所述第一存储单元以及信息,确定存储第二存储单元,所述信息指示所述第一存储单元存储的报文片段和所述第二存储单元存储的报文片段是一个报文中相邻的报文片段;所述控制器用于记录所述第二存储单元处于空闲状态。

需要说明的是,上述信息可以是上文中介绍的存储报文单元的多个存储单元之间的索引关系,详细请参见上文。

可选地,所述信息以数组表示,所述数组中的第x个元素在所述数组中的元素序号(x)指示所述第一存储单元,所述第x个元素的值指示所述第二存储单元,x为正整数。

下文结合具体的例子,结合图8和图9分别介绍从存储器中读报文片段的方法。

假设基于图8所述的存储器中,banka包含4个子bank以及3个bank单元,且控制器在子bank1对应的地址链接器中记录存储单元之间的索引关系al1[offset1]=offset2,在子bank2对应的地址链接器中记录存储单元之间的索引关系al2[offset2]=offset4。

步骤1,控制器接收释放请求,释放请求携带的存储地址为a+1101+offset1。

其中,a为存储该报文单元的banka的bankid。1101表示在当前bank中子bank1、子bank2、子bank4参与存储该报文单元的报文片段,而子bank3没有存储该报文单元的报文片段。offset1表示存储第一报文片段的存储单元的偏移量。

步骤2,控制器根据存储地址确定存储报文单元的子bank,以及第一偏移量offset1。

步骤3,控制器根据第一偏移量offset1,从子bank1对应的地址链接器中获取索引关系al1[offset1]=offset2,并根据获取的索引关系确定第二偏移量offset2。

步骤4,控制器根据第二偏移量offset2,子bank2对应的地址链接器中获取索引关系al2[offset2]=offset4,并根据获取的索引关系确定确定第三偏移量为offset4。

步骤5,控制器结合存储地址中指示的子bank,以及通过索引关系确定的偏移量,确定需要释放的3个存储单元为:子bank1中偏移量为offset1的存储单元1,子bank2中偏移量为offset2的存储单元2,以及子bank4中偏移量为offset4的存储单元3。

步骤6,控制器将存储单元1的偏移量offset1压入子bank1对应的fapc中,将存储单元2的偏移量offset2压入子bank2对应的fapc中,将存储单元3的偏移量bank4压入子bank4对应的fapc中。

假设基于图9所述的存储器中,banka包含4个子bank以及3个bank单元,且控制器在子bank1对应的地址链接器中记录al组包括:al1[offset1]=offset2,以及al2[offset2]=offset4。

步骤1,控制器接收释放请求,释放请求携带的存储地址为a+1101+offset1。

其中,a为存储该报文单元的banka的bankid。1101表示在当前bank中子bank1、子bank2、子bank4参与存储该报文单元的报文片段,而子bank3没有存储该报文单元的报文片段。offset1表示存储第一报文片段的存储单元的偏移量。

步骤2,控制器根据存储地址确定存储报文单元的子bank,以及第一偏移量offset1。

步骤3,控制器根据第一偏移量offset1,从子bank1对应的地址链接器中获取索引关系al1[offset1]=offset2以及al2[offset2]=offset4。

具体地,控制器根据第一偏移量offset1,以及al1[offset1]=offset2确定第二偏移量offset2,控制器根据第二偏移量offset2,以及al2[offset2]=offset4,确定第三偏移量为offset4。

步骤4,控制器结合存储地址中指示的子bank,以及通过索引关系确定的偏移量,确定需要释放的3个存储单元为:子bank1中偏移量为offset1的存储单元1,子bank2中偏移量为offset2的存储单元2,以及子bank4中偏移量为offset4的存储单元3。

步骤5,控制器将存储单元1的偏移量offset1压入子bank1对应的fapc中,将存储单元2的偏移量offset2压入子bank2对应的fapc中,将存储单元3的偏移量bank4压入子bank4对应的fapc中。

上文结合图1至图11详细介绍了本申请实施例的方法,下文结合图12介绍本申请实施例的控制器的结构。需要说明的是,控制器基于下文所示的硬件结构,可以执行上述方法步骤中的一部分步骤或全部步骤,例如,图4、图10以及图11中的步骤。具体的实现过程可以参见上文的介绍,为了简洁,在此不再赘述。

控制器1200可以包括存储器1210、处理器1220以及输入/输出接口1230,具体如图12所示。图12是本申请另一实施例的控制器的示意性框图。图12所示的控制器1200可以包括:存储器1210、处理器1220、输入/输出接口1230。其中,存储器1210、处理器1220、输入/输出接口1230通过内部连接通路相连,该存储器1210用于存储指令,该处理器1220用于执行该存储器1220存储的指令,以控制输入/输出接口1230接收输入的数据和信息,输出操作结果等数据,并控制收发机1240发送信号。

可选地,图4所示的方法中,步骤410以及步骤430可以由控制器通过输入/输出接口1230执行,步骤420可以由控制器通过处理器1220执行。

可选地,图10所示的方法中,步骤1010以及步骤1030可以由控制器通过输入/输出接口1230执行,步骤1020可以由控制器通过处理器1220执行。

可选地,图11所示的方法中,步骤1110可以由控制器通过输入/输出接口1230执行,步骤1020以及步骤1130可以由控制器通过处理器1220执行。

在实现过程中,上述方法的各步骤可以通过处理器1220中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1210,处理器1220读取存储器1210中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。

应理解,本申请实施例中,该处理器可以为中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

还应理解,本申请实施例中,该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。处理器的一部分还可以包括非易失性随机存取存储器。例如,处理器还可以存储设备类型的信息。

应理解,在本申请实施例中,“与a相应的b”表示b与a相关联,根据a可以确定b。但还应理解,根据a确定b并不意味着仅仅根据a确定b,还可以根据a和/或其它信息确定b。

应理解,本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digitalsubscriberline,dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够读取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,数字通用光盘(digitalvideodisc,dvd))或者半导体介质(例如,固态硬盘(solidstatedisk,ssd))等。

以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1