内存管理装置和方法与流程

文档序号:13625740阅读:178来源:国知局
内存管理装置和方法与流程

本发明涉及计算机领域,特别涉及一种内存管理装置和方法。



背景技术:

随着计算机技术和通信技术的发展,数据通信业务在人们的生活中已经越来越常见,数据通信业务中通常包括数据接收、数据存储以及数据转发的业务,而以上这些业务均需要对内存进行频繁地操作,具体地,接收数据时要申请内存,而后将数据存储在申请到的内存中,数据经过特定处理后再转发出去,需要释放内存,数据通信业务的频繁访问内存特性对内存管理提出了更高的要求,也即是碎片少、效率高、抗突发能力强等。

相关技术中,通常采用静态的方式进行内存管理,即,将内存配置为多个大小相同的内存块,再将每个内存块配置为多个长度相同的内存分片,将同一长度的内存分片的内存地址存储至同一个内存队列,以采取内存队列的形式来维护内存分片的分配,例如,在有业务申请内存时,从上述内存队列头部取出一个空闲内存的地址进行分配,在释放内存时,将待释放内存的地址存储于上述内存队列尾部。

在实现本发明的过程中,发明人发现现有技术至少存在以下问题:

上述静态方式的内存管理,对于每种业务,均设置了固定数量的内存块,然而,业务往往具有突发性,一个业务很可能无法全部占用一个内存队列所占用的所有内存块,从而导致内存资源的浪费,内存使用效率较低。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种内存管理装置和方法。

首先,本发明提供了一种内存管理装置,所述内存管理装置包括多个功能模块,该多个功能模块用于监控至少两个内存块的状态;当一个内存块已进行内存分片时,则所述内存块的状态为占用状态,当一个内存块未进行内存分片时,则所述内存块的状态为空闲状态;监控至少两个内存分片的状态,所述至少两个内存分片包括至少两种分片长度,每个内存分片由内存块划分而成;如果同一长度的空闲内存分片数量少于内存块申请阈值,则根据所述至少两个内存块的状态,申请处于空闲状态的内存块进行划分;如果同一长度的空闲内存分片数量大于内存块释放阈值,则释放所述同一长度的空闲内存分片;接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片;根据所述内存分片管理模块分配到的空闲内存分片的内存地址,存储所述业务请求对应的数据。

本发明提供的内存管理装置,通过对内存块和内存分片进行分层次管理,并根据内存分片的实际占用情况,灵活的申请或释放内存块,实现了内存块的动态管理,能够满足业务的突发性,增强了内存资源的共享性,避免了资源浪费,提高了内存使用效率。

其次,本发明还提供了一种内存管理方法,该方法具体包括:监控至少两个内存块的状态;当一个内存块已进行内存分片时,则所述内存块的状态为占用状态,当一个内存块未进行内存分片时,则所述内存块的状态为空闲状态;监控至少两个内存分片的状态,所述至少两个内存分片包括至少两种分片长度,每个内存分片由内存块划分而成;如果同一长度的空闲内存分片数量少于内存块申请阈值,则根据所述至少两个内存块的状态,申请处于空闲状态的内存块进行划分;如果同一长度的空闲内存分片数量大于内存块释放阈值,则释放所述同一长度的空闲内存分片;在接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片;根据分配到的空闲内存分片的内存地址,存储所述业务请求对应的数据。

本发明提供的内存管理方法,通过对内存块和内存分片进行分层次管理,并根据内存分片的实际占用情况,灵活的申请或释放内存块,实现了内存块的动态管理,能够满足业务的突发性,增强了内存资源的共享性,避免了资源浪费,提高了内存使用效率。

在一种可能的设计中,所述方法还包括:

对于任一种长度的内存分片,若在预设时间内没有接收到对所述长度的内存分片的申请,则释放所述长度的内存分片所占用的内存块。

通过上述内存管理方法,可以根据业务实际的发生情况,判断是否需要回收内存块,供其他业务对应的内存分片来进行申请,以提高内存使用效率。

在一种可能的设计中,对于任一种长度的内存分片,以未使用内存块队列、已耗尽内存块队列以及正使用内存块队列的形式管理所述长度的内存分片所占用的内存块的内存地址;

所述未使用内存块队列包括所述长度的内存分片中所有内存分片均空闲的内存块的内存地址;

