CN109308269A - 一种内存管理方法及装置 - Google Patents
一种内存管理方法及装置 Download PDFInfo
- Publication number
- CN109308269A CN109308269A CN201710619868.3A CN201710619868A CN109308269A CN 109308269 A CN109308269 A CN 109308269A CN 201710619868 A CN201710619868 A CN 201710619868A CN 109308269 A CN109308269 A CN 109308269A
- Authority
- CN
- China
- Prior art keywords
- subregion
- memory
- memory block
- address information
- affine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0866—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
- G06F12/0871—Allocation or management of cache space
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种内存管理方法及装置,涉及存储技术领域,解决了内存浪费的问题。具体方案为:接收目标处理器发送的请求为其分配计算机内存中的内存块的内存分配请求,计算机包括多个处理器,内存包括数据区域和地址区域,数据区域包括M个内存块,地址区域包括N个子区域,每个子区域保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在N个子区域中分配有一个亲和子区域,M>1,N>1,M≥N;识别目标处理器的亲和子区域;若目标处理器的亲和子区域中没有记录内存块的地址信息,从第一子区域中获取内存块的地址信息,并将获取到的内存块的地址信息标识的内存块分配给目标处理器。
Description
技术领域
本申请实施例涉及存储技术领域,尤其涉及一种内存管理方法及装置。
背景技术
内存管理是将计算机的内存划分为若干个内存池(Memory Pool),每个内存池内部放置若干个内存块,对每个内存块进行独立管理,确保计算机中的每个业务能及时获取到相应的内存空间,同时又不影响其他业务的运行。
定长内存池管理为内存管理中较为常见的一种。在上述计算机中,通用的定长内存池管理方法为:一个容量固定的连续内存(即一个定长内存池,后续均用定长内存池表示)包括若干相同长度的内存块,若干个保存有至少一个内存块的地址信息的子区域,以及保存有至少一个未被分配、且未被保存至任一子区域的内存块的地址信息的全局队列,计算机中的每个处理器(或处理器内核)在上述若干个子区域中分配有一个专用子区域,专用子区域保存的地址信息所标识的内存块只能分配给与该专用子区域对应的处理器(或处理器内核);当需要为某一业务分配内存时,首先判断该业务调用的处理器(或者处理器内核)的专用子区域是否为空,即判断该业务调用的处理器(或处理器内核)的专用子区域是否记录有地址信息;若该处理器(或者处理器内核)的专用子区域为空,则先从全局队列中读取某一/某些内存块的地址信息,并将读取到的地址信息写入该处理器(或者处理器内核)的专用子区域,再根据该处理器(或者处理器内核)的所存储的地址信息为上述业务分配内存;若该处理器(或者处理器内核)的专用子区域不为空,则直接根据该处理器(或者处理器内核)的所存储的地址信息为上述业务分配内存。
上述方法只有在业务调用的处理器(或者处理器内核)的专用子区域为空时,才会访问全局队列,性能较高。但是,对于任一业务,只有在该业务调用的处理器(或者处理器内核)的专用全局队列的情况下,才可以为该业务分配这一内存池中的内存。而在该业务调用的处理器(或者处理器内核)的专用子区域为空、全局队列为空、且其他处理器(或者处理器内核)的专用子区域不为空的情况下,无法再为该业务分配这一内存池中的内存,导致内存浪费。
发明内容
本申请实施例提供一种内存管理方法及装置,能够解决内存浪费的问题。
为达到上述目的,本申请采用如下技术方案:
第一方面,提供一种内存管理方法,对于包括多个处理器的计算机而言,该计算机的内存包括数据区域和地址区域,数据区域包括M个内存块(M>1),地址区域包括N(N>1,N≤M)个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在N个子区域中分配有一个亲和子区域,亲和子区域保存的地址信息所标识的内存块优先分配给与该亲和子区域对应的处理器,具体的,在接收到目标处理器发送的用于请求为其分配所述计算机的内存中的内存块的内存分配请求后,响应该内存分配请求,识别目标处理器的亲和子区域;当目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息,并将获取到的内存块的地址信息所标识的内存块分配给目标处理器,这里,第一子区域为N个子区域中除目标处理器的亲和子区域之外的一个。
本申请实施例提供的内存管理方法中,内存中的每个子区域均可被计算机中的多个处理器占用,计算机的每个处理器分配有一个亲和子区域,这样,在需要为多个处理器中的目标处理器分配内存时,优先根据目标处理器的亲和子区域保存的地址信息为该目标处理器分配内存块。当目标处理器的亲和子区域中没有记录内存块的地址信息时,仍然可以从除目标处理器的亲和子区域之外的一个子区域(如第一子区域)中获取一个内存块的地址信息,并将获取到的内存块的地址信息所标识的内存块分配给目标处理器,有效的减少了内存的浪费。
可选的,在本申请的一种可能的实现方式中,上述计算机的内存中还包括用于保存至少一个未被分配、且未被保存至所述地址区域的内存块的地址信息,这样,上述“当目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息”的方法为:当目标处理器的亲和子区域中没有记录内存块的地址信息时,识别全局队列;当全局队列中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息。
当目标处理器的亲和子区域中没有记录内存的地址信息时,优先从全局队列中获取内存块的地址信息,有效的保护了其他处理器对内存块的占用。容易理解的是,当全局队列中记录有内存块的地址信息时,从全局队列中获取预设数量的内存块的地址信息,并将获取到的内存块的地址信息存储于目标处理器的亲和子区域中,这样,可根据目标处理器的亲和子区域所存储的地址信息为目标处理器分配内存块。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存中还包括最近闲置变量,该最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域,相应的,上述“从第一子区域中获取一个内存块的地址信息”的方法为:当最近闲置变量指示的子区域为第一子区域时,确定第一子区域当前是否被占用;当第一子区域当前未被占用时,从第一子区域中获取一个内存块的地址信息。
最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域。实际应用中,某一子区域(如子区域A)被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短,则最近闲置变量的值表示子区域A。若在子区域A被解除占用的一长段时间内,没有其他子区域被解除占用,则最近闲置变量的值在该时间段内一直表示子区域A。当然,在这一长段时间内,子区域A可能又会被占用,但是没有其他子区域被解除占用,这样,最近闲置变量的值仍然表示子区域A。
内存中的每个子区域均可被计算机中的多个处理器占用,因此,在目标处理器的亲和子区域中没有记录内存块的地址信息时,可直接获取最近闲置变量所指示的区域,并确定该区域是否被占用,提高了内存分配的效率。可以理解的是,若最近闲置变量指示的第一子区域已被占用,则无法再根据第一子区域为目标处理器分配内存块。
可选的,在本申请的另一种可能的实现方式中,当上述最近闲置变量指示的子区域为与第一子区域为不同的第二子区域时,确定第二子区域当前是否被占用;当第二子区域当前已被占用时,从第三子区域起依次遍历N个子区域,第三子区域为N个子区域中排列在第二子区域之后、且与第二子区域相邻的子区域;在遍历过程中确定第一子区域未被占用,且第一子区域中记录有内存块的地址信息时,从第一子区域中获取一个内存块的地址信息。
可选的,在本申请的另一种可能的实现方式中,当目标处理器的亲和子区域中没有内存块的地址信息时,从除所述目标处理器的亲和子区域之外的任一子区域起依次遍历N-1个子区域,在遍历过程中确定第一子区域未被占用,且第一子区域中记录有内存块的地址信息时,从第一子区域中获取一个内存块的地址信息。
在目标处理器的亲和子区域中没有内存块的地址信息的情况下,可采用上述任意一种方式获取内存块的地址信息,进而为目标处理器分配内存块。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存中的地址区域还包括N个占用标识,每个子区域均有一个占用标识,占用标识用于表示对应的子区域是否已被占用;这样,“根据目标处理器,识别目标处理器的亲和子区域”之后,还可根据目标处理器的亲和子区域的占用标识,确定目标处理器的亲和子区域是否被占用;当目标处理器的亲和子区域未被占用时,确定目标处理器的亲和子区域中是否记录有内存块的地址信息。
当目标处理器的亲和子区域已被占用时,无法再将目标处理器的亲和子区域保存的内存块的地址信息所标识的内存块分配给目标处理器。本申请实施例中的占用标识可以用原子变量表示,根据占用标识确定某一子区域是否被占用,即可初步确定是否可将该子区域保存的内存块的地址信息所标识的内存块分配给目标处理器,提高了分配内存的效率。
第二方面,提供一种内存管理装置,该内存管理装置包括接收单元、识别单元、获取单元和分配单元。其中,上述接收单元,用于接收目标处理器发送的内存分配请求,内存分配请求用于请求为目标处理器分配计算机的内存中的内存块,计算机包括多个处理器,目标处理器是多个处理器中的其中一个,内存包括数据区域和地址区域,数据区域包括M个内存块,地址区域包括N个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在N个子区域中分配有一个亲和子区域,亲和子区域保存的地址信息所标识的内存块优先分配给与亲和子区域对应的处理器,其中,M>1,N>1,M>N。上述识别单元,用于响应于上述接收单元接收到的内存分配请求,根据目标处理器,识别目标处理器的亲和子区域。上述获取单元,用于当上述识别单元识别出的目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息,第一子区域为N个子区域中除目标处理器的亲和子区域之外的一个。上述分配单元,用于将上述获取单元获取到的内存块的地址信息所标识的内存块分配给目标处理器。
可选的,在本申请的一种可能的实现方式中,上述计算机的内存还包括全局队列,该全局队列用于保存至少一个未被分配、且未保存至地址区域的内存块的地址信息。相应的,上述识别单元,还用于当目标处理器的亲和子区域中没有记录内存块的地址信息时,识别该全局队列。上述获取单元,具体用于当全局队列中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存还包括最近闲置变量,该最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域。相应的,本申请实施例的内存管理装置还包括确定单元,该确定单元用于当最近闲置变量指示的子区域为第一子区域时,确定第一子区域当前是否被占用。上述获取单元,具体用于当该确定单元确定第一子区域当前未被占用时,从第一子区域中获取一个内存块的地址信息。
可选的,在本申请的另一种可能的实现方式中,上述确定单元,还用于当最近闲置变量指示的子区域为第二子区域时,确定第二子区域当前是否被占用,第二子区域与第一子区域为不同的区域。本申请实施例的内存管理装置还包括遍历单元,该遍历单元用于当上述确定单元确定第二子区域当前已被占用时,从第三子区域起依次遍历所述N个子区域,第三子区域为所述N个子区域中排列在第二子区域之后、且与第二子区域相邻的子区域。上述获取单元,具体用于在遍历过程中确定第一子区域未被占用,且第一子区域中记录有内存块的地址信息,从第一子区域中获取一个内存块的地址信息。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存中的地址区域还包括N个占用标识,每个子区域均有一个占用标识,占用标识用于表示对应的子区域是否已被占用。上述确定单元,还用于在上述识别单元识别目标处理器的亲和子区域之后,根据目标处理器的亲和子区域的占用标识,确定目标处理器的亲和子区域是否被占用,以及用于当目标处理器的亲和子区域未被占用时,确定目标处理器的亲和子区域中是否记录有内存块的地址信息。
第三方面,提供一种计算机,该计算机包括上述第二方面及其任意一项可能的实现方式所述的内存管理装置、至少一个处理器以及存储介质,其中,内存管理装置、至少一个处理器以及存储介质之间互相连接,存储介质包括计算机的内存块。
第四方面,还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令;当其在上述第二方面及其任意一项可能的实现方式所述的内存管理装置上运行时,使得该内存管理装置执行如上述第一方面及其各种可能的实现方式所述的内存管理方法。
第五方面,还提供一种包含指令的计算机程序产品,当其在上述第二方面的内存管理装置上运行时,使得该内存管理装置执行如上述第一方面及其任意一项可能的实现方式所述的内存管理方法。
在本申请中,上述内存管理装置的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,属于本申请权利要求及其等同技术的范围之内。
本申请中第二方面、第三方面、第四方面、第五方面及其各种实现方式的具体描述,可以参考第一方面及其各种实现方式中的详细描述;并且,第二方面、第三方面、第四方面、第五方面及其各种实现方式的有益效果,可以参考第一方面及其各种实现方式中的有益效果分析,此处不再赘述。
第六方面,提供一种内存管理方法,对于包括多个处理器的计算机而言,该计算机的内存包括数据区域和地址区域,数据区域包括M个内存块(M>1),地址区域包括N(N>1,N≤M)个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在N个子区域中分配有一个亲和子区域,亲和子区域保存的地址信息所标识的内存块优先分配给与该亲和子区域对应的处理器,具体的,在接收到目标处理器发送的用于请求将待释放内存块的地址信息写入服务器的内存中的内存释放请求后,响应该内存释放请求,识别目标处理器的亲和子区域;当目标处理器的亲和子区域的剩余存储空间为零时,将待释放内存块的地址信息写入第一子区域中,第一子区域为N个子区域中除目标处理器的亲和子区域之外的一个。
与上述第一方面描述的请求分配内存块的过程类似,在需要将待释放内存块的地址信息写入服务器的内存时,优先确定目标处理器的亲和子区域的剩余存储空间是否零。当目标处理器的亲和子区域的剩余存储空间为零时,可以将待释放内存块的地址信息写入除目标处理器的亲和子区域之外的一个子区域(如第一子区域)中,提高了内存的利用率。
可选的,在本申请的一种可能的实现方式中,上述地址区域还包括N个占用标识,每个子区域均有一个占用标识,占用标识用于表示对应的子区域是否已被占用。这样,上述“根据目标处理器,识别目标处理器的亲和子区域”之后,还可根据目标处理器的亲和子区域的占用标识,确定目标处理器的亲和子区域是否被占用;当目标处理器的亲和子区域未被占用时,确定目标处理器的亲和子区域的剩余存储空间是否为零。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存还包括最近闲置变量,该最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域。上述“将待释放内存块的地址信息写入第一子区域中”的方法为:当最近闲置变量指示的最近闲置子区域为第一子区域、且第一子区域当前未被占用时,将待释放内存块的地址信息写入第一子区域中。
可选的,在本申请的另一种可能的实现方式中,当上述最近闲置变量指示最近闲置子区域为第二子区域、且第二子区域当前已被占用时,从第三子区域起依次遍历N个子区域,第三子区域为N个子区域中排列在第二子区域之后、且与第二子区域相邻的子区域;当在遍历过程中确定第一子区域未被占用,且第一子区域的剩余存储空间不为零时,将待释放内存块的地址信息写入第一子区域中。
可选的,在本申请的另一种可能的实现方式中,当目标处理器的亲和子区域的剩余存储空间为零时,从除目标处理器的亲和子区域之外的任一子区域起依次遍历N-1个子区域,在遍历过程中确定第一子区域未被占用,且第一子区域的剩余存储空间不为零时,将待释放内存块的地址信息写入第一子区域中。
在目标处理器的亲和子区域的剩余存储空间为零的情况下,可采用上述任意一种方式将待释放内存块的地址信息写入第一子区域。
第七方面,提供一种内存管理装置,该内存管理装置包括接收单元、识别单元和写单元。其中,上述接收单元,用于接收目标处理器发送的内存释放请求,该内存释放请求用于请求将待释放内存块的地址信息写入服务器的内存中,计算机包括多个处理器,且目标处理器是多个处理器中的其中一个,内存包括数据区域和地址区域,数据区域包括M个内存块,地址区域包括N个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在N个子区域中分配有一个亲和子区域,亲和子区域保存的地址信息所标识的内存块优先分配给与该亲和子区域对应的处理器,其中,M>1,N>1,M>N。上述识别单元,用于响应上述接收单元接收到的内存释放请求,识别目标处理器的亲和子区域。上述写单元,用于当上述识别单元识别出的目标处理器的亲和子区域的剩余存储空间为零时,将待释放内存块的地址信息写入第一子区域中,第一子区域为N个子区域中除目标处理器的亲和子区域之外的一个。
可选的,在本申请的一种可能的实现方式中,上述地址区域还包括N个占用标识,每个子区域均有一个占用标识,占用标识用于表示对应的子区域是否已被占用。相应的,本申请实施例提供的内存管理装置还包括确定单元,该确定单元用于在上述识别单元根据目标处理器,识别出目标处理器的亲和子区域之后,根据目标处理器的亲和子区域的占用标识,确定目标处理器的亲和子区域是否被占用,以及当目标处理器的亲和子区域未被占用时,确定目标处理器的亲和子区域的剩余存储空间是否为零。
可选的,在本申请的另一种可能的实现方式中,上述计算机的内存还包括最近闲置变量,该最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域。这样,上述写单元,具体用于当最近闲置变量指示的最近闲置子区域为第一子区域、且第一子区域当前未被占用时,将待释放内存块的地址信息写入第一子区域中。
可选的,在本申请的另一种可能的实现方式中,本申请实施例提供的内存管理装置还包括遍历单元,该遍历单元用于当上述最近闲置变量指示最近闲置子区域为第二子区域、且第二子区域当前已被占用时,从第三子区域起依次遍历N个子区域,第三子区域为N个子区域中排列在第二子区域之后、且与第二子区域相邻的子区域。上述写单元,具体用于当在遍历过程中确定第一子区域未被占用,且第一子区域的剩余存储空间不为零时,将待释放内存块的地址信息写入第一子区域中。
可选的,在本申请的另一种可能的实现方式中,上述遍历单元还可以用于当目标处理器的亲和子区域的剩余存储空间为零时,从除目标处理器的亲和子区域之外的任一子区域起依次遍历N-1个子区域。相应的,上述写单元具体用于在遍历过程中确定第一子区域未被占用,且第一子区域的剩余存储空间不为零时,将待释放内存块的地址信息写入第一子区域中。
第八方面,提供一种计算机,该计算机包括上述第七方面及其任意一项可能的实现方式所述的内存管理装置、至少一个处理器以及存储介质,其中,内存管理装置、至少一个处理器以及存储介质之间互相连接,存储介质包括计算机的内存块。
第九方面,还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令;当其在上述第七方面及其任意一项可能的实现方式所述的内存管理装置上运行时,使得该内存管理装置执行如上述第六方面及其各种可能的实现方式所述的内存管理方法。
第十方面,还提供一种包含指令的计算机程序产品,当其在上述第七方面的内存管理装置上运行时,使得该内存管理装置执行如上述第六方面及其任意一项可能的实现方式所述的内存管理方法。
在本申请中,上述内存管理装置的名字对设备或功能模块本身不构成限定,在实际实现中,这些设备或功能模块可以以其他名称出现。只要各个设备或功能模块的功能和本申请类似,属于本申请权利要求及其等同技术的范围之内。
本申请中第七方面、第八方面、第九方面、第十方面及其各种实现方式的具体描述,可以参考第六方面及其各种实现方式中的详细描述;并且,第七方面、第八方面、第九方面、第十方面及其各种实现方式的有益效果,可以参考第六方面及其各种实现方式中的有益效果分析,此处不再赘述。
本申请的这些方面或其他方面在以下的描述中会更加简明易懂。
附图说明
图1为现有的定长内存池的结构示意图;
图2为本申请实施例提供的计算机的硬件结构示意图;
图3为本申请实施例提供的计算机的逻辑结构示意图;
图4为本申请实施例提供的内存管理方法的流程示意图一;
图5为本申请实施例提供的内存管理方法的流程示意图二;
图6为本申请实施例提供的内存管理方法的流程示意图三;
图7为本申请实施例提供的内存管理装置的结构示意图一;
图8为本申请实施例提供的内存管理装置的结构示意图二。
具体实施方式
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于限定特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
一般的,计算机的内存包括存储介质和内存管理装置。存储介质所提供的存储空间被划分为若干个内存池,每个内存池的存储空间被划分为用于保存若干个内存块的数据区域、包括若干个子区域的地址区域以及用于保存全局队列的区域。其中,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同。全局队列用于保存至少一个未被分配、且未被保存至地址区域的内存块的地址信息。全局队列的结构可以为栈结构,其保存的内存块的地址信息遵循“后进先出”的规则。内存管理装置用于管理存储介质中每个内存块的分配和释放。本申请实施例提供的内存管理方法均由该内存管理装置执行。
定长内存池管理为内存管理中较为常见的一种。如图1所示,对于包括N个处理器的计算机而言,现有的定长内存池(如内存池一)包括M个相同长度的内存块(如内存块1、内存块2、……、内存块M)、N个子区域组成的地址区域以及全局队列,每个处理器在N个子区域中分配有一个专用子区域,专用子区域保存的地址信息所标识的内存块只能分配给与该专用子区域对应的处理器。此外,定长内存池还包括内存池控制头和M个内存块控制头,每个内存块有一个内存块控制头。内存池控制头记录该定长内存池包括的内存块的数量、每个内存块的长度以及该定长内存池的标识(如该定长内存池的身份标识(Identity,ID))等信息;对于某一内存块的内存块控制头而言,该内存块控制头记录该内存块的最新一次的分配释放时间、调用该内存块的业务的标识等信息。全局队列存储的内存块的地址信息可以以数组的形式存储,为了保证该定长内存池中内存块的安全,全局队列还存在锁接口。在内存管理过程中,内存管理装置主要根据内存池控制头、内存块控制头、全局队列和地址区域实现内存的分配释放。
目前,内存管理装置在需要为运行在处理器A的业务Y1分配内存时,结合处理器A的专用子区域是否为空和全局队列是否为空的判断结果,可确定出能否成功为业务Y1分配内存。在处理器A的专用子区域为空、且全局队列为空的情况下,其他处理器的专用子区域可能不为空,但是由于每个子区域为某一处理器的专用子区域,因此,即使其他处理器的专用子区域不为空,也无法再继续为业务Y1分配内存,导致内存浪费。
针对上述内存浪费的问题,本申请实施例提供一种内存管理方法,计算机的内存中的每个子区域均可被计算机中的多个处理器占用,每个处理器分配有一个亲和子区域,在需要为多个处理器中的目标处理器分配内存时,优先根据目标处理器的亲和子区域保存的地址信息为该目标处理器分配内存块。当目标处理器的亲和子区域中没有记录内存块的地址信息时,仍然可以从除目标处理器的亲和子区域之外的一个子区域(如第一子区域)中获取一个内存块的地址信息,并将获取到的内存块的地址信息所标识的内存块分配给目标处理器,有效的减少了内存的浪费。
结合上述描述可知,本申请实施例提供的内存管理方法可应用于计算机,如图2所示,该计算机包括内存管理装置01以及与该内存管理装置01连接的存储介质02。存储介质02包括计算机的内存池(也就是说,存储介质02包括计算机中的多个内存块),可以存储数据、软件程序以及模块等。存储介质02可以为磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。此外,该计算机还可以包括处理器03,该处理器03包括N个处理器内核(内核1、……、内核k、……、内核N),例如至少一个中央处理器(Central ProcessingUnit,CPU)等,每一个CPU可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。多个处理器内核可以分时,也可以同时占用存储介质02中存储的内存块。为了便于描述,后续内容均以一个处理器包括一个处理器内核为例进行描述内存管理装置01、存储介质02以及处理器03通过总线04通信,这样,内存管理装置01可以专门用于管理存储介质02中内存块的分配和释放,减轻处理器03的负载。其中,内存管理装置01、存储介质02以及处理器03可以相互独立设置,也可以至少两个集成在一个设备,本申请实施例对此不作具体限定。
图2所示的计算机的内存池的结构与图1所示的内存池的结构类似,均包括一个内存池控制头、M个内存块控制头、全局队列、N个子区域以及M个内存块。不同的是,本申请实施例的内存池中的每个子区域均包括用于表示该子区域是否已被占用的占用标识(图2中用F表示占用标识,本申请后续内容以占用标识为“1”表示该子区域已被占用,占用标识为“0”表示该子区域未被占用为例说明,该占用标识可以用32比特(bit)原子变量表示)和至少一个内存块的地址信息,且每个处理器在N个子区域中分配有一个亲和子区域。亲和子区域保存的地址信息所标识的内存块优先分配与该亲和子区域对应的处理器。例如,计算机包括处理器1和处理器2,处理器1的亲和子区域为子区域1,处理器2的亲和子区域为子区域2,则子区域1保存的地址信息所标识的内存块优先分配给处理器1,子区域2保存的地址信息所标识的内存块优先分配给处理器2。
上述计算机还可包括多个业务模块04,每个业务模块04可以在上述至少一个处理器上运行,每个业务模块04的运行会引发内存块的分配和释放流程。具体的,如图3所示,计算机包括多个业务模块04,每个业务模块04在至少一个处理器运行,任一业务模块04在运行过程中均会触发其所运行的处理器发送内存分配请求(或内存释放请求),相应的,内存管理装置01根据内存分匹配请求(或内存释放请求),为该处理器分配内存(或释放相应内存)。
为了便于理解,本申请实施例以第一业务模块在目标处理器上运行,在运行过程中请求分配内存/释放内存为例进行说明。由于内存管理装置对每个内存池中内存块的分配和释放过程均相同,因此,本申请实施例以内存管理装置对第一内存池中的内存块的分配和释放为例进行说明。如图4所示,本申请实施例提供的内存管理方法包括:
S400、目标处理器向内存管理装置发送携带第一内存池的标识的内存分配请求,用于请求为目标处理器分配第一内存池中的内存块。
计算机包括多个处理器,目标处理器为多个处理器中的其中一个。该计算机的内存包括多个内存池,这里,第一内存池可以为图2中示出的内存池一或内存池二。
结合图2,该第一内存池包括内存池控制头、每个内存块的内存块控制头、全局队列、N个子区域以及M个相同长度的内存块。内存池控制头可以记录该内存池包括的内存块的数量M、每个内存块的长度L以及该内存池的ID等,每个内存块控制头记录与该内存块控制头对应的内存块的最新一次的分配释放时间、调用该内存块的业务的标识等信息,N个子区域中的每个子区域均可被N个处理器占用,且N个处理器中的每个处理器在N个子区域中分配有一个亲和子区域。对于每个处理器,该处理器的亲和子区域保存的地址信息所标识的内存块优先分配给该处理器,M>1,N>1,M≥N。其中,每个处理器的亲和子区域为***预设的。
示例性的,如图2所示,子区域1为处理器1的亲和子区域,子区域N为处理器N的亲和子区域,子区域1保存的地址信息所标识的内存块优先分配给处理器1,子区域2保存的地址信息所标识的内存块优先分配给处理器2。当然,子区域1保存的地址信息所标识的内存块也可以分配给除处理器1之外的其他处理器,同理,子区域N保存的地址信息所标识的内存块也可以分配给除处理器N之外的其他处理器。
容易理解的是,若计算机的内存仅包括一个内存池,则本申请实施例中的内存分配请求可以不携带内存池的标识。
S401、响应于内存分配请求,内存管理装置根据目标处理器,识别第一内存池中目标处理器的亲和子区域。
本申请实施例中的内存池控制头还包括第一变量,该第一变量用于记录每个处理器的亲和子区域的标识,内存管理装置通过读取该第一变量可直接获取到当前运行的处理器(即目标处理器)的亲和子区域的标识。需要说明的是,在初始化第一变量时,计算机中的每个处理器均需运行,这样,内存管理装置可获取到任一处理器的亲和子区域。
示例性的,第一变量为cache_id,结合上述示例,若当前运行的处理器为1,则cache_id=1,内存管理装置根据cache_id=1可确定出处理器1的亲和子区域为子区域1。
具体的,内存管理装置从第一内存池的内存池控制头中读取第一变量,根据目标处理器和第一变量,可确定出目标处理器的亲和子区域。
S402、内存管理装置确定S401中识别出的目标处理器的亲和子区域是否被占用。
由于本申请实施例中的每个子区域均可被任一处理器占用,因此,内存管理装置在获取到目标处理器的亲和子区域后,需要判断该目标处理器的亲和子区域是否被占用。
结合图2可知,本申请实施例中的每个子区域均包括用于表示该子区域是否已被占用的占用标识和至少一个内存块的地址信息,因此,内存管理装置在识别出目标处理器的亲和子区域后,根据该目标处理器的亲和子区域所包括的占用标识即可确定该目标处理器的亲和子区域是否已被占用。
具体的,若目标处理器的亲和子区域的占用标识为“1”,表示该目标处理器的亲和子区域已被占用,内存管理装置执行S403。若目标处理器的亲和子区域的占用标识为“0”,表示该目标处理器的亲和子区域未被占用,内存管理装置执行S407。
S403、内存管理装置读取最近闲置变量,识别最近闲置变量指示的子区域。
可选的,本申请实施例中的内存池控制头还可以包括最近闲置变量,该最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域。
计算机中的每个处理器可随时占用某一闲置的子区域,也可以随时解除占用某一子区域,因此,最近闲置变量的数值是变化的。
需要说明的是,若某一子区域(以子区域3为例)被解除占用,则最近闲置变量的数值为子区域3的标识,在子区域3被解除占用后的一段时间内可能没有其他子区域被解除占用,则最近闲置变量的数值保持不变。即使在这段时间内,子区域3又被某一处理器占用,该最近闲置变量的数值仍然为子区域3的标识。
S404、内存管理装置确定最近闲置变量指示的子区域当前是否被占用。
从上面描述可知,最近闲置变量指示的子区域有可能会被占用,因此,内存管理装置在识别出最近闲置变量指示的子区域后,需判断该子区域当前是否被占用。
内存管理装置确定最近闲置变量指示的子区域当前是否被占用的方法可以参考上述内存管理装置确定目标处理器的亲和子区域是否被占用的方法,此处不再进行详细赘述。
S405a、若最近闲置变量指示的子区域为第二子区域,当确定该第二子区域当前已被占用时,内存管理装置从第三子区域起依次遍历N个子区域。
第三子区域为N个子区域中排列在第二子区域之后、且与第一子区域相邻的子区域。例如,结合图2,若第二子区域为子区域1,则第三子区域为子区域2。
具体的,若在遍历过程中内存管理装置确定第一子区域未被占用、且第一子区域中记录有内存块的地址信息,则内存管理装置终止遍历,占用第一子区域,从第一子区域中获取一个内存块的地址信息,将获取到的内存块的地址信息所标识的内存块分配给目标处理器。
若在遍历过程中内存管理装置确定所有子区域均不可用(即所有子区域均被占用或者所有子区域均没有记录内存块的地址信息),则终止内存的分配。由于所有子区域均不可用,因此,无法为目标处理器分配内存块。
可选的,当确定第二子区域当前已被占用时,内存管理装置还可从除目标处理器的亲和子区域和第二子区域之外的任一子区域起依次遍历N个子区域。
S405b、若最近闲置变量指示的子区域为第一子区域,当确定该第一子区域未被占用、且第一子区域中记录有内存块的地址信息时,内存管理装置占用该第一子区域,并从该第一子区域中获取一个内存块的地址信息,将获取到的内存块的地址信息所标识的内存块分配给目标处理器。
结合最近闲置变量的描述,在最近闲置变量指示的第一子区域未被占用的情况下,内存管理装置可占用该第一子区域,并将该第一子区域的占用标识从“0”修改为“1”。
在S405a或S405b中的将获取到的内存块的地址信息所标识的内存块分配给目标处理器后,内存管理装置执行S406。
S406、内存管理装置解除占用第一子区域。
内存管理装置将获取到的内存块的地址信息所标识的内存块分配给目标处理器后,解除占用上述第一子区域。此外,内存管理装置还需修改上述第二变量的值。
示例性的,内存管理装置在S403获取到的第一子区域为子区域3,则第二变量的数值为子区域3的标识“3”,在子区域3未被占用的情况下,该内存管理装置占用该子区域3,若此时子区域7被闲置,则第二变量的数值从“3”修改为“7”。当内存管理装置将子区域3中的第一地址信息所标识的内存块分配给目标处理器后,内存管理装置解除对子区域3的占用,这样,第二变量的数值又从“7”修改为“3”。
S407、内存管理装置占用目标处理器的亲和子区域,并确定目标处理器的亲和子区域是否记录有内存块的地址信息。
S408、若目标处理器的亲和子区域记录有内存块的地址信息,内存管理装置从目标处理器的亲和子区域中获取一个内存块的地址信息,并将获取到的内存块的地址信息所标识的内存块分配给目标处理器。
S409、若目标处理器的亲和子区域没有记录内存块的地址信息,内存管理装置识别全局队列,并确定全局队列是否记录内存块的地址信息。
具体的,内存管理装置获取全局队列的锁,在获取到全局队列的锁之后,读取全局队列,并确定全局队列是否记录内存块的地址信息。若全局队列记录有内存块的地址信息,内存管理装置执行S410。若全局队列没有记录内存块的地址信息,内存管理装置执行S403。
S410、内存管理装置从全局队列中读取第一预设数量的地址信息,并将读取到的地址信息写入目标处理器的亲和子区域中。
S411、内存管理装置从写入地址信息后的目标处理器的亲和子区域中获取一个内存块的地址信息,并将获取到的内存块的地址信息所标识的内存块分配给目标处理器。
可以看出,即使在目标处理器的亲和子区域中没有记录内存块的地址信息的情况下,内存管理装置依旧可以从其他子区域,如第一子区域,中获取一个内存块的地址信息,并将获取到的地址信息所标识的内存块分配给目标处理器,有效的减少了内存的浪费。
进一步地,在内存管理装置为目标处理器分配内存之前,内存管理装置还需创建第一内存池。结合图4,如图5所示,在S400之前,本申请实施例提供的内存管理方法还包括S500-S503。
S500、第一处理器向内存管理装置发送携带M和每个内存块的大小L的内存创建请求,请求创建第一内存池。
第一处理器与上述目标处理器可以为同一处理器,也可以为不同的处理器。若第一处理器与目标处理器为不同设备,则第一处理器与目标处理器可共享第一内存池。
S501、内存管理装置根据M和L,计算M个内存块的长度。
S502、内存管理装置根据M个内存块的长度、预设的内存池控制头的长度、预设的N个子区域的长度、预设的全局队列的长度以及预设的M个内存块控制头的长度,计算第一长度。
本申请实施例中,内存池控制头的长度、每个子区域的长度、全局队列的长度以及每个内存块的控制头的长度均为预设的。
示例性的,若第一长度用Total_size表示,内存池控制头的长度用Pool_ctrl_size表示,每个内存块控制头的长度用Obj_ctrl_size表示,全局队列的长度用Global_queue_size表示,每个子区域的长度用Cpu_cache_size表示,则内存管理装置可以采用下述公式计算第一长度:
Total_size=Pool_ctrl_size+Obj_ctrl_size×M+Global_queue_size
+Cpu_cache_size×N+M×L
S503、内存管理装置创建长度为第一长度的第一内存池。
具体的,内存管理装置从计算机的内存中分配一块长度为第一长度的连续内存,并将其作为第一内存池。
内存管理装置按照Pool_ctrl_size、Obj_ctrl_size×M、Global_queue_size、Cpu_cache_size×N、以及M×L划分第一内存池,确定该第一内存池的内存池控制头、M个内存块中每个内存块的内存块控制头、全局队列、N个子区域以及M个内存块。在内存管理装置划分第一内存池后,该内存管理装置对第一内存池的内存池控制头、M个内存块中每个内存块的内存块控制头、全局队列、N个子区域以及M个内存块进行初始化。
内存池控制头的初始化过程中主要是在该内存池控制头中记录第一内存池的分布信息如第一内存池包括的内存块的数量M,每个内存块的长度L、第一内存池的标识等信息。每个内存块控制头的初始化过程是将每个内存块控制头置0。全局队列的初始化过程是分割连续内存的过程,内存管理装置将该连续内存分割为M个长度为L的内存块,并将所有内存块的地址信息顺序记录到全局队列中,此外,内存管理装置还需初始化该全局队列的锁。在创建第一内存池的过程中,每个子区域均未被占用,因此,每个子区域的占用标识均设置为“0”,且每个子区域没有记录内存块的地址信息。
进一步地,内存管理装置在创建第一内存池后,将该第一内存池的内存池控制头的地址信息存储到全局内存池控制头数组中。可选的,该第一内存池控制头的地址信息在全局内存池控制头数组的数组下标可作为该第一内存池的标识。
从图4示出的实施例可以看出,内存管理装置可为目标处理器分配内存。相应的,在目标处理器需要释放某一内存时,内存管理装置也可以为该目标处理器释放内存。
具体的,如图6所示,本申请实施例提供的内存管理方法包括:
S600、目标处理器向内存管理装置发送携带第一内存池的标识和待释放内存块的地址信息的内存释放请求,请求将待释放内存块的地址信息写入服务器的内存的第一内存池中。
与图4所示的实施例相同,本实施例中的第一内存池可以为图2中的内存池一或内存池二。
本实施例中的第一内存池的结构与图4所示的实施例中的第一内存池的结构相同,此处不再进行详细赘述。
容易理解的是,若计算机的内存仅包括一个内存池,则本申请实施例中的内存释放请求可以不携带内存池的标识。
S601、响应于内存分配请求,内存管理装置根据目标处理器,识别第一内存池中目标处理器的亲和子区域。
S601可以参考上述S401,此处不再进行详细赘述。
S602、内存管理装置确定S601中识别出的目标处理器的亲和子区域是否被占用。
若目标处理器的亲和子区域未被占用,则内存管理装置执行S603;若目标处理器的亲和子区域已被占用,则内存管理装置执行S607。
S603、内存管理装置占用目标处理器的亲和子区域,并确定目标处理器的亲和子区域的剩余存储空间是否为零。
S604、若目标处理器的亲和子区域的剩余存储空间不为零,内存管理装置将待释放内存块的地址信息写入目标处理器的亲和子区域。
S605、若目标处理器的亲和子区域的剩余存储空间为零,内存管理装置将待释放内存块的地址信息写入全局队列。
具体的,内存管理装置获取全局队列的锁,在获取到全局队列的锁之后,将待释放内存块的地址信息写入全局队列。这样,待释放内存块的地址信息所标识的内存块被释放。
内存管理装置在S604或S605之后,解除占用目标处理器的亲和子区域。本实施例中内存管理装置解除占用目标处理器的亲和子区域的方法可以参考图4所示的实施例中内存管理装置解除占用目标处理器的亲和子区域的方法,此处不再进行详细赘述。
可选的,内存管理装置将待释放内存块的地址信息写入全局队列后,还可执行S606。
S606、内存管理装置从目标处理器的亲和子区域中读取第二预设数量的地址信息,并将读取到的地址信息写入全局队列中。
由于S605中目标处理器的亲和子区域的剩余存储空间为零,为了保证该目标处理器的亲和子区域可用,内存管理装置从目标处理器的亲和子区域中读取第二预设数量的地址信息,在获取到全局队列的锁之后,将读取到的地址信息写入全局队列中,进一步减少了内存的浪费。
S607、内存管理装置读取最近闲置变量,识别最近闲置变量指示的子区域。
S607可以参考上述S403,此处不再进行详细赘述。
S608、内存管理装置确定最近闲置变量指示的子区域当前是否被占用。
本实施例中的最近闲置变量与图4所示的实施例所述的最近闲置变量相同,此处不再进行详细赘述。
S609、若最近闲置变量指示的子区域为第一子区域,当确定第一子区域未被占用、且第一子区域的剩余存储空间不为零时,内存管理装置将待释放内存块的地址信息写入第一子区域。
S610、若最近闲置变量指示的子区域为第二子区域,当确定该第二子区域当前已被占用时,内存管理装置从第三子区域起依次遍历N个子区域。
第二子区域当前已被占用说明内存管理装置无法将待释放内存块的地址信息写入该第二子区域中。在这种情况下,内存管理装置可从第三子区域起依次遍历所有子区域。这里的第二子区域与图4所示的实施例中描述的第二子区域相同,第三子区域与图4所示的实施例中描述的第三子区域相同。
具体的,若在遍历过程中,内存管理装置确定第一子区域未被占用、且第一子区域的剩余存储空间不为零,则内存管理装置停止遍历,并将待释放内存块的地址信息写入第一子区域中。
可选的,当确定第二子区域当前已被占用时,内存管理装置还可从除目标处理器的亲和子区域和第二子区域之外的任一子区域起依次遍历N个子区域。
综上所述,本申请实施例中的内存管理装置只有在目标处理器的亲和子区域未被占用、且该目标处理器的亲和子区域的剩余存储空间为零的情况下,内存管理装置才会获取全局队列的锁,访问该全局队列,减少了由于获取锁而导致的时间浪费,提高了内存释放的性能。本申请实施例提供的内存管理方法,即使在目标处理器的亲和子区域没有记录内存块的地址信息或目标处理器的亲和子区域已被占用的情况下,内存管理装置依旧可以通过其他子区域实现内存的分配和释放,减少了内存的浪费。
本申请实施例提供一种内存管理装置,该内存管理装置用于执行以上内存管理方法中的内存管理装置所执行的步骤。本申请实施例提供的内存管理装置可以包括相应步骤所对应的模块。
本申请实施例可以根据上述方法示例对内存管理装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图7示出上述实施例中所涉及的内存管理装置的一种可能的结构示意图。如图7所示,内存管理装置700包括接收单元70、识别单元71、获取单元72、分配单元73、确定单元74和遍历单元75。接收单元70用于支持该内存管理装置700执行上述实施例中的S400、S500、和/或S600等,和/或用于本文所描述的技术的其它过程;识别单元71用于支持该内存管理装置700执行上述实施例中的S401、S403、S409、S601、和/或S607等,和/或用于本文所描述的技术的其它过程;获取单元72用于支持该内存管理装置700执行上述实施例中的S401、S403、S601、和或S607等,和/或用于本文所描述的技术的其它过程;分配单元73用于支持该内存管理装置700执行上述实施例中的S405b、S408、和/或S411等,和/或用于本文所描述的技术的其它过程;确定单元74用于支持该内存管理装置700执行上述实施例中的S402、S404、S409、S602、S603、和或S608等,和/或用于本文所描述的技术的其它过程;遍历单元76用于支持该内存管理装置700执行上述实施例中的S604、S605、S606、和或S609等,和/或用于本文所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。当然,本申请实施例提供的内存管理装置700包括但不限于上述模块,例如内存管理装置700还可以包括写单元76、发送单元77和存储单元78。写单元用于写入待释放内存块的地址信息。发送单元77用于与其他设备通信。存储单元78可以用于存储该内存管理装置的程序代码和数据。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
示例性的,在采用集成的单元的情况下,本申请实施例提供的内存管理装置的结构示意图如图8所示。在图8中,该内存管理装置包括:处理模块80和通信模块81。处理模块80用于对内存管理装置的动作进行控制管理,例如,执行上述识别单元71、获取单元72、分配单元73、确定单元74、遍历单元75和写单元76执行的步骤,和/或用于执行本文所描述的技术的其它过程。通信模块81用于支持内存管理装置与其他设备之间的交互,例如,执行上述接收单元70和发送单元77执行的步骤。如图8所示,内存管理装置还可以包括存储模块82,存储模块82用于存储内存管理装置的程序代码和数据,例如存储上述存储单元78所保存的内容。
相应的,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在内存管理装置上运行时,使得内存管理装置执行上述方法实施例所示的方法流程中内存管理装置执行的各个步骤。
在上述实施例中,可以全部或部分的通过软件,硬件,固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式出现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘,硬盘、磁带)、光介质(例如,DVD)或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种内存管理方法,其特征在于,包括:
接收目标处理器发送的内存分配请求,所述内存分配请求用于请求为所述目标处理器分配计算机的内存中的内存块,所述计算机包括多个处理器,所述目标处理器是所述多个处理器中的其中一个,所述内存包括数据区域和地址区域,所述数据区域包括M个内存块,所述地址区域包括N个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在所述N个子区域中分配有一个亲和子区域,所述亲和子区域保存的地址信息所标识的内存块优先分配给与所述亲和子区域对应的处理器,其中,M>1,N>1,M≥N;
响应所述内存分配请求,根据所述目标处理器,识别所述目标处理器的亲和子区域;
当所述目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息,所述第一子区域为所述N个子区域中除所述目标处理器的亲和子区域之外的一个;
将获取到的内存块的地址信息所标识的内存块分配给所述目标处理器。
2.根据权利要求1所述的内存管理方法,其特征在于,所述内存还包括全局队列,所述全局队列用于保存至少一个未被分配、且未被保存至所述地址区域的内存块的地址信息;
当所述目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息,具体包括:
当所述目标处理器的亲和子区域中没有记录内存块的地址信息时,识别所述全局队列;
当所述全局队列中没有记录内存块的地址信息时,从所述第一子区域中获取一个内存块的地址信息。
3.根据权利要求1或2所述的内存管理方法,其特征在于,所述内存还包括最近闲置变量,所述最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域;
所述从所述第一子区域中获取一个内存块的地址信息,包括:
当所述最近闲置变量指示的子区域为所述第一子区域时,确定所述第一子区域当前是否被占用;
当所述第一子区域当前未被占用时,从所述第一子区域中获取一个内存块的地址信息。
4.根据权利要求3所述的内存管理方法,其特征在于,所述内存管理方法还包括:
当所述最近闲置变量指示的子区域为第二子区域时,确定所述第二子区域当前是否被占用,所述第二子区域与所述第一子区域为不同的区域;
当所述第二子区域当前已被占用时,从第三子区域起依次遍历所述N个子区域,所述第三子区域为所述N个子区域中排列在所述第二子区域之后、且与所述第二子区域相邻的子区域;
在遍历过程中确定所述第一子区域未被占用,且所述第一子区域中记录有内存块的地址信息时,从所述第一子区域中获取一个内存块的地址信息。
5.根据权利要求1-4中任意一项所述的内存管理方法,其特征在于,所述地址区域还包括N个占用标识,所述每个子区域均有一个所述占用标识,所述占用标识用于表示对应的子区域是否已被占用;
所述根据所述目标处理器,识别所述目标处理器的亲和子区域之后,所述内存管理方法还包括:
根据所述目标处理器的亲和子区域的占用标识,确定所述目标处理器的亲和子区域是否被占用;
当所述目标处理器的亲和子区域未被占用时,确定所述目标处理器的亲和子区域中是否记录有内存块的地址信息。
6.一种内存管理装置,其特征在于,包括:
接收单元,用于接收目标处理器发送的内存分配请求,所述内存分配请求用于请求为所述目标处理器分配计算机的内存中的内存块,所述计算机包括多个处理器,所述目标处理器是所述多个处理器中的其中一个,所述内存包括数据区域和地址区域,所述数据区域包括M个内存块,所述地址区域包括N个子区域,每个子区域用于保存至少一个内存块的地址信息,且不同子区域保存的地址信息不同,每个处理器在所述N个子区域中分配有一个亲和子区域,所述亲和子区域保存的地址信息所标识的内存块优先分配给与所述亲和子区域对应的处理器,其中,M>1,N>1,M>N;
识别单元,用于响应于所述接收单元接收到的内存分配请求,根据所述目标处理器,识别所述目标处理器的亲和子区域;
获取单元,用于当所述识别单元识别出的所述目标处理器的亲和子区域中没有记录内存块的地址信息时,从第一子区域中获取一个内存块的地址信息,所述第一子区域为所述N个子区域中除所述目标处理器的亲和子区域之外的一个;
分配单元,用于将所述获取单元获取到的内存块的地址信息所标识的内存块分配给所述目标处理器。
7.根据权利要求6所述的内存管理装置,其特征在于,所述内存还包括全局队列,所述全局队列用于保存至少一个未被分配、且未保存至所述地址区域的内存块的地址信息;
所述识别单元,还用于当所述目标处理器的亲和子区域中没有记录内存块的地址信息时,识别所述全局队列;
所述获取单元,具体用于当所述全局队列中没有记录内存块的地址信息时,从所述第一子区域中获取一个内存块的地址信息。
8.根据权利要求6或7所述的内存管理装置,其特征在于,所述内存还包括最近闲置变量,所述最近闲置变量用于指示被解除占用、且从被解除占用的时刻开始到当前时刻的时间差最短的子区域;
所述内存管理装置还包括确定单元,
所述确定单元,用于当所述最近闲置变量指示的子区域为所述第一子区域时,确定所述第一子区域当前是否被占用;
所述获取单元,具体用于当所述确定单元确定所述第一子区域当前未被占用时,从所述第一子区域中获取一个内存块的地址信息。
9.根据权利要求8所述的内存管理装置,其特征在于,
所述确定单元,还用于当所述最近闲置变量指示的子区域为第二子区域时,确定所述第二子区域当前是否被占用,所述第二子区域与所述第一子区域为不同的区域;
所述内存管理装置还包括遍历单元,
所述遍历单元,用于当所述确定单元确定所述第二子区域当前已被占用时,从第三子区域起依次遍历所述N个子区域,所述第三子区域为所述N个子区域中排列在所述第二子区域之后、且与所述第二子区域相邻的子区域;
所述获取单元,具体用于在遍历过程中确定所述第一子区域未被占用,且所述第一子区域中记录有内存块的地址信息,从所述第一子区域中获取一个内存块的地址信息。
10.根据权利要求6-9中任意一项所述的内存管理装置,其特征在于,所述地址区域还包括N个占用标识,所述每个子区域均有一个所述占用标识,所述占用标识用于表示对应的子区域是否已被占用;
所述确定单元,还用于在所述识别单元识别所述目标处理器的亲和子区域之后,根据所述目标处理器的亲和子区域的占用标识,确定所述目标处理器的亲和子区域是否被占用,以及用于当所述目标处理器的亲和子区域未被占用时,确定所述目标处理器的亲和子区域中是否记录有内存块的地址信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710619868.3A CN109308269B (zh) | 2017-07-26 | 2017-07-26 | 一种内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710619868.3A CN109308269B (zh) | 2017-07-26 | 2017-07-26 | 一种内存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109308269A true CN109308269A (zh) | 2019-02-05 |
CN109308269B CN109308269B (zh) | 2021-02-23 |
Family
ID=65202822
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710619868.3A Active CN109308269B (zh) | 2017-07-26 | 2017-07-26 | 一种内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109308269B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112083849A (zh) * | 2020-09-24 | 2020-12-15 | 深圳市艾酷通信软件有限公司 | 信息显示方法、装置、设备及介质 |
CN112650577A (zh) * | 2019-10-12 | 2021-04-13 | 龙芯中科技术股份有限公司 | 内存管理方法和装置 |
CN112783648A (zh) * | 2021-01-18 | 2021-05-11 | 上海壁仞智能科技有限公司 | 基于内存区域的内存分配方法和设备以及访问方法和设备 |
CN113157211A (zh) * | 2021-04-20 | 2021-07-23 | 武汉卓目科技有限公司 | 一种嵌入式***信息记录的存储方法 |
WO2022188887A1 (zh) * | 2021-03-12 | 2022-09-15 | 华为技术有限公司 | 实现内存共享控制的方法、设备、计算机设备和*** |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040139296A1 (en) * | 1987-12-14 | 2004-07-15 | Intel Corporation | Process for exchanging information in a multiprocessor system |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
US20090193212A1 (en) * | 2008-01-30 | 2009-07-30 | Kabushiki Kaisha Toshiba | Fixed length memory block management apparatus and control method thereof |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN103164278A (zh) * | 2011-12-09 | 2013-06-19 | 沈阳高精数控技术有限公司 | 一种面向多核处理器的实时动态内存管理器实现方法 |
CN104169891A (zh) * | 2013-10-29 | 2014-11-26 | 华为技术有限公司 | 一种访问内存的方法及设备 |
CN104731799A (zh) * | 2013-12-20 | 2015-06-24 | ***股份有限公司 | 内存数据库管理装置 |
CN105373484A (zh) * | 2014-08-20 | 2016-03-02 | 西安慧泽知识产权运营管理有限公司 | 一种网络通信芯片中内存分配、存储和管理的方法 |
-
2017
- 2017-07-26 CN CN201710619868.3A patent/CN109308269B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040139296A1 (en) * | 1987-12-14 | 2004-07-15 | Intel Corporation | Process for exchanging information in a multiprocessor system |
CN1532708A (zh) * | 2003-03-19 | 2004-09-29 | 华为技术有限公司 | 一种静态内存管理方法 |
US20090193212A1 (en) * | 2008-01-30 | 2009-07-30 | Kabushiki Kaisha Toshiba | Fixed length memory block management apparatus and control method thereof |
CN103164278A (zh) * | 2011-12-09 | 2013-06-19 | 沈阳高精数控技术有限公司 | 一种面向多核处理器的实时动态内存管理器实现方法 |
CN103077126A (zh) * | 2012-12-24 | 2013-05-01 | 中兴通讯股份有限公司 | 一种内存管理方法和装置 |
CN104169891A (zh) * | 2013-10-29 | 2014-11-26 | 华为技术有限公司 | 一种访问内存的方法及设备 |
CN104731799A (zh) * | 2013-12-20 | 2015-06-24 | ***股份有限公司 | 内存数据库管理装置 |
CN105373484A (zh) * | 2014-08-20 | 2016-03-02 | 西安慧泽知识产权运营管理有限公司 | 一种网络通信芯片中内存分配、存储和管理的方法 |
Non-Patent Citations (1)
Title |
---|
史成伟: "多核***中的内存管理***优化研究", 《中国优秀硕士学位论文全文数据库(信息科技辑)》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112650577A (zh) * | 2019-10-12 | 2021-04-13 | 龙芯中科技术股份有限公司 | 内存管理方法和装置 |
CN112083849A (zh) * | 2020-09-24 | 2020-12-15 | 深圳市艾酷通信软件有限公司 | 信息显示方法、装置、设备及介质 |
CN112783648A (zh) * | 2021-01-18 | 2021-05-11 | 上海壁仞智能科技有限公司 | 基于内存区域的内存分配方法和设备以及访问方法和设备 |
CN112783648B (zh) * | 2021-01-18 | 2023-03-14 | 上海壁仞智能科技有限公司 | 基于内存区域的内存分配方法和设备以及访问方法和设备 |
WO2022188887A1 (zh) * | 2021-03-12 | 2022-09-15 | 华为技术有限公司 | 实现内存共享控制的方法、设备、计算机设备和*** |
CN113157211A (zh) * | 2021-04-20 | 2021-07-23 | 武汉卓目科技有限公司 | 一种嵌入式***信息记录的存储方法 |
CN113157211B (zh) * | 2021-04-20 | 2022-11-18 | 武汉卓目科技有限公司 | 一种嵌入式***信息记录的存储方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109308269B (zh) | 2021-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109308269A (zh) | 一种内存管理方法及装置 | |
CN104636080B (zh) | 存储***及用于其的方法 | |
JP5510556B2 (ja) | 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム | |
CN103577345A (zh) | 提高由多个***共享的存储高速缓存灵活性的方法和结构 | |
KR102290540B1 (ko) | 네임스페이스/스트림 관리 | |
CN106681842A (zh) | 一种多进程***中共享内存的管理方法及装置 | |
US10241836B2 (en) | Resource management in a virtualized computing environment | |
US20110246742A1 (en) | Memory pooling in segmented memory architecture | |
CN104285206A (zh) | 信息存储***和控制信息存储***的方法 | |
JP2010122814A (ja) | ストレージシステム及びストレージシステムの運用方法 | |
KR20120092930A (ko) | 맵 리듀스를 이용한 분산 메모리 클러스터 제어 장치 및 방법 | |
CN107766153A (zh) | 一种内存管理方法及装置 | |
CN114424172B (zh) | 虚拟存储器元数据管理 | |
WO2008006674A1 (en) | Reserve pool management in virtualized storage systems | |
JP2005353070A5 (zh) | ||
JP2005031929A (ja) | サーバに記憶領域を割り当てる管理サーバ、記憶装置システム、及びプログラム | |
US20150033226A1 (en) | Host system and method for managing data consumption rate in a virtual data processing environment | |
CN109799956A (zh) | 一种存储控制器及io请求处理方法 | |
CN106383742A (zh) | 一种基于linux的IO调度方法 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN102413183A (zh) | 云智能交换机及其处理方法、*** | |
US10664393B2 (en) | Storage control apparatus for managing pages of cache and computer-readable storage medium storing program | |
US7793051B1 (en) | Global shared memory subsystem | |
CN106326132A (zh) | 存储***、存储管理装置、存储器、混合存储装置及存储管理方法 | |
US9317306B2 (en) | Computer device and memory management method thereof |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20220906 Address after: No. 1899 Xiyuan Avenue, high tech Zone (West District), Chengdu, Sichuan 610041 Patentee after: Chengdu Huawei Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: HUAWEI TECHNOLOGIES Co.,Ltd. |