一种内存管理方法、电子设备及存储介质与流程

摘要: 本申请涉及电子,特别涉及一种内存管理方法、电子设备及存储介质。背景技术:1、直接内存访问缓存(directmemoryaccessbuffer,dma-buf)...
一种内存管理方法、电子设备及存储介质与流程

本申请涉及电子,特别涉及一种内存管理方法、电子设备及存储介质。

背景技术:

1、直接内存访问缓存(direct memory access buffer,dma-buf)是一种用于在多个设备驱动程序和子系统之间共享硬件访问的缓冲区的框架。目前dma-buf框架中,只有dma-buf管理者主动调用dma-buf释放函数的时候,dma-buf对象的数据结构及其占用的内存才会被释放。

2、然而,基于dma-buf管理者释放内存的方式,完全依赖dma-buf管理者对于dma-buf对象的主动管理,管理不当会使得已经不再使用的dma-buf对象没有被及时释放;同时,目前dma-buf框架中,没有针对dma-buf对象的回收功能,这些都导致了系统中存在很多未被及时释放的dma-buf对象,造成极大的内存浪费。

技术实现思路

1、本申请提供了一种内存管理方法、电子设备及存储介质,能够减少内存浪费,降低内存的紧张度,提高系统的流畅度。所述技术方案如下:

2、第一方面,本申请实施例提供了一种内存管理方法,应用于电子设备,电子设备中创建了至少一个dma-buf对象,dma-buf对象具有不同的状态,在该方法中,电子设备在满足内存回收流程触发条件时,确定目标dma-buf对象是否满足目标条件,目标条件为目标dma-buf对象的当前状态为可被回收状态;在目标dma-buf对象满足目标条件的情况下,回收目标dma-buf对象占用的内存。

3、基于上述技术方案,dma-buf对象具有不同的状态,当dma-buf对象的当前状态为可被回收状态时,dma-buf对象可以被回收。本申请实施例通过提供回收机制,使得未及时被释放dma-buf对象可以被回收,回收之后dma-buf对象所占用的内存可以被重新使用,从而降低内存的紧张度,提高内存利用率,提高系统的流畅度。

4、结合第一方面,在第一方面的某些实现方式中,目标条件为目标dma-buf对象的当前状态为可被回收状态的时长超出预设阈值。这样,避免还在使用的dma-buf对象被回收,保证dma-buf的使用者可以正常使用dma-buf对象。

5、结合第一方面和上述实现方式,在第一方面的某些实现方式中,目标dma-buf对象的数据结构中包括第一结构体,第一结构体用于记录目标dma-buf对象的当前状态。这样,在满足内存回收流程触发条件时,可以从第一结构体中获取目标dma-buf对象的当前状态。

6、其中,在目标dma-buf对象未被消费者使用的情况下,目标dma-buf对象为可被回收状态;在目标dma-buf对象被消费者使用的情况下,目标dma-buf对象的状态为不可被回收状态;在目标dma-buf对象被回收后,目标dma-buf对象的状态为已回收状态。

7、结合第一方面和上述实现方式,在第一方面的某些实现方式中,第一结构体还包括劫持函数,劫持函数用于维护目标dma-buf对象的状态。这样,目标dma-buf对象的状态可以被更新。

8、结合第一方面和上述实现方式,在第一方面的某些实现方式中,上述方法还包括:在检测到对目标dma-buf对象的访问操作之后,执行劫持函数;在目标dma-buf对象的状态为可被回收状态或者不可被回收状态的情况下,访问目标dma-buf对象;在访问结束后,在目标dma-buf对象可被回收的情况下,将目标dma-buf对象的状态设置为可被回收状态。这样,外部设备对目标dma-buf对象的访问操作,被劫持函数劫持,劫持函数先检查目标dma-buf对象的状态,再执行对dma-buf对象的访问。访问结束后,劫持函数更新目标dma-buf对象的状态。从而实现对dma-buf对象的状态的维护。

9、结合第一方面和上述实现方式,在第一方面的某些实现方式中,上述方法还包括:在目标dma-buf对象的状态为已回收状态的情况下,重新读入目标dma-buf对象;在重新读入目标dma-buf对象之后,将目标dma-buf对象的状态设置为不可被回收状态。

10、结合第一方面和上述实现方式,在第一方面的某些实现方式中,回收目标dma-buf对象占用的内存,包括:在后端设备中为目标dma-buf对象分配数据存储地址;将目标dma-buf对象占用的内存中的数据,存储至数据存储地址。这样,在重新读入时,可以从数据存储地址中读取被回收的数据。

11、结合第一方面和上述实现方式,在第一方面的某些实现方式中,上述方法还包括:在回收目标dma-buf对象占用的内存之后,将目标dma-buf对象的状态设置为已回收状态。这样,回收后的dma-buf对象可以被重新使用,从而避免出现内存浪费的问题。

12、第二方面,本申请实施例提供一种电子设备,包括:一个或多个处理器;一个或多个存储器;存储器存储有一个或多个程序,当一个或者多个程序被处理器执行时,使得电子设备执行上述第一方面任一项可能的方法。

13、第三方面,本申请实施例提供了一种装置,该装置包含在电子设备中,该装置具有实现上述各方面及上述各方面的可能实现方式中电子设备行为的功能。功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,显示模块或单元、检测模块或单元、处理模块或单元等。

14、第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

15、第五方面,本申请实施例提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

16、上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。

1.一种内存管理方法,其特征在于,应用于电子设备,所述电子设备中创建了至少一个dma-buf对象,所述dma-buf对象具有不同的状态,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,所述目标条件为:所述目标dma-buf对象的当前状态为可被回收状态的时长超出预设阈值。

3.根据权利要求1或2所述的方法,其特征在于,所述目标dma-buf对象的数据结构中包括第一结构体,所述第一结构体用于记录所述目标dma-buf对象的当前状态;

4.根据权利要求3所述的方法,其特征在于,所述第一结构体还包括劫持函数,所述劫持函数用于维护所述目标dma-buf对象的状态。

5.根据权利要求4所述的方法,其特征在于,所述方法还包括:

6.根据权利要求5所述的方法,其特征在于,所述方法还包括:

7.根据权利要求1所述的方法,其特征在于,所述回收所述目标dma-buf对象占用的内存,包括:

8.根据权利要求1所述的方法,其特征在于,所述方法还包括:

9.一种电子设备,其特征在于,包括:一个或多个处理器;一个或多个存储器;所述存储器存储有一个或多个程序,当所述一个或者多个程序被所述处理器执行时,使得所述电子设备执行权利要求1至8中任一项所述的方法。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如权利要求1至8中任一项所述的方法。