所述已耗尽内存块队列包括所述长度的内存分片中所有内存分片均被占用的内存块的内存地址;

所述正使用内存块队列包括所述长度的内存分片中部分内存分片被占用的内存块的内存地址。

通过上述内存管理方法,采用多种职能的队列对某种长度的内存分片所占用的内存块进行管理,能够大大减少业务申请内存时的延时。另外,可以减少页表切换,降低查找页表以及切换页表等所需的计算量。

在一种可能的设计中,在接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片包括:

在接收到所述业务请求时,从所述业务请求对应长度的空闲内存分片中,优先分配所占用内存块中空闲内存分片数量最少的内存块中的空闲内存分片。

通过上述内存管理方法,可以保证内存中数据写入的连续性,避免产生过多的内存碎片。

在一种可能的设计中,对于任一种长度的内存分片,采用多级位图bitmap查找表的方式维护所述长度的内存分片的占用情况。

通过多级位图bitmap查找表的方式,可以有序的维护内存分片的实际占用情况。

在一种可能的设计中,所述方法还包括:

对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否小于第一预设阈值;

若所述比例小于所述第一预设阈值,则卸载所述大小的内存块中至少一个处于空闲状态的内存块。

在一种可能的设计中,所述方法还包括:

对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否大于第二预设阈值;

若所述比例大于所述第二预设阈值,则从系统内存中加载至少一个处于空闲状态的内存块。

通过根据内存块的实际占用情况,来确定从系统内存进行加载或卸载,可以实现灵活的内存管理,也能够满足不同场景下业务的数据量需求。

在一种可能的设计中,所述方法还包括:

对于任一种长度的内存分片,以双指针后进先出lifo缓存的形式,缓存预设数量的所述长度的空闲内存分片的内存地址;

相应地,在接收到业务请求时,从与所述业务请求响应的所述双指针后进先出lifo缓存中分配空闲内存分片的内存地址。

通过上述内存管理方法,采用预先获取一些内存分片的内存地址,以备为业务请求分配使用,可以降低对空闲内存分片的定位所需的时间,大大降低了业务申请内存的时延。

在一种可能的设计中,所述方法还包括:

对于任一种长度的内存分片,检测所述双指针后进先出lifo缓存中的内存地址数量低于预设阈值;

若所述内存地址数量低于所述预设阈值,则获取预设数量的内存分片的内存地址存储至所述双指针后进先出lifo缓存中。

通过上述内存管理方法,可以保证缓存中内存地址数量,大大降低了业务申请内存的时延。

再次,本发明实施例还提供了一种数据通信设备,该数据通信设备包括接收设备、发送设备、系统主机、内存管理设备和内存,其中,内存管理设备被配置为监控至少两个内存块的状态;当一个内存块已进行内存分片时,则所述内存块的状态为占用状态,当一个内存块未进行内存分片时,则所述内存块的状态为空闲状态;监控至少两个内存分片的状态,所述至少两个内存分片包括至少两种分片长度,每个内存分片由内存块划分而成;如果同一长度的空闲内存分片数量少于内存块申请阈值,则根据所述至少两个内存块的状态,申请处于空闲状态的内存块进行划分;如果同一长度的空闲内存分片数量大于内存块释放阈值,则释放所述同一长度的空闲内存分片;在接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片;根据分配到的空闲内存分片的内存地址,存储所述业务请求对应的数据。

本发明提供的数据通信设备,通过对内存块和内存分片进行分层次管理,并根据内存分片的实际占用情况,灵活的申请或释放内存块,实现了内存块的动态管理,能够满足业务的突发性,增强了内存资源的共享性,避免了资源浪费,提高了内存使用效率。

在一种可能的设计中,所述方法还内存管理设备被配置为对于任一种长度的内存分片,若在预设时间内没有接收到对所述长度的内存分片的申请,则释放所述长度的内存分片所占用的内存块。

通过上述数据通信设备,可以根据业务实际的发生情况,判断是否需要回收内存块,供其他业务对应的内存分片来进行申请,以提高内存使用效率。

在一种可能的设计中,对于任一种长度的内存分片,以未使用内存块队列、已耗尽内存块队列以及正使用内存块队列的形式管理所述长度的内存分片所占用的内存块的内存地址;

所述未使用内存块队列包括所述长度的内存分片中所有内存分片均空闲的内存块的内存地址;

