发明内容
为克服上述技术问题或者至少部分地解决上述技术问题,特提出以下技术方案:
本发明的一个实施例提出了一种多系统的内存管理方法,包括:当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
优选地,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面的步骤,包括:确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面;将任一操作系统中一个待合并的已分配内存页面的存储数据的标识信息与其他操作系统中待合并的已分配内存页面的存储数据的标识信息进行对比;基于对比结果,判断在其他操作系统中是否存在待合并的已分配内存页面,该待合并的已分配内存页面与所述任一操作系统中一个待合并的已分配内存页面存储有相同的存储数据。
优选地,确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面的步骤,包括基于预置算法,确定任一操作系统中已分配内存页面的存储数据的原始标识信息;针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;若原始标识信息与再次确定的标识信息相同时,则选取该标识信息所属的已分配内存页面作为待合并的已分配内存页面;若原始标识信息与再次确定的标识信息不同时,则重复执行针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息的步骤,直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
优选地,该方法还包括:将已合并的已分配内存页面存储至预置存储区域;其中,当在预置存储区域中扫描到已合并的已分配内存页面时,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面的步骤,还包括:将任一操作系统中一个已分配内存页面的存储数据与已合并的已分配内存页面的存储数据进行对比;基于对比结果,判断是否存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面;若不存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面,则基于确定的任一操作系统中一个已分配内存页面的存储数据的标识信息,判断是否选取任一操作系统中一个已分配内存页面作为待合并的已分配内存页面。
优选地,该方法还包括:当检测到任一操作系统的任一进程对已合并的已分配内存页面的存储数据进行修改时,为任一进程创建该已合并的已分配内存页面的新内存页面实例。
本发明的另一个实施例提出了一种多系统的内存管理装置,包括:第一扫描模块,用于当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;判断模块,用于基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;合并模块,用于若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
优选地,判断模块包括:选取单元,用于确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面;第一对比单元,用于将任一操作系统中一个待合并的已分配内存页面的存储数据的标识信息与其他操作系统中待合并的已分配内存页面的存储数据的标识信息进行对比;第一判断单元,判断在其他操作系统中是否存在待合并的已分配内存页面,该待合并的已分配内存页面与所述任一操作系统中一个待合并的已分配内存页面存储有相同的存储数据。
优选地,选取单元包括:第一确定单元,用于基于预置算法,确定任一操作系统中已分配内存页面的存储数据的原始标识信息;第二确定单元,用于针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;第一执行单元,用于若原始标识信息与再次确定的标识信息相同时,则选取该标识信息所属的已分配内存页面作为待合并的已分配内存页面;第二执行单元,用于若原始标识信息与再次确定的标识信息不同时,则重复执行针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息的步骤,直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
优选地,该装置还包括:存储模块,用于将已合并的已分配内存页面存储至预置存储区域;第二扫描模块,用于在预置存储区域中扫描已合并的已分配内存页面;其中,当第二扫描模块在预置存储区域中扫描到已合并的已分配内存页面时,判断模块还包括:第二对比单元,用于将任一操作系统中一个已分配内存页面的存储数据与已合并的已分配内存页面的存储数据进行对比;第二判断单元,用于基于对比结果,判断是否存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面;第三对比单元,用于若不存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面,则基于确定的任一操作系统中一个已分配内存页面的存储数据的标识信息,判断是否选取任一操作系统中一个已分配内存页面作为待合并的已分配内存页面。
优选地,该装置还包括:创建模块,用于当检测到任一操作系统的任一进程对已合并的已分配内存页面的存储数据进行修改时,为任一进程创建该已合并的已分配内存页面的新内存页面实例。
本发明的又一个实施例提出了一种移动终端,包括存储器、处理器以及存储在存储器上并在处理器上运行的计算机程序;处理器执行计算机程序时实现多系统的内存管理方法技术方案中的任意一个技术方案。
本发明的技术方案中,当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面;从而释放多余的内存空间,以供其他应用程序顺利地运行,提高内存资源的使用效率;同时不会影响正在运行的应用程序对当前内存资源的占用,也不会给用户造成不良体验。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
图1为本发明一个实施例的多系统的内存管理方法的流程示意图。
需要说明的是,本实施例的执行主体是至少两个移动操作系统共用内核。
步骤S101:当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;步骤S102:基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;步骤S103:若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
本发明的技术方案中,当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面;从而释放多余的内存空间,以供其他应用程序顺利地运行,提高内存资源的使用效率;同时不会影响正在运行的应用程序对当前内存资源的占用,也不会给用户造成不良体验。
以下针对各个步骤的具体实现做进一步的说明:
步骤S101:当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描。
其中,内存页面中的存储数据包括但不限于:存放在内存页面中数据结构堆区中的对象和数组、存放在内存页面中数据结构栈区中的局部变量值和函数参数值、存放在内存页面中数据结构数据区的静态变量和字符串常量、存放在内存页面中数据结构代码区的应用程序的代码数据;每个内存页面的大小为4kb或4Mb。
具体地,当操作系统内核,检测到当前移动终端共有两个操作系统,如OS1和OS2,运行时,在该操作系统内核中运行守护进程,且该守护进程分别对当前运行的各个操作系统中已分配内存页面中的内存数据进行扫描。
步骤S102:基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面。
具体地,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面的步骤,包括:如图2所示,步骤S201:确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面;步骤S202:将任一操作系统中一个待合并的已分配内存页面的存储数据的标识信息与其他操作系统中待合并的已分配内存页面的存储数据的标识信息进行对比;步骤S203:基于对比结果,判断在其他操作系统中是否存在待合并的已分配内存页面,该待合并的已分配内存页面与所述任一操作系统中一个待合并的已分配内存页面存储有相同的存储数据。
具体地,确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面的步骤,包括:如图3所示,步骤S301:基于预置算法,确定任一操作系统中已分配内存页面的存储数据的原始标识信息;步骤S302:针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;步骤S303:若原始标识信息与再次确定的标识信息相同时,则选取该标识信息所属的已分配内存页面作为待合并的已分配内存页面;步骤S304:若原始标识信息与再次确定的标识信息不同时,则重复执行针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息的步骤,直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
其中,预置算法包括但不限于:哈希算法。
例如,当守护进程第一次扫描内存页面时,基于哈希算法,对当前正在运行的两个操作系统中的一个操作系统,如OS1,中的已分配内存页面的存储数据进行计算,将计算结果确定为该已分配内存页面的存储数据的原始标识信息;如,计算OS1中A进程的一个虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据的原始哈希值为“DXXXXXXXXXXX7”,并记录该已分配内存页面与该已分配内存页面的存储数据的原始标识信息即通过计算得到的原始哈希值;针对OS1中同一进程A,基于哈希算法,以预置周期,如5分钟,再次计算相同内存页面虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”,并将新计算的哈希值确定为该已分配内存页面的存储数据的标识信息,由于记录的原始标识信息“DXXXXXXXXXXX7”与再次确定的标识信息“DXXXXXXXXXXX7”相同,则选取该标识信息所属的虚拟地址信息为“004XX7b8”已分配内存页面作为待合并的已分配内存页面;若基于5分钟预置周期,再次针对OS1中进程A的虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据计算的哈希值,为“DXXXXXXXXXXX8”,则由于记录的原始标识信息“DXXXXXXXXXXX7”与再次确定的标识信息“DXXXXXXXXXXX8”不同;直到扫描结束前,重复执行:针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
当守护进程将选取到的任一操作系统中待合并的已分配内存页面与该待合并的已分配内存页面的存储数据的哈希值,如,OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面与该待合并的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”,与一颗二叉搜索树数据结构中存储的其他操作系统,如OS2,中待合并的已分配内存页面进行比较;将该二叉搜索树命名为临时二叉搜索树,若判断该临时二叉搜索树中存在被存储的其他操作系统,如OS2,中待合并的已分配内存页面,则将OS1中进程A的该虚拟地址信息为“004XX7b8”的待合并的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”与OS2中待合并的已分配内存页面的存储数据的哈希值进行对比,基于待合并的已分配内存页面的存储数据的哈希值的对比结果,判断在该临时二叉搜索树中是否存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面;当哈希值对比结果为相同时,则判断在该临时二叉搜索树中存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面;当哈希值对比结果为不同时,则判断在该临时二叉搜索树中不存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面。
需要说明的是,上述实施例中的任一操作系统中一个待合并的已分配内存页面是针对运行在该任一操作系统中的进程的待合并的已分配内存页面;而其他操作系统中待合并的已分配内存页面则是针对运行在该其他一个操作系统中的进程的待合并的已分配内存页面。
步骤S103:若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
具体地,当守护进程基于哈希值对比结果,判断出在临时二叉搜索树中存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面,则将这两个存储有相同存储数据的内存页面进行合并,释放出多余的内存页面空间,同时将该已合并的已分配内存页面存储至另一个二叉搜索树数据结构中,将该另一个二叉搜索树命名为合并二叉搜索树。
当守护进程基于哈希值对比结果,判断出在临时二叉搜索树中不存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面,则将该OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面和该待合并的已分配内存页面的存储数据的哈希值,如“DXXXXXXXXXXX7”,存储到该临时二叉搜索树中新建立的节点处。
具体地,该方法还包括:将已合并的已分配内存页面存储至预置存储区域;其中,当在预置存储区域中扫描到已合并的已分配内存页面时,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面的步骤,还包括:将任一操作系统中一个已分配内存页面的存储数据与已合并的已分配内存页面的存储数据进行对比;基于对比结果,判断是否存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面;若不存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面,则基于确定的任一操作系统中一个已分配内存页面的存储数据的标识信息,判断是否选取任一操作系统中一个已分配内存页面作为待合并的已分配内存页面。
例如,守护进程将已合并的已分配内存页面存储至合并二叉搜索树中后,当守护进程对后续任一操作系统中已分配内存页面进行扫描时,需先在合并二叉搜索树中扫描保存的已合并的已分配内存页面,并通过memcmp函数将选取到的将任一操作系统中一个已分配内存页面的存储数据与已合并的已分配内存页面的存储数据进行对比,如,将选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面的存储数据,与已合并的已分配内存页面的存储数据的进行对比,若memcmp函数返回值为“0”,则该对比结果为OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面与合并二叉搜索树中已合并的已分配内存页面是具有相同存储数据的内存页面,则直接释放该选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面;若memcmp函数返回值大于“0”或小于“0”,则对比结果为OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面与合并二叉搜索树中已合并的已分配内存页面是不具有相同存储数据的内存页面,则基于哈希算法,计算选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面的存储数据的哈希值,基于该确定的哈希值,根据上述步骤S301-步骤S303判断是否选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面作为待合并的已分配内存页面;当判断该选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面可作为待合并的已分配内存页面,则继续上述步骤S202和步骤S203来判断在临时二叉搜索树中是否存在与该OS1中进程B的虚拟地址信息为“054XXXb8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,的待合并的已分配内存页面。
需要说明的是,存储在合并二叉搜索树中的已合并的已分配内存页面已经被至少两个操作系统占用;由于上述步骤S301-步骤S304、步骤S202和步骤S203均已经在上述实施例中具体阐述过,此处就不再赘述;在上述实施例中,若根据上述步骤S301-步骤303,判断为该选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面不可作为待合并的已分配内存页面,当判断在与合并二叉搜索树中已合并的已分配内存页面是不具有相同存储数据的内存页面时,则执行步骤S304。
具体地,该方法还包括:当检测到任一操作系统的任一进程对已合并的已分配内存页面的存储数据进行修改时,为任一进程创建该已合并的已分配内存页面的新内存页面实例。
例如,当操作系统内核检测到OS1的一个进程C对合并二叉搜索树中的已合并的已分配内存页面的存储数据进行修改时,则为该进程C创建该已合并的已分配内存页面的新内存页面实例,以供该进程C使用。
需要说明的是,当守护进程扫描完成后,删除临时二叉搜索树,同时保留合并二叉搜索树,等待下次扫描时重新建立临时二叉搜索树。
图4为本发明中的另一个实施例的多系统的内存管理装置的结构框架示意图。
第一扫描模块401,当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描;判断模块402,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面;合并模块403,若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
以下针对各个模块的具体实现做进一步的说明:
第一扫描模块401,当检测到至少两个操作系统运行时,对各个操作系统中已分配内存页面中的存储数据进行扫描。
其中,内存页面中的存储数据包括但不限于:存放在内存页面中数据结构堆区中的对象和数组、存放在内存页面中数据结构栈区中的局部变量值和函数参数值、存放在内存页面中数据结构数据区的静态变量和字符串常量、存放在内存页面中数据结构代码区的应用程序的代码数据;每个内存页面的大小为4kb或4Mb。
具体地,当操作系统内核的第一扫描模块401,检测到当前移动终端共有两个操作系统,如OS1和OS2,运行时,在该操作系统内核中运行守护进程,且该守护进程分别对当前运行的各个操作系统中已分配内存页面中的内存数据进行扫描。
判断模块402,基于扫描到的已分配内存页面中的存储数据,判断在不同操作系统中是否存在存储有相同存储数据的已分配内存页面。
具体地,判断模块402,如图5所示,包括:选取单元501,确定存储数据的标识信息,并基于标识信息,选取各个操作系统中待合并的已分配内存页面;第一对比单元502,将任一操作系统中一个待合并的已分配内存页面的存储数据的标识信息与其他操作系统中待合并的已分配内存页面的存储数据的标识信息进行对比;第一判断单元503,基于对比结果,判断在其他操作系统中是否存在待合并的已分配内存页面,该待合并的已分配内存页面与所述任一操作系统中一个待合并的已分配内存页面存储有相同的存储数据。
具体地,选取单元包括501:第一确定单元,基于预置算法,确定任一操作系统中已分配内存页面的存储数据的原始标识信息;第二确定单元,针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;第一执行单元,若原始标识信息与再次确定的标识信息相同时,则选取该标识信息所属的已分配内存页面作为待合并的已分配内存页面;第二执行单元,若原始标识信息与再次确定的标识信息不同时,则重复执行针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息的步骤,直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
其中,预置算法包括但不限于:哈希算法。
例如,当守护进程第一次扫描内存页面时,选取单元501中的第一确定单元,基于哈希算法,对当前正在运行的两个操作系统中的一个操作系统,如OS1,中的已分配内存页面的存储数据进行计算,将计算结果确定为该已分配内存页面的存储数据的原始标识信息;如,计算OS1中A进程的一个虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据的原始哈希值为“DXXXXXXXXXXX7”,并记录该已分配内存页面与该已分配内存页面的存储数据的原始标识信息即通过计算得到的原始哈希值;选取单元501中的第二确定单元针对OS1中同一进程A,基于哈希算法,以预置周期,如5分钟,再次计算相同内存页面虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”,并将新计算的哈希值确定为该已分配内存页面的存储数据的标识信息,由于记录的原始标识信息“DXXXXXXXXXXX7”与再次确定的标识信息“DXXXXXXXXXXX7”相同,则选取单元501中的第一执行单元选取该标识信息所属的虚拟地址信息为“004XX7b8”已分配内存页面作为待合并的已分配内存页面;若基于5分钟预置周期,再次针对OS1中进程A的虚拟地址信息为“004XX7b8”的已分配内存页面的存储数据计算的哈希值,为“DXXXXXXXXXXX8”,则由于记录的原始标识信息“DXXXXXXXXXXX7”与再次确定的标识信息“DXXXXXXXXXXX8”不同;直到扫描结束前,选取单元501中的第二执行单元重复执行:针对同一进程,基于预置算法,以预置周期再次确定相同内存页面地址的已分配内存页面的存储数据的标识信息;直至再次确定的标识信息与上一次确定的标识信息相同,并将该已分配内存页面作为待合并的已分配内存页面。
当第一对比单元502将选取到的任一操作系统中待合并的已分配内存页面与该待合并的已分配内存页面的存储数据的哈希值,如,OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面与该待合并的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”,与一颗二叉搜索树数据结构中存储的其他操作系统,如OS2,中待合并的已分配内存页面进行比较;将该二叉搜索树命名为临时二叉搜索树,若判断该临时二叉搜索树中存在被存储的其他操作系统,如OS2,中待合并的已分配内存页面,则将OS1中进程A的该虚拟地址信息为“004XX7b8”的待合并的已分配内存页面的存储数据的哈希值“DXXXXXXXXXXX7”与OS2中待合并的已分配内存页面的存储数据的哈希值进行对比,第一判断单元503基于待合并的已分配内存页面的存储数据的哈希值的对比结果,判断在该临时二叉搜索树中是否存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面;当哈希值对比结果为相同时,则判断在该临时二叉搜索树中存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面;当哈希值对比结果为不同时,则判断在该临时二叉搜索树中不存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面。
需要说明的是,上述实施例中的任一操作系统中一个待合并的已分配内存页面是针对运行在该任一操作系统中的进程的待合并的已分配内存页面;而其他操作系统中待合并的已分配内存页面则是针对运行在该其他一个操作系统中的进程的待合并的已分配内存页面。
合并模块403,若存在存储有相同存储数据的已分配内存页面,则合并存储有相同存储数据的已分配内存页面。
具体地,当守护进程基于哈希值对比结果,判断出在临时二叉搜索树中存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面,则合并模块403将这两个存储有相同存储数据的内存页面进行合并,释放出多余的内存页面空间,同时将该已合并的已分配内存页面存储至另一个二叉搜索树数据结构中,将该另一个二叉搜索树命名为合并二叉搜索树。
当守护进程基于哈希值对比结果,判断出在临时二叉搜索树中不存在与OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,中待合并的已分配内存页面,则合并模块403将该OS1中进程A的虚拟地址信息为“004XX7b8”的待合并的已分配内存页面和该待合并的已分配内存页面的存储数据的哈希值,如“DXXXXXXXXXXX7”,存储到该临时二叉搜索树中新建立的节点处。
具体地,该装置还包括:存储模块,将已合并的已分配内存页面存储至预置存储区域;第二扫描模块,在预置存储区域中扫描已合并的已分配内存页面;其中,当第二扫描模块在预置存储区域中扫描到已合并的已分配内存页面时,判断模块还包括:第二对比单元,将任一操作系统中一个已分配内存页面的存储数据与合并后的已分配内存页面的存储数据进行对比;第二判断单元,基于对比结果,判断是否存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面;第三对比单元,若不存在与任一操作系统中一个已分配内存页面存储有相同存储数据的已合并的已分配内存页面,则基于确定的任一操作系统中一个已分配内存页面的存储数据的标识信息,判断是否选取任一操作系统中一个已分配内存页面作为待合并的已分配内存页面。
例如,存储模块将已合并的已分配内存页面存储至合并二叉搜索树中后,当守护进程对后续任一操作系统中已分配内存页面进行扫描时,需先由第二扫描模块在合并二叉搜索树中扫描保存的已合并的已分配内存页面,并通过判断模块中的第二对比单元的memcmp函数将选取到的将任一操作系统中一个已分配内存页面的存储数据与已合并的已分配内存页面的存储数据进行对比,如,将选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面的存储数据,与已合并的已分配内存页面的存储数据的进行对比,若memcmp函数返回值为“0”,则判断模块中的第二判断单元判断该对比结果为OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面与合并二叉搜索树中已合并的已分配内存页面是具有相同存储数据的内存页面,则直接释放该选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面;若memcmp函数返回值大于“0”或小于“0”,则判断模块中的第二判断单元判断对比结果为OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面与合并二叉搜索树中已合并的已分配内存页面是不具有相同存储数据的内存页面,则判断模块中的第三对比单元基于哈希算法,计算选取到的OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面的存储数据的哈希值,基于该确定的哈希值,根据上述步骤S301-步骤S303判断是否选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面作为待合并的已分配内存页面;当判断该选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面可作为待合并的已分配内存页面,则继续上述步骤S202和步骤S203来判断在临时二叉搜索树中是否存在与该OS1中进程B的虚拟地址信息为“054XXXb8”的待合并的已分配内存页面存储有相同存储数据的其他操作系统,如OS2,的待合并的已分配内存页面。
需要说明的是,存储在合并二叉搜索树中的已合并的已分配内存页面已经被至少两个操作系统占用;由于上述第一确定单元、第二确定单元、第一执行单元、第二执行单元、第一对比单元502、第一判断单元503均已经在上述实施例中具体阐述过,此处就不再赘述;在上述实施例中,若根据上述第一确定单元、第二确定单元、第一执行单元,判断为该选取该OS1中进程B的虚拟地址信息为“054XXXb8”的已分配内存页面不可作为待合并的已分配内存页面,当判断在与合并二叉搜索树中已合并的已分配内存页面是不具有相同存储数据的内存页面时,则执行第二执行单元。
具体地,该装置还包括:创建模块,用于当检测到任一操作系统的任一进程对已合并的已分配内存页面的存储数据进行修改时,为任一进程创建该已合并的已分配内存页面的新内存页面实例。
例如,当操作系统内核检测到OS1的一个进程C对合并二叉搜索树中的已合并的已分配内存页面的存储数据进行修改时,则创建模块为该进程C创建该已合并的已分配内存页面的新内存页面实例,以供该进程C使用。
需要说明的是,当守护进程扫描完成后,通过该装置还包括的删除模块删除临时二叉搜索树,同时保留合并二叉搜索树,等待下次扫描时重新建立临时二叉搜索树。
本发明的又一个实施例提出了一种移动终端,包括存储器、处理器以及存储在存储器上并在处理器上运行的计算机程序;处理器执行计算机程序时实现多系统的内存管理方法技术方案中的任意一个技术方案,由于这些技术方案已在上述实施例中清楚地阐述过了,在此就不再赘述。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。