亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種移動設(shè)備內(nèi)存管理方法及裝置與流程

文檔序號:12664073閱讀:224來源:國知局
一種移動設(shè)備內(nèi)存管理方法及裝置與流程

技術(shù)領(lǐng)域

本發(fā)明涉及內(nèi)存管理,尤其涉及一種移動設(shè)備內(nèi)存管理系統(tǒng)及方法。



背景技術(shù):

隨著3G和智能機時代的來臨,手機等移動設(shè)備上的應(yīng)用程序越來越多,這類手機等移動設(shè)備采用多任務(wù)的操作系統(tǒng),可以同時運行著多個任務(wù)。為了提高多任務(wù)的用戶體驗,手機等移動設(shè)備配備了大容量內(nèi)存。但是,內(nèi)存容量的增加受到成本、功耗、體積等的限制。因此,如何在多任務(wù)情況下降低內(nèi)存使用量成為亟待解決的問題。

內(nèi)存交換是在PC機和服務(wù)器上廣泛使用的一種用來降低內(nèi)存使用量的方法。它的基本原理是:當(dāng)系統(tǒng)內(nèi)存不足時,把內(nèi)存中的一些內(nèi)容交換到外存中,從而騰出內(nèi)存空間;當(dāng)系統(tǒng)運行到需要被交換到外存的內(nèi)容時,就把交換到外存中的內(nèi)容再次交換到內(nèi)存中;在這個過程中如果發(fā)生內(nèi)存不足,就會涉及到另一次交換過程。這樣,系統(tǒng)的有效內(nèi)存空間大小就是實際內(nèi)存大小加上外存上可以用來存放交換內(nèi)容的空間之和。通過內(nèi)外存交換,可以實現(xiàn)用較少的內(nèi)存達到更大內(nèi)存的效果。目前,PC機和服務(wù)器上的內(nèi)存交換方法基本上是作為操作系統(tǒng)的一個基本功能(即虛擬存儲器管理)模塊在操作系統(tǒng)的內(nèi)核中實現(xiàn),其使用LRU(Lease Recently Use,最近最少使用)算法,將最近最長時間不使用的優(yōu)先交換出去,并以內(nèi)存頁為最小單位進行交換。內(nèi)存頁是操作系統(tǒng)管理內(nèi)存的基本單位,32位的Linux操作系統(tǒng)的一個內(nèi)存頁大小一般為4KB。

然而,PC機和服務(wù)器上使用的內(nèi)存交換方式存在以下問題:

1)當(dāng)把最近最長時間不使用的內(nèi)存頁交換出去時,有可能發(fā)生當(dāng)前要運行的應(yīng)用程序就要使用剛被交換出去的內(nèi)存頁,于是這部分被交換出去的內(nèi)存頁中的內(nèi)容又馬上要交換到內(nèi)存中來;

2)為了提高內(nèi)存使用率,操作系統(tǒng)每次會選擇盡可能少交換內(nèi)存頁,于是當(dāng)前要運行的應(yīng)用程序在正常運行過程中可能又會發(fā)生內(nèi)存不足的情況,于是系統(tǒng)又會進行內(nèi)存交換,以便讓應(yīng)用程序能夠正常運行下去。

這兩個問題導(dǎo)致無效的內(nèi)存交換和內(nèi)存交換過于頻繁,而且,在進行內(nèi)存交換時,系統(tǒng)不能執(zhí)行任何其它的操作。因此,過多和頻繁的內(nèi)存交換就會使應(yīng)用程序運行變慢,運行不流暢,運行過程中時不時出現(xiàn)短促的停頓,這會極大降低用戶體驗。PC機和服務(wù)器由于CPU性能強勁,這種運行變慢和運行不流暢對用戶體驗的影響相對輕微,而手機等移動設(shè)備的CPU性能相對較弱,運行變慢和運行不流暢對用戶體驗的影響就會很明顯,從而導(dǎo)致用戶體驗變得很差。正是由于這個原因,在手機等移動設(shè)備上都沒有使用內(nèi)存交換來降低內(nèi)存使用量。



技術(shù)實現(xiàn)要素:

本發(fā)明要解決的主要技術(shù)問題是,提供一種移動設(shè)備中內(nèi)存管理的方法及裝置,在通過內(nèi)存交換降低內(nèi)存使用量的同時,盡量做到不影響用戶體驗。