所述已耗尽内存块队列包括所述长度的内存分片中所有内存分片均被占用的内存块的内存地址;

所述正使用内存块队列包括所述长度的内存分片中部分内存分片被占用的内存块的内存地址。

通过上述数据通信设备,采用多种职能的队列对某种长度的内存分片所占用的内存块进行管理,能够大大减少业务申请内存时的延时。另外,可以减少页表切换,降低查找页表以及切换页表等所需的计算量。

在一种可能的设计中,内存管理设备被配置为在接收到所述业务请求时,从所述业务请求对应长度的空闲内存分片中,优先分配所占用内存块中空闲内存分片数量最少的内存块中的空闲内存分片。

通过上述数据通信设备,可以保证内存中数据写入的连续性,避免产生过多的内存碎片。

在一种可能的设计中,对于任一种长度的内存分片,采用多级位图bitmap查找表的方式维护所述长度的内存分片的占用情况。

通过多级位图bitmap查找表的方式,可以有序的维护内存分片的实际占用情况。

在一种可能的设计中,内存管理设备被配置为对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否小于第一预设阈值;若所述比例小于所述第一预设阈值,则卸载所述大小的内存块中至少一个处于空闲状态的内存块。

在一种可能的设计中,内存管理设备被配置为对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否大于第二预设阈值;若所述比例大于所述第二预设阈值,则从系统内存中加载至少一个处于空闲状态的内存块。

通过根据内存块的实际占用情况,来确定从系统内存进行加载或卸载,可以实现灵活的内存管理,也能够满足不同场景下业务的数据量需求。

在一种可能的设计中,内存管理设备被配置为对于任一种长度的内存分片,以双指针后进先出lifo缓存的形式,缓存预设数量的所述长度的空闲内存分片的内存地址;相应地,在接收到业务请求时,从与所述业务请求响应的所述双指针后进先出lifo缓存中分配空闲内存分片的内存地址。

通过上述数据通信设备,采用预先获取一些内存分片的内存地址,以备为业务请求分配使用,可以降低对空闲内存分片的定位所需的时间,大大降低了业务申请内存的时延。

在一种可能的设计中,内存管理设备被配置为对于任一种长度的内存分片,检测所述双指针后进先出lifo缓存中的内存地址数量低于预设阈值;

若所述内存地址数量低于所述预设阈值,则获取预设数量的内存分片的内存地址存储至所述双指针后进先出lifo缓存中。

通过上述数据通信设备,可以保证缓存中内存地址数量,大大降低了业务申请内存的时延。

附图说明

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

图1是本发明实施例提供的数据通信设备的硬件结构示意图。

图2是本发明实施例提供的内存管理装置的结构示意图。

图3是本发明实施例提供的内存块管理模块维护的队列的示意图。

图4是本发明实施例提供的三级bitmap查找表的示意图。

图5是本发明实施例提供的内存块队列和内存分片队列的配置方式示意图。

图6是本发明实施例提供的一种内存管理方法的流程图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本发明实施例提供了一种内存管理装置,该内存管理装置尤其适用于数据通信设备中,为了使读者方便理解本发明实施例的技术方案,下面本发明将对上述数据通信设备的硬件结构进行简要地说明。

如图1所示为上述数据通信设备的硬件结构示意图,该数据通信设备至少可以包括接收设备110,发送设备120,系统主机130,内存管理设备140和内存150。其中,该接收设备110用于接收数据包,该发送设备120用于发送数据包,该系统主机130用于对接收到的数据包进行特定处理,该内存管理设备140用于根据在数据包的处理过程中,根据处理过程中所产生的业务请求为业务请求对应的数据分配内存。

请参考图2,其示出了本发明一个实施例提供的内存管理装置的结构示意图。如图2所示,该装置可以包括但不限于:内存块状态监控模块210、内存分片监控模块220、内存分片管理模块230和数据存储模块240。下面,针对各个模块的功能分别进行介绍:

内存块状态监控模块210。

内存块状态监控模块210用于监控至少两个内存块的状态;当一个内存块已进行内存分片时,则所述内存块的状态为占用状态,当一个内存块未进行内存分片时,则所述内存块的状态为空闲状态。

内存150可以被划分为多个内存块,该多个内存块的大小可以由技术人员根据数据通信业务的需求进行设置,此外,该多个内存块大小可以相同,也可以不相同;当然,在实际应用中,该内存管理配置模块210也可以将内存划分为一整个内存块。对于内存块的个数、内存块的大小等内存块划分方法本发明不做具体限定。

