專利名稱:自適應動態內存管理方法
技術領域:
本發明涉及一種內存管理方法,尤其涉及數據通信設備中的內存管理方法。
在各種數據通信設備中,內存空間按不同字節數分成多種分片,各種分片的長度即字節數包括32字節、64字節、128字節、256字節、512字節、1024字節、2048字節、4096字節等類型。設備運行中對各種類型的內存的需求不斷變化。為了高速地進行內存的申請、釋放等操作,對于同一種內存的申請通常采取成批申請的方式,即在系統的編譯時決定各種分片的數目,進入運行過程后,這種數目將無法根據實際需要進行動態調整。例如,我們憑經驗估計某種設備通常情況下對于32字節的內存分片大約需要5萬片即可,于是在系統初始化時,一次性申請能夠存放5萬片32字節的內存區用于存取。在系統運行過程中,當需要申請32字節的內存時,便從此內存區中取一片空閑的32字節內存分片來使用,如果內存區中已沒有空閑的內存分片,則系統將返回申請失敗提示,即使此時其它種類的內存區中還有很多空閑的內存空間。這種固定分配的內存管理方法雖然容易實現,但在使用中,對空閑的內存資源無法充分利用,造成浪費。
本發明的目的在于針對現有技術中的不足,提供一種自適應動態內存管理方法,對各種分片類型的內存,在運行過程中根據實際需要動態分配,使內存資源充分利用。
為達到上述目的,本發明采用的技術方案是一種自適應動態內存管理方法,對內存空間依各種分片的字節數劃分不同種類型的頁面簇,以頁面簇為單位從占整個內存空間一定比例的空閑內存區中分配以供申請,每個頁面簇中至少包含一個頁面,每個頁面的長度能容納一個字節數最大的分片,在同一種類型的頁面簇中,所有頁面中的分片的字節數相同,當申請某種字節數的內存時,包括下述步驟A、檢查該種字節數分片類型的頁面簇中是否有空閑分片,如果有,轉步驟E;如果無,繼續步驟B;B、判斷空閑內存區占整個內存空間的比例是否小于等于設定值,如果是,轉步驟D;如果否,執行步驟C;C、從空閑內存區中劃分出一個相應類型的頁面簇,轉步驟E;D、從其他類型的頁面簇中找出所有分片均處于空閑的頁面簇,將其改變為所需類型的頁面簇;繼續步驟E;E、從頁面簇中分配分片。
由于本發明采用了以上技術方案,將內存空間以頁面簇為單位分配以供申請,頁面簇中包含頁面,而每個頁面的長度能容納一個字節數最大的分片,實際運行中,當某種類型的頁面簇中的所有分片都被占用,而用戶又申請這種類型的分片時,就可以通過兩種途徑解決(1)從空閑的內存空間中劃分出所需類型的頁面簇,再分配其中的分片; (2)從其他類型的頁面簇中找出其中各分片均處于空閑的頁面簇,改變其類型,即將其中分片的長度改變為所需類型,再進行分配。由于較大的分片長度是比它小的各種分片長度的整數倍,而每個頁面的長度能容納一個字節數最大的分片,頁面簇又由頁面組成,所以各種類型的頁面簇均可以相互轉換。通過對頁面簇的劃分和相互轉換,實現了內存空間的動態管理,只要有空閑就不拒絕申請,使內存資源得以充分利用。
下面結合實施例對本發明的技術方案作進一步說明。
本發明技術方案的核心就是對內存空間作出新的劃分,使用戶對內存的申請和釋放在劃分后的區間進行,而這種新的劃分使不同類型的區間可以相互轉換,這樣一來,對各種類型的內存就不必預留固定的數量,在運行中按照申請動態分配。
當申請某種字節數的內存時包括下述步驟A、檢查該種字節數分片類型的頁面簇中是否有空閑分片,如果有,轉步驟E;如果無,繼續步驟B;B、判斷空閑內存區占整個內存空間的比例是否小于等于設定值,如果是,轉步驟D;如果否,執行步驟C;C、從空閑內存區中劃分出一個相應類型的頁面簇,轉步驟E;D、從其他類型的頁面簇中找出所有分片均處于空閑的頁面簇,將其改變為所需類型的頁面簇;繼續步驟E;E、從頁面簇中分配分片。
從空閑內存區中取待用內存是以頁面簇為單位,而申請內存是以分片為單位,步驟A的作用就是每次申請時檢查是否有同類型的分片在相應頁面簇中尚未被申請。如果有,直接分配分片;如果無,就需要再取一個這種類型的頁面簇。
取一個新的頁面簇有兩種途徑,第一種是從空閑內存區中劃分出一個相應類型的頁面簇,第二種是從其他類型的頁面簇中找出空閑頁面簇,再將其改變為所需類型的頁面簇,所謂改變頁面簇的類型,就是改變頁面簇中分片的類型,如可將一個包含24個512字節分片的頁面簇轉換成一個包含6個2048字節分片的頁面簇,亦可將其轉換成一個包含96個128字節分片的頁面簇。為了減少頁面簇類型轉換可能引起的震蕩,在步驟B中規定了一個條件,作為選擇上述兩種途徑的依據,即判斷空閑內存區占整個內存空間的比例是否已小于等于設定的最小值,如果是,選擇第二種;如果否,選擇第一種。此比例如果太高,系統進行頁面簇類型轉換的操作會增多,而比例太低了,則不利于處理對于某種類型分片的大量需求。根據比較,空閑內存區占整個內存空間比例的最小值可設定為大于10%小于15%的任一數值。
本發明引入頁面簇作為劃分內存空間的單位,每個頁面簇中至少包含一個頁面,每個頁面的長度能容納一個字節數最大的分片,在同一種類型的頁面簇中,所有頁面中的分片的字節數相同。每個頁面簇中的頁面數量可任意設定,實際應用中,以2至4個為宜。假設實際應用中最大的分片長度為4096字節,每個頁面簇中的頁面數量為3個,那末頁面簇就可以是包含6個2048字節分片的類型或包含12個1024字節分片的類型等,依此類推。
在使用中,可以鏈表的形式對頁面簇進行管理,給每個頁面簇設置一個頁面簇頭記錄以下信息(1)頁面簇類型——本頁面簇包含的分片類型,如32字節、64字節、128字節等;(2)頁面數——本頁面簇包含的頁面數量;
(3)空閑指針——在本頁面簇空閑時,指向同一類型的下一個空閑頁面簇的頁面簇頭。
頁面簇頭中還可以攜帶其他用于算法控制的信息。
在本發明的實施中,也可以對相同類型的空閑分片采用鏈表方式管理,設置空閑分片頭指針用于指向此空閑分片鏈的鏈首。鏈中的空閑分片分屬于多個不同的頁面簇,為了便于對空閑頁面簇進行回收轉換處理,我們需要對空閑分片的連接順序作一定的限制,即要使位于同一個頁面簇中的空閑分片被連在以上鏈表中相連的區段,于是可對屬于同一頁面簇的分片予以標識,用于在分片被釋放時,將其歸入所屬的頁面簇。再對每個頁面簇設置用于指向本頁面簇中第一個分片的頭指針和用于指向本頁面簇中最后一個分片的尾指針,用于在分片被釋放時,若此分片所在的頁面簇已經有空閑分片,則將該分片加入尾指針之后,然后再調整尾指針指向剛釋放的分片;若分片所在頁面簇中無空閑分片,則將所在頁面簇的頭指針和尾指針都指向此分片,再將此分片加入由頭指針所指向的該種長度的空閑分片鏈的鏈首。若一個分片經過釋放后,此分片所在的頁面簇中所有分片都變為空閑分片,則此頁面簇變為空閑頁面簇。
當從某一類型的頁面簇中進行分片申請時,若空閑分片頭指針不為空,則將其所指向的分片分配給該申請,并將空閑分片頭指針指向下一個空閑分片;若空閑分片頭指針為空,表示此類型的頁面簇已經被全部使用,則先分配一個同類型的頁面簇,然后再從此新的頁面簇中進行分片的分配。
系統亦可預留一部分不使用本發明方法的內存空間,用于對大于最大分片的內存申請進行分配。
權利要求
1.一種自適應動態內存管理方法,其特征在于對內存空間依各種分片的字節數劃分不同種類型的頁面簇,以頁面簇為單位從占整個內存空間一定比例的空閑內存區中分配以供申請,每個頁面簇中至少包含一個頁面,每個頁面的長度能容納一個字節數最大的分片,在同一種類型的頁面簇中,所有頁面中的分片的字節數相同,當申請某種字節數的內存時,包括下述步驟A、檢查該種字節數分片類型的頁面簇中是否有空閑分片,如果有,轉步驟E;如果無,繼續步驟B;B、判斷空閑內存區占整個內存空間的比例是否小于等于設定值,如果是,轉步驟D;如果否,執行步驟C;C、從空閑內存區中劃分出一個相應類型的頁面簇,轉步驟E;D、從其他類型的頁面簇中找出所有分片均處于空閑的頁面簇,將其改變為所需類型的頁面簇;繼續步驟E;E、從頁面簇中分配分片。
2.如權利要求1所述的自適應動態內存管理方法,其特征在于所述頁面簇中包含的頁面數為2、3或4個。
3.如權利要求1所述的自適應動態內存管理方法,其特征在于將所述空閑內存區占整個內存空間最小比例的設定值設為大于10%小于15%的任一數值。
4.如權利要求1、2或3所述的自適應動態內存管理方法,其特征在于對屬于同一頁面簇的分片予以標識,用于在分片被釋放時,將其歸入所屬的頁面簇。
5.如權利要求4所述的自適應動態內存管理方法,其特征在于對每個頁面簇設置用于指向本頁面簇中第一個分片的頭指針和用于指向本頁面簇中最后一個分片的尾指針。
6.如權利要求5所述的自適應動態內存管理方法,其特征在于當分片被釋放時,若此分片所在的頁面簇已經有空閑分片,則將該分片加入所述尾指針之后,然后再調整尾指針指向剛釋放的分片;若分片所在頁面簇中無空閑分片,則將所在頁面簇的頭指針和尾指針都指向此分片,再將此分片加入由頭指針所指向的該種長度的空閑分片鏈的鏈首。
全文摘要
本發明公開了一種自適應動態內存管理方法,以頁面簇為單位從空閑內存區中分配以供申請,頁面簇中包含頁面,每個頁面的長度能容納一個字節數最大的分片,在同一種類型的頁面簇中,所有頁面中的分片的字節數相同,當頁面簇中的所有分片均處于空閑時,該頁面簇可以被轉換成所需類型的頁面簇以供申請,實現了內存空間的動態管理,使內存資源得以充分利用。
文檔編號G06F12/06GK1393780SQ0111887
公開日2003年1月29日 申請日期2001年6月28日 優先權日2001年6月28日
發明者朱英明 申請人:華為技術有限公司