基于伙伴算法的碎片回收管理方法、装置和计算机设备与流程

文档序号:35346048发布日期:2023-09-07 19:45阅读:36来源:国知局
基于伙伴算法的碎片回收管理方法、装置和计算机设备与流程

本技术涉及计算机处理,特别是涉及一种基于伙伴算法的碎片回收管理方法、装置和计算机设备。


背景技术:

1、内存碎片描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存小且以不连续方式出现在不同的位置。伙伴(buddy)算法最大的优势在于分配及回收内存的效率特别高,其缺点也十分明显,分配内存容易产生超大的内存碎片。这一情况常见于服务器/桌面/移动端操作系统中,但是由于其碎片问题严重,通常只用于系统内核内部使用,然后通过slab算法中转,间接向用户应用提供内存分配回收服务,而这种模式,需要大量的中转缓存,对一些内存资源紧张的嵌入式设备十分不友好。嵌入式操作系统目前主流的内存分配算法多采用best fit(最佳适应)算法,这种算法碎片较少,但执行效率比伙伴算法低了很多。

2、然而,由于使用伙伴算法分配内存时极易产生超大的内存碎片,如果直接应用到嵌入式设备中,由于其资源有限,容易产生内存不足的现象,很难满足应用程序的运行需求,同时嵌入式场景中受资源限制影响,也不适合使用类似于slab模式的缓存中转机制。如果伙伴算法能解决内存碎片的问题,就可以充分发挥其高效优势,实现对主流best fit(最佳适应)算法的替换升级。


技术实现思路

1、基于此,有必要针对上述技术问题,提供一种基于伙伴算法的碎片回收管理方法、装置和计算机设备。

2、一种基于伙伴算法的碎片回收管理方法,所述方法包括:

3、解析用户发送的内存申请请求,得到期望占用空间;

4、计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;

5、根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;

6、从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;

7、解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;

8、若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。

9、在其中一个实施例中,还包括:根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;所述转换规则为:

10、a=(1<<n1)+(1<<n2)+…+(1<<ni)

11、其中,a为内存碎片大小,k>n1>n2>……>ni,k为待分配空闲块大小,(1<<ni)表示对1的二进制左移ni位。

12、在其中一个实施例中,还包括:从大到小遍历每一所述子内存碎片,若当前子内存碎片的大小大于预先设置的允许最大碎片阈值,则将当前子内存碎片回收至对应的空闲块列表。

13、在其中一个实施例中,还包括:若当前释放内存块不符合伙伴算法的查址要求,则根据所述转换规则获取所述释放内存块的二进制最低位对应的块大小,根据所述二进制最低位对应的块大小和所述释放内存块的块索引,得到所述释放内存块对应的伙伴块;检测所述伙伴块的使用状态,若所述伙伴块为空闲状态,则将所述伙伴块与所述释放内存块进行合并,得到新的释放内存块;迭代更新所述释放内存块,直到查找不到所述释放内存块的伙伴块或者所述伙伴块为占用状态时,停止迭代,得到可回收内存块。

14、在其中一个实施例中,还包括:若所述释放内存块的大小符合伙伴算法的查址要求,则采用伙伴算法对所述释放内存块进行回收。

15、在其中一个实施例中,还包括:若所述可回收内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则对所述可回收内存块的大小进行转换,得到至少一个符合所述查址要求的子内存块;从所述可回收内存块的首部按照子内存块的块索引从小到大的顺序切割所述可回收内存块,根据所述子内存块的块索引将每一所述子内存块回收至空闲块列表。

16、在其中一个实施例中,还包括:所述伙伴算法的查址要求包括内存块的大小要符合伙伴算法的伙伴块索引查找公式的输入要求;所述伙伴块索引查找公式为:

17、buddy_index=blk_index^blk_size

18、其中,buddy_index为伙伴块索引,blk_index为空闲块索引,blk_size为空闲块大小,^为按位异或运算。

19、一种基于伙伴算法的碎片回收管理装置,所述装置包括:

20、请求解析模块,用于解析用户发送的内存申请请求,得到期望占用空间;

21、初步分配模块,用于计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;

22、碎片转换模块,用于根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;

23、碎片回收模块,用于从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;

24、请求解析模块,还用于解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;

25、释放内存回收模块,用于若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。

26、一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

27、解析用户发送的内存申请请求,得到期望占用空间;

28、计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;

29、根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;

30、从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;

31、解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;

32、若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。

33、一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

34、解析用户发送的内存申请请求,得到期望占用空间;

35、计算满足所述期望占用空间的最小空闲块,采用伙伴算法根据所述最小空闲块和当前空闲块使用情况进行分配,得到待分配空闲块;

36、根据所述待分配空闲块大小和所述期望占用空间,计算得到内存碎片大小,根据预先设置的转换规则对所述内存碎片大小进行转换,得到至少一个符合所述查址要求的子内存碎片;

37、从所述待分配空闲块首部按照所述子内存碎片的块索引从小到大的顺序切割所述内存碎片,根据所述子内存碎片的块索引将每一所述子内存碎片回收至对应的空闲块列表,并将碎片回收后的所述待分配空闲块分配至用户;

38、解析用户发送的内存释放请求,得到释放内存空间对应的释放内存块;

39、若所述释放内存块的大小不符合伙伴算法的查址要求,则根据所述转换规则分别对所述释放内存块执行合并和切割操作,生成至少一个符合所述査址要求的子内存块,根据所述子内存块的块索引将每一所述子内存块回收至对应的空闲块列表。

40、上述基于伙伴算法的碎片回收管理方法、装置和计算机设备,通过对用户申请内存时产生的内存碎片按照预先设置的转换规则进行转换,得到符合查址要求的子内存碎片,能够进一步对不规则大小的内存碎片进行回收,从而提高系统的内部碎片利用率,从待分配空闲块首部按照子内存碎片的块索引从小到大的顺序切割内存碎片,根据子内存碎片的块索引将每一子内存碎片回收至对应的空闲块列表,能够根据空闲块的块索引和大小的对应关系将不规则大小的内存碎片进行回收,将碎片回收后的待分配空闲块分配至用户;另一方面,通过对内存释放时产生的不符合查址要求的释放内存块进行合并和分割,实现对内存释放过程中产生的碎片进行回收处理。本发明实施例,能够在保持伙伴算法的高效执行效的前提下,对用户申请内存和释放内存时产生的不规则大小的内存碎片进行回收处理,提高超大内存碎片的利用率,改善嵌入式操作系统内存分配回收接口的执行效率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1