1.一種面向NAND閃存的頁面置換方法,其特征在于,所述方法包括以下步驟:
(1)當(dāng)一個(gè)I/O請(qǐng)求P到達(dá)時(shí),首先初始化變量第一標(biāo)志位和第二標(biāo)志位為0,之后在緩存中的CL(冷的干凈頁鏈表)、ML(其他混合頁鏈表)和GL(幽靈頁鏈表)中查詢P;
(2)若沒有在ML和CL中命中P則進(jìn)入步驟(3),否則跳轉(zhuǎn)到步驟(9);
(3)判斷是否在GL中有P的元數(shù)據(jù)信息,若有則進(jìn)入步驟(4),否則跳轉(zhuǎn)到步驟(5);
(4)刪除GL中包含P的元數(shù)據(jù)信息的節(jié)點(diǎn),并且將變量第一標(biāo)志位置為1;
(5)為請(qǐng)求P執(zhí)行緩存分配過程,為其分配緩存頁;
(6)若第一標(biāo)志位等于0并且該請(qǐng)求是讀操作,則跳入到步驟(12),否則進(jìn)入步驟(7);
(7)將新分配的緩存頁P(yáng)移動(dòng)到ML的MRU(最近被訪問)端;
(8)若第一標(biāo)志位等于1,進(jìn)入步驟(10)否則跳入步驟(11);
(9)將緩存頁P(yáng)移動(dòng)到ML的MRU端,并將第二標(biāo)志位賦值為1;
(10)將緩存頁P(yáng)標(biāo)記為熱頁;
(11)若是讀請(qǐng)求,則進(jìn)入步驟(13),否則跳轉(zhuǎn)到步驟(16);
(12)將緩存頁P(yáng)加入到CL的MRU端;
(13)若第二標(biāo)志位等于0,則進(jìn)入到步驟(14),否則跳入步驟(15);
(14)將數(shù)據(jù)從閃存讀入到新分配的緩存頁P(yáng);
(15)將緩存頁P(yáng)中的數(shù)據(jù)返回給上層,請(qǐng)求結(jié)束;
(16)將數(shù)據(jù)寫入到新分配的緩存頁P(yáng),并將緩存頁P(yáng)標(biāo)記為臟頁,請(qǐng)求結(jié)束。
2.根據(jù)權(quán)利要求1所述的面向NAND閃存的頁面置換方法,其特征在于,所述步驟(5)中分配緩存頁包括以下子步驟:
(21)判斷是否有空閑的緩存頁,若有則跳轉(zhuǎn)到步驟(211),否則進(jìn)入步驟(22);
(22)初始化將要被回收的緩存頁標(biāo)記為犧牲頁,使之為空;
(23)判斷鏈表CL是否為空,如果為空則進(jìn)入步驟(24),否則跳轉(zhuǎn)到步驟(27);
(24)從鏈表ML的LRU(最久未被訪問)端向MRU(最近被訪問)端掃描,依次判斷LRU端的緩存頁P(yáng)是否為冷頁,如果不是冷頁,則轉(zhuǎn)入步驟(25),否則跳轉(zhuǎn)到步驟(28);
(25)將緩存頁P(yáng)標(biāo)記為冷頁,若緩存頁P(yáng)為干凈頁,則將其移動(dòng)到CL的MRU端;否則將緩存頁P(yáng)移動(dòng)到ML的MRU端;
(26)若ML中的頁還沒有掃描完畢,則跳轉(zhuǎn)到步驟(24),否則跳轉(zhuǎn)到步驟(23);
(27)將CL鏈表中的LRU端緩存頁作為犧牲頁,跳轉(zhuǎn)到步驟(29);
(28)將緩存頁P(yáng)作為犧牲頁;
(29)若GL鏈表已滿,則將其LRU端的節(jié)點(diǎn)釋放;將犧牲頁的元數(shù)據(jù)信息加入到GL的MRU端;
(210)若犧牲頁是臟頁,則將該頁的數(shù)據(jù)寫回到閃存;將犧牲頁設(shè)為空閑頁;
(211)選取一個(gè)空閑頁返回,請(qǐng)求結(jié)束。
3.根據(jù)權(quán)利要求1或2所述一種面向NAND閃存的頁面置換方法,其特征在于,所述CL鏈表,用于管理冷的干凈頁;所述ML鏈表,用于管理熱的干凈頁、熱的臟頁和冷的臟頁;所述GL鏈表,用于記錄近期被淘汰的緩存頁的元數(shù)據(jù)信息。