根據(jù)本發(fā)明的一種實施方式,提供一種移動設(shè)備內(nèi)存管理方法,包括:查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序;根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理,其中,所述執(zhí)行內(nèi)存交換處理在啟動所述指定應(yīng)用程序之前完成。

進一步地,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序這一步驟包括:從正運行的應(yīng)用程序中查找符合預(yù)定算法的應(yīng)用程序;從查找到的符合預(yù)定算法的應(yīng)用程序中查找與指定應(yīng)用程序無依賴關(guān)系的應(yīng)用程序,將其作為待交換的應(yīng)用程序。

一種實施例中,根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:選中一個所述待交換的應(yīng)用程序,將該選中的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中;判斷該應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個所述待交換的應(yīng)用程序這一步驟。

另一種實施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:選中一個所述待交換的應(yīng)用程序,標記該選中的應(yīng)用程序;判斷該標記的應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個所述待交換的應(yīng)用程序這一步驟;如果是,則將所有標記的應(yīng)用程序各自對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。

又一種實施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟包括:將所述待交換的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。

優(yōu)選地,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(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)用程序啟動流程啟動所述指定應(yīng)用程序;當(dāng)所述指定應(yīng)用程序為系統(tǒng)當(dāng)前正待啟動的新的應(yīng)用程序時,所述根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動流程啟動所述新的應(yīng)用程序。

根據(jù)本發(fā)明的另一種實施方式,提供一種移動設(shè)備內(nèi)存管理裝置,包括:應(yīng)用管理與控制模塊,用于查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序;內(nèi)存交換模塊,用于根據(jù)所述應(yīng)用管理與控制模塊的指示,將所述待交換的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。

進一步地,所述符合預(yù)定算法的應(yīng)用程序包括最近最少使用CPU的應(yīng)用程序。

本發(fā)明的有益效果在于:在進行內(nèi)存交換時既考慮了按預(yù)定算法查找待交換的應(yīng)用程序,又考慮到應(yīng)用程序間的依賴性,從而消除了無效的內(nèi)存交換,提高了用戶使用設(shè)備的體驗感。一種實施例中還考慮了一次交換出去的內(nèi)存頁數(shù)量與系統(tǒng)當(dāng)前最大內(nèi)存使用量的關(guān)系,從而解決了內(nèi)存交換過于頻繁問題,降低內(nèi)存交換頻率;又一種實施例中考慮在啟動程序前完成內(nèi)存交換,保證在應(yīng)用程序運行過程中沒有內(nèi)存交換,從而消除內(nèi)存交換對應(yīng)用程序運行過程的影響。

附圖說明

圖1是本發(fā)明實施例提供的移動設(shè)備內(nèi)存管理裝置的結(jié)構(gòu)示意圖;

圖2是本發(fā)明實施例一移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖3是本發(fā)明實施例二移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖4是本發(fā)明實施例三移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖5是本發(fā)明實施例四移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖6是本發(fā)明實施例五移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖7是本發(fā)明實施例六移動設(shè)備內(nèi)存管理方法的流程示意圖;

圖8是本發(fā)明一種實施例應(yīng)用于Android手機中的內(nèi)存管理裝置的結(jié)構(gòu)示意圖;

圖9是與圖8相對應(yīng)的Android手機中內(nèi)存管理方法的流程示意圖。

具體實施方式

下面通過具體實施方式結(jié)合附圖對本發(fā)明作進一步詳細說明。

本發(fā)明實施例的設(shè)計思想是:1)選擇要交換出去的內(nèi)存頁時,既考慮使用預(yù)定算法來選擇應(yīng)用程序,也考慮當(dāng)前要運行的應(yīng)用程序是否可能使用,只有同時滿足這兩個條件的內(nèi)存頁才被選擇交換出去;2)一次交換出去的內(nèi)存頁數(shù)量要滿足當(dāng)前要運行的應(yīng)用程序可能的最大內(nèi)存使用量;3)內(nèi)存交換在啟動當(dāng)前要運行的應(yīng)用程序之前完成。其中,思想點1)消除了無效的內(nèi)存交換,思想點2)降低了內(nèi)存交換頻率到只有1次,思想點3)保證在應(yīng)用程序運行過程中沒有內(nèi)存交換,從而消除內(nèi)存交換對應(yīng)用程序運行過程的打擾。一種實施例中將這三點結(jié)合起來,就可以既能夠使用內(nèi)存交換來降低內(nèi)存使用量,又不會降低應(yīng)用程序運行的速度和流暢性,消除了傳統(tǒng)內(nèi)存交換技術(shù)在移動設(shè)備如手機上的缺點。

