通信设备中数据包的存储方法

文档序号:7591672阅读:111来源:国知局
专利名称:通信设备中数据包的存储方法
技术领域
本发明涉及通信技术,特别涉及通信设备中数据的存储技术。
背景技术
多任务环境中的应用由一系列互相独立又协同工作的任务组成。系统中任务之间的通信主要通过发送消息来完成。消息传送的载体是消息包,这里所述的消息包是指系统中用于存储待发送的消息的内存单元。为了适应多个任务的要求,系统要提供消息包的管理功能,如消息包的配置、申请、释放等。
具体来说,上述消息包是通信系统中必须仔细管理的重要资源。虽然现在通信设备系统中的内存容量越来越大,甚至达到60年代早期全世界最大的计算机内存容量的数倍,但是程序长度的增长速度和内存容量的增长一样快,而且系统中各任务间须发送的消息也越来越多。因而,在一个系统中,通常都需要进行消息包的管理。这些管理算法的任务是跟踪正在使用那些内存单元、哪些内存单元空闲、在需要时为任务分配消息包、使用结束后释放消息包等。
上述管理方法的优劣将直接影响整个系统-特别是实时系统的性能。在一个实时系统中,如果需要通信时却不能快速有效的申请到消息包,则会很大的影响实时性能,甚至引发通信中断。
另一方面,目前对存储器的管理可以分为两类在运行期间将数据在内存与磁盘之间进行移动的系统和不进行移动的系统。之所以进行移动,在很大程度上是由于缺少足够的内存存储相应的数据。而本发明所针对的主要是通信设备系统中,任务间发送消息时的内存分配问题。由于此应用一般对内存需求不大,所以无须在内存和磁盘间进行移动。
现有技术中,为了在通信设备系统中实现任务间消息发送而进行的消息包分配方法,通常采用单一的管理方法消息单元(UNIT)管理方法。在此方法中,用很多固定大小-通常为128字节-的内存单元组成单元池,申请和释放操作都是以能满足用户大小的连续多个内存单元为单位进行的。例如,假设系统内要发送大小为256字节的消息,则系统须在其内存中搜索出连续两个内存单元,然后分配给此消息。此方法最大的优势是实现简单,只需要极少的操作和系统开销。
在实际应用中,上述方案存在以下问题一方面,内存单元的大小固定为单一值,很难兼顾各种不同应用的时间和空间效率;另一方面,系统长期运行后,大消息包和小消息包交叉在一起,不断的申请释放,会导致申请时搜索合适的连续多个内存单元效率降低,而且容易产生碎片,导致一些资源很难再利用。
造成这种情况的主要原因在于,方法单一,只能提供单一固定大小的内存单元;在此情况下,所提供的搜索和释放方法效率低下,并导致资源浪费和性能不稳。

发明内容
有鉴于此,本发明的主要目的在于提供一种通信设备中数据包的存储方法,使得系统能充分利用内存资源,提高系统的稳定性和抗冲击性。
为实现上述目的,本发明提供了一种通信设备中数据包的存储方法,包含以下步骤A在所述通信设备的内存中预留第一空间和第二空间,并将所述第一空间分解为多种固定大小的内存块,将所述第二空间分解为一种相同大小的内存块;
B当所述通信设备收到数据包时,判断该数据包的大小是否超过门限,如果是则进入步骤C,否则进入步骤D;C在所述第二空间里,分配总体大小大于或等于所述数据包大小的一个或连续多个空闲状态内存块给所述数据包;D在所述第一空间里,分配一个大于或等于所述数据包大小的空闲状态内存块给所述数据包。
其中,所述第二空间里内存块比所述第一空间里内存块的大。
还包含以下步骤E所述通信设备处理完所述数据包后,将分配给该数据包的内存块重新设置为空闲状态。
所述步骤A还进一步包含以下子步骤对每一种大小的内存块,将所有内存块都设置为空闲状态,使用一个链表保存处于空闲状态的所有内存块的位置;所述步骤C和D还进一步包含以下子步骤当为所述数据包分配了内存块后,将被分配的内存块设置为非空闲状态,并从所述链表中删除该内存块的位置;所述步骤E还进一步包含以下子步骤当所述内存块被重新设置为空闲状态以后,将这些内存块的位置加入所述链表。
所述步骤D中,被分配的所述内存块是大小最接近所述数据包的内存块。
所述第一空间里每一种大小的内存块数目可以根据所述通信设备收到各类数据包数量的理论模拟值或实际统计值设置。
所述第二空间里内存块的大小等于或大于所述门限的数据包中使用频率最高的数据包大小。
通过比较可以发现,本发明的技术方案与现有技术的区别在于,使用了混合方法,对小消息包采用区块管理方法,根据单向链表,对号入座;对大消息包采用单元管理方法,申请和释放操作都是以能满足用户大小的连续多个消息单元为单位进行。
这种技术方案上的区别,带来了较为明显的有益效果,即充分利用内存资源,防止了碎片产生;同时增强了系统稳定性和长期运行的抗冲击性。


图1是根据本发明的一个实施例的消息包分配方法中区块管理方法流程;图2是根据本发明的一个实施例的消息包分配方法中单元管理方法流程;图3是根据本发明的一个实施例的消息包分配方法中混合方法的工作流程。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
总体而言,本发明的原理是采用一种混合的消息内存管理方法,即混合了区块管理(BLK_MANAGE)方法和单元管理(UNIT_MANAGE)方法。两种方法针对不同大小类型的消息包实现分配管理。
下面先分别说明两种方法的实现,然后再说明本发明如何综合运用两种方法,从而得出一种消息包分配方法。
首先,在BLK_MANAGE方法中,消息包申请及释放操作都是以单个区块(BLK)为单位进行的,每个BLK块独自构成为一个消息包,所有相同大小的BLK块类型用索引工具来管理,把空闲BLK块串成一个单向链表,这样在分配和释放时,只需要一次操作就可以了。在该链表中,如果一个BLK块被分配出去,它将被标记为非空闲状态,并从链表中删除;如果一个BLK块被释放,则将被标记为空闲状态,并重新进入链表。
值得说明的是,这种方法得以实现的前提是一个BLK块就可以满足用户一次申请消息时的大小需求,即BLK块应大于或等于消息大小,所以通常适合于小消息包的申请;此外,被分配的BLK块应是大小最接近待发消息的BLK块。各个系统可以根据实际情况预先配置多种大小的BLK块以及每一种BLK块的数量。一般情况下,所设置的BLK块大小与系统常用消息大小相当。作为本发明的一个较佳实施例,表一所表示的系统中设置了大小分别为64字节、128字节、256字节、512字节和1024字节的BLK块,每种BLK块的数量分别为500个、100个、100个、100个和100个。熟悉本领域的技术人员可以理解,所设置BLK块的大小及其相应个数的多少并不影响本发明的实质和范围。
表一

下面结合附图1说明BLK_MANAGE算法模块10的实现首先,在步骤101中,系统预先分配不同大小的内存BLK块及其相应个数。如前所述,内存BLK块的大小及其数量的多少,将根据不同的系统应用而有所不同。
接着进入步骤102,系统为每一种BLK块建立一个指向空闲区块的单向链表,在本步骤中,系统预设了多少种大小的BLK块就应建立多少个单向链表。
最后进入步骤103,系统根据消息的尺寸大小,通过查询相应链表,直接对号入座。这样,节省了搜索空闲包的操作并防止了碎片的产生,从而大大提高了系统,特别是实时系统的效率和实时性。
接着说明UNIT_MANAGE方法,它与原来的UNIT消息单元管理方法类似。它以消息单元池为基础,消息包的分配和释放都是以连续的消息单元为基础的。但它须根据实际需要对消息单元大小进行重新配置。
值得说明的是,该方法主要是当用户申请大消息包时用到,由于小消息包用BLK块的方式可以优先申请到,所以这里把最常用到的大的消息包大小作为消息单元大小,使得大部分情况一个消息单元就构成一个消息包,特殊大包才由多个连续消息单元构成。这样可以大大提高大包的申请效率。
下面结合附图2说明UNIT_MANAGE算法模块20的实现首先,进入步骤201,系统预设消息单元的大小及其数量。如上所述,系统把最常用到的大的消息包大小作为消息单元大小,使得大部分情况一个消息单元就构成一个消息包。
然后进入步骤202,搜索能满足用户大小的一个或连续多个消息单元分配给消息包。消息包的申请和释放都是以能满足用户需求的一个或连续多个消息单元为单位的。这与现有技术的操作相类似。
需要指出的是,消息包大小的分类可以通过真实环境测试数据,也可以通过应用模型进行理论分析,从而综合两者获取一个最佳的分类方式,包括类别的个数、每类块内存的大小和个数。它们数值的不同,不会影响本发明的实质和范围。
下面结合附图3说明本发明如何综合运用两种方法,从而实现消息包分配。
首先,进入步骤301,系统预分配两个内存空间,分别用于BLK_MANAGE方法和UNIT_MANAGE方法。其中,在用于BLK_MANAGE方法的内存空间中,系统将根据实际应用分配不同大小的BLK块及其相应数量;在用于UNIT_MANAGE方法的内存空间中,系统将预设消息单元的大小及其相应数量。
接着,进入步骤302,当一个系统发送信息时,它先判断消息大小是否小于预设门限,如果是,则进入步骤303,否则进入步骤304。该门限的数值为BLK_MANAGE方法中所预设的最大BLK块大小。
在步骤303中,进入BLK_MANAGE算法模块10,调用BLK_MANAGE方法。具体步骤如前面附图1所述。
在步骤304中,进入UNIT_MANAGE算法模块20,调用UNIT_MANAGE方法。具体步骤如前面附图2所述。
作为本发明的一个较佳实施例,表一所列出的系统中,如果需要发送大小为256字节的消息,则系统将调用BLK_MANAGE方法,根据消息包的尺寸大小,找到256字节消息包所对应的链表,通过查询相应链表,直接将消息放入空闲消息包中;如果所述系统需要发送大小为4096字节的消息,则系统将调用UNIT_MANAGE方法,搜索出两个连续的消息单元,并将其分配给所述消息。
虽然通过参照本发明的某些优选实施例,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种各样的改变,而不偏离所附权利要求书所限定的本发明的精神和范围。
权利要求
1.一种通信设备中数据包的存储方法,其特征在于,包含以下步骤A在所述通信设备的内存中预留第一空间和第二空间,并将所述第一空间分解为多种固定大小的内存块,将所述第二空间分解为一种相同大小的内存块;B当所述通信设备收到数据包时,判断该数据包的大小是否超过门限,如果是则进入步骤C,否则进入步骤D;C在所述第二空间里,分配总体大小大于或等于所述数据包大小的一个或连续多个空闲状态内存块给所述数据包;D在所述第一空间里,分配一个大于或等于所述数据包大小的空闲状态内存块给所述数据包。
2.根据权利要求1所述的通信设备中数据包的存储方法,其特征在于,所述第二空间里内存块比所述第一空间里内存块的大。
3.根据权利要求1所述的通信设备中数据包的存储方法,其特征在于,还包含以下步骤E所述通信设备处理完所述数据包后,将分配给该数据包的内存块重新设置为空闲状态。
4.根据权利要求1所述的通信设备中数据包的存储方法,其特征在于,所述步骤A还进一步包含以下子步骤对每一种大小的内存块,将所有内存块都设置为空闲状态,使用一个链表保存处于空闲状态的所有内存块的位置;所述步骤C和D还进一步包含以下子步骤当为所述数据包分配了内存块后,将被分配的内存块设置为非空闲状态,并从所述链表中删除该内存块的位置;所述步骤E还进一步包含以下子步骤当所述内存块被重新设置为空闲状态以后,将这些内存块的位置加入所述链表。
5.根据权利要求1所述的通信设备中数据包的存储方法,其特征在于,所述步骤D中,被分配的所述内存块是大小最接近所述数据包的内存块。
6.根据权利要求1所述的通信设备中数据包的存储方法,其特征在于,所述第一空间里每一种大小的内存块数目可以根据所述通信设备收到各类数据包数量的理论模拟值或实际统计值设置。
7.根据权利要求1至6中任意一条所述的通信设备中数据包的存储方法,其特征在于,所述第二空间里内存块的大小等于或大于所述门限的数据包中使用频率最高的数据包大小。
全文摘要
本发明涉及通信技术,公开了一种通信设备中数据包的存储方法,使得系统能充分利用内存资源,提高系统的稳定性和抗冲击性。这种通信设备中数据包的存储方法包含以下步骤A在通信设备的内存中预留第一空间和第二空间,并将第一空间分解为多种固定大小的内存块,将第二空间分解为一种相同大小的内存块;B当通信设备收到数据包时,判断该数据包的大小是否超过门限,如果是则进入步骤C,否则进入步骤D;C在第二空间里,分配总体大小大于或等于数据包大小的一个或连续多个空闲状态内存块给数据包;D在第一空间里,分配一个大于或等于数据包大小的空闲状态内存块给数据包。
文档编号H04L12/56GK1691637SQ20041003495
公开日2005年11月2日 申请日期2004年4月27日 优先权日2004年4月27日
发明者何华 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1