CN1780254A - 网络处理器中使用缓冲区的方法 - Google Patents
网络处理器中使用缓冲区的方法 Download PDFInfo
- Publication number
- CN1780254A CN1780254A CNA2004100912136A CN200410091213A CN1780254A CN 1780254 A CN1780254 A CN 1780254A CN A2004100912136 A CNA2004100912136 A CN A2004100912136A CN 200410091213 A CN200410091213 A CN 200410091213A CN 1780254 A CN1780254 A CN 1780254A
- Authority
- CN
- China
- Prior art keywords
- buffering area
- data
- sub
- buffer descriptor
- pointer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000000872 buffer Substances 0.000 title claims abstract description 164
- 238000000034 method Methods 0.000 title claims abstract description 37
- 230000003139 buffering effect Effects 0.000 claims description 77
- 238000012545 processing Methods 0.000 claims description 36
- 238000012986 modification Methods 0.000 claims description 2
- 230000004048 modification Effects 0.000 claims description 2
- 230000003068 static effect Effects 0.000 description 9
- 238000013461 design Methods 0.000 description 5
- 230000015572 biosynthetic process Effects 0.000 description 4
- 239000002699 waste material Substances 0.000 description 4
- 238000000151 deposition Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000009977 dual effect Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 210000000352 storage cell Anatomy 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000007087 memory ability Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种网络处理器中使用缓冲区的方法,包括:配置网络处理器中相邻模块间所需缓冲区;将每个所述缓冲区划分为预定个数的子缓冲区并使其构成环形链表;当相邻模块收/发数据需要缓冲区时,依次从所述环形链表中获取相应的子缓冲区读出/写入数据。使用本发明,有利于软件中出现问题的定位,简单有效地实现对缓冲区的可靠管理,对缓冲区的维护方便、可靠。
Description
技术领域
本发明涉及数据传输网中的数据交换,具体涉及一种网络处理器中使用缓冲区的方法。
背景技术
网络处理器今天已得到广泛应用,它在各种网络业务和不同性能级别的应用中担任着不同的任务。在未来的网络中,网络处理器能力的拓展将取决于NGN(下一代网络)设备带来的业务智能化水平。完全融合IP(因特网协议)网络技术的NGN需要在以同等效率提供数据、语音和视频业务的同时,还将为分布式内容、广播级视频等新兴的带宽密集型服务提供基础平台,这些都给网络处理器提出了新的任务要求。网络技术及应用的发展,对网络设备的容量及单板的处理能力的要求越来越高。在网络处理器中通常需要多个协处理器同时并行工作,一个数据包的处理要经过多个模块,由几个协处理器协同完成。为了缓和不同模块间速度不匹配的矛盾,减少对各模块中CPU的中断频率,以及提高CPU和输入/输出单元之间的并行性,需要引入缓冲,对各模块的收发数据进行缓存。
通常,对通信设备内部缓冲区的管理有以下两种方式:
(1)采用静态分配的方式。在设计时对设备内每个模块分配固定大小的内存作为数据发送和接收时的专用缓冲区,在数据收发过程中反复使用。
这种静态分配方式虽然处理简单,但由于各模块处理功能和处理速度不同,其数据流量也处于不断变化之中,因此,有可能会使得某些内存空间长时间空闲,而有些内存空间又会拥挤,甚至溢出。可见,这种方式会造成存储空间的浪费,严重时还会引起正常数据的丢失。
(2)采用动态管理的方式。为了提高缓冲区的利用率,设计一个缓冲区池,将所有可利用的缓冲区空间放入该缓冲区池,池中的缓冲区可供多个模块共享。
对于既可用于输入和输出的公用缓冲区,至少应含有以下三种类型的缓冲区:空闲缓冲区;装满输入数据的缓冲区;装满输出数据的缓冲区。为了管理上的方便,建立空缓冲队列。当某模块发送数据时,首先向缓冲区池中请缓存空间,从空缓冲队列中为其分配缓存空间,并将该缓存空间链接到输出队列中;当下一个模块接收该数据时,向缓冲区池申请缓存空间,从空缓冲队列中为其分配缓存空间,并根据输出队列从对应的缓存空间读取该数据并写到为其分配的缓存空间,同时,将输出队列中对应的缓存空间释放并链接到空缓冲队列中,将写入数据后的缓存空间链接到输入队列中。
由于多个模块共享缓冲区池,因此,有可能会因某个模块出现故障而造成内存碎片,严重时还可能会耗尽系统的资源。而且,当设备内模块较多时,对缓冲区的管理实现复杂,问题难以定位。
可见,对存放数据包的缓冲区的管理直接关系到整个处理流程的结构设计,不合理的设计架构会影响到网络设备的处理能力和速度,影响系统的可靠性。
发明内容
本发明要解决的技术问题是提供一种网络处理器中使用缓冲区的方法,以克服现有技术中单纯采用静态或动态分配缓冲区的方式引起的系统资源浪费及影响系统可靠性的缺点,简单有效地实现对缓冲区的可靠管理。
为此,本发明提供如下的技术方案:
一种网络处理器中使用缓冲区的方法,包括:
A、配置所述网络处理器中相邻模块间所需缓冲区;
B、将每个所述缓冲区划分为预定个数的子缓冲区并使其构成环形链表;
C、当所述相邻模块收/发数据需要缓冲区时,依次从所述环形链表中获取所需数量的子缓冲区读出/写入数据。
所述步骤B包括:
B1、设置每个子缓冲区对应的缓冲区描述符,所述缓冲区描述符的信息包括:标志位、状态、偏移值、长度、缓冲区指针、链表指针;
B2、根据所述缓冲区描述符的信息建立所述环形链表。
所述步骤B2包括:
B21、根据所述缓冲区描述符中的链表指针建立存放空闲缓冲区描述符的空闲链表;
B22、将所述缓冲区指针指向其所在缓冲区描述符对应的子缓冲区。
所述步骤C包括:
C1、分别建立读指针和写指针;
C2、当所述相邻模块需要发送数据时,通过所述写指针获取空闲子缓冲区并写入所述数据;
C3、当所述相邻模块需要接收数据时,通过所述读指针获取存储所述数据的子缓冲区并读出需要接收的数据。
所述步骤C2包括:
C21、获取所述写指针指向的当前缓冲区描述符;
C22、根据所述当前缓冲区描述符中的标志位获取所述环形链表中的空闲子缓冲区;
C23、将所述数据写入所述空闲子缓冲区;
C24、修改所述当前缓冲区描述符中的信息;
C25、将所述写指针下移。
所述步骤C22包括:
根据所述当前缓冲区描述符中的标志位判断所述环形链表中的当前缓冲区是否空闲;
如果不是空闲,则丢弃所述数据;
如果是空闲,则根据所述缓冲区描述符中的缓冲区指针获取对应的空闲子缓冲区。
所述步骤C24包括:
将所述当前缓冲区描述符中的标志位设置为满状态;
根据写入数据的偏移位置及实际长度填写所述当前缓冲区描述符中的偏移值和长度域;
如果写入所述空闲子缓冲区中的数据出错,则设置所述当前缓冲区描述符中的状态域为错误状态。
所述步骤C3包括:
C31、获取所述读指针指向的当前缓冲区描述符;
C32、根据所述当前缓冲区描述符中的标志位获取所述环形链表中已存储数据的子缓冲区;
C33、根据所述当前缓冲区描述符中的信息读取所述已存储数据的子缓冲区中的数据;
C34、清除所述当前缓冲区描述符中的标志信息;
C35、将所述读指针下移。
所述步骤C32包括:
根据所述当前缓冲区描述符中的标志位判断所述环形链表中的当前子缓冲区是否存储了数据;
如果没有,则结束;
如果有,则根据所述缓冲区描述符中的缓冲区指针获取对应的已存储数据的子缓冲区。
所述步骤C33包括:
当所述当前缓冲区描述符中的状态域为错误状态时,则丢弃所述已存储数据的子缓冲区中的数据;
当所述当前缓冲区描述符中的状态域为正常状态时,读取所述已存储数据的子缓冲区中的数据。
由以上本发明提供的技术方案可以看出,本发明结合静态和动态分配缓冲区各自的优点,采用静态和动态相结合的方式对缓冲区进行管理,在配置时动态分配缓冲区的数量,处理中静态操作。也就是说,在配置每两个相邻模块之间所需缓冲区时是动态分配的,可根据实际需要,确定其所需缓冲区的大小;该缓冲区配置好后,对其进行的存取操作是静态的,不需要申请释放过程。协处理器及模块之间接口统一、简单,各模块间缓冲区格式一致,因而实现简单、结构清晰、可靠性高;由于不需要申请释放过程,一旦某个模块出现问题不会影响到整个系统,而且通过对不同模块及缓冲区建立对应关系,使得出现问题时定位简单,方便了系统维护。利用本发明,可以在提高缓冲区利用率的同时保证系统稳定可靠地运行。
附图说明
图1是本发明方法的实现流程图;
图2是缓冲区描述符的结构示意图;
图3是缓冲区描述符的空闲链表的结构示意图;
图4是向缓冲区写入数据的流程图;
图5是从缓冲区读出数据的流程图。
具体实施方式
本发明的核心在于根据实际需要,将网络处理器的缓冲区划分为大小相同或不同的多个缓冲区,分别分配给相邻模块使用,也就是说,每两个相邻模块之间有一个固定大小的缓冲区可以使用,实现相邻模块间所需缓冲区静态配置;对于每个这样的缓冲区采用相同的管理方式:首先将其划分为多个子缓冲区;设置每个子缓冲区对应的缓冲区描述符;根据缓冲区描述符的信息使子缓冲区构成一个环形链表。当对应的相邻模块收/发数据时,就可以依次从该环形链表中获取相应的子缓冲区读出/写入数据,实现对每个模块所需缓冲区的动态分配。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和实施方式对本发明作进一步的详细说明。
参照图1,图1是本发明方法的流程图,包括以下步骤:
步骤101:配置网络处理器中相邻模块间所需缓冲区。
本发明与现有技术的根本区别点之一在于根据实际需要,将网络处理器的缓冲区划分为大小相同或不同的多个缓冲区,分别分配给相邻模块使用,也就是说,每两个相邻模块之间有一个固定大小的缓冲区可以使用,实现相邻模块间所需缓冲区静态配置,这样,将全部缓冲区分割使用,使某个模块出现问题时不会影响到整个系统。
对于每个这样的缓冲区采用相同的管理方式进行管理,即将其划分为多个子缓冲区并设置对应的缓冲区描述符;根据缓冲区描述符的信息使子缓冲区构成一个环形链表。
因此,进到步骤102:将每个缓冲区划分为预定个数的子缓冲区。每个子缓冲区作为一个存储单位使用。由于每个缓冲区的大小是固定的,因此,如果模块间传送的数据包较长,则可以将每个子缓冲区的容量设定的大一些,相应的子缓冲区的个数就较少;反之,如果模块间传送的数据包较短,则可以将每个子缓冲区的容量设定的小一些,相应的子缓冲区的个数就多。这样,就可以避免子缓冲区划分不当造成的实现复杂或对缓冲空间的浪费。比如,如果子缓冲空间划分过小,一个数据包就需要占用多个子缓冲区;如果子缓冲空间过大,远远大于一个数据包的长度时,由于每个子缓冲区是作为一个存储单位使用,因此就会浪费很多缓冲区资源。
步骤103:设置每个子缓冲区对应的缓冲区描述符,该缓冲区描述符用于存放对应的子缓冲区的信息数据,
其信息数据包括:标志位、状态信息、偏移值、长度、缓冲区指针、链表指针。
例如,可以采用如图2所示缓冲区描述符的格式,其中:
标志位表示该子缓冲区是否已经存放了数据;
状态信息表示该子缓冲区中存放的数据的状态,比如,存放的数据是否正确;在一个数据包需要多个子缓冲区时该子缓冲区是否为存放某数据包的最后一个子缓冲区等;
偏移值表示数据开始存放位置的偏移值,该值是相对于子缓冲区起始位置的一个偏移值;
长度表示对应的子缓冲区中存放数据的实际长度;
缓冲区指针表示该缓冲区描述符对应的子缓冲区的地址;
链表指针表示指向存放空闲缓冲区描述符的空闲链表中下一个缓冲区描述符的指针。
步骤104:根据缓冲区描述符的信息建立子缓冲区的环形链表。
因为每个缓冲区描述符通过链表指针与下一个缓冲区描述符相连,因此通过链表指针即可将这些缓冲区描述符构成一个环,由于每个缓冲区描述符通过其缓冲区指针对应唯一的子缓冲区,这样就可以建立起子缓冲区的环形链表。将所有的缓冲区描述符都作为资源,构造空闲缓冲区描述符资源池,所有的子缓冲区即组成该空闲缓冲区描述符资源池对应的空闲缓冲区资源池。
在系统初始化时,首先初始化缓冲区描述符的各个字段和子缓冲区中的数据区,同时将缓冲区描述符与子缓冲区一一对应起来,使每个缓冲区描述符都指向一个子缓冲区。然后,构造一个空闲链表,其中存放空闲缓冲区描述符的指针。当需要缓冲区读写数据时,通过该指针及描述符中的信息即可找到对应的子缓冲区,然后,就可以对该子缓冲区进行相应的操作。
即进到步骤105:当相邻模块收/发数据需要缓冲区时,依次从其对应的环形链表中获取相应的子缓冲区读出/写入数据。
在上述对子缓冲区操作过程中,主要是通过空闲链表来实现的,缓冲区描述符的空闲链表的结构如图3所示。
比如,在ATM(异步传输模式)系统中,网络处理器需要配置VC(虚连接)。这时,可以根据实际流量和突发量的大小,从空闲链表中取出不同数量的缓冲区描述符及对应的缓冲区分配给VC。由于这些缓冲区通过缓冲区描述符中的链表指针连接成一个环状的单向链表,形成单向队列结构,所以可以灵活地分配不同的数量,如果需要缓存能力强,就多分配一些。在删除VC时,则将VC使用的所有缓冲区描述符环形链表中的缓冲区描述符再加入到空闲链表中。
为了简化设计,本发明对缓冲区的操作通过读、写指针来实现。
仍然参照图3所示的缓冲区描述符的空闲链表,读指针和写指针的状态有以下两种情况:
(1)如果从读指针到写指针之间的缓冲区描述符的标志位都为1,则表示这两个指针之间的缓冲区描述符都是满状态,即对应的子缓冲区中都已经存放了数据,读指针指向第一个满的缓冲区描述符;
(2)如果从写指针到读指针之间的缓冲区描述符的标志位都为0,则表示这两个指针之间的缓冲区描述符都是空状态,即对应的子缓冲区中没有存放任何数据,写指针指向第一个空的缓冲区描述符。
读指针始终位于写指针的后面,两个指针都是每处理一个缓冲区描述符向下移动指向下一个缓冲区描述符,读指针永远不会也不能超过写指针。
如果读、写指针指向同一个缓冲区描述符,有两种可能,一种可能是所有的缓冲区描述符都是空的,另一种可能是所有的缓冲区描述符都是满的。这时就需要根据指针所指向的缓冲区描述符的标志位来判断是满还是空。
系统初始化时,读指针和写指针指向缓冲区描述符空闲链表中的同一个缓冲区描述符。
本技术领域人员知道,在网络处理器中,一个模块接到数据后,首先需要进行相应的协议处理,然后存放在缓冲区中,传给下一个模块进行处理。这个过程在本发明中就是通过上述写指针和读指针来完成的。下面将对此进行详细描述。
向缓冲区写入数据的过程如图4所示,包括以下步骤:
步骤401:接收数据。
步骤402:获取写指针指向的当前缓冲区描述符。
步骤403:取出当前缓冲区描述符中的标志位。根据该标志位即可得知当前缓冲区描述符对应的子缓冲区是否为空,也就是说是否还有空闲的缓冲区间来存储接收的数据。
因此,进到步骤404:判断标志位是否为满状态。
如果是,则表示已没有空闲的缓冲区间,这时,进到步骤405:丢弃当前数据。然后,进到步骤412:处理过程结束。
如果不是,则表示仍有空闲的缓冲区间,这时,进到步骤406:按照相关协议对数据进行处理。
然后,进到步骤407:判断数据处理过程中是否出错。
如果数据处理出错,则进到步骤408:丢弃当前数据并设置状态域中的错误标志。
然后,进到步骤411:修改当前缓冲区描述符中的信息并将写指针下移,使其指向下一个缓冲区描述符,即将当前缓冲区描述符中链表指针的值赋给写指针。
缓冲区描述符中的信息修改如下:
将标志位设置为满状态;根据写入数据的偏移位置及实际长度填写当前缓冲区描述符中的偏移值和长度域;设置状态域为错误状态。
如果数据处理正常,则进到步骤409:根据缓冲区描述符中的缓冲区指针获取对应的空闲子缓冲区。
步骤410:将数据写入空闲子缓冲区。
然后,进到步骤411:修改当前缓冲区描述符中的信息并将写指针下移,使其指向下一个缓冲区描述符,即将当前缓冲区描述符中链表指针的值赋给写指针。
缓冲区描述符中的信息修改如下:
将标志位设置为满状态;根据写入数据的偏移位置及实际长度填写当前缓冲区描述符中的偏移值和长度域。
最后,进到步骤412:处理过程结束。
从缓冲区中读出数据的过程如图5所示,包括以下步骤:
首先,在步骤501:获取读指针指向的当前缓冲区描述符。
进到步骤502:读取当前缓冲区描述符中的标志位。
步骤503:判断标志位是否为满状态,也就是说判断环形链表中是否有已存储数据的子缓冲区。
如果不是,则进到步骤511:处理过程结束。
如果是,则说明当明缓冲区描述符对应的子缓冲区中有数据要处理,此时,进到步骤504:读取当前缓冲区描述符中的状态域。
进到步骤505:根据状态域中的错误标志判断数据是否出错。
如果出错,则进到步骤506:丢弃当前数据并进行出错统计。
然后,进到步骤510:清除当前缓冲区描述符中的标志信息并将读指针下移,使其指向下一个缓冲区描述符,即将当前缓冲区描述符中链表指针的值赋给读指针。
如果未出错,则进到步骤507:读取当前缓冲区描述符中的长度和偏移值。
步骤508:根据缓冲区描述符中的缓冲区指针获取对应的已存储数据的子缓冲区。
步骤509:对已存储数据的子缓冲区中的数据进行相关协议处理。
然后,进到步骤510:清除子缓冲区对应的缓冲区描述符中的标志信息并将读指针下移。缓冲区描述符中的标志信息包括:标志位、长度、偏移值和状态域,将其全部清零。
然后,进到步骤511:处理过程结束。
当接收的数据包较大时,需要多个子缓冲区存储这些数据。为了便于正确识别完整的数据包,可以在状态域中设置一个数据起始标志位FIRST和一个数据结束标志位LAST,分别表示存储数据包的起始和最后一个子缓冲区。
这样,对较长的数据包可以采用以下两种方式进行处理:
(1)上级模块发送数据时,如果没有足够的缓冲区存储数据,即丢弃该数据包。
首先,根据需要发送的数据长度计算所需子缓冲区的数量。因为每个子缓冲区的大小是固定的,当模块接收数据包后,根据计算即可获知该数据包需要占用的子缓冲区的数量。然后,以当前缓冲区描述符为起点,根据缓冲区描述符中的标志位判断空闲链表中是否有足够的子缓冲区。如果有,则依次将数据存入各缓冲区描述符中缓冲区指针指向的空闲子缓冲区。如果没有,则丢弃该数据包。
采用这种方式,所存储的数据包都是完整的。下级模块读取数据时,根据状态域中的数据起始标志位FIRST和数据结束标志位LAST即可获得完整的数据包。但这种方式每次接收数据后,都需要检测是否有足够的缓冲区,效率较低。
将数据依次写入子缓冲区,在读取时,丢弃存储不完整的数据包。
(2)上级模块发送数据时,将数据依次写入子缓冲区,下级模块接收数据时,丢弃存储不完整的数据包。
发送数据时,不需要计算存储该数据所需子缓冲区的个数,而是只判断当前写指针指向的缓冲区描述符是否空闲,如果空闲,则将需要发送的数据写入其对应的子缓冲区,并设置数据起始标志位FIRST,表明是该数据包的第一个子缓冲区,然后,再根据当前缓冲区描述符中的链表指针判断下一个缓冲区描述符是否空闲,如果空闲,则将数据写入其对应的子缓冲区。重复该过程,如果有足够空间,则在写最后一个子缓冲区后,设置其对应的缓冲区描述符中的数据结束标志位LAST;如果没有足够空间,则将后面的数据丢弃。
这样,就会存储一个不完整的数据包。下级模块读取数据时,根据状态域中的数据起始标志位FIRST获知该数据包的起点,但不能得到对应于该起点的数据结束标志位LAST。当读到下一个缓冲区描述符中的数据起始标志位FIRST时,将前面读取的不完整数据包丢弃。
可见,不论采用哪种方式,都能获得一个完整的数据包,保证了数据传递的正确性。
由上述对缓冲区操作的过程可见,本发明借助于缓冲区描述符中的缓冲区指针,建立起缓冲区描述符和子缓冲区之间的对应关系,可以方便数据的直接交换;通过缓冲区描述符中的链表指针使子缓冲区构成环形链表,可以灵活地配置缓冲区的数量;通过读、写指针不需对缓冲区进行申请和释放过程即可完成对缓冲区的操作,可以提高缓冲区管理的可靠性。子缓冲区构成环形链表循环使用,最大限度地利用缓冲资源。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。
Claims (10)
1、一种网络处理器中使用缓冲区的方法,其特征在于,所述方法包括:
A、配置所述网络处理器中相邻模块间所需缓冲区;
B、将每个所述缓冲区划分为预定个数的子缓冲区并使其构成环形链表;
C、当所述相邻模块收/发数据需要缓冲区时,依次从所述环形链表中获取所需数量的子缓冲区读出/写入数据。
2、根据权利要求1所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤B包括:
B1、设置每个子缓冲区对应的缓冲区描述符,所述缓冲区描述符的信息包括:标志位、状态、偏移值、长度、缓冲区指针、链表指针;
B2、根据所述缓冲区描述符的信息建立所述环形链表。
3、根据权利要求2所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤B2包括:
B21、根据所述缓冲区描述符中的链表指针建立存放空闲缓冲区描述符的空闲链表;
B22、将所述缓冲区指针指向其所在缓冲区描述符对应的子缓冲区。
4、根据权利要求3所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C包括:
C1、分别建立读指针和写指针;
C2、当所述相邻模块需要发送数据时,通过所述写指针获取空闲子缓冲区并写入所述数据;
C3、当所述相邻模块需要接收数据时,通过所述读指针获取存储所述数据的子缓冲区并读出需要接收的数据。
5、根据权利要求4所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C2包括:
C21、获取所述写指针指向的当前缓冲区描述符;
C22、根据所述当前缓冲区描述符中的标志位获取所述环形链表中的空闲子缓冲区;
C23、将所述数据写入所述空闲子缓冲区;
C24、修改所述当前缓冲区描述符中的信息;
C25、将所述写指针下移。
6、根据权利要求5所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C22包括:
根据所述当前缓冲区描述符中的标志位判断所述环形链表中的当前缓冲区是否空闲;
如果不是空闲,则丢弃所述数据;
如果是空闲,则根据所述缓冲区描述符中的缓冲区指针获取对应的空闲子缓冲区。
7、根据权利要求5所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C24包括:
将所述当前缓冲区描述符中的标志位设置为满状态;
根据写入数据的偏移位置及实际长度填写所述当前缓冲区描述符中的偏移值和长度域;
如果写入所述空闲子缓冲区中的数据出错,则设置所述当前缓冲区描述符中的状态域为错误状态。
8、根据权利要求4所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C3包括:
C31、获取所述读指针指向的当前缓冲区描述符;
C32、根据所述当前缓冲区描述符中的标志位获取所述环形链表中已存储数据的子缓冲区;
C33、根据所述当前缓冲区描述符中的信息读取所述已存储数据的子缓冲区中的数据;
C34、清除所述当前缓冲区描述符中的标志信息;
C35、将所述读指针下移。
9、根据权利要求8所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C32包括:
根据所述当前缓冲区描述符中的标志位判断所述环形链表中的当前子缓冲区是否存储了数据;
如果没有,则结束;
如果有,则根据所述缓冲区描述符中的缓冲区指针获取对应的已存储数据的子缓冲区。
10、根据权利要求8所述的网络处理器中使用缓冲区的方法,其特征在于,所述步骤C33包括:
当所述当前缓冲区描述符中的状态域为错误状态时,则丢弃所述已存储数据的子缓冲区中的数据;
当所述当前缓冲区描述符中的状态域为正常状态时,读取所述已存储数据的子缓冲区中的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2004100912136A CN1780254A (zh) | 2004-11-17 | 2004-11-17 | 网络处理器中使用缓冲区的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2004100912136A CN1780254A (zh) | 2004-11-17 | 2004-11-17 | 网络处理器中使用缓冲区的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1780254A true CN1780254A (zh) | 2006-05-31 |
Family
ID=36770373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2004100912136A Pending CN1780254A (zh) | 2004-11-17 | 2004-11-17 | 网络处理器中使用缓冲区的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1780254A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101551736B (zh) * | 2009-05-20 | 2010-11-03 | 杭州华三通信技术有限公司 | 基于地址指针链表的缓存管理装置和方法 |
CN101309261B (zh) * | 2008-07-14 | 2011-04-06 | 成都卫士通信息产业股份有限公司 | 一种网络数据报文处理方法及系统、设备 |
CN101651580B (zh) * | 2009-09-08 | 2012-09-05 | 中兴通讯股份有限公司 | 一种触发双机切换的方法及装置 |
CN1901548B (zh) * | 2006-07-26 | 2012-10-03 | 白杰 | 缓冲区管理方法 |
CN101674479B (zh) * | 2008-09-11 | 2013-07-03 | 索尼株式会社 | 信息处理设备和方法 |
CN103678167A (zh) * | 2012-09-12 | 2014-03-26 | 想象力科技有限公司 | 动态可调整大小的循环缓冲区 |
CN104468404A (zh) * | 2014-11-07 | 2015-03-25 | 迈普通信技术股份有限公司 | 一种缓冲区配置方法及装置 |
CN111008164A (zh) * | 2019-12-04 | 2020-04-14 | 天津七一二通信广播股份有限公司 | 一种基于存储映射类总线的节点间多缓存式通信方法 |
CN111290708A (zh) * | 2020-01-19 | 2020-06-16 | 成都中嵌自动化工程有限公司 | 一种基于动态调整的环形缓冲区的数据处理方法及设备 |
CN114598669A (zh) * | 2022-03-07 | 2022-06-07 | 潍柴动力股份有限公司 | 一种报文的存储方法、装置及设备 |
-
2004
- 2004-11-17 CN CNA2004100912136A patent/CN1780254A/zh active Pending
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1901548B (zh) * | 2006-07-26 | 2012-10-03 | 白杰 | 缓冲区管理方法 |
CN101309261B (zh) * | 2008-07-14 | 2011-04-06 | 成都卫士通信息产业股份有限公司 | 一种网络数据报文处理方法及系统、设备 |
CN101674479B (zh) * | 2008-09-11 | 2013-07-03 | 索尼株式会社 | 信息处理设备和方法 |
CN101551736B (zh) * | 2009-05-20 | 2010-11-03 | 杭州华三通信技术有限公司 | 基于地址指针链表的缓存管理装置和方法 |
US8499105B2 (en) | 2009-05-20 | 2013-07-30 | Hangzhou H3C Technologies Co., Ltd. | Buffer manager and buffer management method based on address pointer linked list |
CN101651580B (zh) * | 2009-09-08 | 2012-09-05 | 中兴通讯股份有限公司 | 一种触发双机切换的方法及装置 |
CN103678167A (zh) * | 2012-09-12 | 2014-03-26 | 想象力科技有限公司 | 动态可调整大小的循环缓冲区 |
CN103678167B (zh) * | 2012-09-12 | 2019-02-12 | 美普思技术有限责任公司 | 动态可调整大小的循环缓冲区 |
CN104468404A (zh) * | 2014-11-07 | 2015-03-25 | 迈普通信技术股份有限公司 | 一种缓冲区配置方法及装置 |
CN104468404B (zh) * | 2014-11-07 | 2017-08-29 | 迈普通信技术股份有限公司 | 一种缓冲区配置方法及装置 |
CN111008164A (zh) * | 2019-12-04 | 2020-04-14 | 天津七一二通信广播股份有限公司 | 一种基于存储映射类总线的节点间多缓存式通信方法 |
CN111290708A (zh) * | 2020-01-19 | 2020-06-16 | 成都中嵌自动化工程有限公司 | 一种基于动态调整的环形缓冲区的数据处理方法及设备 |
CN114598669A (zh) * | 2022-03-07 | 2022-06-07 | 潍柴动力股份有限公司 | 一种报文的存储方法、装置及设备 |
CN114598669B (zh) * | 2022-03-07 | 2024-03-19 | 潍柴动力股份有限公司 | 一种报文的存储方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1219384C (zh) | 多播传输的方法及设备 | |
CN1162993C (zh) | 分配无线电资源的方法、无线电设备和无线电通信系统 | |
CN1855881A (zh) | 动态共享存储器存储空间的实现方法 | |
CN1929451A (zh) | 一种解决Hash冲突的方法及装置 | |
CN1628296A (zh) | 有效处理网络数据的系统和方法 | |
CN1770734A (zh) | 网络装置的通信量控制方法 | |
CN1780254A (zh) | 网络处理器中使用缓冲区的方法 | |
CN1238796C (zh) | 一种实现接口转换的装置及方法 | |
CN1829345A (zh) | 实现移动终端间数据共享的方法和系统 | |
CN1946054A (zh) | 一种高速数据流的传输方法、装置及数据交换设备 | |
CN1286029C (zh) | 控制芯片片内存储装置及其存储方法 | |
CN1819554A (zh) | 数据处理系统及其数据接口连接方法 | |
CN1291341C (zh) | 以太网无源光网络系统动态过滤数据库的实现方法及装置 | |
CN1866910A (zh) | 一种基于vlan的数据报文传输方法和以太网桥设备 | |
CN1474568A (zh) | 多通道数据直接内存访问系统和方法 | |
CN1859275A (zh) | 多端口以太网交换装置及数据传输方法 | |
CN101056316A (zh) | 一种pci以太网媒体访问控制器传输数据的方法 | |
CN101052031A (zh) | 苹果计算机与无线通讯终端进行数据交互的方法 | |
CN1925464A (zh) | 通信设备 | |
CN1719769A (zh) | 在网络设备中对接收数据包进行分类的方法 | |
CN1855880A (zh) | 一种数据读写装置及其读写方法 | |
CN1842059A (zh) | 在计算机网络中接收包的方法和系统 | |
CN1913495A (zh) | 数据转发方法和装置 | |
CN1801813A (zh) | 一种动态内容播放方法与装置 | |
CN1630293A (zh) | 一种通讯系统中多通道数据传输的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |