System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种内存管理器的管理方法及电子设备技术_技高网

一种内存管理器的管理方法及电子设备技术

技术编号:40703855 阅读:2 留言:0更新日期:2024-03-22 11:03
本申请提供一种内存管理器的管理方法及电子设备,涉及计算机技术领域。本方案改善了启用通用内核镜像的电子设备,memcg释放之后,出现内存泄漏的问题。具体方案为:响应于应用程序的启动运行,创建应用程序对应的内存管理器memcg;memcg对应有第一数据结构和第二数据结构,第二数据结构是基于内核对象形式的代码数据创建的数据结构,用于管理应用程序在第二存储空间中的第二内存页;响应于应用程序的停止运行,异步释放第一内存页和第二内存页;在确定第二内存页已释放之后,释放第二数据结构;在第二数据结构已释放、确定memcg处于未被使用的状态,且第一内存页已释放的情况下,调用第一函数,用于释放第一数据结构。

【技术实现步骤摘要】

本申请涉及计算机,尤其涉及一种内存管理器的管理方法及电子设备


技术介绍

1、在电子设备运行过程中,可以通过内存管理器(memory cgroup,memcg),管理应用程序在系统内存(内部存储器中除交换分区之外的部分)中的内存页。如果需要拓展memcg所管理的存储范围(如,实现利用memcg机制管理交换分区),需要修改与memcg相关的内核代码。

2、对于采用了通用内核镜像(generic kernel image,gki)的电子设备而言,内核代码不能直接修改,只能通过hook函数,在内核代码上挂载相应的内核对象(kernel object,ko)代码,实现拓展memcg所管理的存储范围。

3、然而,在内核代码上挂载有ko代码的情况下,相关技术中,释放memcg(释放memcg占用和管理的系统内存)的场景下,可能出现内存泄漏的问题。


技术实现思路

1、本申请实施例提供一种内存管理器的管理方法及电子设备,用于避免在内核代码上挂载有ko代码的情况下,memcg释放之后,出现内存泄漏的问题,提高内存的使用率。

2、为达到上述目的,本申请的实施例采用如下技术方案:

3、第一方面,本申请实施例中提供了一种内存管理器的管理方法,应用于启用通用内核镜像的电子设备,所述方法包括:响应于应用程序的启动运行,创建所述应用程序对应的内存管理器memcg;所述memcg对应有第一数据结构和第二数据结构,所述第一数据结构是基于所述通用内核镜像中的代码数据创建的数据结构,用于管理所述应用程序在第一存储空间中的第一内存页;所述第二数据结构是基于内核对象形式的代码数据创建的数据结构,用于管理所述应用程序在第二存储空间中的第二内存页;响应于所述应用程序的停止运行,异步释放所述第一内存页和所述第二内存页;在确定所述第二内存页已释放之后,释放所述第二数据结构;在所述第二数据结构已释放、确定所述memcg处于未被使用的状态,且所述第一内存页已释放的情况下,调用第一函数,用于释放所述第一数据结构。

4、上述实施例中,在第二数据结构释放之前,阻塞第一数据结构的释放。避免基于ko代码创建的第二数据结构,出现释放异常的问题,减少出现内存泄漏的可能性。

5、在一些实施例中,在所述第二数据结构被释放之前,不满足调用所述第一函数的条件。

6、在上述实施例中,需要第二数据结构已释放的条件下,才能调用释放第一数据结构的函数。实现在第二数据结构释放之前,阻塞第一数据结构的释放。

7、在一些实施例中,所述第一数据结构中包括第一数量,所述第一数量用于指示正在使用所述memcg的功能模块的个数;在创建应用程序对应的内存管理器memcg之后,所述方法还包括:响应于创建所述第二数据结构完成,将所述第一数量的取值加一;在确定所述第二数据结构已释放之后,所述方法还包括:将所述第一数量的取值减一;在所述第一数量的取值为0的情况下,确定所述memcg处于未被使用的状态。

8、上述第一数量可以是memcg数据结构中的css引用次数,该css引用次数是否为零,也是原生代码决策是否释放第一数据结构的条件,在上述实施例中,在第二数据结构创建之后,通过增加css引用次数的数值,在减少对代码程序改动量的情况下,实现在第二数据结构被释放之前,阻塞第一数据结构被释放的流程。

9、在一些实施例中,所述通用内核镜像中的代码数据中包括第一跳转函数,所述第一跳转函数指示用于创建所述第二数据结构的所述内核对象形式的代码数据;所述创建所述应用程序对应的内存管理器memcg,包括:在按照所述通用内核镜像中的代码数据,创建所述第一数据结构的过程中,基于所述第一跳转函数指示的所述内核对象形式的代码数据,创建所述第二数据结构。

10、在一些实施例中,在所述异步释放所述第一内存页和所述第二内存页之前,所述方法还包括:启动释放所述memcg,其中,所述通用内核镜像中用于释放所述memcg的代码数据中包括第二跳转函数,所述第二跳转函数指示用于创建异步线程的所述内核对象形式的第一代码数据;在启动释放所述memcg的过程中,基于所述第二跳转函数指示的第一代码数据,创建所述异步线程,所述异步线程用于检测所述第二内存页的释放情况。

11、在上述实施例中,利用异步线程,使第一数据结构所管理的内存页释放和第二数据结构管理的内存页释放可以异步进行,减少内存页的释放时长,提升memcg的释放效率。

12、在一些实施例中,在所述异步释放所述第一内存页和第二内存页之后,所述方法还包括:在所述异步线程检测到所述第二数据结构中的内存页链表为空的情况下,确定所述第二内存页已释放。

