CN110209489B - 一种适用于内存页结构的内存管理方法及装置 - Google Patents
一种适用于内存页结构的内存管理方法及装置 Download PDFInfo
- Publication number
- CN110209489B CN110209489B CN201810169210.1A CN201810169210A CN110209489B CN 110209489 B CN110209489 B CN 110209489B CN 201810169210 A CN201810169210 A CN 201810169210A CN 110209489 B CN110209489 B CN 110209489B
- Authority
- CN
- China
- Prior art keywords
- memory
- page
- composite
- pages
- slab
- 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.)
- Active
Links
Images
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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种适用于内存页结构的内存管理方法,包括:构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;基于多种复合页来管理内存页。所公开的方法能够减少由于内存页分配所导致的碎片页面,简化内存页管理的操作,提高内存页的管理效率。
Description
技术领域
本发明涉及计算机系统,尤其涉及一种适用于内存页结构的内存管理方法及装置。
背景技术
计算机系统的内存容量通常是有限的,而同一个计算机系统上却可以运行许多计算机应用程序,为了保证不同计算机应用程序高效地使用系统内存,就需要对系统内存进行有效管理,这是计算机领域中的一项关键技术。
目前大多数计算机系统都采用双层内存管理结构来进行系统内存的管理。如图1所示,页分配器101是第一层内存管理结构,它通常以内存页(存储容量为4K字节的内存块)为基本单位来管理系统内存,从而为文件系统/驱动程序等应用程序分配专用cache(在图1中以箭头105的形式表示出了这种关系)。slab分配器103是第二层内存管理结构,它通常以slab结构所包含的小于内存页大小的chunk块(例如,存储容量为8字节、16字节等的内存块)为基本单位来进一步管理(在图1中以箭头111的形式表示出了这种关系)由页分配器101所分配的包含一个或多个连续内存页的系统内存,从而为网络层/应用层程序等应用程序分配专用cache(在图1中以箭头109的形式表示出了这种关系);而且,当文件系统/驱动程序中的对象需要基于chunk块进行内存分配和释放时,也可以由slab分配器103代替页分配器101为其管理内存(在图1中以箭头107的形式表示出了这种关系)。slab分配器103的内存分配粒度更加精细,它的引入有效地避免了分配小于等于0.5个内存页大小的内存块所引起的内存浪费的问题。
然而,在现有技术(例如,linux操作系统)中,由页分配器101分配的内存空间(包括slab内存空间)通常只能是2n(0≤n≤11,即最多为12种情况)个连续内存页。因此,linux内核需要维护12个链表,每个链表记录着一种连续空闲页的信息,即,第一个链表中的每一项为1个空闲页,第二个链表中的每一项为2个连续空闲页,第三个链表中的每一项为4个连续空闲页,以此类推。当需要为应用程序分配内存页时,从对应的链表上摘除空闲页;释放内存页时,将对应的内存页归还到对应的链表。
在这种情况下,在分配包含非2n个连续内存页(例如,大于1的奇数个连续内存页)的内存空间的过程中,就伴随着内存页的拆分,并且会造成内存页分配所引起的内存浪费。例如,如果要分配65个连续的内存页,则只能从128个连续空闲页的链表中分配。剩下的63个内存页,经过拆分后被放到不同的链表(分别对应n=0-5的6个链表)中,这种拆分操作比较复杂。而且,如果频繁申请这类内存空间,导致会有很多的(至少包含1个空闲页,即n=0这种情况的)碎片页面。
同理,当释放这类内存空间后,还要判断经过拆分得到的各个更小的内存块是否空闲,只有在所有经过拆分得到的各个更小的内存块都空闲时,才能释放原先被拆分的(例如,上述包含128个连续空闲页的)整个大的内存块。现有技术的这种针对内存页结构的内存管理方法在释放不用的内存时操作也较为复杂。
因此,至少为了解决上述技术问题,需要提出新的技术方案。
发明内容
根据本发明的一种适用于内存页结构的内存管理方法,包括:
构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
基于多种复合页来管理内存页。
根据本发明的内存管理方法,还包括:
以多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理多种空闲复合页的空闲复合页红黑树,基于空闲复合页红黑树的关键字的数值来索引多种空闲复合页的起始地址。
根据本发明的内存管理方法,通过在用于管理内存页的内存页数据结构中定义红黑树节点数据结构,来关联内存页和空闲复合页红黑树,其中,红黑树节点数据结构包括:指向左子节点的指针、指向右子节点的指针、指向父红黑树节点的指针、包含关键字和当前红黑树节点所对应的内存页数据结构实例的起始地址的数据域。
根据本发明的内存管理方法,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,复合页中的内存页类型变量用于标识内存页是否是复合页的首页,复合页中的内存页数量变量用于标识复合页中的内存页的数量,复合页中的内存页状态变量用于标识内存页是否已经被分配,复合页中的内存页地址变量用于标识内存页的起始地址。
根据本发明的内存管理方法,多个连续的内存页的数量包括非2n的数值,其中n≥0。
根据本发明的内存管理方法,还包括:
通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构,来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
根据本发明的一种适用于内存页结构的内存管理装置,包括:
复合页构建模块,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块,用于基于多种复合页来管理内存页。
根据本发明的内存管理装置,还包括:
空闲复合页管理模块,用于以多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理多种空闲复合页的空闲复合页红黑树,基于空闲复合页红黑树的关键字的数值来索引多种空闲复合页的起始地址。
根据本发明的内存管理装置,其复合页构建模块还用于,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,复合页中的内存页类型变量用于标识内存页是否是复合页的首页,复合页中的内存页数量变量用于标识复合页中的内存页的数量,复合页中的内存页状态变量用于标识内存页是否已经被分配,复合页中的内存页地址变量用于标识内存页的起始地址。
根据本发明的内存管理装置,还包括:
页与slab关联模块,用于通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构,来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
根据本发明的上述技术方案,能够减少由于内存页分配所导致的碎片页面,简化内存页管理的操作,提高内存页的管理效率。
附图说明
并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与相关的文字描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。
图1示例性地示出了现有技术的双层内存管理结构的示意图。
图2示例性地示出了根据本发明的适用于内存页结构的内存管理方法的示意流程图。
图3示例性地示出了根据本发明的空闲复合页红黑树的示意图。
图4示例性地示出了根据本发明的复合页的示意图。
图5示例性地示出了根据本发明的复合页分配过程所涉及的红黑树操作的示意图。
图6示例性地示出了根据本发明的复合页分配过程所涉及的内存页数据结构实例操作的示意图。
图7示例性地示出了根据本发明的复合页释放过程所涉及的内存页数据结构实例操作的示意图。
图8示例性地示出了根据本发明的复合页释放过程所涉及的红黑树操作的示意图。
图9示例性地示出了使用根据本发明的slab内存块节点实例来关联内存页与上层slab分配器所管理的两种内存块链表的示意图。
图10示例性地示出了根据本发明的适用于内存页结构的内存管理装置的示意框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1示例性地示出了现有技术的双层内存管理结构的示意图。
如背景技术部分,至少为了优化页分配器101的内存页管理,需要提出新的技术方案,以减少由于内存页分配所导致的碎片页面,简化内存页分配的操作,提高内存页的管理效率。
图2示例性地示出了根据本发明的适用于内存页结构的内存管理方法的示意流程图。
如图2的实线框所示,适用于内存页结构的内存管理方法包括:
步骤S202:构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
步骤S204:基于多种复合页来管理内存页。
可选地,如图2的虚线框所示,内存管理方法还包括:
步骤S206:以多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理多种空闲复合页的空闲复合页红黑树,基于空闲复合页红黑树的关键字的数值来索引多种空闲复合页的起始地址。
例如,当存在多个同种的空闲复合页时,可以在空闲复合页红黑树节点的数据域中包含一个单向链表,该单向链表中的各个节点分别存储了所述多个同种的空闲复合页中的各个空闲复合页的起始地址。
图3示例性地示出了根据本发明的空闲复合页红黑树的示意图。
如图3所示,空闲复合页红黑树(即,free_pages_tree)用于按照复合页的种类(即,所包含的内存页的数量)来组织空闲的复合页。所有的空闲复合页都会被加入到空闲复合页红黑树中,空闲复合页红黑树的key(即,关键字)是每种复合页的实例所包含的内存页的数量。
虽然图3仅仅示出了分别包含1-7个内存页的7种不同的空闲复合页实例的情况,但是可以根据需要加入包含其他数量的内存页的空闲复合页的实例。
例如,可以只将空闲复合页的首页(参照下文,用MASTER标识的page_t实例,在图3中用实线框标识)加入到空闲复合页红黑树中。当需要分配内存页空间时,可以有多种复合页分配方法,例如:
1)可以先查找大小合适的复合页进行分配、将其从空闲复合页红黑树中删除;如果查找不到大小合适的复合页进行分配,再查找具有比需要分配的内存页空间更大的复合页,从中拆分出需要的分配的内存页空间,并将剩余的内存页空间组合为较小的另一种空闲复合页,按照其关键字的数值重新加入空闲复合页红黑树中,并将被拆分的原始空闲复合页从空闲复合页红黑树中删除。
2)也可以直接查找具有比需要分配的内存页空间更大的复合页来进行上述拆分、分配操作。
可选地,在采用上述方法1)和2)选择比需要分配的内存页空间更大的复合页时,可以采用大小最接近的原则。例如,以分配包含3个内存页的复合页为例:可以先查找包含4个内存页的空闲复合页;如果没有包含4个内存页的空闲复合页,则查找包含5个内存页的空闲复合页;以此类推。
例如,复合页可以位于shm空间(未示出)中,shm空间可以是使用mmap函数所申请的诸如256M字节的大小可配置的内存空间,其中包含page_t的各个实例及page_t的各个实例各自对应的内存页空间。关于shm空间(即、一种连续内存空间)的具体内容请参考同一申请人的同日发明专利申请“一种用于管理内存页的方法及装置”中的相关描述。
例如,可以使用以下数据结构page_pool_t来关联shm空间和空闲复合页红黑树(即,free_pages_tree)。
其中,shm_array[1024]变量用于存放指向不同连续内存空间的起始地址(可选地,在数组中按照由低至高或由高到低的顺序依次存放各个连续内存空间起始地址);shm_num变量用于存放连续内存空间的个数;shm_array_lock为互斥锁或自旋锁变量,用于实现不同进程对上述连续内存空间的共享读写操作;free_pages_tree对应于上文所述的空闲复合页红黑树。
空闲复合页红黑树可以被设置在内存页(即,复合页)所在的内存空间之外的独立内存空间(例如,用于管理内存页的上述pages_pool_t结构的实例所在的空间)中,也可以被设置在内存页所在的内存空间中。
可选地,也可以(例如,在上述pages_pool_t结构体里)设置用于空闲复合页管理的自旋锁变量(spinlock_t free_pages_lock,未示出),用于保护空闲复合页红黑树的插入、删除和查找等操作,避免冲突,实现共享保护。
可选地,通过在用于管理内存页的内存页数据结构(例如,下文所述的page_t结构体)中定义红黑树节点数据结构(参考page_t中的tree_node节点),来关联内存页和空闲复合页红黑树,其中,红黑树节点数据结构包括:指向左子节点的指针、指向右子节点的指针、指向父红黑树节点的指针、包含关键字和当前红黑树节点所对应的内存页数据结构实例的起始地址的数据域。
可选地,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,复合页中的内存页类型变量用于标识内存页是否是复合页的首页,复合页中的内存页数量变量用于标识复合页中的内存页的数量,复合页中的内存页状态变量用于标识内存页是否已经被分配,复合页中的内存页地址变量用于标识内存页的起始地址。
例如,用于管理内存页的内存页数据结构(page_t)可以定义如下:
其中,tree_node用于关联空闲复合页红黑树(free_pages_tree);list_node用于关联上层slab分配器(即,图1中的slab分配器103)所管理的已完全分配slab内存块链表和已部分分配slab内存块链表(在下文中有更具体的描述);shm_start用于标识page_t所在的shm空间的起始地址;state(即,复合页中的内存页状态变量),用于标识内存页是否已经被分配(例如,可以用常量FREE标识该内存页空闲,用常量ALLOCATED标识该内存页已经被分配出去);type(即,复合页中的内存页类型变量),用于标识内存页是否是复合页的首页(例如,可以用常量MASTER标识该内存页是复合页的首页,用常量SLAVE标识该内存页不是复合页的首页);compound_page_num(即,复合页中的内存页数量变量),用于标识复合页中的内存页的数量(即,连续内存页的数量);reserve[16]是预留的数据结构,供slab分配器103使用。
可选地,多个连续的内存页的数量包括非2n的数值,其中n≥0。
图4示例性地示出了根据本发明的复合页的示意图。
如图4所示,复合页可以将5个、3个和2个连续的内存页(page)组合为一个大的内存块,用于为应用程序分配包含多个连续内存页的内存(即,构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页)。
尽管在图4中未示出,然而,即使在分配包含一个内存页的内存时,也要基于复合页(仅包含1个内存页)来进行分配(即,基于多种复合页来管理内存页)。
图4中的顶部图片示出了包含5个连续内存页的第一种复合页(更准确地,其对应的各个page_t实例)的1个示例的示意结构图。在这个示例中,这5个内存页中包含1个MASTER页和4个SLAVE页,且均为空闲(state变量的值均为FREE)。
图4中的底部图片则示出了已经被分配的(state变量的值均为ALLOCATED)、包含3个连续内存页的第二种复合页的1个示例,以及还未被分配的(state变量的值均为FREE)、包含2个连续内存页的第三种复合页的1个示例的示意图。
图5示例性地示出了根据本发明的复合页分配过程所涉及的红黑树操作的示意图。
如图5所示,进行复合页分配前的红黑树的状态如图5的左半部分所示,此时包含1个第四种复合页(包含1个内存页)、1个图4中所示的第三种复合页(包含2个连续内存页)、1个图4中所示的第一种复合页(包含5个连续内存页)。
当需要分配3个连续内存页时(如图5中的箭头所示),例如,可以根据上文所述的复合页分配方法1),从图5所示的这1个第一种复合页(包含5个连续内存页)中拆分1个新的第二种复合页,用于后续分配。
因此,进行复合页拆分(注:不是分配)后的红黑树的状态如图5的右半部分所示,此时仍然包含复合页拆分前的那1个第四种复合页(包含1个内存页)、复合页拆分前的那1个第三种复合页(包含2个连续内存页),以及,新被拆分并被添加到红黑树中的、新产生的1个第三种复合页(如图5的右半部分的虚线框所示,其源自复合页拆分前的那1个第一种复合页,其被添加到第三种空闲复合页所对应的单链表的尾部)和新被拆分并被添加到红黑树中的、新产生的1个第二种复合页(如图5的右半部分的最右侧节点所示,其源自复合页拆分前的那1个第一种复合页)。
最后,可以将新产生的这1个第二种复合页分配出去(未示出这种状态)。
优选地,分配内存页的时候,会从红黑树里,查找指定分配内存页数的复合页。如果红黑树里面存在与所需要的空闲复合页对应的树节点,则查看该树节点中是否存在单链表实例,如果存在单链表实例,则表示该树节点对应可以分配的多个相同页数的空闲复合页。可以从所述单链表实例的尾部取出一个复合页,分配出去(例如,图5的右半部分中间位置的最下方的那1个第三种复合页可以分配给需要2个内存页的应用程序)。
上述操作避免了从链表头取出空闲复合页进行分配,不会导致对应的树节点被从树中移除,也就不会导致红黑树发生变化,从而不会影响分配效率。即,从链表尾部分配空闲内存页时,只需要从链表尾部移除对应的链表节点就可以了,红黑树不需要变化。
图6示例性地示出了根据本发明的复合页分配过程所涉及的内存页数据结构实例操作的示意图。
如图6所示,与图5中的复合页分配过程相对应,1个第一种复合页被拆分成了(如图6中的箭头所示)已分配的1个第二种复合页(对应箭头下方的3个顶部page_t实例)和1个未分配的第三种复合页(对应箭头下方的2个底部page_t实例)。
图7示例性地示出了根据本发明的复合页释放过程所涉及的内存页数据结构实例操作的示意图。
如图7所示,复合页释放之前的各个page_t实例的状态如图7上半部分所示,第2个page_t实例至第4个page_t实例所对应的内存页是被分配出去的1个图4中所示的第二种复合页(包含3个连续内存页)。
这一个第二种复合页被释放之后,各个page_t实例的状态如图7下半部分所示。由于这6个内存页是连续的,因此,这6个内存页可以被合并成一个新的、空闲的第五种复合页(包含分别对应于图7下半部分所示的6个page_t实例的6个内存页)。
图8示例性地示出了根据本发明的复合页释放过程所涉及的红黑树操作的示意图。
如图8所示,与图7所示的复合页释放过程相对应,进行内存页释放前的红黑树的状态如图8的左半部分所示,此时包含2个第四种复合页(包含1个内存页)、1个图4中所示的第三种复合页(包含2个连续内存页)、1个图4中所示的第二种复合页(包含3个连续内存页)。
当释放了3个连续内存页时(如图7中的箭头所示),如图7上半部分所示,第1个page_t实例(如图8的左半部分的第1个浅色虚线框所示)所对应的1个第四种复合页、第5个page_t实例和第6个page_t实例(如图8的左半部分的第2个浅色虚线框所示)所对应的1个第三种复合页内存页与新被释放的3个连续内存页组合成了上述一个新的、空闲的第五种复合页(包含6个连续内存页),并且将其加入到红黑树中。
因此,进行复合页释放后的红黑树的状态如图8的右半部分所示,此时仍然包含复合页释放前的那2个第四种复合页(包含1个内存页)中的1个、复合页释放前的那1个第二种复合页(包含3个连续内存页),以及,新被添加到红黑树中的、新合并而成的第五种复合页(如图8的右半部分的浅色虚线框所示)。
根据本发明的上述技术方案,例如,能够管理现有技术所不支持的内存页分组,即,能够管理非2n的数值(例如,3、5、6、10、12、13等)的连续内存页。因此,能够减少由于内存页分配所导致的碎片页面。
另外,由于复合页支持各种数值的连续内存页的组合,极大地简化了现有技术在分配内存页时所需要的拆分操作;而且,例如,在释放内存页时也无需等待具有伙伴关系的内存页先被释放、并且进行组合后再被释放,而是可以直接释放,因此,也简化了内存页释放的操作。
综上所述,上述技术方案简化了内存页管理的操作,提高了内存页的管理效率。
可选地,如图2的虚线框所示,内存管理方法还包括:
步骤S208:通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构(参考上文所述的page_t结构体中的list_node节点),来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
图9示例性地示出了使用根据本发明的slab内存块节点实例来关联内存页与上层slab分配器所管理的两种内存块链表的示意图。
如图9所示,slab内存块分组结构(即,图9中的slab_pool)包括用于分组管理1-9级的9种不同slab内存块的slab_groups数组(未示出)的成员(即,图9中的slab group),分别用于分配和释放(即,管理)8字节、16字节、32字节、64字节、128字节、256字节、512字节、1024字节、2048字节大小的chunk块。以第3级slab内存块(即,其chunk_size为32字节)为例,其两种队列(即,slabs_full和slabs_partial)分别进行管理,用page_t类型的对象中的双向链表(即,list node)来连接slabs_full或slabs_partial中的所有相关的(即,与已完全分配slab内存块和已部分分配slab内存块分别对应的)内存页。如图9所示,slabs_full链表中的各个slab块所包含的所有chunk块全部都已经被分配出去了(即,bitmap中的所有比特均为1,并以深灰色表示)。相反,slabs_partial链表中的各个slab块中都仅有一部分chunk块被分配出去了(即,bitmap中的一部分比特为1,并以浅灰色表示)。
根据本发明的上述技术方案,能够方便地与上层slab分配器103结合使用,相对于背景技术中所描述的现有技术而言,能够进一步减少内存浪费的问题。
图10示例性地示出了根据本发明的适用于内存页结构的内存管理装置1000的示意框图。
如图10的实线框所示,适用于内存页结构的内存管理装置1000,包括:
复合页构建模块1001,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块1003,用于基于多种复合页来管理内存页。
可选地,如图10的虚线框所示,内存管理装置1000还包括:
空闲复合页管理模块1005,用于以多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理多种空闲复合页的空闲复合页红黑树,基于空闲复合页红黑树的关键字的数值来索引多种空闲复合页的起始地址。
可选地,复合页构建模块1001还用于,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,复合页中的内存页类型变量用于标识内存页是否是复合页的首页,复合页中的内存页数量变量用于标识复合页中的内存页的数量,复合页中的内存页状态变量用于标识内存页是否已经被分配,复合页中的内存页地址变量用于标识内存页的起始地址。
可选地,如图10的虚线框所示,内存管理装置1000还包括:
页与slab关联模块1007,用于通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构,来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
根据本发明的上述技术方案,能够减少由于内存页分配所导致的碎片页面,简化内存页管理的操作,提高内存页的管理效率。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的精神和范围。
Claims (8)
1.一种适用于内存页结构的内存管理方法,其特征在于,包括:
构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
基于所述多种复合页来管理内存页;
通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构,来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,所述slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
2.如权利要求1所述的内存管理方法,其特征在于,还包括:
以所述多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理所述多种空闲复合页的空闲复合页红黑树,基于所述空闲复合页红黑树的关键字的数值来索引所述多种空闲复合页的起始地址。
3.如权利要求2所述的内存管理方法,其特征在于,通过在用于管理内存页的内存页数据结构中定义红黑树节点数据结构,来关联内存页和所述空闲复合页红黑树,其中,所述红黑树节点数据结构包括:指向左子节点的指针、指向右子节点的指针、指向父红黑树节点的指针、包含关键字和当前红黑树节点所对应的内存页数据结构实例的起始地址的数据域。
4.如权利要求1或2所述的内存管理方法,其特征在于,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,所述复合页中的内存页类型变量用于标识内存页是否是复合页的首页,所述复合页中的内存页数量变量用于标识复合页中的内存页的数量,所述复合页中的内存页状态变量用于标识内存页是否已经被分配,所述复合页中的内存页地址变量用于标识内存页的起始地址。
5.如权利要求1或2所述的内存管理方法,其特征在于,多个连续的内存页的数量包括非2n的数值,其中n≥0。
6.一种适用于内存页结构的内存管理装置,其特征在于,包括:
复合页构建模块,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块,用于基于所述多种复合页来管理内存页;
slab关联模块,用于通过在用于管理内存页的内存页数据结构中定义slab内存块节点数据结构,来关联内存页和上层slab分配器所管理的已完全分配slab内存块链表和已部分分配slab内存块链表,其中,所述slab内存块节点数据结构包括:指向前一slab内存块节点的指针、指向后一slab内存块节点的指针、包含当前slab内存块节点所关联的内存页数据结构实例的起始地址的数据域。
7.如权利要求6所述的内存管理装置,其特征在于,还包括:
空闲复合页管理模块,用于以所述多种空闲复合页所包含的内存页的数量作为关键字,来构建用于管理所述多种空闲复合页的空闲复合页红黑树,基于所述空闲复合页红黑树的关键字的数值来索引所述多种空闲复合页的起始地址。
8.如权利要求6或7所述的内存管理装置,其特征在于,所述复合页构建模块还用于,通过在用于管理内存页的内存页数据结构中定义以下变量,来构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页:复合页中的内存页类型、复合页中的内存页数量、复合页中的内存页状态、复合页中的内存页地址,其中,所述复合页中的内存页类型变量用于标识内存页是否是复合页的首页,所述复合页中的内存页数量变量用于标识复合页中的内存页的数量,所述复合页中的内存页状态变量用于标识内存页是否已经被分配,所述复合页中的内存页地址变量用于标识内存页的起始地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810169210.1A CN110209489B (zh) | 2018-02-28 | 2018-02-28 | 一种适用于内存页结构的内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810169210.1A CN110209489B (zh) | 2018-02-28 | 2018-02-28 | 一种适用于内存页结构的内存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110209489A CN110209489A (zh) | 2019-09-06 |
CN110209489B true CN110209489B (zh) | 2020-07-31 |
Family
ID=67778731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810169210.1A Active CN110209489B (zh) | 2018-02-28 | 2018-02-28 | 一种适用于内存页结构的内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110209489B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111490906B (zh) * | 2020-06-29 | 2020-09-25 | 武汉思普崚技术有限公司 | 一种网关设备策略的分析方法、装置及可读存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103455433A (zh) * | 2013-08-19 | 2013-12-18 | 曙光信息产业股份有限公司 | 内存管理方法及系统 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101638061B1 (ko) * | 2009-10-27 | 2016-07-08 | 삼성전자주식회사 | 플래시 메모리 시스템 및 그것의 플래시 조각 모음 방법 |
CN103019884B (zh) * | 2012-11-21 | 2015-07-01 | 北京航空航天大学 | 基于虚拟机快照的内存页去重方法及装置 |
CN103150259B (zh) * | 2013-03-22 | 2016-03-30 | 华为技术有限公司 | 一种内存回收方法和装置 |
US9612949B2 (en) * | 2013-06-13 | 2017-04-04 | Arm Limited | Memory allocation in a multi-core processing system based on a threshold amount of memory |
CN103593300B (zh) * | 2013-11-15 | 2017-05-03 | 浪潮电子信息产业股份有限公司 | 一种内存分配回收方法 |
CN106294190B (zh) * | 2015-05-25 | 2020-10-16 | 中兴通讯股份有限公司 | 一种存储空间管理方法及装置 |
CN105302738B (zh) * | 2015-12-09 | 2018-09-11 | 北京东土科技股份有限公司 | 一种内存分配方法及装置 |
CN105930280B (zh) * | 2016-05-27 | 2019-07-05 | 诸葛晴凤 | 一种面向非易失性内存的高效的页面组织和管理方法 |
CN106874348B (zh) * | 2016-12-26 | 2020-06-16 | 贵州白山云科技股份有限公司 | 文件存储和索引方法、装置及读取文件的方法 |
CN107707616B (zh) * | 2017-08-21 | 2019-02-12 | 贵州白山云科技股份有限公司 | 一种数据传输方法及系统 |
CN107515788A (zh) * | 2017-08-31 | 2017-12-26 | 郑州云海信息技术有限公司 | 一种内存分配的方法及装置 |
CN110209595A (zh) * | 2018-02-28 | 2019-09-06 | 贵州白山云科技股份有限公司 | 一种用于管理内存页的方法及装置 |
-
2018
- 2018-02-28 CN CN201810169210.1A patent/CN110209489B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103455433A (zh) * | 2013-08-19 | 2013-12-18 | 曙光信息产业股份有限公司 | 内存管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN110209489A (zh) | 2019-09-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101367450B1 (ko) | 멀티 스레드 어플리케이션을 위한 해시 테이블의 동시 리해싱의 수행 | |
US10642515B2 (en) | Data storage method, electronic device, and computer non-volatile storage medium | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
EP2488950B1 (en) | A tiered data management method and system for high performance data monitoring | |
US11314689B2 (en) | Method, apparatus, and computer program product for indexing a file | |
US11074179B2 (en) | Managing objects stored in memory | |
CN108121813B (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
WO2017050064A1 (zh) | 共享内存数据库的内存管理方法及装置 | |
US10649967B2 (en) | Memory object pool use in a distributed index and query system | |
CN115599544A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
CN114327917A (zh) | 内存管理方法、计算设备及可读存储介质 | |
WO2016138839A1 (zh) | 基于位图的存储空间管理系统及其方法 | |
CN115712500A (zh) | 内存释放、内存恢复方法、装置、计算机设备及存储介质 | |
CN115168304A (zh) | 一种数据处理方法、装置、存储介质及设备 | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 | |
CN116661690A (zh) | 记录内存状态的方法、装置、计算机设备及存储介质 | |
CN110209489B (zh) | 一种适用于内存页结构的内存管理方法及装置 | |
US20110099347A1 (en) | Managing allocation and deallocation of storage for data objects | |
CN115374127B (zh) | 数据存储方法及装置 | |
CN115658561B (zh) | 配电终端内存管理方法、装置、电子设备及存储介质 | |
CN112346848A (zh) | 一种管理内存池的方法、装置及终端 | |
US12111756B2 (en) | Systems, methods, and apparatus for wear-level aware memory allocation | |
CN112328389B (zh) | 一种用于二叉树添加和删除结点的内存分配方法 | |
US10169250B2 (en) | Method and apparatus method and apparatus for controlling access to a hash-based disk | |
CN110209594B (zh) | 一种适用于slab结构的内存管理方法及装置 |
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 |