而对于数据通信设备来说,其具有处理多种不同的业务的能力,因此,为了满足多种业务需求,每种业务可以预先占用一定数目的内存块,且每种业务可以占用至少一个相同大小的内存块,也可以占用至少两个不同大小的内存块,在此不做具体限定。而为了避免对内存资源的浪费,可以将其占用的内存块进一步划分为至少一个内存分片,使得能够为业务请求以内存分片为单位进行内存申请和分配。在这里需要说明的是,每个内存块中各内存分片的大小也可以由技术人员根据数据通信业务的需求进行设置,各个内存块中内存分片的个数可以相同也可以不相同,且,每个内存块中各内存分片的大小可以相同也可以不相同,本发明对此也不做具体限定。

需要说明的是,内存150在进行内存块划分时,可以仅对内存150的一部分内存进行划分,剩余一部分内存暂且不做划分,以供后续灵活使用。进一步地,为了应对业务请求突发,可以根据内存块的占用情况,灵活调整启用的内存块数量。具体地,该内存块状态监控模块可以用于以下任一种实施过程:

第一种实施过程、该内存块状态监控模块用于对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否小于第一预设阈值;若所述比例小于所述第一预设阈值,则卸载所述大小的内存块中至少一个处于空闲状态的内存块。

对于这种实施过程,如果检测所述大小的内存块中处于占用状态的内存块的比例小于第一预设阈值,则说明当前该业务所需数据量较小,当前所占用的内存块过多,为了避免内存资源浪费,可以将该业务所占用的内存块卸载,也即是,将内存块释放回内存,以供其他业务进行内存块加载。

第二种实施过程、该内存块状态监控模块用于对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否大于第二预设阈值;若所述比例大于所述第二预设阈值,则从系统内存中加载至少一个处于空闲状态的内存块。

对于这种实施过程,如果检测所述大小的内存块中处于占用状态的内存块的比例大于第二预设阈值,则说明当前该大小的内存块的剩余量不足,可能不足以应对该业务的数据量,因此,可以从系统内存中加载至少一个处于空闲状态的内存块,以保证业务处理不受影响。

需要说明的是,除通过上述比例来判断是否卸载或加载内存块以外,还可以通过处于占用状态的内存块的个数等进行判断,本发明实施例对此不做限定。

对于内存块的管理,可以采用队列形式进行,每个队列用于存储内存块的地址,每个队列可以用于管理相同大小的内存块,且每个队列中所存储的地址数量可以相同或不同,本发明实施例对此不做具体限定。需要说明的是,该队列以链表或其他数据结构的形式存在,其至少可以包括如下信息:队列头尾指针、内存块个数及内存块大小等。

综上,通过上述对根据对内存块的实际占用情况进行内存块加载和卸载,使得内存块可以根据业务实际需求进行动态调整,从而增强了内存资源的共享性,提高了内存使用效率。

内存分片监控模块220

内存分片监控模块220用于监控至少两个内存分片的状态,所述至少两个内存分片包括至少两种分片长度,每个内存分片由内存块划分而成;如果同一长度的空闲内存分片数量少于内存块申请阈值,则根据所述至少两个内存块的状态,申请处于空闲状态的内存块进行分割;如果同一长度的空闲内存分片数量大于内存块释放阈值,则释放所述同一长度的空闲内存分片。

其中,内存分片的状态包括占用状态和空闲状态,当该内存分片已经被分配,则该内存分片处于占用状态,当该内存分片已经被释放或还未被分配,则该内存分片处于空闲状态。而如果同一长度的空闲内存分片数量少于内存块申请阈值,则说明该长度的内存分片可能不足以满足业务需求,则可以从处于空闲状态的内存块中申请至少一个内存块,并将申请到的内存块划分为至少一个内存分片,以供业务申请需要,如果某一个处于空闲状态的内存块被分配并划分,则该内存块的状态转换至占用状态。而如果同一长度的空闲内存分片数量大于内存块释放阈值,则说明该长度的内存分片对应的业务数据量有限,则为了避免对内存资源造成浪费,可以释放所述同一长度的空闲内存分片。在释放时,可以先将内存分片的内存地址聚合,以得到整个内存块的地址,再对内存块的地址进行释放。