13、在一些实施例中,在所述异步线程检测到所述第二数据结构中的内存页链表不为空的情况下,休眠第一时长;在所述异步线程休眠所述第一时长之后,重复检测所述第二数据结构中的内存页链表是否为空。

14、在一些实施例中,所述第一存储空间是所述电子设备中内部存储器中的系统内存,所述第二存储空间是所述电子设备中内部存储器中的交换分区和外部存储器。

15、在一些实施例中,所述第一内存页包括所述应用程序对应的匿名页和文件页,所述第二内存页包括所述应用程序对应的压缩后的匿名页。

16、第二方面,本申请实施例提供的一种电子设备,电子设备包括一个或多个处理器和存储器;所述存储器与处理器耦合,存储器用于存储计算机程序代码,计算机程序代码包括计算机指令,当一个或多个处理器执行计算机指令时,所述一个或多个处理器,用于:响应于应用程序的启动运行,创建所述应用程序对应的内存管理器memcg;所述memcg对应有第一数据结构和第二数据结构,所述第一数据结构是基于所述通用内核镜像中的代码数据创建的数据结构,用于管理所述应用程序在第一存储空间中的第一内存页;所述第二数据结构是基于内核对象形式的代码数据创建的数据结构,用于管理所述应用程序在第二存储空间中的第二内存页;响应于所述应用程序的停止运行,异步释放所述第一内存页和所述第二内存页;在确定所述第二内存页已释放之后,释放所述第二数据结构;在所述第二数据结构已释放、确定所述memcg处于未被使用的状态,且所述第一内存页已释放的情况下,调用第一函数,用于释放所述第一数据结构。

17、在一些实施例中,在所述第二数据结构被释放之前,不满足调用所述第一函数的条件。

18、在一些实施例中,所述第一数据结构中包括第一数量,所述第一数量用于指示正在使用所述memcg的功能模块的个数;在创建所述应用程序对应的内存管理器memcg之后,所述一个或多个处理器,还用于:响应于创建所述第二数据结构完成,将所述第一数量的取值加一;在确定所述第二数据结构已释放之后,所述方法还包括:将所述第一数量的取值减一;在所述第一数量的取值为0的情况下,确定所述memcg处于未被使用的状态。

19、在一些实施例中,所述通用内核镜像中的代码数据中包括第一跳转函数,所述第一跳本文档来自技高网...

【技术保护点】

1.一种内存管理器的管理方法,其特征在于,应用于启用通用内核镜像的电子设备,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,在所述第二数据结构被释放之前,不满足调用所述第一函数的条件。

3.根据权利要求1或2所述的方法,其特征在于,所述第一数据结构中包括第一数量,所述第一数量用于指示正在使用所述memcg的功能模块的个数;

4.根据权利要求3所述的方法,其特征在于,所述通用内核镜像中的代码数据中包括第一跳转函数,所述第一跳转函数指示用于创建所述第二数据结构的所述内核对象形式的代码数据;

5.根据权利要求1-3任意一项所述的方法,其特征在于,在所述异步释放所述第一内存页和所述第二内存页之前,所述方法还包括:

6.根据权利要求5所述的方法,其特征在于,在所述异步释放所述第一内存页和第二内存页之后,所述方法还包括:

7.根据权利要求5所述的方法,其特征在于,在所述异步线程检测到所述第二数据结构中的内存页链表不为空的情况下,休眠第一时长;在所述异步线程休眠所述第一时长之后,重复检测所述第二数据结构中的内存页链表是否为空。

8.根据权利要求1-7任意一项所述的方法,其特征在于,所述第一存储空间是所述电子设备中内部存储器中的系统内存,所述第二存储空间是所述电子设备中内部存储器中的交换分区和外部存储器。

9.根据权利要求1-8任意一项所述的方法,其特征在于,所述第一内存页包括所述应用程序对应的匿名页和文件页,所述第二内存页包括所述应用程序对应的压缩后的匿名页。

10.一种电子设备,其特征在于,电子设备启用通用内核镜像,所述电子设备包括:处理器和存储器,所述存储器用于存储计算机指令,当所述处理器执行所述计算机指令时,以使所述电子设备执行如权利要求1-9中任一项所述方法。

11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序或指令,当所述计算机程序或指令在计算机上运行时,使得所述计算机执行如权利要求1-9中任一项所述的方法。

12.一种计算机程序产品,其特征在于,所述计算机程序产品包括计算机程序或指令,当所述计算机程序或指令在计算机上运行时,使得所述计算机执行如权利要求1-9中任一项所述的方法。

...

【技术特征摘要】

1.一种内存管理器的管理方法,其特征在于,应用于启用通用内核镜像的电子设备,所述方法包括:

2.根据权利要求1所述的方法,其特征在于,在所述第二数据结构被释放之前,不满足调用所述第一函数的条件。

3.根据权利要求1或2所述的方法,其特征在于,所述第一数据结构中包括第一数量,所述第一数量用于指示正在使用所述memcg的功能模块的个数;

4.根据权利要求3所述的方法,其特征在于,所述通用内核镜像中的代码数据中包括第一跳转函数,所述第一跳转函数指示用于创建所述第二数据结构的所述内核对象形式的代码数据;

5.根据权利要求1-3任意一项所述的方法,其特征在于,在所述异步释放所述第一内存页和所述第二内存页之前,所述方法还包括:

6.根据权利要求5所述的方法,其特征在于,在所述异步释放所述第一内存页和第二内存页之后,所述方法还包括:

7.根据权利要求5所述的方法,其特征在于,在所述异步线程检测到所述第二数据结构中的内存页链表不为空的情况下,休眠第一时长;在所述异步线程休眠所述第一时长之后,重复检测所述第二数据结构中的...

【专利技术属性】
技术研发人员:林琨力王鑫
申请(专利权)人:荣耀终端有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1