CN106254270A - 一种队列管理方法及装置 - Google Patents
一种队列管理方法及装置 Download PDFInfo
- Publication number
- CN106254270A CN106254270A CN201510330212.0A CN201510330212A CN106254270A CN 106254270 A CN106254270 A CN 106254270A CN 201510330212 A CN201510330212 A CN 201510330212A CN 106254270 A CN106254270 A CN 106254270A
- Authority
- CN
- China
- Prior art keywords
- queue
- address
- pointer group
- operation request
- 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.)
- Withdrawn
Links
- 238000007726 management method Methods 0.000 title abstract description 29
- 238000000034 method Methods 0.000 claims description 35
- 230000000694 effects Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 4
- 229910002056 binary alloy Inorganic materials 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000004064 recycling Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L47/00—Traffic control in data switching networks
- H04L47/50—Queue scheduling
- H04L47/62—Queue scheduling characterised by scheduling criteria
- H04L47/6245—Modifications to standard FIFO or LIFO
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种队列管理方法,包括:确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。本发明还公开了一种队列管理装置。
Description
技术领域
本发明涉及通信技术领域中队列管理的相关技术,尤其涉及一种队列管理方法及装置。
背景技术
在通信类芯片中,队列管理是基础的也是核心的一种功能和技术,它是将报文信息按照队列号先进行存储,然后根据调度将报文再输出的一种管理。
属于同一个队列的报文,按照先进先出的原则通过节点串联成链表的方式进行存储。节点可以以整个报文为单位,也可以将报文等分成几块(每个块称为一个block),然后以block为单位。每个节点对应的存储空间地址称为指针,所有队列共享同一个节点缓存空间。此种队列管理方法在队列较多时能够较好的节省存储需要的空间,但是在现有的基于链表进行队列管理的方法中,此种方法却不能更好的节省存储空间。以需要存储的block个数为1兆(Million,M)为例,不考虑队列管理实现过程中其它关联处理需要的存储空间,此种处理方式需要的链表节点存储空间就需要1M*20bits,这对芯片设计来说,是一个很大的存储空间。
采用按照节点串联成链表的方式进行队列管理,存储的节点数越多,需要的存储空间也会越多,导致芯片成本也越高;每个节点都需要访问一次存储空间,访问频率快,导致芯片的功耗大。
发明内容
有鉴于此,本发明实施例期望提供一种队列管理方法及装置,能够提高队列的管理能力,降低成本。
为达到上述目的,本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种队列管理方法,所述方法包括:
确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
上述方案中,所述依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;
相应的,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列为新队列或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组。
上述方案中,所述依据所述队列当前的指针组确定所述报文对应的第一存储地址包括:
依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址。
上述方案中,所述依据新创建的指针组确定所述报文对应的第二存储地址包括:
读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址。
上述方案中,所述将所述报文存储至第二存储地址中之后,所述方法还包括:
判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点。
上述方案中,所述依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组,包括:
依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点将报文读出,更新所述队列对应的指针组中的基地址为所述队列的头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
上述方案中,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组之后,所述方法还包括:
判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点。
本发明实施例还提供了一种队列管理装置,所述装置包括:入队模块及出队模块;其中,
所述入队模块,用于确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
所述出队模块,用于确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
上述方案中,所述入队模块,具体用于依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;以及依据所述入队操作请求中的队列号确定所述队列为新队列或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组。
上述方案中,所述入队模块,具体用于依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址。
上述方案中,所述入队模块,具体用于读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址。
上述方案中,所述装置还包括第一更新模块,用于判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点。
上述方案中,所述出队模块,具体用于依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点将报文读出,更新所述队列对应的指针组中的基地址为所述队列头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
上述方案中,所述装置还包括第二更新模块,用于判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点。
本发明实施例所提供的队列管理方法及装置,确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。如此,通过指针组的实现方式,降低了链表节点存储空间,减少了访问链表节点的次数和管理随机存储器(Random Access Memory,RAM)所需的带宽,在数据存储空间固定的情况下,提高了队列的管理能力,降低了成本。
附图说明
图1为本发明实施例一队列管理方法流程示意图;
图2为本发明实施例存储器链表初始化示意图;
图3为本发明实施例队列描述符信息示意图;
图4为本发明实施例二队列管理方法流程示意图;
图5为本发明实施例三队列管理方法流程示意图;
图6为本发明实施例队列管理装置组成结构示意图。
具体实施方式
在本发明实施例中,确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组(chunk)确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
图1所示为本发明实施例一队列管理方法流程示意图;如图1所示,本发明实施例队列管理方法包括:
步骤101:确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
本步骤之前,所述方法还包括:按照指针组的方式初始化存储器链表;
这里,所述指针组为该指针组对应队列的n个节点对应的指针组成的集合;n为所述指针组内的指针数量,为正整数,可以依据实际需要进行设置;所述指针组中每个指针都编号,所述编号按顺序排列;
所述按照指针组的方式初始化存储器链表包括:
按照顺序将存储器链表中当前地址中写入下一个节点的地址,即初始化时,地址0中的数据写1,地址1中的数据写2,直到地址N-1中的数据写0,如图2所示。
进一步的,确定当前的操作请求为报文的入队操作请求之后,所述方法还包括:提取所述入队操作请求中的队列号。
进一步的,所述依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;
相应的,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列为新队列或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组;
这里,每个队列可以对应一个或多个指针组,多个队列可共用一个存储器链表;所述指针组未满即所述指针组存在未使用的空闲指针,例如:某指针组为可存储对应队列5个节点对应指针的指针组,所述队列仅有一个指针组,当前所述队列链表含有3个节点,即当前指针组仅存储了所述3个节点对应的指针,即含有两个空闲指针,该指针组未满。
进一步的,所述依据所述队列当前的指针组确定所述报文对应的第一存储地址包括:
依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址;例如:若当前的指针组中的基地址为10’b1,偏移地址为2’b10,将所述基地址及偏移地址拼接后的地址则为12’b110,即新地址是6;其中,10为数据位宽,b表示二进制;如此,通过队列当前的指针组确定所述报文对应的第一存储地址,并将报文存储至所述第一存储地址,减少了访问存储器链表节点的次数及管理RAM所需的带宽。
进一步的,为所述队列创建新的指针组之后,所述方法还包括:
更新所述队列的尾节点的地址为当前尾节点的地址间隔n个节点之后的地址,并更新存储器链表的头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址;也即,以指针组为单位更新队列尾节点及存储器链表头节点;例如:当前队列尾节点的地址为2,新创建的指针组n=4,则更新所述队列尾节点的地址为6;当前存储器链表的头节点指向的地址为3,新创建的指针组n=4,则更新存储器链表的头节点指向地址7。
进一步的,所述依据新创建的指针组确定所述报文对应的第二存储地址包括:
读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址;
这里,由于是新创建的指针组,所以该指针组中的偏移地址为0。
进一步的,所述将所述报文存储至第二存储地址中之后,所述方法还包括:
判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点;
其中,如果是新队列,更新所述队列的头节点的地址为存储器链表头节点指向的地址,并更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址;如果所述队列非新队列,更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址,并更新存储器链表头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址;
更新所述队列的头节点及尾节点,或者更新所述队列的尾节点及存储器链表头节点之后,所述方法还包括:更新所述队列的描述符信息;这里,所述描述符信息包括队列头指针组、队列尾指针组、头指针组活动标记、尾指针组活动标记、队列空标记等;所述头指针组即所述队列对应的指针组的基地址;如图3所示。
步骤102:确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组;
这里,所述确定当前的操作请求为报文的出队操作请求之后,所述方法还包括:提取所述出队操作请求中的队列号。
进一步的,所述依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组,包括:
依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点获得报文的存储地址并将报文读出,更新所述队列对应的指针组中的基地址为所述队列的头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
进一步的,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组之后,所述方法还包括:
判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点;如果不存在,不作处理;
这里,所述队列当前的指针组中存在空指针组包括两种情况:一种是所述队列仅有一个指针组,该指针组为空指针组;另一种是所述队列对应一个以上指针组,所述一个以上指针组中存在空指针组;
如果所述队列当前的指针组中存在空指针组时,更新所述队列的头节点为所述队列原头节点指向的下一个节点,更新队列尾节点为所述队列当前尾节点间隔n个节点之前的节点,即释放所述空指针组,回收所述空指针组对应的节点存储空间,更新存储器链表尾节点为所述队列原头节点,即所述队列更新前的头节点;通过控制指针组的释放及时性,提高了存储器链表节点存储空间的效率。
进一步的,所述方法还包括:判断所述队列包含的节点是否为空,即所述队列是否为空队列,如果所述队列为空队列,更新所述队列描述符中的队列空标记;否则,不进行更新。
图4为本发明实施例二队列管理方法流程示意图;如图4所示,本发明实施例队列管理方法包括:
步骤401:按照指针组的方式初始化存储器链表;
这里,所述指针组为该指针组对应队列的n个节点对应的指针组成的集合;n为正整数,可以依据实际需要进行设置;所述指针组中每个指针都编号,所述编号按顺序排列;
所述按照指针组的方式初始化存储器链表包括:
按照顺序将存储器链表中当前地址中写入下一个节点的地址,即初始化时,地址0中的数据写1,地址1中的数据写2,直到地址N-1中的数据写0,如图2所示。
需要说明的是,按照指针组的方式初始化存储器链表的操作仅需首次执行本实施例队列管理方法的时候执行,后续可直接应用。
步骤402:接收报文的入队操作请求,提取所述入队操作请求中的队列号。
步骤403:判断是否需要为所述队列申请新的指针组,如果需要,执行步骤404;如果不需要,执行步骤407;
本步骤具体包括:依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;确定所述队列为新队列,或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组;
这里,每个队列可以对应一个或多个指针组,多个队列可共用一个存储器链表;所述指针组未满即所述指针组存在未使用的空闲指针,例如:某指针组为可存储对应队列5个节点对应指针的指针组,所述队列仅有一个指针组,当前所述队列链表含有3个节点,即当前指针组仅存储了所述3个节点对应的指针,即含有两个空闲指针,该指针组未满。
步骤404:为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
这里,为所述队列创建新的指针组的同时,所述方法还包括:
更新所述队列的尾节点的地址为当前尾节点的地址间隔n个节点之后的地址,并更新存储器链表的头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址;也即,以指针组为单位更新队列尾节点及存储器链表头节点;例如:当前队列尾节点的地址为2,新创建的指针组n=4,则更新所述队列尾节点的地址为6;当前存储器链表的头节点指向的地址为3,新创建的指针组n=4,则更新存储器链表的头节点指向地址7。
进一步的,所述依据新创建的指针组确定所述报文对应的第二存储地址,包括:
读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址;
这里,由于是新创建的指针组,所以该指针组中的偏移地址为0。
步骤405:判断所述队列是否为新队列,如果是新队列执行步骤406;如果不是新队列,执行步骤408。
步骤406:更新所述队列的头节点及尾节点,并执行步骤409;
本步骤具体包括:更新所述队列的头节点的地址为存储器链表头节点指向的地址,并更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址;
本步骤之后,所述方法还包括:更新所述队列的描述符信息;这里,所述描述符信息包括队列头指针组、队列尾指针组、头指针组活动标记、尾指针组活动标记、队列空标记等;如图3所示。
步骤407:依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中,并执行步骤409;
这里,依据所述队列当前的指针组确定所述报文对应的第一存储地址包括:
依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址;例如:若当前的指针组中的基地址为10’b1,偏移地址为2’b10,将所述基地址及偏移地址拼接后的地址则为12’b110,即新地址是6;其中,10为数据位宽,b表示二进制;如此,通过队列当前的指针组确定所述报文对应的第一存储地址,并将报文存储至所述第一存储地址,减少了访问存储器链表节点的次数及管理RAM所需的带宽。
步骤408:更新所述队列的尾节点及存储器链表头节点;
本步骤具体包括:更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址,并更新存储器链表头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址;
本步骤之后,所述方法还包括:更新所述队列的描述符信息;这里,所述描述符信息包括队列头指针组、队列尾指针组、头指针组活动标记、尾指针组活动标记、队列空标记等。
步骤409:结束本次处理流程。
图5为本发明实施例三队列管理方法流程示意图;如图5所示,本发明实施例队列管理方法包括:
步骤501:接收报文的出队操作请求,并提取所述出队操作请求中的队列号。
步骤502:依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组;
本步骤具体包括:依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点获得报文的存储地址并将报文读出,更新所述队列对应的指针组中的基地址为所述队列的头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
步骤503:判断所述队列当前的指针组中是否存在空指针组,如果存在,执行步骤504;如果不存在,执行步骤507;
这里,所述队列当前的指针组中存在空指针组包括两种情况:一种是所述队列仅有一个指针组,该指针组为空指针组;另一种是所述队列对应一个以上指针组,所述一个以上指针组中存在空指针组。
步骤504:更新所述队列的头节点、尾节点及存储器链表尾节点;
本步骤具体包括:更新所述队列的头节点为所述队列原头节点指向的下一个节点,更新队列尾节点为所述队列当前尾节点间隔n个节点之前的节点,即释放所述空指针组,回收所述空指针组对应的节点存储空间,更新存储器链表尾节点为所述队列原头节点,即所述队列更新前的头节点;通过控制指针组的释放及时性,提高了存储器链表节点存储空间的效率。
步骤505:判断所述队列是否为空队列,如果是空队列,执行步骤506;否则,执行步骤507。
步骤506:更新所述队列描述符中的队列空标记。
步骤507:结束本次处理流程。
图6为本发明实施例队列管理装置组成结构示意图;如图6所示,本发明实施例队列管理装置组成包括:入队模块61及出队模块62;其中,
所述入队模块61,用于确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
所述出队模块62,用于确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
进一步的,所述入队模块61,还用于按照指针组的方式初始化存储器链表;
这里,所述指针组为该指针组对应队列的n个节点对应的指针组成的集合;n为正整数,可以依据实际需要进行设置;所述指针组中每个指针都编号,所述编号按顺序排列;
所述入队模块61按照指针组的方式初始化存储器链表包括:
入队模块61按照顺序将存储器链表中当前地址中写入下一个节点的地址,即初始化时,地址0中的数据写1,地址1中的数据写2,直到地址N-1中的数据写0,如图2所示。
进一步的,所述入队模块61,还用于判断当前的操作请求是报文的入队操作请求还是出队操作请求,如果是入队操作请求,提取所述入队操作请求中的队列号;如果是出队操作请求,触发出队模块62。
进一步的,所述入队模块61,具体用于依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;以及依据所述入队操作请求中的队列号确定所述队列为新队列,或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组。
进一步的,所述入队模块61,具体用于依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址;例如:若当前的指针组中的基地址为10’b1,偏移地址为2’b10,将所述基地址及偏移地址拼接后的地址则为12’b110,即新地址是6;其中,10为数据位宽,b表示二进制;如此,通过队列当前的指针组确定所述报文对应的第一存储地址,并将报文存储至所述第一存储地址,减少了访问存储器链表节点的次数及管理RAM所需的带宽。
进一步的,所述入队模块61,具体用于读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址;
这里,由于是新创建的指针组,所以该指针组中的偏移地址为0。
进一步的,所述装置还包括第一更新模块63,用于判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点;
其中,如果是新队列,第一更新模块63更新所述队列的头节点的地址为存储器链表头节点指向的地址,并更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址;如果所述队列非新队列,第一更新模块63更新所述队列的尾节点的地址为所述存储器链表头节点指向的地址间隔n-1个节点后对应的地址,并更新存储器链表头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址。
进一步的,所述第一更新模块63,还用于更新所述队列的描述符信息;这里,所述描述符信息包括队列头指针组、队列尾指针组、头指针组活动标记、尾指针组活动标记、队列空标记等;如图3所示。
进一步的,所述第一更新模块63,还用于在所述入队模块61为所述队列创建新的指针组之后,更新所述队列的尾节点的地址为当前尾节点的地址间隔n个节点之后的地址,并更新存储器链表的头节点指向下一个可用的地址,即更新存储器链表的头节点指向当前头节点地址间隔n个节点之后的地址;也即,以指针组为单位更新队列尾节点及存储器链表头节点;例如:当前队列尾节点的地址为2,新创建的指针组n=4,则更新所述队列尾节点的地址为6;当前存储器链表的头节点指向的地址为3,新创建的指针组n=4,则更新存储器链表的头节点指向地址7。
进一步的,所述出队模块62,还用于提取所述出队操作请求中的队列号。
进一步的,所述出队模块62,具体用于依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点将报文读出,更新所述队列对应的指针组中的基地址为所述队列头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
进一步的,所述装置还包括第二更新模块64,用于判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点;
这里,所述队列当前的指针组中存在空指针组包括两种情况:一种是所述队列仅有一个指针组,该指针组为空指针组;另一种是所述队列对应一个以上指针组,所述一个以上指针组中存在空指针组;
所述第二更新模块64,具体用于更新所述队列的头节点为所述队列原头节点指向的下一个节点,更新队列尾节点为所述队列当前尾节点间隔n个节点之前的节点,即释放所述空指针组,回收所述空指针组对应的节点存储空间,更新存储器链表尾节点为所述队列原头节点,即所述队列更新前的头节点;通过控制指针组的释放及时性,提高了存储器链表节点存储空间的效率。
进一步的,所述第二更新模块64,还用于判断所述队列包含的节点是否为空,即所述队列是否为空队列,如果所述队列为空队列,更新所述队列描述符中的队列空标记。
在本发明实施例中,所述入队模块61、出队模块62、第一更新模块63及第二更新模块64均可由终端中的中央处理器(CPU,Central Processing Unit)或数字信号处理器(DSP,Digital Signal Processor)、或现场可编程门阵列(FPGA,Field Programmable Gate Array)、或集成电路(ASIC,ApplicationSpecific Integrated Circuit)实现。
以上所述,仅为本发明较佳实施例而已,并非用于限定本发明的保护范围。
Claims (14)
1.一种队列管理方法,其特征在于,所述方法包括:
确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
2.根据权利要求1所述方法,其特征在于,所述依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;
相应的,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组包括:
依据所述入队操作请求中的队列号确定所述队列为新队列或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组。
3.根据权利要求1或2所述方法,其特征在于,所述依据所述队列当前的指针组确定所述报文对应的第一存储地址包括:
依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址。
4.根据权利要求1或2所述方法,其特征在于,所述依据新创建的指针组确定所述报文对应的第二存储地址包括:
读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址。
5.根据权利要求1或2所述方法,其特征在于,所述将所述报文存储至第二存储地址中之后,所述方法还包括:
判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点。
6.根据权利要求1或2所述方法,其特征在于,所述依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组,包括:
依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点将报文读出,更新所述队列对应的指针组中的基地址为所述队列的头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
7.根据权利要求1或2所述方法,其特征在于,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组之后,所述方法还包括:
判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点。
8.一种队列管理装置,其特征在于,所述装置包括:入队模块及出队模块;其中,
所述入队模块,用于确定当前的操作请求为报文的入队操作请求,依据所述入队操作请求中的队列号确定无需为所述队列创建新的指针组时,依据所述队列当前的指针组确定所述报文对应的第一存储地址,将所述报文存储至第一存储地址中;或者,依据所述入队操作请求中的队列号确定需要为所述队列创建新的指针组时,为所述队列创建新的指针组并依据新创建的指针组确定所述报文对应的第二存储地址,将所述报文存储至第二存储地址中;
所述出队模块,用于确定当前的操作请求为报文的出队操作请求,依据所述出队操作请求中的队列号将报文读出并更新所述队列对应的指针组。
9.根据权利要求8所述装置,其特征在于,所述入队模块,具体用于依据所述入队操作请求中的队列号确定所述队列非新队列且所述队列当前的指针组未满时,确定无需为所述队列创建新的指针组;以及依据所述入队操作请求中的队列号确定所述队列为新队列或者所述队列当前的指针组已满时,确定需要为所述队列创建新的指针组。
10.根据权利要求8或9所述装置,其特征在于,所述入队模块,具体用于依据所述队列当前的指针组中的基地址及偏移地址获取所述基地址及偏移地址拼接后的地址,所述拼接后的地址为所述报文对应的第一存储地址。
11.根据权利要求8或9所述装置,其特征在于,所述入队模块,具体用于读取存储器链表头节点,获得的值作为新创建的指针组的基地址,将所述新创建的指针组的基地址与所述新创建的指针组中的偏移地址拼接后的地址作为所述报文对应的第二存储地址。
12.根据权利要求8或9所述装置,其特征在于,所述装置还包括第一更新模块,用于判断所述队列是否为新队列,如果是新队列,更新所述队列的头节点及尾节点;如果所述队列非新队列,更新所述队列的尾节点及存储器链表头节点。
13.根据权利要求8或9所述装置,其特征在于,所述出队模块,具体用于依据所述出队操作请求中的队列号读取所述队列的头节点,依据所述头节点将报文读出,更新所述队列对应的指针组中的基地址为所述队列头节点中指针对应的地址,并相应的更新所述指针组中的偏移地址。
14.根据权利要求8或9所述装置,其特征在于,所述装置还包括第二更新模块,用于判断所述队列当前的指针组中是否存在空指针组,如果存在,更新所述队列的头节点、尾节点及存储器链表尾节点。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510330212.0A CN106254270A (zh) | 2015-06-15 | 2015-06-15 | 一种队列管理方法及装置 |
PCT/CN2016/081033 WO2016202113A1 (zh) | 2015-06-15 | 2016-05-04 | 一种队列管理方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510330212.0A CN106254270A (zh) | 2015-06-15 | 2015-06-15 | 一种队列管理方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106254270A true CN106254270A (zh) | 2016-12-21 |
Family
ID=57544968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510330212.0A Withdrawn CN106254270A (zh) | 2015-06-15 | 2015-06-15 | 一种队列管理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106254270A (zh) |
WO (1) | WO2016202113A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542615A (zh) * | 2018-10-18 | 2019-03-29 | 深圳市景阳科技股份有限公司 | 一种可变节点通用队列的实现方法、装置及终端设备 |
CN109656515A (zh) * | 2018-11-16 | 2019-04-19 | 深圳证券交易所 | 队列消息的操作方法、装置和存储介质 |
CN109783035A (zh) * | 2019-02-28 | 2019-05-21 | 中国人民解放军陆军工程大学 | 一种基于大颗粒度存储单元的队列管理器及方法 |
CN111224896A (zh) * | 2020-01-06 | 2020-06-02 | 苏州雄立科技有限公司 | 一种多指针报文管理方法及装置 |
CN117424865A (zh) * | 2023-12-18 | 2024-01-19 | 南京华芯科晟技术有限公司 | 报文地址管理装置、网络处理芯片、报文读取及存储方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605100A (zh) * | 2009-07-15 | 2009-12-16 | 华为技术有限公司 | 队列存储空间的管理方法和设备 |
CN102130833A (zh) * | 2011-03-11 | 2011-07-20 | 中兴通讯股份有限公司 | 一种高速路由器流量管理芯片链表存储管理方法及系统 |
CN102447610A (zh) * | 2010-10-14 | 2012-05-09 | 中兴通讯股份有限公司 | 实现报文缓存资源共享的方法和装置 |
CN103914341A (zh) * | 2013-01-06 | 2014-07-09 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW201237632A (en) * | 2010-12-21 | 2012-09-16 | Ibm | Buffer management scheme for a network processor |
-
2015
- 2015-06-15 CN CN201510330212.0A patent/CN106254270A/zh not_active Withdrawn
-
2016
- 2016-05-04 WO PCT/CN2016/081033 patent/WO2016202113A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101605100A (zh) * | 2009-07-15 | 2009-12-16 | 华为技术有限公司 | 队列存储空间的管理方法和设备 |
CN102447610A (zh) * | 2010-10-14 | 2012-05-09 | 中兴通讯股份有限公司 | 实现报文缓存资源共享的方法和装置 |
CN102130833A (zh) * | 2011-03-11 | 2011-07-20 | 中兴通讯股份有限公司 | 一种高速路由器流量管理芯片链表存储管理方法及系统 |
CN103914341A (zh) * | 2013-01-06 | 2014-07-09 | 中兴通讯股份有限公司 | 数据队列出队管控方法和装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109542615A (zh) * | 2018-10-18 | 2019-03-29 | 深圳市景阳科技股份有限公司 | 一种可变节点通用队列的实现方法、装置及终端设备 |
CN109542615B (zh) * | 2018-10-18 | 2020-11-10 | 深圳市景阳科技股份有限公司 | 一种可变节点通用队列的实现方法、装置及终端设备 |
CN109656515A (zh) * | 2018-11-16 | 2019-04-19 | 深圳证券交易所 | 队列消息的操作方法、装置和存储介质 |
CN109783035A (zh) * | 2019-02-28 | 2019-05-21 | 中国人民解放军陆军工程大学 | 一种基于大颗粒度存储单元的队列管理器及方法 |
CN111224896A (zh) * | 2020-01-06 | 2020-06-02 | 苏州雄立科技有限公司 | 一种多指针报文管理方法及装置 |
CN111224896B (zh) * | 2020-01-06 | 2022-06-24 | 苏州雄立科技有限公司 | 一种多指针报文管理方法及装置 |
CN117424865A (zh) * | 2023-12-18 | 2024-01-19 | 南京华芯科晟技术有限公司 | 报文地址管理装置、网络处理芯片、报文读取及存储方法 |
Also Published As
Publication number | Publication date |
---|---|
WO2016202113A1 (zh) | 2016-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733344B (zh) | 数据读写方法、装置以及环形队列 | |
JP5863076B2 (ja) | パケットを再構築し再順序付けするための方法、装置、およびシステム | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
US10693787B2 (en) | Throttling for bandwidth imbalanced data transfers | |
CN105573711B (zh) | 一种数据缓存方法及装置 | |
CN107613529B (zh) | 消息处理方法以及基站 | |
US9584332B2 (en) | Message processing method and device | |
CN113542043B (zh) | 网络设备的数据采样方法、装置、设备及介质 | |
JP7074839B2 (ja) | パケット処理 | |
US20170017404A1 (en) | System And Method For Implementing Hierarchical Distributed-Linked Lists For Network Devices | |
WO2016202158A1 (zh) | 一种报文传输方法、装置及计算机可读存储介质 | |
CN108304272B (zh) | 一种数据io请求的处理方法及装置 | |
RU2641250C2 (ru) | Устройство и способ управления очередью | |
CN103605478B (zh) | 存储地址标示、配置方法和数据存取方法及系统 | |
US9851941B2 (en) | Method and apparatus for handling incoming data frames | |
CN116955247B (zh) | 一种缓存描述符管理装置及其方法、介质、芯片 | |
CN104052831A (zh) | 一种基于队列的数据传输方法、装置及通信系统 | |
CN111181874A (zh) | 一种报文处理方法、装置及存储介质 | |
CN111984198A (zh) | 消息队列实现方法、装置及电子设备 | |
CN117499351A (zh) | 报文转发装置及方法、通信芯片及网络设备 | |
CN109862044B (zh) | 一种转换装置、网络设备及数据传输方法 | |
CN102073539A (zh) | 队列请求处理方法和装置 | |
CN102325091B (zh) | 内存释放方法和路由系统 | |
CN114422597B (zh) | 基于fpga的数据帧定时转发方法、装置、fpga及数据交换设备 | |
CN117424865B (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 | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20161221 |
|
WW01 | Invention patent application withdrawn after publication |