首页> 中国专利> 一种内存分配管理方法、装置和用于内存分配管理的装置

一种内存分配管理方法、装置和用于内存分配管理的装置

摘要

本发明实施例提供一种内存分配管理方法、装置和用于内存分配管理的装置,可应用于计算节点。其中的方法包括:为目标任务分配预留空间;响应目标任务的申请内存请求,向目标任务返回预留空间的首地址,以使目标任务根据所述首地址确定待访问的目标地址;响应目标任务针对目标地址的内存访问请求,判断目标地址是否位于内存预留空间;若确定目标地址位于内存预留空间,则返回目标地址,若确定目标地址位于外存预留空间,则将目标地址对应的存储块置换到内存中并返回置换后的内存地址。本发明实施例可以对目标任务的可用内存进行扩展,可以为目标任务提供更加充足的内存资源,以保证目标任务的正常运行。

著录项

  • 公开/公告号CN113064724A

    专利类型发明专利

  • 公开/公告日2021-07-02

    原文格式PDF

  • 申请/专利权人 华控清交信息科技(北京)有限公司;

    申请/专利号CN202110327437.6

  • 发明设计人 李艺;张登辉;王一帆;

    申请日2021-03-26

  • 分类号G06F9/50(20060101);

  • 代理机构11319 北京润泽恒知识产权代理有限公司;

  • 代理人莎日娜

  • 地址 100084 北京市海淀区中关村东路1号院3号楼10层1009-1

  • 入库时间 2023-06-19 11:42:32

说明书

技术领域

本发明涉及计算机技术领域,尤其涉及一种内存分配管理方法、装置和用于内存分配管理的装置。

背景技术

密文计算平台是一种保护数据隐私安全的计算平台,计算节点可以在不泄漏自身数据的前提下,使用多方安全计算技术进行协同计算,得到计算结果。

Kubernetes(K8s,容器集群管理系统)等集群方案提供了一种高效的虚拟部署方式,可以部署多个计算节点,实现了负载均衡、自动部署以及回滚等功能,并且降低了节点部署和运维成本。

但是,当一个通用的密文计算平台在不同的数据上运行不同的任务,并且这些任务是通过虚拟部署方式部署在同一物理机上时,这些任务会共享物理机的内存资源。如果某些任务使用了大量内存,可能出现不同任务之间因为内存不足而相互挤兑,导致有些任务无法顺利运行的情况。

发明内容

本发明实施例提供一种内存分配管理方法、装置和用于内存分配管理的装置,可以对目标任务的可用内存进行扩展,为目标任务提供更加充足的内存资源,以保证目标任务的正常运行。

为了解决上述问题,本发明实施例公开了一种内存分配管理方法,应用于计算节点,所述方法包括:

为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;

响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;

响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;

若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

可选地,所述响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,包括:

响应所述目标任务的申请内存请求,向所述目标任务返回指针对象,所述指针对象中包含所述预留空间的首地址,所述指针对象中还包含重载后的下标操作符;

所述判断所述目标地址是否位于所述内存预留空间之前,所述方法还包括:

响应所述目标任务针对目标地址的内存访问请求,基于重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址。

可选地,所述响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间,包括:

响应所述目标任务针对目标地址的内存访问请求,通过钩子函数获取所述目标地址,并判断所述目标地址是否位于所述内存预留空间。

可选地,所述为目标任务分配预留空间,包括:

确定目标任务所需的内存占用量;

根据所述内存占用量确定待分配的存储块的总数目;

确定所述计算节点内存中的空闲存储块的第一数目;

若所述第一数目小于所述总数目,则从所述计算节点的内存中分配第一数目的存储块,以及从所述计算节点的外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目。

可选地,所述将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址,包括:

查询所述计算节点的内存中是否存在空闲存储块;

若所述计算节点的内存中不存在空闲存储块,则在所述计算节点的内存中确定可置换存储块,并获取所述可置换存储块的内存地址;

将所述可置换存储块中存储的数据保存至外存中,以及向所述目标任务返回所述可置换存储块的内存地址,以供所述目标任务访问;

若所述计算节点的内存中存在空闲存储块,则向所述目标任务返回所述空闲存储块对应的内存地址,以供所述目标任务访问。

可选地,所述查询所述计算节点的内存中是否存在空闲存储块,包括:

获取空闲存储块链表的长度,所述空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系;

若所述空闲存储块链表的长度为空,则确定所述计算节点的内存中不存在空闲存储块,若所述空闲存储块链表的长度不为空,则确定所述计算节点的内存中存在空闲存储块。

可选地,所述在所述计算节点的内存中确定可置换存储块,包括:

获取已用存储块链表,所述已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系;

将所述已用存储块链表队尾的存储块确定为可置换存储块;

所述将所述可置换存储块中存储的数据保存至外存中之后,所述方法还包括:

从所述已用存储块链表中删除所述可置换存储块,并将所述可置换存储块标记为空闲存储块加入所述空闲存储块链表。

可选地,所述向所述目标任务返回所述空闲存储块对应的内存地址之后,所述方法还包括:

将所述空闲存储块标记为已用存储块加入已用存储块链表的队首。

可选地,所述为目标任务分配预留空间,包括:

初始化全局的内存管理类对象;

将所述目标任务所需的内存占用量作为参数传入所述内存管理类对象,通过所述内存管理类对象根据所述内存占用量为所述目标任务分配预留空间。

可选地,所述方法还包括:

回收所述目标任务释放的存储块,其中,若释放的存储块位于所述计算节点的内存中,则将释放的存储块标记为空闲存储块,若释放的存储块位于所述计算节点的外存中,则删除释放的存储块中存储的数据。

