发明内容
本发明的目的在于针对上述已有技术的不足,提出的一种基于定长单元存储变长分组的队列管理方法及设备,以提高队列存储空间的利用率,降低队列维护的复杂度。
本发明是这样实现的:
一.本发明基于定长单元存储变长分组的队列管理方法,包括如下步骤:
(1)将分组交换***中用于存储分组的队列存储空间划分为m个等长度的基本缓存单元Buffer,并编号为Buffer0,Buffer1,...,Buffer(m-1),Buffer(m),当分组交换***中有分组进入时,将该分组分片存储到n个基本缓存单元Buffer中,m由队列存储空间的大小决定,n由分组的长度决定,m和n都是正整数且n<m;
(2)为每个基本缓存单元Buffer设置一个缓存描述符BD,并编号为BD0,BD1,...,BD(m-1),BD(m),每个BD编号与Buffer号和分组写入/读出队列存储空间的逻辑入队/出队地址相对应;
(3)分别配置缓存描述符存储表BD RAM、空闲队列信息表和输出队列信息表,并将所有的缓存描述符BD初始化到一条链表中,并用空闲队列信息表和输出队列信息表共同维护这条链表;
(4)在分组入队时,根据分组的大小计算出存储该分组需要的缓存描述符BD个数,然后访问空闲队列信息表和输出队列信息表,查看是否有足够的缓存描述符BD分配给该分组,如果有,则填写缓存描述符存储表BD RAM的相应表项,更新空闲队列信息表和输出队列信息表中相应的表项,给出分组逻辑入队地址,反之,则给出入队失败指示;
(5)当某一输出队列有分组出队时,读取并修改缓存描述符存储表BD RAM的相应表项,更新空闲队列信息表和输出队列信息表中相应的表项,给出该分组的逻辑出队地址;
(6)按照分组逻辑入队地址,将分组分片存储到队列存储空间中;按照分组逻辑出队地址,将分组分片从队列存储空间中搬出。
二.本发明基于定长单元存储变长分组的队列管理设备,包括:
共享缓存器,作为队列存储空间,用于缓存分组数据;
缓存描述符存储表BD RAM,用于存放缓存描述符BD,它由m个表项组成,每个表项有4项信息:第一分片标志位Fs、最后分片标志位F1、有效数据长度Lv和下一跳地址An,其中m为基本缓存单元Buffer的个数;
空闲队列信息表,用于存放空闲队列状态信息,它由1个表项组成,表项有3项信息:空闲队列长度L1、空闲队列尾指针Pt1和空闲队列头指针Ph1;
输出队列信息表,用于存放输出队列状态信息,它由r个表项组成,一个表项对应一个输出队列且每个表项有4项信息:输出队列最大允许长度Lmax、输出队列长度L2、输出队列尾指针Pt2和输出队列头指针Ph2,其中r为输出队列的个数;
入队控制器,在有分组入队时开始工作,即根据分组的大小计算出存储该分组需要的缓存描述符BD个数,并通过读写选通开关,访问空闲队列信息表和输出队列信息表,查看是否有足够的缓存描述符BD分配给该分组,如果有,则填写缓存描述符存储表BD RAM的相应表项,更新空闲队列信息表和输出队列信息表中相应的表项,将分组逻辑入队地址发送给数据搬移器,反之,将入队失败指示发送给数据搬移器;
出队控制器,在有分组出队时开始工作,即通过读写选通开关,读取并修改缓存描述符存储表BD RAM的相应表项,更新空闲队列信息表和输出队列信息表中相应的表项,将出队分组的逻辑出队地址发送给数据搬移器;
读写选通开关,用于协调入队控制器和出队控制器有序的操作缓存描述符存储表BD RAM和输出队列信息表RAM,防止出现读写冲突;
数据搬移器,接收分组逻辑入队地址,将分组分片存储到共享缓存器中;接收分组逻辑出队地址,将分组分片从共享缓存器中搬出。
本发明与现有技术相比具有如下优点:
本发明由于根据入队分组的大小合理分配基本缓存单元Buffer的个数,相比不管分组大小都分配一块足够大的固定存储空间,提高了队列存储空间的利用率;同时由于本发明的队列存储空间的分配和回收都是以定长基本缓存单元Buffer为单位进行的,相比按与分组同等大小的存储空间为单位分配和回收存储空间的方法,降低了队列维护的复杂度。
具体实施方式
为使本发明目的、技术方案以及优点更加清楚明白,以下参照附图并举实施例,对本发明进行近一步的详细说明。本发明所涉及的实施例为由64K*32位构成的256KB的队列存储空间,划分基本缓存单元Buffer大小为64Byte。
参照图1,本发明基于定长单元存储变长分组的队列管理方法,包括以下步骤:
步骤1:将分组交换***中用于存储分组的队列存储空间划分为4096个64Byte的基本缓存单元Buffer。
步骤2:为每个缓存描述符Buffer设置一个缓存描述符BD,两者构成一一对应的关系。
步骤3:分别配置缓存描述符存储表BD RAM、空闲队列信息表和输出队列信息表。
(3a)设置缓存描述符存储表BD RAM中的所有表项的参数:
将缓存描述符存储表BD RAM中所有表项的第一个参数,即第一分片标志位Fs置为0;
将缓存描述符存储表BD RAM中所有表项的第二个参数,即最后分片标志位F1置为0;
将缓存描述符存储表BD RAM中所有表项的第三个参数,即有效数据长度Lv为置0;
将缓存描述符存储表BD RAM中第i个表项的第四个参数,即下一跳地址An置为i+1,i为整数,且0≤i≤m-1,m为缓存描述符BD的个数,本实例m为4096。
(3b)设置空闲队列信息表中的所有表项的参数:
将空闲队列信息表中表项的第一个参数,即空闲队列长度L1置为m;
将空闲队列信息表中表项的第二个参数,即空闲队列尾指针Pt1置为m;
将空闲队列信息表中表项的第三个参数,即空闲队列头指针Ph1置为0。
(3c)设置输出队列信息表中的所有表项的参数:
将输出队列信息表中第j个表项的第一个参数,即输出队列最大允许长度Lmax置为Lj,0≤j≤r-1,r为输出队列的个数,Lj为大于1的正整数且
将输出队列信息表中所有表项的第二个参数,即输出队列长度L2置为0;
将输出队列信息表中所有表项的第三个参数,即输出队列尾指针Pt2置为0;
将输出队列信息表中所有表项的第四个参数,即输出队列头指针Ph2置为0。
步骤4:在分组入队时,执行分组入队处理相关操作。
参照图2,本步骤的具体实现如下:
(4a)利用公式计算得出存储入队分组需要的缓存描述符BD个数,其中为上取整运算,Lp为分组的大小,A为基本缓存单元Buffer的大小,N为存储该分组需要的缓存描述符BD个数,本实例A为64Byte,分组大小Lp为100Byte,则计算得N为2,但不局限于该参数;
(4b)判断入队条件:
(4b1)访问空闲队列信息表,读取表项的第一个参数,第一个参数为空闲队列长度L1;
(4b2)访问输出队列信息表,得到入队分组所属的输出队列所对应的表项,读取该表项的第一个参数和第二个参数,第一个参数为最大允许队列长度Lmax,第二个参数为输出队列长度L2;
(4b3)比较空闲队列长度L1与存储分组需要的缓存描述符BD个数N,若L1≥N,则置比较结果R1为1,反之置为0;
(4b4)将存储分组需要的缓存描述符BD个数N与输出队列长度L2求和,比较该和与最大允许队列长度Lmax,若N+L2≤Lmax,则置比较结果R2为1,反之置为0;
(4b5)若R1=1且R2=1,则满足入队条件,执行步骤(4d),反之,则不满足入队条件,执行步骤(4c);
(4c)给出入队失败指示,入队处理操作结束;
(4d)填写缓存描述符存储表BD RAM的相应表项,并给出分组入队逻辑地址:
(4d1)以空闲队列头指针Ph1为地址访问缓存描述符存储表BD RAM,得到特定表项,将该表项的第一个参数Fs写为1,第三个参数Lv写为64,若存储分组需要的缓存描述符BD个数N=1,则第二个参数F1写为1,反之写为0;
(4d2)将空闲队列头指针Ph1赋值给最后分片地址A1,再将表项的第四个参数An赋值给下一次访问地址At;并将空闲队列头指针Ph1的值作为分组入队逻辑地址给出;
(4d3)记分组剩余长度Lr=Lp-Lv,Lp为分组长度,Lv为该表项对应的基本缓存单元Buffer中存放的有效数据长度;记分组剩余占用缓存描述符BD数Nr=N-1,N为存储分组需要的缓存描述符BD个数;
(4d4)判断Nr是否为0,如果是,则执行步骤(4d8),反之,则执行步骤(4d5);
(4d5)以下一次访问地址At访问缓存描述符存储表BD RAM,得到特定表项,将该表项的第一个参数Fs写为0,若分组剩余占用缓存描述符BD数Nr=1,将第二个参数F1写为1,将第三个参数Lv写为Lr的值,反之,第二个参数F1写为0,第三个参数Lv写为64;
(4d6)将下一次访问地址At赋值给最后分片地址A1,再将表项的第四个参数An赋值给下一访问地址At;将下一次访问地址At的值作为分组入队逻辑地址给出;
(4d7)将分组剩余长度Lr减64,将分组剩余占用缓存描述符BD数Nr减1;返回步骤(4d4);
(4d8)以出队分组所属的输出队列尾指针访问缓存描述符存储表BD RAM,得到特定表项,将该特定表项的第四个参数An写为空闲队列头指针Ph1的值。
(4e)更新空闲队列信息表和输出队列信息表中相应的表项:
(4e1)访问空闲队列信息表,将表项的第一个参数L1减去存储分组需要的缓存描述符BD个数N的值,将第三个参数Ph1修改为下一次访问地址At的值;
(4e2)访问输出队列信息表,得到分组所属输出队列对应的表项,将该表项的第二个参数L2加上存储分组需要的缓存描述符BD个数N的值,将第三个参数Pt2修改为最后分片地址A1的值,入队处理操作结束。
步骤5:在分组出队时,执行出队处理相关操作。
参照图3,本步骤的具体实现如下:
(5a)读取并修改缓存描述符存储表BD RAM的相应表项,同时给出分组出队逻辑地址:
(5a1)以分组所属的输出队列头指针Ph2为地址访问缓存描述符存储表BDRAM,得到特定表项,读取该表项第二个参数F1和第四个参数An;
(5a2)将输出队列头指针Ph2的值赋给最后分片地址A1,将表项的第四个参数An的值赋给下一次访问地址At,并将输出队列头指针Ph2的值作为分组出队逻辑地址给出;
(5a3)判断F1是否为1,如果是,则执行步骤(5a6),反之则执行步骤(5a4);
(5a4)以下一次访问地址At访问缓存描述符存储表BD RAM,得到特定表项,读取该表项第二个参数F1和第四个参数An,并将下一次访问地址At的值作为分组出队逻辑地址给出;
(5a5)将下一次访问地址At的值赋给最后分片地址A1,再将表项的第四个参数An的值赋给下一次访问地址At;返回执行步骤(5a3);
(5a6)以空闲队列尾指针Pt1为地址,访问缓存描述符存储表BD RAM,得到特定表项,将该表项的第四个参数An写为分组所属的输出队列头指针Ph2的值。
(5b)更新空闲队列信息表和输出队列信息表中相应的表项:
(5b1)访问空闲队列信息表,将表项的第一个参数L1加上存储分组需要的缓存描述符BD的个数N,将第二个参数Pt1修改为最后分片地址A1的值;
(5b2)访问输出队列信息表,得到分组所属输出队列对应的表项,将该表项的第二个参数L2减去存储分组需要的缓存描述符BD的个数N,将第三个参数Ph2修改为下一次访问地址At的值,出队处理操作结束。
步骤6:按照分组逻辑入队地址,将分组分片存储到队列存储空间中;按照分组逻辑出队地址,将分组分片从队列存储空间中搬出。
参照图4,本发明基于定长单元存储变长分组的队列管理设备,包括:
共享缓存器10、缓存描述符存储表BD RAM20、空闲队列信息表30、输出队列信息表40、入队控制器50、出队控制器60、读写选通开关70、数据搬移器80。其中入队控制器50与缓存描述符存储表BD RAM20、空闲队列信息表30及输出队列信息表40双向连接;出队控制器60与缓存描述符存储表BD RAM20、空闲队列信息表30及输出队列信息表40双向连接;数据搬移器80与入队控制器50及出队控制器60单向连接,并与共享缓存器10双向连接。其中:
所述的共享缓存器10,为输入分组提供足够的存储空间。
所述的缓存描述符存储表BD RAM20,用于存放所有缓存描述符BD,并维护着队列链表的连接关系。在有分组入队时接受入队控制器50的访问,填写相应表项的信息;在有分组出队时接受出队控制器60的访问,读取并修改相应表项的信息。其中,表项信息如表1所示,表中的第一分片标志位和最后分片标志位分别占1bit,取0或1;结合本实例基本缓存单元Buffer为64Byte,表1中的有效数据长度占7bit,取值范围从1~64,该参数占用bit数可根据实际划分基本缓存单元Buffer的大小做改动;结合本实例缓存描述符有4096个,表1中的下一跳地址占12bit,取值范围从0~4095,该参数的占用bit数可根据实际队列存储空间大小做扩展。
表1 缓存描述符存储表BD RAM表项信息
所述的空闲队列信息表30,用于存放空闲队列状态信息。在有分组入队或出队时,分别接受入队控制器50和出队控制器60的访问,并读取和修改空闲队列状态信息。其中,空闲队列状态信息如表2所示,结合本实例缓存描述符有4096个,表2中的空闲队列长度占13bit,取值范围从0~4096,表2中的空闲队列尾指针和空闲队列头指针分别占12bit,取值范围均从0~4095,这3项参数的占用bit数均可根据实际队列存储空间大小做扩展。
表2 空闲队列状态信息
所述的输出队列信息表40,用于存放各个输出队列的状态信息。在有分组入队或出队时,分别接收入队控制器50和出队控制器60的访问,并读取和修改输出队列的状态信息。其中,输出队列状态信息如表3所示,结合本实例缓存描述符有4096个,表3中的输出队列最大允许长度和输出队列长度分别占13bit,取值范围从0~4096,表3中的输出队列尾指针和输出队列头指针分别占12bit,取值范围从0~4095,这4项参数的占用bit数均可根据实际队列存储空间大小做扩展。
表3输出队列状态信息
所述的入队控制器50,主要完成7项功能:一是负责在分组入队时,计算该分组所需缓存描述符BD的个数,计算方法为,分组长度除以基本缓存单元Buffer的大小,然后再上取整;二是判断入队条件,如果空闲队列长度大于等于分组所需缓存描述符BD的个数,并且该分组所属输出队列长度加上分组所需缓存描述符BD的个数的和小于等于该输出队列最大允许长度,则允许分组入队,反之,不允许分组入队;三是在允许入队的情况下,通过读写选通开关70,以空闲队列头指针去访问缓存描述符存储表BD RAM20,填写相应表项的信息,以该表项信息中的下一跳地址继续访问缓存描述符存储表BD RAM20的下一个表项,并填写该表项的信息,直至访问完分配给入队分组的所有缓存描述符BD对应的表项为止,在访问缓存描述符存储表BDRAM20的同时,将访问的表项对应的缓存描述符BD编号作为分组入队逻辑地址传输给数据搬移器80;四是通过读写选通开关70,以入队分组所属的输出队列尾指针为地址访问缓存描述符存储表BD RAM20,修改表项信息中的下一跳地址为空闲队列头指针的值;五是在不允许入队的情况下,给出入队失败信号;六是访问空闲队列信息表30,更新空闲队列头指针和空闲队列长度,维护分组入队后空闲队列的状态信息;七是通过读写选通开关70,访问分组所属输出队列信息表40,更新输出队列尾指针和输出队列长度,维护分组入队后该输出队列的状态信息。其中:
所述的填写是指:假设当前访问的缓存描述符存储表BD RAM20中表项为w,对应的基本缓存单元Buffer中存放的数据为u;根据u是否分组的第一个分片、是否分组的最后一个分片及u的长度,分别填写表项w中的第一分片标志位、最后分片标志位和有效数据长度;
所述的更新,是指分组入队后对表2和表3中的相应参数做更新,具体包括4项内容:
一是假设原来表2中队列长度为e,则将该队列长度更新为e-N,N为分配给入队分组缓存描述符的个数;
二是假设原来表2中队列头指针为f,则将该队列头指针更新为b,b为最后访问的缓存描述符存储表BD RAM20中表项的下一跳地址;
三是假设原来表3中队列长度为g,则将该队列长度更新为g+N,N为分配给入队分组缓存描述符的个数;
四是假设原来表3中队列尾指针为h,则将该队列尾指针更新为a,a为最后访问的缓存描述符存储表BD RAM20中表项对应的缓存描述符编号。
所述的出队控制器60,主要完成3项功能:一是负责在分组出队时,通过读写选通开关70,以分组所属的输出队列头指针为地址去访问缓存描述符存储表BDRAM20,读取相应表项的信息,以信息中的下一跳地址继续访问缓存描述符存储表BD RAM的下一个表项,并读取相应表项的信息,直至访问完出队分组占用的所有缓存描述符BD对应的表项为止,在访问缓存描述符存储表BD RAM20的同时,将访问的表项对应的缓存描述符BD编号作为分组出队逻辑地址传输给数据搬移器80;二是通过读写选通开关70,以空闲队列尾指针为地址访问缓存描述符存储表BDRAM20,修改表项信息中的下一跳地址为出队分组所属的输出队列头指针的值;三是访问空闲队列信息表30,更新队列尾指针和队列长度,维护分组出队后空闲队列的状态信息;四是通过读写选通开关70,访问分组所属输出队列信息表40更新队列头指针和队列长度,维护分组出队后该输出队列的状态信息。其中所述的更新,是指分组出队后对表2和表3中的相应参数做更新,具体包括4项内容:假设原来表2中队列长度为e,则将该队列长度更新为e+N,N为出队分组所占用的缓存描述符的个数;假设原来表2中队列尾指针为f,则将该队列尾指针更新为b,b为最后访问的缓存描述符存储表BD RAM20中表项对应的缓存描述符编号;假设原来表3中队列长度为g,则将该队列长度更新为g-N,N为出队分组所占用的缓存描述符的个数;假设原来表3中队列尾指针为h,则将该队列尾指针更新为a,a为最后访问的缓存描述符存储表BD RAM20中表项的下一跳地址。
所述的读写选通开关70,用于协调入队控制器50和出队控制器60有序的访问缓存描述符存储表BD RAM20和输出队列信息表40,防止出现读写冲突。
所述的数据搬移器80,用于接收入队控制器50传输过来的分组逻辑入队地址并根据该地址将分组分片地依次存储到共享缓存器10中相应的基本缓存单元Buffer中,同时接收出队控制器60传输过来的分组出队逻辑地址并根据该地址将出队分组分片地依次从共享缓存器10相应的基本缓存单元Buffer中读出。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不限于此,任何熟悉该技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的改变或替换,都涵盖在本发明的保护范围内。