一种移动设备内存管理方法及装置与流程

文档序号:12664073阅读:201来源:国知局
一种移动设备内存管理方法及装置与流程

技术领域

本发明涉及内存管理,尤其涉及一种移动设备内存管理系统及方法。



背景技术:

随着3G和智能机时代的来临,手机等移动设备上的应用程序越来越多,这类手机等移动设备采用多任务的操作系统,可以同时运行着多个任务。为了提高多任务的用户体验,手机等移动设备配备了大容量内存。但是,内存容量的增加受到成本、功耗、体积等的限制。因此,如何在多任务情况下降低内存使用量成为亟待解决的问题。

内存交换是在PC机和服务器上广泛使用的一种用来降低内存使用量的方法。它的基本原理是:当系统内存不足时,把内存中的一些内容交换到外存中,从而腾出内存空间;当系统运行到需要被交换到外存的内容时,就把交换到外存中的内容再次交换到内存中;在这个过程中如果发生内存不足,就会涉及到另一次交换过程。这样,系统的有效内存空间大小就是实际内存大小加上外存上可以用来存放交换内容的空间之和。通过内外存交换,可以实现用较少的内存达到更大内存的效果。目前,PC机和服务器上的内存交换方法基本上是作为操作系统的一个基本功能(即虚拟存储器管理)模块在操作系统的内核中实现,其使用LRU(Lease Recently Use,最近最少使用)算法,将最近最长时间不使用的优先交换出去,并以内存页为最小单位进行交换。内存页是操作系统管理内存的基本单位,32位的Linux操作系统的一个内存页大小一般为4KB。

然而,PC机和服务器上使用的内存交换方式存在以下问题:

1)当把最近最长时间不使用的内存页交换出去时,有可能发生当前要运行的应用程序就要使用刚被交换出去的内存页,于是这部分被交换出去的内存页中的内容又马上要交换到内存中来;

2)为了提高内存使用率,操作系统每次会选择尽可能少交换内存页,于是当前要运行的应用程序在正常运行过程中可能又会发生内存不足的情况,于是系统又会进行内存交换,以便让应用程序能够正常运行下去。

这两个问题导致无效的内存交换和内存交换过于频繁,而且,在进行内存交换时,系统不能执行任何其它的操作。因此,过多和频繁的内存交换就会使应用程序运行变慢,运行不流畅,运行过程中时不时出现短促的停顿,这会极大降低用户体验。PC机和服务器由于CPU性能强劲,这种运行变慢和运行不流畅对用户体验的影响相对轻微,而手机等移动设备的CPU性能相对较弱,运行变慢和运行不流畅对用户体验的影响就会很明显,从而导致用户体验变得很差。正是由于这个原因,在手机等移动设备上都没有使用内存交换来降低内存使用量。



技术实现要素:

本发明要解决的主要技术问题是,提供一种移动设备中内存管理的方法及装置,在通过内存交换降低内存使用量的同时,尽量做到不影响用户体验。

根据本发明的一种实施方式,提供一种移动设备内存管理方法,包括:查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序;根据所述待交换的应用程序执行内存交换处理,其中,所述执行内存交换处理在启动所述指定应用程序之前完成。

进一步地,所述查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序这一步骤包括:从正运行的应用程序中查找符合预定算法的应用程序;从查找到的符合预定算法的应用程序中查找与指定应用程序无依赖关系的应用程序,将其作为待交换的应用程序。

一种实施例中,根据所述待交换的应用程序执行内存交换处理这一步骤包括:选中一个所述待交换的应用程序,将该选中的应用程序所对应的进程所属的内存页交换到外存中;判断该应用程序所占的内存量与系统当前的可用内存量之和是否大于等于第一预设阈值;如果不是,则继续执行选中一个所述待交换的应用程序这一步骤。

另一种实施例中,根据待交换的应用程序执行内存交换处理这一步骤包括:选中一个所述待交换的应用程序,标记该选中的应用程序;判断该标记的应用程序所占的内存量与系统当前的可用内存量之和是否大于等于第一预设阈值;如果不是,则继续执行选中一个所述待交换的应用程序这一步骤;如果是,则将所有标记的应用程序各自对应的进程所属的内存页交换到外存中。

又一种实施例中,根据待交换的应用程序执行内存交换处理这一步骤包括:将所述待交换的应用程序所对应的进程所属的内存页交换到外存中。