可选地,所述计算节点为密文计算系统中的计算节点,所述目标任务为密文计算任务,所述计算节点部署在容器或者虚拟机中。

另一方面,本发明实施例公开了一种内存分配管理装置,应用于计算节点,所述装置包括:

空间分配模块,用于为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;

指针返回模块,用于响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;

位置判断模块,用于响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;

地址返回模块,用于若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

可选地,所述指针返回模块,具体用于响应所述目标任务的申请内存请求,向所述目标任务返回指针对象,所述指针对象中包含所述预留空间的首地址,所述指针对象中还包含重载后的下标操作符;

所述装置还包括:

地址转换模块,用于响应所述目标任务针对目标地址的内存访问请求,基于重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址。

可选地,所述位置判断模块,具体用于响应所述目标任务针对目标地址的内存访问请求,通过钩子函数获取所述目标地址,并判断所述目标地址是否位于所述内存预留空间。

可选地,所述空间分配模块,包括:

内存占用量确定子模块,用于确定目标任务所需的内存占用量;

总数目确定子模块,用于根据所述内存占用量确定待分配的存储块的总数目;

第一数目确定子模块,用于确定所述计算节点内存中的空闲存储块的第一数目;

分配子模块,用于若所述第一数目小于所述总数目,则从所述计算节点的内存中分配第一数目的存储块,以及从所述计算节点的外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目。

可选地,所述地址返回模块,包括:

空闲存储块查询子模块,用于查询所述计算节点的内存中是否存在空闲存储块;

可置换存储块确定子模块,用于若所述计算节点的内存中不存在空闲存储块,则在所述计算节点的内存中确定可置换存储块,并获取所述可置换存储块的内存地址;

第一地址返回子模块,用于将所述可置换存储块中存储的数据保存至外存中,以及向所述目标任务返回所述可置换存储块的内存地址,以供所述目标任务访问;

第二地址返回子模块,若所述计算节点的内存中存在空闲存储块,则向所述目标任务返回所述空闲存储块对应的内存地址,以供所述目标任务访问。

可选地,所述空闲存储块查询子模块,包括:

长度确定单元,用于获取空闲存储块链表的长度,所述空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系;

空闲存储块确定单元,若所述空闲存储块链表的长度为空,则确定所述计算节点的内存中不存在空闲存储块,若所述空闲存储块链表的长度不为空,则确定所述计算节点的内存中存在空闲存储块。

可选地,所述可置换存储块确定子模块,包括:

链表获取单元,用于获取已用存储块链表,所述已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系;

可置换存储块确定单元,用于将所述已用存储块链表队尾的存储块确定为可置换存储块;

所述装置还包括:

第一更新模块,用于从所述已用存储块链表中删除所述可置换存储块,并将所述可置换存储块标记为空闲存储块加入所述空闲存储块链表。

可选地,所述装置还包括:

第二更新模块,用于将所述空闲存储块标记为已用存储块加入已用存储块链表的队首。

可选地,所述空间分配模块,包括:

对象初始化模块,用于初始化全局的内存管理类对象;

空间分配子模块,用于将所述目标任务所需的内存占用量作为参数传入所述内存管理类对象,通过所述内存管理类对象根据所述内存占用量为所述目标任务分配预留空间。

可选地,所述装置还包括:

回收模块,用于回收所述目标任务释放的存储块,其中,若释放的存储块位于所述计算节点的内存中,则将释放的存储块标记为空闲存储块,若释放的存储块位于所述计算节点的外存中,则删除释放的存储块中存储的数据。

可选地,所述计算节点为密文计算系统中的计算节点,所述目标任务为密文计算任务,所述计算节点部署在容器或者虚拟机中。

再一方面,本发明实施例公开了一种用于内存分配管理的装置,所述装置应用于计算节点,所述装置包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;

响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;

响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;

若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

可选地,所述响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,包括:

响应所述目标任务的申请内存请求,向所述目标任务返回指针对象,所述指针对象中包含所述预留空间的首地址,所述指针对象中还包含重载后的下标操作符;

所述装置还经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

响应所述目标任务针对目标地址的内存访问请求,基于重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址。

可选地,所述响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间,包括:

响应所述目标任务针对目标地址的内存访问请求,通过钩子函数获取所述目标地址,并判断所述目标地址是否位于所述内存预留空间。

可选地,所述为目标任务分配预留空间,包括:

确定目标任务所需的内存占用量;

根据所述内存占用量确定待分配的存储块的总数目;

确定所述计算节点内存中的空闲存储块的第一数目;

若所述第一数目小于所述总数目,则从所述计算节点的内存中分配第一数目的存储块,以及从所述计算节点的外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目。

可选地,所述将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址,包括:

查询所述计算节点的内存中是否存在空闲存储块;

若所述计算节点的内存中不存在空闲存储块,则在所述计算节点的内存中确定可置换存储块,并获取所述可置换存储块的内存地址;

将所述可置换存储块中存储的数据保存至外存中,以及向所述目标任务返回所述可置换存储块的内存地址,以供所述目标任务访问;

若所述计算节点的内存中存在空闲存储块,则向所述目标任务返回所述空闲存储块对应的内存地址,以供所述目标任务访问。

可选地,所述查询所述计算节点的内存中是否存在空闲存储块,包括:

获取空闲存储块链表的长度,所述空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系;

若所述空闲存储块链表的长度为空,则确定所述计算节点的内存中不存在空闲存储块,若所述空闲存储块链表的长度不为空,则确定所述计算节点的内存中存在空闲存储块。

可选地,所述在所述计算节点的内存中确定可置换存储块,包括:

获取已用存储块链表,所述已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系;

将所述已用存储块链表队尾的存储块确定为可置换存储块;

所述装置还经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

从所述已用存储块链表中删除所述可置换存储块,并将所述可置换存储块标记为空闲存储块加入所述空闲存储块链表。

可选地,所述装置还经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

将所述空闲存储块标记为已用存储块加入已用存储块链表的队首。

可选地,所述为目标任务分配预留空间,包括:

初始化全局的内存管理类对象;

将所述目标任务所需的内存占用量作为参数传入所述内存管理类对象,通过所述内存管理类对象根据所述内存占用量为所述目标任务分配预留空间。

可选地,所述装置还经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

回收所述目标任务释放的存储块,其中,若释放的存储块位于所述计算节点的内存中,则将释放的存储块标记为空闲存储块,若释放的存储块位于所述计算节点的外存中,则删除释放的存储块中存储的数据。

可选地,所述计算节点为密文计算系统中的计算节点,所述目标任务为密文计算任务,所述计算节点部署在容器或者虚拟机中。

又一方面,本发明实施例公开了一种机器可读介质,其上存储有指令,当由一个或多个处理器执行时,使得装置执行如前述一个或多个所述的内存分配管理方法。

本发明实施例包括以下优点:

本发明实施例预先为目标任务分配预留空间,该预留空间包括内存中的内存预留空间以及外存中的外存预留空间。响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址,并且响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间。对于内存预留空间中的目标地址,可以直接返回该目标地址供目标任务访问,对于外存预留空间中的目标地址,需要将对应的存储块置换到内存中进行访问。通过本发明实施例,可以为目标任务一次性预留足够的运行空间,在多个目标任务需要共享内存时,不会因为某个目标任务申请不到足够的内存导致任务运行失败的情况发生。相对于原有的内存分配方案,本发明实施例利用外存空间具有容量大、易扩展的特点,对目标任务的可用内存进行扩展,可以为目标任务提供更加充足的内存资源,以保证目标任务的正常运行。

附图说明

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

图1是本发明的一种内存分配管理方法实施例的步骤流程图;

图2是本发明的一种预留空间中各存储块之间的关系示意图;

图3是本发明的一种利用内存分配器BufferAllocator进行内存分配管理的流程示意图;

图4是本发明的一种内存分配管理装置实施例的结构框图;

图5是本发明的一种用于内存分配管理的装置800的框图;

图6是本发明的一些实施例中服务器的结构示意图。

具体实施方式

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

方法实施例

参照图1,示出了本发明的一种内存分配管理方法实施例的步骤流程图,所述方法可应用于计算节点,所述方法具体可以包括如下步骤:

步骤101、为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;

步骤102、响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;

步骤103、响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;

步骤104、若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

本发明实施例的内存分配管理方法可应用于计算节点,所述计算节点可以为实体计算设备,或由实体计算设备承载的虚拟设备。所述目标任务为所述计算节点中运行的需要申请内存资源的任意计算任务。

在本发明的一种可选实施例中,所述计算节点可以为密文计算系统中的计算节点,所述目标任务可以为密文计算任务,所述计算节点可以部署在容器或者虚拟机中。

在具体实施中,如果计算节点为实体设备,则计算机节点的内存和外存指计算节点实体设备的内存和外存;如果计算节点为部署在容器或者虚拟机中的虚拟设备,则计算节点的内存和外存指部署计算节点虚拟设备的容器或者虚拟机的内存和外存。

密文计算系统是一种保护数据隐私安全的计算系统。多个参与方可以在不泄漏自身数据的前提下,使用多方安全计算技术进行协同计算,得到计算结果,参与计算的数据、中间结果、以及最终结果可以为密文。

需要说明的是,本发明实施例对参与执行一个密文计算任务的计算节点的数量不做限制,例如,参与执行一个密文计算任务的计算节点的数量可以为1个、2个、4个等。

所述容器可以为Docker或Kubernetes等,当然Docker和Kubernetes只是密文计算系统的一种虚拟部署方式,根据实际需求,密文计算系统也可以通过其他容器或者虚拟机进行部署。

在具体实施中,本发明实施例对一个容器中部署的计算节点的数目不做限制。一个容器中可以部署一个计算节点,也可以部署多个计算节点。在本发明实施例中,多个指两个或两个以上。通常,多个计算节点共享容器的内存资源,因此,计算节点越多,每个计算节点可用的内存资源就越少。示例1,每个容器中部署一个计算节点,假设每个容器的内存为30G,那么,每个计算节点可以独享30G内存。示例2,每个容器中部署4个计算节点,假设每个容器的内存为30G,那么,这4个计算节点共享30G内存。示例3,假设有4个容器,且这4个容器共享30G内存,每个容器中部署一个计算节点,那么,这4个计算节点共享30G内存。

为便于描述,本发明实施例中主要以一个计算节点为例进行说明,多个计算节点的场景中,每个计算节点的内存分配管理过程相同,相互参照即可。

例如,某个容器中部署一个计算节点,分配该计算节点执行某个目标任务,该容器的内存为30G,而执行该目标任务最少需要40G内存。为了避免该目标任务由于可用内存不足导致无法运行的情况发生,本发明实施例可以为该目标任务分配预留空间,所述预留空间可以大于或等于所述目标任务运行的最小内存空间。所述预留空间可以包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间。

外存是指除计算机内存及CPU(Central Processing Unit,中央处理器)缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存有磁盘、光盘、U盘等,磁盘包括软磁盘和硬磁盘。本发明实施例中以外存为磁盘为例。

在上述示例中,可以为该目标任务分配30G的内存预留空间以及10G的外存预留空间,总共40G的预留空间。在为目标任务分配预留空间之后,在目标任务申请内存时,该目标任务可使用的内存大小为预留空间的大小(40G),可以保证该目标任务正常运行。

可以理解,上述分配30G的内存预留空间以及10G的外存预留空间的分配方式,仅作为本发明的一种应用示例。在实际应用中,本发明实施例对具体的分配方式不做限制。例如,可以分配20G的内存预留空间以及20G的外存预留空间,只要保证所述预留空间大于或等于所述目标任务运行的最小内存空间即可。

目标任务是运行在内存中的应用程序,因此,目标任务不能直接访问外存空间。在目标任务待访问的目标地址位于所述内存预留空间时,可以直接访问该目标地址,在目标任务待访问的目标地址位于所述外存预留空间时,需要将目标地址对应的存储块置换到内存中进行访问。

其中,存储块为本发明实施例中的内存管理单位,本发明实施例中用Block表示。预留空间由若干个存储块(Block)组成,每个Block的大小是固定的。目标任务的内存分配过程以及内存和外存中存储块的置换过程都是以Block为单位的。

通过本发明实施例,在目标任务运行所需的内存大小大于计算节点的可用内存大小时,可以利用计算节点的磁盘做缓存,无限地扩大计算节点的可用内存,从而保证目标任务可以正常运行。

在本发明的一种可选实施例中,所述为目标任务分配预留空间,包括:

步骤S11、确定目标任务所需的内存占用量;

步骤S12、根据所述内存占用量确定待分配的存储块的总数目;

步骤S13、确定所述计算节点内存中的空闲存储块的第一数目;

步骤S14、若所述第一数目小于所述总数目,则从所述计算节点的内存中分配第一数目的存储块,以及从所述计算节点的外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目。

在密文计算系统中,计算节点可以接收任务控制节点发送的目标任务以及目标任务的配置信息,目标任务的配置信息中可以包含目标任务所需的内存占用量。计算节点在初始化时,可以根据接收到的目标任务的配置信息确定目标任务所需的内存占用量,进而根据该内存占用量为该目标任务分配预留空间。

本发明实施例以自定义的存储块为单位进行内存的分配管理,因此,在为目标任务分配预留空间时,可以根据目标任务所需的内存占用量确定待分配的存储块的总数目。进一步地,在分配预留空间时,首先在内存中分配存储块,如果内存中的空闲存储块的第一数目小于所述总数目,则在外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目,并向目标任务返回预留空间中起始存储块的地址。

在本发明实施例中,每个存储块(Block)可以包含但不限于如下Block信息:第一指针、第二指针、文件名、以及数据长度。第一指针用于指向Block在内存中的起始地址,对于外存中的Block,第一指针可以为空指针。第二指针用于指向下一个Block的地址。文件名用于读取外存中Block中存储的数据。数据长度用于表示存储块中存储的数据的长度。

在实际应用中,预留空间可以包括内存预留空间和外存预留空间,内存预留空间可以包括多个Block,外存预留空间可以包括多个Block,预留空间中的Block可以不连续。参照图2,示出了本发明的一种预留空间中各存储块之间的关系示意图。如图2所示,预留空间包括如下存储块:Block 1→Block 2→Block k+1→Block k+2→Block 3→Block n。图2所示的预留空间包括内存预留空间和外存预留空间,内存预留空间包括如下存储块:Block1、Block 2、Block 3,外存预留空间包括如下存储块:Block k+1、Block k+2、Block n。

一个示例中,某个容器中部署一个计算节点,分配该计算节点执行某个目标任务,该容器的内存为30G,执行该目标任务最少需要40G内存。在该计算节点初始化时,为该目标任务分配预留空间40G,其中包括30G内存预留空间和10G外存预留空间。在该目标任务向计算节点申请内存时,计算节点可以向该目标任务返回这40G预留空间的首地址(也即首个存储块的地址)。当该目标任务访问内存时,如果待访问的目标地址位于30G的内存中,可以直接访问目标地址。如果待访问的目标地址位于10G的外存中,比如待访问的目标地址为p1~pn这段地址,p1~pn这段地址位于计算节点的外存中,则需要将目标地址对应的存储块置换到内存中进行访问。具体地,可以在计算节点的内存中分配与p1~pn这段地址对应存储块相同大小的内存空间,并返回分配的内存空间地址,以供该目标任务进行访问。

在本发明的一种可选实施例中,所述将目标地址对应的存储块置换到内存中进行访问,包括:

步骤S21、查询所述计算节点的内存中是否存在空闲存储块;

步骤S22、若所述计算节点的内存中不存在空闲存储块,则在所述计算节点的内存中确定可置换存储块,并获取所述可置换存储块的内存地址;

步骤S23、将所述可置换存储块中存储的数据保存至外存中,以及向所述目标任务返回所述可置换存储块的内存地址,以供所述目标任务访问;

步骤S24、若所述计算节点的内存中存在空闲存储块,则向所述目标任务返回所述空闲存储块对应的内存地址,以供所述目标任务访问。

在本发明实施例中,内存中的存储块有如下两种状态:空闲(free)和已用(busy)。

当目标任务需要访问某个目标地址对应的Block,以向该Block中存入数据时,需要确保待访问的Block位于内存中,如果待访问的Block位于外存中,则需要将待访问的Block替换至内存中进行访问。或者,当目标任务需要访问某个目标地址对应的Block,以读取该Block中的数据进行计算时,需要确保该Block中的数据位于内存中,如果待访问的Block位于外存中,则可以使用预设的置换策略,将待访问的Block中的数据载入内存中进行访问。

在本发明实施例中,当待访问的目标地址位于外存中时,将目标地址对应的存储块置换到内存中,指的是为目标地址在内存中分配与所述目标地址指向的外存中的存储块数目相等的存储块。例如,目标任务待访问的目标地址指向外存中的某一个存储块,目标任务需要访问该存储块中的数据进行计算,则需要将该目标地址对应的存储块置换到内存中,也即,为该目标任务在内存中分配一块空闲存储块,将目标地址指向的外存的存储块中的数据存入内存中的该空闲存储块,以使目标任务可以访问该数据。

需要说明的是,目标任务待访问的目标地址可以对应一个或多个存储块,如果待访问的目标地址对应多个存储块,且多个存储块位于外存中,则所述将目标地址对应的存储块置换到内存中,包括:为目标任务在内存中分配与所述多个存储块的数目相等的存储块。

进一步地,如果计算节点的内存中存在空闲存储块,可以通过分配空闲存储块实现将目标地址对应的存储块置换到内存中。如果计算节点的内存中不存在空闲存储块,则可以在内存中确定可置换存储块,将所述可置换存储块中存储的数据保存至外存中,以释放可置换存储块,并且向目标任务返回该可置换存储块的内存地址。所述可置换存储块中存储的数据可以为内存中暂时不用的数据。

在本发明的一种可选实施例中,所述查询所述计算节点的内存中是否存在空闲存储块,包括:

步骤S31、获取空闲存储块链表的长度,所述空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系;

步骤S32、若所述空闲存储块链表的长度为空,则确定所述计算节点的内存中不存在空闲存储块,若所述空闲存储块链表的长度不为空,则确定所述计算节点的内存中存在空闲存储块。

为了提高对存储块(Block)的操作效率,本发明实施例使用链表来维护各个存储块(Block)之间的关系。计算节点可以维护空闲存储块链表和已用存储块链表。空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系。已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系。

在本发明实施例中,空闲存储块链表和已用存储块链表可以为单向链表,当计算节点中的空闲存储块或者已用存储块发生变动时,只需要修改空闲存储块链表和已用存储块链表即可,可以提高对存储块(Block)的操作效率。

在本发明的一种可选实施例中,所述在所述计算节点的内存中确定可置换存储块,包括:

步骤S41、获取已用存储块链表,所述已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系;

步骤S42、将所述已用存储块链表队尾的存储块确定为可置换存储块;

所述将所述可置换存储块中存储的数据保存至外存中之后,所述方法还可以包括:从所述已用存储块链表中删除所述可置换存储块,并将所述可置换存储块标记为空闲存储块加入所述空闲存储块链表。

如果空闲存储块链表的长度为空,说明计算节点的内存中不存在空闲存储块,需要在内存中确定可置换存储块,将该可置换存储块中的数据保存到外存中,以释放该可置换存储块供目标任务使用。

在本发明实施例中,已用存储块链表为单向链表,链表队尾的存储块加入的时间最早,该存储块中的数据暂时不用的概率较高。因此,可以将已用存储块链表队尾的存储块确定为可置换存储块,将该可置换存储块中存储的数据保存至外存中,以释放该可置换存储块,并且向目标任务返回该可置换存储块的内存地址,以供目标任务使用。

在本发明的一种可选实施例中,所述向所述目标任务返回所述空闲存储块对应的内存地址之后,所述方法还可以包括:将所述空闲存储块标记为已用存储块加入已用存储块链表的队首。

如果空闲存储块链表的长度不为空,说明计算节点的内存中存在空闲存储块,则可以向目标任务分配空闲存储块,并返回分配的空闲存储块中首个空闲存储块的内存地址。对于分配给目标任务的空闲存储块,该空闲存储块已被目标任务占用,因此,可以将该空闲存储块标记为已用存储块加入已用存储块链表的队首。

一个示例中,用free_blocks_表示空闲存储块链表,used_mem_blocks_表示已用存储块链表,将目标地址对应的存储块置换到内存中的策略可以如下:如果free_blocks_的长度为空,则将used_mem_blocks_队尾的存储块b中的数据缓存到外存中,并从used_mem_blocks_中删除存储块b,将存储块b加入free_blocks_中作为空闲存储块使用。如果free_blocks_的长度不为空,则从free_blocks_中分配存储块f给目标任务使用,并将存储块f加入used_mem_blocks_的队首。

需要说明的是,本发明实施例中以置换一个存储块为例进行说明,在实际应用中,可以置换多个存储块,置换过程类似,此处不再赘述。

在本发明的一种可选实施例中,所述为目标任务分配预留空间,包括:

步骤S51、初始化全局的内存管理类对象;

步骤S52、将所述目标任务所需的内存占用量作为参数传入所述内存管理类对象,通过所述内存管理类对象根据所述内存占用量为所述目标任务分配预留空间。

为了使得本发明的内存分配管理方法可以快速迁移到已有的任意系统中,并且可以减少对目标任务的改造成本,本发明实施例定义了内存管理类,记为BufferAllocator,通过BufferAllocator实现目标任务的内存分配管理,以下将BufferAllocator称为内存分配器。

计算节点在启动时可以初始化一个全局的内存管理类对象(BufferAllocator对象),将目标任务所需的内存占用量作为参数传入BufferAllocator对象,BufferAllocator对象可以根据传入的参数为目标任务分配预留空间,传入的参数包括size参数,也即目标任务的内存占用量。

在实际应用中,目标任务可以为运行在一个计算节点中的一个应用程序,或者,目标任务还可以为运行在多个计算节点中的多个应用程序,参与目标任务的每个计算节点通过运行自身的应用程序协同完成该目标任务。

需要说明的是,本发明实施例对目标任务对应程序的编程语言不做限制。例如,目标任务可以为基于C/C++编程语言实现的应用程序。在C/C++编程语言场景中,需要向目标任务返回内存地址指针,以使目标任务可以通过返回的内存地址指针进行各种内存拷贝与赋值操作。为了减少内存分配器BufferAllocator对目标任务原始代码的影响,本发明实施例采用两种方式来桥接指针操作对BufferAllocator的访问,只需更改目标任务原始代码中内存分配返回的对象,内存的访问代码无需更改。第一种方式是通过软件层面的操作符重载来实现,第二种方式是通过底层的终端或操作系统钩子来实现。

在本发明的一种可选实施例中,所述响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,具体可以包括:

响应所述目标任务的申请内存请求,向所述目标任务返回指针对象,所述指针对象中包含所述预留空间的首地址,所述指针对象中还包含重载后的下标操作符;

所述判断所述目标地址是否位于所述内存预留空间之前,所述方法还可以包括:响应所述目标任务针对目标地址的内存访问请求,基于重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址。

对于第一种方式,本发明实施例定义了内存指针适配器IndexNumber,IndexNumber重载了内存访问操作的操作符,例如重载了下标操作的操作符(operator[])等。

在本发明实施例中,当BufferAllocator接收到size参数后,为目标任务分配预留空间,首先在内存中分配目标任务所需的Block数目,若内存中空闲Block数目不够,则在外存中创建剩余数目的文件,也即,在外存中分配剩余数目的Block,然后将这些Block用链表的形式连接起来,并返回起始Block的指针。

具体地,BufferAllocator返回的可以是IndexNumber指针对象,这个指针对象是一个类,模拟了指针的操作,其中存储了预留空间的首地址。

一个示例中,对于C/C++编程语言实现的目标任务应用程序,内存指针适配器IndexNumber的接口定义如表1所示。

表1

其中,IndexNumber对目标任务的用户代码隐藏了BufferAllocator类的实现细节,在构造函数中将size参数传给BufferAllocator类的实例allocator_。IndexNumber是一个指向size大小的内存指针对象,对IndexNumber的操作与已有编程语言中的指针类型类似。

进一步地,由于C/C++编程语言中的内存访问操作通过下标操作实现,为了使得内存指针适配器IndexNumber的行为与已有编程语言中的指针类型一致,本发明实施例对下标操作的操作符(operator[])进行了重载。此外,本发明实施例还对类型转换操作的操作符(operator char*())。这样,对于目标任务的原始代码中使用内存指针的地方,只需要进行简单的类型替换(如将类型T*替换为IndexNumber),即可完成从原有代码到内存指针适配器BufferAllocator的迁移。

在本发明实施例中,分配的存储块可以是不连续的,如果直接访问外存中的Block,由于该Block的地址不是有效的内存地址,可能会导致运行出错。本发明实施例通过IndexNumber类封装,对处于内存中的Block的地址访问行为与原始内存访问操作保持一致,对于处于外存中的Block的地址访问,IndexNumber将待访问的外存中的Block置换到内存中,这样可以保证目标任务的程序代码访问的目标地址始终有效,避免错误发生。

需要说明的是,本发明实施例中仅对部分操作符重载接口进行示例,在实际应用中,根据实际需求,还可以重载其他操作符,以使IndexNumber的行为与目标任务代码中的地址指针操作相匹配。例如,还可以对加法操作符、+=操作符、==操作符等进行重载。在具体实施中,目标任务应用程序的编程语言不限于C/C++,还可以包括Rust等编程语言。

通过内存指针适配器IndexNumber,只需在目标任务的原始代码中将内存的分配与释放操作替换为BufferAllocator对应的操作即可。由于使用IndexNumber重载了各种指针操作,BufferAllocator分配内存的过程对用户是透明的,无需更改目标任务的原有代码。本发明实施例提供的内存分配管理方法可以适用于任意的目标任务,在减少系统改造成本的同时,可以减少由于引入内存分配器对原有系统的侵入性。

本发明实施例对通用的内存操作如下标操作、偏移操作等的操作符进行了重载,使得IndexNumber的操作行为和指针操作一致。进一步地,本发明实施例可以定义用于置换存储块的函数,该函数可以被重载后的操作符所调用。例如,在重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址,并且确定该目标地址位于外存预留空间之后,可以调用该函数执行存储块的置换操作,将目标地址对应的存储块置换到内存中并返回置换后的内存地址。此外,本发明实施例实现了用磁盘作为备用内存,从磁盘置换内存的操作。这样,对于目标任务总有可用的内存,可以避免目标任务由于内存不足导致无法正常运行的情况发生。

在本发明的一种可选实施例中,所述响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间,具体可以包括:响应所述目标任务针对目标地址的内存访问请求,通过钩子函数获取所述目标地址,并判断所述目标地址是否位于所述内存预留空间。

对于第二种方式,在接收到所述目标任务针对目标地址的内存访问请求时,响应所述目标任务针对目标地址的内存访问请求,返回为该目标任务分配的预留空间的首地址,该首地址可以为指针。