进一步地,所述内存分片监控模块用于对于任一种长度的内存分片,若在预设时间内没有接收到对所述长度的内存分片的分配,则释放所述长度的内存分片所占用的内存块。如果预设时间内没有接收到对该长度的内存分片的申请,说明该业务没有需求量,则为了避免对内存资源造成浪费,可以将该长度的内存分片所占用的内存块释放。

为了减少内存碎片,增加内存的使用效率,对于任一长度的内存分片,可以采用多个不同职能的队列来管理该长度的内存分片所占用的内存块,参见图3,具体说明如下:所述内存分片监控模块用于对于任一种长度的内存分片,以未使用内存块队列、已耗尽内存块队列以及正使用内存块队列的形式管理所述长度的内存分片所占用的内存块的内存地址。其中,所述未使用内存块队列包括所述长度的内存分片中所有内存分片均空闲的内存块的内存地址。所述已耗尽内存块队列包括所述长度的内存分片中所有内存分片均被占用的内存块的内存地址。所述正使用内存块队列包括所述长度的内存分片中部分内存分片被占用的内存块的内存地址。

需要说明的是,对于内存分片所占用的内存块来说,可以具有三种状态:未使用状态,即该内存块所划分的内存分片均处于空闲状态;已使用状态,即该内存块所划分的内存分片有一部分处于空闲状态,有一部分已被分配;已耗尽状态,即该内存块所划分的内存分片均已被分配。而随着设备的运行,内存分片的状态会发生变化,这就导致内存块的状态也会随时发生变化,如当某一个未使用内存块中的一个内存分片被分配时,该未使用内存块随即成为一个正使用内存块,为了真实反映内存的变化,需要动态维护上述队列,该动态维护过程可以包括以下(a)至(d)几种情况:

a)当正使用内存块队列的第一指定内存块中的内存分片全部空闲时,该内存分片监控模块将该第一指定内存块从正使用内存块队列中删除,添加到未使用内存块队列尾部。

b)当正使用内存块队列不包括任何内存块时,该内存分片监控模块从未使用内存块队列头部获取至少一个处于空闲状态的内存块,将该至少一个处于空闲状态的内存块添加到正使用内存块队列尾部。

c)当已耗尽内存块队列中的第二指定内存块的至少一个内存分片变为空闲时,该内存分片监控模块将该第二指定内存块从已耗尽内存块队列中删除,添加到正使用内存块队列头部,从而使该内存块中的内存分片可以被优先分配,以起到减少内存碎片,增加内存的使用效率的效果。

d)当正使用内存块队列中的第三指定内存块的内存分片全被分配时,该内存分片监控模块将该第三指定内存块从正使用内存块队列中删除,添加到已耗尽内存块队列尾部。

综上,通过以多种不同职能队列的形式管理某一长度的内存分片所占用内存块,使得正使用内存块中的内存分片可以被优先分配,从而可以减少内存碎片,增加内存使用效率,提高对内存分配的灵活性以及避免页表频繁切换带来的负面影响,

进一步地,为了提高后续内存申请时对内存分片的定位速度,减少业务申请内存的时延,本发明提供了一种内存分片占用情况的维护方法,也即是,所述内存分片监控模块用于对于任一种长度的内存分片,采用多级位图bitmap查找表的方式维护所述长度的内存分片的占用情况。

例如,对于一种长度的内存分片来说,可以配置一个多级位图bitmap查找表,该多级位图bitmap查找表包括:一级bitmap调度表和三级bitmap查找表,该三级bitmap查找表包括:第一级bitmap查找表,第二级bitmap查找表和第三级bitmap查找表。

