内存分配方法及装置的制造方法

文档序号:10624652阅读:319来源:国知局
内存分配方法及装置的制造方法
【专利摘要】本发明提供一种内存分配方法及装置,其中,上述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。本发明提供的内存分配方法采用每CPU变量机制,每个CPU只操作对应内存节点链表中的内存节点,使得在需要高频申请和释放内存的程序运行过程中,在不对占有的内存资源加锁的情况下实现临界资源的同步管理,提高了设备的内存分配效率和并发处理性能。
【专利说明】
内存分配方法及装置
技术领域
[0001]本发明涉及网络通信技术领域,特别地,涉及一种内存分配方法及装置。
【背景技术】
[0002]内存是CPU能直接寻址的存储空间,数据处理设备内各种软件程序的运行,都要被加载到内存的适当位置。因此,如何使用有效的方法分配内存资源是提高数据处理设备性能的关键因素。
[0003]现有技术一般采用需要时申请不需要时释放的内存分配策略分配内存,具体为:启动一个应用程序时,CPU从系统内存块中申请一块所需大小的内存,并将该块内存上锁,即在此程序运行期间不允许其他软件程序使用该块内存,也就是内存操作中涉及的同步锁操作和临界资源的操作。所谓同步锁操作,是指当一个程序进程要使用某块内存资源时,就将该内存块上锁,等该进程运行完毕后再把锁给另一个要用上述内存块的进程。所谓临界资源,是指多个程序进程采用互斥方式实现共享的资源。所谓临界资源的操作,是指一次仅允许一个程序进程使用共享资源。
[0004]对于需要尚频申请和释放内存的应用程序,米用现有的内存分配方法,在内存操作过程中因为涉及到较多的同步锁和临界资源的操作,影响数据处理设备的并发处理性會K。

【发明内容】