优选地,所述查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序这一步骤之前还包括:判断系统当前的可用内存量是否大于等于第二预设阈值;若小于所述第二预设阈值,则执行所述查找与指定应用程序无依赖关系且符合预定算法的应用程序作为待交换的应用程序步骤;否则不作处理。

优选地,所述符合预定算法的应用程序包括最近最少使用CPU的应用程序。

优选地,根据待交换的应用程序执行内存交换管理处理这一步骤之后还包括:执行正常的应用程序启动流程启动所述指定应用程序;当所述指定应用程序为系统当前正待启动的新的应用程序时,所述根据待交换的应用程序执行内存交换管理处理这一步骤之后还包括:执行正常的应用程序启动流程启动所述新的应用程序。

根据本发明的另一种实施方式,提供一种移动设备内存管理装置,包括:应用管理与控制模块,用于查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序;内存交换模块,用于根据所述应用管理与控制模块的指示,将所述待交换的应用程序所对应的进程所属的内存页交换到外存中。

进一步地,所述符合预定算法的应用程序包括最近最少使用CPU的应用程序。

本发明的有益效果在于:在进行内存交换时既考虑了按预定算法查找待交换的应用程序,又考虑到应用程序间的依赖性,从而消除了无效的内存交换,提高了用户使用设备的体验感。一种实施例中还考虑了一次交换出去的内存页数量与系统当前最大内存使用量的关系,从而解决了内存交换过于频繁问题,降低内存交换频率;又一种实施例中考虑在启动程序前完成内存交换,保证在应用程序运行过程中没有内存交换,从而消除内存交换对应用程序运行过程的影响。

附图说明

图1是本发明实施例提供的移动设备内存管理装置的结构示意图;

图2是本发明实施例一移动设备内存管理方法的流程示意图;

图3是本发明实施例二移动设备内存管理方法的流程示意图;

图4是本发明实施例三移动设备内存管理方法的流程示意图;

图5是本发明实施例四移动设备内存管理方法的流程示意图;

图6是本发明实施例五移动设备内存管理方法的流程示意图;

图7是本发明实施例六移动设备内存管理方法的流程示意图;

图8是本发明一种实施例应用于Android手机中的内存管理装置的结构示意图;

图9是与图8相对应的Android手机中内存管理方法的流程示意图。

具体实施方式

下面通过具体实施方式结合附图对本发明作进一步详细说明。

本发明实施例的设计思想是:1)选择要交换出去的内存页时,既考虑使用预定算法来选择应用程序,也考虑当前要运行的应用程序是否可能使用,只有同时满足这两个条件的内存页才被选择交换出去;2)一次交换出去的内存页数量要满足当前要运行的应用程序可能的最大内存使用量;3)内存交换在启动当前要运行的应用程序之前完成。其中,思想点1)消除了无效的内存交换,思想点2)降低了内存交换频率到只有1次,思想点3)保证在应用程序运行过程中没有内存交换,从而消除内存交换对应用程序运行过程的打扰。一种实施例中将这三点结合起来,就可以既能够使用内存交换来降低内存使用量,又不会降低应用程序运行的速度和流畅性,消除了传统内存交换技术在移动设备如手机上的缺点。

如图1所示,本发明一种实施例提供的移动设备中内存管理装置包括:应用管理与控制模块和内存交换模块。其中,应用管理与控制模块,用于查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序;所述内存交换模块,用于根据所述应用管理与控制模块的指示,将所述待交换的应用程序所对应的进程所属的内存页交换到外存中。一种实施例中,内存是RAM,外存是FLASH。

本发明实施方式提供了基于上述内存管理装置的内存管理方法,包括:查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序;根据所述待交换的应用程序执行内存交换处理。

一种实施例中,预定算法采用类似最近最少使用页面置换算法(LRU)的算法,即最近最少使用CPU算法(为方便描述,下文将最近最少使用CPU的算法也称为LRU算法),也就是说,在该实施例中,符合预定算法的应用程序为最近最少使用CPU的应用程序;其他实施例中还可以使用其他算法,本发明不限于LRU这种算法。