本发明实施例通过硬件中断或软件钩子的方法捕获到该目标地址,并且判断该目标地址是否位于内存预留空间。如果确定该目标地址位于内存预留空间,则直接返回该目标地址;如果确定该目标地址位于外存预留空间,则利用预先定义的钩子函数将目标地址对应的存储块置换到内存中并返回置换后的内存地址。

本发明实施例通过软件层面对操作符重载的方式或者通过底层钩子的方式,实现了在扩展内存的同时,不用改变目标任务原始代码中内存操作的相关代码,可以减小对原始代码的影响。

在本发明的一种可选实施例中,所述方法还可以包括:回收所述目标任务释放的存储块,其中,若释放的存储块位于所述计算节点的内存中,则将释放的存储块标记为空闲存储块,若释放的存储块位于所述计算节点的外存中,则删除释放的存储块中存储的数据。

在本发明实施例中,当目标任务对存储块使用完成之后,内存分配器BufferAllocator可以对存储块进行回收,以避免长期占用不必要的存储空间,造成存储资源浪费。BufferAllocator执行一次内存回收操作时,从目标任务释放的内存空间起始的Block开始,逐一对释放的Block进行标记,对释放的内存中的Block标记为空闲,对释放的外存中的Block则删除该Block中的数据。

参照图3,示出了本发明的一种利用内存分配器BufferAllocator进行内存分配管理的流程示意图。如图3所示,计算节点在启动时可以初始化一个全局的内存管理类对象(BufferAllocator对象),在目标任务程序初始化时,可以向BufferAllocator对象传入size参数(目标任务的内存占用量),BufferAllocator对象根据传入的size参数为目标任务分配预留空间。目标任务向BufferAllocator对象申请内存,BufferAllocator对象向目标任务返回IndexNumber指针对象,IndexNumber指针对象中包含预留空间首个存储块的地址。目标任务根据IndexNumber指针对象访问目标地址,如果目标地址位于内存中,IndexNumber返回该目标地址,以使目标任务直接访问该目标地址。如果目标地址位于外存中,IndexNumber将外存中该目标地址的Block换入内存,并返回换入内存的Block的地址,以使目标任务访问内存中的Block。在上述流程中,目标任务申请内存,访问内存,以及释放内存的操作可以发生多次。实际的内存分配管理操作由BufferAllocator对象实现,IndexNumber指针对象桥接了基于Block的内存访问与原始代码中的基于指针的内存访问操作。

综上,本发明实施例预先为目标任务分配预留空间,该预留空间包括内存中的内存预留空间以及外存中的外存预留空间。响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址,并且响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间。对于内存预留空间中的目标地址,可以直接返回该目标地址供目标任务访问,对于外存预留空间中的目标地址,需要将对应的存储块置换到内存中进行访问。通过本发明实施例,可以为目标任务一次性预留足够的运行空间,在多个目标任务需要共享内存时,不会因为某个目标任务申请不到足够的内存导致任务运行失败的情况发生。相对于原有的内存分配方案,本发明实施例利用外存空间具有容量大、易扩展的特点,对目标任务的可用内存进行扩展,可以为目标任务提供更加充足的内存资源,以保证目标任务的正常运行。

此外,本发明实施例通过对操作符重载的方式对原始的内存分配管理操作进行适配,使得原有系统无需修改或较少修改即可使用本发明自定义的内存分配器。

再者,本发明实施例通过自定义的内存分配器,以自定义的存储块(Block)为单位,完成对计算所需的内存进行全生命周期的管理,内存管理粒度更小,内存管理方式更加灵活。内存申请时如果没有足够的内存,可以使用外存(如磁盘)作为备用的存储空间。在需要访问外存中保存的数据时,可以根据置换策略进行存储块交换,将外存中待访问的数据置换到内存中进行访问,在磁盘足够大的情况下,可以在物理或虚拟内存有限的情况下支持无限制数据量的计算任务。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

装置实施例

参照图4,示出了本发明的一种内存分配管理装置实施例的结构框图,所述装置可应用于计算节点,所述装置具体可以包括:

空间分配模块401,用于为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;

指针返回模块402,用于响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;

位置判断模块403,用于响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;

地址返回模块404,用于若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

可选地,所述指针返回模块,具体用于响应所述目标任务的申请内存请求,向所述目标任务返回指针对象,所述指针对象中包含所述预留空间的首地址,所述指针对象中还包含重载后的下标操作符;

所述装置还包括:

地址转换模块,用于响应所述目标任务针对目标地址的内存访问请求,基于重载后的下标操作符将所述内存访问请求对应的下标转换为目标地址。

可选地,所述位置判断模块,具体用于响应所述目标任务针对目标地址的内存访问请求,通过钩子函数获取所述目标地址,并判断所述目标地址是否位于所述内存预留空间。

可选地,所述空间分配模块,包括:

内存占用量确定子模块,用于确定目标任务所需的内存占用量;

总数目确定子模块,用于根据所述内存占用量确定待分配的存储块的总数目;

第一数目确定子模块,用于确定所述计算节点内存中的空闲存储块的第一数目;

分配子模块,用于若所述第一数目小于所述总数目,则从所述计算节点的内存中分配第一数目的存储块,以及从所述计算节点的外存中分配第二数目的存储块,所述第一数目与所述第二数目的和大于或等于所述总数目。

可选地,所述地址返回模块,包括:

空闲存储块查询子模块,用于查询所述计算节点的内存中是否存在空闲存储块;

可置换存储块确定子模块,用于若所述计算节点的内存中不存在空闲存储块,则在所述计算节点的内存中确定可置换存储块,并获取所述可置换存储块的内存地址;

