一种数据处理方法及装置与流程

文档序号:12946702阅读:137来源:国知局
一种数据处理方法及装置与流程

本发明涉及计算机技术领域,具体涉及一种数据处理方法及装置。



背景技术:

windows的引导程序(bootloader)在启动时,会读取可扩展固件接口(efi,extensiblefirmwareinterface)或统一的可扩展固件接口(uefi,unifiedextensiblefirmwareinterface)的内存映射(memorymap)文件。但是,如果内存映射文件中的memory条目(entry)数超过一定值,bootloader就会报错,从而导致windows启动失败。某些uefiapp或efiapp运行时,可能造成memoryentry数量过多的情况。在退出uefiapp或efiapp后,如果不做系统重启,而是直接启动硬盘上的windows,或者直接启动windows的安装盘,则很容易出现windows启动失败的现象。因此,如何有效避免因memoryentry数量过多而造成windows启动失败,成为亟待解决的问题。



技术实现要素:

有鉴于此,本发明期望提供一种数据处理方法及装置,能减少解决因memoryentry数量过多而造成windows启动失败的问题。

为达到上述目的,本发明的技术方案是这样实现的:

第一方面,本发明实施例提供了一种数据处理方法,所述方法包括:

从内存映像文件中确定出长度小于第一预设值的可用内存块;

调用可扩展固件接口(efi,extensiblefirmwareinterface)应用或统一的可扩展固件接口(uefi,unifiedextensiblefirmwareinterface)应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的条目(entry)数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值。

上述方案中,可选地,所述调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,包括:

在efi应用或uefi应用退出前,或在windows的引导程序启动前,调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型。

上述方案中,可选地,所述将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之前,还包括:

从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块。

上述方案中,可选地,所述从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块,包括:

统计所述长度小于第一预设值的可用内存块中不同长度值所占的比例;

统计内存映像文件中当前的entry数;

根据所述不同长度值所占的比例,以及所述entry数,确定待修改类型的可用内存块的长度值。

上述方案中,可选地,所述将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,包括:

若与所述可用内存块相邻的已使用内存块的类型为相同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型;

若与所述可用内存块相邻的已使用内存块的类型为不同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型中的任一种类型。

上述方案中,可选地,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之后,所述方法还包括:

通知内存映射文件对相同类型的内存块进行整合。

第二方面,本发明实施例提供了一种数据处理装置,所述装置包括:

确定模块,用于从内存映像文件中扫描并确定出长度小于第一预设值的可用内存块;

控制模块,用于调用可扩展固件接口(efi)应用或统一的可扩展固件接口(uefi)应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的entry数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值。

上述方案中,可选地,所述控制模块,用于在efi应用或uefi应用退出前,或在windows的引导程序启动前,调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型。

上述方案中,可选地,所述控制模块,还用于:将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之前,从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块。

上述方案中,可选地,所述控制模块,还用于:

统计所述长度小于第一预设值的可用内存块中不同长度值所占的比例;

统计内存映像文件中当前的entry数;

根据所述不同长度值所占的比例,以及所述entry数,确定待修改类型的可用内存块的长度值。

上述方案中,可选地,所述控制模块,还用于:

若与所述可用内存块相邻的已使用内存块的类型为相同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型;

若与所述可用内存块相邻的已使用内存块的类型为不同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型中的任一种类型。

上述方案中,可选地,所述控制模块,还用于:

将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之后,通知内存映射文件对相同类型的内存块进行整合。

第三方面,本发明实施例还提供了一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行本发明实施例所述的数据处理方法。

本发明实施例中,从内存映像文件中确定出长度小于第一预设值的可用内存块;调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的memoryentry数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值;如此,能减少解决因memoryentry数量过多而造成windows启动失败的问题。

附图说明

图1为本发明实施例提供的一种数据处理方法的流程示意图;

图2为本发明实施例提供的windows启动失败时,efimemorymap中列出的内存分布示意图;

图3为本发明实施例提供的对图2所示efimemorymap中的可用内存块的类型进行修改后得到的内存分布示意图;

图4为本发明实施例提供的对图3所示efimemorymap中的内存块进行整合后得到的内存分布示意图;

图5为本发明实施例提供的一种数据处理装置的结构示意图。

具体实施方式

为了能够更加详尽地了解本发明的特点与技术内容,下面结合附图对本发明的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明。

实施例一:

本发明实施例提供一种数据处理方法,如图1所述,所述方法包括:

步骤101、从内存映像文件中确定出长度小于第一预设值的可用内存块。

这里,所述长度小于第一预设值的可用内存块,可以理解为小块可用内存块。这里,所述内存映像可以理解为memorymap。

其中,所述memorymap中存储有用来描述内存块的使用状况表。

其中,所述memorymap中存储有各内存块的类型、大小、位置/地址等信息。

作为一种实施方式,所述从内存映像文件中确定出长度小于第一预设值的可用内存块,包括:

在efi或uefi退出前,扫描内存映像文件,从内存映像文件中确定出长度小于第一预设值的可用内存块。

一般来说,长度小于第一预设值的可用内存块是指类型为“available”的内存块。

步骤102、调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的条目(entry)数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值。

如此,通过调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型进行修改,能有效减少memoryentry数量,从而也会避免因memoryentry数量过多而造成windows启动失败的问题。

作为一种实施方式,所述调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,包括:

在efi应用或uefi应用退出前,或在windows的引导程序(bootloader)启动前,调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型。

如此,能够保证在windows的引导程序启动前,已经完成对可用内存块的类型的修改,降低内存映像中的memoryentry数量,从而也会避免因memoryentry数量过多而造成windows启动失败的问题。

可选地,所述将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之前,还包括:

从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块。

实际应用中,为了减少内存消耗,有时候并不需要对所有的可用内存块的类型进行修改。因此,可从所有可用内存块中选择出一部分可用内存块,修改这一部分可用内存块的类型即可。

作为一种具体实施方式,所述从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块,包括:

统计所述长度小于第一预设值的可用内存块中不同长度值所占的比例;

统计内存映像文件中当前的entry数;

根据所述不同长度值所占的比例,以及所述entry数,确定待修改类型的可用内存块的长度值。

举例来说,若统计得到内存映像中当前的entry数为m1,而额定entry数为m0,所述额定entry数是不会导致windows启动失败的entry数。若m1与m0的差值较大,则判定待修改类型的可用内存块的数量较多;反之,若m1与m0的差值较小,则判定待修改类型的可用内存块的数量较小。从而可根据待修改类型的可用内存块的多少,再结合可用内存块中不同长度值所占的比例,选定待修改类型的可用内存块的长度值,从而通过修改长度值为这类长度值的可用内存块的类型,使内存映像中的entry数下降,并且使entry数小于或等于m0。

如此,在实际应用中,为减少内存消耗,还可对可用内存块的大小作判断,只申请修改长度为一定阈值的可用内存块的类型即可。

图2示出了windows启动失败时,efimemorymap中列出的内存分布示意图,从图2可以看出,可用内存块的类型记为“available”,与每个可用内存块相邻的内存块均是其他类型的内存块,也就是说,与类型为“available”的可用内存块相邻的内存块的类型,肯定不是“available”类型。图2中,类型为“available”的可用内存块共有四个,这四个可用内存块的长度分别是2、2、1、3;类型为“loaderdata”的内存块共有四个,这四个内存块的长度分别是10、10、9、8。可见,类型为“available”的可用内存块的长度均较小,且其长度均小于其他类型的内存块的长度。

以图2所示内存映像中的各类内存块的分布为例,若申请使用图2中所有的类型为“available”的可用内存块,且申请类型选择为“loaderdata”,则经过处理该申请之后,内存块分布示意图如图3所示,对比图2和图3,图2中的可用内存块的类型,均由“available”变成了“loaderdata”。

作为一种实施方式,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之后,所述方法还包括:

通知内存映射文件对相同类型的内存块进行整合。

也即是说,通知内存映射文件统计不同类型的内存块,将相同类型的内存块整合成一块内存块。

继续以图2和图3为例,对图3中的类型为“loaderdata”的内存块经整合后,得到的内存分布示意图如图4所示,从图4可以看出,整合后的类型为“loaderdata”的内存块,长度为图3中类型为“loaderdata”的八块内存块的长度总和,地址从图3中第一块类型为“loaderdata”的内存块作为起始地址;且内存映像中关于类型为“loaderdata”的内存块的条目数,由8变成了1,进而可以有效减少内存映像中的总的条目数。

作为一种实施方式,所述将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,包括:

若与所述可用内存块相邻的已使用内存块的类型为相同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型;

若与所述可用内存块相邻的已使用内存块的类型为不同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型中的任一种类型。

举例来说,与可用内存块相邻的两个内存块,均为类型为第一类型的内存块,那么,确定所述可用内存块修改后的类型为第一类型。

再举例来说,与可用内存块相邻的两个内存块,分别为第一类型的内存块、第二类型的内存块;那么,确定所述可用内存块修改后的类型为第一类型,或为第二类型。此时,可用内存块修改后的类型具体是为第一类型,还是为第二类型,可随机确定,也可基于一定选择标准来定,例如,选择与较大内存块的类型相同。

本发明实施例中,从内存映像文件中确定出长度小于第一预设值的可用内存块;调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的memoryentry数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值;因此,不管是谁产生的memoryentry数,比如,由efi或uefi产生的,或是由第三方产生的,都能够有效减少内存块的数量,即可以大大减少memoryentry的数量。

实施例二

本发明实施例提供了一种数据处理装置,图5为本发明实施例提供的数据处理装置的组成结构示意图,如图5所示,所述数据处理装置包括:确定模块51、控制模块52;其中,

所述确定模块51,用于从内存映像文件中扫描并确定出长度小于第一预设值的可用内存块;

所述控制模块52,用于调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的entry数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值。

作为一种实施方式,所述控制模块52,用于在efi应用或uefi应用退出前,或在windows的引导程序启动前,调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型。

作为一种实施方式,所述控制模块52,还用于:将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之前,从所述长度小于第一预设值的可用内存块中,选择待修改类型的可用内存块。

作为一种实施方式,所述控制模块52,还用于:

统计所述长度小于第一预设值的可用内存块中不同长度值所占的比例;

统计内存映像文件中当前的entry数;

根据所述不同长度值所占的比例,以及所述entry数,确定待修改类型的可用内存块的长度值。

作为一种实施方式,所述控制模块52,还用于:

若与所述可用内存块相邻的已使用内存块的类型为相同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型;

若与所述可用内存块相邻的已使用内存块的类型为不同类型,则确定所述可用内存块修改后的类型为与所述可用内存块相邻的已使用内存块的类型中的任一种类型。

作为一种实施方式,所述控制模块52,还用于:

将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型之后,通知内存映射文件对相同类型的内存块进行整合。

本领域技术人员应当理解,本实施例的数据处理装置中各模块的功能,可参照前述数据处理方法的相关描述而理解。

实际应用中,上述确定模块51、控制模块52的具体结构均可对应于处理器。所述处理器具体的结构可以为微处理器(mcu,microcontrollerunit)、数字信号处理器(dsp,digitalsignalprocessing)或可编程逻辑器件(plc,programmablelogiccontroller)等具有处理功能的电子元器件或电子元器件的集合。其中,所述处理器包括可执行代码,所述可执行代码存储在存储介质中,所述处理器可以通过总线等通信接口与所述存储介质中相连,在执行具体的各单元的对应功能时,从所述存储介质中读取并运行所述可执行代码。所述存储介质用于存储所述可执行代码的部分优选为非瞬间存储介质。其中,所述可执行代码用于执行上述各实施例所述的控制方法。

本实施例所述数据处理装置,从内存映像文件中确定出长度小于第一预设值的可用内存块;调用efi应用或uefi应用的内存申请函数,将所述可用内存块的类型修改为与所述可用内存块相邻的已使用内存块的类型,使所述内存映像文件中的条目(entry)数由第一数值调整至第二数值,其中,所述第一数值大于所述第二数值;如此,能减少解决因memoryentry数量过多而造成windows启动失败的问题。

本实施例还提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行之后,能够实现前述任意一项或多项数据处理方法。

所述计算机存储介质可为各种类型的存储介质,在本实施例中可优选为非瞬间存储介质。

本领域技术人员应当理解,本实施例的存储介质中各程序的功能,可参照实施例所述的数据处理方法的相关描述而理解。

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

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

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

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

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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