CN116701239A - 基于伙伴算法的碎片回收管理方法、装置和计算机设备 - Google Patents
基于伙伴算法的碎片回收管理方法、装置和计算机设备 Download PDFInfo
- Publication number
- CN116701239A CN116701239A CN202310483777.7A CN202310483777A CN116701239A CN 116701239 A CN116701239 A CN 116701239A CN 202310483777 A CN202310483777 A CN 202310483777A CN 116701239 A CN116701239 A CN 116701239A
- Authority
- CN
- China
- Prior art keywords
- block
- memory
- size
- fragment
- partner
- 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
- 239000012634 fragment Substances 0.000 title claims abstract description 183
- 238000004064 recycling Methods 0.000 title claims abstract description 36
- 238000007726 management method Methods 0.000 title claims abstract description 18
- 238000006243 chemical reaction Methods 0.000 claims abstract description 46
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000005520 cutting process Methods 0.000 claims abstract description 26
- 238000004590 computer program Methods 0.000 claims description 14
- 238000011084 recovery Methods 0.000 claims description 14
- 238000004458 analytical method Methods 0.000 claims description 5
- 230000009466 transformation Effects 0.000 claims 1
- 230000001788 irregular Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 238000013467 fragmentation Methods 0.000 description 5
- 238000006062 fragmentation reaction Methods 0.000 description 5
- 239000002699 waste material Substances 0.000 description 4
- 230000001360 synchronised effect Effects 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001960 triggered effect 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
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
-
- 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
-
- 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)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Memory System (AREA)
Abstract
本申请涉及一种基于伙伴算法的碎片回收管理方法、装置和计算机设备。所述方法包括:获取用户申请内存空间时产生的内存碎片大小,根据转换规则对内存碎片大小进行转换,得到至少一个符合查址要求的子内存碎片;从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,将每一子内存碎片回收至对应的空闲块列表;解析用户发送的内存释放请求,得到释放内存块;若释放内存块的大小不符合伙伴算法的查址要求,则根据转换规则分别对释放内存块执行合并和切割操作,生成至少一个符合査址要求的子内存块,将每一子内存块回收至对应的空闲块列表。采用本方法能够在保障伙伴算法高效执行的前提下,减少内存分配中产生的超大型内存碎片。
Description
技术领域
本申请涉及计算机处理技术领域,特别是涉及一种基于伙伴算法的碎片回收管理方法、装置和计算机设备。
背景技术
内存碎片描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存小且以不连续方式出现在不同的位置。伙伴(Buddy)算法最大的优势在于分配及回收内存的效率特别高,其缺点也十分明显,分配内存容易产生超大的内存碎片。这一情况常见于服务器/桌面/移动端操作系统中,但是由于其碎片问题严重,通常只用于系统内核内部使用,然后通过SLAB算法中转,间接向用户应用提供内存分配回收服务,而这种模式,需要大量的中转缓存,对一些内存资源紧张的嵌入式设备十分不友好。嵌入式操作系统目前主流的内存分配算法多采用Best Fit(最佳适应)算法,这种算法碎片较少,但执行效率比伙伴算法低了很多。
然而,由于使用伙伴算法分配内存时极易产生超大的内存碎片,如果直接应用到嵌入式设备中,由于其资源有限,容易产生内存不足的现象,很难满足应用程序的运行需求,同时嵌入式场景中受资源限制影响,也不适合使用类似于SLAB模式的缓存中转机制。如果伙伴算法能解决内存碎片的问题,就可以充分发挥其高效优势,实现对主流Best Fit(最佳适应)算法的替换升级。
发明内容
基于此,有必要针对上述技术问题,提供一种基于伙伴算法的碎片回收管理方法、装置和计算机设备。
一种基于伙伴算法的碎片回收管理方法,所述方法包括:
解析用户发送的内存申请请求,得到期望占用空间;
计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
在其中一个实施例中,还包括:根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;所述转换规则为:
a=(1<<n1)+(1<<n2)+…+(1<<ni)
其中,a为内存碎片大小,k>n1>n2>……>ni,k为待分配空闲块大小,(1<<ni)表示对1的二进制左移ni位。
在其中一个实施例中,还包括:从大到小遍历每一所述子内存碎片,若当前子内存碎片的大小大于预先设置的允许最大碎片阈值,则将当前子内存碎片回收至对应的空闲块列表。
在其中一个实施例中,还包括:若当前释放内存块不符合伙伴算法的查址要求,则根据所述转换规则获取所述释放内存块的二进制最低位对应的块大小,根据所述二进制最低位对应的块大小和所述释放内存块的块索引,得到所述释放内存块对应的伙伴块;检测所述伙伴块的使用状态,若所述伙伴块为空闲状态,则将所述伙伴块与所述释放内存块进行合并,得到新的释放内存块;迭代更新所述释放内存块,直到查找不到所述释放内存块的伙伴块或者所述伙伴块为占用状态时,停止迭代,得到可回收内存块。
在其中一个实施例中,还包括:若所述释放内存块的大小符合伙伴算法的查址要求,则采用伙伴算法对所述释放内存块进行回收。
在其中一个实施例中,还包括:若所述可回收内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则对所述可回收内存块的大小进行转换,得到至少一个符合所述查址要求的子内存块;从所述可回收内存块的首部按照子内存块的块索引从小到大的顺序切割所述可回收内存块,根据所述子内存块的块索引将每一所述子内存块回收至空闲块列表。
在其中一个实施例中,还包括:所述伙伴算法的查址要求包括内存块的大小要符合伙伴算法的伙伴块索引查找公式的输入要求;所述伙伴块索引查找公式为:
buddy_index=blk_index^blk_size
其中,buddy_index为伙伴块索引,blk_index为空闲块索引,blk_size为空闲块大小,^为按位异或运算。
一种基于伙伴算法的碎片回收管理装置,所述装置包括:
请求解析模块,用于解析用户发送的内存申请请求,得到期望占用空间;
初步分配模块,用于计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
碎片转换模块,用于根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
碎片回收模块,用于从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
请求解析模块,还用于解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
释放内存回收模块,用于若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
解析用户发送的内存申请请求,得到期望占用空间;
计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
解析用户发送的内存申请请求,得到期望占用空间;
计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
上述基于伙伴算法的碎片回收管理方法、装置和计算机设备,通过对用户申请内存时产生的内存碎片按照预先设置的转换规则进行转换,得到符合查址要求的子内存碎片,能够进一步对不规则大小的内存碎片进行回收,从而提高系统的内部碎片利用率,从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,根据子内存碎片的块索引将每一子内存碎片回收至对应的空闲块列表,能够根据空闲块的块索引和大小的对应关系将不规则大小的内存碎片进行回收,将碎片回收后的待分配空闲块分配至用户;另一方面,通过对内存释放时产生的不符合查址要求的释放内存块进行合并和分割,实现对内存释放过程中产生的碎片进行回收处理。本发明实施例,能够在保持伙伴算法的高效执行效的前提下,对用户申请内存和释放内存时产生的不规则大小的内存碎片进行回收处理,提高超大内存碎片的利用率,改善嵌入式操作系统内存分配回收接口的执行效率。
附图说明
图1为一个实施例中基于伙伴算法的碎片回收管理方法的流程示意图;
图2为一个实施例中常见存储结构示意图;
图3为一个具体实施例中内存分配步骤的空闲内存块回收示意图;
图4为一个具体实施例中内存释放步骤的空闲内存块合并示意图;
图5为一个实施例中基于伙伴算法的碎片回收管理装置的结构框图;
图6为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种基于伙伴算法的碎片回收管理方法,包括以下步骤:
步骤102,解析用户发送的内存申请请求,得到期望占用空间。
用户申请内存使用空间时通过申请接口发送内存申请请求,内存申请请求包括期望占用空间,期望占用空间是用户申请使用的内存空间大小。
步骤104,计算满足期望占用空间的最小空闲块,采用伙伴算法根据最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块。
伙伴算法是一种在计算机内存管理中使用的算法,用于分配和释放内存。伙伴算法是一种基于二叉树的动态内存分配算法,可以高效地分配和合并内存块,主要用于解决内存碎片的问题,特别是外部碎片。其主要思想是将可用内存划分为大小相等的块,并按照2的n次幂的大小进行分配,通过不断地平分较大的空闲内存块来获得较小的空闲内存块,从而高效地进行内存分配和合并,以避免内存碎片的产生,是一种按照固定大小分配内存的算法。因此,按照Buddy算法自身特性,所有空闲块大小均为(1<<ni)的形式,待分配空闲块的大小也为(1<<ni)的形式。内存块最小单元为(1<<m)大小,空闲内存块列表最大索引为n时,伙伴算法的Malloc(内存分配)流程如下:
S1、根据传入的请求大小,向上2进制取整,计算满足需求的最小的空闲块大小。假设大小为(1<<k)。
S2、从空闲块列表(k-m)到空闲块列表n逐个查找,如果存在可用空闲块,则取出一个空闲块进入下一步,如果没有可用空闲块,则返回空。
S3、如果得到的空闲块比预期的大小大,则进行折半拆分,直到得到预期大小的空闲块,将目标大小的空闲块返回给用户使用,其他拆分出来的块放入对应大小的空闲块列表。
如:预期大小为8,得到的空闲块为64,则拆分为32+16+8+8,保留一个大小8的空闲块返回给用户使用,其他拆分出来的块分别放入32、16、8的空闲块列表.
S4、返回得到的空闲块。
伙伴算法的Free(内存释放)流程如下:
S1、利用buddy块索引查找公式,根据块的索引和大小获取对应的buddy块索引。
S2、如果buddy块索引为空闲块,则取出buddy块与当前块进行合并。
合并后的块大小变为原来大小的二倍,其索引变为较小块的索引。
S3、重复Free流程的S1和S2,直到找不到buddy块或者buddy块为非空闲状态。
S4、将最终的块放入对应的空闲内存块列表。
步骤106,根据待分配空闲块大小和期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对内存碎片大小进行转换,得到至少一个符合查址要求的子内存碎片。
伙伴算法在找查找buddy块(伙伴块)时,利用伙伴块索引查找公式,根据块的索引和大小获取对应的buddy块索引,伙伴块索引查找公式为:
buddy_index=blk_index^blk_size
其中,buddy_index为伙伴块索引,blk_index为空闲块索引,blk_size为空闲块大小,^为按位异或运算。由于伙伴算法中空闲块为(1<<ni)的形式,因此,当内存碎片大小不符合伙伴算法的查址要求时,伙伴算法不能处理该内存碎片,内存碎片大小不符合伙伴算法的查址要求指的是内存碎片大小不符合(1<<ni)的形式。
步骤108,从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,根据子内存碎片的块索引将每一子内存碎片回收至对应的空闲块列表,并将碎片回收后的待分配空闲块分配至用户。
如图1所示的常见存储结构示意图,内存块最小单元为(1<<m)大小,每个空闲块的索引如图1所示,按照Buddy算法自身特性,Buddy算法的所有空闲块大小均为(1<<n)的形式,并且空闲块索引也应与(1<<n)大小对齐。因此按照空闲内存块大小从小到大、空闲内存块索引从小到大的顺序切割,就能保障切割出来的可回收碎片均可以与buddy块对应,从而实现对不规则大小的内存碎片进行回收。
步骤110,解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块。
用户在利用内存空间执行完当前进程后,通过释放接口发送内存释放请求,内存释放请求包括用户释放的释放内存空间的信息。
步骤112,若释放内存块的大小不符合伙伴算法的查址要求,则根据转换规则分别对释放内存块执行合并和切割操作,生成至少一个符合査址要求的子内存块,根据子内存块的块索引将每一子内存块回收至对应的空闲块列表。
在对不符合伙伴算法查址要求的释放内存块进行回收处理时,在存在可合并的伙伴块的情况下,触发合并操作,可合并的伙伴块指的是查找到的伙伴块为空闲状态,不断合并,直到没有可合并的伙伴块时,根据转换规则对合并后的结果进行切割,能够减少外部碎片的浪费。
上述基于伙伴算法的碎片回收管理方法中,通过对用户申请内存时产生的内存碎片按照预先设置的转换规则进行转换,得到符合查址要求的子内存碎片,能够进一步对不规则大小的内存碎片进行回收,从而提高系统的内部碎片利用率,从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,根据子内存碎片的块索引将每一子内存碎片回收至对应的空闲块列表,能够根据空闲块的块索引和大小的对应关系将不规则大小的内存碎片进行回收,将碎片回收后的待分配空闲块分配至用户;另一方面,通过对内存释放时产生的不符合查址要求的释放内存块进行合并和分割,实现对内存释放过程中产生的碎片进行回收处理。本发明实施例,能够在保持伙伴算法的高效执行效的前提下,对用户申请内存和释放内存时产生的不规则大小的内存碎片进行回收处理,提高超大内存碎片的利用率,改善嵌入式操作系统内存分配回收接口的执行效率。
在一个实施例中,根据预先设置的转换规则对内存碎片大小进行转换,得到至少一个符合查址要求的子内存碎片包括:根据预先设置的转换规则对内存碎片大小进行转换,得到至少两个符合查址要求的子内存碎片;转换规则为:
a=(1<<n1)+(1<<n2)+…+(1<<ni)
其中,a为内存碎片大小,k>n1>n2>……>ni,k为待分配空闲块大小,(1<<ni)表示对1的二进制左移ni位,。在本实施例中,内存碎片大小为a=(1<<k)-size,(1<<k)为待分配空闲块大小,size为期望占用空间,任何整数均可以表示为二进制数,将a表示为二进制数,进而转化为多个(1<<n)形式的数相加。如,13表示为二进制数为1101,则13=(1<<3)+(1<<2)+(1<<0)。将不规则的内存碎片转换为至少两个的(1<<n)形式的子内存碎片,能够打破传统的伙伴算法中块大小必须是(1<<n)形式的限制,提高内部碎片的利用率,解决内部碎片的浪费问题。
在一个实施例中,方法还包括:从大到小遍历每一子内存碎片,若当前子内存碎片的大小大于预先设置的允许最大碎片阈值,则将当前子内存碎片回收至对应的空闲块列表。在本实施例中,系统初始化时,设置允许的最大碎片大小,默认为1K大小,能够提高本发明算法的执行效率,解决超大内存碎片的浪费问题。
若当前子内存碎片可以被回收,则从待分配空闲块的首部切割当前子内存碎片大小的空间,可以发现切割得到的两个块满足如下特性:
(1)、切割的两个块索引值之间满足(1<<n1)大小的buddy块特性,待分配空闲块是(1<<k)大小,其索引也应(1<<k)大小对齐,假设其索引为index。切割后的两个块大小分别为index和index+(1<<n1)。由于k>n1,不难发现,这两个索引均(1<<n1)大小对齐,仅n1位存在差异,两个索引值之间满足(1<<n1)大小的buddy块特性。
(2)、两个空闲块大小分别为(1<<n1)和(1<<k)–(1<<n1),最低位均为n1。利用上述特性可以实现对不规则大小的空闲内存块进行合并。
在一个具体实施例中,申请内存空间时的回收步骤包括:
S1、系统初始化。设置允许的最大碎片大小,默认为1K大小。
S2、执行内存分配步骤,内存分配步骤包括:
S21、根据传入的请求大小(size),向上2进制取整,计算满足需求的最小的空闲块大小。假设大小为(1<<k)。
S22、使用传统伙伴算法分配流程获取一个(1<<k)大小的空闲块。
S23、计算内存碎片大小(1<<k)-size,假设为a,任何整数均可以表示为二进制数,进而转化为多个(1<<n)形式的数相加。如,13表示为二进制数为1101,则13=(1<<3)+(1<<2)+(1<<0)。则a可以表示为a=(1<<n1)+(1<<n2)+…+(1<<ni),其中k>n1>n2>……>ni。
S24、如果(1<<n1)大于允许的最大碎片大小则进行回收操作。从得到的空闲块首部切割(1<<n1)空间的空闲块,放入对一个的空闲块列表。
S25、重复上述操作对n2~ni进行处理,得到一个碎片回收后的内存块,返回给用户使用。
在一个实施例中,根据转换规则对释放内存块执行合并操作的步骤,包括:若当前释放内存块不符合伙伴算法的查址要求,则根据转换规则获取释放内存块的二进制最低位对应的块大小,根据二进制最低位对应的块大小和释放内存块的块索引,得到释放内存块对应的伙伴块;检测伙伴块的使用状态,若伙伴块为空闲状态,则将伙伴块与释放内存块进行合并,得到新的释放内存块;迭代更新释放内存块,直到查找不到释放内存块的伙伴块或者伙伴块为占用状态时,停止迭代,得到可回收内存块;若释放内存块的大小符合伙伴算法的查址要求,则采用伙伴算法对释放内存块进行回收;根据转换规则分别对释放内存块执行切割操作的步骤,包括:若可回收内存块的大小不符合伙伴算法的查址要求,则根据转换规则对可回收内存块的大小进行转换,得到至少一个符合查址要求的子内存块;从可回收内存块的首部按照子内存块的块索引从小到大的顺序切割可回收内存块,根据子内存块的块索引将每一子内存块回收至空闲块列表。
具体地,释放内存空间时的回收步骤包括:
S31、如果回收的内存块可以表示为1<<n的形式,则按照传统buddy算法进行回收。
S32、获取内存块大小的二进制最低位假定为k,根据块索引,按照块大小为(1<<k)查找对应的buddy块。
S33、如果buddy块为空闲状态,则取出该buddy块进行合并。
S34、重复S32和S33,直到找不到buddy块或者buddy块为非空闲状态。
S35、如果得到的块可以表示为1<<n的形式,则按照传统buddy算法进行回收;如果得到的块不能表示为1<<n的形式,则对当前块进行切割,切割成符合buddy特性的内存块,分别放入对应大小的空闲块列表中。
在步骤S35中,将空闲块大小表示为(1<<n1)+(1<<n2)+…+(1<<ni),其中n1>n2>……>ni,从左到右依次切割大小为(1<<ni)、……、(1<<n2)、(1<<n1)的标准内存块,放入对应的空闲块列表。注意需要按照内存块大小从小到大、内存索引从小到大的顺序切割,这样才能保障切割出来的内存块均可以与对应的buddy对应。本实施例,能够对不规则大小的空闲块进行合并,减少外部碎片的浪费。
在一个具体实施例中,如图3所示,提供了一种内存分配步骤的空闲内存块回收示意图,请求发送方申请需要22大小的空间,按照伙伴算法获取到的空闲块大小为32,索引为32~63,则碎片大小为32-22=10,转化为二进制为1010,根据转换规则得到10=(1<<3)+(1<<1),从空闲块首部按顺序切割(1<<3)、(1<<1)大小的两个空闲块,索引分别为32~39、40~41,将这两个回收的空闲块分别放入到大小为8和2的空闲块列表中,剩余的42~63内存块返回,供请求发送方使用。本实施例中,在分配内存时,打破了内存块大小必须二进制对齐的限制,实现不规则大小碎片的回收。
在一个具体实施例中,如图4所示,提供了一种内存释放步骤的空闲内存块合并示意图,承接上一个具体实施例,若回收的32~39内存块被其他程序占用,此时需要回收分配给请求发送方的42~63内存块,具体流程包括:空闲块大小为22,表示为二进制为10110,最低位是第1位,通过索引获取buddy块索引,42^(1<<1)=40,其buddy块索引为40,将40~41内存块与42~63内存块进行合并,得到新的内存块,索引40~63,大小为24,表示为二进制为11000,最低位是第3位,通过新的内存块索引获取buddy块索引,40^(1<<3)=32,其buddy块索引为32,检测32~39块为已使用状态,停止合并,检测当前块大小为24,无法按照传统模式进行回收,执行拆分操作,将当前块大小转换为24=(1<<4)+(1<<3),因此将块从小到大拆分成(1<<3)、(1<<4)的两个块,即40~47、48~63,然后分别放入大小为8和16的空闲块列表。本实施例中,在释放内存时,增加了非2的n次方大小内存块的合并逻辑,实现不规则大小内存块的合并。
应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图5所示,提供了一种基于伙伴算法的碎片回收管理装置,包括:请求解析模块502、初步分配模块504、碎片转换模块506、碎片回收模块508和释放内存回收模块510,其中:
请求解析模块502,用于解析用户发送的内存申请请求,得到期望占用空间;
初步分配模块504,用于计算满足期望占用空间的最小空闲块,采用伙伴算法根据最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
碎片转换模块506,用于根据待分配空闲块大小和期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对内存碎片大小进行转换,得到至少一个符合查址要求的子内存碎片;
碎片回收模块508,用于从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,根据子内存碎片的块索引将每一子内存碎片回收至对应的空闲块列表,并将碎片回收后的待分配空闲块分配至用户;
请求解析模块502,还用于解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
释放内存回收模块510,用于若释放内存块的大小不符合伙伴算法的查址要求,则根据转换规则分别对释放内存块执行合并和切割操作,生成至少一个符合査址要求的子内存块,根据子内存块的块索引将每一子内存块回收至对应的空闲块列表。
在其中一个实施例中,还用于根据预先设置的转换规则对内存碎片大小进行转换,得到至少一个符合查址要求的子内存碎片;转换规则为:
a=(1<<n1)+(1<<n2)+…+(1<<ni)
其中,a为内存碎片大小,k>n1>n2>……>ni,k为待分配空闲块大小,(1<<ni)表示对1的二进制左移ni位。
在其中一个实施例中,还用于从大到小遍历每一子内存碎片,若当前子内存碎片的大小大于预先设置的允许最大碎片阈值,则将当前子内存碎片回收至对应的空闲块列表。
在其中一个实施例中,还用于若当前释放内存块不符合伙伴算法的查址要求,则根据转换规则获取释放内存块的二进制最低位对应的块大小,根据二进制最低位对应的块大小和释放内存块的块索引,得到释放内存块对应的伙伴块;检测伙伴块的使用状态,若伙伴块为空闲状态,则将伙伴块与释放内存块进行合并,得到新的释放内存块;迭代更新释放内存块,直到查找不到释放内存块的伙伴块或者伙伴块为占用状态时,停止迭代,得到可回收内存块。
在其中一个实施例中,还用于若释放内存块的大小符合伙伴算法的查址要求,则采用伙伴算法对释放内存块进行回收。
在其中一个实施例中,还用于若可回收内存块的大小不符合伙伴算法的查址要求,则根据转换规则对可回收内存块的大小进行转换,得到至少一个符合查址要求的子内存块;从可回收内存块的首部按照子内存块的块索引从小到大的顺序切割可回收内存块,根据子内存块的块索引将每一子内存块回收至空闲块列表。
在其中一个实施例中,还用于伙伴算法的查址要求包括内存块的大小要符合伙伴算法的伙伴块索引查找公式的输入要求;伙伴块索引查找公式为:
buddy_index=blk_index^blk_size
其中,buddy_index为伙伴块索引,blk_index为空闲块索引,blk_size为空闲块大小,^为按位异或运算。
关于基于伙伴算法的碎片回收管理装置的具体限定可以参见上文中对于基于伙伴算法的碎片回收管理方法的限定,在此不再赘述。上述基于伙伴算法的碎片回收管理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于伙伴算法的碎片回收管理方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现上述实施例中方法的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中方法的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本发明的保护范围应以所附权利要求为准。
Claims (10)
1.一种基于伙伴算法的碎片回收管理方法,其特征在于,所述方法包括:
解析用户发送的内存申请请求,得到期望占用空间;
计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
2.根据权利要求1所述的方法,其特征在于,所述根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片包括:
根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;所述转换规则为:
a=(1<<n1)+(1<<n2)+…+(1<<ni)
其中,a为内存碎片大小,k>n1>n2>……>ni,k为待分配空闲块大小,(1<<ni)表示对1的二进制左移ni位。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
从大到小遍历每一所述子内存碎片,若当前子内存碎片的大小大于预先设置的允许最大碎片阈值,则将当前子内存碎片回收至对应的空闲块列表。
4.根据权利要求3所述的方法,其特征在于,所述根据所述转换规则对所述释放内存块执行合并操作的步骤,包括:
若当前释放内存块不符合伙伴算法的查址要求,则根据所述转换规则获取所述释放内存块的二进制最低位对应的块大小,根据所述二进制最低位对应的块大小和所述释放内存块的块索引,得到所述释放内存块对应的伙伴块;
检测所述伙伴块的使用状态,若所述伙伴块为空闲状态,则将所述伙伴块与所述释放内存块进行合并,得到新的释放内存块;
迭代更新所述释放内存块,直到查找不到所述释放内存块的伙伴块或者所述伙伴块为占用状态时,停止迭代,得到可回收内存块。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
若所述释放内存块的大小符合伙伴算法的查址要求,则采用伙伴算法对所述释放内存块进行回收。
6.根据权利要求5所述的方法,其特征在于,所述根据所述转换规则分别对所述释放内存块执行切割操作的步骤,包括:
若所述可回收内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则对所述可回收内存块的大小进行转换,得到至少一个符合所述查址要求的子内存块;
从所述可回收内存块的首部按照子内存块的块索引从小到大的顺序切割所述可回收内存块,根据所述子内存块的块索引将每一所述子内存块回收至空闲块列表。
7.根据权利要求5所述的方法,其特征在于,所述伙伴算法的查址要求为满足伙伴算法中伙伴块索引查找公式的输入条件;所述伙伴块索引查找公式为:
buddy_index=blk_index^blk_size
其中,buddy_index为伙伴块索引,blk_index为空闲块索引,blk_size为空闲块大小,^为按位异或运算。
8.一种基于伙伴算法的碎片回收管理装置,其特征在于,所述装置包括:
请求解析模块,用于解析用户发送的内存申请请求,得到期望占用空间;
初步分配模块,用于计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;
碎片转换模块,用于根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;
碎片回收模块,用于从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;
请求解析模块,还用于解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;
释放内存回收模块,用于若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。
9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310483777.7A CN116701239A (zh) | 2023-04-28 | 2023-04-28 | 基于伙伴算法的碎片回收管理方法、装置和计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310483777.7A CN116701239A (zh) | 2023-04-28 | 2023-04-28 | 基于伙伴算法的碎片回收管理方法、装置和计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116701239A true CN116701239A (zh) | 2023-09-05 |
Family
ID=87832965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310483777.7A Pending CN116701239A (zh) | 2023-04-28 | 2023-04-28 | 基于伙伴算法的碎片回收管理方法、装置和计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116701239A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117194055A (zh) * | 2023-11-06 | 2023-12-08 | 西安芯云半导体技术有限公司 | Gpu显存申请及释放的方法、装置及存储介质 |
-
2023
- 2023-04-28 CN CN202310483777.7A patent/CN116701239A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117194055A (zh) * | 2023-11-06 | 2023-12-08 | 西安芯云半导体技术有限公司 | Gpu显存申请及释放的方法、装置及存储介质 |
CN117194055B (zh) * | 2023-11-06 | 2024-03-08 | 西安芯云半导体技术有限公司 | Gpu显存申请及释放的方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107481762B (zh) | 一种固态硬盘的trim处理方法及装置 | |
WO2014127684A1 (zh) | 内存回收方法及装置 | |
JP6713906B2 (ja) | ソリッドステートドライブ及びその動作方法 | |
WO2017050028A1 (zh) | 一种固态硬盘的数据擦除方法及装置 | |
CN107092439B (zh) | 一种数据存储的方法及设备 | |
US9489409B2 (en) | Rollover strategies in a N-bit dictionary compressed column store | |
KR102013430B1 (ko) | 어레이 컨트롤러, 솔리드 스테이트 디스크, 및 데이터를 기록하기 위해 솔리드 스테이트 디스크를 제어하는 방법 | |
EP3376393B1 (en) | Data storage method and apparatus | |
US10649905B2 (en) | Method and apparatus for storing data | |
CN104008064A (zh) | 用于多级存储器压缩的方法和系统 | |
CN110209348B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN116701239A (zh) | 基于伙伴算法的碎片回收管理方法、装置和计算机设备 | |
CN112632069B (zh) | 哈希表数据存储管理方法、装置、介质和电子设备 | |
EP3196767B1 (en) | Method for writing data into flash memory device, flash memory device and storage system | |
CN108573176B (zh) | 一种密钥派生加密的移动终端数据安全删除的方法及系统 | |
TW201805815A (zh) | 固態儲存器容量管理系統與方法 | |
CN104965835A (zh) | 一种分布式文件系统的文件读写方法及装置 | |
CN112015553A (zh) | 基于机器学习模型的数据处理方法、装置、设备和介质 | |
CN112269665B (zh) | 内存的处理方法和装置、电子设备和存储介质 | |
CN113392037B (zh) | 内存回收方法、装置、计算机设备和存储介质 | |
CN108205559B (zh) | 一种数据管理方法及其设备 | |
US10949340B2 (en) | Block mapping systems and methods for storage device | |
CN113849311B (zh) | 内存空间管理方法、装置、计算机设备和存储介质 | |
CN113778688B (zh) | 内存管理系统、内存管理方法、内存管理装置 | |
CN113032156B (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 |