一种内存管理的方法、系统、设备及可读存储介质与流程

文档序号:25586276发布日期:2021-06-22 17:01阅读:77来源:国知局
一种内存管理的方法、系统、设备及可读存储介质与流程

本申请涉及内存管理领域,特别涉及一种内存管理的方法、系统、设备及可读存储介质。



背景技术:

现有的控制系统资源有限,如何使用有限的硬件资源,使系统在运行效率满足需求的情况下,减少控制程序占用的系统资源,成为一门重要的课题。

传统内存管理方案主要有:内存交换技术,连续内存管理方式,非连续内存管理方式。

然而,传统内存管理方案致力于解决如何能最大限度的使用内存,其主要的方向在于如何优化算法,而算法的优化是存在天花板的,无论如何都不可能100%的使用内存;同时,算法的加入必然会影响到内存申请和释放的速度。

因此,如何在保证高速换入换出的同时提高内存的使用率提供的硬盘是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种内存管理的方法、系统、设备及可读存储介质,用于在保证高速换入换出的同时提高内存的使用率提供的硬盘。

为解决上述技术问题,本申请提供一种内存管理的方法,该方法包括:

根据程序发送的内存分配请求确定待分配内存的类型及大小;

根据所述待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存;

将所述内存分配给所述程序。

可选的,在根据程序发送的内存分配请求确定待分配内存的类型及大小之前,还包括:

获取所述程序需要的静态内存区域的大小;

根据所述静态区域的大小计算内存块的需求个数,并在所述主存空间中分配所述需求个数对应的内存块给所述程序作为静态内存区域。

可选的,所述待分配内存的类型包括交换内存,按照所述待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存,包括:

获取交换内存区域内的最大空闲交换区域的大小;

检测所述最大空闲交换区域的大小是否大于所述待分配内存的大小;

若是,则查找所述交换内存区域内第一个大于或等于所述待分配内存大小的空闲交换内存;

在所述空闲交换内存中划分与所述待分配内存的大小一致的交换内存。

可选的,还包括:

若所述最大空闲交换区域的大小小于所述待分配内存的大小,则从主存空间内申请指定个数的内存块加入到所述交换内存区域中。

可选的,还包括:

接收所述程序释放的交换内存;

判断所述交换内存区域中是否有可以与释放的交换内存进行合并的空闲交换区域;

若是,则将释放的交换内存与所述空闲交换区域进行合并;

若否,则在所述交换内存区域中增加释放的交换内存。

可选的,所述待分配内存的类型包括动态内存,根据所述待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存,包括:

遍历动态内存区域内每个空闲动态区域的大小;

对大于所述待分配内存的大小的空闲动态区域进行标记;

若存在与所述待分配内存的大小相同的最优空闲动态区域,则将所述最优空闲动态区域划分为分配给所述程序的动态内存;

若不存在与所述待分配内存的大小相同的最优空闲动态区域,则在标记后的空闲动态区域中划分与所述待分配内存的大小一致的动态内存。

可选的,将所述内存分配给所述程序,包括:

对所述内存在逻辑结构中的位置进行标记,以使所述程序根据所述逻辑结构中的标记区域确定对应的物理地址,并对位于所述物理地址的内存进行调用。

本申请还提供一种内存管理的系统,该系统包括:

确定模块,用于根据程序发送的内存分配请求确定待分配内存的类型及大小;

划分模块,用于根据所述待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存;

分配模块,用于将所述内存分配给所述程序。

本申请还提供一种内存管理设备,该内存管理设备包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述任一项所述内存管理的方法的步骤。

本申请还提供一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述内存管理的方法的步骤。

本申请所提供内存管理的方法,包括:根据程序发送的内存分配请求确定待分配内存的类型及大小;根据所述待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存;将所述内存分配给所述程序。

本申请所提供的技术方案,通过根据程序发送的内存分配请求确定待分配内存的类型及大小,然后在对应类型的内存区域中划分对应大小的内存分配给程序,针对不同应用场景采用不同算法,实现了在保证内存高速换入换出的同时,极大的提高了内存的使用率。同时,本申请具有高准确性、高效性的特点,适合具有确定性数据类型的控制系统内存管理需求。本申请同时还提供了一种内存管理的系统、设备及可读存储介质,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本申请实施例所提供的一种内存管理的方法的流程图;

图2为本申请实施例所提供的一种静态内存区域分配内存的示意图;

图3为图1所提供的一种内存管理的方法中s102的一种实际表现方式的流程图;

