内存分配方法及装置制造方法及图纸

技术编号:13795214 阅读:61 留言:0更新日期:2016-10-06 11:59
本发明专利技术提供一种内存分配方法及装置,其中,上述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。本发明专利技术提供的内存分配方法采用每CPU变量机制,每个CPU只操作对应内存节点链表中的内存节点,使得在需要高频申请和释放内存的程序运行过程中,在不对占有的内存资源加锁的情况下实现临界资源的同步管理,提高了设备的内存分配效率和并发处理性能。

【技术实现步骤摘要】

本专利技术涉及网络通信
,特别地,涉及一种内存分配方法及装置
技术介绍
内存是CPU能直接寻址的存储空间,数据处理设备内各种软件程序的运行,都要被加载到内存的适当位置。因此,如何使用有效的方法分配内存资源是提高数据处理设备性能的关键因素。现有技术一般采用需要时申请不需要时释放的内存分配策略分配内存,具体为:启动一个应用程序时,CPU从系统内存块中申请一块所需大小的内存,并将该块内存上锁,即在此程序运行期间不允许其他软件程序使用该块内存,也就是内存操作中涉及的同步锁操作和临界资源的操作。所谓同步锁操作,是指当一个程序进程要使用某块内存资源时,就将该内存块上锁,等该进程运行完毕后再把锁给另一个要用上述内存块的进程。所谓临界资源,是指多个程序进程采用互斥方式实现共享的资源。所谓临界资源的操作,是指一次仅允许一个程序进程使用共享资源。对于需要高频申请和释放内存的应用程序,采用现有的内存分配方法,在内存操作过程中因为涉及到较多的同步锁和临界资源的操作,影响数据处理设备的并发处理性能。
技术实现思路
有鉴于此,本专利技术提供一种内存分配方法,应用于数据处理设备中,上述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存
节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。可选的,上述为每个CPU建立一条内存节点链表,具体包括:确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;从系统内存中为每个CPU分配内存页;依据上述内存节点的大小对上述内存页进行节点切分,获取切分后的内存节点;为上述切分后的内存节点的上述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表。可选的,上述管理区头部的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,上述内存节点的指针用于指向下一个内存节点;上述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;上述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。可选的,上述内存分配方法,还包括:在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。可选的,上述从系统内存中为每个CPU分配内存页,具体包括:向系统内存申请内存页;判断上述内存页计数器记录的内存页计数是否达到预置最大内存页数;如果上述内存页计数小于上述最大内存页数,则继续从系统内存中分配新的内存页,同时触发上述内存页计数器将上述内存页计数加1;如果上述内存页计数已达到上述最大内存页数,则不再从系统内存分配新的内存页。对应的,本专利技术实施例还提供了一种内存分配装置,包括:每CPU变量创建模块,用于为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变
量中;内存申请模块,用于在CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;内存释放模块,用于在CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。可选的,上述每CPU变量创建模块具体包括:节点大小确定单元,用于确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;内存页分配单元,用于从系统内存中为每个CPU分配内存页;节点切分单元,用于依据上述内存节点的大小对上述内存页进行节点切分,获取切分后的内存节点;赋值单元,用于为上述切分后的内存节点的上述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表;存储单元,用于将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中。可选的,上述赋值单元赋值的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,上述内存节点的指针用于指向下一个内存节点;上述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;上述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。可选的,上述每CPU变量创建模块还包括:内存页计数单元,用于在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。可选的,上述内存页分配单元具体包括:内存申请子单元,用于向系统内存申请内存页;判断子单元,用于判断上述内存页计数单元记录的内存页计数是否达到预置最大内存页数;分配执行子单元,用于在上述内存页计数小于上述最大内存页数的情况下,从系统内存中分配新的内存页,同时触发上述计数单元中的内存页计数器将上述内存页计数加1;分配终止子单元,用于在上述内存页计数达到上述最大内存页数的情况下,不再通知上述分配
执行单元从系统内存分配新的内存页。具体地,本专利技术是通过如下技术方案实现的:本专利技术提供的内存分配方法在应用程序运行于单核或多核数据处理器时,预先为每个CPU分配一个内存节点链表,采用每CPU变量机制,每个CPU只操作对应内存节点链表中的内存节点,使得在需要高频申请和释放内存的程序运行过程中,每个CPU操作自己内存节点链表中的内存节点,相互不干涉。因而,当CPU修改自己变量时无需担心出现竞争条件,即在不对占有的内存资源加锁的情况下实现临界资源的同步管理,提高了设备的内存分配效率和并发处理性能。附图说明图1是本专利技术内存分配方法实施例的流程图;图2是本专利技术实施例中每CPU变量的结构示意图;图3是本专利技术为每个CPU建立内存节点链表的流程图;图3-1是本专利技术实施例中一个内存节点的结构示意图;图3-2是本专利技术实施例中分配内存页和切分节点的示意图;图4是本专利技术实施例从系统内存中分配内存页的流程示意图;图5是本专利技术内存分配装置实施例的结构框图;图6是本专利技术每CPU变量创建模块实施例一的结构框图;图7是本专利技术每CPU变量创建模块实施例二的结构框图;图8是本专利技术实施例中内存页分配单元的结构框图;图9是本专利技术内存分配装置所在设备的一种硬件结构图。具体实施方式为使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本专利技术作进一步详细的说明。本专利技术实施例的一个应用场景为网络设备对网络协议的识别过程。在网络协议识别过程中,有一部分网络协议是通过pcre(Perl Compatible Regular
Expressions,Perl兼容正则表达式)特征识别的。在pcre特征的识别过程中,要进行正则表达式的匹配,需要不断的进行内存的申请和释放,如果内存操作采用现有技术中使用的需要时申请不需要时释放的处理方案,因为内存操作过程中涉及到较多的同步锁和临界资源的操作,会影响设备的并发处理性能,鉴于此,本专利技术提供了一种优化的适用于高频申请和释放内存的内存分配方法。参照图1,示出了本专利技术内存分配方法实施本文档来自技高网
...

【技术保护点】
一种内存分配方法,应用于数据处理设备中,其特征在于,所述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。

【技术特征摘要】
1.一种内存分配方法,应用于数据处理设备中,其特征在于,所述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。2.根据权利要求1所述的内存分配方法,其特征在于,所述为每个CPU建立一条内存节点链表,具体包括:确定CPU运行应用程序所需内存节点的大小,所述内存节点包括:管理区头部和数据区;所述内存节点的数据区的大小为满足所述应用程序运行所需的最小内存空间的大小;从系统内存中为每个CPU分配内存页;依据所述内存节点的大小对所述内存页进行节点切分,获取切分后的内存节点;为所述切分后的内存节点的所述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表。3.根据权利要求2所述的内存分配方法,其特征在于,所述管理区头部的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,所述内存节点的指针用于指向下一个内存节点;所述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;所述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。4.根据权利要求3所述的内存分配方法,其特征在于,还包括:在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统
\t内存为每个CPU分配的内存页的页数。5.根据权利要求4所述的内存分配方法,其特征在于,所述从系统内存中为每个CPU分配内存页,具体包括:向系统内存申请内存页;判断所述内存页计数器记录的内存页计数是否达到预置最大内存页数;如果所述内存页计数小于所述最大内存页数,则继续从系统内存中分配新的内存页,同时触发所述内存页计数器将所述内存页计数加1;如果所述内存页计数已达到所述最大内存页数,则不再从系统内存分配新的内存页。6.一种内存分配装置,其特征在于,包括:每CPU变量创建模块,用于为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组...

【专利技术属性】
技术研发人员:张津才
申请(专利权)人:杭州迪普科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1