其中,该一级bitmap调度表,用于存储该未使用内存块队列,该已耗尽内存块队列以及该正使用内存块队列中内存块与该三级bitmap查找表的映射关系,该第一级bitmap查找表为一维存储结构,包括多个一级存储单元,每个一级存储单元对应该第二级bitmap查找表的一行,该第二级bitmap查找表为二维存储结构,包括多个行和多个二级存储单元,每个二级存储单元对应该第三级bitmap查找表的一行,该第三级bitmap查找表为二维存储结构,包括多个三级存储单元,每个三级存储单元对应其中的一个内存分片,如图4所示为上述三级bitmap查找表的示意图,该一级存储单元、该二级存储单元以及该三级存储单元均对应一个预设值,该预设值用于反映该一级存储单元、该二级存储单元以及该三级存储单元对应的内存的占用状态,例如,该预设值可以为0或1,其中0用于表示内存未被占用或未被全部占用,1用于表示被占用,需要说明的是,上述预设值仅仅是示例性的,在实际应用中该预设值可以为任意值,且,该预设值可以不止两个,对此本发明不做具体限定,此外,在实际应用中,多级位图bitmap查找表可以仅包括bitmap查找表,而不包括bitmap调度表,或者,可以包括四级、二级等任一级数的bitmap查找表,对此,本发明也不做具体限定,且,由于不同级数的bitmap查找表的查找方式十分类似,因此,本发明将以三级bitmap查找表为例进行说明,对于其他级数的bitmap查找表查找方式就不再赘述。

为了便于解利用上述利用多级位图bitmap查找表定位正使用内存块队列中空闲内存分片的方法,本发明将对其进行简单的举例说明。

例如,若需要查找正使用内存块队列中第一个空闲的内存分片时,可以首先查找一级bitmap调度表,以获取正使用内存块队列头部内存块对应的三级bitmap查找表,而后可以在第一级bitmap查找表中按照顺序查找预设值为0的一级存储单元(预设值为0表示内存未被占用或未被全部占用),假设查询到的第一个预设值为0的一级存储单元的编号为a,则可以在第二级bitmap查找表的第a行中按照顺序查找预设值为0的二级存储单元,假设查询到的第一个预设值为0的二级存储单元的编号为b,则内存管理装置200可以在第三级bitmap查找表的第ab行中按照顺序查找预设值为0的三级存储单元,假设查询到的第一个预设值为0的三级存储单元的编号为ijkl0124,则编号为ijkl0124的内存分片即为正使用内存块队列中第一个空闲的内存分片,需要说明的是,上述举例中的编号仅仅是示例性的,并不能限制本发明。

在采取队列方式对内存块和内存分片进行管理时,内存块队列以及内存分片队列之间的逻辑关系可以参见图5,如图5所示,多个内存分片队列可以对应于一个内存块队列,每个内存分片队列所管理的内存分片均是由该内存块队列所管理的内存块划分而成,而在实际场景中,该内存150可以通过多个内存块队列来管理。

内存分片管理模块230

内存分片管理模块230用于接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片。

为了减少内存碎片,在分配内存分片时,可以优先分配使用内存块队列头部内存块中的内存分片。而由于页表中存储有逻辑地址与物理地址的对应关系,因此,在分配内存分片时,需要使用页表获取中内存分片的内存地址与内存块之间的映射关系,而在分配内存分片时总是分配正使用内存块队列头部内存块中的内存分片,这就使得无需对页表进行切换就可以获取上述映射关系,因此,这种方法可以有效地抑制页表频繁切换带来的负面影响。

在一种可能设计中,所述内存分片管理模块230,用于接收到业务请求时,从所述业务请求对应长度的空闲内存分片中,优先分配所占用内存块中空闲内存分片数量最少的内存块中的空闲内存分片。

发明人认识到,除了优先分配正使用内存块中的内存分片外,还可以优先分配空闲内存分片个数较少的正使用内存块中的内存分片,这样做同样可以起到减少内存碎片,增加内存的使用效率的效果。因此,在本发明的一个实施例中,对于每种长度的内存分片,可以每隔预定时间,检测其正使用内存块队列包含的每个内存块中空闲内存分片的个数,可以按照空闲的内存分片的个数由少到多的顺序,对该正使用内存块队列进行排序,以使空闲内存分片的个数最少的内存块中的内存分片被优先分配,其中该预定时间可以由技术人员进行设定,本发明对此不作具体限定。

在一种可能设计中,所述内存分片管理模块,用于对于任一种长度的内存分片,以双指针后进先出lifo缓存的形式,缓存预设数量的所述长度的空闲内存分片的内存地址,在接收到业务请求时,从与所述业务请求响应的所述双指针后进先出lifo缓存中分配空闲内存分片的内存地址。

为了进一步减少业务申请内存的时延,还可以对于每种长度的内存分片,均提供一双指针后进先出lifo缓存,用以缓存一定数量的内存地址,使得由业务来申请内存分片时,可以优先从该缓存中直接分配。在采用多级位图bitmap查找表的维护形式时,能够避免查询上述多级位图bitmap查找表的步骤,直接从缓存中分配内存,从而进一步降低了业务申请内存的时延,减小了内存管理所需的计算量。

