CN108304259A - 内存管理方法及*** - Google Patents
内存管理方法及*** Download PDFInfo
- Publication number
- CN108304259A CN108304259A CN201710019318.8A CN201710019318A CN108304259A CN 108304259 A CN108304259 A CN 108304259A CN 201710019318 A CN201710019318 A CN 201710019318A CN 108304259 A CN108304259 A CN 108304259A
- Authority
- CN
- China
- Prior art keywords
- memory block
- memory
- big
- small
- block
- 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
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本发明涉及一种内存管理方法和***。所述内存管理方法包括:将所述***内存均分为多个容量相等的大内存块;创建用于管理由所述***内存划分成的所有大内存块的大内存块表;从所述大内存块表中获取一个大内存块并将所获取的大内存块划分多个小内存块及一间隔区,每一小内存块包括一控制内存与一数据内存,所述控制内存包括一管理头内存与一监控头内存;及创建用于管理所述小内存块的数据池与控制池,每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。利用本发明通过对内存进行合理的划分,不仅实现了内存的有效管理,还减少了内存的浪费。
Description
【技术领域】
本发明涉及***内存管理领域,尤其涉及一种嵌入式存储***的内存管理方法及***。
【背景技术】
内存是计算机设备中的一种重要资源,如何合理利用和高效的管理内存对于提升计算机的***性能有着重要的作用。
为提高***的性能,目前业界对于内存的管理方式主要有以下两:一种是连续内存管理方式,即内存的管理头和内存数据使用同一块连续的内存,其中,该内存的总长度等于内存的头部长度(管理头的长度)加实际长度(内存数据的长度)。另一种是分离内存管理方式,即将内存的管理头和内存的数据内存分离的方式,头部使用单独的内存区域。分离内存管理方式又包括内核管理页面内存的页表(以下简称页表分离式内存管理)及单独使用管理头(以下简称单独管理头分离式内存管理)。其中,页表分离式内存管理是根据***物理内存大小使用一个很大的页表数组来管理,每一块固定大小如4k的内存都有一个页表结构,这种方式只能使用于固定大小的内存管理;单独管理头分离式内存管理中的这些单独的管理头相当于是更小块的内存管理,对于已使用的管理头需要hash链表来管理。
然而,上述两种内存管理方式均存在一些弊端:
1、对于连续式的内存管理方式,因每个内存块都包括有一个管理头,这个管理头需要占用一定的内存,这会造成内存的浪费。且随着***使用内存块数量的增多,浪费也是线性增加。
2、对于页表分离式内存管理更多的是适用于内存大小是固定。对于大小不一的内存无法使用这种方式进行统一管理。
3、对于单独管理头分离式内存管理因管理头很小,基本上不考虑回收,因此一般需要预留一定数量的内存留给管理头用。且,管理头都是使用同一个结构,大小相同;但是,如果使用了监控头,监控头是另一个结构,一般需要再另外管理。此外,这种内存如果要访问管理头或者监控头,必须先查找hash表,随着池中内存数量的增加,性能会越来越差,查找消耗性能都是O(n)。
上述内存管理方法或存在大量浪费,或对内存的划分不合理,并由此影响了内存数据读取的性能。
【发明内容】
有鉴于此,本发明要解决的技术问题是如何对内存进行合理的划分与管理以达到有效管理内存、节省内存浪费的目的及提高***内存读取的性能。
为解决上述技术问题,本发明提供以下技术方案:
一方面,本发明提供一种内存管理方法,该内存管理方法包括:
将所述***内存均分为多个容量相等的大内存块;
创建用于管理由所述***内存划分成的所有大内存块的大内存块表;
从所述大内存块表中获取一个大内存块并将所获取的大内存块划分多个小内存块及一间隔区,每一小内存块包括一控制内存与一数据内存,所述控制内存包括一管理头内存与一监控头内存;及
创建用于管理所述小内存块的数据池与控制池,每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。
优选地,所述小内存块的类型为普通内存块及零拷贝使用的内存块;当所述小内存块为普通内存块时,所述控制池为第一容量;当所述小内存块为零拷贝使用的内存块时,所述控制池为第二容量;所述第一容量小于所述第二容量。
优选地,所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区,所述管理头区位于所述大内存块的前头,所述数据内存区位于所述大内存块的后头,所述间隔区设置在所述管理头区域所述大内存块之间。
优选地,所述管理头内存记录有小内存块的名称、大小及物理位置信息;所述监控头内存记录有小内存块的申请与释放信息。
优选地,该内存管理方法还包括:
判断所述数据池中是否有空闲的小内存块;
当所述数据池中没有空闲的小内存块时,从所述大内存块表中读取一个大内存块;
根据所述数据池中的小内存块的容量划分所获取的大内存块;
将由所述大内存块划分得到的小内存块逐个添加到所对应的数据池中以扩容所述数据池,并将所述小内存块的控制内存添加到对应的控制池中。
优选地,所述内存管理方法还包括:当由所述大内存块划分成的小内存块都添加到对应的数据池中时,在所述大内存块表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
优选地,步骤“根据所述数据池中的小内存块的容量划分所述空闲大内存块”具体为:
从所述大内存块预留一内存空间给所述间隔区;
计算每一小内存块所需占用的内存空间,其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存占用的内存空间;
根据所述小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
优选地,该内存管理方法还包括:判断所述数据池中是否有空闲的小内存块;当所述数据池中有多个空闲的小内存块时,从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
优选地,该内存管理方法还包括:判断是否属于同一大内存块的小内存块都被收回;当属于同一大内存块的小内存块都被收回时,在所述空闲大内存块链表中增加表征所述大内存块的节点。
相较于现有技术,本发明所述的内存管理方法通过对内存进行合理的划分,并根据内存的不同用途使用不同的监控等级,不仅实现了内存的有效管理,还减少了内存的浪费。此外,通过固定次数的计算能将内存地址转换到其对应的管理结构,便于内存查找的性能。
另一方面,本发明提供一种内存管理***,所述内存管理***包括:
第一划分模块,用于将所述***内存均分为多个容量相等的大内存块;
创建模块,用于创建用于管理由所述***内存划分成的所有大内存块的大内存块表;
第二划分模块,用于从所述大内存块表中获取一个大内存块并将所获取的大内存块划分多个小内存块及一间隔区,每一小内存块包括一控制内存与一数据内存,所述控制内存包括一管理头内存与一监控头内存;及
所述创建模块用于创建用于管理所述小内存块的数据池与控制池,每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。
优选地,所述小内存块的类型为普通内存块及零拷贝使用的内存块;当所述小内存块为普通内存块时,所述控制池为第一容量;当所述小内存块为零拷贝使用的内存块时,所述控制池为第二容量;所述第一容量小于所述第二容量。
优选地,所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区,所述管理头区位于所述大内存块的前头,所述数据内存区位于所述大内存块的后头,所述间隔区设置在所述管理头区域所述大内存块之间。
优选地,所述管理头内存记录有小内存块的名称、大小及物理位置信息;所述监控头内存记录有小内存块的申请与释放信息。
优选地,该内存管理***还包括:
判断模块,用于判断所述数据池中是否有空闲的小内存块;
当所述数据池中没有空闲的小内存块时,所述第二划分模块从所述大内存块表中读取一个大内存块,并根据所述数据池中的小内存块的容量划分所获取的大内存块;
添加模块,用于将由所述大内存块划分得到的小内存块逐个添加到所对应的数据池中以扩容所述数据池,并将所述小内存块的控制内存添加到对应的控制池中。
优选地,所述内存管理方法还包括:当由所述大内存块划分成的小内存块都添加到对应的数据池中时,所述添加模块在所述大内存块表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
优选地,“所述第二划分模块根据所述数据池中的小内存块的容量划分所述空闲大内存块”具体为:
从所述大内存块预留一内存空间给所述间隔区;
计算每一小内存块所需占用的内存空间,其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存占用的内存空间;
根据所述小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
优选地,该内存管理***还包括:
所述判断模块判断所述数据池中是否有空闲的小内存块;
当所述数据池中有多个空闲的小内存块时,所述回收模块用于从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
优选地,该内存管理***还包括:
所述判断模块判断是否属于同一大内存块的小内存块都被收回;
当属于同一大内存块的小内存块都被收回时,所述回收模块在所述空闲大内存块链表中增加表征所述大内存块的节点。
相较于现有技术,本发明所述的内存管理方法通过对内存进行合理的划分,并根据内存的不同用途使用不同的监控等级,不仅实现了内存的有效管理,还减少了内存的浪费。此外,通过固定次数的计算能将内存地址转换到其对应的管理结构,便于内存查找的性能。
【附图说明】
图1是本发明较佳实施例中的内存管理***的运行环境示意图。
图2是本发明第一较佳实施例中的内存管理***的功能模块图。
图3是本第一较佳实施例中的发明内存管理方法的步骤流程图。
图4是本发明第二较佳实施例中的内存管理***的功能模块图。
图5是本发明第二较佳实施例中的内存管理方法的步骤流程图。
图6是本发明较佳实施例中的大内存块、小内存块、数据池与控制池的示意图。
附图标记:
计算机设备 | 1 |
存储器 | 11 |
处理器 | 12 |
内存管理*** | 10 |
第一划分模块 | 21 |
第二划分模块 | 22 |
创建模块 | 23 |
判断模块 | 24 |
添加模块 | 25 |
回收模块 | 26 |
流程步骤 | 101-104,201-207, |
【具体实施方式】
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
参阅图1所示,是本发明内存管理***10较佳实施例的运行环境示意图。在本实施例中,所述的内存管理***10安装并运行于计算机设备1中。该计算机设备1是具有信息处理能力的设备。在本实施方式中,计算机设备1包括,但不仅限于,存储器11及处理器12。
在本实施方式中,所述存储器11是所述计算机设备1的内部存储单元,例如该计算机设备1的硬盘或内存(以下简称***内存)。在其他实施方式中,所述存储器11也可以是所述计算机设备1的外部存储设备,例如该计算机设备1上配备的插接式硬盘,SMC卡(SmartMedia Card:智能存储卡),SD卡(Secure Digital:安全数字卡),FC卡(Flash Card:闪存卡)等。进一步地,所述存储器11还可以既包括所述计算机设备1的内部存储单元也包括外部存储设备。该存储器11用于存储安装于所述计算机设备1的应用软件及各类数据,例如存储该计算机设备1运行时的***数据等。
所述处理器12可以是中央处理器(Central Processing Unit,CPU),微处理器或其他数据处理芯片,该处理器12用于运行安装于所述存储器11的程序代码或处理数据,例如执行所述内存管理***10等。
请参见图2,其示出了本发明内存管理***10第一实施例的功能模块图。在本实施例中,所述的内存管理***10可以被分割成一个或多个模块,所述一个或者多个模块被存储于所述存储器11中,并由一个或多个处理器(本实施例为所述处理器12)所执行,以完成本发明。例如,在图2中,所述的内存管理***10可以被第一划分模块21、第二划分模块22、以及创建模块23。
本发明所称的功能模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述内存管理***10在所述计算机设备1中的执行过程。以下将就各功能模块21-23的功能作详细描述。
所述第一划分模块21将存储器22所定义的***内存均分为多个容量相等的大内存块。
在本实施方式中,存储器22所定义的***内存存储器22的内存扣除计算机设备1上电时各业务如操作***所必需和预留的内存后余下的内存。
具体的,第一划分模块21将所述***内存按照预设的固定大小如1M或512进行均分,即,每个大内存块的容量为1M或512K,其中,每个大内存块的容量可根据需要进行设置。进一步的,大内存块的首地址也是按照大内存块的容量大小进行对齐。
当所述***内存被第一划分模块21均分为多个大内存块时,所述创建模块23创建一个大内存块表。所述大内存块表用于管理由所述***内存划分成的所有的大内存块。所述大内存块中记载有每一大内存块的名称及物理地址。在本实施方式,所述大内存块表为链表。需要说明的是,所述大内存块表中最初所管理的都是处于空闲状态的大内存块。
当需要使用内存存储数据时,所述第二划分模块22从所述大内存块表中获取一个大内存块并将该大内存块划分多个小内存块及一间隔区。其中,每一小内存块包括一控制内存与一数据内存。所述控制内存包括一管理头内存与一监控头内存。所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区。所述间隔区为间隔地设在所述管理区与所述数据区之间的预设容量的内存区。即,所述控制区位于大内存块的头部,所述数据区位于大内存块的尾部。该间隔区的容量为512或4K。
所述管理头内存记录有小内存块的名称、大小及物理位置信息等。所述监控头内存记录有小内存块的申请与释放信息。所述监控头所记录的信息包括,但是不限于,小内存块的名字、创建时间、操作时间等。此外,当所述小内存块为零拷贝内存时,所述监控头所记录的信息包括小内存块的get/put操作记录信息。
所述管理头的大小为8字节,监控头的大小为56或120或248字节。监控头的大小可根据监控等级因素或小内存块的类型或根据实际需要决定,例如,普通数据池可以不使用监控头或者使用56字节的监控头,零拷贝使用的数据池可以使用120或者248大小的监控头。
当所述第二划分模块22将该大内存块划分多个小内存块后,所述创建模块23创建用于管理所述小内存块的数据池与控制池。每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。在本实施方式中,所述创建模块23在创建一数据池的同时还创建于所述数据池容量相同的控制池。创建模块23在创建数据池时会记录该数据池所管理的小内存块的数据内存的大小及控制内存的大小。所述控制内存的大小包括小内存块的管理头的大小与控制头的大小。
通过上述模块21-23,本发明所述的内存管理***10通过将大内存块划分为容量大小相同的若干个小内存块。如此,小内存块之间不需要预留管理头内存,可节省空间。此外,本发明所述的内存管理***10还通过采用数据池与控制池分别管理小内存块的数据内存及控制内存。如此,实现了数据内控与控制内存在物理上的分离,提高了***内存的安全。
参阅图3所示,是本发明内存管理方法第一实施例的实施流程示意图。在本实施例中,根据不同的需求,图3所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
步骤101,所述第一划分模块21将存储器22所定义的***内存均分为多个容量相等的大内存块。
在本实施方式中,存储器22所定义的***内存存储器22的内存扣除计算机设备1上电时各业务如操作***所必需和预留的内存后余下的内存。
具体的,第一划分模块21将所述***内存按照预设的固定大小如1M或512进行均分,即,每个大内存块的容量为1M或512K,其中,每个大内存块的容量可根据需要进行设置。进一步的,大内存块的首地址也是按照大内存块的容量大小进行对齐。
步骤102,当所述***内存被第一划分模块21均分为多个大内存块时,所述创建模块23创建一个大内存块表。
所述大内存块表用于管理由所述***内存划分成的所有的大内存块。所述大内存块中记载有每一大内存块的名称及物理地址。在本实施方式,所述大内存块表为链表。需要说明的是,所述大内存块表中最初所管理的都是处于空闲状态的大内存块。
步骤103,当需要使用内存存储数据时,所述第二划分模块22从所述大内存块表中获取一个大内存块并将该大内存块划分多个小内存块及一间隔区。其中,每一小内存块包括一控制内存与一数据内存。所述控制内存包括一管理头内存与一监控头内存。所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区。所述间隔区为间隔地设在所述管理区与所述数据区之间的预设容量的内存区。即,所述控制区位于大内存块的头部,所述数据区位于大内存块的尾部。该间隔区的容量为512或4K。
所述管理头记录有内存块的名称、大小及物理位置信息等。所述监控头记录有所述小内存块的申请与释放信息。所述监控头所记录的信息包括,但是不限于,小内存块的名字、创建时间、操作时间等。此外,当所述小内存块为零拷贝内存时,所述监控头所记录的信息包括小内存块的get/put操作记录信息。
所述管理头的大小为8字节,监控头的大小为56或120或248字节。监控头的大小可根据监控等级因素或小内存块的类型或根据实际需要决定,例如,普通数据池可以不使用监控头或者使用56字节的监控头,零拷贝使用的数据池可以使用120或者248大小的监控头。
步骤104,当所述第二划分模块22将该大内存块划分多个小内存块后,所述创建模块23创建用于管理所述小内存块的数据池与控制池。每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。在本实施方式中,所述创建模块23在创建一数据池的同时还创建于所述数据池容量相同的控制池。创建模块23在创建数据池时会记录该数据池所管理的小内存块的数据内存的大小及控制内存的大小。所述控制内存的大小包括小内存块的管理头的大小与控制头的大小。
通过上述步骤101-104,本发明所述的内存管理方法通过将大内存块划分为容量大小相同的若干个小内存块。如此,小内存块之间不需要预留管理头内存,可节省空间。此外,本发明所述的内存管理方法还通过采用数据池与控制池分别管理小内存块的数据内存及控制内存。如此,实现了数据内控与控制内存在物理上的分离,提高了***内存的安全。
请参见图4,其示出了本发明内存管理***10第二实施例的功能模块图。在本实施例中,所述的内存管理***10可以被分割成一个或多个模块,所述一个或者多个模块被存储于所述存储器11中,并由一个或多个处理器(本实施例为所述处理器12)所执行,以完成本发明。例如,在图4中,所述的内存管理***10可以被第一划分模块21、第二划分模块22、创建模块23、判断模块24、添加模块25、及回收模块26。在该实施方式中,功能模块21-23的功能与第一实施方式中相同,在此不做赘述。以下将就各功能模块24-26的功能作详细描述。
判断模块24判断所述数据池中是否有空闲的小内存块的数据内存。
当所述数据池中没有空闲的小内存块的数据内存时,所述第二划分模块22从所述大内存块表中读取一个大内存块并根据所述数据池中的小内存块的容量划分所读取到的大内存块。
在本实施方式中,所述第二划分模块22先从所述大内存块预留出一内存空间给所述间隔区,之后再计算每一小内存块所需占用的内存空间。其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存所需占用的内存空间。所述第二划分模块22根据所计算出的小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
所述添加模块25将所述第二划分模块22划分得到的小内存块的数据内存逐个添加到所对应的数据池中以扩容所述数据池。需要说明的时,所述扩容所述数据池是增加数据池中数据内存的数量以使得该数据池中还可继续写入或存储数据。
所述添加模块25将所述第二划分模块22划分得到的小内存块的控制内存添加到对应的控制池中。
当一个大内存块被划分成小内存块并添加到对应的数据池中时,所述添加模块25在所述大内存块链表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
当所述数据池中没有空闲的小内存块的数据内存时,所述第二划分模块22从所述大内存块表中读取一个大内存块并根据所述数据池中的小内存块的容量划分所读取到的大内存块。
当所述数据池中有多个空闲的小内存块的数据内存时,所述回收模块26从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
判断模块24还判断是否属于同一大内存块的所有小内存块都被所述回收模块26收回。
当属于同一大内存块的小内存块都被收回时,所述回收模块26在所述大内存块表中增加表征所述大内存块的节点。之后,这个大内存块才可被根据需要在此被划分并添加到其他的数据池与控制池中。
通过上述模块24-16,本发明所述的内存管理***10通过将判断数据池中是否有空闲的小内存块。若是,则把这些空闲的小内存块收回道大内存块中;若没有,则继续把大内存块划分为小内存块以扩增数据池的容量。如此,实现了根据需要对***内存进行动态分配,提高了***内存的使用效率。
参阅图5所示,是本发明内存管理方法较佳实施例的实施流程示意图。在本实施例中,根据不同的需求,图3所示的流程图中的步骤的执行顺序可以改变,某些步骤可以省略。
步骤201,判断模块24判断所述数据池中是否有空闲的小内存块的数据内存。若否,则执行步骤202;若是,则执行步骤204。
步骤202,所述第二划分模块22从所述大内存块表中读取一个大内存块并根据所述数据池中的小内存块的容量划分所读取到的大内存块。
具体的,所述第二划分模块22先从所述大内存块预留出一内存空间给所述间隔区,之后再计算每一小内存块所需占用的内存空间。其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存所需占用的内存空间。所述第二划分模块22根据所计算出的小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
步骤203,所述添加模块25将所述第二划分模块22划分得到的小内存块的数据内存逐个添加到所对应的数据池中以扩容所述数据池。需要说明的时,所述扩容所述数据池是增加数据池中数据内存的数量以使得该数据池中还可继续写入或存储数据。
所述添加模块25将所述第二划分模块22划分得到的小内存块的控制内存添加到对应的控制池中。
当一个大内存块被划分成小内存块并添加到对应的数据池中时,所述添加模块25在所述大内存块表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
步骤204,所述第二划分模块22从所述大内存块表中读取一个大内存块并根据所述数据池中的小内存块的容量划分所读取到的大内存块。
步骤205,所述回收模块26从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
步骤206,所述判断模块24还判断是否属于同一大内存块的所有小内存块都被所述回收模块26收回。若是,则执行步骤207;若否,则返回步骤206。
步骤207,所述回收模块26在所述大内存块表中增加表征所述大内存块的节点。之后,这个大内存块才可根据需要在此被划分并添加到其他的数据池与控制池中。
通过上述步骤201-207,本发明所述的内存管理方法通过将判断数据池中是否有空闲的小内存块。若是,则把这些空闲的小内存块收回道大内存块中;若没有,则继续把大内存块划分为小内存块以扩增数据池的容量。如此,实现了根据需要对***内存进行动态分配,提高了***内存的使用效率。
请参见图6,其示出了本发明优选实施例中的大内存块chunk、小内存块buffer及数据池ctrl_pool与控制池data_pool的示意图。
根据前面所揭示的内容,本发明中的数据池data_pool与控制池ctrk_pool的大小均是2n字节,且每一数据池data_pool与一控制池ctrl_pool相对应。在本发明的一实施方式中,每一数据池data_pool对应一与该数据池data_pool相同容量的控制池ctrl_pool。数据池data_pool采用数组data_pool[n-1]进行管理,即,data_pool[0]表示第1个数据池的管理结构,data_pool[n-1]表示第n个数据池的管理结构。且数据池的管理结构data_pool[n]记录有该数据池所管理的小内存块的大小buffer_size、管理头的大小ctrl_size、以及监控头的大小monitor_size。在本实施方式中,管理头ctrl_size均占8个字节,整个管理头的大小ctrl_size与监控头的大小monitor_size为2n字节。
当所述第一划分模块21将存储器22所定义的***内存均分为n个容量相等的大内存块时,这所有的大内存块可采表chunk_tbls[n]对这些大内存块进行管理,即chunk0_addr表示第一个chunk的地址。
当知道某一个内存地址buffer_addr时,可通过这个内存地址buffer_addr获取或得知以下信息:
1)计算buffer_addr属于哪一个大内存块chunk:
chunk_index=(buffer_addr-chunk_addr[0])>>20
chunk_tbls[chunk_index]为该内存地址buffer_addr所属的chunk。
2)计算buffer_addr属于哪一个内存池pool:
pool_addr=chunk_tbls[chunk_index].pool_addr
3)计算buffer_addr是该大内存块chunk划分出的第几个buffer:
buffer_index=(buffer_addr-chunk_tbls[chunk_index].first_buffer_addr)>>pool_addr->buffer_size_shift(buffer_size==1<<buffer_size_shift)
4)计算buffer_addr对应的管理头ctrl_addr和监控头monitor_addr
ctrl_addr=chunk_addr+(buffer_index<<pool_addr->head_size_shift)
monitor_addr=ctrl_addr+ctrl_size,其中,ctrl_size表示内存管理头大小。在本实施方式中,ctrl_size占8字节。
由上述内容可知道,内个内存块只需要通过固定次数的加、减、位计算便能找到对应的管理结构,提高了内存访问的速度与性能。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (18)
1.一种内存管理方法,其特征在于,该内存管理方法包括:
将所述***内存均分为多个容量相等的大内存块;
创建用于管理由所述***内存划分成的所有大内存块的大内存块表;
从所述大内存块表中获取一个大内存块并将所获取的大内存块划分多个小内存块及一间隔区,每一小内存块包括一控制内存与一数据内存,所述控制内存包括一管理头内存与一监控头内存;及
创建用于管理所述小内存块的数据池与控制池,每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。
2.如权利要求1所述的内存管理方法,其特征在于,所述小内存块的类型为普通内存块及零拷贝使用的内存块;当所述小内存块为普通内存块时,所述控制池为第一容量;当所述小内存块为零拷贝使用的内存块时,所述控制池为第二容量;所述第一容量小于所述第二容量。
3.如权利要求1所述的内存管理方法,其特征在于,所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区,所述管理头区位于所述大内存块的前头,所述数据内存区位于所述大内存块的后头,所述间隔区设置在所述管理头区域所述大内存块之间。
4.如权利要求1所述的内存管理方法,其特征在于,所述管理头内存记录有小内存块的名称、大小及物理位置信息;所述监控头内存记录有小内存块的申请与释放信息。
5.如权利要求4所述的内存管理方法,其特征在于,该内存管理方法还包括:
判断所述数据池中是否有空闲的小内存块;
当所述数据池中没有空闲的小内存块时,从所述大内存块表中读取一个大内存块;
根据所述数据池中的小内存块的容量划分所获取的大内存块;
将由所述大内存块划分得到的小内存块逐个添加到所对应的数据池中以扩容所述数据池,并将所述小内存块的控制内存添加到对应的控制池中。
6.如权利要求5所述的内存管理方法,其特征在于,所述内存管理方法还包括:当由所述大内存块划分成的小内存块都添加到对应的数据池中时,在所述大内存块表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
7.如权利要求5所述的内存管理方法,其特征在于,步骤“根据所述数据池中的小内存块的容量划分所述空闲大内存块”具体为:
从所述大内存块预留一内存空间给所述间隔区;
计算每一小内存块所需占用的内存空间,其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存占用的内存空间;
根据所述小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
8.如权利要求4所述的内存管理方法,其特征在于,该内存管理方法还包括:
判断所述数据池中是否有空闲的小内存块;
当所述数据池中有多个空闲的小内存块时,从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
9.如权利要求8所述的内存管理方法,其特征在于,该内存管理方法还包括:
判断是否属于同一大内存块的小内存块都被收回;
当属于同一大内存块的小内存块都被收回时,在所述空闲大内存块链表中增加表征所述大内存块的节点。
10.一种内存管理***,用于管理***内存,其特征在于,该内存管理***包括:
第一划分模块,用于将所述***内存均分为多个容量相等的大内存块;
创建模块,用于创建用于管理由所述***内存划分成的所有大内存块的大内存块表;
第二划分模块,用于从所述大内存块表中获取一个大内存块并将所获取的大内存块划分多个小内存块及一间隔区,每一小内存块包括一控制内存与一数据内存,所述控制内存包括一管理头内存与一监控头内存;及
所述创建模块用于创建用于管理所述小内存块的数据池与控制池,每一数据池用于管理同一容量的小内存块的数据内存,每一控制池用于管理同一容量的控制内存。
11.如权利要求10所述的内存管理***,其特征在于,所述小内存块的类型为普通内存块及零拷贝使用的内存块;当所述小内存块为普通内存块时,所述控制池为第一容量;当所述小内存块为零拷贝使用的内存块时,所述控制池为第二容量;所述第一容量小于所述第二容量。
12.如权利要求10所述的内存管理***,其特征在于,所有小内存块的管理头内存与监控头内存形成所述大内存块的控制区,所有小内存块的数据内存形成所述大内存块的数据区,所述管理头区位于所述大内存块的前头,所述数据内存区位于所述大内存块的后头,所述间隔区设置在所述管理头区域所述大内存块之间。
13.如权利要求10所述的内存管理***,其特征在于,所述管理头内存记录有小内存块的名称、大小及物理位置信息;所述监控头内存记录有小内存块的申请与释放信息。
14.如权利要求13所述的内存管理***,其特征在于,该内存管理***还包括:
判断模块,用于判断所述数据池中是否有空闲的小内存块;
当所述数据池中没有空闲的小内存块时,所述第二划分模块从所述大内存块表中读取一个大内存块,并根据所述数据池中的小内存块的容量划分所获取的大内存块;
添加模块,用于将由所述大内存块划分得到的小内存块逐个添加到所对应的数据池中以扩容所述数据池,并将所述小内存块的控制内存添加到对应的控制池中。
15.如权利要求14所述的内存管理***,其特征在于,所述内存管理方法还包括:当由所述大内存块划分成的小内存块都添加到对应的数据池中时,所述添加模块在所述大内存块表中增加表征所述大内存块的节点记录数据池的名称及该数据池中的第一个数据地址。
16.如权利要求14所述的内存管理***,其特征在于,“所述第二划分模块根据所述数据池中的小内存块的容量划分所述空闲大内存块”具体为:
从所述大内存块预留一内存空间给所述间隔区;
计算每一小内存块所需占用的内存空间,其中,每一小内存块所需占用的内存空间包括所述小内存块的数据内存及控制内存占用的内存空间;
根据所述小内存块所需占用的内存空间将所述大内存块划分为若干个小内存块。
17.如权利要求13所述的内存管理***,其特征在于,该内存管理***还包括:
所述判断模块判断所述数据池中是否有空闲的小内存块;
当所述数据池中有多个空闲的小内存块时,所述回收模块用于从所述数据池中收回所述空闲的小内存块的数据内存,并从所述控制池中收回与所述小内存块的控制内存。
18.如权利要求17所述的内存管理***,其特征在于,该内存管理***还包括:
所述判断模块判断是否属于同一大内存块的小内存块都被收回;
当属于同一大内存块的小内存块都被收回时,所述回收模块在所述空闲大内存块链表中增加表征所述大内存块的节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710019318.8A CN108304259B (zh) | 2017-01-11 | 2017-01-11 | 内存管理方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710019318.8A CN108304259B (zh) | 2017-01-11 | 2017-01-11 | 内存管理方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108304259A true CN108304259A (zh) | 2018-07-20 |
CN108304259B CN108304259B (zh) | 2023-04-14 |
Family
ID=62871686
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710019318.8A Active CN108304259B (zh) | 2017-01-11 | 2017-01-11 | 内存管理方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304259B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109388497A (zh) * | 2018-11-05 | 2019-02-26 | 郑州云海信息技术有限公司 | 一种内存池的管理方法、装置、设备及可读存储介质 |
CN110955496A (zh) * | 2019-11-26 | 2020-04-03 | 浙江大华技术股份有限公司 | 内存处理方法及装置、存储介质、电子装置 |
CN113806244A (zh) * | 2021-11-18 | 2021-12-17 | 深圳比特微电子科技有限公司 | 用于片上***的内存管理方法和基于片上***的设备 |
CN113986145A (zh) * | 2021-12-23 | 2022-01-28 | 南京集成电路设计服务产业创新中心有限公司 | 一种适用于大规模集成电路后端设计的内存管理方法 |
WO2024078429A1 (zh) * | 2022-10-12 | 2024-04-18 | 杭州阿里云飞天信息技术有限公司 | 内存管理方法、装置、计算机设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1527206A (zh) * | 2003-03-03 | 2004-09-08 | 华为技术有限公司 | 一种内存池管理的方法 |
CN101702713A (zh) * | 2009-11-16 | 2010-05-05 | 中兴通讯股份有限公司 | 一种提高udp发送效率的方法及装置 |
CN103617125A (zh) * | 2013-11-27 | 2014-03-05 | 曙光信息产业(北京)有限公司 | 内存空间的管理方法和装置 |
CN103838859A (zh) * | 2014-03-19 | 2014-06-04 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
CN106155917A (zh) * | 2015-04-28 | 2016-11-23 | 北京信威通信技术股份有限公司 | 内存管理方法及装置 |
US20160350233A1 (en) * | 2015-05-27 | 2016-12-01 | Red Hat Israel, Ltd. | Zero copy memory reclaim for applications using memory offlining |
-
2017
- 2017-01-11 CN CN201710019318.8A patent/CN108304259B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1527206A (zh) * | 2003-03-03 | 2004-09-08 | 华为技术有限公司 | 一种内存池管理的方法 |
CN101702713A (zh) * | 2009-11-16 | 2010-05-05 | 中兴通讯股份有限公司 | 一种提高udp发送效率的方法及装置 |
CN103617125A (zh) * | 2013-11-27 | 2014-03-05 | 曙光信息产业(北京)有限公司 | 内存空间的管理方法和装置 |
CN103838859A (zh) * | 2014-03-19 | 2014-06-04 | 厦门雅迅网络股份有限公司 | 一种减少linux下多进程间数据拷贝的方法 |
CN106155917A (zh) * | 2015-04-28 | 2016-11-23 | 北京信威通信技术股份有限公司 | 内存管理方法及装置 |
US20160350233A1 (en) * | 2015-05-27 | 2016-12-01 | Red Hat Israel, Ltd. | Zero copy memory reclaim for applications using memory offlining |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109388497A (zh) * | 2018-11-05 | 2019-02-26 | 郑州云海信息技术有限公司 | 一种内存池的管理方法、装置、设备及可读存储介质 |
CN109388497B (zh) * | 2018-11-05 | 2021-08-31 | 郑州云海信息技术有限公司 | 一种内存池的管理方法、装置、设备及可读存储介质 |
CN110955496A (zh) * | 2019-11-26 | 2020-04-03 | 浙江大华技术股份有限公司 | 内存处理方法及装置、存储介质、电子装置 |
CN113806244A (zh) * | 2021-11-18 | 2021-12-17 | 深圳比特微电子科技有限公司 | 用于片上***的内存管理方法和基于片上***的设备 |
CN113806244B (zh) * | 2021-11-18 | 2022-02-08 | 深圳比特微电子科技有限公司 | 用于片上***的内存管理方法和基于片上***的设备 |
CN113986145A (zh) * | 2021-12-23 | 2022-01-28 | 南京集成电路设计服务产业创新中心有限公司 | 一种适用于大规模集成电路后端设计的内存管理方法 |
WO2024078429A1 (zh) * | 2022-10-12 | 2024-04-18 | 杭州阿里云飞天信息技术有限公司 | 内存管理方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108304259B (zh) | 2023-04-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304259A (zh) | 内存管理方法及*** | |
CN104636285B (zh) | 一种闪存存储***及其读写、删除方法 | |
CN110149803A (zh) | 数据存储方法、***及终端设备 | |
CN107066393A (zh) | 提高地址映射表中映射信息密度的方法 | |
CN107544756B (zh) | 基于SCM的Key-Value日志型本地存储方法 | |
CN100541453C (zh) | 大容量缓存实现方法及存储*** | |
CN107256196A (zh) | 基于闪存阵列的支持零拷贝的缓存***及方法 | |
CN104115133A (zh) | 复合非易失性存储设备的数据迁移 | |
CN109766312A (zh) | 一种区块链存储方法、***、装置及计算机可读存储介质 | |
CN104156317A (zh) | 一种非易失性闪存的擦写管理方法及*** | |
CN105787037B (zh) | 一种重复数据的删除方法及装置 | |
US20130198453A1 (en) | Hybrid storage device inclucing non-volatile memory cache having ring structure | |
CN101373445B (zh) | 一种内存调度方法及装置 | |
CN103425435B (zh) | 磁盘存储方法及磁盘存储*** | |
CN106469120A (zh) | 碎片整理方法、装置及设备 | |
CN108733306A (zh) | 一种文件合并方法及装置 | |
CN103019884A (zh) | 基于虚拟机快照的内存页去重方法及装置 | |
CN106407224A (zh) | 一种键值存储***中文件压实的方法和装置 | |
CN102314397A (zh) | 缓存数据块的处理方法 | |
CN105138282A (zh) | 一种存储空间回收的方法及存储*** | |
CN102915340A (zh) | 一种扩展的基于b+树对象文件*** | |
CN107122130A (zh) | 一种数据重删方法及装置 | |
CN102354301B (zh) | 缓存分区方法 | |
CN106201918B (zh) | 一种基于大数据量和大规模缓存快速释放的方法和*** | |
KR100907477B1 (ko) | 플래시 메모리에 저장된 데이터의 인덱스 정보 관리 장치및 방법 |
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 |