如圖1所示,本發(fā)明一種實施例提供的移動設(shè)備中內(nèi)存管理裝置包括:應(yīng)用管理與控制模塊和內(nèi)存交換模塊。其中,應(yīng)用管理與控制模塊,用于查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序;所述內(nèi)存交換模塊,用于根據(jù)所述應(yīng)用管理與控制模塊的指示,將所述待交換的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。一種實施例中,內(nèi)存是RAM,外存是FLASH。

本發(fā)明實施方式提供了基于上述內(nèi)存管理裝置的內(nèi)存管理方法,包括:查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序;根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理。

一種實施例中,預(yù)定算法采用類似最近最少使用頁面置換算法(LRU)的算法,即最近最少使用CPU算法(為方便描述,下文將最近最少使用CPU的算法也稱為LRU算法),也就是說,在該實施例中,符合預(yù)定算法的應(yīng)用程序為最近最少使用CPU的應(yīng)用程序;其他實施例中還可以使用其他算法,本發(fā)明不限于LRU這種算法。

一種實施例中,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(yīng)用程序作為待交換的應(yīng)用程序這一步驟包括:從正運行的應(yīng)用程序中查找符合預(yù)定算法的應(yīng)用程序;從查找到的符合預(yù)定算法的應(yīng)用程序中查找與指定應(yīng)用程序無依賴關(guān)系的應(yīng)用程序,將其作為待交換的應(yīng)用程序。對于該步驟,一種示例性做法是:查找符合預(yù)定算法的一個應(yīng)用程序;判斷該查找到的應(yīng)用程序與指定應(yīng)用程序之間是否存在依賴關(guān)系;若存在依賴關(guān)系,則重新查找下一個符合預(yù)定算法的應(yīng)用程序。

對于根據(jù)所述待交換的應(yīng)用程序執(zhí)行內(nèi)存交換處理這一步驟:

一種實施例中,該步驟包括:將所述待交換的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。

另一種實施例中該步驟包括:選中一個所述待交換的應(yīng)用程序,將該選中的應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中;判斷該應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個所述待交換的應(yīng)用程序這一步驟。出于執(zhí)行效率上的考慮,可將該實施例進行優(yōu)化,即該步驟包括:選中一個所述待交換的應(yīng)用程序,標記該選中的應(yīng)用程序;判斷該標記的應(yīng)用程序所占的內(nèi)存量與系統(tǒng)當(dāng)前的可用內(nèi)存量之和是否大于等于第一預(yù)設(shè)閾值;如果不是,則繼續(xù)執(zhí)行選中一個所述待交換的應(yīng)用程序這一步驟;如果是,則將所有標記的應(yīng)用程序各自對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。這里,第一預(yù)設(shè)閾值為實驗值,實施例中第一預(yù)設(shè)閾值是能滿足移動設(shè)備中任意一個應(yīng)用程序運行時需要的內(nèi)存量。

一種實施例中,所述查找與指定應(yīng)用程序無依賴關(guān)系且符合預(yù)定算法的至少一個應(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è)閾值為實驗值,實施例中第二預(yù)設(shè)閾值是能滿足移動設(shè)備中任意一個應(yīng)用程序運行時需要的內(nèi)存量。

一種實施例中,根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動流程啟動所述指定應(yīng)用程序;當(dāng)所述指定應(yīng)用程序為系統(tǒng)當(dāng)前正待啟動的新的應(yīng)用程序時,所述根據(jù)待交換的應(yīng)用程序執(zhí)行內(nèi)存交換管理處理這一步驟之后還包括:執(zhí)行正常的應(yīng)用程序啟動流程啟動所述新的應(yīng)用程序。

以下通過幾個實施例并結(jié)合圖2-9詳細說明根據(jù)本發(fā)明實施方式提供的移動設(shè)備內(nèi)存管理方法。為便于描述,以下各實施例中統(tǒng)一采用的預(yù)定算法為前述LRU算法,即最近最少使用CPU;應(yīng)理解,本發(fā)明實施例還可以使用其他算法,并不限于LRU算法。

實施例一:

如圖2所示,本實施例包含如下步驟:

步驟S201:按預(yù)定算法查找APP;

