CN108647150A - 一种内存管理方法及系统 - Google Patents
一种内存管理方法及系统 Download PDFInfo
- Publication number
- CN108647150A CN108647150A CN201810382186.XA CN201810382186A CN108647150A CN 108647150 A CN108647150 A CN 108647150A CN 201810382186 A CN201810382186 A CN 201810382186A CN 108647150 A CN108647150 A CN 108647150A
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- block
- byte
- algorithms
- 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
- 238000000034 method Methods 0.000 title claims abstract description 21
- 239000002699 waste material Substances 0.000 abstract description 5
- 238000007726 management method Methods 0.000 description 24
- 230000006870 function Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- 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)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种内存管理方法。涉及内存管理领域。包括如下步骤:采用buddy算法对内存块存储分配;内存块内的字节内存采用slub算法存储分配;完全释放内存块中的字节内存后释放内存块。还提供一种内存管理系统。本发明通过采用buddy算法对内存块存储分配以及采用slub算法对存储块内的闲置字节存储分配,避免了内存块内的闲置字节内存的浪费、提高了内存利用率以及系统存储效率;通过对每块已分配的内存块设置闲置率阈值f并对内存块设置标记sign,提高了内存块内闲置内存的管理效率;通过将内存块中闲置内存首址pointer与闲置内存大小size作为数据对存储到slub_free列表中,提高了内存块的闲置内存高效利用与分配。
Description
技术领域
本发明属于内存管理技术领域,特别是涉及一种内存管理方法及系统。
背景技术
计算机中的数据存储效率以及内存空间的有效利用率对计算机系统运行效率至关重要。常用的针对内存块分配释放的buddy算法对内存的存储管理能一定程度生提高内存的利用率以及内存的存储效率。但是buddy算法同样会存在较为严重的内存浪费。在已经分配的内存块中存在大量的字节内存闲置,导致内存浪费,且存储效率不高。
本发明致力于发明一种内存管理方法及系统,用于解决现有单纯采用buddy算法对内存块分配的内存浪费且存储效率有待提高的问题。
发明内容
本发明的目的在于提供一种内存管理方法及系统,通过采用buddy算法对内存块存储分配以及采用slub算法对存储块内的闲置字节存储分配,实现了对内存块内的闲置字节内存的最大利用,解决了现有单纯采用buddy算法对内存块分配的内存浪费且存储效率有待提高的问题。
为解决上述技术问题,本发明是通过以下技术方案实现的:
本发明为一种内存管理方法,包括如下步骤:
S000:采用buddy算法对内存块存储分配;
S001:内存块内的字节内存采用slub算法存储分配;
S002:完全释放内存块中的字节内存后释放内存块。
优选地,S000中采用采用buddy算法对内存块存储分配的具体步骤如下:
T000:计算内存请求大小并计算需求内存块大小2n;
T001:判断free_area[n]数组是否存在满足需求内存块的充分内存块,若是,则执行T002;若否,则执行T005;
T002:判断充分内存块是需求内存块的倍数m是否大于1;若是,则执行T003;若否,则执行T005;
T003:将充分内存块分成m个需求内存块并将以充分内存块为首址的需求内存块分配给内存请求;
T004:将剩余m-1需求内存块首址存入对应的free_area[t]列表中并执行T006,其中,t<m+n-1;
T005:令n=n+1并执行T001;
T006:判断需求内存块闲置率是否超过闲置率阈值f;若是,则执行T007,若否,则执行T008;
T007:需求内存块标记sign为1;
T008:free_area[n]数组中删除对应需求内存块。
优选地,S001中内存块内的字节内存采用slub算法存储分配的具体过程如下:
A000:检索free_area[s]内存块标记sign为1的内存块,其中s为任意正整数;
A001:计算内存块标记sign为1的内存块中闲置内存首址pointer与闲置内存大小size并将(pointer,size)作为数据对存储到slub_free列表中;
A002:计算存储请求大小并判断需求内存是否小于内存块;若是,则执行T004;若否,则执行A003;
A003:转入buddy算法对内存块存储;
T004:索引slub_free列表中符合需求内存的闲置内存,将闲置内存分配给存储请求;
T005:删除slub_free列表中对应的(pointer,size)数据对;
T006:需求内存块标记sign置0。
优选地,S002中完全释放内存块中的字节内存后释放内存块具体过程如下:
判断内存块中标记sign是否为1;若是,不释放内存块;若否,释放内存块。
优选地,所述限制率阀值f为预先设定的内存块的闲置率上限。
一种内存管理系统,包括:
内存块存储分配模块,用于对内存块的存储分配;
字节内存分配模块,用于对内存块内的字节内存存储分配;
内存释放模块,用于对内存块的释放以及对字节内存的释放;
内存管理模块,用于通过数据对内存块的闲置与使用情况的记录。
优选地,所述内存块存储分配模块预设闲置率阈值f;所述内存块分配模块采用buddy算法对内存块存储分配;所述内存块分配模块从内存管理模块获取记录内存块大小的free_area[n]数组。
优选地,所述字节内存分配模块采用slub算法对字节内存存储分配;所述字节内存分配模块从内存管理模块获取slub_free列表。
优选地,所述内存管管理模块记录内存块首址并将内存块分类记录在free_area[n]数组内;所述内存管理模块对内存块标记或删除标记;所述内存管理模块记录内存块内限制内存首址pointer与闲置内存大小size并产生slub_free列表。
本发明具有以下有益效果:
1、本发明通过采用buddy算法对内存块存储分配以及采用slub算法对存储块内的闲置字节存储分配,避免了内存块内的闲置字节内存的浪费、提高了内存利用率以及系统存储效率;
2、本发明通过对每块已分配的内存块设置闲置率阈值f并对内存块设置标记sign,提高了内存块内闲置内存的管理效率;通过将内存块中闲置内存首址pointer与闲置内存大小size作为数据对存储到slub_free列表中,提高了内存块的闲置内存高效利用与分配。
当然,实施本发明的任一产品并不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的一种内存管理方法流程图;
图2为S000中采用采用buddy算法对内存块存储分配的流程图;
图3为S001中内存块内的字节内存采用slub算法存储分配的流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
请参阅图1所示,本发明为一种内存管理方法,包括如下步骤:
S000:采用buddy算法对内存块存储分配;
S001:内存块内的字节内存采用slub算法存储分配;
S002:完全释放内存块中的字节内存后释放内存块。
请参阅图2所示,S000中采用采用buddy算法对内存块存储分配的具体步骤如下:
T000:计算内存请求大小并计算需求内存块大小2n;
T001:判断free_area[n]数组是否存在满足需求内存块的充分内存块,若是,则执行T002;若否,则执行T005;
T002:判断充分内存块是需求内存块的倍数m是否大于1;若是,则执行T003;若否,则执行T005;
T003:将充分内存块分成m个需求内存块并将以充分内存块为首址的需求内存块分配给内存请求;
T004:将剩余m-1需求内存块首址存入对应的free_area[t]列表中并执行T006,其中,t<m+n-1;
T005:令n=n+1并执行T001;
T006:判断需求内存块闲置率是否超过闲置率阈值f;若是,则执行T007,若否,则执行T008;
T007:需求内存块标记sign为1;
T008:free_area[n]数组中删除对应需求内存块。
请参阅图3所示,S001中内存块内的字节内存采用slub算法存储分配的具体过程如下:
A000:检索free_area[s]内存块标记sign为1的内存块,其中s为任意正整数;
A001:计算内存块标记sign为1的内存块中闲置内存首址pointer与闲置内存大小size并将(pointer,size)作为数据对存储到slub_free列表中;
A002:计算存储请求大小并判断需求内存是否小于内存块;若是,则执行T004;若否,则执行A003;
A003:转入buddy算法对内存块存储;
T004:索引slub_free列表中符合需求内存的闲置内存,将闲置内存分配给存储请求;
T005:删除slub_free列表中对应的(pointer,size)数据对;
T006:需求内存块标记sign置0。
其中,S002中完全释放内存块中的字节内存后释放内存块具体过程如下:
判断内存块中标记sign是否为1;若是,不释放内存块;若否,释放内存块。
其中,限制率阀值f为预先设定的内存块的闲置率上限。
一种内存管理系统,包括:
内存块存储分配模块,用于对内存块的存储分配;
字节内存分配模块,用于对内存块内的字节内存存储分配;
内存释放模块,用于对内存块的释放以及对字节内存的释放;
内存管理模块,用于通过数据对内存块的闲置与使用情况的记录。
其中,内存块存储分配模块预设闲置率阈值f;内存块分配模块采用buddy算法对内存块存储分配;内存块分配模块从内存管理模块获取记录内存块大小的free_area[n]数组。
其中,字节内存分配模块采用slub算法对字节内存存储分配;字节内存分配模块从内存管理模块获取slub_free列表。
其中,内存管管理模块记录内存块首址并将内存块分类记录在free_area[n]数组内;内存管理模块对内存块标记或删除标记;内存管理模块记录内存块内限制内存首址pointer与闲置内存大小size并产生slub_free列表。
值得注意的是,上述系统实施例中,所包括的各个单元只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
另外,本领域普通技术人员可以理解实现上述各实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (9)
1.一种内存管理方法,其特征在于,包括如下步骤:
S000:采用buddy算法对内存块存储分配;
S001:内存块内的字节内存采用slub算法存储分配;
S002:完全释放内存块中的字节内存后释放内存块。
2.根据权利要求1所述的一种内存管理方法,其特征在于,S000中采用采用buddy算法对内存块存储分配的具体步骤如下:
T000:计算内存请求大小并计算需求内存块大小2n;
T001:判断free_area[n]数组是否存在满足需求内存块的充分内存块,若是,则执行T002;若否,则执行T005;
T002:判断充分内存块是需求内存块的倍数m是否大于1;若是,则执行T003;若否,则执行T005;
T003:将充分内存块分成m个需求内存块并将以充分内存块为首址的需求内存块分配给内存请求;
T004:将剩余m-1需求内存块首址存入对应的free_area[t]列表中并执行T006,其中,t<m+n-1;
T005:令n=n+1并执行T001;
T006:判断需求内存块闲置率是否超过闲置率阈值f;若是,则执行T007,若否,则执行T008;
T007:需求内存块标记sign为1;
T008:free_area[n]数组中删除对应需求内存块。
3.根据权利要求1所述的一种内存管理方法,其特征在于,S001中内存块内的字节内存采用slub算法存储分配的具体过程如下:
A000:检索free_area[s]内存块标记sign为1的内存块,其中s为任意正整数,其中s为任意正整数;
A001:计算内存块标记sign为1的内存块中闲置内存首址pointer与闲置内存大小size并将(pointer,size)作为数据对存储到slub_free列表中;
A002:计算存储请求大小并判断需求内存是否小于内存块;若是,则执行T004;若否,则执行A003;
A003:转入buddy算法对内存块存储;
T004:索引slub_free列表中符合需求内存的闲置内存,将闲置内存分配给存储请求;
T005:删除slub_free列表中对应的(pointer,size)数据对;
T006:需求内存块标记sign置0。
4.根据权利要求1所述的一种内存管理方法,其特征在于,S002中完全释放内存块中的字节内存后释放内存块具体过程如下:
判断内存块中标记sign是否为1;若是,不释放内存块;若否,释放内存块。
5.根据权利要求1所述的一种内存管理方法,其特征在于,所述限制率阀值f为预先设定的内存块的闲置率上限。
6.如权利要求1-5任意一所述的一种内存管理系统,其特征在于,包括:
内存块存储分配模块,用于对内存块的存储分配;
字节内存分配模块,用于对内存块内的字节内存存储分配;
内存释放模块,用于对内存块的释放以及对字节内存的释放;
内存管理模块,用于通过数据对内存块的闲置与使用情况的记录。
7.根据权利要求6所述的一种内存管理系统,其特征在于,所述内存块存储分配模块预设闲置率阈值f;所述内存块分配模块采用buddy算法对内存块存储分配;所述内存块分配模块从内存管理模块获取记录内存块大小的free_area[n]数组。
8.根据权利要求6所述的一种内存管理系统,其特征在于,所述字节内存分配模块采用slub算法对字节内存存储分配;所述字节内存分配模块从内存管理模块获取slub_free列表。
9.根据权利要求6所述的一种内存管理系统,其特征在于,所述内存管管理模块记录内存块首址并将内存块分类记录在free_area[n]数组内;所述内存管理模块对内存块标记或删除标记;所述内存管理模块记录内存块内限制内存首址pointer与闲置内存大小size并产生slub_free列表。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810382186.XA CN108647150A (zh) | 2018-04-14 | 2018-04-14 | 一种内存管理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810382186.XA CN108647150A (zh) | 2018-04-14 | 2018-04-14 | 一种内存管理方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108647150A true CN108647150A (zh) | 2018-10-12 |
Family
ID=63747460
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810382186.XA Pending CN108647150A (zh) | 2018-04-14 | 2018-04-14 | 一种内存管理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108647150A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032291A (zh) * | 2021-03-31 | 2021-06-25 | 四川长虹空调有限公司 | 优化数据内存分配的方法、及查找数据与改写数据的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012870A (zh) * | 2010-11-18 | 2011-04-13 | 清华大学 | 内存分配方法 |
US20130254512A1 (en) * | 2012-03-23 | 2013-09-26 | Kabushiki Kaisha Toshiba | Memory management method and information processing device |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN106844050A (zh) * | 2017-01-19 | 2017-06-13 | 郑州云海信息技术有限公司 | 一种内存分配方法及装置 |
-
2018
- 2018-04-14 CN CN201810382186.XA patent/CN108647150A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012870A (zh) * | 2010-11-18 | 2011-04-13 | 清华大学 | 内存分配方法 |
US20130254512A1 (en) * | 2012-03-23 | 2013-09-26 | Kabushiki Kaisha Toshiba | Memory management method and information processing device |
CN105389210A (zh) * | 2015-10-16 | 2016-03-09 | 浪潮(北京)电子信息产业有限公司 | 一种存储空间管理方法及装置 |
CN106844050A (zh) * | 2017-01-19 | 2017-06-13 | 郑州云海信息技术有限公司 | 一种内存分配方法及装置 |
Non-Patent Citations (2)
Title |
---|
刘振鹏 等: "《操作系统 第四版》", 31 August 2016 * |
郑鹏 等: "《Linux原理与应用》", 31 March 2008 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032291A (zh) * | 2021-03-31 | 2021-06-25 | 四川长虹空调有限公司 | 优化数据内存分配的方法、及查找数据与改写数据的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317742B (zh) | 一种优化空间管理的自动精简配置方法 | |
CN104915151B (zh) | 多虚拟机系统中一种主动共享的内存超量分配方法 | |
CN1963788A (zh) | 一种内存管理方法 | |
CN104731799B (zh) | 内存数据库管理装置 | |
CN104508639A (zh) | 使用一致性域表的一致性管理 | |
CN101414281A (zh) | 一种内存管理方法及系统 | |
CN109375985A (zh) | 内存动态管理方法及装置 | |
CN103164202A (zh) | 一种灰度发布方法和装置 | |
CN103095806B (zh) | 一种面向大电网的实时数据库系统的负载均衡管理系统 | |
JP5574464B2 (ja) | ストレージリソースの階層化管理方法及びシステム | |
CN103778149A (zh) | 文件系统及其对文件进行存储管理的方法 | |
CN101226553A (zh) | 一种嵌入式数据库变长字段存储的实现方法及装置 | |
CN103425538A (zh) | 进程通讯方法及系统 | |
CN101692252A (zh) | 文件空闲块的分配和回收方法 | |
CN104750432B (zh) | 一种数据存储方法及装置 | |
CN103186469A (zh) | 内存分配方法及装置、内存的回收方法 | |
CN105468541B (zh) | 一种面向透明计算智能终端的缓存管理方法 | |
CN102609464A (zh) | Mongodb分片联表查询方法及装置 | |
CN101753935A (zh) | 一种数据存储设备长时间预录的方法 | |
CN108647150A (zh) | 一种内存管理方法及系统 | |
CN106161637A (zh) | 一种云备份方法及装置 | |
CN105095115A (zh) | 存储空间管理方法和装置 | |
CN105393234B (zh) | 用于管理usb数据传送的系统和方法 | |
CN106294731B (zh) | 入库数据的管理方法及装置 | |
CN103618671A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20181012 |
|
WD01 | Invention patent application deemed withdrawn after publication |