CN111506426B - 内存管理方法、装置及电子设备 - Google Patents
内存管理方法、装置及电子设备 Download PDFInfo
- Publication number
- CN111506426B CN111506426B CN202010305350.4A CN202010305350A CN111506426B CN 111506426 B CN111506426 B CN 111506426B CN 202010305350 A CN202010305350 A CN 202010305350A CN 111506426 B CN111506426 B CN 111506426B
- Authority
- CN
- China
- Prior art keywords
- memory
- target program
- interrupt
- state type
- area
- 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/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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本公开实施例提供了一种内存管理方法、装置及电子设备,属于数据处理技术领域。该方法包括:在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;判断所述目标程序当前的状态类型是否为中断上下文;若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存;若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。通过本公开的处理方案,将系统内存空间划分为中断区和任务区,为不同状态类型的目标程序对应分配不同区域的内存空间,提高了内存管理系统的管理效率和适应性。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种内存管理方法、装置及电子设备。
背景技术
目前,在小型的嵌入式设备中,对于内存的管理优化方面,大多采用实时系统,对于某些特定的芯片,会涉及到两种内存管理系统同时使用的情况,其中第一类内存系统能够在任务上下文和中断上下文中分配和释放内存;而第二类内存系统只能在任务上下文中分配和释放内存。且第一类内存管理系统和第二类内存管理系统的内存空间独立,则会给系统整体带来内存的浪费,现有的内存管理方法,在开发时需要整体移植修改,开发量大难度高,只能由单独系统对其本身的内存进行分配和释放,由于程序处于不同阶段,无法分配内存或者占用内存过多无法释放。
可见,现有的内存管理方法存在管理效率和适应性较差的问题。
发明内容
有鉴于此,本公开实施例提供一种内存管理方法,至少部分解决现有技术中存在的问题。
第一方面,本公开实施例提供了一种内存管理方法,包括:
在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
判断所述目标程序当前的状态类型是否为中断上下文;
若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存;
若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。
根据本公开实施例的一种具体实现方式,所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤,包括:
获取所述目标程序需要分配的内存大小;
为所述目标程序分配所述中断区内的对应所述内存大小的目标内存;
将所述目标内存标记为占用内存。
根据本公开实施例的一种具体实现方式,所述方法还包括:
在接收到对应所述待释放的占用内存的内存释放请求时,判断所述占用内存是否在中断区;
若所述占用内存在中断区,则释放所述中断区的占用内存;
若所述占用内存在任务区,则根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作。
根据本公开实施例的一种具体实现方式,所述若所述占用内存在任务区,则根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作的步骤,包括:
判断所述目标程序当前的状态类型是否为中断上下文;
若所述目标程序当前的状态类型为中断上下文,则将所述占用内存的内存地址加入所述延后释放列表;
若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再释放所述任务区的占用内存。
根据本公开实施例的一种具体实现方式,所述终端内还包括第一系统和第二系统,第一系统对应管理所述中断区,第二系统对应管理所述任务区;
所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤之前,或者,所述若所述占用内存在中断区,则释放所述中断区的占用内存的步骤之前,所述方法还包括:
控制所述第一系统开启对应所述目标程序的状态类型防切换模式;
所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤之后,或者,所述若所述占用内存在中断区,则释放所述中断区的占用内存的步骤之后,所述方法还包括:
控制所述第一系统关闭对应所述目标程序的状态类型防切换模式。
根据本公开实施例的一种具体实现方式,所述先释放所述延后释放列表内的内存地址对应的内存的步骤之前,所述方法还包括:
控制所述第二系统开启对应所述目标程序的状态类型防切换模式;
所述为所述目标程序分配所述任务区的内存的步骤之后,或者,所述释放所述任务区的占用内存的步骤之后,所述方法还包括:
控制所述第二系统关闭对应所述目标程序的状态类型防切换模式。
根据本公开实施例的一种具体实现方式,所述控制所述第一系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
关闭所述第一系统的中断开关;
所述控制所述第一系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
打开所述第一系统的中断开关。
根据本公开实施例的一种具体实现方式,所述控制所述第二系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序进入所述第二系统的临界区;
所述控制所述第二系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序退出所述第二系统的临界区。
第二方面,本公开实施例提供了一种内存管理装置,包括:
获取模块,用于在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
判断模块,用于判断所述目标程序当前的状态类型是否为中断上下文;
执行模块,用于,若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存,或者,若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。
第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述第一方面或第一方面的任一实现方式中的内存管理方法。
第四方面,本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述第一方面或第一方面的任一实现方式中的内存管理方法。
第五方面,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述第一方面或第一方面的任一实现方式中的内存管理方法。
本公开实施例提供一种内存管理方案,包括:在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;判断所述目标程序当前的状态类型是否为中断上下文;若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存;若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。通过本公开的方案,将系统内存空间划分为中断区和任务区,为不同状态类型的目标程序对应分配不同区域的内存空间,提高了内存管理系统的管理效率和适应性。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本公开实施例提供的一种内存管理方法的流程示意图;
图2为本公开实施例提供的一种内存区域分配的示意图;
图3为本公开实施例提供的另一种内存管理方法的流程示意图;
图4为本公开实施例提供的另一种内存管理方法的流程示意图;
图5为本公开实施例提供的另一种内存管理方法的流程示意图;
图6为本公开实施例提供的另一种内存管理方法的流程示意图;
图7为本公开实施例提供的另一种内存管理方法的流程示意图;
图8为本公开实施例提供的一种内存管理装置的结构示意图;
图9为本公开实施例提供的电子设备示意图。
具体实施方式
下面结合附图对本公开实施例进行详细描述。
以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。
还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。
另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。
本公开实施例提供一种内存管理方法。本实施例提供的内存管理方法可以由一计算装置来执行,该计算装置可以实现为软件,或者实现为软件和硬件的组合,该计算装置可以集成设置在服务器、终端设备等中。
参见图1,本公开实施例提供的一种内存管理方法,主要包括:
S101,在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
本公开实施例提供的一种内存管理方法,可以应用于小型的嵌入式设备中的芯片等场景中的内存管理过程,避免在小型嵌入式设备运行程序过程中由于使用的内存管理系统不同导致管理效率和适应性较差的问题。
例如,如图2所示,考虑到在一个嵌入式设备系统的构建中,同时使用内存管理系统A和B。其中内存系统A能够在任务上下文和中断上下文中分配和释放内存;而内存系统B只能在任务上下文中分配和释放内存。如果A管理的内存大小为La,B管理的内存大小空间为Lb,则会给系统整体带来内存的浪费。可以将La与Lb的内存空间合并,为简化开发成本,增设对着两个管理系统的综合管控,以节省开发新的管理系统所需要的工作量和开发成本,可以在终端将内存空间初始化,然后将内存区域划分为中断区和任务区,考虑到程序大部分的运行状态是处于任务上下文,可以设置所述任务区的内存空间大于所述中断区的内存空间,还可以终端内设有延后释放列表,用于存放分配后的内存对应的内存地址,所述延后释放列表可以存储至少一个待释放的占用内存对应的内存地址,当然,所述延后释放列表内也可以不存储内存地址,直到有待释放的占用内存对应的内存地址加入至所述延后释放列表内进行存储。当处理器接收到目标程序发送的内存分配请求的信号时,可以先获取目标程序当前的状态类型,其中,所述状态类型为中断上下文或者任务上下文中的任一种。
S102,判断所述目标程序当前的状态类型是否为中断上下文。
具体实施时,考虑到所述目标程序不同的状态类型对应的内存管理系统和为所述目标程序分配内存的内存区域不同,为了避免浪费系统的内存空间,可以先根据获取的所述目标程序的状态类型,从而确定下一步操作。
若所述目标程序当前的状态类型为中断上下文,则执行步骤S103,为所述目标程序分配所述中断区的内存。
若所述目标程序当前的状态类型为任务上下文,则执行步骤S104,先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。
在系统调用时,程序的运行状态会发生改变,在对所述目标程序进行内存分配时,需要根据所述目标程序当前的状态类型确定分配哪个区域的内存空间,以使得对系统内存利用更加充分。
例如,当处理器获取的所述目标程序当前状态类型为中断上下文时,则为处于中断上下文状态的所述目标程序分配中断区的内存,当处理器获取的所述目标程序当前状态类型为任务上下文时,则为处于任务上下文状态的所述目标程序分配任务区的内存。
上述本公开实施例提供的内存管理方法,将终端的内存空间划分为中断区和任务区,通过判断目标程序的状态类型,为不同状态类型的目标程序对应分配不同区域的内存空间,以及释放延后释放列表内的内存地址对应的内存,提高了内存管理系统的管理效率和适应性。
在上述实施例的基础上,如图3所示,步骤S103所述的,若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存,可以包括:
S301,获取所述目标程序需要分配的内存大小;
处理器获取所述目标程序所需对应的内存大小,精准分配相适应的内存空间。
例如,处理器获取所述目标程序对应的内存大小为15KB,则记录下所述目标程序所需的内存大小。
S302,为所述目标程序分配所述中断区内的对应所述内存大小的目标内存;
处理器根据所述获取是所述目标程序所需对应的内存大小,从所述目标程序状态类型对应的内存区域为所述目标程序分配所述内存大小一致的内存。
例如,当所述目标程序的状态类型为中断上下文时,从所述中断区为所述目标程序分配15KB的内存空间,当然,若所述目标程序的状态类型是任务上下文,从所述任务区为所述目标程序分配15KB的目标内存。
S303,将所述目标内存标记为占用内存。
在为所述目标程序分配对应的目标内存后,为了减少后续为其他程序分配内存空间时的计算量,以及,为了后续释放操作的便利,可以将为所述目标程序分配的目标内存标记为占用内存。
例如,所述终端的内存区域对应内存地址,可以设置0至90的内存地址区间为任务区,91至100的内存地址区间为中断区,当在所述中断区内为当前状态类型为中断上下文时,可以将所述中断区内的91至92区间的内存空间为所述目测程序分配,然后将所述内存空间标记为占用内存。
在内存管理过程中,除了为在运行的目标程序分配占用内存之外,还需要将已被分配的占用内存释放,以保持内存的循环利用。在上述实施例的基础上,如图4所示,所述方法还可以包括:
S401,在接收到对应所述待释放的占用内存的内存释放请求时,判断所述占用内存是否在中断区;
在目标程序执行一个操作完毕后,可以选择释放之前的占用内存,当然,当另一个程序运行时,也可以选择释放之前的占用内存,或者,主动调用释放占用内存,以避免内存占用过高导致处理器高频工作降低使用寿命。
例如,处理器可以根据接收到的对应所述待释放的占用内存的内存释放请求进行释放占用内存操作,当然,在释放前需要确定所述占用内存位于哪个内存区域,可以根据占用内存的内存地址在中断区还是任务区的内存地址区间确定所述占用内存对应的内存区域,从而确定下一步操作。
若所述占用内存在中断区,则执行步骤S402,释放所述中断区的占用内存;
例如,当确定所述占用内存在中断区时,处理器对所述中断区的占用内存进行释放。
若所述占用内存在任务区,则执行步骤S403,根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作。
具体实施时,当确定所述占用内存在任务区时,考虑到占用所述任务区的内存空间的程序较多,若直接释放会导致程序运行出错或者内存泄露等问题,可以根据所述占用内存对应的所述目标程序当前的状态类型确定对应的释放内存操作。
在上述实施例的基础上,如图5所示,步骤S303所述的,若所述占用内存在任务区,则根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作的步骤,还可以包括:
S501,判断所述目标程序当前的状态类型是否为中断上下文;
具体实施时,考虑到在系统调用时,程序处于中断上下文时,程序所处的优先级相对较高,程序锁占用的内存无法被直接释放,所以需要先判断所述目标程序当前的状态类型,从而确定下一步操作。
若所述目标程序当前的状态类型为中断上下文,则执行步骤S502,将所述占用内存的内存地址加入所述延后释放列表;
例如,若处理器确定所述目标程序当前的状态类型为中断上下文,则无法释放所述占用内存,考虑到下次重新判断所述目标程序需要重新计算,可以将所述占用内存的内存地址存入所述延后释放列表内,以使得在所述目标程序在状态类型切换后,在下一次释放内存操作时,可以直接释放所述占用内存。
若所述目标程序当前的状态类型为任务上下文,则执行步骤S503,先释放所述延后释放列表的内存地址对应的内存,再释放所述任务区的占用内存。
例如,当处理器确定所述目标程序当前的状态类型为任务上下文时,可以直接释放所述占用内存,则将所述延后释放列表存储的内存地址对应的内存进行释放后,再将所述任务区的占用内存释放。
在上述实施例的基础上,所述终端内还包括第一系统和第二系统,第一系统对应管理所述中断区,第二系统对应管理所述任务区;
具体实施时,考虑到在一个嵌入式设备系统的构建中,同时使用内存管理系统A和B。其中内存系统A能够在任务上下文和中断上下文中分配和释放内存;而内存系统B只能在任务上下文中分配和释放内存。如果A管理的内存大小为La,B管理的内存大小空间为Lb,则会给系统整体带来内存的浪费。为简化开发成本,增设对着两个管理系统的综合管控,以节省开发新的管理系统所需要的工作量和开发成本,可以将La与Lb的内存空间合并,并根据实际需求将合并后的内存空间重新划分为所述中断区和所述任务区,内存系统A对所述中断区的内存进行管理,内存系统B对所述任务区的内存进行管理,在使用过程中避免内存空间占用过高或者使用过少造成资源浪费。
步骤S103所述的若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存之前,或者,步骤S402所述的若所述占用内存在中断区,则释放所述中断区的占用内存之前,所述方法还可以包括:
控制所述第一系统开启对应所述目标程序的状态类型防切换模式;
考虑到在目标程序运行时,系统调用会使得所述目标程序状态类型切换,在分配或者释放内存时,状态类型的切换会影响分配或者释放内存的过程,可以在每次分配或者释放内存操作之前,先控制所述第一系统开启对应所述目标程序的状态类型防切换模式。
当所述第一系统为所述目标程序分配所述中断区的内存或者释放所述中断区的占用内存时,控制所述第一系统开启对应所述目标程序的状态类型防切换模式,使得在系统运行多个程序时,所述目标程序无法被其他程序打断,也无法被切换状态类型。例如,当所述第一系统开启对应所述目标程序的状态类型防切换模式时,所述目标程序的状态保持在中断上下文。
步骤S103所述的所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存之后,或者,步骤S402所述的若所述占用内存在中断区,则释放所述中断区的占用内存之后,所述方法还可以包括:
控制所述第一系统关闭对应所述目标程序的状态类型防切换模式。
具体实施时,在所述第一系统为所述目标程序分配所述中断区的内存或者释放所述中断区的占用内存之后,可以控制所述第一系统关闭对应所述目标程序的状态类型防切换模式,以使得所述目标程序可以被系统正常调用。
进一步的,所述先释放所述延后释放列表内的内存地址对应的内存的步骤之前,所述方法还可以包括:
控制所述第二系统开启对应所述目标程序的状态类型防切换模式;
考虑到考虑到在目标程序运行时,系统调用会使得所述目标程序状态类型切换,或者处于任务上下文的程序会被处于中断上下文的程序打断,在分配或者释放内存时,状态类型的切换会影响分配或者释放内存的过程,可以在每次分配或者释放内存操作之前,先控制所述第二系统开启对应所述目标程序的状态类型防切换模式。
例如,当所述第二系统为所述目标程序分配所述任务区的内存或者释放所述任务区的占用内存时,控制所述第二系统开启对应所述目标程序的状态类型防切换模式,使得在系统运行多个程序时,所述目标程序无法被其他优先级更高的程序打断,也无法被切换状态类型。
所述为所述目标程序分配所述任务区的内存的步骤之后,或者,所述释放所述任务区的占用内存的步骤之后,所述方法还可以包括:
控制所述第二系统关闭对应所述目标程序的状态类型防切换模式。
具体实施时,在所述第二系统为所述目标程序分配所述任务区的内存或者释放所述任务区的占用内存之后,可以控制所述第二系统关闭对应所述目标程序的状态类型防切换模式,以使得所述目标程序可以被系统正常调用。
在上述实施例的基础上,所述控制所述第一系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
关闭所述第一系统的中断开关;
例如,所述第一系统内可以设置有中断开关,当所述第一系统为所述目标程序分配所述中断区的内存或者释放所述中断区的占用内存时,关闭所述第一系统的中断开关,关闭所述第一系统的中断开关后,以使得所述目标程序不能切换状态类型。
所述控制所述第一系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
打开所述第一系统的中断开关。
具体实施时,当所述第一系统为所述目标程序分配中断区的内存或者释放所述中断区的占用内存后,打开所述第一系统的中断开关,以使得所述目标程序可以被系统正常调用。
在上述实施例的基础上,所述控制所述第二系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序进入所述第二系统的临界区;
临界区指的是一个访问共用资源的程序片段,而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时,其他线程或是进程必须等待,有一些同步的机制必须在临界区段的进入点与离开点实现,以确保这些共用资源是被互斥获得使用,例如,所述第二系统内可以设置有临界区,当所述第二系统为所述目标程序分配所述任务区的内存或者释放所述任务区的占用内存时,打开临界区开关控制所述目标程序进入临界区,以使得所述目标程序不能切换状态类型,且不能被处于中断上下文的其他程序打断。
所述控制所述第二系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序退出所述第二系统的临界区。
具体实施时,当所述第二系统为所述目标程序分配任务区的内存或者释放所述任务区的占用内存后,关闭临界区开关控制所述目标程序退出临界区,以使得所述目标程序可以被系统正常调用且恢复所述目标程序正常的线程优先级。
下面将结合两个具体实施方式分别对内存分配和内存释放过程进行具体解释。
如图6所示,当进行内存分配操作时,所述方法可以包括:
S601,判断程序是否在中断上下文;
若程序在中断上下文,则执行步骤S602,关闭系统A中断;
S603,调用系统A分配中断区内存;
S604,打开系统A中断;
若程序在任务上下文,则执行步骤S605,进入系统B临界区;
S606,释放延后释放列表中的内存;
S607,调用系统B分配任务区内存;
S608,退出系统B临界区。
具体实施时,当为程序分配内存时,可以先判断程序是否在中断上下文,如果程序在中断上下文,则关闭系统A中断,然后调用系统A在中断区为程序分配内存,分配好内存后打开系统A中断,结束内存分配操作。同时,如果程序在任务上下文,则进入系统B临界区,然后调用系统B在任务区为程序分配内存,分配好内存后退出系统B临界区,结束内存分配操作。
如图7所示,当进行内存释放操作时,所述方法可以包括:
S701,判断内存是否在中断区;
若内存在中断区,则执行步骤S702,关闭系统A中断;
S703,调用系统A中内存释放中断区;
S704,打开系统A中断;
若内存在任务区,则执行步骤S705,判断程序是否在中断上下文;
若程序在中断上下文,则执行步骤S706,该内存加入延后释放列表;
若程序在任务上下文,则执行步骤S707,进入系统B临界区;
S708,释放延后释放列表中的内存;
S709,调用系统B内存释放该片区;
S710,退出系统B临界区。
具体实施时,当需要释放内存时,可以先判断待释放的内存是否在中断区,如果待释放的内存在中断区,则关闭系统A中断,然后调用系统A释放中断区的占用内存,释放内存后打开系统A中断,结束内存释放操作。同时,如果待释放的内存在任务区,则还需要判断待释放的内存对应的程序是否在中断上下文,如果待释放的内存对应的程序在中断上下文,则将该内存的内存地址加入到延后释放列表内,如果待释放的内存对应的程序在任务上下文,则进入系统B临界区,然后释放延后释放列表中的内存区,再调用系统B内存释放该片区,释放内存后退出系统B临界区,结束内存释放操作。
与上面的方法实施例相对应,参见图8,本公开实施例还提供了一种内存管理装置80,包括:
获取模块801,用于在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
判断模块802,用于判断所述目标程序当前的状态类型是否为中断上下文;
执行模块803,用于,若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存,或者,若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。
图8所示装置可以对应的执行上述方法实施例中的内容,本实施例未详细描述的部分,参照上述方法实施例中记载的内容,在此不再赘述。
参见图9,本公开实施例还提供了一种电子设备90,该电子设备包括:
至少一个处理器;以及,
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的内存管理方法。
本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的内存管理方法。
本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的内存管理方法。
下面参考图9,其示出了适于用来实现本公开实施例的电子设备90的结构示意图。本公开实施例中的电子设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、PDA(个人数字助理)、PAD(平板电脑)、PMP(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图9示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,电子设备90可以包括处理装置(例如中央处理器、图形处理器等)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储装置908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有电子设备90操作所需的各种程序和数据。处理装置901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
通常,以下装置可以连接至I/O接口905:包括例如触摸屏、触摸板、键盘、鼠标、图像传感器、麦克风、加速度计、陀螺仪等的输入装置906;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置907;包括例如磁带、硬盘等的存储装置908;以及通信装置909。通信装置909可以允许电子设备90与其他设备进行无线或有线通信以交换数据。虽然图中示出了具有各种装置的电子设备90,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置909从网络上被下载和安装,或者从存储装置908被安装,或者从ROM 902被安装。在该计算机程序被处理装置901执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备可以执行上述方法实施例的相关步骤。
或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备可以执行上述方法实施例的相关步骤。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。
应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。
以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。
Claims (10)
1.一种内存管理方法,其特征在于,应用于终端,所述终端的内存区域包括中断区和任务区,所述终端内还设有延后释放列表,所述延后释放列表存储有至少一个待释放的占用内存对应的内存地址,所述方法包括:
在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
判断所述目标程序当前的状态类型是否为中断上下文;
若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存;
若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再为所述目标程序分配所述任务区的内存。
2.根据权利要求1所述的方法,其特征在于,所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤,包括:
获取所述目标程序需要分配的内存大小;
为所述目标程序分配所述中断区内的对应所述内存大小的目标内存;
将所述目标内存标记为占用内存。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在接收到对应所述待释放的占用内存的内存释放请求时,判断所述占用内存是否在中断区;
若所述占用内存在中断区,则释放所述中断区的占用内存;
若所述占用内存在任务区,则根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作。
4.根据权利要求3所述的方法,其特征在于,所述若所述占用内存在任务区,则根据所述占用内存对应的所述目标程序当前的状态类型确定对应的内存释放操作的步骤,包括:
判断所述目标程序当前的状态类型是否为中断上下文;
若所述目标程序当前的状态类型为中断上下文,则将所述占用内存的内存地址加入所述延后释放列表;
若所述目标程序当前的状态类型为任务上下文,则先释放所述延后释放列表内的内存地址对应的内存,再释放所述任务区的占用内存。
5.根据权利要求4所述的方法,其特征在于,所述终端内还包括第一系统和第二系统,第一系统对应管理所述中断区,第二系统对应管理所述任务区;
所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤之前,或者,所述若所述占用内存在中断区,则释放所述中断区的占用内存的步骤之前,所述方法还包括:
控制所述第一系统开启对应所述目标程序的状态类型防切换模式;
所述若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配所述中断区的内存的步骤之后,或者,所述若所述占用内存在中断区,则释放所述中断区的占用内存的步骤之后,所述方法还包括:
控制所述第一系统关闭对应所述目标程序的状态类型防切换模式。
6.根据权利要求5所述的方法,其特征在于,所述先释放所述延后释放列表内的内存地址对应的内存的步骤之前,所述方法还包括:
控制所述第二系统开启对应所述目标程序的状态类型防切换模式;
所述为所述目标程序分配所述任务区的内存的步骤之后,或者,所述释放所述任务区的占用内存的步骤之后,所述方法还包括:
控制所述第二系统关闭对应所述目标程序的状态类型防切换模式。
7.根据权利要求5的方法,其特征在于,所述控制所述第一系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
关闭所述第一系统的中断开关;
所述控制所述第一系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
打开所述第一系统的中断开关。
8.根据权利要求6的方法,其特征在于,所述控制所述第二系统开启对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序进入所述第二系统的临界区;
所述控制所述第二系统关闭对应所述目标程序的状态类型防切换模式的步骤,包括:
控制所述目标程序退出所述第二系统的临界区。
9.一种内存管理装置,其特征在于,包括:
获取模块,用于在接收到内存分配请求时,获取目标程序当前的状态类型,所述状态类型为中断上下文或者任务上下文中的任一种;
判断模块,用于判断所述目标程序当前的状态类型是否为中断上下文;
执行模块,用于,若所述目标程序当前的状态类型为中断上下文,则为所述目标程序分配中断区的内存,或者,若所述目标程序当前的状态类型为任务上下文,则先释放延后释放列表内的内存地址对应的内存,再为所述目标程序分配任务区的内存。
10.一种电子设备,其特征在于,所述电子设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行前述权利要求1-8中任一项所述的内存管理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010305350.4A CN111506426B (zh) | 2020-04-17 | 2020-04-17 | 内存管理方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010305350.4A CN111506426B (zh) | 2020-04-17 | 2020-04-17 | 内存管理方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111506426A CN111506426A (zh) | 2020-08-07 |
CN111506426B true CN111506426B (zh) | 2021-05-04 |
Family
ID=71869353
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010305350.4A Active CN111506426B (zh) | 2020-04-17 | 2020-04-17 | 内存管理方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111506426B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112363828B (zh) * | 2020-10-30 | 2024-01-12 | 北京罗克维尔斯科技有限公司 | 内存碎片管理方法、装置、车载系统及车辆 |
CN116821893B (zh) * | 2023-08-31 | 2023-11-28 | 北京华云安信息技术有限公司 | 代码执行方法、装置、电子设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
CN109086193A (zh) * | 2017-06-13 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 监控方法、装置及系统 |
CN109857553A (zh) * | 2019-01-11 | 2019-06-07 | 华为技术有限公司 | 内存管理方法及装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101493784B (zh) * | 2009-02-24 | 2011-09-21 | 中国运载火箭技术研究院 | 一种基于分布仿真的反射内存网动态内存管理方法 |
CN101625659A (zh) * | 2009-07-03 | 2010-01-13 | 无敌科技(西安)有限公司 | 嵌入式系统实时监控内存的方法 |
CN103838634B (zh) * | 2014-03-18 | 2017-02-22 | 上海电机学院 | 一种基于内存资源供给调度虚拟机数量的方法及系统 |
CN107408034B (zh) * | 2015-03-23 | 2022-02-18 | 英特尔公司 | 执行上下文迁移方法和装置 |
CN105740078B (zh) * | 2016-01-29 | 2020-09-08 | 华为技术有限公司 | 一种内存管理方法、装置及终端 |
CN108536526B (zh) * | 2017-03-02 | 2022-09-13 | 腾讯科技(深圳)有限公司 | 一种基于可编程硬件的资源管理方法以及装置 |
WO2019028682A1 (zh) * | 2017-08-08 | 2019-02-14 | 深圳前海达闼云端智能科技有限公司 | 一种多系统共享内存的管理方法及装置 |
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN109558235B (zh) * | 2018-11-30 | 2020-11-06 | 杭州迪普科技股份有限公司 | 一种处理器的调度方法、装置及计算机设备 |
-
2020
- 2020-04-17 CN CN202010305350.4A patent/CN111506426B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105938458A (zh) * | 2016-04-13 | 2016-09-14 | 上海交通大学 | 软件定义的异构混合内存管理方法 |
CN109086193A (zh) * | 2017-06-13 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 监控方法、装置及系统 |
CN109857553A (zh) * | 2019-01-11 | 2019-06-07 | 华为技术有限公司 | 内存管理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111506426A (zh) | 2020-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9612648B2 (en) | System and method for memory channel interleaving with selective power or performance optimization | |
US20150286565A1 (en) | System and method for allocating memory to dissimilar memory devices using quality of service | |
CN114020470B (zh) | 资源分配方法、装置、可读介质及电子设备 | |
CN111475235B (zh) | 函数计算冷启动的加速方法、装置、设备及存储介质 | |
CN111506426B (zh) | 内存管理方法、装置及电子设备 | |
US20210400657A1 (en) | Communication method and apparatus, computer-readable medium, and electronic device | |
WO2021027875A1 (zh) | 多窗口并行方法及装置、终端和存储介质 | |
US9547576B2 (en) | Multi-core processor system and control method | |
WO2023174013A1 (zh) | 显存分配方法、装置、介质及电子设备 | |
CN105426231A (zh) | 多进程处理装置和多进程处理方法 | |
CN116166395A (zh) | 任务调度方法、装置、介质及电子设备 | |
CN115543965A (zh) | 跨机房数据处理方法、设备、存储介质及程序产品 | |
CN117130571A (zh) | 基于多核异构系统的显示方法、设备、芯片、存储介质 | |
US9405470B2 (en) | Data processing system and data processing method | |
CN113391882B (zh) | 虚拟机内存管理方法、装置、存储介质及电子设备 | |
CN111538717B (zh) | 数据处理的方法、装置、电子设备及计算机可读介质 | |
CN111182062B (zh) | 服务多活调用方法、系统及电子设备 | |
CN111625326A (zh) | 任务管线执行方法、装置及电子设备 | |
CN110609728A (zh) | 页面生成方法、装置及电子设备 | |
CN114253704A (zh) | 一种分配资源的方法及装置 | |
CN113138850A (zh) | 资源分配方法、装置 | |
CN114707179B (zh) | 集群系统的资源授权方法、装置、介质及电子设备 | |
CN112764941B (zh) | 资源访问方法、装置、电子设备及计算机可读存储介质 | |
CN112148448B (zh) | 资源分配方法、装置、设备和计算机可读介质 | |
CN110221923B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |