欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于用途編號的用戶程序內存分配及批量回收的方法及裝置制造方法

文檔序號:6512412閱讀:313來源:國知局
一種基于用途編號的用戶程序內存分配及批量回收的方法及裝置制造方法
【專利摘要】本發(fā)明提供了一種基于用途編號的用戶程序內存分配及批量回收的方法及裝置,對于一類需要逐漸地進行內存分配,而同時釋放所有之前所分配空間的功能需求,提供一種更高效率的內存分配及回收方法,使得無論在內存分配過程中有多少次分配操作,都可以在釋放空間時一次完成,極大的改善了此類應用對系統(tǒng)資源的消耗,提高了內存分配方法的效率。
【專利說明】一種基于用途編號的用戶程序內存分配及批量回收的方法及裝置
【技術領域】
[0001]本發(fā)明涉及計算機操作系統(tǒng)中內存管理【技術領域】,尤其涉及在分布式計算中對細粒度任務進行離散的內存分配以及批量內存回收的方法及裝置。
【背景技術】
[0002]在計算機系統(tǒng)中,內存的分配和回收是一種核心功能,支持操作系統(tǒng)和應用程序動態(tài)的獲取和釋放系統(tǒng)內存資源,操作系統(tǒng)內核中的內存分配策略服務于所有內核中的功能,是一種通用的內存分配策略。
[0003]常見內存分配算法及優(yōu)缺點如下:
[0004](I)首次適應算法。使用該算法進行內存分配時,從空閑分區(qū)鏈首開始查找,直至找到一個能滿足其大小要求的空閑分區(qū)為止。然后再按照作業(yè)的大小,從該分區(qū)中劃出一塊內存分配給請求者,余下的空閑分區(qū)仍留在空閑分區(qū)鏈中。
[0005]該算法傾向于使用內存中低地址部分的空閑分區(qū),在高地址部分的空閑分區(qū)很少被利用,從而保留了高地址部分的大空閑區(qū)。顯然為以后到達的大作業(yè)分配大的內存空間創(chuàng)造了條件。缺點在于低址部分不斷被劃分,留下許多難以利用、很小的空閑區(qū),而每次查找又都從低址部分開始,這無疑會增加查找的開銷。
[0006](2)循環(huán)首次適應算法。該算法是由首次適應算法演變而成的。在為進程分配內存空間時,不再每次從鏈首開始查找,而是從上次找到的空閑分區(qū)開始查找,直至找到一個能滿足要求的空閑分區(qū),并從中劃出一塊來分給作業(yè)。該算法能使空閑中的內存分區(qū)分布得更加均勻,但將會缺乏大的空閑分區(qū)。
[0007](3)最佳適應算法。該算法總是把既能滿足要求,又是最小的空閑分區(qū)分配給作業(yè)。
[0008]為了加速查找,該算法要求將所有的空閑區(qū)按其大小排序后,以遞增順序形成一個空白鏈。這樣每次找到的第一個滿足要求的空閑區(qū),必然是最優(yōu)的。孤立地看,該算法似乎是最優(yōu)的,但事實上并不一定。因為每次分配后剩余的空間一定是最小的,在存儲器中將留下許多難以利用的小空閑區(qū)。同時每次分配后必須重新排序,這也帶來了一定的開銷。
[0009](4)最差適應算法。最差適應算法中,該算法按大小遞減的順序形成空閑區(qū)鏈,分配時直接從空閑區(qū)鏈的第一個空閑分區(qū)中分配(不能滿足需要則不分配)。很顯然,如果第一個空閑分區(qū)不能滿足,那么再沒有空閑分區(qū)能滿足需要。這種分配方法初看起來不太合理,但它也有很強的直觀吸引力:在大空閑區(qū)中放入程序后,剩下的空閑區(qū)常常也很大,于是還能裝下一個較大的新程序。
[0010]最壞適應算法與最佳適應算法的排序正好相反,它的隊列指針總是指向最大的空閑區(qū),在進行分配時,總是從最大的空閑區(qū)開始查尋。
[0011]該算法克服了最佳適應算法留下的許多小的碎片的不足,但保留大的空閑區(qū)的可能性減小了,而且空閑區(qū)回收也和最佳適應算法一樣復雜。[0012]而內核中的不同功能對內存的需求各不相同,對內存空間的使用也存在不同的規(guī)律,使用一種通用的存儲管理方法會導致內存利用率降低、內存碎片逐漸嚴重。
[0013]對于內核中的一些模塊,其在申請內存的過程中是逐漸獲取的,不斷增加其持有的內存資源,而在這個模塊完成某項功能,將要釋放資源的時候,則希望在同一時刻釋放所有其持有的內存資源?,F有的內存分配方法要求釋放的內存對應分配時的位置和大小,對于多次分配而獲得的較大內存空間,也需要逐個進行釋放。這就導致了內存釋放時出現大量集中的操作,帶來較大的開銷。
[0014]常見內存回收算法及優(yōu)缺點如下:
[0015]引用計數算法的優(yōu)點和缺陷同樣明顯。這一算法在執(zhí)行垃圾收集任務時速度較快,但算法對程序中每一次內存分配和指針操作提出了額外的要求(增加或減少內存塊的引用計數)。更重要的是,引用計數算法無法正確釋放循環(huán)引用的內存塊。
[0016]標記-清除算法的執(zhí)行過程分為“標記”和“清除”兩大階段。這種分步執(zhí)行的思路奠定了現代垃圾收集算法的思想基礎。與引用計數算法不同的是,標記-清除算法不需要運行環(huán)境監(jiān)測每一次內存分配和指針操作,而只要在“標記”階段中跟蹤每一個指針變量的指向。用類似思路實現的垃圾收集器也常被后人統(tǒng)稱為跟蹤收集器。伴隨著Lisp語言的成功,標記-清除算法也在大多數早期的Lisp運行環(huán)境中大放異彩。盡管最初版本的標記-清除算法在今天看來還存在效率不高(標記和清除是兩個相當耗時的過程)等諸多缺陷。
[0017]為了解決標記-清除算法在垃圾收集效率方面的缺陷,M.L.Minsky于1963年發(fā)表了著名的論文“一種使用雙存儲區(qū)的Lisp語言垃圾收集器(A LISP Garbage CollectorAlgorithm Using Serial Secondary Storage)”。]^.L.Minsky在該論文中描述的算法被人們稱為復制算法,它也被M.L.Minsky本人成功地引入到了 Lisp語言的一個實現版本中。
[0018]分區(qū)、復制的思路不僅大幅提高了垃圾收集的效率,而且也將原本繁紛復雜的內存分配算法變得前所未有地簡明和扼要。既然每次內存回收都是對整個半區(qū)的回收,內存分配時也就不用考慮內存碎片等復雜情況,只要移動堆頂指針,按順序分配內存就可以了。在垃圾收集技術中,復制算法提高效率的代價是人為地將可用內存縮小了一半。
[0019]標記-整理算法是標記-清除算法和復制算法的有機結合。標記-整理算法的總體執(zhí)行效率高于標記-清除算法,又不像復制算法那樣需要犧牲一半的存儲空間,這是一種非常理想的方法。在許多現代的垃圾收集器中都使用了標記-整理算法或其改進版本。

【發(fā)明內容】

[0020]本發(fā)明的目的為提供一種基于用途編號的對于離散分配的內存空間進行批量回收的方法及裝置,提高了批量內存釋放時的效率,從而消除在集中釋放內存時帶來的較大開銷。
[0021]為解決上述技術問題,本發(fā)明提供了一種基于用途編號的對于離散分配的內存空間進行批量回收的方法及裝置,如圖1所示,所述方法包括:
[0022]內存分配接口。這一接口的調用者需要提供兩個參數。第一個參數是需要分配的內存空間的大小,以字節(jié)為單位。第二個參數是一個任意的數值,用于區(qū)分內存的用途,相同的數值表示所分配的內存用于相同的用途,并且將在使用結束后一起回收。這個數值被稱為“用途編號”
[0023]內存回收接口。這一接口的調用者需要提供一個參數。這個參數對應在內存分配時所提供的用途編號,調用內存回收接口表示把參數數值所對應的所有內存空間全部回收,供未來分配使用。
[0024]內存管理模塊。為每一個出現過的用途編號預留一個連續(xù)的內存空間,不同的用途編號對應不用的內存空間。一個用途之內的內存申請在自己所屬的空間之中申請內存。一個用途編號所對應的預留內存空間被稱為一個子內存池,相應地,一個子內存池服務于一個用途。內存管理結構如圖2所示。
【專利附圖】

【附圖說明】
[0025]圖1為內存分配裝置的結構圖。
[0026]圖2為內存管理模塊結構圖。
【具體實施方式】
[0027]對于一個子內存池,其中的存儲分配是順序的。一個空閑空間指針指向未分配內存段的開始。分配操作采用計算機的原子操作指令對空閑空間指針進行操作,返回當前空閑空間的地址,并向后移動所申請的大小,使其指向新的空閑空間的開始地址。
[0028]當子內存池的空間不足以分配新的元素時,管理模塊調用操作系統(tǒng)的底層內存管理功能,為子內存池擴容,即申請更多的空間,新申請的空間和子內存池是連續(xù)的,保證內存池中的地址空間總是連續(xù)的。
[0029]關閉子內存池表示不再繼續(xù)使用一個用途編號所對應的內存資源。關閉一個內存池的時候,整個內存池所占用的內存空間被清除,交回操作系統(tǒng)管理。
[0030]一個子內存池中的存儲單元不能單獨回收。
[0031]回收子內存池表示將一個子內存池中的存儲空間全部重置,交還給內存管理模塊,但是這一子內存池還要繼續(xù)為后續(xù)的申請繼續(xù)服務,子內存池所包含的內存資源不會交還給操作系統(tǒng)。
[0032]在系統(tǒng)內存資源不足時,內存管理模塊會開始進行強制內存回收操作。強制內存回收操作步驟如下:
[0033]隨機選擇一個子內存池。檢查當前子內存池已經預留的內存空間。檢查當前子內存池已經分配的內存空間。如果已經分配的內存空間比已經預留的內存空間小,表示當前內存池并沒有完全被使用,可以對這個子內存池進行回收操作。
[0034]回收操作通過調用操作系統(tǒng)的內存管理函數將子內存池實際占用的內存邊界調整到實際分配的大小,從而減小了實際占用的內存大小。
[0035]如果當前系統(tǒng)的空閑內存能夠滿足要求,則完成強制內存回收操作。如果當前還不能獲得足夠的內存空間,則再次隨機選取一個子內存池進行上述的操作。如此迭代操作,直到回收了足夠的內存空間。如果已經遍歷了所有的子內存池,依然沒有獲得足夠的內存空間,則報告內存不足。
【權利要求】
1.內存分配接口。這一接口的調用者需要提供兩個參數。第一個參數是需要分配的內存空間的大小,以字節(jié)為單位。第二個參數是一個任意的數值,用于區(qū)分內存的用途,相同的數值表示所分配的內存用于相同的用途,并且將在使用結束后一起回收。這個數值被稱為“用途編號”。
2.內存回收接口。這一接口的調用者需要提供一個參數。這個參數對應在內存分配時所提供的用途編號,調用內存回收接口表示把參數數值所對應的所有內存空間全部回收,供未來分配使用。
3.內存管理模塊。為每一個出現過的用途編號預留一個連續(xù)的內存空間,不同的用途編號對應不用的內存空間。一個用途之內的內存申請在自己所屬的空間之中申請內存。一個用途編號所對應的預留內存空間被稱為一個子內存池,相應地,一個子內存池服務于一個用途。
4.對于一個子內存池,其中的存儲分配是順序的。一個空閑空間指針指向未分配內存段的開始。分配操作采用計算機的原子操作指令對空閑空間指針進行操作,返回當前空閑空間的地址,并向后移動所申請的大小,使其指向新的空閑空間的開始地址。
5.回收子內存池表示將一個子內存池中的存儲空間全部重置,交還給內存管理模塊,但是這一子內存池還要繼續(xù)為后續(xù)的申請繼續(xù)服務,子內存池所包含的內存資源不會交還給操作系統(tǒng)。
【文檔編號】G06F12/02GK103488577SQ201310430994
【公開日】2014年1月1日 申請日期:2013年9月22日 優(yōu)先權日:2013年9月22日
【發(fā)明者】吳興博, 龍翔, 王雷 申請人:北京航空航天大學
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
凯里市| 宁波市| 北安市| 鹤峰县| 安吉县| 育儿| 临邑县| 修水县| 建瓯市| 天长市| 东乡| 焦作市| 兴隆县| 宜黄县| 南开区| 西乡县| 贵南县| 饶河县| 迁西县| 新兴县| 喀喇| 平度市| 田阳县| 浪卡子县| 醴陵市| 和平县| 正安县| 东丽区| 苗栗市| 苍山县| 大埔区| 韩城市| 固阳县| 巨野县| 叶城县| 洛隆县| 家居| 桦南县| 永嘉县| 泊头市| 蓬溪县|