共享内存管理方法

文档序号:7917598阅读:133来源:国知局
专利名称:共享内存管理方法
技术领域
本发明涉及通信领域,具体而言,涉及一种共享内存管理方法。
背景技术
随着移动通讯纟支术的不断发展,用户对移动环境下的速率需求
也越来越高。目前,高速无线通信系统中最重要的部分就是高速翁: 据4妾入(High Speed Packet Access,简称为HSPA )以及无线长期演 进(Long-Term Evolution,简称为LTE )系统。
在高速通信系统中,无线用户面的设计对速率性能以及容量指 标影响很大,这是因为,所有的数据包都将在用户面进行緩存,因 此流量越大,内存消耗也就越多。
在传统的内存分配方式中,按照用户的业务类型以及最大速率 进4亍静态的内存分配,当该用户实际没有进4亍业务时,会造成内存 资源的浪费。
在高速通信系统中,可能每个用户的最大速率都非常高,但是 由于受到系统能力的限制,所有用户同时达到满速率的概率非常低。 并且,空口资源带宽本身就是共享的,所以无线用户面应当采用共 享的数据緩沖区,各用户根据实际需要动态分配共享内存。
但是,动态分配本身也有需要克服的问题,如果都按照实际需 要来进行内存资源的索取,必然会造成内存碎片问题;如果划定几种不同大小的内存块,则当较小的内存块用尽之后,直接使用更大 的内存块,形成资源浪费,并且可能造成所有用户的业务数据包都 非常小时,系统容量得不到保证,从而增加了内存块预先规划方法 实施的难度。发明内容本发明旨在提供一种共享内存管理方法,以解决现有技术中的 动态分配内存方式浪费内存资源的问题。根据本发明,提供了一种共享内存管理方法。根据本发明的共享内存管理方法包括将共享緩存区按照2的 整凄t次幂分成多个内存块,其中,相邻的两个内存块中的后一内存 块的大小是前一内存块的大小的2xn倍,n为大于等于1的整数; 4妄收数据包,才艮据数据包的大小4安照内存块的大小顺序遍历可选内 存块,其中,可选内存块为等于或大于数据包的大小的内存块;使 用最先遍历到的空闲可选内存块保存数据包。优选地,在空闲可选内存块的大小等于数据包的大小的情况下, 使用最先遍历到的空闲可选内存块保存数据包具体包括直接使用 空闲可选内存块4呆存数据包。优选地,具有相同大小的内存块以链状排列,形成内存块《连表。优选地,在空闲可选内存块的大小大于翁:据包的大小的情况下, 使用最先遍历到的空闲可选内存块保存数据包具体包括对空闲可 选内存块执行用于将内存块均分为具有相同大小的两个子内存块的 分裂操作,得到具有相同大小的两个子内存块;根据第二个子内存 块的大小将其加入相应的内存块链表;判断第一个子内存块是否为 可用内存块,在判断结果为是的情况下,使用第一个子内存块保存数据包,在判断结果为否的情况下,对第一个子内存块执行分裂操 作,直到分裂得到可用内存块,并使用可用内存块保存数据包,其 中,可用内存块的大小等于数据包的大小,或者大于数据包的大小 且小于数据包的大小的两倍。优选地,在执行分裂操作时,预先设置允许执行的分裂操作的 级数阈值。优选地,在进行分裂操作后,该方法还包括对于执行分裂操 作得到的加入内存块链表的各个内存块,分别设置分裂标记,其中, 分裂标记用于标识内存块为分裂得到的内存块,以及内存块对应的 分裂级数。优选地,在保存有数据包的内存块释》文其保存的数据包的情况 下,该方法还包括冲企查内存块是否携带有分裂标记,在判断结果 为是的情况下,进一步查找是否有与其大小相同且物理地址连续的 空闲的内存块;在查找到空闲的内存块的情况下,将携带有分裂标 记的内存块与查找到的内存块进行合并,将合并得到的内存块根据 大小加入相应的内存块链表,其中,在分裂标记标识的分裂级数为 一级分裂的情况下,删除分裂标记,在分裂标记标识的分裂级凄史大 于一级的情况下,将分裂标记的分裂级f史减一。优选地,在查找不到空闲的数据块的情况下,将内存块根据大 小加入与其对应的数据块链表。优选地,优先选4奪没有携带分裂标记的内存块执4亍分裂才喿作。优选地,共享緩存区的最小内存块为32字节。优选i也,在上述的方法中,n=l。通过本发明提供的共享内存管理方法,能够对内存进行有效利 用,兼顾不同业务类型对数据包緩冲的大小以及数量的要求,提高 了系统的岁文率。