一种实施例中,所述查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序这一步骤包括:从正运行的应用程序中查找符合预定算法的应用程序;从查找到的符合预定算法的应用程序中查找与指定应用程序无依赖关系的应用程序,将其作为待交换的应用程序。对于该步骤,一种示例性做法是:查找符合预定算法的一个应用程序;判断该查找到的应用程序与指定应用程序之间是否存在依赖关系;若存在依赖关系,则重新查找下一个符合预定算法的应用程序。

对于根据所述待交换的应用程序执行内存交换处理这一步骤:

一种实施例中,该步骤包括:将所述待交换的应用程序所对应的进程所属的内存页交换到外存中。

另一种实施例中该步骤包括:选中一个所述待交换的应用程序,将该选中的应用程序所对应的进程所属的内存页交换到外存中;判断该应用程序所占的内存量与系统当前的可用内存量之和是否大于等于第一预设阈值;如果不是,则继续执行选中一个所述待交换的应用程序这一步骤。出于执行效率上的考虑,可将该实施例进行优化,即该步骤包括:选中一个所述待交换的应用程序,标记该选中的应用程序;判断该标记的应用程序所占的内存量与系统当前的可用内存量之和是否大于等于第一预设阈值;如果不是,则继续执行选中一个所述待交换的应用程序这一步骤;如果是,则将所有标记的应用程序各自对应的进程所属的内存页交换到外存中。这里,第一预设阈值为实验值,实施例中第一预设阈值是能满足移动设备中任意一个应用程序运行时需要的内存量。

一种实施例中,所述查找与指定应用程序无依赖关系且符合预定算法的至少一个应用程序作为待交换的应用程序这一步骤之前还包括:判断系统当前的可用内存量是否大于等于第二预设阈值;若小于第二预设阈值,则执行所述查找与指定应用程序无依赖关系且符合预定算法的应用程序作为待交换的应用程序步骤;否则不作处理。这里,第二预设阈值为实验值,实施例中第二预设阈值是能满足移动设备中任意一个应用程序运行时需要的内存量。

一种实施例中,根据待交换的应用程序执行内存交换管理处理这一步骤之后还包括:执行正常的应用程序启动流程启动所述指定应用程序;当所述指定应用程序为系统当前正待启动的新的应用程序时,所述根据待交换的应用程序执行内存交换管理处理这一步骤之后还包括:执行正常的应用程序启动流程启动所述新的应用程序。

以下通过几个实施例并结合图2-9详细说明根据本发明实施方式提供的移动设备内存管理方法。为便于描述,以下各实施例中统一采用的预定算法为前述LRU算法,即最近最少使用CPU;应理解,本发明实施例还可以使用其他算法,并不限于LRU算法。

实施例一:

如图2所示,本实施例包含如下步骤:

步骤S201:按预定算法查找APP;

采用LRU算法查找应用程序APP,即在当前运行应用程序列表中查找最近最少使用CPU的应用程序;可以理解,正在运行的应用程序并不一定是正占用CPU的应用程序,而是操作系统为这个应用程序创建了进程的应用程序。

步骤S202:判断指定应用程序是否依赖于所查找的应用程序APP的组件,这里,指定应用程序是指当前运行应用程序列表中除应用程序APP外的其他应用程序。

若指定应用程序与应用程序APP存在依赖关系,则排除应用程序APP,转步骤S201,查找下一个最近最少使用CPU的应用程序;可以理解,排除应用程序APP是指不考虑将应用程序APP对应的进程所属的内存页作为可以交换出去的内存页。

若预定的应用程序与应用程序APP不存在依赖关系,则转步骤S203。

步骤S203:进行内存交换,具体而言,把查找到的最近最少使用CPU的应用程序APP所对应的进程所属的内存页作为可以交换出去的内存页,将其交换到外存中。

步骤S204:内存交换流程结束。

本实施例既考虑LRU算法的优势又考虑应用程序之间组件的依赖关系,只有同时满足这两个条件的内存页才被选择交换出去,从而消除了无效的内存交换。

实施例二:

如图3所示,本实施例包含如下步骤:

步骤S301:与实施例一的步骤S201相同,即,在当前运行应用程序列表中查找最近最少使用CPU的应用程序APP。

步骤S302:判断指定应用程序是否依赖于应用程序APP的组件,同样地,这里的指定应用程序是当前运行应用程序列表中除应用程序APP外的应用程序。若存在依赖关系,则排除应用程序APP,转步骤S301,查找下一个最近最少使用CPU的应用程序;若不存在依赖,则转步骤S303;