采用LRU算法查找應(yīng)用程序APP,即在當(dāng)前運行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序;可以理解,正在運行的應(yīng)用程序并不一定是正占用CPU的應(yīng)用程序,而是操作系統(tǒng)為這個應(yīng)用程序創(chuàng)建了進程的應(yīng)用程序。

步驟S202:判斷指定應(yīng)用程序是否依賴于所查找的應(yīng)用程序APP的組件,這里,指定應(yīng)用程序是指當(dāng)前運行應(yīng)用程序列表中除應(yīng)用程序APP外的其他應(yīng)用程序。

若指定應(yīng)用程序與應(yīng)用程序APP存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S201,查找下一個最近最少使用CPU的應(yīng)用程序;可以理解,排除應(yīng)用程序APP是指不考慮將應(yīng)用程序APP對應(yīng)的進程所屬的內(nèi)存頁作為可以交換出去的內(nèi)存頁。

若預(yù)定的應(yīng)用程序與應(yīng)用程序APP不存在依賴關(guān)系,則轉(zhuǎn)步驟S203。

步驟S203:進行內(nèi)存交換,具體而言,把查找到的最近最少使用CPU的應(yīng)用程序APP所對應(yīng)的進程所屬的內(nèi)存頁作為可以交換出去的內(nèi)存頁,將其交換到外存中。

步驟S204:內(nèi)存交換流程結(jié)束。

本實施例既考慮LRU算法的優(yōu)勢又考慮應(yīng)用程序之間組件的依賴關(guān)系,只有同時滿足這兩個條件的內(nèi)存頁才被選擇交換出去,從而消除了無效的內(nèi)存交換。

實施例二:

如圖3所示,本實施例包含如下步驟:

步驟S301:與實施例一的步驟S201相同,即,在當(dāng)前運行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序APP。

步驟S302:判斷指定應(yīng)用程序是否依賴于應(yīng)用程序APP的組件,同樣地,這里的指定應(yīng)用程序是當(dāng)前運行應(yīng)用程序列表中除應(yīng)用程序APP外的應(yīng)用程序。若存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S301,查找下一個最近最少使用CPU的應(yīng)用程序;若不存在依賴,則轉(zhuǎn)步驟S303;