对于上述以双指针后进先出lifo缓存的形式,缓存预设数量的所述长度的空闲内存分片的内存地址的场景,当接收到内存分片使用请求后,可以将栈顶指针对应的存储单元中的待分配内存分片的内存地址优先分配出去。而当接收到内存释放请求后,其可以将待释放内存分片的内存地址也存储至该缓存中,即将该待释放内存分片的内存地址写入栈顶指针对应的存储单元中,以使其可以被优先分配出去,这样可以避免业务申请内存时对页表的频繁切换。

在一种可能设计中,所述内存分片管理模块230,用于对于任一种长度的内存分片,检测所述双指针后进先出lifo缓存中的内存地址数量低于预设阈值;若所述内存地址数量低于所述预设阈值,则获取预设数量的内存分片的内存地址存储至所述双指针后进先出lifo缓存中。

其中,存储的内存地址个数低于预设阈值,说明待分配内存分片不足,则可以从该长度的内存分片中获取预设数量的内存分片的内存地址。需要说明的是,上述预取阈值以及预设数量可以由技术人员进行设定,本发明对此不做具体限定。例如,以上述正使用内存块队列为例,内存分片管理模块可以根据正使用内存块队列中的内存块排列顺序,在多级位图bitmap查找表中分级查找正使用内存块中空闲的内存分片,该正使用内存块为一部分内存分片被占用的内存块,按照查找顺序获取预设数量的空闲内存分片,将该预设数量的空闲内存分片的内存地址获取至该缓存中。

为了帮助读者理解上述技术过程,下面基于多级位图bitmap查找表的结构,对上述获取过程进行说明。例如,通过对缓存中存储的待分配内存分片的个数与预取阈值的比较发现,其需要将获取10个空闲内存分片,则可以查询该多级位图bitmap查找表,具体地,首先查找一级bitmap调度表,以获取正使用内存块队列头部第一个内存块对应的三级bitmap查找表,而后可以在第一级bitmap查找表中按照顺序查找预设值为0的一级存储单元(预设值为0表示内存未被占用或未被全部占用),假设查询到的第一个预设值为0的一级存储单元的编号为a,则可以在第二级bitmap查找表的第a行中按照顺序查找预设值为0的二级存储单元,假设查询到的第一个预设值为0的二级存储单元的编号为b,则可以在第三级bitmap查找表的第ab行中按照顺序查找预设值为0的三级存储单元,若在第三级bitmap查找表的第ab行中查找到10个预设值为0的三级存储单元,则将上述10个预设值为0的三级存储单元对应的内存分片的内存地址预取至上述缓存中,若在第三级bitmap查找表的第ab行中查找到的预设值为0的三级存储单元不足10个,则其返回继续在第二级bitmap查找表的第a行中查找预设值为0的二级存储单元,假设数据存储模块230查询到的第二个预设值为0的二级存储单元的编号为c,则可以在第三级bitmap查找表的第ac行中按照顺序查找预设值为0的三级存储单元,可以循环执行上述查询过程,直到其将获取到10个内存地址,当然,如果返回第二级bitmap查找表后仍未查找到足够的内存分片,其可以继续返回第一级bitmap查找表甚至一级bitmap调度表中进行查询,需要说明的是,上述预设值以及各级存储单元的编号仅仅是示例性的,其不能限制本发明。

需要指出的是,上述将预设数量的空闲内存分片的内存地址获取至该缓存后,可以在多级位图bitmap查找表中,将上述预设数量的空闲内存分片对应三级存储单元的预设值进行修改,以表明该预设数量的空闲内存分片的内存地址已经被获取至上述缓存中,从而避免在下次获取过程中出现错误。

而进一步地,对于任一种长度的内存分片,检测所述双指针后进先出lifo缓存中的内存地址数量是否高于回收阈值;若所述内存地址数量高于所述回收阈值,则从所述双指针后进先出lifo缓存中释放预设数量的内存分片的内存地址。该释放可以是指将内存分片以此回收到三级bitmap查找表中。

还需要指出的是,上述缓存的存储结构可以是多种多样的,如上述缓存可以为后进先出lifo缓存,也可以为先进先出fifo缓存等,本发明对此不做具体限定,当上述缓存为双指针后进先出lifo缓存时,该缓存可以包括栈顶指针和栈底指针,可以将预设数量的空闲内存分片写入该双指针后进先出lifo缓存的栈底指针对应的存储单元中。