步骤S303:将步骤S302中得到的符合预定算法且不存在依赖关系的应用程序所对应的进程所属的所有内存页作为可以交换出去的内存页,通知内存管理模块把这些内存页交换到外存中;

步骤S304:把系统当前的可用内存量加上步骤S303中交换出去的内存量,判断二者之和是否大于等于第一预设阈值。这里,第一预设阈值含义如前述,在此不再赘述

若二者之和大于等于预设阈值,转步骤S305;否则转步骤S301,查找下一个最近最少使用CPU的应用程序;

步骤S305:内存交换流程结束。

本实施例不仅既考虑LRU算法的优势又考虑应用程序之间组件的依赖性关系,还考虑了进行一次内存交换的内存量要满足可能使用的最大内存量,只有同时满足这三个条件的内存页才被选择交换出去,从而既消除了无效的内存交换,又降低了交换频率至只有一次内存交换。

实施例三:

如图4所示,本实施例包括如下步骤:

步骤S401:与实施例一的步骤S201相同,即,在当前运行应用程序列表中查找最近最少使用CPU的应用程序APP。

步骤S402:判断指定应用程序是否依赖于应用程序APP的组件,同样地,这里的指定应用程序是当前运行应用程序列表中除应用程序APP外的应用程序。若存在依赖关系,则排除应用程序APP,转步骤S401,查找下一个最近最少使用CPU的应用程序;若不存在依赖,则转步骤S403;

步骤S403:标记步骤S402中得到的符合预定算法且不存在依赖关系的应用程序APP

步骤S404:把系统当前的可用内存量加上步骤S403中标记的应用程序所占的内存量,判断二者之和是否大于等于第一预设阈值。这里,第一预设阈值为实验值,实施例中第一预设阈值是能满足移动设备中任意一个应用程序运行时需要的内存量。

若二者之和大于等于预设阈值,转步骤S405;否则转步骤S401,查找下一个最近最少使用CPU的应用程序;

步骤S405:将所有标记的应用程序各自所对应的进程所属的所有内存页作为可以交换出去的内存页,通知内存管理模块把这些内存页交换到外存中;

步骤S406:内存交换流程结束。

可以看出,本实施例实际上是对实施例二在执行方面的优化,通过循环找出所有需要交换出去的应用程序后,然后集中一次把这些进程所属的内存页交换到外存中,从而优化了执行的效率。

实施例四:

如图5所示,本实施例包括如下步骤:

步骤S501:首先判断系统当前的内存可用量是否大于第二预设阈值,若是,转步骤S505;若否,则转步骤S502;这里,第二预设阈值含义如前述,在此不再赘述

步骤S502、S503、S504、S505分别与实施例一中的步骤S201、S202、S203、S204相同,在此不再赘述。

本实施例在进行内存交换前,首先考虑系统当前内存可用量,然后再进行如实施例一的内存交换方法,进一步消除了无效的内存交换。

实施例五:

如图6所示,本实施例包括如下步骤:

步骤S601:首先判断系统当前的内存可用量是否大于预设阈值,若是,转步骤S606;若否,则转步骤S602;

步骤S602、S603、S604、S605、S606分别与实施例二中的步骤S301、S302、S303、S304、S305相同,在此不再赘述。

本实施例在进行内存交换前,首先考虑系统当前内存可用量,然后再进行如实施例二的内存交换方法,进一步消除了无效的内存交换。

实施例六:

如图7所示,包括如下步骤:

步骤S701:首先判断系统当前的内存可用量是否大于预设阈值,若是,转步骤S606;若否,则转步骤S602;

步骤S702至S707分别与实施例三的步骤S401至S406相同,在此不再赘述。

本实施例在进行内存交换前,首先考虑系统当前内存可用量,然后再进行如实施例三的内存交换方法,进一步消除了无效的内存交换。

上述各个实施例的内存交换方法可应用在启动指定应用程序前,即在启动指定应用程序前,执行如上述各个实施例的内存交换流程,等内存交换完毕后在执行该指定应用程序;特别地,当该指定应用程序为系统当前待启动的新的应用程序时,在启动该新的应用程序前,执行如上述各个实施例的内存交换流程,等内存交换完毕后在执行该新的应用程序。这种方式不仅消除了无效的内存交换,还保证在应用程序运行过程中没有内存交换,从而消除了内存交换对应用程序运行过程的打扰。