[0005]有鉴于此,本发明提供一种内存分配方法,应用于数据处理设备中,上述方法包括:为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中;CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。
[0006]可选的,上述为每个CPU建立一条内存节点链表,具体包括:确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;从系统内存中为每个CPU分配内存页;依据上述内存节点的大小对上述内存页进行节点切分,获取切分后的内存节点;为上述切分后的内存节点的上述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表。
[0007]可选的,上述管理区头部的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,上述内存节点的指针用于指向下一个内存节点;上述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;上述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。
[0008]可选的,上述内存分配方法,还包括:在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。
[0009]可选的,上述从系统内存中为每个CPU分配内存页,具体包括:向系统内存申请内存页;判断上述内存页计数器记录的内存页计数是否达到预置最大内存页数;如果上述内存页计数小于上述最大内存页数,则继续从系统内存中分配新的内存页,同时触发上述内存页计数器将上述内存页计数加I;如果上述内存页计数已达到上述最大内存页数,则不再从系统内存分配新的内存页。
[0010]对应的,本发明实施例还提供了一种内存分配装置,包括:每CPU变量创建模块,用于为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中;内存申请模块,用于在CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;内存释放模块,用于在CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。
[0011]可选的,上述每CPU变量创建模块具体包括:节点大小确定单元,用于确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;内存页分配单元,用于从系统内存中为每个CPU分配内存页;节点切分单元,用于依据上述内存节点的大小对上述内存页进行节点切分,获取切分后的内存节点;赋值单元,用于为上述切分后的内存节点的上述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表;存储单元,用于将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中。
[0012]可选的,上述赋值单元赋值的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,上述内存节点的指针用于指向下一个内存节点;上述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;上述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。
[0013]可选的,上述每CPU变量创建模块还包括:内存页计数单元,用于在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。
[0014]可选的,上述内存页分配单元具体包括:内存申请子单元,用于向系统内存申请内存页;判断子单元,用于判断上述内存页计数单元记录的内存页计数是否达到预置最大内存页数;分配执行子单元,用于在上述内存页计数小于上述最大内存页数的情况下,从系统内存中分配新的内存页,同时触发上述计数单元中的内存页计数器将上述内存页计数加I;分配终止子单元,用于在上述内存页计数达到上述最大内存页数的情况下,不再通知上述分配执行单元从系统内存分配新的内存页。
[0015]具体地,本发明是通过如下技术方案实现的:本发明提供的内存分配方法在应用程序运行于单核或多核数据处理器时,预先为每个CPU分配一个内存节点链表,采用每CPU变量机制,每个CPU只操作对应内存节点链表中的内存节点,使得在需要高频申请和释放内存的程序运行过程中,每个CPU操作自己内存节点链表中的内存节点,相互不干涉。因而,当CPU修改自己变量时无需担心出现竞争条件,即在不对占有的内存资源加锁的情况下实现临界资源的同步管理,提高了设备的内存分配效率和并发处理性能。
【附图说明】
[0016]图1是本发明内存分配方法实施例的流程图;
[0017]图2是本发明实施例中每CPU变量的结构示意图;
[0018]图3是本发明为每个CPU建立内存节点链表的流程图;
[0019]图3-1是本发明实施例中一个内存节点的结构示意图;
[0020]图3-2是本发明实施例中分配内存页和切分节点的示意图;
[0021]图4是本发明实施例从系统内存中分配内存页的流程示意图;
[0022]图5是本发明内存分配装置实施例的结构框图;
[0023]图6是本发明每CPU变量创建模块实施例一的结构框图;
[0024]图7是本发明每CPU变量创建模块实施例二的结构框图;
[0025]图8是本发明实施例中内存页分配单元的结构框图;
[0026]图9是本发明内存分配装置所在设备的一种硬件结构图。
【具体实施方式】
[0027]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0028]本发明实施例的一个应用场景为网络设备对网络协议的识别过程。在网络协议识别过程中,有一部分网络协议是通过 pcre (Perl Compatible Regular Express1ns, Perl兼容正则表达式)特征识别的。在pcre特征的识别过程中,要进行正则表达式的匹配,需要不断的进行内存的申请和释放,如果内存操作采用现有技术中使用的需要时申请不需要时释放的处理方案,因为内存操作过程中涉及到较多的同步锁和临界资源的操作,会影响设备的并发处理性能,鉴于此,本发明提供了一种优化的适用于高频申请和释放内存的内存分配方法。
[0029]参照图1,示出了本发明内存分配方法实施例的流程图,该方法实施例应用于数据处理设备中,包括:
[0030]步骤11、为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于上述每CPU变量中;
[0031]其中,图2示出了本发明实施例中每CPU变量的结构示意图,假设网络设备有3个内核,分别为CPUl、CPU2、CPU3,在利用pcre特征匹配实现网络协议识别的过程中,3个CPU可以同时运行,并行处理pcre特征识别。
[0032]在系统运行之前,预先为每个CPU分配一个空闲的内存节点链表,系统刚启动时,内存节点链表是空的,之后向系统内存申请内存页,把内存页划分成节点,同时把这些划分出来的节点挂载到上述内存节点链表中。具体地,将每个CPU对应的内存节点链表的头节点存储于上述每CPU变量中,得到如图2所示的由每CPU变量管理的内存节点链表。在图2中,每个CPU对应一条空闲内存节点链表,每条空闲内存节点链表设置有一个头指针,指向本空闲内存节点链表的头节点Nodel-l、Node2_l或Node3_l。由于每个节点包含有指向下一节点的指针,所以每个CPU对应的头指针可以通过操作每CPU变量的头节点来操作对应内存节点链表中的内存节点。
[0033]从数据结构的组成来讲,每CPU变量为一个数组,包含N个数组元素,其中,N代表CPU的数量,系统为每个CPU分配的内存节点链表即为上述数组中的一个数组元素。根据每CPU变量的定义,每个CPU仅可操作自己的数组元素,也就是说,在图2所示的每CPU变量的结构中,CPUl在运行pcre特征识别的过程中,只能操作CPUl对应的内存节点链表中的内存节点,用于存储待匹配的pcre特征。
[0034]步骤12、CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;
[0035]CPU在运行程序时,根据需要的内存大小,利用每CPU变量机制,直接从对应的内存节点链表中摘取所需数量的内存节点。具体地,CPU运行应用程序时,首先判断当前内存节点链表中是否所需数量的空闲内存节点,如果有,从上述内存节点链表中摘取,摘取成功后,将摘取的内存节点的管理区头部的状态标识由空闲状态修改为已分配状态。如果当前内存节点链表中剩余空闲内存节点的数量不足,则向系统内存申请新的内存页,以便节点切分后挂摘入上述内存节点链表中供CPU申请使用。
[0036]采用每CPU变量机制,因为每个CPU都对应自己的数组元素,并且只能操作自己的数组元素,也就是说,每条内存节点链表就是一个临界资源,这样在当前CPU修改自己变量的时候不需要担心出现竞争条件,这样就在“无锁”的情况下实现了临界资源的同步管理。
[0037]步骤13、CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。
[0038]由于每个内存节点的管理区头部都存储有CPU标识,所以CPU在释放内存节点后,可以根据其管理区头部的CPU标识,将释放后的内存节点归还至对应的内存节点链表中。具体地,将上述内存节点链表的头指针指向被释放内存节点,修改被释放内存节点的指针,使其指向内存节点链表中其他空闲节点,同时将被释放内存节点的状态标识由已分配修改为空闲。
[0039]图3示出了步骤11中,为每个CPU建立内存节点链表的过程,具体包括:
[0040]步骤111、确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;
[0041]具体地,每个内存节点包括两部分:管理区头部和数据区,如图3-1上述的内存节点的结构示意图。其中,管理区头部用于存储该节点的指针类型、状态标识、CPU身份标识;其中,指针类型用于指向下一节点和/或上一节点;状态标识用于表示当前节点处于空闲状态或已分配状态;CPU身份标识用于表示当前节点属于哪个CPU对应的内存节点链表。
[0042]数据区为CPU运行程序时实际可使用的内存区,即用于存储程序运行过程中的中间数据。在pcre特征识别过程中,节点的数据区具体为用于存储一个待匹配特征的内存区。
[0043]根据实际需要来定,不同的应用场景所需要的每个节点大小是不一样的,比如上述pcre特征匹配过程中,CPU运行程序时所需的每个节点的数据区的大小就是一个待匹配的特征的大小。
[0044]一个内存节点链表中节点的数目,可以通过系统运行的实际情况统计得出。一个链表中节点的最大数目不大于根据系统的实际运行情况统计出的所需节点数的最大值。如,可以将内存节点链表中的节点数目设置为根据系统的实际运行情况统计出的所需节点数的平均值。
[0045]步骤112、从系统内存中为每个CPU分配内存页;
[0046]参见图3-2所示的分配内存页和切分节点的示意图,在系统初始化时,从系统内存中为每个CPU分配一个内存页P1,准备进行节点划分。可选的,可以同时启动一个内存页计数器,一个内存节点链表对应一个内存页计数器,在系统初始化时,为每个CPU分配第一个内存页时,启动上述内存页计数器,赋值为I。
[0047]在CPU运行应用程序的过程中,若发现当前内存节点链表中可操作的空闲内存节点数量不足或者没有可操作的空闲内存节点,从系统内存中为CPU分配新的内存页,准备进行节点划分,即在CPU运行应用程序的过程中,若存在内存节点链表中的空闲节点不足,仍然可以从系统内存中继续为该CPU分配新的内存页,准备进行节点划分。可选的,在后续内存页分配过程中,从系统内存中为一个CPU每增加一个内存页,对应的内存页计数器的数值增加I。
[0048]步骤113、依据上述内存节点的大小对上述内存页进行节点切分,获取切分后的内存节点;
[0049]如图3-2所示,以系统初始化时分配的一个大小为4K的内存页为例,假设步骤111确定的每个节点的大小为32字节,则可以将一个内存页划分为128个节点,计算方法为:4096 + 32 = 128,其中,4KX 1024字节/K = 4096字节。即从内存页Pl中切分出a2、?3......an T?点,η = 128。
[0050]步骤114、为切分后的内存节点的管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表。
[0051]如上上述,每个内存节点的管理区头部的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,内存节点的指针用于指向下一个内存节点;内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态,在初始状态下,所有节点的状态均标记为空闲;内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。对上述三个参数赋值完成后,将内存节点挂载到内存节点链表中。
[0052]进一步可选的,本发明实施例在建立内存节点链表过程中,在从系统中分配内存页时,尤其是在实施步骤112从系统内存中为每个CPU分配内存页时,若CPU在运行应用程序时发现当前内存节点链表中处于空闲状态的内存节点的数量不足,需要向系统内存后续申请新的内存页时,可以增加判断已分配内存页的页数的步骤。具体参照图4所示的从系统内存分配内存页的流程示意图,具体包括:
[0053]步骤41、向系统内存申请内存页;
[0054]该步骤可以是系统初始化时向系统内存申请内存页,也可以是在CPU运彳丁应用程序时发现内存节点链表中的空闲内存节点不足后,向系统内存申请增加新的内存页,本实施例尤其适用于后者。
[0055]步骤42、判断内存页计数器记录的内存页计数P是否已达到预置最大内存页数
Pmax,
[0056]其中,上述预置最大内存页数Pniax是根据系统实际运行情况,统计CPU在运行应用程序时所需的最大内存空间而设置的。
[0057]步骤43、如果上述内存页计数小于上述最大内存页数,即:Ρ < Ρ_,则继续从系统内存中分配新的内存页,同时触发上述内存页计数器将内存页计数加I;
[0058]步骤44、如果上述内存页计数已达到上述最大内存页数,S卩:P = P_,则不再从系统内存分配新的内存页。
[0059]本实施例,在向系统内存申请内存页的情况下,首先判断分配给每CPU变量的内存页是否已达到预置最大内存页数,若已达到,则拒绝响应分配新的内存页。增加上述步骤,可以保证预分配内存量可控,有效避免CPU运行一个应用程序时预分配给每个CPU的内存资源过多,以免影响系统中其他应用程序的运行。
[0060]综上,本发明提供的内存分配方法,采用预分配的方式,预先为每个CPU分配好一部分内存即内存节点链表,存储在每CPU变量中。在CPU运行应用程序时,根据应用程序的需要,采用每CPU变量机制,直接从预分配好的内存节点链表中申请内存节点,然后在内存节点包含的内存空间中运行该应用程序。与现有技术通过伙伴系统申请内存空间相比,提高了内存管理效率。
[0061 ] 由于采用了每CPU变量机制,每个CPU只能操作自己的内存节点链表中的内存节点,也就是说,每条内存节点链表就是一个临界资源,这样在当前CPU修改自己变量的时候不需要担心出现竞争条件,实现了在“无锁”的情况下对临界资源的同步管理,避免系统高频运行应用程序时,频繁进行同步锁操作和临界资源操作,提高了数据处理设备的并发处理性能。
[0062]对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员用该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。
[0063]其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0064]对应上述本发明提供的内存分配方法实施例,本发明还提供了一种内存分配装置,本发明提供的内存分配装置可以应用在如网络设备的任何数据处理设备上。
[0065]参照图5,示出了本发明一种内存分配装置实施例的结构框图,包括:
[0066]每CPU变量创建模块51,用于为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素,存储于上述每CPU变量中;
[0067]内存申请模块52,用于在CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点;
[0068]内存释放模块53,用于在CPU结束运行上述应用程序时,释放上述内存节点,将上述内存节点归还给对应的内存节点链表。
[0069]参见图6所不的每CPU变量创建模块实施例一的结构框图,在本发明另一内存分配装置实施例中,每CPU变量创建模块51可以具体包括:
[0070]节点大小确定单元511,用于确定CPU运行应用程序所需内存节点的大小,上述内存节点包括:管理区头部和数据区;上述内存节点的数据区的大小为满足上述应用程序运行所需的最小内存空间的大小;
[0071]内存页分配单元513,用于从系统内存中为每个CPU分配内存页;
[0072]内存页分配单元513可以具体用于:在系统初始化时,从系统内存中为每个CPU分配一个内存页;在CPU运行应用程序的过程中,若当前内存节点链表中的空闲内存节点不足,从系统内存中为每个CPU分配新的内存页。
[0073]节点切分单元515,用于依据上述内存节点的大小对内存页进行节点切分,获取切分后的内存节点;
[0074]赋值单元517,用于为切分后的内存节点的管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表;
[0075]存储单元519,用于将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于每CPU变量中。
[0076]可选的,参见图7所示的每CPU变量创建模块实施例二的结构框图,每CPU变量创建模块51还可以进一步包括:
[0077]内存页计数单元514,用于在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。具体为:在系统初始化时,内存页分配执行单元513从系统内存中为每个CPU分配一个内存页后,启动内存页计数器,赋值为I ;在CPU运行应用程序的过程中,在当前内存节点链表中空闲内存节点不足的情况下,内存页分配执行单元513从系统内存成功分配新的内存页后,增加上述内存页计数器的内存页计数。
[0078]可选的,参见图8所示的内存页分配单元的结构框图,内存页分配单元513可以具体包括:
[0079]内存申请子单元5131,用于向系统内存申请内存页;
[0080]该内存申请子单元5131可以在系统初始化时,默认向系统内存申请一个内存页;在CPU运行应用程序的过程中,若发现CPU对应的内存节点链表中剩余的空闲内存节点不足,则向系统内存申请新的内存页。
[0081]判断子单元5132,用于系统内存分配内存页之前,首先判断内存页计数单元514记录的内存页计数是否达到预置最大内存页数;
[0082]分配执行子单元5133,用于在上述内存页计数小于上述最大内存页数的情况下,执行从系统内存中分配新的内存页,同时触发计数单元514中的内存页计数器将内存页计数加I ;
[0083]分配终止子单元5134,用于在上述内存页计数达到上述最大内存页数的情况下,不再通知分配执行子单元5133从系统内存分配新的内存页。
[0084]此处需要说明的是,本发明提供的内存分配装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图9所示,为本发明内存分配装置所在设备的一种硬件结构图,上述设备可以是网络设备,除了图9所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的网络设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等,对此图9中不再详细示出。
[0085]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于系统实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0086]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【主权项】
1.一种内存分配方法,应用于数据处理设备中,其特征在于,所述方法包括: 为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中; CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节占.V, (PU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。2.根据权利要求1所述的内存分配方法,其特征在于,所述为每个CPU建立一条内存节点链表,具体包括: 确定CPU运行应用程序所需内存节点的大小,所述内存节点包括:管理区头部和数据区;所述内存节点的数据区的大小为满足所述应用程序运行所需的最小内存空间的大小;从系统内存中为每个CPU分配内存页; 依据所述内存节点的大小对所述内存页进行节点切分,获取切分后的内存节点; 为所述切分后的内存节点的所述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表。3.根据权利要求2所述的内存分配方法,其特征在于,所述管理区头部的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,所述内存节点的指针用于指向下一个内存节点;所述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;所述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。4.根据权利要求3所述的内存分配方法,其特征在于,还包括: 在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个(PU分配的内存页的页数。5.根据权利要求4所述的内存分配方法,其特征在于,所述从系统内存中为每个CPU分配内存页,具体包括: 向系统内存申请内存页; 判断所述内存页计数器记录的内存页计数是否达到预置最大内存页数; 如果所述内存页计数小于所述最大内存页数,则继续从系统内存中分配新的内存页,同时触发所述内存页计数器将所述内存页计数加I; 如果所述内存页计数已达到所述最大内存页数,则不再从系统内存分配新的内存页。6.一种内存分配装置,其特征在于,包括: 每CPU变量创建模块,用于为每个CPU建立一条内存节点链表,将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中; 内存申请模块,用于在CPU运行应用程序时,利用每CPU变量机制直接从对应的内存节点链表中申请内存节点; 内存释放模块,用于在CPU结束运行所述应用程序时,释放所述内存节点,将所述内存节点归还给对应的内存节点链表。7.根据权利要求6所述的内存分配装置,其特征在于,所述每CPU变量创建模块具体包括: 节点大小确定单元,用于确定CPU运行应用程序所需内存节点的大小,所述内存节点包括:管理区头部和数据区;所述内存节点的数据区的大小为满足所述应用程序运行所需的最小内存空间的大小; 内存页分配单元,用于从系统内存中为每个CPU分配内存页; 节点切分单元,用于依据所述内存节点的大小对所述内存页进行节点切分,获取切分后的内存节点; 赋值单元,用于为所述切分后的内存节点的所述管理区头部的预置参数赋值,构建每个CPU对应的内存节点链表; 存储单元,用于将每个CPU对应的内存节点链表的头节点作为每CPU变量的一个数组元素存储于所述每CPU变量中。8.根据权利要求7所述的内存分配装置,其特征在于,所述赋值单元赋值的预置参数至少包括:内存节点的指针、状态标记、CPU身份标识,其中,所述内存节点的指针用于指向下一个内存节点;所述内存节点的状态标记用于表示内存节点处于空闲状态或已使用状态;所述内存节点的CPU身份标识用于表示内存节点挂载在哪个CPU的内存节点链表中。9.根据权利要求8所述的内存分配装置,其特征在于,所述每CPU变量创建模块还包括: 内存页计数单元,用于在系统内存为每个CPU成功分配内存页后,启动内存页计数器记录系统内存为每个CPU分配的内存页的页数。10.根据权利要求9所述的内存分配装置,其特征在于,所述内存页分配单元具体包括: 内存申请子单元,用于向系统内存申请内存页; 判断子单元,用于判断所述内存页计数单元记录的内存页计数是否达到预置最大内存页数; 分配执行子单元,用于在所述内存页计数小于所述最大内存页数的情况下,从系统内存中分配新的内存页,同时触发所述计数单元中的内存页计数器将所述内存页计数加I; 分配终止子单元,用于在所述内存页计数达到所述最大内存页数的情况下,不再通知所述分配执行单元从系统内存分配新的内存页。
【文档编号】G06F9/50GK105988876SQ201510140098
【公开日】2016年10月5日
【申请日】2015年3月27日
【发明人】张津才
【申请人】杭州迪普科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1