CN112162818B - 一种虚拟内存分配方法、装置、电子设备及存储介质 - Google Patents
一种虚拟内存分配方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112162818B CN112162818B CN202010973602.0A CN202010973602A CN112162818B CN 112162818 B CN112162818 B CN 112162818B CN 202010973602 A CN202010973602 A CN 202010973602A CN 112162818 B CN112162818 B CN 112162818B
- Authority
- CN
- China
- Prior art keywords
- virtual memory
- allocation
- type
- cache
- memory allocation
- 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.)
- Active
Links
Images
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- 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 Of A Hierarchy Structure (AREA)
Abstract
本申请实施例中提供了一种虚拟内存分配方法、装置、电子设备及存储介质,该方法包括:基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。如此,当目标任务的虚拟内存分配失败时,能够及时释放缓存空间存储的虚拟内存进行重新分配,解决了因缓存空间缓存大量虚拟存导致内存分配失败的问题。
Description
技术领域
本申请涉及电子技术,尤其涉及一种虚拟内存分配方法、装置、电子设备及存储介质。
背景技术
在操作***中,通常采用动态内存管理机制,内核将虚拟内存分配给有内存需求的任务,任务执行完毕后,再将内存释放,以供内核继续将内存分配给有内存需求的其他任务。
目前***有多种虚拟内存分配方式,比如:jemalloc方式、libc方式、gpu方式、mmap方式等,其中jemalloc方式已经被广泛使用,jemalloc为了让下次虚拟内存快速分配,会缓存部分已经释放的虚拟内存,不会立马释放给内核。当下次虚拟内存分配的时候,直接使用缓存的部分,就不用重新到内核里面分配虚拟内存,分配速度很快。
但jemalloc方式缓存的虚拟内存只能共自身使用,无法被其他分配方式所使用,容易出现虚拟内存浪费的问题。
发明内容
为解决上述技术问题,本申请实施例期望提供一种虚拟内存分配方法、装置、电子设备及存储介质。
本申请的技术方案是这样实现的:
第一方面,提供了一种虚拟内存分配方法,该方法包括:
基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;
所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。
第二方面,提供了一种虚拟内存分配装置,该装置包括:
第一分配单元,用于基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;
处理单元,用于所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
释放单元,用于响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
第二分配单元,用于基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。
第三方面,提供了一种电子设备,该电子设备包括:处理器和配置为存储能够在处理器上运行的计算机程序的存储器,
其中,所述处理器配置为运行所述计算机程序时,执行前述方法的步骤。
第四方面,本申请实施例中还提供了一种计算机存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现前述方法的步骤。
本申请实施例中提供了一种虚拟内存分配方法、装置、电子设备及存储介质,该方法包括:基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。如此,当目标任务的虚拟内存分配失败时,能够及时释放缓存空间存储的虚拟内存进行重新分配,解决了因缓存空间缓存大量虚拟存导致内存分配失败的问题。
附图说明
图1为本申请实施例中虚拟内存分配方法的第一流程示意图;
图2为本申请实施例中虚拟内存分配方法的第二流程示意图;
图3为jemalloc缓存机制的第一示意图;
图4为jemalloc缓存机制的第二示意图;
图5为本申请实施例中虚拟内存分配方法的第三流程示意图;
图6为本申请实施例中虚拟内存分配装置的组成结构示意图;
图7为本申请实施例中电子设备的组成结构示意图。
具体实施方式
为了能够更加详尽地了解本申请实施例的特点与技术内容,下面结合附图对本申请实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本申请实施例。
本申请实施例提供了一种虚拟内存分配方法,该方法应用于电子设备,电子设备可以包括诸如手机、平板电脑、笔记本电脑、掌上电脑、个人数字助理(Personal DigitalAssistant,PDA)、便捷式媒体播放器(Portable Media Player,PMP)、导航装置、可穿戴设备、智能手环、相机等。
电子设备包括但不限于搭载iOS、android、Microsoft、Linux或其他操作***的移动设备或固定设备,电子设备可以搭载单操作***或双操作***,本申请实施例对实现内存分配的操作***类型和数量不作具体限定。
下面对本申请实施例提供的虚拟内存分配方法进行举例说明,如图1所示,该方法具体可以包括:
步骤101:基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;
实际应用中,操作***有多种虚拟内存分配方式,比如:jemalloc方式、libc方式、gpu方式、mmap方式等,这些分配方式可以通过建立虚拟内存分配器来实现。一部分分配方式直接向内核请求分配虚拟内存,但这种分配方式每次都需要向内核申请分配虚拟内存,分配速度较慢,另一部分分配方式为了让下次虚拟内存分配更快,会缓存部分已经释放的虚拟内存,并不会立马释放给内核。
在一些实施例中,预设的虚拟内存分配策略可以为向内核请求分配虚拟内存,根据内核分配结果判断是否需要释放缓存的虚拟内存。内核是一个操作***的核心,是基于硬件的第一层软件扩充,提供操作***的最基本的功能,是操作***工作的基础,负责管理***的内存分配。
具体的,分配结果表征虚拟内存分配成功或者表征虚拟内存分配失败。当分配结果表征虚拟内存分配成功时,无需释放缓存的虚拟内存,结束本次虚拟分配操作;当分配结果表征虚拟内存分配失败时,表明内核当前所能分配的空闲虚拟内存空间紧张,无法满足目标任务的分配需求,需要释放缓存的虚拟内存,来供内核使用重新分配。
步骤102:所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
在一些实施例中,该方法还包括:在进程文件***中创建虚拟内存监测节点,用于监测所述分配结果。相应的,若所述内存检测节点检测到所述分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令。
若内存检测节点检测到分配结果表征虚拟内存分配成功时,则可以忽略当前分配结果,继续监视下一次内存分配的分配结果。
步骤103:响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
在一些实施例中,缓存释放指令用于指示释放缓存空间的全部虚拟内存,或者根据实际需求释放缓存空间的部分虚拟内存。
具体的,缓存释放指令可以为第一缓存释放指令或第二缓存释放指令;第一缓存释放指令用于释放缓存空间的全部虚拟内存,第二缓存释放指令用于释放缓存空间的部分虚拟内存。
可以理解的是,当内核分配失败时,最简单快捷的方式便是直接释放缓存空间的全部虚拟内存,但这种方法面临一些问题。比如,对于需要利用缓存的虚拟内存实现快速分配的第二类分配方式来说,在下次分配时则无法直接使用缓存的部分,对于内核来说,可能并不需要使用释放的全部虚拟内存。考虑到这些问题,本申请实施例中还可以在接收到缓存释放指令时,只释放部分虚拟内存,这样既能实现第二类分配方式的快速分配,也能避免虚拟内存的浪费。
步骤104:基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。
在一些实施例中,预设的虚拟内存分配策略可以为向内核请求分配虚拟内存,在释放缓存的虚拟内存之后,内核当前所能分配的空闲虚拟内存空间充足,能够满足目标任务的分配需求,可以重新为目标任务分配虚拟内存。
这里,步骤101至步骤104的执行主体可以为电子设备的处理器。
采用上述技术方案,当目标任务的虚拟内存分配失败时,能够及时释放缓存空间存储的虚拟内存进行重新分配,解决了因缓存空间缓存大量虚拟内存导致内存分配失败的问题。
为了能更加体现本申请的目的,在本申请上述实施例的基础上,对虚拟内存分配方式进行进一步的举例说明,预设的虚拟内存分配策略包括利用第一类虚拟内存分配器执行虚拟内存分配操作,如图2所示,该方法具体包括:
步骤201:向所述第一类虚拟内存分配器申请为所述目标任务分配虚拟内存;
实际应用中,第一类虚拟内存分配器是基于第一类分配方式建立的,且需要向内核请求分配虚拟内存。
需要说明的是,所述第一类虚拟内存分配器不具备虚拟内存缓存功能;或者,所述第一类虚拟内存分配器具备虚拟内存缓存功能,但缓存的虚拟内存量不满足所述目标任务的虚拟内存需求,且内核可分配的空闲虚拟内存也无法满足虚拟内存需求。
实际应用中,操作***有多种虚拟内存分配方式,比如:jemalloc方式、libc方式、gpu方式、mmap方式等,这些分配方式可以通过建立虚拟内存分配器来实现。一部分分配方式直接向内核请求分配虚拟内存,但这种分配方式每次都需要向内核申请分配虚拟内存,分配速度较慢,另一部分分配方式为了让下次虚拟内存分配更快,会缓存部分已经释放的虚拟内存,并不会立马释放给内核,只有打当缓存部分被全被使用才会向内核申请。
这里,第一类分配方式则是直接向内核请求分配虚拟内存,第二类分配方式则是具备虚拟内存缓存功能。第一类分配方式可以为mmap方式,第二类分配方式可以为jemalloc方式。
在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk、mmap这些***调用实现的。
使用brk分配内存,将数据段的最高地址指针_edata往高地址推;
使用mmap分配内存,是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。
这两种方式分配的都是虚拟内存,没有分配物理内存。在第一次访问已分配的虚拟地址空间的时候,发生缺页中断,操作***负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。
jemalloc缓存机制如图3所示,对于一个进程内部的所有线程,每一个线程有自己的一个线程缓存(tcache)。tcache有一个tbin数组,每一个tbin存放着对应大小的region缓存栈。分配内存时,没有直接去通过arena要region,而是先去查找对应的tbin存栈avail。region是调用malloc返回给用户的实际内存,在内存中连续分布,不包含元数据。
如图4所示,线程缓存(tcache)在释放内存时的作用是:将释放的内存地址压入缓存栈。
线程申请内存,会从缓存栈顶pop出一个最近被free到缓存栈上的内存地址,作为新malloc的返回地址。直至缓存栈为空,再向arena申请对应size的region,arena向缓存栈中填充,将内存地址压入缓存栈。
步骤202:所述第一类虚拟内存分配器执行针对目标任务的虚拟内存分配操作,生成所述分配结果;
在一些实施例中,该步骤具体可以包括:检测所述第一类虚拟内存分配器可分配的空闲虚拟内存;若所述空闲虚拟内存不满足所述目标任务的虚拟内存需求时,确定虚拟内存分配失败;若所述虚拟内存满足所述目标任务的虚拟内存需求时,为所述目标任务分配虚拟内存,并确定虚拟内存分配成功。
具体的,当空闲虚拟内存量大于虚拟内存需求量时,确定虚拟内存分配成功;当空闲虚拟内存量小于虚拟内存需求量时,确定虚拟内存分配失败。
需要说明的是,所述第一类虚拟内存分配器不具备虚拟内存缓存功能时,可分配的空闲虚拟内存可以为内核可分配的空闲虚拟内存。所述第一类虚拟内存分配器具备虚拟内存缓存功能,但缓存的虚拟内存量不满足所述目标任务的虚拟内存需求时,可分配的空闲虚拟内存可以为第一类虚拟内存分配器缓存的虚拟内存需求,和/或内核可分配的空闲虚拟内存。
步骤203:所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
在一些实施例中,该方法还包括:在进程文件***中创建虚拟内存监测节点,用于监测所述分配结果。相应的,若所述内存检测节点检测到所述分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令。
若内存检测节点检测到分配结果表征虚拟内存分配成功时,则可以忽略当前分配结果,继续监视下一次内存分配的分配结果。
步骤204:响应于所述缓存释放指令,控制第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
实际应用中,所述第二类虚拟内存分配器基于第二类分配方式建立的,具备虚拟内存缓存功能。
在一些实施例中,该步骤具体可以包括:响应于所述缓存释放指令检测所述第二类虚拟内存分配器是否缓存有虚拟内存;若有缓存,则控制所述第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存,并向操作***发送释放完成消息;若无缓存,则向操作***发送缓存为空的指示消息。
实际应用中,第二类虚拟内存分配器可能缓存有虚拟内存,也可能没有缓存。因此,需要先判断是都缓存有虚拟内存,如果有缓存,再根据执行缓存释放指令,如果没有缓存在忽略释放操作,并向操作***发送缓存为空的指示消息,该消息用于通知操作***当前无缓存的空闲内存,使操作***采用方式进行内存分配,比如,将从硬盘空间中划分一部分容量出来当作虚拟内存使用。
在一些实施例中,缓存释放指令用于指示第二类虚拟内存分配器释放缓存的全部虚拟内存,或者根据实际需求释放缓存的部分虚拟内存。
具体的,缓存释放指令可以为第一缓存释放指令或第二缓存释放指令;第一缓存释放指令用于释放缓存空间的全部虚拟内存,第二缓存释放指令用于释放缓存空间的部分虚拟内存。
可以理解的是,当内核分配失败时,最简单快捷的方式便是直接释放缓存空间的全部虚拟内存,但这种方法面临一些问题。比如,对于需要利用缓存的虚拟内存实现快速分配的第二类虚拟内存分配器来说,在下次分配时则无法直接使用缓存的部分,对于内核来说,可能并不需要使用释放的全部虚拟内存。考虑到这些问题,本申请实施例中还可以在接收到缓存释放指令时,只释放部分虚拟内存,这样既能实现第二类虚拟内存分配器的快速分配,也能避免虚拟内存的浪费。
步骤205:基于被释放的虚拟内存,向所述第一类虚拟内存分配器重新申请为所述目标任务分配虚拟内存。
采用上述技术方案,当目标任务的虚拟内存分配失败时,能够及时释放缓存空间存储的虚拟内存进行重新分配,解决了因缓存空间缓存大量虚拟内存导致内存分配失败的问题。
为了能更加体现本申请的目的,在本申请上述实施例的基础上,以电子设备搭载双操作***为例进行举例说明。
图5为本申请实施例中虚拟内存分配方法的第三流程示意图,如图5所示,在电子设备搭载Android操作***和Linux操作***的基础上,该方法实现过程具体可以包括:
步骤501:虚拟内存分配失败;
具体的,低层操作***(Linux)采用预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作后,得到分配结果;分配结果表征虚拟内存分配失败。
步骤502:/proc/vm_release监测
本申请实施例设置了一种通知机制,在procfs创建vm_release文件节点,供上层操作***(Android)中的第二类虚拟内存分配器(jemalloc)监控底层虚拟内存紧张的消息。
具体的,在procfs创建vm_release文件节点;为vm_release文件节点创建epoll操作集。epoll操作集主要是做等待信号休眠,等待内核虚拟内存分配失败时,接收到分配失败消息后,生成缓存释放指令,来通知jemalloc去释放缓存。
步骤503:epoll_wait;
步骤504:判断tcache是否缓存虚拟内存;如果否,执行步骤505;如果是,执行步骤506;
这里,上层通过epoll_wait监控/proc/vm_release文件节点,接收到消息时,判断是否有缓存虚拟内存。
如果没有缓存虚拟内存,则直接发指示消息给内核,用于通知操作***当前无缓存的空闲内存,使操作***采用方式进行内存分配,比如,将从硬盘空间中划分一部分容量出来当做虚拟内存使用。
如果有缓存虚拟内存,则释放完缓存的虚拟内存后再通知给内核,重新分配虚拟内存。
步骤505:发指示消息给内核;
步骤506:通过munmap释放缓存的虚拟内存;
步骤507:重新分配虚拟内存。
采用上述技术方案,当进程分配虚拟内存失败时,通知jemalloc释放缓存内存,避免因为jemalloc缓存大量内存导致进程其他虚拟内存分配方式分配失败。
为实现本申请实施例的方法,基于同一发明构思本申请实施例还提供了一种虚拟内存分配装置,该装置应用于电子设备,如图6所示,该装置包括:
第一分配单元601,用于基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;
处理单元602,用于所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
释放单元603,用于响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
第二分配单元604,用于基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作。
在一些实施例中,所述预设的虚拟内存分配策略包括利用第一类虚拟内存分配器执行虚拟内存分配操作;
第一分配单元601,具体用于向所述第一类虚拟内存分配器申请为所述目标任务分配虚拟内存;所述第一类虚拟内存分配器执行针对目标任务的虚拟内存分配操作,生成所述分配结果。
在一些实施例中,第一分配单元601,具体用于检测所述第一类虚拟内存分配器可分配的空闲虚拟内存;若所述空闲虚拟内存不满足所述目标任务的虚拟内存需求时,确定虚拟内存分配失败;若所述虚拟内存满足所述目标任务的虚拟内存需求时,为所述目标任务分配虚拟内存,并确定虚拟内存分配成功。
在一些实施例中,所述第一类虚拟内存分配器是基于第一类分配方式建立的,且需要向内核请求分配虚拟内存。
在一些实施例中,处理单元602,还用于在进程文件***中创建虚拟内存监测节点,用于监测所述分配结果;
处理单元602,具体用于若所述内存检测节点检测到所述分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令。
在一些实施例中,释放单元603,具体用于响应于所述缓存释放指令,控制第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存;其中,所述第二类虚拟内存分配器基于第二类分配方式建立的,具备虚拟内存缓存功能。
在一些实施例中,释放单元603,具体用于响应于所述缓存释放指令检测所述第二类虚拟内存分配器是否缓存有虚拟内存;若有缓存,则控制所述第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存,并向操作***发送释放完成消息;若无缓存,则向操作***发送缓存为空的指示消息。
基于上述虚拟内存分配装置中各单元的硬件实现,本申请实施例还提供了一种电子设备,如图7所示,该电子设备包括:处理器701和配置为存储能够在处理器上运行的计算机程序的存储器702;
其中,处理器701配置为运行计算机程序时,执行前述实施例中的方法步骤。
当然,实际应用时,如图7所示,该设备中的各个组件通过总线***703耦合在一起。可理解,总线***703用于实现这些组件之间的连接通信。总线***703除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线***703。
在实际应用中,上述处理器可以为特定用途集成电路(ASIC,ApplicationSpecific Integrated Circuit)、数字信号处理装置(DSPD,Digital Signal ProcessingDevice)、可编程逻辑装置(PLD,Programmable Logic Device)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。
上述存储器可以是易失性存储器(volatile memory),例如随机存取存储器(RAM,Random-Access Memory);或者非易失性存储器(non-volatile memory),例如只读存储器(ROM,Read-Only Memory),快闪存储器(flash memory),硬盘(HDD,Hard Disk Drive)或固态硬盘(SSD,Solid-State Drive);或者上述种类的存储器的组合,并向处理器提供指令和数据。
实际应用中,电子设备包括但不限于搭载iOS、android、Microsoft、Linux或其他操作***的移动设备或固定设备,电子设备可以搭载单操作***或双操作***,本申请实施例对实现内存分配的操作***类型和数量不作具体限定。
采用上述装置或设备,在进行虚拟内存分配时,当目标任务的虚拟内存分配失败时,能够及时释放缓存空间存储的虚拟内存进行重新分配,解决了因缓存空间缓存大量虚拟存导致内存分配失败的问题。
在示例性实施例中,本申请实施例还提供了一种计算机可读存储介质,例如包括计算机程序的存储器,计算机程序可由电子设备的处理器执行,以完成前述方法的步骤。
本申请实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法、装置和设备,可以通过其它的方式实现。以上所描述的实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个***,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本申请各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。
Claims (8)
1.一种虚拟内存分配方法,其特征在于,所述方法包括:
基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;其中,所述预设的虚拟内存分配策略包括利用第一类虚拟内存分配器执行虚拟内存分配操作,所述第一类虚拟内存分配器是基于第一类分配方式建立的,且需要直接向内核请求分配虚拟内存;
所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作;
所述响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,包括:
响应于所述缓存释放指令,控制第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存;其中,所述第二类虚拟内存分配器基于第二类分配方式建立的,具备虚拟内存缓存功能,所述第二类分配方式为jemalloc方式。
2.根据权利要求1所述的方法,其特征在于,
所述基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果,包括:
向所述第一类虚拟内存分配器申请为所述目标任务分配虚拟内存;
所述第一类虚拟内存分配器执行针对目标任务的虚拟内存分配操作,生成所述分配结果。
3.根据权利要求2所述的方法,其特征在于,所述第一类虚拟内存分配器执行针对目标任务的虚拟内存分配操作,生成所述分配结果,包括:
检测所述第一类虚拟内存分配器可分配的空闲虚拟内存;
若所述空闲虚拟内存不满足所述目标任务的虚拟内存需求时,确定虚拟内存分配失败;
若所述虚拟内存满足所述目标任务的虚拟内存需求时,为所述目标任务分配虚拟内存,并确定虚拟内存分配成功。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在进程文件***中创建虚拟内存监测节点,用于监测所述分配结果;
所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令,包括:
若所述内存监测节点检测到所述分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令。
5.根据权利要求1所述的方法,其特征在于,所述响应于所述缓存释放指令,控制第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存,包括:
响应于所述缓存释放指令检测所述第二类虚拟内存分配器是否缓存有虚拟内存;
若有缓存,则控制所述第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存,并向操作***发送释放完成消息;
若无缓存,则向操作***发送缓存为空的指示消息。
6.一种虚拟内存分配装置,其特征在于,所述装置包括:
第一分配单元,用于基于预设的虚拟内存分配策略执行针对目标任务的虚拟内存分配操作,获取分配结果;其中,所述预设的虚拟内存分配策略包括利用第一类虚拟内存分配器执行虚拟内存分配操作,所述第一类虚拟内存分配器不具备虚拟内存缓存功能;所述第一类虚拟内存分配器是基于第一类分配方式建立的,且需要直接向内核请求分配虚拟内存;
处理单元,用于所述内存分配结果表征虚拟内存分配失败时,生成虚拟内存的缓存释放指令;
释放单元,用于响应于所述缓存释放指令,释放缓存空间缓存的部分虚拟内存或全部虚拟内存,得到被释放的虚拟内存;
第二分配单元,用于基于所述虚拟内存分配策略和所述被释放的虚拟内存,重新执行针对所述目标任务的虚拟内存分配操作;
所述释放单元,具体用于响应于所述缓存释放指令,控制第二类虚拟内存分配器释放缓存的部分虚拟内存或全部虚拟内存;其中,所述第二类虚拟内存分配器基于第二类分配方式建立的,具备虚拟内存缓存功能,所述第二类分配方式为jemalloc方式。
7.一种电子设备,其特征在于,所述电子设备包括:处理器和配置为存储能够在处理器上运行的计算机程序的存储器,
其中,所述处理器配置为运行所述计算机程序时,执行权利要求1至5任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至5任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010973602.0A CN112162818B (zh) | 2020-09-16 | 2020-09-16 | 一种虚拟内存分配方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010973602.0A CN112162818B (zh) | 2020-09-16 | 2020-09-16 | 一种虚拟内存分配方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112162818A CN112162818A (zh) | 2021-01-01 |
CN112162818B true CN112162818B (zh) | 2023-04-07 |
Family
ID=73858973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010973602.0A Active CN112162818B (zh) | 2020-09-16 | 2020-09-16 | 一种虚拟内存分配方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112162818B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112764925A (zh) * | 2021-01-18 | 2021-05-07 | 苏州浪潮智能科技有限公司 | 基于虚拟内存的数据存储方法、装置、设备及存储介质 |
CN114020652B (zh) * | 2021-09-30 | 2022-12-30 | 荣耀终端有限公司 | 一种应用程序的管理方法及电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015180493A1 (zh) * | 2014-05-30 | 2015-12-03 | 华为技术有限公司 | 存储数据的处理方法、装置和*** |
CN106708627A (zh) * | 2016-12-29 | 2017-05-24 | 中国科学院计算技术研究所 | 一种基于kvm的多虚拟机映射、多通路的fuse加速方法及*** |
CN107179949A (zh) * | 2016-12-16 | 2017-09-19 | 重庆大学 | 一种用于移动设备中操作***内存分配流畅度的量化方法 |
WO2018063776A1 (en) * | 2016-10-01 | 2018-04-05 | Intel Corporation | Processors, methods, systems, and instructions to determine page group identifiers, and optionally page group metadata, associated with logical memory addresses |
CN111177019A (zh) * | 2019-08-05 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 一种内存分配管理方法、装置、设备及存储介质 |
CN111611083A (zh) * | 2020-05-26 | 2020-09-01 | 北京字节跳动网络技术有限公司 | 虚拟内存上限检测方法、装置、计算机设备及存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104965793B (zh) * | 2014-09-26 | 2016-10-12 | 浙江大华技术股份有限公司 | 一种云存储数据节点装置 |
CN106339250B (zh) * | 2016-08-19 | 2019-09-27 | 郭笃刚 | 一种计算机虚拟内存的管理方法 |
CN116680037A (zh) * | 2019-05-05 | 2023-09-01 | 创新先进技术有限公司 | 数据隔离方法及装置、电子设备 |
CN110704184B (zh) * | 2019-09-19 | 2022-09-06 | 海南车智易通信息技术有限公司 | 一种应用内存优化方法、装置和移动终端 |
US20200192715A1 (en) * | 2020-02-24 | 2020-06-18 | Intel Corporation | Workload scheduler for memory allocation |
-
2020
- 2020-09-16 CN CN202010973602.0A patent/CN112162818B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015180493A1 (zh) * | 2014-05-30 | 2015-12-03 | 华为技术有限公司 | 存储数据的处理方法、装置和*** |
WO2018063776A1 (en) * | 2016-10-01 | 2018-04-05 | Intel Corporation | Processors, methods, systems, and instructions to determine page group identifiers, and optionally page group metadata, associated with logical memory addresses |
CN107179949A (zh) * | 2016-12-16 | 2017-09-19 | 重庆大学 | 一种用于移动设备中操作***内存分配流畅度的量化方法 |
CN106708627A (zh) * | 2016-12-29 | 2017-05-24 | 中国科学院计算技术研究所 | 一种基于kvm的多虚拟机映射、多通路的fuse加速方法及*** |
CN111177019A (zh) * | 2019-08-05 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 一种内存分配管理方法、装置、设备及存储介质 |
CN111611083A (zh) * | 2020-05-26 | 2020-09-01 | 北京字节跳动网络技术有限公司 | 虚拟内存上限检测方法、装置、计算机设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
Pirmin Vogel."Lightweight Virtual Memory Support for Zero-Copy Sharing of Pointer-Rich Data Structures in Heterogeneous Embedded SoCs".《IEEE Transactions on Parallel and Distributed Systems》.2017,第28卷(第7期),第1947-1959页. * |
刘翔."动态内存分配器研究综述".《计算机学报》.2018,第41卷(第10期),第2359-2378页. * |
Also Published As
Publication number | Publication date |
---|---|
CN112162818A (zh) | 2021-01-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5510556B2 (ja) | 仮想マシンのストレージスペースおよび物理ホストを管理するための方法およびシステム | |
US10152409B2 (en) | Hybrid in-heap out-of-heap ballooning for java virtual machines | |
US11593186B2 (en) | Multi-level caching to deploy local volatile memory, local persistent memory, and remote persistent memory | |
US10241550B2 (en) | Affinity aware parallel zeroing of memory in non-uniform memory access (NUMA) servers | |
US7653799B2 (en) | Method and apparatus for managing memory for dynamic promotion of virtual memory page sizes | |
JP4769308B2 (ja) | 仮想計算機管理機構、同管理機構を有する仮想計算機システム及び同システムにおけるページング処理方法 | |
US20100274947A1 (en) | Memory management method, memory management program, and memory management device | |
CN103577345A (zh) | 提高由多个***共享的存储高速缓存灵活性的方法和结构 | |
US20090307432A1 (en) | Memory management arrangements | |
US8677374B2 (en) | Resource management in a virtualized environment | |
JP2006350780A (ja) | キャッシュ割当制御方法 | |
CN112162818B (zh) | 一种虚拟内存分配方法、装置、电子设备及存储介质 | |
CN111679914B (zh) | 一种内存管理方法、***、计算机设备及存储介质 | |
CN111104219A (zh) | 虚拟核心与物理核心的绑定方法、装置、设备及存储介质 | |
US9697047B2 (en) | Cooperation of hoarding memory allocators in a multi-process system | |
CN107851065B (zh) | 预先缓存分配器 | |
US9720597B2 (en) | Systems and methods for swapping pinned memory buffers | |
CN115718663A (zh) | Binder驱动内存管理方法、装置、设备及存储介质 | |
US20190227957A1 (en) | Method for using deallocated memory for caching in an i/o filtering framework | |
CN114518962A (zh) | 内存的管理方法及装置 | |
CN113268356A (zh) | 基于LINUX***的多GPU板卡bounding的***、方法及介质 | |
CN109815192B (zh) | 一种嵌入式***内存管理方法及装置 | |
CN113918283A (zh) | 数据存储方法、装置、***及介质 | |
JP2021060636A (ja) | 情報処理装置、プログラムとメモリの割り当て方法 | |
KR20200121533A (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 |