根据上述各实施例可以理解,在本发明实施例提供的移动设备内存管理装置中,内存交换模块负责完成把指定的内存页的内容交换到外存中,以及把交换在外存中的内存页的内容在需要使用时(也就是CPU要读写这些内存页所属地址的内容时)自动读入到指定的内存页中;而应用管理与控制模块负责选择要交换出去的内存页和决定把内存页交换出去的时机,需要注意的是,实施例中应用管理与控制模块只是控制交换出去,而把交换出去的内容交换进来则是由内存交换模块自动完成的(该功能是由操作系统内核的缺页中断来完成的,本领域技术人员可通过现有技术实现)。可以理解,本发明中的这种模块划分是为了描述方便而引入的一种逻辑上的概念,具体实现时,既可以一个模块对应一个独立的软件模块实体(如函数、类、进程、线程等),也可以多个模块对应一个软件模块实体,或者一个模块对应多个软件模块实体。

下面以Android手机为例来进一步说明本发明一种实施例提供的移动设备内存管理方法。现有技术中,Android手机采用了Linux操作系统技术和Java技术,这使得Android手机的运行对内存大小非常敏感。当内存比较小时,Android手机运行会非常缓慢。为此,Android手机基本上都配备了大容量的内存。

如图8所示,应用管理和控制模块由ActivityManagerService和PackageManageService这两个类组成,而内存交换模块由Linux操作系统内核中的虚拟存储管理代码模块组成。另外,应用控制与管理模块和内存交换模块之间的通信采用虚拟设备驱动程序——MMUDriver来完成。

如图9所示,本例包含如下步骤:

步骤S901:ActivityManagerService打开MMUDriver驱动,准备进行内存交换处理。

步骤S902:ActivityManagerService检查系统当前可用的内存量是否大于等于预设阈值,如果是,转步骤S909,如果否,则转步骤S903。这里,预设阈值通过试验来确定,原则上是能够满足手机上任意一个应用运行时需要的内存量;

步骤S903:ActivityManagerService从正在运行的应用程序列表中找出最近最长时间没有使用CPU的应用程序;

步骤S904:ActivityManagerService通过PackageManagerService检查当前待启动的应用程序的描述信息,看其所要依赖的外部应用程序组件,可通过Intent方式描述,把这些信息进一步转换成要依赖的应用程序名称;

步骤S905:ActivityManagerService查询正在运行的应用程序列表,将该表按最近最长时间没有使用CPU的原则进行排序(称为LRU表),从LRU表中选出第一个不在步骤S904中的应用程序(也就是说,该应用程序最近最长时间没有使用CPU且其组件不被依赖),作为要交换出去的应用程序;

步骤S906:ActivityManagerService把步骤S905中选出的应用程序所对应的进程号以写MMUDriver驱动的方式发给MMUDriver驱动,然后通过读MMUDriver驱动的方式等待MMUDriver驱动返回处理结果;

步骤S907:MMUDriver驱动收到步骤S906中ActivityManagerService发来的进程号后,调Linux内核的函数让内核的虚拟存储器模块把这个进程所占有的内存内容交换到外存中,完成这个操作后,MMUDriver驱动向上层回写一个状态值;

步骤S908:步骤S906中ActivityManagerService一直在等待MMUDriver驱动的返回结果,待结果反馈时,ActivityManagerService解除等待,读出MMUDriver驱动回写的状态值,继续往下执行如下操作:查看系统当前的空闲内存是否大于等于预设阈值,如果是,则转步骤S909,否则,从LRU表中排除刚交换出去的应用,转步骤S905;

步骤S909:执行应用程序启动,流程结束。

可以理解,作为一种执行效率上的优化,ActivityManagerService可以先循环找出所有需要交换出去的应用程序后,然后集中一次通知MMUDriver驱动把这些应用程序所对应的进程所属的内存页交换到外存中。

从上述各实施例可以看出,本发明实施例通过改进传统的内存交换方法来降低无效的内存交换,减弱传统内存交换方法对应用程序运行流畅度的影响,从而移动设备如手机上的内存使用量得以降低且又不影响用户体验。

上述实施例只是本发明的举例,尽管为说明目的公开了本发明的最佳实施例和附图,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容。

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