第一地址返回子模块,用于将所述可置换存储块中存储的数据保存至外存中,以及向所述目标任务返回所述可置换存储块的内存地址,以供所述目标任务访问;

第二地址返回子模块,若所述计算节点的内存中存在空闲存储块,则向所述目标任务返回所述空闲存储块对应的内存地址,以供所述目标任务访问。

可选地,所述空闲存储块查询子模块,包括:

长度确定单元,用于获取空闲存储块链表的长度,所述空闲存储块链表用于记录所述计算节点的内存中各空闲存储块之间的关系;

空闲存储块确定单元,若所述空闲存储块链表的长度为空,则确定所述计算节点的内存中不存在空闲存储块,若所述空闲存储块链表的长度不为空,则确定所述计算节点的内存中存在空闲存储块。

可选地,所述可置换存储块确定子模块,包括:

链表获取单元,用于获取已用存储块链表,所述已用存储块链表用于记录所述计算节点的内存中各已用存储块之间的关系;

可置换存储块确定单元,用于将所述已用存储块链表队尾的存储块确定为可置换存储块;

所述装置还包括:

第一更新模块,用于从所述已用存储块链表中删除所述可置换存储块,并将所述可置换存储块标记为空闲存储块加入所述空闲存储块链表。

可选地,所述装置还包括:

第二更新模块,用于将所述空闲存储块标记为已用存储块加入已用存储块链表的队首。

可选地,所述空间分配模块,包括:

对象初始化模块,用于初始化全局的内存管理类对象;

空间分配子模块,用于将所述目标任务所需的内存占用量作为参数传入所述内存管理类对象,通过所述内存管理类对象根据所述内存占用量为所述目标任务分配预留空间。

可选地,所述装置还包括:

回收模块,用于回收所述目标任务释放的存储块,其中,若释放的存储块位于所述计算节点的内存中,则将释放的存储块标记为空闲存储块,若释放的存储块位于所述计算节点的外存中,则删除释放的存储块中存储的数据。

可选地,所述计算节点为密文计算系统中的计算节点,所述目标任务为密文计算任务,所述计算节点部署在容器或者虚拟机中。

本发明实施例预先为目标任务分配预留空间,该预留空间包括内存中的内存预留空间以及外存中的外存预留空间,对于外存预留空间,在访问时置换到内存中进行访问。通过本发明实施例,可以为目标任务一次性预留足够的运行空间,在多个目标任务需要共享内存时,不会因为某个目标任务申请不到足够的内存导致任务运行失败的情况发生。相对于原有的内存分配方案,本发明实施例利用外存空间具有容量大、易扩展的特点,对目标任务的可用内存进行扩展,可以为目标任务提供更加充足的内存资源,以保证目标任务的正常运行。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本发明实施例提供了一种用于内存分配管理的装置,所述装置应用于计算节点,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

图5是根据一示例性实施例示出的一种用于内存分配管理的装置800的框图。例如,装置800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。

参照图5,装置800可以包括以下一个或多个组件:处理组件802,存储器804,电源组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。

处理组件802通常控制装置800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理元件802可以包括一个或多个处理器820来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。

存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在装置800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。

电源组件806为装置800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为装置800生成、管理和分配电力相关联的组件。

多媒体组件808包括在所述装置800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。

音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当装置800处于操作模式,如呼叫模式、记录模式和语音信息处理模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。

I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。

传感器组件814包括一个或多个传感器,用于为装置800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为装置800的显示器和小键盘,传感器组件814还可以检测装置800或装置800一个组件的位置改变,用户与装置800接触的存在或不存在,装置800方位或加速/减速和装置800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。

通信组件816被配置为便于装置800和其他设备之间有线或无线方式的通信。装置800可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频信息处理(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。

在示例性实施例中,装置800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。

在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器804,上述指令可由装置800的处理器820执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

图6是本发明的一些实施例中服务器的结构示意图。该服务器1900可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processingunits,CPU)1922(例如,一个或一个以上处理器)和存储器1932,一个或一个以上存储应用程序1942或数据1944的存储介质1930(例如一个或一个以上海量存储设备)。其中,存储器1932和存储介质1930可以是短暂存储或持久存储。存储在存储介质1930的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1922可以设置为与存储介质1930通信,在服务器1900上执行存储介质1930中的一系列指令操作。

服务器1900还可以包括一个或一个以上电源1926,一个或一个以上有线或无线网络接口1950,一个或一个以上输入输出接口1958,一个或一个以上键盘1956,和/或,一个或一个以上操作系统1941,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。

一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行图1所示的内存分配管理方法。

一种非临时性计算机可读存储介质,当所述存储介质中的指令由装置(服务器或者终端)的处理器执行时,使得装置能够执行一种内存分配管理方法,所述方法包括:为目标任务分配预留空间,所述预留空间包括位于计算节点内存中的内存预留空间以及位于计算节点外存中的外存预留空间;响应所述目标任务的申请内存请求,向所述目标任务返回所述预留空间的首地址,以使所述目标任务根据所述首地址确定待访问的目标地址;响应所述目标任务针对目标地址的内存访问请求,判断所述目标地址是否位于所述内存预留空间;若确定所述目标地址位于所述内存预留空间,则返回所述目标地址,若确定所述目标地址位于所述外存预留空间,则将所述目标地址对应的存储块置换到内存中并返回置换后的内存地址。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

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

以上对本发明所提供的一种内存分配管理方法、一种内存分配管理装置和一种用于内存分配管理的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号