專利名稱:相變內存周期性磨損均衡方法及其內存管理方法
技術領域:
本發(fā)明涉及計算機技術領域,具體涉及一種相變內存周期性磨損均衡方法及其內存管理方法。
背景技術:
一種基于相變存儲(Wiase-Change Memory)的相變隨機存儲器(PRAM)技術被認為是替代DRAM的候選技術,其具有高密度,非易失,低功耗等特點。與DRAM相比,PRAM可以在更小的尺寸上存儲更多的內容;速度方面,PRAM的讀速度比DRAM稍慢,寫速度比DRAM 慢幾十倍,但整體能耗比DRAM低的多。但是,PRAM有一個明顯的缺點,就是其存儲單元的寫次數(shù)有限,目前的技術可以支持PRAM存儲單元重復寫IO8次。針對這一問題,研究人員也提出了很多技術方案來彌補不足,使得PRAM真正發(fā)揮自身的優(yōu)點。這些技術方案主要是結合減少冗余寫,磨損均衡等技術組成,進而提高PRAM的使用壽命。發(fā)明內容
(一)要解決的技術問題
本發(fā)明的目的是提供一種相變內存周期性磨損均衡方法及其內存管理方法,基于傳統(tǒng)的內存管理方法——伙伴系統(tǒng)進行了重新設計,在操作系統(tǒng)層面來對相變內存進行控制,達到磨損均衡的目的,從而提供對相變內存的支持。
( 二 )技術方案
為了解決上述技術問題,本發(fā)明提供一種相變內存周期性磨損均衡方法,包括步驟
Si,為相變內存的物理內存維護一個全局寫次數(shù)計數(shù)器ACCeSS_C0unter,其中包含了相變內存中每個物理頁框的寫次數(shù);
S2,為每個子表增加used_list和threshold_list兩個雙向鏈表;used_list中保存的是已分配過的空閑塊,threshold_list中保存的是目前寫次數(shù)已超過閾值的空閑塊;同時增加一個全局的bad_list來維護不能進行分配的內存區(qū)域;
S3,在數(shù)據(jù)寫入到物理內存頁時,會同步更新全局的寫次數(shù)計數(shù)器ACCeSS_ Counter和內存塊本次分配期間的累計寫次數(shù)計數(shù)器;
S4,設置一個寫入閾值,當內存塊本次分配期間的寫入次數(shù)超過該寫入閾值后,則將該內存塊進行釋放,并放入到相應子表的thresholcLlist中去;同時再申請分配同樣大小的內存塊,并將數(shù)據(jù)內容從舊的內存塊中拷貝到新分配的內存塊中;
S5,更新頁表和刷新頁表緩沖中的對應項;當有物理內存頁的全局寫次數(shù)超過相變存儲單元的壽命限度時,將該內存頁放入到bad_list中,永遠不進行分配。
優(yōu)選地,所述步驟Sl中的計數(shù)器寫次數(shù)數(shù)據(jù)保存在相變內存的特定區(qū)域中,當系統(tǒng)重新啟動后,依然可以讀取到計數(shù)器的寫次數(shù)數(shù)據(jù)。
優(yōu)選地,當子表中維護空閑內存塊的free_list中無空閑內存塊同時也無大內存塊可以進行分割使用時,將子表的usecLlist和thresholcLlist兩個鏈表合并到free_ list中,表示相變內存已完成一次磨損均衡操作。本發(fā)明還提供一種包括上述的相變內存周期性磨損均衡方法的內存管理方法,包括步驟S10,相變內存相關數(shù)據(jù)結構的初始化;S20,相變內存的物理內存分配管理;S30,相變內存的物理內存回收管理;S40,相變內存的周期性磨損均衡。優(yōu)選地,所述步驟SlO是按照經(jīng)典伙伴系統(tǒng)的初始化規(guī)則進行初始化。優(yōu)選地,若空閑內存容量為2m+n個字節(jié),最大階數(shù)為10,則內存被分為以IOM個頁為單位的塊,通過鏈表的方式鏈接在階數(shù)為10的子表中;其余不夠IOM個頁的內存容量則按頁為單位鏈接在階數(shù)為0的子表中。 優(yōu)選地,所述步驟S20包括通過計算定位到與請求相匹配的子表,若該子表非空,則將子表中任意一個空閑塊分配即可;若子表不為空,則需要從上一個階數(shù)大的子表中去查找,若非空則將內存塊進行對半分割,一部分返回給內存請求,剩下的一部分插入到相應的子表中。優(yōu)選地,所述步驟S30包括S31,在內存使用者請求釋放內存時,系統(tǒng)將釋放后的空間重新放入到分配系統(tǒng)的可用空閑空間列表中;其中并不是將空閑空間插入到原來的free_list中,而是先插入到 used_list 中;S32,在內存回收過程中,首先判斷兩個空閑塊釋放是否是伙伴;這時只在子表的 free_list中查找伙伴空閑塊。優(yōu)選地,若內存塊的地址為addr,大小為2k,獲得伙伴起始地址的方法如下
\addr + {addr MDD T = 0);WLBudfy人 addr)= \
k[addr-2k(addr MDDt1 =2k)。(三)有益效果本發(fā)明通過周期性相變內存磨損均衡方法,達到了磨損均衡的目的的目的,使得在計算機的操作系統(tǒng)中能夠很好的支持相變內存,增強了相變內存的可靠性。
圖1為本發(fā)明相變內存周期性磨損均衡方法的流程圖;圖2為本發(fā)明內存管理方法的流程圖。
具體實施例方式下面結合附圖和實施例,對本發(fā)明的具體實施方式
作進一步詳細描述。以下實施例用于說明本發(fā)明,但不是限制本發(fā)明的范圍。如圖1所示,本發(fā)明所述的相變內存周期性磨損均衡方法,包括步驟S1,為相變內存的物理內存維護一個全局寫次數(shù)計數(shù)器Access_c0imter,其中包含了相變內存中每個物理頁框的寫次數(shù)計數(shù)器;寫次數(shù)數(shù)據(jù)保存在相變內存的特定區(qū)域中,當系統(tǒng)重新啟動后,依然可以讀取到計數(shù)器的寫次數(shù)數(shù)據(jù);S2,為每個子表增加usecLlist和thresholcL list兩個雙向鏈表;usecLlist中保存的是已分配過的空閑塊,threshold_list中保存的是目前寫次數(shù)已超過閾值的空閑塊;同時增加一個全局的bad_list來維護不能進行分配的內存區(qū)域;S3,在數(shù)據(jù)寫入到物理內存頁時,會同步更新全局的寫次數(shù)計數(shù)器Access Counter和內存塊本次分配期間的累計寫次數(shù)計數(shù)器;S4,設置一個寫入閾值,當內存塊本次分配期間的寫入次數(shù)超過該寫入閾值后,則將該內存塊進行釋放,并放入到相應子表的 threshold_list中去;同時再申請分配同樣大小的內存塊,并將數(shù)據(jù)內容從舊的內存塊中拷貝到新分配的內存塊中;S5,更新頁表和刷新頁表緩沖中的對應項;當有物理內存頁的全局寫次數(shù)超過相變存儲單元的壽命限度108時,將該內存頁放入到bad_list中,永遠不進行分配。
當子表中維護空閑內存塊的free_list中無空閑內存塊同時也無大內存塊可以進行分割使用時,將子表的used_list和threshold_list兩個鏈表合并到free_list中, 表示相變內存已完成一次磨損均衡操作。
本發(fā)明所述的包括上述的相變內存周期性磨損均衡方法的內存管理方法,包括步驟S10,相變內存相關數(shù)據(jù)結構的初始化;伙伴系統(tǒng)中維護的是系統(tǒng)中的可用空閑空間列表free_list,按照分割后的相同大小塊鏈接在一起;S20,相變內存的物理內存分配管理; S30,相變內存的物理內存回收管理;S40,相變內存的周期性磨損均衡。
所述步驟SlO是按照經(jīng)典伙伴系統(tǒng)的初始化規(guī)則進行初始化。若空閑內存容量為 2m+n個字節(jié),最大階數(shù)為10,則內存被分為以IOM個頁為單位的塊,通過鏈表的方式鏈接在階數(shù)為10的子表中;其余不夠IOM個頁的內存容量則按頁為單位鏈接在階數(shù)為0的子表中。
其中,所述步驟S20具體包括通過計算定位到與請求相匹配的子表,若該子表非空,則將子表中任意一個空閑塊分配即可;若子表不為空,則需要從上一個階級大的子表中去查找,若非空則將內存塊進行對半分割,一部分返回給內存請求,剩下的一部分插入到相應的子表中。當子表中維護空閑內存塊的free_list中無空閑內存塊同時也無大內存塊可以進行分割使用時,將子表的used_list和threshold_list兩個鏈表合并到free_list 中。這表示內存系統(tǒng)已完成一次均衡性操作。
所述步驟S30包括S31,在內存使用者請求釋放內存時,系統(tǒng)需要將釋放后的空間重新放入到分配系統(tǒng)的可用空閑空間列表中。在這里,并不是將空閑空間插入到原來的 free_list中,而是先插入到used_list中;S32,在內存回收過程中,一個重要的問題是將相鄰空閑伙伴合并為一個大塊。首先需要判斷兩個空閑塊釋放是否是伙伴。這時只在子表的freejist中查找伙伴空閑塊。優(yōu)選地,若內存塊的地址為addr,大小為2k,獲得伙伴起始地址的方法如下
權利要求
1.一種相變內存周期性磨損均衡方法,其特征在于,包括步驟Si,為相變內存的物理內存維護一個全局寫次數(shù)計數(shù)器Access_c0imter,其中包含了相變內存中每個物理頁框的寫次數(shù);S2,為每個子表增加used_list和threshold_list兩個雙向鏈表;used_list中保存的是已分配過的空閑塊,threshold_list中保存的是目前寫次數(shù)已超過閾值的空閑塊;同時增加一個全局的bad_list來維護不能進行分配的內存區(qū)域;S3,在數(shù)據(jù)寫入到物理內存頁時,會同步更新全局的寫次數(shù)計數(shù)器Access_c0imter和內存塊本次分配期間的累計寫次數(shù)計數(shù)器;S4,設置一個寫入閾值,當內存塊本次分配期間的寫入次數(shù)超過該寫入閾值后,則將該內存塊進行釋放,并放入到相應子表的thresholcLlist中去;同時再申請分配同樣大小的內存塊,并將數(shù)據(jù)內容從舊的內存塊中拷貝到新分配的內存塊中;S5,更新頁表和刷新頁表緩沖中的對應項;當有物理內存頁的全局寫次數(shù)超過相變存儲單元的壽命限度時,將該內存頁放入到bad_list中,永遠不進行分配。
2.如權利要求1所述的方法,其特征在于,所述步驟Sl中的計數(shù)器寫次數(shù)數(shù)據(jù)保存在相變內存的特定區(qū)域中,當系統(tǒng)重新啟動后,依然可以讀取到計數(shù)器的寫次數(shù)數(shù)據(jù)。
3.如權利要求1所述的方法,其特征在于,當子表中維護空閑內存塊的free_list中無空閑內存塊同時也無大內存塊可以進行分割使用時,將子表的usecLlist和thresholcL list兩個鏈表合并到freejist中,表示相變內存已完成一次磨損均衡操作。
4.一種包括權利要求1-3中任意一項所述的相變內存周期性磨損均衡方法的內存管理方法,其特征在于,包括步驟S10,相變內存相關數(shù)據(jù)結構的初始化; S20,相變內存的物理內存分配管理; S30,相變內存的物理內存回收管理; S40,相變內存的周期性磨損均衡。
5.如權利要求4所述的方法,其特征在于,所述步驟SlO是按照經(jīng)典伙伴系統(tǒng)的初始化規(guī)則進行初始化。
6.如權利要求5所述的方法,其特征在于,若空閑內存容量為2m+n個字節(jié),最大階數(shù)為 10,則內存被分為以IOM個頁為單位的塊,通過鏈表的方式鏈接在階數(shù)為10的子表中;其余不夠IOM個頁的內存容量則按頁為單位鏈接在階數(shù)為0的子表中。
7.如權利要求5所述的方法,其特征在于,所述步驟S20包括通過計算定位到與請求相匹配的子表,若該子表非空,則將子表中任意一個空閑塊分配即可;若子表不為空,則需要從上一個階數(shù)大的子表中去查找,若非空則將內存塊進行對半分割,一部分返回給內存請求,剩下的一部分插入到相應的子表中。
8.如權利要求5所述的方法,其特征在于,所述步驟S30包括S31,在內存使用者請求釋放內存時,系統(tǒng)將釋放后的空間重新放入到分配系統(tǒng)的可用空閑空間列表中;其中并不是將空閑空間插入到原來的free_list中,而是先插入到used_ list 中;S32,在內存回收過程中,首先判斷兩個空閑塊釋放是否是伙伴;這時只在子表的 free_list中查找伙伴空閑塊。
9.如權利要求8所述的方法,其特征在于,若內存塊的地址為addr,大小為2k,獲得伙伴起始地址的方法如下[addr + {addr MDD T = 0); WLBudfyk(M)=<k[addr-2k{addr MDDt1 =2k)0
全文摘要
本發(fā)明是一種相變內存周期性磨損均衡方法及其內存管理方法,包括步驟S1,為相變內存的物理內存維護一個全局寫次數(shù)計數(shù)器;S2,為每個子表增加used_list和threshold_list兩個雙向鏈表;同時增加一個全局的bad_list來維護不能進行分配的內存區(qū)域;S3,在數(shù)據(jù)寫入到物理內存頁時,同步更新全局的寫次數(shù)計數(shù)器和內存塊本次分配期間的累計寫次數(shù)計數(shù)器;S4,設置一個寫入閾值,當內存塊本次分配期間的寫入次數(shù)超過該寫入閾值后,則將該內存塊進行釋放,并放入到相應子表的threshold_list中去;再申請分配同樣大小的內存塊,并將數(shù)據(jù)內容從舊的內存塊中拷貝到新分配的內存塊中;S5,當有物理內存頁的全局寫次數(shù)超過相變存儲單元的壽命限度,將該內存頁放入到bad_list中,永遠不進行分配。
文檔編號G06F12/06GK102495806SQ201110382040
公開日2012年6月13日 申請日期2011年11月25日 優(yōu)先權日2011年11月25日
發(fā)明者胡事民, 趙鵬 申請人:清華大學