图4为图1所提供的一种内存管理的方法中s102的另一种实际表现方式的流程图;

图5为本申请是实力所提供的一种动态内存区域分配内存的示意图;

图6为本申请是实力所提供的另一种动态内存区域分配内存的示意图;

图7为本申请实施例所提供的一种内存管理的系统的结构图;

图8为本申请实施例所提供的一种内存管理设备的结构图。

具体实施方式

本申请的核心是提供一种内存管理的方法、系统、设备及可读存储介质,用于在保证高速换入换出的同时提高内存的使用率提供的硬盘。

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

现有的控制系统资源有限,如何使用有限的硬件资源,使系统在运行效率满足需求的情况下,减少控制程序占用的系统资源,成为一门重要的课题。

传统内存管理方案主要有:内存交换技术,连续内存管理方式,非连续内存管理方式。

内存交换技术是把处于等待状态(或在cpu调度原则下被剥夺运行权利)的程序从内存移到辅存,把内存空间腾出来,这一过程又叫换出;把准备好竞争cpu运行的程序从辅存移到内存,这一过程又称为换入。由于内存换入换出是借助高速硬盘来实现,往往是在多任务系统的重视,而控制系统中的任务实例较少,并不符合使用场景。

连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。有单一连续分配,固定分区分配,动态分配等各种方式,现在的控制系统的中广泛的使用这一内存分配技术。而这篇专利主要面对的问题和解决方案的方向就是其中的动态分配内存的方式。

专利“cn1181434c-自适应动态内存管理方法”,其公开了“一种自适应动态内存管理方法,对各种分片类型的内存,在运行过程中根据实际需要动态分配,使内存资源充分利用”;其次,专利“cn111190737a-一种针对嵌入式系统的内存分配方法”公开了“在tlsf算法的基础上进行了改进,加入了内存分块和参数自适应调节,能够根据申请大小来自适应调节每个内存块的内存分配结构,碎片率低”的技术方案。

以上两篇专利也是致力于解决如何能最大限度的使用内存,其主要的方向在于如何优化算法,而算法的优化是存在天花板的,无论如何都不可能100%的使用内存;同时,算法的加入必然会影响到内存申请和释放的速度。故本申请提供了一种内存管理的方法,用于解决上述问题。

请参考图1,图1为本申请实施例所提供的一种内存管理的方法的流程图。

其具体包括如下步骤:

s101:根据程序发送的内存分配请求确定待分配内存的类型及大小;

在程序运行之后,代码会通过申请方式获得内存,获得对应内存区域的使用权,使用完成之后通过释放的方式释放内存的使用权,而由于控制系统中控制器的资源有限,同时需要满足及时控制的需求,因此为了平衡资源和快速访问的需求,本申请对控制系统的内存的类型进行了划分,即这里提到的待分配内存的类型具体可以包括交换内存和存储内存,其中:

交换内存是快速申请和释放的内存,对于部分临时使用的数据,可以放在交换内存区域;

动态内存是无法确定是否会经常使用的内存,会根据分配算法保证内存的碎片尽量少,相应的,内存申请释放的速度比交换内存慢。

在一个具体实施例中,请参考图2,图2为本申请实施例所提供的一种静态内存区域分配内存的示意图,如图2所示,0x10000000和0x10010000为已分配为静态内存区域的内存块,0x10020000及后续的内存块为主存空间内未划分区域的内存块,由于程序在运行之前,需要一部分内存来存放代码和经常访问到的数据对象,该内存被称为静态内存区域,静态内存区域的分配相对简单,在程序加载之前,程序需要用到的静态内存区域的大小是确定的,根据需要的静态内存区域的大小计算需要的块个数,从主存中分配对应个数的内存块给程序,作为静态内存区域,内存块为静态内存区域分配的最小单位,即在根据程序发送的内存分配请求确定待分配内存的类型及大小之前,还可以执行如下步骤实现静态内存区域的建立:

获取程序需要的静态内存区域的大小;

根据静态区域的大小计算内存块的需求个数,并在主存空间中分配需求个数对应的内存块给程序作为静态内存区域。

s102:根据待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存;

由于待分配内存的类型具体可以包括交换内存和存储内存,因此内存区域的类型对应可以包括交换内存区域和动态内存区域,当待分配内存的类型为交换内存时,这里提到的按照待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存,其具体可以通过执行图3所示的步骤实现,下面请参考图3,图3为图1所提供的一种内存管理的方法中s102的一种实际表现方式的流程图,其具体包括如下步骤:

s301:获取交换内存区域内的最大空闲交换区域的大小;

交换内存分配的基本方法是,内存块的数据会记录当前最大的空闲交换区域,如果空闲交换区域的内存满足申请的内存大小,则直接从第一个满足条件的内存块中分配内存,分配内存的方式为,查找第一个满足条件的内存块,保证以最快的速度找到可用内存。

s302:检测最大空闲交换区域的大小是否大于待分配内存的大小;

若是,则进入步骤s303;

当最大空闲交换区域的大小大于待分配内存的大小时,则证明该最大空闲交换区域具有足够大的内存来分配待分配内存,此时执行步骤s303及步骤s304,查找交换内存区域内第一个大于或等于待分配内存大小的空闲交换内存,并在空闲交换内存中划分与待分配内存的大小一致的交换内存,以使程序调用该交换内存;

可选的,当最大空闲交换区域的大小小于待分配内存的大小时,则证明该最大空闲交换区域不具有足够大的内存来分配待分配内存,此时还可以从主存空间内申请指定个数的内存块加入到交换内存区域中,以使空闲交换区域具有足够大的内存来分配待分配内存,然后在空闲交换内存中划分与待分配内存的大小一致的交换内存,以使程序调用该交换内存。

s303:查找交换内存区域内第一个大于或等于待分配内存大小的空闲交换内存;

s304:在空闲交换内存中划分与待分配内存的大小一致的交换内存。

可选的,还可以通过执行如下步骤实现内存释放:

接收程序释放的交换内存;

判断交换内存区域中是否有可以与释放的交换内存进行合并的空闲交换区域;

若是,则将释放的交换内存与空闲交换区域进行合并;

若否,则在交换内存区域中增加释放的交换内存。

当待分配内存的类型为动态内存时,这里提到的按照待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存,其具体可以通过执行图4所示的步骤实现,下面请参考图4,图4为图1所提供的一种内存管理的方法中s102的另一种实际表现方式的流程图,其具体包括如下步骤:

s401:遍历动态内存区域内每个空闲动态区域的大小;

动态内存区域分配的基本方法是,从所有块中查找最匹配的内存块,使得块内的碎片尽量少。匹配的方法满足,如果当前空闲动态区域大小和待分配内存的大小相等,则返回当前空闲动态区域。如果该空闲动态区域的大小小于待分配内存的大小,则继续查找其他空闲动态区域。如果该空闲动态区域大于待分配内存的大小,则标记该区域。当遍历完所有空闲动态区域,均没有找到申请的内存大小和空闲动态区域的大小相等的空闲动态区域,则从标记的空闲动态区域为当次申请分配内存。

s402:对大于待分配内存的大小的空闲动态区域进行标记;

s403:若存在与待分配内存的大小相同的最优空闲动态区域,则将最优空闲动态区域划分为分配给程序的动态内存;

请参考图5,图5为本申请是实力所提供的一种动态内存区域分配内存的示意图,当待分配内存的大小为8字节时,此时遍历动态内存区域内每个空闲动态区域,发现第三空闲区域也为8字节,此时确定第三空闲区域为最优空闲动态区域,并将最优空闲动态区域划分为分配给程序的动态内存。

s404:若不存在与待分配内存的大小相同的最优空闲动态区域,则在标记后的空闲动态区域中划分与待分配内存的大小一致的动态内存。

请参考图6,图6为本申请是实力所提供的另一种动态内存区域分配内存的示意图,当待分配内存的大小为8字节时,此时遍历动态内存区域内每个空闲动态区域,发现大小为8字节的最优空闲区域,但是第三空闲区域的打小为12字节,因此对第三空闲区域进行标记,并在第三空闲区域中划分8字节作为动态内存。

可选的,还可以通过执行如下步骤实现内存释放:

接收程序释放的动态内存;

判断动态内存区域中是否有可以与释放的动态内存进行合并的空闲动态区域;

若是,则将释放的动态内存与空闲动态区域进行合并;

若否,则在动态内存区域中增加释放的动态内存。

s103:将内存分配给程序。

在一个具体实施例中,由于交换内存和动态内存都是在运行时申请和释放,而申请和使用的核心在于如何管理申请释放的数据结构,因此本申请抽象出一个逻辑层数据,将物理地址按照一定的方式管理起来。当程序申请内存时,从逻辑结构中标记相应的内存,释放后取消内存标记。该逻辑结构和实际物理内存地址的访问映射关系,实际上就是逻辑地址和物理地址的映射寻址过程,即这里提到的将内存分配给程序,其具体可以为:

对内存在逻辑结构中的位置进行标记,以使程序根据逻辑结构中的标记区域确定对应的物理地址,并对位于物理地址的内存进行调用。

基于上述技术方案,本申请所提供的一种内存管理的方法,通过根据程序发送的内存分配请求确定待分配内存的类型及大小,然后在对应类型的内存区域中划分对应大小的内存分配给程序,针对不同应用场景采用不同算法,实现了在保证内存高速换入换出的同时,极大的提高了内存的使用率。同时,本申请具有高准确性、高效性的特点,适合具有确定性数据类型的控制系统内存管理需求。

请参考图7,图7为本申请实施例所提供的一种内存管理的系统的结构图。

该系统可以包括:

确定模块100,用于根据程序发送的内存分配请求确定待分配内存的类型及大小;

划分模块200,用于根据待分配内存的类型及大小在对应类型的内存区域中划分对应大小的内存;

分配模块300,用于将内存分配给程序。

在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:

获取模块,用于获取程序需要的静态内存区域的大小;

计算模块,用于根据静态区域的大小计算内存块的需求个数,并在主存空间中分配需求个数对应的内存块给程序作为静态内存区域。

在上述实施例的基础上,在一个具体实施例中,待分配内存的类型包括交换内存,该划分模块200可以包括:

获取子模块,用于获取交换内存区域内的最大空闲交换区域的大小;

检测子模块,用于检测最大空闲交换区域的大小是否大于待分配内存的大小;

查找子模块,用于若最大空闲交换区域的大小大于待分配内存的大小,则查找交换内存区域内第一个大于或等于待分配内存大小的空闲交换内存;

第一划分子模块,用于在空闲交换内存中划分与待分配内存的大小一致的交换内存。

在上述实施例的基础上,在一个具体实施例中,该划分模块200还可以包括:

申请子模块,用于若最大空闲交换区域的大小小于待分配内存的大小,则从主存空间内申请指定个数的内存块加入到交换内存区域中。

在上述实施例的基础上,在一个具体实施例中,该系统还可以包括:

接收模块,用于接收程序释放的交换内存;

判断模块,用于判断交换内存区域中是否有可以与释放的交换内存进行合并的空闲交换区域;

合并模块,用于当交换内存区域中有可以与释放的交换内存进行合并的空闲交换区域时,将释放的交换内存与空闲交换区域进行合并;

增加模块,用于当交换内存区域中没有可以与释放的交换内存进行合并的空闲交换区域时,在交换内存区域中增加释放的交换内存。

在上述实施例的基础上,在一个具体实施例中,该划分模块200可以包括:

遍历子模块,用于遍历动态内存区域内每个空闲动态区域的大小;

第一标记子模块,用于对大于待分配内存的大小的空闲动态区域进行标记;

第二划分子模块,用于若存在与待分配内存的大小相同的最优空闲动态区域,则将最优空闲动态区域划分为分配给程序的动态内存;

第三划分子模块,用于若不存在与待分配内存的大小相同的最优空闲动态区域,则在标记后的空闲动态区域中划分与待分配内存的大小一致的动态内存。

在上述实施例的基础上,在一个具体实施例中,该分配模块300可以包括:

第二标记子模块,用于对内存在逻辑结构中的位置进行标记,以使程序根据逻辑结构中的标记区域确定对应的物理地址,并对位于物理地址的内存进行调用。

由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

请参考图8,图8为本申请实施例所提供的一种内存管理设备的结构图。

该内存管理设备800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)822(例如,一个或一个以上处理器)和存储器832,一个或一个以上存储应用程序842或数据844的存储介质830(例如一个或一个以上海量存储设备)。其中,存储器832和存储介质830可以是短暂存储或持久存储。存储在存储介质830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对装置中的一系列指令操作。更进一步地,处理器822可以设置为与存储介质830通信,在内存管理设备800上执行存储介质830中的一系列指令操作。

内存管理设备800还可以包括一个或一个以上电源828,一个或一个以上有线或无线网络接口850,一个或一个以上输入输出接口858,和/或,一个或一个以上操作系统841,例如windowsservertm,macosxtm,unixtm,linuxtm,freebsdtm等等。

上述图1至图6所描述的内存管理的方法中的步骤由内存管理设备基于该图8所示的结构实现。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置、设备和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。

作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,功能调用装置,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上对本申请所提供的一种内存管理的方法、系统、设备及可读存储介质进行了详细介绍。本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

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