技術(shù)領(lǐng)域
本發(fā)明涉及內(nèi)存管理,尤其涉及一種移動(dòng)設(shè)備內(nèi)存管理系統(tǒng)及方法。
背景技術(shù):
隨著3G和智能機(jī)時(shí)代的來臨,手機(jī)等移動(dòng)設(shè)備上的應(yīng)用程序越來越多,這類手機(jī)等移動(dòng)設(shè)備采用多任務(wù)的操作系統(tǒng),可以同時(shí)運(yùn)行著多個(gè)任務(wù)。為了提高多任務(wù)的用戶體驗(yàn),手機(jī)等移動(dòng)設(shè)備配備了大容量?jī)?nèi)存。但是,內(nèi)存容量的增加受到成本、功耗、體積等的限制。因此,如何在多任務(wù)情況下降低內(nèi)存使用量成為亟待解決的問題。
內(nèi)存交換是在PC機(jī)和服務(wù)器上廣泛使用的一種用來降低內(nèi)存使用量的方法。它的基本原理是:當(dāng)系統(tǒng)內(nèi)存不足時(shí),把內(nèi)存中的一些內(nèi)容交換到外存中,從而騰出內(nèi)存空間;當(dāng)系統(tǒng)運(yùn)行到需要被交換到外存的內(nèi)容時(shí),就把交換到外存中的內(nèi)容再次交換到內(nèi)存中;在這個(gè)過程中如果發(fā)生內(nèi)存不足,就會(huì)涉及到另一次交換過程。這樣,系統(tǒng)的有效內(nèi)存空間大小就是實(shí)際內(nèi)存大小加上外存上可以用來存放交換內(nèi)容的空間之和。通過內(nèi)外存交換,可以實(shí)現(xiàn)用較少的內(nèi)存達(dá)到更大內(nèi)存的效果。目前,PC機(jī)和服務(wù)器上的內(nèi)存交換方法基本上是作為操作系統(tǒng)的一個(gè)基本功能(即虛擬存儲(chǔ)器管理)模塊在操作系統(tǒng)的內(nèi)核中實(shí)現(xiàn),其使用LRU(Lease Recently Use,最近最少使用)算法,將最近最長(zhǎng)時(shí)間不使用的優(yōu)先交換出去,并以內(nèi)存頁為最小單位進(jìn)行交換。內(nèi)存頁是操作系統(tǒng)管理內(nèi)存的基本單位,32位的Linux操作系統(tǒng)的一個(gè)內(nèi)存頁大小一般為4KB。
然而,PC機(jī)和服務(wù)器上使用的內(nèi)存交換方式存在以下問題:
1)當(dāng)把最近最長(zhǎng)時(shí)間不使用的內(nèi)存頁交換出去時(shí),有可能發(fā)生當(dāng)前要運(yùn)行的應(yīng)用程序就要使用剛被交換出去的內(nèi)存頁,于是這部分被交換出去的內(nèi)存頁中的內(nèi)容又馬上要交換到內(nèi)存中來;
2)為了提高內(nèi)存使用率,操作系統(tǒng)每次會(huì)選擇盡可能少交換內(nèi)存頁,于是當(dāng)前要運(yùn)行的應(yīng)用程序在正常運(yùn)行過程中可能又會(huì)發(fā)生內(nèi)存不足的情況,于是系統(tǒng)又會(huì)進(jìn)行內(nèi)存交換,以便讓應(yīng)用程序能夠正常運(yùn)行下去。
這兩個(gè)問題導(dǎo)致無效的內(nèi)存交換和內(nèi)存交換過于頻繁,而且,在進(jìn)行內(nèi)存交換時(shí),系統(tǒng)不能執(zhí)行任何其它的操作。因此,過多和頻繁的內(nèi)存交換就會(huì)使應(yīng)用程序運(yùn)行變慢,運(yùn)行不流暢,運(yùn)行過程中時(shí)不時(shí)出現(xiàn)短促的停頓,這會(huì)極大降低用戶體驗(yàn)。PC機(jī)和服務(wù)器由于CPU性能強(qiáng)勁,這種運(yùn)行變慢和運(yùn)行不流暢對(duì)用戶體驗(yàn)的影響相對(duì)輕微,而手機(jī)等移動(dòng)設(shè)備的CPU性能相對(duì)較弱,運(yùn)行變慢和運(yùn)行不流暢對(duì)用戶體驗(yàn)的影響就會(huì)很明顯,從而導(dǎo)致用戶體驗(yàn)變得很差。正是由于這個(gè)原因,在手機(jī)等移動(dòng)設(shè)備上都沒有使用內(nèi)存交換來降低內(nèi)存使用量。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的主要技術(shù)問題是,提供一種移動(dòng)設(shè)備中內(nèi)存管理的方法及裝置,在通過內(nèi)存交換降低內(nèi)存使用量的同時(shí),盡量做到不影響用戶體驗(yàn)。
根據(jù)本發(fā)明的一種實(shí)施方式,提供一種移動(dòng)設(shè)備內(nèi)存管理方法,包括:查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序;根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理,其中,所述執(zhí)行內(nèi)存交換處理在啟動(dòng)所述指定應(yīng)用程序之前完成。
進(jìn)一步地,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序這一步驟包括:從正運(yùn)行的應(yīng)用程序中查找符合預(yù)定算法的應(yīng)用程序;從查找到的符合預(yù)定算法的應(yīng)用程序中查找與指定應(yīng)用程序無依賴關(guān)系的應(yīng)用程序,將其作為待交換的應(yīng)用程序。
一種實(shí)施例中,根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:選中一個(gè)所述待交換的應(yīng)用程序,將該選中的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中;判斷該應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個(gè)所述待交換的應(yīng)用程序這一步驟。
另一種實(shí)施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:選中一個(gè)所述待交換的應(yīng)用程序,標(biāo)記該選中的應(yīng)用程序;判斷該標(biāo)記的應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個(gè)所述待交換的應(yīng)用程序這一步驟;如果是,則將所有標(biāo)記的應(yīng)用程序各自對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。
又一種實(shí)施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:將所述待交換的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。
優(yōu)選地,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序這一步驟之前還包括:判斷系統(tǒng)當(dāng)前的可用內(nèi)存量是否大于等于第二預(yù)設(shè)閾值;若小于所述第二預(yù)設(shè)閾值,則執(zhí)行所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的應(yīng)用程序作為待交換的應(yīng)用程序步驟;否則不作處理。
優(yōu)選地,所述符合預(yù)定算法的應(yīng)用程序包括最近最少使用CPU的應(yīng)用程序。
優(yōu)選地,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動(dòng)流程啟動(dòng)所述指定應(yīng)用程序;當(dāng)所述指定應(yīng)用程序?yàn)橄到y(tǒng)當(dāng)前正待啟動(dòng)的新的應(yīng)用程序時(shí),所述根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動(dòng)流程啟動(dòng)所述新的應(yīng)用程序。
根據(jù)本發(fā)明的另一種實(shí)施方式,提供一種移動(dòng)設(shè)備內(nèi)存管理裝置,包括:應(yīng)用管理與控制模塊,用于查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序;內(nèi)存交換模塊,用于根據(jù)所述應(yīng)用管理與控制模塊的指示,將所述待交換的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。
進(jìn)一步地,所述符合預(yù)定算法的應(yīng)用程序包括最近最少使用CPU的應(yīng)用程序。
本發(fā)明的有益效果在于:在進(jìn)行內(nèi)存交換時(shí)既考慮了按預(yù)定算法查找待交換的應(yīng)用程序,又考慮到應(yīng)用程序間的依賴性,從而消除了無效的內(nèi)存交換,提高了用戶使用設(shè)備的體驗(yàn)感。一種實(shí)施例中還考慮了一次交換出去的內(nèi)存頁數(shù)量與系統(tǒng)當(dāng)前最大內(nèi)存使用量的關(guān)系,從而解決了內(nèi)存交換過于頻繁問題,降低內(nèi)存交換頻率;又一種實(shí)施例中考慮在啟動(dòng)程序前完成內(nèi)存交換,保證在應(yīng)用程序運(yùn)行過程中沒有內(nèi)存交換,從而消除內(nèi)存交換對(duì)應(yīng)用程序運(yùn)行過程的影響。
附圖說明
圖1是本發(fā)明實(shí)施例提供的移動(dòng)設(shè)備內(nèi)存管理裝置的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例一移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖3是本發(fā)明實(shí)施例二移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖4是本發(fā)明實(shí)施例三移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖5是本發(fā)明實(shí)施例四移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖6是本發(fā)明實(shí)施例五移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖7是本發(fā)明實(shí)施例六移動(dòng)設(shè)備內(nèi)存管理方法的流程示意圖;
圖8是本發(fā)明一種實(shí)施例應(yīng)用于Android手機(jī)中的內(nèi)存管理裝置的結(jié)構(gòu)示意圖;
圖9是與圖8相對(duì)應(yīng)的Android手機(jī)中內(nèi)存管理方法的流程示意圖。
具體實(shí)施方式
下面通過具體實(shí)施方式結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明。
本發(fā)明實(shí)施例的設(shè)計(jì)思想是:1)選擇要交換出去的內(nèi)存頁時(shí),既考慮使用預(yù)定算法來選擇應(yīng)用程序,也考慮當(dāng)前要運(yùn)行的應(yīng)用程序是否可能使用,只有同時(shí)滿足這兩個(gè)條件的內(nèi)存頁才被選擇交換出去;2)一次交換出去的內(nèi)存頁數(shù)量要滿足當(dāng)前要運(yùn)行的應(yīng)用程序可能的最大內(nèi)存使用量;3)內(nèi)存交換在啟動(dòng)當(dāng)前要運(yùn)行的應(yīng)用程序之前完成。其中,思想點(diǎn)1)消除了無效的內(nèi)存交換,思想點(diǎn)2)降低了內(nèi)存交換頻率到只有1次,思想點(diǎn)3)保證在應(yīng)用程序運(yùn)行過程中沒有內(nèi)存交換,從而消除內(nèi)存交換對(duì)應(yīng)用程序運(yùn)行過程的打擾。一種實(shí)施例中將這三點(diǎn)結(jié)合起來,就可以既能夠使用內(nèi)存交換來降低內(nèi)存使用量,又不會(huì)降低應(yīng)用程序運(yùn)行的速度和流暢性,消除了傳統(tǒng)內(nèi)存交換技術(shù)在移動(dòng)設(shè)備如手機(jī)上的缺點(diǎn)。
如圖1所示,本發(fā)明一種實(shí)施例提供的移動(dòng)設(shè)備中內(nèi)存管理裝置包括:應(yīng)用管理與控制模塊和內(nèi)存交換模塊。其中,應(yīng)用管理與控制模塊,用于查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序;所述內(nèi)存交換模塊,用于根據(jù)所述應(yīng)用管理與控制模塊的指示,將所述待交換的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。一種實(shí)施例中,內(nèi)存是RAM,外存是FLASH。
本發(fā)明實(shí)施方式提供了基于上述內(nèi)存管理裝置的內(nèi)存管理方法,包括:查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序;根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理。
一種實(shí)施例中,預(yù)定算法采用類似最近最少使用頁面置換算法(LRU)的算法,即最近最少使用CPU算法(為方便描述,下文將最近最少使用CPU的算法也稱為L(zhǎng)RU算法),也就是說,在該實(shí)施例中,符合預(yù)定算法的應(yīng)用程序?yàn)樽罱钌偈褂肅PU的應(yīng)用程序;其他實(shí)施例中還可以使用其他算法,本發(fā)明不限于LRU這種算法。
一種實(shí)施例中,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序這一步驟包括:從正運(yùn)行的應(yīng)用程序中查找符合預(yù)定算法的應(yīng)用程序;從查找到的符合預(yù)定算法的應(yīng)用程序中查找與指定應(yīng)用程序無依賴關(guān)系的應(yīng)用程序,將其作為待交換的應(yīng)用程序。對(duì)于該步驟,一種示例性做法是:查找符合預(yù)定算法的一個(gè)應(yīng)用程序;判斷該查找到的應(yīng)用程序與指定應(yīng)用程序之間是否存在依賴關(guān)系;若存在依賴關(guān)系,則重新查找下一個(gè)符合預(yù)定算法的應(yīng)用程序。
對(duì)于根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟:
一種實(shí)施例中,該步驟包括:將所述待交換的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。
另一種實(shí)施例中該步驟包括:選中一個(gè)所述待交換的應(yīng)用程序,將該選中的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中;判斷該應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個(gè)所述待交換的應(yīng)用程序這一步驟。出于執(zhí)行效率上的考慮,可將該實(shí)施例進(jìn)行優(yōu)化,即該步驟包括:選中一個(gè)所述待交換的應(yīng)用程序,標(biāo)記該選中的應(yīng)用程序;判斷該標(biāo)記的應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個(gè)所述待交換的應(yīng)用程序這一步驟;如果是,則將所有標(biāo)記的應(yīng)用程序各自對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。這里,第一預(yù)設(shè)閾值為實(shí)驗(yàn)值,實(shí)施例中第一預(yù)設(shè)閾值是能滿足移動(dòng)設(shè)備中任意一個(gè)應(yīng)用程序運(yùn)行時(shí)需要的內(nèi)存量。
一種實(shí)施例中,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個(gè)應(yīng)用程序作為待交換的應(yīng)用程序這一步驟之前還包括:判斷系統(tǒng)當(dāng)前的可用內(nèi)存量是否大于等于第二預(yù)設(shè)閾值;若小于第二預(yù)設(shè)閾值,則執(zhí)行所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的應(yīng)用程序作為待交換的應(yīng)用程序步驟;否則不作處理。這里,第二預(yù)設(shè)閾值為實(shí)驗(yàn)值,實(shí)施例中第二預(yù)設(shè)閾值是能滿足移動(dòng)設(shè)備中任意一個(gè)應(yīng)用程序運(yùn)行時(shí)需要的內(nèi)存量。
一種實(shí)施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動(dòng)流程啟動(dòng)所述指定應(yīng)用程序;當(dāng)所述指定應(yīng)用程序?yàn)橄到y(tǒng)當(dāng)前正待啟動(dòng)的新的應(yīng)用程序時(shí),所述根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動(dòng)流程啟動(dòng)所述新的應(yīng)用程序。
以下通過幾個(gè)實(shí)施例并結(jié)合圖2-9詳細(xì)說明根據(jù)本發(fā)明實(shí)施方式提供的移動(dòng)設(shè)備內(nèi)存管理方法。為便于描述,以下各實(shí)施例中統(tǒng)一采用的預(yù)定算法為前述LRU算法,即最近最少使用CPU;應(yīng)理解,本發(fā)明實(shí)施例還可以使用其他算法,并不限于LRU算法。
實(shí)施例一:
如圖2所示,本實(shí)施例包含如下步驟:
步驟S201:按預(yù)定算法查找APP;
采用LRU算法查找應(yīng)用程序APP,即在當(dāng)前運(yùn)行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序;可以理解,正在運(yùn)行的應(yīng)用程序并不一定是正占用CPU的應(yīng)用程序,而是操作系統(tǒng)為這個(gè)應(yīng)用程序創(chuàng)建了進(jìn)程的應(yīng)用程序。
步驟S202:判斷指定應(yīng)用程序是否依賴于所查找的應(yīng)用程序APP的組件,這里,指定應(yīng)用程序是指當(dāng)前運(yùn)行應(yīng)用程序列表中除應(yīng)用程序APP外的其他應(yīng)用程序。
若指定應(yīng)用程序與應(yīng)用程序APP存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S201,查找下一個(gè)最近最少使用CPU的應(yīng)用程序;可以理解,排除應(yīng)用程序APP是指不考慮將應(yīng)用程序APP對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁作為可以交換出去的內(nèi)存頁。
若預(yù)定的應(yīng)用程序與應(yīng)用程序APP不存在依賴關(guān)系,則轉(zhuǎn)步驟S203。
步驟S203:進(jìn)行內(nèi)存交換,具體而言,把查找到的最近最少使用CPU的應(yīng)用程序APP所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁作為可以交換出去的內(nèi)存頁,將其交換到外存中。
步驟S204:內(nèi)存交換流程結(jié)束。
本實(shí)施例既考慮LRU算法的優(yōu)勢(shì)又考慮應(yīng)用程序之間組件的依賴關(guān)系,只有同時(shí)滿足這兩個(gè)條件的內(nèi)存頁才被選擇交換出去,從而消除了無效的內(nèi)存交換。
實(shí)施例二:
如圖3所示,本實(shí)施例包含如下步驟:
步驟S301:與實(shí)施例一的步驟S201相同,即,在當(dāng)前運(yùn)行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序APP。
步驟S302:判斷指定應(yīng)用程序是否依賴于應(yīng)用程序APP的組件,同樣地,這里的指定應(yīng)用程序是當(dāng)前運(yùn)行應(yīng)用程序列表中除應(yīng)用程序APP外的應(yīng)用程序。若存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S301,查找下一個(gè)最近最少使用CPU的應(yīng)用程序;若不存在依賴,則轉(zhuǎn)步驟S303;
步驟S303:將步驟S302中得到的符合預(yù)定算法且不存在依賴關(guān)系的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的所有內(nèi)存頁作為可以交換出去的內(nèi)存頁,通知內(nèi)存管理模塊把這些內(nèi)存頁交換到外存中;
步驟S304:把系統(tǒng)當(dāng)前的可用內(nèi)存量加上步驟S303中交換出去的內(nèi)存量,判斷二者之和是否大于等于第一預(yù)設(shè)閾值。這里,第一預(yù)設(shè)閾值含義如前述,在此不再贅述
若二者之和大于等于預(yù)設(shè)閾值,轉(zhuǎn)步驟S305;否則轉(zhuǎn)步驟S301,查找下一個(gè)最近最少使用CPU的應(yīng)用程序;
步驟S305:內(nèi)存交換流程結(jié)束。
本實(shí)施例不僅既考慮LRU算法的優(yōu)勢(shì)又考慮應(yīng)用程序之間組件的依賴性關(guān)系,還考慮了進(jìn)行一次內(nèi)存交換的內(nèi)存量要滿足可能使用的最大內(nèi)存量,只有同時(shí)滿足這三個(gè)條件的內(nèi)存頁才被選擇交換出去,從而既消除了無效的內(nèi)存交換,又降低了交換頻率至只有一次內(nèi)存交換。
實(shí)施例三:
如圖4所示,本實(shí)施例包括如下步驟:
步驟S401:與實(shí)施例一的步驟S201相同,即,在當(dāng)前運(yùn)行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序APP。
步驟S402:判斷指定應(yīng)用程序是否依賴于應(yīng)用程序APP的組件,同樣地,這里的指定應(yīng)用程序是當(dāng)前運(yùn)行應(yīng)用程序列表中除應(yīng)用程序APP外的應(yīng)用程序。若存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S401,查找下一個(gè)最近最少使用CPU的應(yīng)用程序;若不存在依賴,則轉(zhuǎn)步驟S403;
步驟S403:標(biāo)記步驟S402中得到的符合預(yù)定算法且不存在依賴關(guān)系的應(yīng)用程序APP
步驟S404:把系統(tǒng)當(dāng)前的可用內(nèi)存量加上步驟S403中標(biāo)記的應(yīng)用程序所占的內(nèi)存量,判斷二者之和是否大于等于第一預(yù)設(shè)閾值。這里,第一預(yù)設(shè)閾值為實(shí)驗(yàn)值,實(shí)施例中第一預(yù)設(shè)閾值是能滿足移動(dòng)設(shè)備中任意一個(gè)應(yīng)用程序運(yùn)行時(shí)需要的內(nèi)存量。
若二者之和大于等于預(yù)設(shè)閾值,轉(zhuǎn)步驟S405;否則轉(zhuǎn)步驟S401,查找下一個(gè)最近最少使用CPU的應(yīng)用程序;
步驟S405:將所有標(biāo)記的應(yīng)用程序各自所對(duì)應(yīng)的進(jìn)程所屬的所有內(nèi)存頁作為可以交換出去的內(nèi)存頁,通知內(nèi)存管理模塊把這些內(nèi)存頁交換到外存中;
步驟S406:內(nèi)存交換流程結(jié)束。
可以看出,本實(shí)施例實(shí)際上是對(duì)實(shí)施例二在執(zhí)行方面的優(yōu)化,通過循環(huán)找出所有需要交換出去的應(yīng)用程序后,然后集中一次把這些進(jìn)程所屬的內(nèi)存頁交換到外存中,從而優(yōu)化了執(zhí)行的效率。
實(shí)施例四:
如圖5所示,本實(shí)施例包括如下步驟:
步驟S501:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于第二預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S505;若否,則轉(zhuǎn)步驟S502;這里,第二預(yù)設(shè)閾值含義如前述,在此不再贅述
步驟S502、S503、S504、S505分別與實(shí)施例一中的步驟S201、S202、S203、S204相同,在此不再贅述。
本實(shí)施例在進(jìn)行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進(jìn)行如實(shí)施例一的內(nèi)存交換方法,進(jìn)一步消除了無效的內(nèi)存交換。
實(shí)施例五:
如圖6所示,本實(shí)施例包括如下步驟:
步驟S601:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S606;若否,則轉(zhuǎn)步驟S602;
步驟S602、S603、S604、S605、S606分別與實(shí)施例二中的步驟S301、S302、S303、S304、S305相同,在此不再贅述。
本實(shí)施例在進(jìn)行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進(jìn)行如實(shí)施例二的內(nèi)存交換方法,進(jìn)一步消除了無效的內(nèi)存交換。
實(shí)施例六:
如圖7所示,包括如下步驟:
步驟S701:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S606;若否,則轉(zhuǎn)步驟S602;
步驟S702至S707分別與實(shí)施例三的步驟S401至S406相同,在此不再贅述。
本實(shí)施例在進(jìn)行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進(jìn)行如實(shí)施例三的內(nèi)存交換方法,進(jìn)一步消除了無效的內(nèi)存交換。
上述各個(gè)實(shí)施例的內(nèi)存交換方法可應(yīng)用在啟動(dòng)指定應(yīng)用程序前,即在啟動(dòng)指定應(yīng)用程序前,執(zhí)行如上述各個(gè)實(shí)施例的內(nèi)存交換流程,等內(nèi)存交換完畢后在執(zhí)行該指定應(yīng)用程序;特別地,當(dāng)該指定應(yīng)用程序?yàn)橄到y(tǒng)當(dāng)前待啟動(dòng)的新的應(yīng)用程序時(shí),在啟動(dòng)該新的應(yīng)用程序前,執(zhí)行如上述各個(gè)實(shí)施例的內(nèi)存交換流程,等內(nèi)存交換完畢后在執(zhí)行該新的應(yīng)用程序。這種方式不僅消除了無效的內(nèi)存交換,還保證在應(yīng)用程序運(yùn)行過程中沒有內(nèi)存交換,從而消除了內(nèi)存交換對(duì)應(yīng)用程序運(yùn)行過程的打擾。
根據(jù)上述各實(shí)施例可以理解,在本發(fā)明實(shí)施例提供的移動(dòng)設(shè)備內(nèi)存管理裝置中,內(nèi)存交換模塊負(fù)責(zé)完成把指定的內(nèi)存頁的內(nèi)容交換到外存中,以及把交換在外存中的內(nèi)存頁的內(nèi)容在需要使用時(shí)(也就是CPU要讀寫這些內(nèi)存頁所屬地址的內(nèi)容時(shí))自動(dòng)讀入到指定的內(nèi)存頁中;而應(yīng)用管理與控制模塊負(fù)責(zé)選擇要交換出去的內(nèi)存頁和決定把內(nèi)存頁交換出去的時(shí)機(jī),需要注意的是,實(shí)施例中應(yīng)用管理與控制模塊只是控制交換出去,而把交換出去的內(nèi)容交換進(jìn)來則是由內(nèi)存交換模塊自動(dòng)完成的(該功能是由操作系統(tǒng)內(nèi)核的缺頁中斷來完成的,本領(lǐng)域技術(shù)人員可通過現(xiàn)有技術(shù)實(shí)現(xiàn))??梢岳斫猓景l(fā)明中的這種模塊劃分是為了描述方便而引入的一種邏輯上的概念,具體實(shí)現(xiàn)時(shí),既可以一個(gè)模塊對(duì)應(yīng)一個(gè)獨(dú)立的軟件模塊實(shí)體(如函數(shù)、類、進(jìn)程、線程等),也可以多個(gè)模塊對(duì)應(yīng)一個(gè)軟件模塊實(shí)體,或者一個(gè)模塊對(duì)應(yīng)多個(gè)軟件模塊實(shí)體。
下面以Android手機(jī)為例來進(jìn)一步說明本發(fā)明一種實(shí)施例提供的移動(dòng)設(shè)備內(nèi)存管理方法。現(xiàn)有技術(shù)中,Android手機(jī)采用了Linux操作系統(tǒng)技術(shù)和Java技術(shù),這使得Android手機(jī)的運(yùn)行對(duì)內(nèi)存大小非常敏感。當(dāng)內(nèi)存比較小時(shí),Android手機(jī)運(yùn)行會(huì)非常緩慢。為此,Android手機(jī)基本上都配備了大容量的內(nèi)存。
如圖8所示,應(yīng)用管理和控制模塊由ActivityManagerService和PackageManageService這兩個(gè)類組成,而內(nèi)存交換模塊由Linux操作系統(tǒng)內(nèi)核中的虛擬存儲(chǔ)管理代碼模塊組成。另外,應(yīng)用控制與管理模塊和內(nèi)存交換模塊之間的通信采用虛擬設(shè)備驅(qū)動(dòng)程序——MMUDriver來完成。
如圖9所示,本例包含如下步驟:
步驟S901:ActivityManagerService打開MMUDriver驅(qū)動(dòng),準(zhǔn)備進(jìn)行內(nèi)存交換處理。
步驟S902:ActivityManagerService檢查系統(tǒng)當(dāng)前可用的內(nèi)存量是否大于等于預(yù)設(shè)閾值,如果是,轉(zhuǎn)步驟S909,如果否,則轉(zhuǎn)步驟S903。這里,預(yù)設(shè)閾值通過試驗(yàn)來確定,原則上是能夠滿足手機(jī)上任意一個(gè)應(yīng)用運(yùn)行時(shí)需要的內(nèi)存量;
步驟S903:ActivityManagerService從正在運(yùn)行的應(yīng)用程序列表中找出最近最長(zhǎng)時(shí)間沒有使用CPU的應(yīng)用程序;
步驟S904:ActivityManagerService通過PackageManagerService檢查當(dāng)前待啟動(dòng)的應(yīng)用程序的描述信息,看其所要依賴的外部應(yīng)用程序組件,可通過Intent方式描述,把這些信息進(jìn)一步轉(zhuǎn)換成要依賴的應(yīng)用程序名稱;
步驟S905:ActivityManagerService查詢正在運(yùn)行的應(yīng)用程序列表,將該表按最近最長(zhǎng)時(shí)間沒有使用CPU的原則進(jìn)行排序(稱為L(zhǎng)RU表),從LRU表中選出第一個(gè)不在步驟S904中的應(yīng)用程序(也就是說,該應(yīng)用程序最近最長(zhǎng)時(shí)間沒有使用CPU且其組件不被依賴),作為要交換出去的應(yīng)用程序;
步驟S906:ActivityManagerService把步驟S905中選出的應(yīng)用程序所對(duì)應(yīng)的進(jìn)程號(hào)以寫MMUDriver驅(qū)動(dòng)的方式發(fā)給MMUDriver驅(qū)動(dòng),然后通過讀MMUDriver驅(qū)動(dòng)的方式等待MMUDriver驅(qū)動(dòng)返回處理結(jié)果;
步驟S907:MMUDriver驅(qū)動(dòng)收到步驟S906中ActivityManagerService發(fā)來的進(jìn)程號(hào)后,調(diào)Linux內(nèi)核的函數(shù)讓內(nèi)核的虛擬存儲(chǔ)器模塊把這個(gè)進(jìn)程所占有的內(nèi)存內(nèi)容交換到外存中,完成這個(gè)操作后,MMUDriver驅(qū)動(dòng)向上層回寫一個(gè)狀態(tài)值;
步驟S908:步驟S906中ActivityManagerService一直在等待MMUDriver驅(qū)動(dòng)的返回結(jié)果,待結(jié)果反饋時(shí),ActivityManagerService解除等待,讀出MMUDriver驅(qū)動(dòng)回寫的狀態(tài)值,繼續(xù)往下執(zhí)行如下操作:查看系統(tǒng)當(dāng)前的空閑內(nèi)存是否大于等于預(yù)設(shè)閾值,如果是,則轉(zhuǎn)步驟S909,否則,從LRU表中排除剛交換出去的應(yīng)用,轉(zhuǎn)步驟S905;
步驟S909:執(zhí)行應(yīng)用程序啟動(dòng),流程結(jié)束。
可以理解,作為一種執(zhí)行效率上的優(yōu)化,ActivityManagerService可以先循環(huán)找出所有需要交換出去的應(yīng)用程序后,然后集中一次通知MMUDriver驅(qū)動(dòng)把這些應(yīng)用程序所對(duì)應(yīng)的進(jìn)程所屬的內(nèi)存頁交換到外存中。
從上述各實(shí)施例可以看出,本發(fā)明實(shí)施例通過改進(jìn)傳統(tǒng)的內(nèi)存交換方法來降低無效的內(nèi)存交換,減弱傳統(tǒng)內(nèi)存交換方法對(duì)應(yīng)用程序運(yùn)行流暢度的影響,從而移動(dòng)設(shè)備如手機(jī)上的內(nèi)存使用量得以降低且又不影響用戶體驗(yàn)。
上述實(shí)施例只是本發(fā)明的舉例,盡管為說明目的公開了本發(fā)明的最佳實(shí)施例和附圖,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附的權(quán)利要求的精神和范圍內(nèi),各種替換、變化和修改都是可能的。因此,本發(fā)明不應(yīng)局限于最佳實(shí)施例和附圖所公開的內(nèi)容。