此处所说明的附图用来^是供对本发明的进一步理解,构成本申 请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据本发明实施例的共享内存管理方法的流程图;图2是才艮据本发明实施例的共享内存管理方法的实现实例的示 意图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此 处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本 发明。本发明实施例提供了一种共享内存管理方法。图1是才艮据本发明实施例的共享内存管理方法的流程图。如图 l所示,上述方法包4舌以下处理步骤S102,将共享緩存区按照2的整数次幂分成多个内存块, 其中,相邻的两个内存块中的后一内存块的大小是前一内存块的大 小的2xn倍,n为大于等于l的整数;优选地,n=l,即,将共享 緩冲区的分块大小要按照2的整数次幂进行划分,最小的块大小可以才艮据系统的实际需要进行分块,比如32字节,然后依次划分为 32, 64, 128, 256, 512, 1K, 2K, 4K, 8K, 16K等;步骤S104,接收数据包,根据数据包的大小按照内存块的大小 顺序遍历可选内存块,这里^:到的可选内存块为等于或大于数据包 的大小的内存块;步骤S106,使用最先遍历到的空闲可选内存块保存数据包。该实施例通过将共享緩沖区按照2的整数次幂进行分块,能够 通过循环移位找到该数字的最高非O位,容易根据实际需要选择内 存块大小,加快了查找速度。根据步骤S104中遍历到的空闲可选内存块的大小的不同,步 艰《S106中的处理也有所差异。具体地,在空闲可选内存块的大小等 于数据包的大小的情况下,步骤S106具体包括直接使用空闲可选 内存块保存数据包。另外需要"i兌明的是,在本发明实施例中,优选地,具有相同大 小的内存块以链状排列,形成内存块链表(或者称为数据块链表)。基于此,在空闲可选内存块的大小大于数据包的大小的情况下, 步骤S106具体包括对空闲可选内存块执行分裂操作,得到具有相 同大小的两个子内存块(第一个字内存块和第二个子内存块),本发 明中,分裂操作用于将内存块均分为具有相同大小的两个子内存块; 并且将第二个子内存块(即,后一个子内存块)加入与其具有相同 大小的内存块组成的内存块链表;并且,判断第一个子内存块是否 为可用内存块,在判断结果为是的情况下,使用第一个子内存块保 存数据包,在判断结果为否的情况下,对第一个子内存块执行分裂 操作,直到分裂得到可用内存块,并使用可用内存块保存数据包,其中,可用内存块的大小等于数据包的大小,或者大于数据包的大 小且小于数据包的大小的两倍。乂人上面的描述可以看出,^y亍分裂的次凄t越少,则系统的效率 最高,因此,在初始规划内存块时,可以根据系统实际情况预先设置允许执行的分裂操作的级数阈值,只能进行l级或n级分裂,否则就直接使用而不分裂。设置分裂操作的级数阈值,按照可能申请 内存块大小的相克率来进行,可以通过内存块分裂的统计试-验进4亍头见 划,尽量减少内存分裂。通过本发明l是供的共享内存管理方法,能够对内存进4亍有效利 用,兼顾不同业务类型对数据包緩冲的大小以及数量的要求,提高 了系统的岁丈率。针对具体的通信系统,例如HSPA和LTE的系统,数据包大 量i也纟爰存在凄史才居包汇聚十办i义(Packet Data Convergence Protocol ,简 称为PDCP )子层和无线链路控制(Radio Link Control,简称为RLC ) 子层中;业务速率越高,RLC子层的窗口越大,则消4毛的包越多。 以PDCP子层为例,才艮据本发明实施例的共享内存管理方法包括以 下步骤步骤1. PDCP子层收到大小为p字节的数据包,向l乘作系统申 请p字节内存;步骤2.操作系统计算大于p字节的最小2的整数次幂,比如 为q,则查找q对应的ft据块《连表,如果有空闲凄t据块,则向PDCP 子层返回数据指针,跳转到步骤6,否则继续步骤3;步骤3.查找2q对应的内存块链表,如果有空闲内存块,则将 其分裂成同样大小的2块,前一块返回给PDCP子层,后一块挂到 大小为q的内存块链表尾,跳转到步骤6,否则继续步骤4;步骤4.查找4q对应的内存块链表,如果有空闲内存块,则将 其分裂成同样大小的2块,后一块挂到大小为2q的内存块链表中去, 前一块继续分裂成大小为q的两块,前一块返回给PDCP子层,后 一块挂到大小为q的内存块列表中去;步-骤5.以此类推,如果所有大于q的内存块都没有空闲,那 么表示申请空间失败,给PDCP返回空指针;步骤6. PDCP子层获得指针后,将收到的4fet据复制到该地址 所指向的空间。该实施例根据实际需要内存选择共享緩冲区中相应大小的内存 块进4亍存储,当该内存块用尽时,可以通过更大一级内存块等分分 裂得到;如果更大一级的内存块也已用尽,则可循环这一过程,直 到得到所需的内存块。通过上述实施例不仅加快了查找速度,并且 既不会浪费内存空间,也不会造成内存^f争片。此外,在进行分裂操作后,根据本发明实施例的共享内存管理 方法还包括如下处理对于执行分裂操作得到的加入内存块链表的 各个内存块,分别i殳置分裂标记,其中,分裂标记用于标识内存块 为分裂得到的内存块,以及内存块对应的分裂级数。这样是为了便 于后续的内存块回收处理,在进4亍内存回收时,对分裂得到的内存 块要进行合并,根据设置的分裂标记,可以找到相关的内存块。其中,在保存有数据包的内存块释放其保存的数据包的情况下, 根据本发明实施例的共享内存管理方法还包括检查内存块是否携 带有分裂标记,在判断结果为是的情况下,进一步查找是否有与其 大小相同的空闲的内存块,即,查找该内存块对应的分裂得到的另 一个内存块是否空闲;在查找到的情况下,将携带有分裂标记的内 存块与查找到的内存块进行合并,将合并得到的内存块根据大小加入相应的内存块链表,其中,在分裂标记标识的分裂级数为一级分裂的情况下,删除分裂标记,在分裂标记标识的分裂级^:大于一级 的情况下,将分裂标记的分裂级数减一。优选地,优先选择没有携带分裂标记的内存块执行分裂操作。具体地,下行数据包处理完毕,需要释放占用的内存块,根据 本发明实施例的共享内存管理方法包括以下步骤步骤1. PDCP子层要释放内存块大小为q的数据包;步骤2.检查该内存块是否为分裂所得,如果不是,则直接挂 到大小为q的内存块链表中去,处理结束;如果是分裂所得,那么 查找该内存块对应分裂的另一个内存块是否空闲,如果不空闲,那 么直接挂到大小为q的内存块列表中去,处理结束,如果空闲,继 续步骤3;步骤3.将地址连续的两块q大小的内存块合并,放入到2q对 应的内存块链表中去,如果仍然为分裂所得,则按照上面的过程继 续合并,否则处理结束。通过该实施例,将需要释放内存的较小的内存块合并成较大的 内存块,达到了系统的动态自适应平4軒。下面参考图2进一步描述本发明实施例。图2示出了才艮据本发 明实施例的共享内存管理方法的实现实例的示意图。将共享緩冲区 按照2的整凄t次幂分为32、 64、 128、 256、 512、 1K、 2K、 4K、 8K、 16K等多个数组,每个数组对应一个固定大小内存块的链表,每次 内存申请的时候,则从对应大小的链表头取出空闲内存块,内存返 还的时4矣,;改到队列尾部。内存块中打上分裂标志FI。如果没有空闲的2K的内存块,那么继续获得4K的内存块,首 先将4K的内存块分为2个2K的内存块,在后一个内存块上打上 FI,》文入2K内存块链表。然后,将前一个2K的分成两个1K的内 存块,4吏用第一个,而将后一个打上FI,》文入1K内存块链表。由于每次都是在后一个内存块上打上FI,当某个内存块被释放 时,如果发现有FI标志,则按照其相等长度,根据物理地址查找空 闲队列中是否有其前一个内存块,如果发现,则合并成一个更大的 内存块,放入大一级的内存块链表中,并去掉FI标志。在选取大一级内存块进行分裂的时候,尽量选择没有打过FI 标志的,因为对于打过FI标志的内存块,再进行分裂时,需要在后 一个分裂块中打上FI2标志,这里的FI2 —方面表示该内存块是通 过分裂所得,另一方面也表示是通过二级分裂所得。这样,在合并 时, 一个打着FI2标志的内存块和它的前一个(物理地址连续)相 同大小的内存块如果都空闲,则可以合并,那么合并之后的内存块, 如果其相同大小的前一个内存块空闲,则继续合并,否则,还需要 打上FI标志,等4寺下一次返还时试图合并,以此类4侓。乂人上面的描述可以看出,如果分裂越少,则系统的岁文率最高, 可以根据系统实际情况定制。因此,在初始规划内存块的时候,需 要尽可能科学的规划,按照可能申请内存块大小的概率来进行,可 以通过内存块分裂的统计试-验来进行失见划,尽量减少内存分裂。从策略上来说,应该在初始分配的时候,尽量分配多一些的较 大数据块,因为高速系统需要大量较大的数据块,同时较小数据块 可以从较大的数据块分裂得到。但是较小的数据块也必须同时保证 一定基本的数量,这些小数据块是不能被合并的,同时占用的内存 总量也不是特别大。/人处理的复杂度上看,系统具有明显的自适应性,当系统中的 某类长度数据包业务特别多的时候,该数据包大小的内存块单元将 明显减少,当用尽时,则需要从更大一级的数据包分裂得到,如果持续使用的量非常大,那么被分裂的内存块,也就是带FI的内存块, 和其前面的另 一个内存块同时空闲的概率很小,合并的概率就会很 小,从而避免了反复的分裂合并;其次,由于大量使用时,空闲的 内存块很少,所以搜索FI内存块对应同样大小的另一个内存块是否 空闲,也将变得简单。当该类大小的数据包业务减少的时候,空闲的^^几率增加,合并 的概率将大大增加,从而达到系统的动态自适应平衡,恢复到系统 启动时的平衡内存块分配状态。例如系统为每类大小的内存块都预先分了 10块,现在所有的 业务都需要1K大小的内存块,则1K的内存块很快就被用完了 ,此 时就要2K的内存块去分裂,如果全部分裂完毕,那么整个系统可 以用10 + 20 = 30个1K的内存块,如果还是不够那么继续分裂4K 的内存块,整个系统可以用10 + 20 + 40的1K内存块,由于Jt时 1K的内存块空闲链表很短,因此当1K的内存块返回时,很容易就 能搜索完整个链表,看是否需要内存块的合并。当1K大小的业务 十曼十曼少了的时候,随着1K内存块的逐渐释》文合并,系统又会恢复 原先的每类大小的内存块都为IO块的状态。综上所述,通过本发明提供的共享内存管理方法,能够对内存 进行有效利用,兼顾不同业务类型对数据包緩沖的大小以及数量的 要求,提高了系统的效率。显然,本领域的技术人员应该明白,上述的本发明的各模块或 各步艰《可以用通用的计算装置来实现,它们可以集中在单个的计算 装置上,或者分布在多个计算装置所组成的网络上,可选地,它们 可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成 电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模 块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述^又为本发明的优选实施例而已,并不用于限制本发明, 只寸于本4贞i或的^支术人员来i兌,本发明可以有各种更改和变^f匕。凡在 本发明的精神和原则之内,所作的任何修改、等同替换、改进等, 均应包含在本发明的保护范围之内。
权利要求
1.一种共享内存管理方法,其特征在于,包括将共享缓存区按照2的整数次幂分成多个内存块,其中,相邻的两个内存块中的后一内存块的大小是前一内存块的大小的2×n倍,n为大于等于1的整数;接收数据包,根据所述数据包的大小按照内存块的大小顺序遍历可选内存块,其中,所述可选内存块为等于或大于所述数据包的大小的内存块;使用最先遍历到的空闲可选内存块保存所述数据包。
2. 根据权利要求1所述的方法,其特征在于,在所述空闲可选内 存块的大小等于所述数据包的大小的情况下,所述使用最先遍 历到的空闲可选内存块保存所述数据包具体包括直接使用所述空闲可选内存块保存所述数据包。
3. 根据权利要求1所述的方法,其特征在于,具有相同大小的内 存块以链状排列,形成内存块链表。
4. 根据权利要求3所述的方法,其特征在于,在所述空闲可选内 存块的大小大于所述数据包的大小的情况下,所述使用最先遍 历到的空闲可选内存块保存所述凄t据包具体包括对所述空闲可选内存块执4亍用于将内存块均分为具有相 同大小的两个子内存块的分裂操:作,得到具有相同大小的两个 子内存块;根据第二个子内存块的大小将其加入相应的内存块链表;判断第一个子内存块是否为可用内存块,在判断结果为是 的情况下,使用所述第一个子内存块保存所述数据包,在判断 结果为否的情况下,对所述第 一个子内存块执行所述分裂操 作,直到分裂得到可用内存块,并使用所述可用内存块保存所 述数据包,其中,所述可用内存块的大小等于所述数据包的大 小,或者大于所述数据包的大小且小于所述数据包的大小的两 倍。
5. 根据权利要求4所述的方法,其特征在于,在执行所述分裂操 作时,预先设置允许执行的分裂操作的级数阈值。
6. 根据权利要求4所述的方法,其特征在于,在进行所述分裂操 作后,所述方法还包括对于#1行所述分裂才喿作得到的加入内存块《连表的各个内 存块,分别i殳置分裂标记,其中,所述分裂标记用于标识所述 内存块为分裂得到的内存块,以及所述内存块对应的分裂级 数。
7. 根据权利要求6所述的方法,其特征在于,在保存有数据包的 内存块释》文其保存的数据包的情况下,所述方法还包括检查所述内存块是否携带有分裂标记,在判断结果为是的 情况下,进一步查找是否有与其大小相同且物理地址连续的空 闲的内存块;在查找到所述空闲的内存块的情况下,将携带有分裂标记 的内存块与查找到的内存块进行合并,将合并得到的内存块根 据大小加入相应的内存块链表,其中,在所述分裂标记标识的 分裂级lt为一级分裂的情况下,删除所述分裂标记,在所述分 裂标记标识的分裂级凄t大于一级的情况下,将所述分裂标记的 分裂级数减一。
8. 根据权利要求7所述的方法,其特征在于,在查找不到所述空 闲的数据块的情况下,将所述内存块才艮据大小加入与其对应的 凄t据块链表。
9. 根据权利要求6所述的方法,其特征在于,优先选择没有携带 所述分裂标记的内存块执行所述分裂操作。
10. 根据权利要求1所述的方法,其特征在于,所述共享緩存区的 最小内存块为32字节。
11. 根据权利要求2至10中任一项所述的方法,其特征在于,n = L
全文摘要
本发明公开了一种共享内存管理方法,该方法包括将共享缓存区按照2的整数次幂分成多个内存块,其中,相邻的两个内存块中的后一内存块的大小是前一内存块的大小的2×n倍,n为大于等于1的整数;接收数据包,根据数据包的大小按照内存块的大小顺序遍历可选内存块,其中,可选内存块为等于或大于数据包的大小的内存块;使用最先遍历到的空闲可选内存块保存数据包。通过本发明,能够提高系统效率。
文档编号H04L1/00GK101630992SQ20081013794
公开日2010年1月20日 申请日期2008年7月14日 优先权日2008年7月14日
发明者阮象华, 侃 黄 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1