发明内容
本发明实施例提供一种内存管理方法和装置,用于减少了单板重启时间,减轻了业务中断的严重性。
第一方面,本发明实施例提供一种内存管理方法,包括:将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,所述测试虚拟内存块所映射的物理内存块为测试物理内存块,所述第一可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,所述可用物理内存块组包括至少一个可用物理内存块,所述测试虚拟内存块为不可用的虚拟内存块;将所述第一可用虚拟内存块与所述第一可用物理内存块的映射关系更改为所述第一可用虚拟内存块与所述测试物理内存块的映射关系;将所述测试虚拟内存块与所述测试物理内存块的映射关系更改为所述测试虚拟内存块与所述第一可用物理内存块的映射关系;对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测。
在第一方面的第一种可能的实现方式中,所述可用物理内存块组中的一个当前未检测的可用物理内存块为所述可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。
结合第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测之后,还包括:若检测出所述第一可用物理内存未损坏,则将第二可用物理内存块更新为所述第一可用物理内存块,所述第二可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
结合第一方面或第一方面的第一种可能的实现方式或第一方面的第二种可能的实现方式,在第一方面的第四种可能的实现方式中,所述对所述测试虚拟内存块所映射的所述第一可用物理内存块进行检测之后,还包括:若检测出所述第一可用物理内存块已损坏,则将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块为所述预留物理内存块组中根据第二预设顺序位于最前面的当前不可用并且未损坏的预留物理内存块。
结合第一方面的第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
结合第一方面的第四种可能的实现方式或第一方面的第五种可能的实现方式或第一方面的第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之后,还包括:将第三可用物理内存块更新为所述第一可用物理内存块,所述第三可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
结合第一方面或第一方面的第一到第七种实现方式的任意一种可能的实现方式,在第一方面的第八种可能的实现方式中,所述将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中之前,包括:建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块;所述将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,包括:将所述第一可用物理内存块中存储的数据拷贝至所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块中。
结合第一方面的第八种可能的实现方式,在第一方面的第九种可能的实现方式中,所述建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之前,还包括:将物理内存划分为所述至少一个可用物理内存块和所述至少一个预留物理内存块,所述至少一个可用物理内存块构成所述可用物理内存块组,所述至少一个预留物理内存块构成所述可用预留物理内存块组。
结合第一方面的第九种可能的实现方式,在第一方面的第十种可能的实现方式中,每个物理内存块的大小为N倍的4K字节,所述N为大于或等于1的整数。
结合第一方面或第一方面的第一到第十种实现方式的任意一种可能的实现方式,在第一方面的第十一种可能的实现方式中,对所述第一物理内存块进行检测之后,还包括:锁定与所述物理内存通信的中央处理器CPU的外部中断。
结合第一方面的第十一种可能的实现方式,在第一方面的第十二种可能的实现方式中,对所述第一物理内存块进行检测之前,还包括:解锁所述CPU的外部中断。
第二方面,本发明实施例提供一种内存管理装置,包括:备份单元,用于将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,所述测试虚拟内存块所映射的物理内存块为测试物理内存块,所述第一可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,所述可用物理内存块组包括至少一个可用物理内存块,所述测试虚拟内存块为不可用的虚拟内存块;更改单元,用于将所述第一可用虚拟内存块与所述第一可用物理内存块的映射关系更改为所述第一可用虚拟内存块与所述测试物理内存块的映射关系;以及将所述测试虚拟内存块与所述测试物理内存块的映射关系更改为所述测试虚拟内存块与所述第一可用物理内存块的映射关系;检测单元,用于对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测。
在第二方面的第一种可能的实现方式中,所述可用物理内存块组中的一个当前未检测的可用物理内存块为所述可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。
结合第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,还包括:第一更新单元,用于若所述检测单元检测出所述第一可用物理内存未损坏,则将第二可用物理内存块更新为所述第一可用物理内存块,所述第二可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
结合第二方面或第二方面的第一种可能的实现方式或第二方面的第二种可能的实现方式,在第二方面的第四种可能的实现方式中,所述更改单元还用于若所述检测单元检测出所述第一可用物理内存块已损坏,则将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块。
结合第二方面的第四种可能的实现方式,在第二方面的第五种可能的实现方式中,所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块为所述预留物理内存块组中根据第二预设顺序位于最前面的当前不可用并且未损坏的预留物理内存块。
结合第二方面的第五种可能的实现方式,在第二方面的第六种可能的实现方式中,所述第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
结合第二方面的第四种可能的实现方式或第二方面的第五种可能的实现方式或第二方面的第六种可能的实现方式,在第二方面的第七种可能的实现方式中,还包括:第二更新单元,用于所述更改单元将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之后,将第三可用物理内存块更新为所述第一可用物理内存块,所述第三可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
结合第二方面或第二方面的第一到第七种实现方式的任意一种可能的实现方式,在第二方面的第八种可能的实现方式中,还包括:建立单元,用于所述备份单元将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中之前,建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块;所述备份单元具体用于将所述第一可用物理内存块中存储的数据拷贝至所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块中。
结合第二方面的第八种可能的实现方式,在第二方面的第九种可能的实现方式中,还包括:划分单元,用于所述建立单元建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之前,将物理内存划分为所述至少一个可用物理内存块和所述至少一个预留物理内存块,所述至少一个可用物理内存块构成所述可用物理内存块组,所述至少一个预留物理内存块构成所述可用预留物理内存块组。
结合第二方面的第九种可能的实现方式,在第二方面的第十种可能的实现方式中,每个物理内存块的大小为N倍的4K字节,所述N为大于或等于1的整数。
结合第二方面或第二方面的第一到第十种实现方式的任意一种可能的实现方式,在第二方面的第十一种可能的实现方式中,还包括:处理单元,用于所述检测单元对所述第一物理内存块进行检测之后,锁定与所述物理内存通信的中央处理器CPU的外部中断。
结合第二方面的第十一种可能的实现方式,在第二方面的第十二种可能的实现方式中,所述处理单元还用于所述检测单元对所述第一物理内存块进行检测之前,解锁所述CPU的外部中断。
本发明实施例提供的内存管理方法和装置,通过更改映射关系,将第一可用物理内存块更改为测试虚拟内存块所映射的物理内存块,对测试虚拟内存块所映射的第一可用物理内存块进行内存检测。实现在单板运行的过程中对物理内存进行内存检测,从而可以避免或减少在单板重启的过程对物理内存进行内存检测,减少了单板重启时间,减轻了业务中断的严重性。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明内存管理方法实施例一的流程图,如图1所示,本实施例的方法可以包括:
S101、将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中。
本实施例中,单板中的物理内存中包括可用物理内存块组,可用物理内存块组包括至少一个可用物理内存块,第一可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,第一可用物理内存块与第一虚拟内存块存在映射关系,即第一可用物理内存块为第一虚拟内存块所映射的物理内存块,可用物理内存块为当前可以为应用程序可用的物理内存块,测试虚拟内存块与一物理内存块存在映射关系,该测试虚拟内存块所映射的物理内存块为测试物理内存块,该测试物理内存块可以为预留物理内存块,预留物理内存块可以是在物理内存中预先划分出的一个物理内存块,并且该物理内存块先不与可用虚拟内存块建立映射关系,其中,测试虚拟内存块为不可用的虚拟内存块,即为应用程序不可用的虚拟内存块,那么测试虚拟内存块所映射的物理内存块为不可用的物理内存块。需要说明的是,一个虚拟内存块在一时间与一个物理内存块存在映射关系。
在单板不重启的状态下,需要对第一可用物理内存块进行检测,由于单板处于工作状态,所以第一可用物理内存块中存储的数据随时会被访问,也即会随时访问第一可用虚拟内存块,那么可以将第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中。
S102、将第一可用虚拟内存块与第一可用物理内存块的映射关系更改为第一可用虚拟内存块与测试物理内存块的映射关系。
本实施例中,在将第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块组之后,可以将第一可用虚拟内存块所映射的物理内存更改为测试物理内存块,那么在单板处于工作状态时,此时第一可用虚拟内存块所映射的物理内存中存储有数据,因此可以随时对第一可用虚拟内存块进行访问,并且访问的数据与映射关系更改之前一样,将第一可用虚拟内存块与第一可用物理内存块的映射关系更改为第一可用虚拟内存块与测试物理内存块的映射关系,也即将第一可用虚拟内存块与第一可用物理内存块的映射关系删除并建立第一可用虚拟内存块与测试物理内存块的映射关系,例如:将第一可用虚拟内存块的指针由第一可用虚拟内存块指向测试物理内存块。
S103、将测试虚拟内存块与测试物理内存块的映射关系更改为测试虚拟内存块与第一可用物理内存块的映射关系。
本实施例中,可以将测试虚拟内存块所映射的物理内存更改为第一可用物理内存块,那么在单板处于工作状态时,可以对测试虚拟内存块所映射的物理内存块进行内存检测,将将测试虚拟内存块与测试物理内存块的映射关系更改为测试虚拟内存块与第一可用物理内存块的映射关系,也即将测试虚拟内存块与上述的测试物理内存块的映射关系删除并建立测试虚拟内存块与第一可用物理内存块的映射关系,例如:将测试虚拟内存块的指针由测试虚拟块指向第一可用物理内存块。
需要说明的是,S102与S103的执行顺序可以不分先后,本发明实施例在此不做限定。
S104、对测试虚拟内存块所映射的第一可用物理内存块进行内存检测。
本实施例中,可以对测试虚拟内存块所映射的物理内存块进行内存检测,也就是在映射关系发生更改之后,对测试虚拟内存块所映射的第一可用物理内存块进行内存检测,需要说明的是,如何对物理内存块进行内存检测与现有技术类似,本发明实施例在此不再赘述。由于已经将第一可用物理内存块中存储的数据拷贝至测试物理内存块中,然后可以第一虚拟内存块可以访问测试内存块中存储的上述数据,因此在单板运行的过程中对物理内存进行内存检测,从而可以避免或减少在单板重启的过程对物理内存进行内存检测,减少了单板重启时间,减轻了业务中断的严重性。
本发明实施例一提供的内存管理方法,通过将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,将第一可用虚拟内存块与第一可用物理内存块的映射关系更改为第一可用虚拟内存块与测试物理内存块的映射关系,将测试虚拟内存块与测试物理内存块的映射关系更改为测试虚拟内存块与第一可用物理内存块的映射关系,对测试虚拟内存块所映射的第一可用物理内存块进行内存检测。通过修改映射关系,实现待检测的物理内存块映射到测试虚拟内存块,可以在单板运行的过程中对物理内存进行内存检测,从而可以避免或减少在单板重启的过程对物理内存进行内存检测,减少了单板重启时间,减轻了业务中断的严重性。
在本发明上述实施例的基础上,可选地,可用物理内存块组中的一个当前未检测的可用物理内存块为可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块,即第一可用物理内存块为可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。可选地,第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
在本发明内存管理方法实施例二中,在本发明上述方法实施例的基础上,可选地,对测试虚拟内存块所映射的第一可用物理内存块进行内存检测之后,还包括:若检测出第一可用物理内存未损坏,则将第二物理内存块更新为第一可用物理内存块,也就是将第二可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块(第一可用物理内存块)中,此时测试虚拟内存块变更为第一可用物理内存块,将第二可用虚拟内存块与第二可用物理内存块的映射关系更改为第二可用虚拟内存块与第一可用物理内存块的映射关系,将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与第二可用物理内存块的映射关系,然后对第二可用物理内存块进行内存检测,若检测出第二可用物理内存未损坏,则循环上述步骤,因此,通过上述步骤可以通过修改映射关系,实现待检测的物理内存块逐步映射到测试虚拟内存块,可以在单板工作的状态下对物理内存的所有可用物理内存进行内存检测,从而可以减少单板重启时间。第二可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,可选地,第二可理物再内存为可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。可选地,第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
图2为本发明内存管理方法实施例三的流程图,如图2所示,本实施例的方法在本发明上述方法实施例的基础上,进一步地,在对测试虚拟内存块所映射的第一可用物理内存块进行检测之后,本实施例的方法还可以包括:
S201、若检测出第一可用物理内存块已损坏,则将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系。
本实施例中,若检测出第一可用物理内存块已损坏,则不能将第一可用物理内存块让应用程序访问到,则需要将第一可用物理内存块进行隔离,那么可以将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,也即删除测试虚拟内存块与第一可用物理内存块的映射关系,并建立测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,那么损坏的第一可用物理内存块未与任何的虚拟内存块建立映射关系,从而将第一可用物理内存块进行隔离,第一可用物理内存块上存储的数据也将不会被访问到,因此可以实现在对损坏的物理内存块进行隔离的时候不需要单板重启,避免了业务的中断。
将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系的一种实现过程可以为:将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,然后对测试虚拟内存块所映射的预留物理内存块进行内存检测,若检测出该预留物理内存块未损坏,则执行S202;若检测出该预留物理内存块已损坏,则将测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中下一个当前不可用的预留物理内存块的映射关系,直到检测出测试虚拟内存块所映射的预留物理内存块未损坏,再执行S202。
可选地,预留物理内存块组中的一个当前不可用的预留物理内存块为预留物理内存块组中根据第二预设顺序位于最前面的当前不可用的预留物理内存块。
可选地,第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
进一步地,本实施例的方法还可以包括:
S202、将第三可用物理内存块更新为第一可用物理内存块。
本实施例中,将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系之后可以将第三可用物理内存块更新为第一可用物理内存块,也就是将第三可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块(一预留物理内存块)中,此时测试虚拟内存块由第一可用物理内存块变更为一预留物理内存块,将第三可用虚拟内存块与第三可用物理内存块的映射关系更改为第三可用虚拟内存块与该一预留物理内存块的映射关系,将测试虚拟内存块与该一预留物理内存块的映射关系更改为测试虚拟内存块与第三可用物理内存块的映射关系,然后对第三可用物理内存块进行内存检测,若检测出第三可用物理内存已损坏,则循环上述步骤,因此,通过上述步骤可以实现在单板工作的状态下对物理内存的所有损坏的物理内存块进行隔离,从而可以避免了因为内存损坏而导致的单板重启,保证单板的正常运行,避免的业务中断。第三可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,可选地,第三可用物理内存为可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。可选地,第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
本发明实施例三提供的内存管理方法,进一步地,若检测出第一可用物理内存块已损坏,则将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,将第三可用物理内存块更新为第一可用物理内存块,从而可以在单板运行的过程中通过修改映射关系对损坏的物理内存块进行隔离,从而可以避免了因为内存损坏而导致的单板重启,保证单板的正常运行,避免了业务的中断。
图3为本发明内存管理方法实施例四的流程图,如图3所示,本实施例的方法可以包括:
S301、将物理内存划分为至少一个可用物理内存块和至少一个预留物理内存块。
本实施例中,可选地,可以将一个物理内存划分为至少一个可用物理内存块和至少一个预留物理内存块。或者,物理内存在出厂时已经划分为至少一个可用物理内存块和至少一个预留物理内存块,至少一个可用物理内存块构成可用物理内存块组,至少一个预留物理内存块构成预留物理内存块组,可选地,每个物理内存块的大小为N倍的4K字节,N为大于或等于1的整数,其中,1K字节等于1024字节。
S302、建立测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系。
本实施例中,可以在需要对可用物理内存块进行检测的时候,建立测虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,该预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系为预留物理内存块组中根据第二预设顺序位于最前面的当前不可用的预留物理内存块,第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
建立测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系的一种实现过程可以为:建立测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,然后对测试虚拟内存块所映射的预留物理内存块进行内存检测,若检测出该预留物理内存块未损坏,则执行S302;若检测出该预留物理内存块已损坏,则将测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中下一个当前不可用的预留物理内存块的映射关系,直到检测出测试虚拟内存块所映射的预留物理内存块未损坏,再执行S303。
S303、将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中。
本实施例中,测试虚拟内存块所映射的物理内存可以称为测试物理内存块。也就是第一可用物理内存块中存储的数据拷贝至预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块(此时可以称为测试物理内存块)中。
S304、将第一可用虚拟内存块与第一可用物理内存块的映射关系更改为第一可用虚拟内存块与测试物理内存块的映射关系。
S305、将测试虚拟内存块与测试物理内存块的映射关系更改为测试虚拟内存块与第一可用物理内存块的映射关系。
S306、对第一可用虚拟内存块所映射的第一可用物理内存块进行内存检测。若检测出第一可用物理内存块未损坏,则执行S307;若检测出第一可用物理内存块已损坏,则执行S308和S309。
可选地,在对第一可用物理内存块进行内存检测之后,可以锁定与所述物理内存通信的中央处理器(Central Processing Unit,简称为CPU)的外部中断,以保证在搬移数据和更改映射关系的过程物理内存不会被外界所操作。在搬移数据和更改映射关系之后,也即对第一可用物理内存块进行内存检测之前,还可以包括:解锁CPU的外部中断。
S307、将第二可用物理内存块更新为第一可用物理内存块。
本实施例中,S307的具体实现过程可以参见本发明方法实施例二中相关的记载,本发明实施例在此不再赘述。
S308、将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系。
S309、将第三可用物理内存块更新为第一可用物理内存块。
本实施例中,S308和S309的具体实现过程与本发明方法实施例三中的S201和S202的具体实现过程类似,详细可以参见本发明上述方法实施例中的相关记载,本发明实施例在此不再赘述。
需要说明的是,执行S307也即将第二可用物理内存块更新为第一可用物理内存块再执行S303-S306,执行S309也即将第三可用物再内存块更新为第一可用物理内存块再执行S303-S306。以此循环操作,可以在单板运行的状态下,对物理内存的所有可用物理内存块进行内存检测并隔离损坏的物理内存块,即实现在线内存检测和隔离,从而可以避免了因为内存损坏而导致的单板重启,保证单板的正常运行,避免了业务的中断。
需要说明的是,并不是每次执行S302-S309均需要执行S301。
本发明实施例四提供的内存管理方法,通过将物理内存划分为至少一个可用物理内存块和至少一个预留物理内存块,建立测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,将第一可用虚拟内存块与第一可用物理内存块的映射关系更改为第一可用虚拟内存块与测试物理内存块的映射关系,将测试虚拟内存块与测试物理内存块的映射关系更改为测试虚拟内存块与第一可用物理内存块的映射关系,对第一可用虚拟内存块所映射的第一可用物理内存块进行内存检测,若检测出第一可用物理内存块未损坏,则将第二可用物理内存块更新为第一可用物理内存块;若检测出第一可用物理内存块已损坏,则将测试虚拟内存块与第一可用物理内存块的映射关系更改为测试虚拟内存块与预留物理内存块组中的一个当前不可用的预留物理内存块的映射关系,将第三可用物理内存块更新为第一可用物理内存块。通过修改映射关系,实现待检测的物理内存块逐步映射到测试虚拟内存块,可以在单板运行的状态下,对物理内存的所有可用物理内存块进行内存检测并隔离损坏的物理内存块,即实现在线内存检测和隔离,从而可以避免了因为内存损坏而导致的单板重启,提高单板运行的可靠性,避免了业务的中断。
图4为本发明内存管理方法实施例五的流程图,如图4所示,本实施例以一个具体的实现方式进行详细描述,本实施例的方法可以包括:
S401、将物理内存划分为18个可用物理内存块和3个预留物理内存块。
本实施例中,可以将物理内存划分为21个大小为4K字节的物理内存块,按照物理地址从小到大的顺序将前18个物理内存块作为可用物理内存块,后3个物理内存块作为预留物理内存块,按照物理地址从小到大的顺序排序该18个可用物理内存块的编号依次为:P0、P1、P2、P3、P4、P5、P6、P7、P8、P9、P10、P11、P12、P13、P14、P15、P16和P17,按照物理地址从小到大的顺序排序该3个预留物理内存块的编号依次为:P18、P19和P20。然后将18个可用物理内存块进行虚拟内存映射,可以得到18个可用虚拟内存块,按照所映射的物理内存块的物理地址从小到大的顺序排序该18个可用虚拟内存块的编号依次为:V0、V1、V2、V3、V4、V5、V6、V7、V8、V9、V10、V11、V12、V13、V14、V15、V16和V17。3个预留物理内存块先不进行虚拟内存映射,因此这部分保留物理内存块是无法被系统进程所使用的。
S402、建立测试虚拟内存块V18与预留物理内存块P18的映射关系。
本实施例中,在需要对可用物理内存块进行内存检测的时候,可以分配一个测试虚拟内存块,该测试虚拟内存块的编号为V18,根据物理内存地址从小到大的顺序,建立测试虚拟内存块V18与预留物理内存块P18的映射关系,如图5所示,然后对测试虚拟内存块V18所映射的物理内存块(预留物理内存块P18)进行内存检测,以保证与测试虚拟内存块映射的预留物理内存块未损坏,若预留物理内存块P18已损坏,则将测试虚拟内存块V18与预留物理内存块P18的映射关系更改为测试虚拟内存块V18与预留物理内存块P18的下一个预留物理内存块(即预留物理内存块P19)的映射关系,若预留物理内存块P18未损坏,则执行S403。本实施例中预留物理内存块P18未损坏。
S403、将可用虚拟内存块V0所映射的可用物理内存块P0中存储的数据拷贝至测试虚拟内存V18所映射的预留物理内存块P18中。
本实施例中,根据物理内存地址从小到大的顺序,可以将可用虚拟内存块V0中的数据拷贝至测试虚拟内存块V18中,实际上是将可用虚拟内存块V0所映射的可用物理内存块P0中存储的数据拷贝至测试虚拟内存V18所映射击的预留物理内存块P18中。
可选地,在将可用虚拟内存块V0所映射的可用物理内存块P0中存储的数据拷贝至测试虚拟内存块V18所映射击的预留物理内存块P18中之前,还包括:锁定CPU的外部中断。
S404、将可用虚拟内存块V0与可用物理内存块P0的映射关系更改为可用虚拟内存块V0与预留物理内存块P18的映射关系,并将测试虚拟内存块V18与预留物理内存块P18的映射关系更改为测试虚拟内存块V18与可用物理内存块P0的映射关系。
本实施例中,在将数据拷贝之后,还要对映射关系进行修改,将可用物理内存块P0映射到测试虚拟内存块V18,测试虚拟内存块V18的所映射的物理内存块为测试物理内存块,可用物理内存块P0成为测试物理内存块。将预留物理内存块P18映射到可用虚拟内存块V0使用。更改之后的物理内存块与虚拟内存块的映射关系如图6所示。
S405、对测试虚拟内存块V18所映射的可用物理内存块P0进行内存检测。
本实施例中,对测试虚拟内存块V18进行内存检测,实际上是对测试虚拟内存块V18所映射的可用物理内存块P0进行内存检测,本发明实施例中可用物理内存块P0未损坏,那么经过内存检测后,可以检测出可用物理内存块P0未损坏。
可选地,在对测试虚拟内存块V18所映射的可用物理内存块P0进行内存检测之前还可以包括:解锁CPU的外部中断。
可选地,在对测试虚拟内存块V18所映射的可用物理内存块P0进行内存检测之后还可以包括:锁定CPU的外部中断。
S406、检测出可用物理内存块P0未损坏,将可用虚拟内存块V1所映射的可用物理内存块P1中存储的数据拷贝至测试虚拟内存V18所映射击的可用物理内存块P0中。
本实施例中,在检测出可用物理内存块P0未损坏,根据物理内存地址从小到大的顺序,可以将可用虚拟内存块V1中的数据拷贝至测试虚拟内存块V18中,实际上是将可用虚拟内存块V1所映射的可用物理内存块P1中存储的数据拷贝至测试虚拟内存V18所映射击的可用物理内存块P0中。
S407、将可用虚拟内存块V1与可用物理内存块P1的映射关系更改为可用虚拟内存块V1与可用物理内存块P0的映射关系,并将测试虚拟内存块V18与可用物理内存块P0的映射关系更改为测试虚拟内存块V18与可用物理内存块P1的映射关系。
本实施例中,在将数据拷贝之后,还要对映射关系进行修改,将可用物理内存块P1映射到测试虚拟内存块V18,测试虚拟内存块V18的所映射的物理内存块为测试物理内存块,可用物理内存块P1成为测试物理内存块。将可用物理内存块P0映射到可用虚拟内存块V1使用。更改之后的物理内存块与虚拟内存块的映射关系如图7所示。
S408、对测试虚拟内存块V18所映射的可用物理内存块P1进行内存检测。
本实施例中,对测试虚拟内存块V18进行内存检测,实际上是对测试虚拟内存块V18所映射的可用物理内存块P1进行内存检测,本发明实施例中可用物理内存块P0已损坏,那么经过内存检测后,可以检测出可用物理内存块P1已损坏。
可选地,在对测试虚拟内存块V18所映射的可用物理内存块P1进行内存检测之前还可以包括:解锁CPU的外部中断。
可选地,在对测试虚拟内存块V18所映射的可用物理内存块P1进行内存检测之后还可以包括:锁定CPU的外部中断。
S409、检测出可用物理内存块P1已损坏,将测试虚拟内存块V18与可用物理内存块P1的映射关系更改为测试虚拟内存块V18与预留物理内存块P19的映射关系。
本实施例中,在检测出可用物理内存块P1已损坏,那么需要将可用物理内存P1进行隔离,可以将测试虚拟内存块V18与可用物理内存块P1的映射关系更改为测试虚拟内存块V18与预留物理内存块P19的映射关系,更改后的虚拟内存块与物理内存块的映射关系如图8所示,从而使得已损坏的可用物理内存块P1没有与可用虚拟内存块存在映射关系,那么也就不会使用已损坏的可用物理内存块P1,从而实现在线对损坏的物理内存进行隔离。
需要说明的是,执行S409之后可以对可用虚拟内存块V2所映射的可用物理内存块P2进行内存检测,具体实现过程与S403-S405的具体实现过程类似,详细可以参见本发明实施例上述的相关记载,以此循环,本发明实施例可以对可用物理内存块:P3-P17进行内存检测,并隔离出损坏的物理内存块,从而大大提高单板运行的可靠性。从而实现对物理内存的在线检测和故障内存的隔离。而且本发明实施例可以在备份数据和更改映射关系的时候独占CPU,内存测试的时候释放CPU,因此独占CPU的时间非常短,对CPU利用率的影响非常小,不影响单板业务的正常运行。
图9为本发明内存管理装置实施例一的结构示意图,如图9所示,本实施例的装置可以包括:备份单元11、更改单元12和检测单元13,其中,备份单元11用于将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,所述测试虚拟内存块所映射的物理内存块为测试物理内存块,所述第一可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,所述可用物理内存块组包括至少一个可用物理内存块,所述测试虚拟内存块为不可用的虚拟内存块。更改单元12用于将所述第一可用虚拟内存块与所述第一可用物理内存块的映射关系更改为所述第一可用虚拟内存块与所述测试物理内存块的映射关系;以及将所述测试虚拟内存块与所述测试物理内存块的映射关系更改为所述测试虚拟内存块与所述第一可用物理内存块的映射关系。检测单元13用于对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测。
本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理和技术效果类似,详细可以参见本发明上述方法实施例中的相关记载,此处不再赘述。
图10为本发明内存管理装置实施例二的结构示意图,如图10所示,本实施例的装置在图9所示装置结构的基础上,可选地,所述可用物理内存块组中的一个当前未检测的可用物理内存块为所述可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。
可选地,所述第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
可选地,本实施例的装置还可以包括:第一更新单元14,该第一更新单元14用于若检测单元13检测出所述第一可用物理内存未损坏,则将第二可用物理内存块更新为所述第一可用物理内存块,所述第二可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
可选地,上述的更改单元12还用于若检测单元13检测出所述第一可用物理内存块已损坏,则将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块。
可选地,所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块为所述预留物理内存块组中根据第二预设顺序位于最前面的当前不可用并且未损坏的预留物理内存块。
可选地,所述第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
可选地,本实施例的装置还可以包括:第二更新单元15,第二更新单元15用于更改单元12将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之后,将第三可用物理内存块更新为所述第一可用物理内存块,所述第三可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
可选地,本实施例的装置还可以包括:建立单元16,建立单元16用于备份单元11将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中之前,建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块;备份单元11具体用于将所述第一可用物理内存块中存储的数据拷贝至所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块中。
可选地,本实施例的装置还可以包括:划分单元17,划分单元17用于建立单元16建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之前,将物理内存划分为所述至少一个可用物理内存块和所述至少一个预留物理内存块,所述至少一个可用物理内存块构成所述可用物理内存块组,所述至少一个预留物理内存块构成所述可用预留物理内存块组。
可选地,每个物理内存块的大小为N倍的4K字节,所述N为大于或等于1的整数。
可选地,本实施例的装置还可以包括:处理单元18,处理单元18用于检测单元13对所述第一物理内存块进行检测之后,锁定与所述物理内存通信的中央处理器CPU的外部中断。
可选地,处理单元18还用于检测单元13对所述第一物理内存块进行检测之前,解锁所述CPU的外部中断。
本实施例的装置,可以用于执行本发明上述方法实施例的技术方案,其实现原理和技术效果类似,详细可以参见本发明上述方法实施例中的相关记载,此处不再赘述。
图11为本发明内存管理装置实施例三的结构示意图,如图11所示,本实施例的装置包括存储器21和与存储器21连接的处理器22,其中,存储器21中存储一组程序代码,存储器21可以包括非易失性存储器(Non-volatileMemory)。处理器22可以是一个CPU,或者是特定集成电路(ApplicationSpecific Integrated Circuit,简称:ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。处理器22用于调用存储器21中存储的程序代码,用于执行如下操作:
将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,所述测试虚拟内存块所映射的物理内存块为测试物理内存块,所述第一可用物理内存块为可用物理内存块组中的一个当前未检测的可用物理内存块,所述可用物理内存块组包括至少一个可用物理内存块,所述测试虚拟内存块为不可用的虚拟内存块;将所述第一可用虚拟内存块与所述第一可用物理内存块的映射关系更改为所述第一可用虚拟内存块与所述测试物理内存块的映射关系;将所述测试虚拟内存块与所述测试物理内存块的映射关系更改为所述测试虚拟内存块与所述第一可用物理内存块的映射关系;对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测。
可选地,所述可用物理内存块组中的一个当前未检测的可用物理内存块为所述可用物理内存块组中根据第一预设顺序位于最前面的一个当前未检测的可用物理内存块。
可选地,所述第一预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
可选地,所述对所述测试虚拟内存块所映射的所述第一可用物理内存块进行内存检测之后,还包括:若检测出所述第一可用物理内存未损坏,则将第二可用物理内存块更新为所述第一可用物理内存块,所述第二可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
可选地,所述对所述测试虚拟内存块所映射的所述第一可用物理内存块进行检测之后,还包括:若检测出所述第一可用物理内存块已损坏,则将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块。
可选地,所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块为所述预留物理内存块组中根据第二预设顺序位于最前面的当前不可用并且未损坏的预留物理内存块。
可选地,所述第二预设顺序为物理内存地址从大到小的顺序或者物理内存地址从小到大的顺序。
可选地,所述将所述测试虚拟内存块与第一可用物理内存块的映射关系更改为所述测试虚拟内存块与预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之后,还包括:将第三可用物理内存块更新为所述第一可用物理内存块,所述第三可用物理内存块为所述可用物理内存块组中的一个当前未检测的可用物理内存块。
可选地,所述将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中之前,包括:建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系,所述预留物理内存块组包括至少一个预留物理内存块;所述将第一可用虚拟内存块所映射的第一可用物理内存块中存储的数据拷贝至测试虚拟内存块所映射的物理内存块中,包括:将所述第一可用物理内存块中存储的数据拷贝至所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块中。
可选地,所述建立所述测试虚拟内存块与所述预留物理内存块组中的一个当前不可用并且未损坏的预留物理内存块的映射关系之前,还包括:将物理内存划分为所述至少一个可用物理内存块和所述至少一个预留物理内存块,所述至少一个可用物理内存块构成所述可用物理内存块组,所述至少一个预留物理内存块构成所述可用预留物理内存块组。
可选地,每个物理内存块的大小为N倍的4K字节,所述N为大于或等于1的整数。
可选地,对所述第一物理内存块进行检测之后,还包括:锁定与所述物理内存通信的中央处理器CPU的外部中断。
可选地,对所述第一物理内存块进行检测之前,还包括:解锁所述CPU的外部中断。
需要说明的是,处理器22通过调用存储器21中存储的程序代码具体实现的技术方案可以参见本发明内存管理方法的上述实施例,其实现原理和技术效果类似,详细可以参见上述实施例中的相关记载,在此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。