步驟S303:將步驟S302中得到的符合預(yù)定算法且不存在依賴關(guān)系的應(yīng)用程序所對應(yīng)的進程所屬的所有內(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,查找下一個最近最少使用CPU的應(yīng)用程序;

步驟S305:內(nèi)存交換流程結(jié)束。

本實施例不僅既考慮LRU算法的優(yōu)勢又考慮應(yīng)用程序之間組件的依賴性關(guān)系,還考慮了進行一次內(nèi)存交換的內(nèi)存量要滿足可能使用的最大內(nèi)存量,只有同時滿足這三個條件的內(nèi)存頁才被選擇交換出去,從而既消除了無效的內(nèi)存交換,又降低了交換頻率至只有一次內(nèi)存交換。

實施例三:

如圖4所示,本實施例包括如下步驟:

步驟S401:與實施例一的步驟S201相同,即,在當(dāng)前運行應(yīng)用程序列表中查找最近最少使用CPU的應(yīng)用程序APP。

步驟S402:判斷指定應(yīng)用程序是否依賴于應(yīng)用程序APP的組件,同樣地,這里的指定應(yīng)用程序是當(dāng)前運行應(yīng)用程序列表中除應(yīng)用程序APP外的應(yīng)用程序。若存在依賴關(guān)系,則排除應(yīng)用程序APP,轉(zhuǎn)步驟S401,查找下一個最近最少使用CPU的應(yīng)用程序;若不存在依賴,則轉(zhuǎn)步驟S403;

步驟S403:標記步驟S402中得到的符合預(yù)定算法且不存在依賴關(guān)系的應(yīng)用程序APP

步驟S404:把系統(tǒng)當(dāng)前的可用內(nèi)存量加上步驟S403中標記的應(yīng)用程序所占的內(nèi)存量,判斷二者之和是否大于等于第一預(yù)設(shè)閾值。這里,第一預(yù)設(shè)閾值為實驗值,實施例中第一預(yù)設(shè)閾值是能滿足移動設(shè)備中任意一個應(yīng)用程序運行時需要的內(nèi)存量。

若二者之和大于等于預(yù)設(shè)閾值,轉(zhuǎn)步驟S405;否則轉(zhuǎn)步驟S401,查找下一個最近最少使用CPU的應(yīng)用程序;

步驟S405:將所有標記的應(yīng)用程序各自所對應(yīng)的進程所屬的所有內(nèi)存頁作為可以交換出去的內(nèi)存頁,通知內(nèi)存管理模塊把這些內(nèi)存頁交換到外存中;

步驟S406:內(nèi)存交換流程結(jié)束。

可以看出,本實施例實際上是對實施例二在執(zhí)行方面的優(yōu)化,通過循環(huán)找出所有需要交換出去的應(yīng)用程序后,然后集中一次把這些進程所屬的內(nèi)存頁交換到外存中,從而優(yōu)化了執(zhí)行的效率。

實施例四:

如圖5所示,本實施例包括如下步驟:

步驟S501:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于第二預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S505;若否,則轉(zhuǎn)步驟S502;這里,第二預(yù)設(shè)閾值含義如前述,在此不再贅述

步驟S502、S503、S504、S505分別與實施例一中的步驟S201、S202、S203、S204相同,在此不再贅述。

本實施例在進行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進行如實施例一的內(nèi)存交換方法,進一步消除了無效的內(nèi)存交換。

實施例五:

如圖6所示,本實施例包括如下步驟:

步驟S601:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S606;若否,則轉(zhuǎn)步驟S602;

步驟S602、S603、S604、S605、S606分別與實施例二中的步驟S301、S302、S303、S304、S305相同,在此不再贅述。

本實施例在進行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進行如實施例二的內(nèi)存交換方法,進一步消除了無效的內(nèi)存交換。

實施例六:

如圖7所示,包括如下步驟:

步驟S701:首先判斷系統(tǒng)當(dāng)前的內(nèi)存可用量是否大于預(yù)設(shè)閾值,若是,轉(zhuǎn)步驟S606;若否,則轉(zhuǎn)步驟S602;

步驟S702至S707分別與實施例三的步驟S401至S406相同,在此不再贅述。

本實施例在進行內(nèi)存交換前,首先考慮系統(tǒng)當(dāng)前內(nèi)存可用量,然后再進行如實施例三的內(nèi)存交換方法,進一步消除了無效的內(nèi)存交換。

上述各個實施例的內(nèi)存交換方法可應(yīng)用在啟動指定應(yīng)用程序前,即在啟動指定應(yīng)用程序前,執(zhí)行如上述各個實施例的內(nèi)存交換流程,等內(nèi)存交換完畢后在執(zhí)行該指定應(yīng)用程序;特別地,當(dāng)該指定應(yīng)用程序為系統(tǒng)當(dāng)前待啟動的新的應(yīng)用程序時,在啟動該新的應(yīng)用程序前,執(zhí)行如上述各個實施例的內(nèi)存交換流程,等內(nèi)存交換完畢后在執(zhí)行該新的應(yīng)用程序。這種方式不僅消除了無效的內(nèi)存交換,還保證在應(yīng)用程序運行過程中沒有內(nèi)存交換,從而消除了內(nèi)存交換對應(yīng)用程序運行過程的打擾。

根據(jù)上述各實施例可以理解,在本發(fā)明實施例提供的移動設(shè)備內(nèi)存管理裝置中,內(nèi)存交換模塊負責(zé)完成把指定的內(nèi)存頁的內(nèi)容交換到外存中,以及把交換在外存中的內(nèi)存頁的內(nèi)容在需要使用時(也就是CPU要讀寫這些內(nèi)存頁所屬地址的內(nèi)容時)自動讀入到指定的內(nèi)存頁中;而應(yīng)用管理與控制模塊負責(zé)選擇要交換出去的內(nèi)存頁和決定把內(nèi)存頁交換出去的時機,需要注意的是,實施例中應(yīng)用管理與控制模塊只是控制交換出去,而把交換出去的內(nèi)容交換進來則是由內(nèi)存交換模塊自動完成的(該功能是由操作系統(tǒng)內(nèi)核的缺頁中斷來完成的,本領(lǐng)域技術(shù)人員可通過現(xiàn)有技術(shù)實現(xiàn))。可以理解,本發(fā)明中的這種模塊劃分是為了描述方便而引入的一種邏輯上的概念,具體實現(xiàn)時,既可以一個模塊對應(yīng)一個獨立的軟件模塊實體(如函數(shù)、類、進程、線程等),也可以多個模塊對應(yīng)一個軟件模塊實體,或者一個模塊對應(yīng)多個軟件模塊實體。

下面以Android手機為例來進一步說明本發(fā)明一種實施例提供的移動設(shè)備內(nèi)存管理方法。現(xiàn)有技術(shù)中,Android手機采用了Linux操作系統(tǒng)技術(shù)和Java技術(shù),這使得Android手機的運行對內(nèi)存大小非常敏感。當(dāng)內(nèi)存比較小時,Android手機運行會非常緩慢。為此,Android手機基本上都配備了大容量的內(nèi)存。

如圖8所示,應(yīng)用管理和控制模塊由ActivityManagerService和PackageManageService這兩個類組成,而內(nèi)存交換模塊由Linux操作系統(tǒng)內(nèi)核中的虛擬存儲管理代碼模塊組成。另外,應(yīng)用控制與管理模塊和內(nèi)存交換模塊之間的通信采用虛擬設(shè)備驅(qū)動程序——MMUDriver來完成。

如圖9所示,本例包含如下步驟:

步驟S901:ActivityManagerService打開MMUDriver驅(qū)動,準備進行內(nèi)存交換處理。

步驟S902:ActivityManagerService檢查系統(tǒng)當(dāng)前可用的內(nèi)存量是否大于等于預(yù)設(shè)閾值,如果是,轉(zhuǎn)步驟S909,如果否,則轉(zhuǎn)步驟S903。這里,預(yù)設(shè)閾值通過試驗來確定,原則上是能夠滿足手機上任意一個應(yīng)用運行時需要的內(nèi)存量;

步驟S903:ActivityManagerService從正在運行的應(yīng)用程序列表中找出最近最長時間沒有使用CPU的應(yīng)用程序;

步驟S904:ActivityManagerService通過PackageManagerService檢查當(dāng)前待啟動的應(yīng)用程序的描述信息,看其所要依賴的外部應(yīng)用程序組件,可通過Intent方式描述,把這些信息進一步轉(zhuǎn)換成要依賴的應(yīng)用程序名稱;

步驟S905:ActivityManagerService查詢正在運行的應(yīng)用程序列表,將該表按最近最長時間沒有使用CPU的原則進行排序(稱為LRU表),從LRU表中選出第一個不在步驟S904中的應(yīng)用程序(也就是說,該應(yīng)用程序最近最長時間沒有使用CPU且其組件不被依賴),作為要交換出去的應(yīng)用程序;

步驟S906:ActivityManagerService把步驟S905中選出的應(yīng)用程序所對應(yīng)的進程號以寫MMUDriver驅(qū)動的方式發(fā)給MMUDriver驅(qū)動,然后通過讀MMUDriver驅(qū)動的方式等待MMUDriver驅(qū)動返回處理結(jié)果;

步驟S907:MMUDriver驅(qū)動收到步驟S906中ActivityManagerService發(fā)來的進程號后,調(diào)Linux內(nèi)核的函數(shù)讓內(nèi)核的虛擬存儲器模塊把這個進程所占有的內(nèi)存內(nèi)容交換到外存中,完成這個操作后,MMUDriver驅(qū)動向上層回寫一個狀態(tài)值;

步驟S908:步驟S906中ActivityManagerService一直在等待MMUDriver驅(qū)動的返回結(jié)果,待結(jié)果反饋時,ActivityManagerService解除等待,讀出MMUDriver驅(qū)動回寫的狀態(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)用程序啟動,流程結(jié)束。

可以理解,作為一種執(zhí)行效率上的優(yōu)化,ActivityManagerService可以先循環(huán)找出所有需要交換出去的應(yīng)用程序后,然后集中一次通知MMUDriver驅(qū)動把這些應(yīng)用程序所對應(yīng)的進程所屬的內(nèi)存頁交換到外存中。

從上述各實施例可以看出,本發(fā)明實施例通過改進傳統(tǒng)的內(nèi)存交換方法來降低無效的內(nèi)存交換,減弱傳統(tǒng)內(nèi)存交換方法對應(yīng)用程序運行流暢度的影響,從而移動設(shè)備如手機上的內(nèi)存使用量得以降低且又不影響用戶體驗。

上述實施例只是本發(fā)明的舉例,盡管為說明目的公開了本發(fā)明的最佳實施例和附圖,但是本領(lǐng)域的技術(shù)人員可以理解:在不脫離本發(fā)明及所附的權(quán)利要求的精神和范圍內(nèi),各種替換、變化和修改都是可能的。因此,本發(fā)明不應(yīng)局限于最佳實施例和附圖所公開的內(nèi)容。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1