CN110209595A - 一种用于管理内存页的方法及装置 - Google Patents
一种用于管理内存页的方法及装置 Download PDFInfo
- Publication number
- CN110209595A CN110209595A CN201810168143.1A CN201810168143A CN110209595A CN 110209595 A CN110209595 A CN 110209595A CN 201810168143 A CN201810168143 A CN 201810168143A CN 110209595 A CN110209595 A CN 110209595A
- Authority
- CN
- China
- Prior art keywords
- page
- memory
- memory page
- structure example
- contiguous
- 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.)
- Pending
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/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (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个内存页大小的内存块所引起的内存浪费的问题。
slab分配器103所管理的单个chunk块较小,系统中需要按chunk块管理的总内存量却可能会很大;而且,随着系统上运行的应用程序的类型和数量的不断变化,需要按chunk块管理的总内存量也会不断变化。
在这种情况下,例如,就需要考虑如何更合理地管理诸如页分配器101等的内存管理器所使用的内存页空间,以提高内存管理效率。
因此,至少为了解决上述问题,需要提出新的技术方案。
发明内容
本发明旨在解决上面描述的问题。
根据本发明的一种用于管理内存页的方法,包括:
申请包含内存页管理结构实例和与内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
基于内存页管理结构实例来管理内存页,
其中,内存页管理结构实例被依次连续地设置在内存页所占用的内存空间之前或之后,内存页一一对应于内存页管理结构实例依次连续设置。
根据本发明的用于管理内存页的方法,其内存页管理结构实例中包含:用于标识内存页管理结构实例、及内存页管理结构实例所对应的内存页所在的连续内存空间的起始地址的指针变量。
根据本发明的用于管理内存页的方法,还包括:
对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
根据本发明的用于管理内存页的方法,还包括:
构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
基于多种复合页来管理内存页。
根据本发明的用于管理内存页的方法,还包括:
使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
根据本发明的用于管理内存页的方法,还包括:
当没有足够的空闲内存页或空闲复合页供分配时,重新申请新的连续内存空间,将新申请的连续内存空间中的内存页加入到用于管理空闲内存页的红黑树中,或者将新申请的连续内存空间中的所有内存页作为一个复合页加入到用于管理空闲复合页的红黑树中;
当连续内存空间中的所有内存页或所有复合页都空闲时,释放连续内存空间。
根据本发明的一种用于管理内存页的装置,包括:
连续内存空间申请模块,用于申请包含内存页管理结构实例和与内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
内存页管理模块,用于基于内存页管理结构实例来管理内存页,
其中,内存页管理结构实例被依次连续地设置在内存页所占用的内存空间之前或之后,内存页一一对应于内存页管理结构实例依次连续设置。
根据本发明的用于管理内存页的装置,还包括:
连续内存空间分组管理模块,用于对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
根据本发明的用于管理内存页的装置,还包括:
复合页构建模块,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块,用于基于多种复合页来管理内存页。
根据本发明的用于管理内存页的装置,还包括:
空闲内存页或空闲复合页管理模块,用于使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
根据本发明的上述技术方案,能够简化对内存页进行管理时所需的寻址操作,能够及时申请诸如页分配器等内存管理器所使用的连续内存空间,并且能够及时释放空闲的连续内存空间。从而能够更合理地管理内存页空间,提高了内存管理效率。
附图说明
并入到说明书中并且构成说明书的一部分的附图示出了本发明的实施例,并且与相关的文字描述一起用于解释本发明的原理。在这些附图中,类似的附图标记用于表示类似的要素。下面描述中的附图是本发明的一些实施例,而不是全部实施例。对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其他的附图。
图1示例性地示出了现有技术的双层内存管理结构的示意图。
图2示例性地示出了根据本发明的用于管理内存页的方法的示意流程图。
图3示出了根据本发明的一个连续内存空间的示意图。
图4示例性地示出了根据本发明的用于管理内存页的装置的示意框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
图1示例性地示出了现有技术的双层内存管理结构的示意图。
如背景技术部分,至少为了更合理地管理诸如slab分配器103等内存管理器所使用的内存页空间,以提高内存管理效率,需要提出新的技术方案。
图2示例性地示出了根据本发明的用于管理内存页的方法的示意流程图。
如图2的实线框所示,用于管理内存页的方法包括:
步骤S202:申请包含内存页管理结构实例和与内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
步骤S204:基于内存页管理结构实例来管理内存页,
其中,内存页管理结构实例被依次连续地设置在内存页所占用的内存空间之前(即,低地址方向)或之后(即,高地址方向),内存页一一对应于内存页管理结构实例依次连续设置。
图3示出了根据本发明的一个连续内存空间的示意图。
如图3所示,shm即为一个连续内存空间(例如,其可以是通过mmap命令所申请到的连续内存空间)。shm空间包括两个部分:内存页管理结构实例空间(即,由图3中依次连续设置的page_t实例所组成的空间);与内存页管理结构实例一一对应(在图3中用带箭头的虚线表示出了这种对应关系)的内存页空间(即,由图3中依次连续设置的各个page所组成的空间)。每个内存页(page)的大小是4K字节。由于每个page都对应一个page_t,所以可以对每个page进行管理。
例如,可以将shm的大小预先设定为256M字节,并且可以预先设置多个个不同的shm,将它们作为slab分配器103所管理的内存空间(例如,当设置1024个256M字节的shm时,空间总容量约为256G字节)。
shm的大小和数量可以根据系统需求进行配置,从而满足不同应用场景。
可选地,内存页管理结构实例中包含:用于标识内存页管理结构实例、及内存页管理结构实例所对应的内存页所在的连续内存空间的起始地址的指针变量。
例如,可以采用以下page_t数据结构来管理page:
typedef struct{
u_char*shm_start;
u_char state;
}page_t;
其中,shm_start(即,上述用于标识连续内存空间shm的起始地址的指针变量)用于标识shm的起始地址;state(即,内存页状态变量),用于标识内存页是否已经被分配(例如,可以用常量FREE标识该内存页空闲,用常量ALLOCATED标识该内存页已经被分配出去)。
由于每个page都对应一个page_t,所以根据page_t的实例的地址和shm_start变量所标识的shm的起始地址,就可以得到每个page的起始地址。同理,根据每个page的起始地址,也可以得到其所对应的page_t的地址。从而简化了对内存页进行管理时的寻址操作。
可选地,如图2的虚线框所示,用于管理内存页的方法还包括:
步骤S206:对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
例如,可以设置指针数组u_char*shm_array[1024],用于存放指向不同连续内存空间的起始地址(可选地,在数组中按照由低至高或由高到低的顺序依次存放各个连续内存空间起始地址)。可以设置uint16_t shm_num变量,用于存放连续内存空间的个数。可以设置rwlock_t shm_array_lock互斥锁或自旋锁变量,用于实现不同进程对上述连续内存空间的共享读写操作。
可选地,如图2的虚线框所示,用于管理内存页的方法还包括:
步骤S208:构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
步骤S210:基于多种复合页来管理内存页。
例如,可以在上述page_t结构体中定义变量uint16_t compound_page_num和变量u_char type。其中,compound_page_num(即,复合页中的内存页数量变量),用于标识复合页中的内存页的数量(即,连续内存页的数量);type(即,复合页中的内存页类型变量),用于标识内存页是否是复合页的首页(例如,可以用常量MASTER标识该内存页是复合页的首页,用常量SLAVE标识该内存页不是复合页的首页)。从而可以基于更大的粒度(大于1个内存页)来实现内存页的管理。
可选地,如图2的虚线框所示,用于管理内存页的方法还包括:
步骤S212:使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
可选地,如图2的虚线框所示,用于管理内存页的方法还包括:
步骤S214:当没有足够的空闲内存页或空闲复合页供分配时,重新申请新的连续内存空间,将新申请的连续内存空间中的内存页加入到用于管理空闲内存页的红黑树中,或者将新申请的连续内存空间中的所有内存页作为一个复合页加入到用于管理空闲复合页的红黑树中;
步骤S216:当连续内存空间中的所有内存页或所有复合页都空闲时,释放连续内存空间。
通过步骤S214,可以及时申请诸如slab分配器103等内存管理器所需要的内存空间。通过步骤S216,可以及时释放空闲的连续内存空间。从而更合理地管理诸如slab分配器103等内存管理器所使用的内存页空间,以提高内存管理效率。
上述步骤的执行顺序仅仅是示例,可以根据需要调整各个步骤的执行顺序。
图4示例性地示出了根据本发明的用于管理内存页的装置400的示意框图。
如图4的实线框所示,用于管理内存页的装置400包括:
连续内存空间申请模块401,用于申请包含内存页管理结构实例和与内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
内存页管理模块403,用于基于内存页管理结构实例来管理内存页,
其中,内存页管理结构实例被依次连续地设置在内存页所占用的内存空间之前或之后,内存页一一对应于内存页管理结构实例依次连续设置。
可选地,如图4的虚线框所示,装置400还包括:
连续内存空间分组管理模块405,用于对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
可选地,如图4的虚线框所示,装置400还包括:
复合页构建模块407,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块409,用于基于多种复合页来管理内存页。
可选地,如图4的虚线框所示,装置400还包括:
空闲内存页或空闲复合页管理模块411,用于使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
可选地,空闲内存页或空闲复合页管理模块411还用于:
当没有足够的空闲内存页或空闲复合页供分配时,重新申请新的连续内存空间,将新申请的连续内存空间中的内存页加入到用于管理空闲内存页的红黑树中,或者将所述新申请的连续内存空间中的所有内存页作为一个复合页加入到用于管理空闲复合页的红黑树中;
当连续内存空间中的所有内存页或所有复合页都空闲时,释放连续内存空间。
根据本发明的上述技术方案,例如,能够简化对内存页进行管理时所需的寻址操作,能够及时申请诸如页分配器101等内存管理器所使用的连续内存空间,并且能够及时释放空闲的连续内存空间。从而能够更合理地管理内存页空间,提高了内存管理效率。
上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制。尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例的技术方案的精神和范围。
Claims (10)
1.一种用于管理内存页的方法,其特征在于,包括:
申请包含内存页管理结构实例和与所述内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
基于所述内存页管理结构实例来管理内存页,
其中,所述内存页管理结构实例被依次连续地设置在所述内存页所占用的内存空间之前或之后,所述内存页一一对应于所述内存页管理结构实例依次连续设置。
2.如权利要求1所述的用于管理内存页的方法,其特征在于,所述内存页管理结构实例中包含:用于标识所述内存页管理结构实例、及所述内存页管理结构实例所对应的内存页所在的连续内存空间的起始地址的指针变量。
3.如权利要求1所述的用于管理内存页的方法,其特征在于,还包括:
对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
4.如权利要求1至3中的任一项所述的用于管理内存页的方法,其特征在于,还包括:
构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
基于所述多种复合页来管理内存页。
5.如权利要求4所述的用于管理内存页的方法,其特征在于,还包括:
使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
6.如权利要求5所述的用于管理内存页的方法,其特征在于,还包括:
当没有足够的空闲内存页或空闲复合页供分配时,重新申请新的连续内存空间,将新申请的连续内存空间中的内存页加入到用于管理空闲内存页的红黑树中,或者将所述新申请的连续内存空间中的所有内存页作为一个复合页加入到用于管理空闲复合页的红黑树中;
当连续内存空间中的所有内存页或所有复合页都空闲时,释放连续内存空间。
7.一种用于管理内存页的装置,其特征在于,包括:
连续内存空间申请模块,用于申请包含内存页管理结构实例和与所述内存页管理结构实例一一对应的内存页的预定大小的至少一个连续内存空间;
内存页管理模块,用于基于所述内存页管理结构实例来管理内存页,
其中,所述内存页管理结构实例被依次连续地设置在所述内存页所占用的内存空间之前或之后,所述内存页一一对应于所述内存页管理结构实例依次连续设置。
8.如权利要求7所述的用于管理内存页的装置,其特征在于,还包括:
连续内存空间分组管理模块,用于对多个不同的连续内存空间进行分组管理,在不同进程之间共享连续内存空间。
9.如权利要求7或8所述的用于管理内存页的装置,其特征在于,还包括:
复合页构建模块,用于构建分别包含一个内存页和不同数量的多个连续的内存页的多种复合页;
复合页管理模块,用于基于所述多种复合页来管理内存页。
10.如权利要求9所述的用于管理内存页的装置,其特征在于,还包括:
空闲内存页或空闲复合页管理模块,用于使用红黑树对各个连续内存空间中的空闲内存页或空闲复合页进行统一管理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810168143.1A CN110209595A (zh) | 2018-02-28 | 2018-02-28 | 一种用于管理内存页的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810168143.1A CN110209595A (zh) | 2018-02-28 | 2018-02-28 | 一种用于管理内存页的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110209595A true CN110209595A (zh) | 2019-09-06 |
Family
ID=67778919
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810168143.1A Pending CN110209595A (zh) | 2018-02-28 | 2018-02-28 | 一种用于管理内存页的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110209595A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110209489A (zh) * | 2018-02-28 | 2019-09-06 | 贵州白山云科技股份有限公司 | 一种适用于内存页结构的内存管理方法及装置 |
CN111078587A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455974A (zh) * | 2010-10-21 | 2012-05-16 | 上海宝信软件股份有限公司 | 一种内存消耗可控的高速内存申请释放管理系统及方法 |
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103455433A (zh) * | 2013-08-19 | 2013-12-18 | 曙光信息产业股份有限公司 | 内存管理方法及系统 |
CN104317734A (zh) * | 2014-11-28 | 2015-01-28 | 迈普通信技术股份有限公司 | 一种适用于slab的内存分配方法及装置 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN106648932A (zh) * | 2016-12-19 | 2017-05-10 | 四川长虹电器股份有限公司 | 基于Python扩展模块的多进程共享系统及方法 |
CN106681829A (zh) * | 2016-12-09 | 2017-05-17 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
-
2018
- 2018-02-28 CN CN201810168143.1A patent/CN110209595A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102455974A (zh) * | 2010-10-21 | 2012-05-16 | 上海宝信软件股份有限公司 | 一种内存消耗可控的高速内存申请释放管理系统及方法 |
CN102880555A (zh) * | 2012-07-28 | 2013-01-16 | 福州大学 | 面向实时系统的内存算法 |
CN103455433A (zh) * | 2013-08-19 | 2013-12-18 | 曙光信息产业股份有限公司 | 内存管理方法及系统 |
CN104317734A (zh) * | 2014-11-28 | 2015-01-28 | 迈普通信技术股份有限公司 | 一种适用于slab的内存分配方法及装置 |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN106681829A (zh) * | 2016-12-09 | 2017-05-17 | 上海斐讯数据通信技术有限公司 | 一种内存管理方法及系统 |
CN106648932A (zh) * | 2016-12-19 | 2017-05-10 | 四川长虹电器股份有限公司 | 基于Python扩展模块的多进程共享系统及方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110209489A (zh) * | 2018-02-28 | 2019-09-06 | 贵州白山云科技股份有限公司 | 一种适用于内存页结构的内存管理方法及装置 |
CN111078587A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN111078587B (zh) * | 2019-12-10 | 2022-05-06 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425538B (zh) | 进程通讯方法及系统 | |
CN100382048C (zh) | 一种内存管理方法 | |
CN101013381B (zh) | 基于对象存储系统的分布式锁 | |
CN104899156A (zh) | 一种面向大规模社交网络的图数据存储及查询方法 | |
CN106681842A (zh) | 一种多进程系统中共享内存的管理方法及装置 | |
CN106681829A (zh) | 一种内存管理方法及系统 | |
CN104317742A (zh) | 一种优化空间管理的自动精简配置方法 | |
CN106339258A (zh) | 可编程逻辑器件与微处理器共享内存的管理方法及装置 | |
CN102508784A (zh) | 视频监控设备中闪存卡的数据存储方法及其系统 | |
CN103455433B (zh) | 内存管理方法及系统 | |
CN104809247A (zh) | 数据库连接的分配和回收方法 | |
CN101470667A (zh) | Linux系统平台上指定地址范围分配物理内存的方法 | |
CN104731799A (zh) | 内存数据库管理装置 | |
CN106843773A (zh) | 存储方法和分布式存储系统 | |
CN105138281B (zh) | 一种物理磁盘的共享方法及装置 | |
CN110209595A (zh) | 一种用于管理内存页的方法及装置 | |
CN101673244B (zh) | 多核或集群系统的存储器控制方法 | |
CN106557427A (zh) | 共享内存数据库的内存管理方法及装置 | |
CN112685333B (zh) | 一种堆内存管理方法及装置 | |
CN106155917A (zh) | 内存管理方法及装置 | |
CN103902475A (zh) | 一种基于队列管理机制的固态硬盘并行访问方法及装置 | |
CN101226553A (zh) | 一种嵌入式数据库变长字段存储的实现方法及装置 | |
CN104317734A (zh) | 一种适用于slab的内存分配方法及装置 | |
CN110109763A (zh) | 一种共享内存管理方法及装置 | |
CN106843753A (zh) | 一种分布式存储中协议使用缓存的方法及装置 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190906 |
|
RJ01 | Rejection of invention patent application after publication |