数据存储模块240

数据存储模块240用于根据所述内存分片管理模块分配到的空闲内存分片的内存地址,存储所述业务请求对应的数据。该数据存储模块240作为处理业务请求的前端,其具体存储过程在此不做赘述。

本发明实施例提供的装置,通过对内存块和内存分片进行分层次管理,并根据内存分片的实际占用情况,灵活的申请或释放内存块,实现了内存块的动态管理,能够满足业务的突发性,增强了内存资源的共享性,避免了资源浪费,提高了内存使用效率。此外,可以通过缓存的方式预先获取一些待分配的内存分片的内存地址,使得在业务申请内存时直接将该缓存中的内存分片的内存地址分配给所述业务,而不需要对进行空闲内存分片的查询,从而可以减小业务申请内存的时延。

图6是本发明实施例提供的一种内存管理方法的流程图。参见图6,该实施例具体包括:

601、监控至少两个内存块的状态;当一个内存块已进行内存分片时,则所述内存块的状态为占用状态,当一个内存块未进行内存分片时,则所述内存块的状态为空闲状态。

602、监控至少两个内存分片的状态,所述至少两个内存分片包括至少两种分片长度,每个内存分片由内存块划分而成。

603、如果同一长度的空闲内存分片数量少于内存块申请阈值,则根据所述至少两个内存块的状态,申请处于空闲状态的内存块进行划分;如果同一长度的空闲内存分片数量大于内存块释放阈值,则释放所述同一长度的空闲内存分片。

需要说明的是,上述步骤601至603的执行顺序可以是并行,也可以是任一种执行顺序,且其监控周期可以相同也可以不同,本发明实施例对此不做具体限定。

604、在接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片。

605、根据分配到的空闲内存分片的内存地址,存储所述业务请求对应的数据。

在一种可能设计中,所述方法还包括:

对于任一种长度的内存分片,若在预设时间内没有接收到对所述长度的内存分片的申请,则释放所述长度的内存分片所占用的内存块。

在一种可能设计中,对于任一种长度的内存分片,以未使用内存块队列、已耗尽内存块队列以及正使用内存块队列的形式管理所述长度的内存分片所占用的内存块的内存地址;

所述未使用内存块队列包括所述长度的内存分片中所有内存分片均空闲的内存块的内存地址;

所述已耗尽内存块队列包括所述长度的内存分片中所有内存分片均被占用的内存块的内存地址;

所述正使用内存块队列包括所述长度的内存分片中部分内存分片被占用的内存块的内存地址。

在一种可能设计中,在接收到业务请求时,为所述业务请求分配相应长度的空闲内存分片包括:

在接收到所述业务请求时,从所述业务请求对应长度的空闲内存分片中,优先分配所占用内存块中空闲内存分片数量最少的内存块中的空闲内存分片。

在一种可能设计中,对于任一种长度的内存分片,采用多级位图bitmap查找表的方式维护所述长度的内存分片的占用情况。

在一种可能设计中,所述方法还包括:

对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否小于第一预设阈值;

若所述比例小于所述第一预设阈值,则卸载所述大小的内存块中至少一个处于空闲状态的内存块。

在一种可能设计中,所述方法还包括:

对于任一种大小的内存块,检测所述大小的内存块中处于占用状态的内存块的比例是否大于第二预设阈值;

若所述比例大于所述第二预设阈值,则从系统内存中加载至少一个处于空闲状态的内存块。

在一种可能设计中,所述方法还包括:

对于任一种长度的内存分片,以双指针后进先出lifo缓存的形式,缓存预设数量的所述长度的空闲内存分片的内存地址;

相应地,在接收到业务请求时,从与所述业务请求响应的所述双指针后进先出lifo缓存中分配空闲内存分片的内存地址。

在一种可能设计中,所述方法还包括:

对于任一种长度的内存分片,检测所述双指针后进先出lifo缓存中的内存地址数量低于预设阈值;

若所述内存地址数量低于所述预设阈值,则获取预设数量的内存分片的内存地址存储至所述双指针后进先出lifo缓存中。

需要说明的是,上述方法实施例的具体实施过程与装置实施例中所述同理,在此不做赘述。

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

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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