两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法及裝置制造方法

文檔序號:6552604閱讀:384來源:國知局
一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法及裝置,寫方法為:選擇系統(tǒng)表中循環(huán)位圖的未用比特位,分配新用戶數(shù)據(jù)頁和新地址映射頁,將待寫數(shù)據(jù)寫入新用戶數(shù)據(jù)頁,將新用戶數(shù)據(jù)頁的物理頁號寫入新地址映射頁,將新地址映射頁的物理頁號寫入系統(tǒng)表,將系統(tǒng)表寫入存儲設(shè)備;讀方法為:從系統(tǒng)表中獲取地址映射頁的物理頁號,從地址映射頁獲取用戶數(shù)據(jù)頁的物理頁號,從用戶數(shù)據(jù)頁獲取需要讀取的數(shù)據(jù)。本發(fā)明的技術(shù)方案是通過系統(tǒng)表、地址映射頁、用戶數(shù)據(jù)頁的兩級映射關(guān)系進行數(shù)據(jù)的讀寫,通過管理循環(huán)位圖,能夠?qū)崿F(xiàn)防掉電,通過采用緩存機制,減少對存儲設(shè)備的擦寫次數(shù),實現(xiàn)磨損平衡。
【專利說明】一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法及裝置

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及信息安全領(lǐng)域,尤其涉及一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法及裝 置。

【背景技術(shù)】
[0002] 隨著科學(xué)技術(shù)的發(fā)展,智能卡的市場不斷擴大,而在使用智能卡的過程中,在未知 情況下由于斷電、失電或電的質(zhì)量達不到要求而導(dǎo)致智能卡不能正常工作,如果此時智能 卡正處于對存儲設(shè)備(即非易失性存儲區(qū),包括EEPROM、FLASH等)進行擦寫操作,則會導(dǎo) 致存儲設(shè)備中的原有數(shù)據(jù)的丟失,大大降低了智能卡的安全性。
[0003] 另外,在向存儲設(shè)備寫入數(shù)據(jù)時,需要對數(shù)據(jù)進行擦寫操作,在實際的擦寫操作過 程中,往往會對存儲設(shè)備中的某一頁進行頻繁擦寫,使擦寫達不到平衡,而存儲設(shè)備的擦寫 生命周期一般為十萬次,由于對某些頁進行過度的擦寫從而導(dǎo)致存儲設(shè)備的提早損壞,嚴 重影響存儲設(shè)備的使用壽命。


【發(fā)明內(nèi)容】

[0004] 本發(fā)明為了解決現(xiàn)有技術(shù)中存在的不足,提供了一種對存儲設(shè)備進行數(shù)據(jù)讀寫的 方法。
[0005] 本發(fā)明采用的技術(shù)方案是:一種對存儲設(shè)備進行數(shù)據(jù)寫入的方法,包括:調(diào)用寫 入函數(shù),向所述寫入函數(shù)中傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址,所述寫 入函數(shù)執(zhí)行以下操作 :
[0006] 步驟S1 :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,根 據(jù)所述待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號,根據(jù)所述邏輯頁號,計算與所 述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移;
[0007] 步驟S2 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中一個未用比特位,作為第一比特位,將所述第一比特位置為已用比特位,將所述存儲設(shè) 備中與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù)頁;
[0008] 步驟S3 :根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,判斷 是否能夠從所述地址映射頁中獲取到第一物理頁號,如果是,則根據(jù)所述存儲設(shè)備中與所 述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù) 頁,執(zhí)行步驟S5,否則執(zhí)行步驟S4 ;
[0009] 步驟S4 :將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù) 的長度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù);
[0010] 步驟S5 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中一個未用比特位,作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲設(shè) 備中與所述第二比特位對應(yīng)的數(shù)據(jù)頁作為新地址映射頁;
[0011] 步驟S6 :判斷是否能夠從所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中獲取到與所述地址 映射頁的物理頁號對應(yīng)的第二物理頁號,如果是,則根據(jù)所述存儲設(shè)備中與所述第二物理 頁號對應(yīng)的數(shù)據(jù)更新所述新地址映射頁,執(zhí)行步驟S7,否則將所述新地址映射頁中的數(shù)據(jù) 清空,執(zhí)行步驟S7 ;
[0012] 步驟S7 :將所述新用戶數(shù)據(jù)頁的物理頁號寫入所述新地址映射頁中,并將所述新 地址映射頁的物理頁號寫入所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中,獲取所述系統(tǒng)表的循環(huán)位 圖中與所述地址映射頁對應(yīng)的比特位,將該比特位置為未用比特位;
[0013] 步驟S8 :將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相應(yīng)位置,寫 入結(jié)束。
[0014] 所述步驟S1之前,還包括:從所述存儲設(shè)備中獲取有效靜態(tài)回收標記頁,根據(jù)所 述有效靜態(tài)回收標記頁中的靜態(tài)回收標記判斷是否需要進行靜態(tài)回收,如果是,則執(zhí)行靜 態(tài)回收操作,執(zhí)行步驟S1,否則直接執(zhí)行步驟S1。
[0015] 所述步驟S1中,所述從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩 存區(qū)中,具體為:
[0016] 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表;
[0017] 步驟a2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表;
[0018] 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟a4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索 弓丨,步驟a3結(jié)束;如果只有所述第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng) 表緩存區(qū)中,將第一有效系統(tǒng)表的頁號記為更新索引,步驟a3結(jié)束;如果均未通過校驗,則 報錯,步驟a3結(jié)束;
[0019] 步驟a4 :獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記, 如果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表 緩存區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束;如果 是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表 緩存區(qū)中,將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束;如果 是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系 統(tǒng)表緩存區(qū)中,將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束。
[0020] 所述步驟S8,具體為:將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對 應(yīng)的有效系統(tǒng)表中,更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記。
[0021] 所述將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表 中,還包括:
[0022] 判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表時 是否出現(xiàn)壞頁,如果是,則獲取與所述更新索引對應(yīng)的有效系統(tǒng)表相鄰的非壞頁的系統(tǒng)表, 將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞頁的系統(tǒng)表中,否則執(zhí)行更新所述 更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記的操作。
[0023] 所述更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記,具體為:判斷所述更新 索引對應(yīng)的有效系統(tǒng)表中的新舊標記,如果是所述第一預(yù)設(shè)值,則將所述新舊標記更新為 所述第三預(yù)設(shè)值,如果是所述第二預(yù)設(shè)值,則將所述新舊標記更新為所述第一預(yù)設(shè)值,如果 是所述第三預(yù)設(shè)值,則將所述新舊標記更新為所述第二預(yù)設(shè)值。
[0024] 所述步驟S1中,所述根據(jù)所述待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁 號,具體為:將所述待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁長,將得到的商作為邏輯頁號。
[0025] 所述步驟S1中,所述根據(jù)所述邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁 的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,具體為:將所述邏輯頁號除以預(yù)設(shè)頁長的二 分之一,將得到的商作為與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號,將得到的余數(shù)作 為在所述地址映射頁的頁內(nèi)偏移。
[0026] 所述步驟S3中,所述根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁 內(nèi)偏移,判斷是否能夠從所述地址映射頁中獲取到第一物理頁號,具體為:根據(jù)所述地址映 射頁的邏輯頁號,查找所述系統(tǒng)表中的地址映射索引,將所述地址映射頁的邏輯頁號乘以2 得到在地址映射索引的偏移,讀取兩個字節(jié)的數(shù)據(jù),作為所述地址映射頁的物理頁號,然后 根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中獲 取數(shù)據(jù),判斷獲取到的數(shù)據(jù)是否為OxfffT,如果是,則未找到第一物理頁號,否則找到第一 物理頁號。
[0027] 所述步驟S3中,所述根據(jù)所述存儲設(shè)備中與所述第一物理頁號對應(yīng)的數(shù)據(jù)、所述 待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁,具體為:
[0028] 步驟1 :將所述第一物理頁號轉(zhuǎn)換為第一物理地址,判斷所述第一物理地址是否 在用戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟2,否則執(zhí)行步驟3 ;
[0029] 步驟2 :根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中 的數(shù)據(jù),執(zhí)行步驟S5;
[0030] 步驟3 :將所述第一物理地址對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū) 中,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),執(zhí)行步 驟S5 ;
[0031] 所述步驟S8之前還包括:將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù) 頁中。
[0032] 所述將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁中,還包括:判斷所 述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁時是否出現(xiàn)壞頁,如果是,則返回執(zhí)行 步驟S2,否則將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁中。
[0033] 所述判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,具體為:
[0034] 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0035] 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ;
[0036] 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù) 緩存區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2。
[0037] 所述步驟S6中,所述根據(jù)所述存儲設(shè)備中與所述第二物理頁號對應(yīng)的數(shù)據(jù)更新 所述新地址映射頁,具體為:
[0038] 步驟bl :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,判斷所述第二物理地址是否 在地址映射緩存區(qū)中,如果是,則執(zhí)行步驟b3,否則執(zhí)行步驟b2 ;
[0039] 步驟b2 :將所述第二物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述地址映射緩存區(qū) 中,執(zhí)行步驟b3 ;
[0040] 步驟b3 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映 射頁中,執(zhí)行步驟S7。
[0041] 所述步驟b3,還包括:判斷所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的 所述新地址映射頁時是否出現(xiàn)壞頁,如果是,則返回步驟S5,否則將所述地址映射緩存區(qū)中 的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁中。
[0042] 所述判斷所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射 頁時是否出現(xiàn)壞頁,具體為:
[0043] 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0044] 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ;
[0045] 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址 映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁為壞頁,否則返回步驟bb2。
[0046] 所述步驟S7與所述步驟S8之間還包括:
[0047] 步驟cl :根據(jù)所述新用戶數(shù)據(jù)頁的物理頁號和所述新地址映射頁的物理頁號,計 算對應(yīng)的擦除計數(shù)頁;
[0048] 步驟c2 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特位,將所述存儲設(shè) 備中所述第三比特位對應(yīng)的數(shù)據(jù)頁作為新擦除計數(shù)頁;
[0049] 步驟c3 :判斷從所述系統(tǒng)表中是否能夠獲取到與所述擦除計數(shù)頁的頁號對應(yīng)的 第三物理頁號,如果是,則將所述第三物理頁號對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述新擦除計 數(shù)頁中,執(zhí)行步驟c4,否則將所述新擦除計數(shù)頁中的數(shù)據(jù)清空,執(zhí)行步驟c4 ;
[0050] 步驟c4 :從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映 射頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦 除次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,執(zhí)行步驟S8。
[0051] 所述步驟c3中,所述將所述第三物理頁號對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述新擦 除計數(shù)頁中,具體為:
[0052] 步驟el :將所述第三物理頁號轉(zhuǎn)換為第三物理地址,判斷所述第三物理地址是否 在擦除計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟e3,否則執(zhí)行步驟e2 ;
[0053] 步驟e2 :將所述第三物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述擦除計數(shù)緩存區(qū) 中,執(zhí)行步驟e3 ;
[0054] 步驟e3 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計 數(shù)頁中,執(zhí)行步驟c4。
[0055] 所述步驟e3,還包括:判斷所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的 所述新擦除計數(shù)頁中時是否出現(xiàn)壞頁,如果是,則返回步驟S5,否則將所述擦除計數(shù)緩存區(qū) 中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中。
[0056] 所述判斷所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù) 頁中時是否出現(xiàn)壞頁,具體為:
[0057] 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0058] 步驟cc2 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ;
[0059] 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除 計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁為壞頁,否則返回步驟cc2。
[0060] 所述從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁 對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),具體為:將所述新擦除計數(shù)頁中與所述新用戶數(shù)據(jù) 頁和所述新地址映射頁對應(yīng)的擦除次數(shù)均加0x01。
[0061] 所述根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新所述系統(tǒng)表緩存區(qū) 中的所述系統(tǒng)表,具體為:根據(jù)所述更新后的擦除次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系 統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁號寫入所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表 中。
[0062] 所述步驟c4與所述步驟S8之間還包括:
[0063] 步驟Π :判斷所述新擦除計數(shù)頁中的擦除次數(shù)是否大于第一預(yù)設(shè)值,如果是,則 將靜態(tài)回收標記置為需要進行靜態(tài)回收,執(zhí)行步驟f2,否則執(zhí)行步驟f2 ;
[0064] 步驟f2 :獲取所述系統(tǒng)表中的擦除總數(shù),根據(jù)所述擦除總數(shù),計算得到平均擦除 次數(shù),判斷所述平均擦除次數(shù)是否大于第二預(yù)設(shè)值,如果是,則將所述靜態(tài)回收標識置位需 要進行靜態(tài)回收,執(zhí)行步驟S8,否則直接執(zhí)行步驟S8。
[0065] 所述執(zhí)行靜態(tài)回收操作,具體為:
[0066] 步驟gl :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,獲 取系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中的第一個地址映射頁作 為當前地址映射頁;
[0067] 步驟g2 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,執(zhí)行步驟g3,否則執(zhí)行 步驟gl6 ;
[0068] 步驟g3 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第四 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁;
[0069] 步驟g4:判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第四比特位置為未用比特位,執(zhí)行步驟g3,否則執(zhí)行步驟g5 ;
[0070] 步驟g5 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟g7,否 則將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射緩存區(qū)置為空閑, 執(zhí)行步驟g6 ;
[0071] 步驟g6 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟g3,否則執(zhí)行步驟g7 ;
[0072] 步驟g7 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射頁 修改所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號,獲取當前地址映射頁中所有用戶數(shù) 據(jù)頁的物理頁號,將第一個用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁;
[0073] 步驟g8 :判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前用戶數(shù)據(jù)頁的物理頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,執(zhí)行步驟g9,否則執(zhí)行 步驟gl5 ;
[0074] 步驟g9 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第五 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁;
[0075] 步驟glO :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第五比特位置為未用比特位,執(zhí)行步驟g9,否則執(zhí)行步驟gll ;
[0076] 步驟gll :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟gl4, 否則將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存區(qū)置為空閑,執(zhí) 行步驟gl2 ;
[0077] 步驟gl3 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出 現(xiàn)壞頁,如果是,則執(zhí)行步驟g9,否則執(zhí)行步驟gl4 ;
[0078] 步驟gl4:將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶 數(shù)據(jù)頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號;
[0079] 步驟gl5 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行 步驟gl6,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟 g8 ;
[0080] 步驟gl6 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則 將靜態(tài)回收標識置為不需要進行靜態(tài)回收,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中, 回收成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行 步驟g2。
[0081] 所述從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,具體為:逐位查詢所 述系統(tǒng)表緩存區(qū)中所述系統(tǒng)表中的循環(huán)位圖。
[0082] 所述從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,具體為:從所述系統(tǒng) 表緩存區(qū)中獲取所述系統(tǒng)表中的動態(tài)控制指令,根據(jù)所述動態(tài)控制指令獲取循環(huán)位圖中相 應(yīng)的位置。
[0083] 一種對存儲設(shè)備進行數(shù)據(jù)讀取的方法,包括:調(diào)用讀取函數(shù),向所述讀取函數(shù)中傳 入讀取地址和讀取長度,所述讀取函數(shù)執(zhí)行以下操作:
[0084] 步驟A1 :從所述存儲設(shè)備中獲取系統(tǒng)表,判斷所述系統(tǒng)表是否為空,如果是,則執(zhí) 行步驟A7,否則執(zhí)行步驟A2;
[0085] 步驟A2 :根據(jù)所述讀取地址計算邏輯頁號,根據(jù)所述邏輯頁號計算與所述邏輯頁 號對應(yīng)的地址映射頁的物理頁號和所述邏輯頁號在所述地址映射頁的頁內(nèi)偏移;
[0086] 步驟A3 :判斷所述地址映射頁的物理頁號是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步 驟A7,否則執(zhí)行步驟A4;
[0087] 步驟A4 :根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所 述地址映射頁中讀出用戶數(shù)據(jù)頁的物理頁號;
[0088] 步驟A5 :判斷所述用戶數(shù)據(jù)頁的物理頁號是否為所述第四預(yù)設(shè)值,如果是,則執(zhí) 行步驟A7,否則執(zhí)行步驟A6 ;
[0089] 步驟A6 :根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)頁中讀出相應(yīng)的數(shù) 據(jù),并將所述相應(yīng)的數(shù)據(jù)返回,讀取結(jié)束;
[0090] 步驟A7 :根據(jù)所述讀取長度,返回長度為所述讀取長度的第五預(yù)設(shè)值,讀取結(jié)束。 [0091] 所述從所述存儲設(shè)備中獲取系統(tǒng)表,具體包括:
[0092] 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號減一對應(yīng)的頁作為第 一有效系統(tǒng)表;
[0093] 步驟h2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號加一對應(yīng)的頁作為第 二有效系統(tǒng)表;
[0094] 步驟h3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2;如果只有所述第二有效系統(tǒng)表 通過校驗,則將所述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2 ;如果均未通 過校驗,則報錯,結(jié)束;
[0095] 步驟h4:分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如 果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩 存區(qū)中;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀 入所述系統(tǒng)表緩存區(qū)中;如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值 對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2。
[0096] 所述步驟A2中,所述根據(jù)所述讀取地址計算邏輯頁號,具體為:將所述讀取地址 除以預(yù)設(shè)頁長,將得到的商作為邏輯頁號;
[0097] 所述步驟A2中,所述根據(jù)所述邏輯頁號計算與所述邏輯頁號對應(yīng)的地址映射頁 的物理頁號和所述邏輯頁號在地址映射頁的頁內(nèi)偏移,具體為:將所述邏輯頁號除以預(yù)設(shè) 頁長,根據(jù)得到的商從所述系統(tǒng)表中獲取與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號, 將得到的余數(shù)作為所述邏輯頁號在所述地址映射頁的頁內(nèi)偏移。
[0098] 所述步驟A3與所述步驟A4之間還包括:將所述地址映射頁的物理頁號轉(zhuǎn)換為所 述地址映射頁的物理地址,判斷從地址映射緩存區(qū)中是否能夠找到所述地址映射頁的物理 地址,如果是,則根據(jù)所述地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏移,從所述地址 映射緩存區(qū)中讀出用戶數(shù)據(jù)頁的物理頁號,執(zhí)行步驟A5,否則執(zhí)行步驟A4。
[0099] 所述步驟A5與所述步驟A6之間還包括:將所述用戶數(shù)據(jù)頁的物理頁號轉(zhuǎn)換為所 述用戶數(shù)據(jù)頁的物理地址,判斷用戶數(shù)據(jù)緩存區(qū)中是否存在所述用戶數(shù)據(jù)頁的物理地址, 如果是,則根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)緩存區(qū)中讀取相應(yīng)的數(shù)據(jù), 將讀取到的數(shù)據(jù)返回,讀取結(jié)束,否則執(zhí)行步驟A6。
[0100] 一種對存儲設(shè)備進行數(shù)據(jù)寫入的裝置,包括:
[0101] 調(diào)用模塊:用于調(diào)用寫入函數(shù),向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和 待寫數(shù)據(jù)的邏輯地址;
[0102] 獲取模塊:用于當所述調(diào)用模塊向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度 和待寫數(shù)據(jù)的邏輯地址后,從所述存儲設(shè)備中獲取系統(tǒng)表;
[0103] 計算模塊:用于根據(jù)待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號;用于 根據(jù)所述邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射 頁的頁內(nèi)偏移;
[0104] 選擇模塊:用于當所述計算模塊計算得到與所述邏輯頁號對應(yīng)的地址映射頁的邏 輯頁號和在所述地址映射頁的頁內(nèi)偏移時,從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循 環(huán)位圖,選擇所述循環(huán)位圖中的一個未用比特位,作為第一比特位,將所述第一比特位置為 已用比特位,將所述存儲設(shè)備中與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù)頁;用于 從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中一個未用比特 位,作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲設(shè)備中所述第二比特 位對應(yīng)數(shù)據(jù)頁作為新地址映射頁;
[0105] 判斷模塊:用于當所述計算模塊計算得到所述地址映射頁的邏輯頁號和在所述 地址映射頁的頁內(nèi)偏移時,根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏 移,判斷是否能夠從所述地址映射頁中獲取到第一物理頁號;用于判斷是否能夠從所述系 統(tǒng)表緩存區(qū)的所述系統(tǒng)表中獲取到與所述地址映射頁的物理頁號對應(yīng)的第二物理頁號;
[0106] 更新模塊:用于當所述判斷模塊判斷出能夠從所述地址映射頁中獲取到第一物理 頁號時,根據(jù)所述存儲設(shè)備中所述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及所述待寫數(shù) 據(jù)的長度,更新所述新用戶數(shù)據(jù)頁;用于當所述判斷模塊判斷出不能夠從所述地址映射頁 中獲取到第一物理頁號時,將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述待寫數(shù)據(jù)及所述 待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù);用于當所述判斷模塊判斷出能夠獲取 到與所述地址映射頁的物理頁號對應(yīng)的第二物理頁號時,根據(jù)所述存儲設(shè)備中所述第二物 理頁號對應(yīng)的數(shù)據(jù)更新所述新地址映射頁;
[0107] 寫入模塊:用于當所述獲取模塊獲取到系統(tǒng)表時,將所述系統(tǒng)表寫入系統(tǒng)表緩存 區(qū)中;用于當所述判斷模塊判斷出不能夠獲取到與所述地址映射頁的物理頁號對應(yīng)的第二 物理頁號時,將所述新地址映射頁中的數(shù)據(jù)清空;用于將所述新用戶數(shù)據(jù)頁的頁號寫入所 述新地址映射頁中;用于將所述新地址映射頁的物理頁號寫入所述系統(tǒng)表緩存區(qū)的所述系 統(tǒng)表中;用于獲取所述系統(tǒng)表的循環(huán)位圖中與所述地址映射頁對應(yīng)的比特位,將該比特位 置為未用比特位,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相應(yīng)位置。
[0108] 所述獲取模塊,還用于從所述存儲設(shè)備中獲取有效靜態(tài)回收標記頁;
[0109] 所述判斷模塊,還用于當所述獲取模塊獲取到所述有效靜態(tài)回收標記頁時,根據(jù) 所述有效靜態(tài)回收標記頁中的靜態(tài)回收標記判斷是否需要進行靜態(tài)回收;
[0110] 所述裝置還包括,靜態(tài)回收模塊,用于執(zhí)行靜態(tài)回收操作。
[0111] 所述獲取模塊,具體用于執(zhí)行以下操作:
[0112] 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表;
[0113] 步驟a2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表;
[0114] 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟a4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索 弓丨;如果只有所述第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,將 第一有效系統(tǒng)表的頁號記為更新索引;如果均未通過校驗,則報錯,結(jié)束;
[0115] 步驟a4 :獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記, 如果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表 緩存區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第二預(yù) 設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將 所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第三預(yù)設(shè)值和所述第 一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將所述第三 預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引。
[0116] 所述寫入模塊,具體用于將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引 對應(yīng)的有效系統(tǒng)表中;
[0117] 所述更新模塊,還用于更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記。
[0118] 所述判斷模塊,還用于判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引 對應(yīng)的有效系統(tǒng)表時是否出現(xiàn)壞頁;
[0119] 所述獲取模塊,還用于當所述判斷模塊判斷出所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表 寫入所述更新索引對應(yīng)的有效系統(tǒng)表出現(xiàn)壞頁時,獲取與所述更新索引對應(yīng)的有效系統(tǒng)表 相鄰的非壞頁的系統(tǒng)表,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞頁的系統(tǒng) 表中;
[0120] 所述更新模塊,具體用于當所述判斷模塊判斷出所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng) 表寫入所述更新索引對應(yīng)的有效系統(tǒng)表未出現(xiàn)壞頁時,更新所述更新索引對應(yīng)的有效系統(tǒng) 表中的新舊標記。
[0121] 所述判斷模塊,還用于判斷所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記;
[0122] 所述更新模塊,還用于當所述判斷模塊判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中 的新舊標記為第一預(yù)設(shè)值時,將所述新舊標記更新為所述第三預(yù)設(shè)值;還用于當所述判斷 模塊判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記為第二預(yù)設(shè)值時,將所述新舊標 記更新為所述第一預(yù)設(shè)值;還用于當所述判斷模塊判斷出所述更新索引對應(yīng)的有效系統(tǒng)表 中的新舊標記為第三預(yù)設(shè)值時,將所述新舊標記更新為所述第二預(yù)設(shè)值。
[0123] 所述計算模塊,具體用于將所述待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁長,將得到的商 作為邏輯頁號。
[0124] 所述計算模塊,具體用于將所述邏輯頁號除以預(yù)設(shè)頁長的二分之一,將得到的商 作為所述邏輯頁號對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁號在所述 地址映射頁的頁內(nèi)偏移。
[0125] 所述判斷模塊,具體用于根據(jù)所述地址映射頁的邏輯頁號,查找所述系統(tǒng)表中的 地址映射索引,將所述地址映射頁的邏輯頁號乘以2得到在地址映射索引的偏移,讀取兩 個字節(jié)的數(shù)據(jù),作為所述地址映射頁的物理頁號,然后根據(jù)所述地址映射頁的物理頁號和 在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中獲取數(shù)據(jù),判斷獲取到的數(shù)據(jù)是否為 OxfffT。
[0126] 步驟1 :將所述第一物理頁號轉(zhuǎn)換為第一物理地址,判斷所述第一物理地址是否 在用戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟2,否則執(zhí)行步驟3 ;
[0127] 步驟2 :根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中 的數(shù)據(jù),觸發(fā)選擇模塊;
[0128] 步驟3 :將所述第一物理地址對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū) 中,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),觸發(fā)選 擇豐吳塊;
[0129] 所述寫入模塊,還用于將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁 中。
[0130] 所述判斷模塊,還用于判斷判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù) 據(jù)頁時是否出現(xiàn)壞頁;
[0131] 所述寫入模塊,具體用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫 入所述新用戶數(shù)據(jù)頁未出現(xiàn)壞頁時,將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù) 頁中。
[0132] 所述判斷模塊,具體用于執(zhí)行以下操作:
[0133] 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0134] 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ;
[0135] 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù) 緩存區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2。
[0136] 所述更新模塊,具體用于執(zhí)行以下操作:
[0137] 步驟bl :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,判斷所述第二物理地址是否 在地址映射緩存區(qū)中,如果是,則執(zhí)行步驟b3,否則執(zhí)行步驟b2 ;
[0138] 步驟b2 :將所述第二物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述地址映射緩存區(qū) 中,執(zhí)行步驟b3 ;
[0139] 步驟b3 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映 射頁中。
[0140] 所述判斷模塊,還用于判斷所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的 所述新地址映射頁時是否出現(xiàn)壞頁;
[0141] 所述寫入模塊,具體用于當所述判斷模塊判斷出所述地址映射緩存區(qū)中的數(shù)據(jù)寫 入所述新地址映射頁未出現(xiàn)壞頁時,將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中 的所述新地址映射頁中。
[0142] 所述寫入模塊,具體用于執(zhí)行以下操作:
[0143] 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0144] 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ;
[0145] 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址 映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁為壞頁,否則返回步驟bb2。
[0146] 所述計算模塊,還用于根據(jù)所述新用戶數(shù)據(jù)頁的頁號和所述新地址映射頁的物理 頁號,計算對應(yīng)的擦除計數(shù)頁;
[0147] 所述選擇模塊,還用于從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選 擇所述循環(huán)位圖中一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特位, 將所述存儲設(shè)備中所述第三比特位對應(yīng)的數(shù)據(jù)頁作為新擦除計數(shù)頁;
[0148] 所述判斷模塊,還用于判斷從所述系統(tǒng)表中是否能夠獲取到與所述擦除計數(shù)頁的 頁號對應(yīng)的第三物理頁號;
[0149] 所述寫入模塊,還用于當所述判斷模塊判斷出從所述系統(tǒng)表中能夠獲取到與所述 擦除計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述第三物理頁號對應(yīng)的存儲設(shè)備中的數(shù)據(jù) 寫入所述新擦除計數(shù)頁中;
[0150] 所述更新模塊,還用于當所述判斷模塊判斷出從所述系統(tǒng)表中不能夠獲取到與所 述擦除計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述新擦除計數(shù)頁中的數(shù)據(jù)清空;還用于 從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次 數(shù),更新對應(yīng)的擦除次數(shù);還用于根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新 所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表。
[0151] 所述寫入模塊,具體用于執(zhí)行以下操作:
[0152] 步驟el :將所述第三物理頁號轉(zhuǎn)換為第三物理地址,判斷所述第三物理地址是否 在擦除計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟e3,否則執(zhí)行步驟e2 ;
[0153] 步驟e2 :將所述第三物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述擦除計數(shù)緩存區(qū) 中,執(zhí)行步驟e3 ;
[0154] 步驟e3 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計 數(shù)頁中。
[0155] 所述判斷模塊,還用于判斷所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的 所述新擦除計數(shù)頁中時是否出現(xiàn)壞頁;
[0156] 所述寫入模塊,具體用于當所述判斷模塊判斷出所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫 入所述存儲設(shè)備中的所述新擦除計數(shù)頁中未出現(xiàn)壞頁時,將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù) 寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中。
[0157] 所述判斷模塊,具體用于執(zhí)行以下操作:
[0158] 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0159] 步驟cc2 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ;
[0160] 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除 計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁為壞頁,否則返回步驟cc2。
[0161] 所述更新模塊中,所述從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所 述新地址映射頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),具體用于將所述新擦除計數(shù)頁中 與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù)均加0x01。
[0162] 所述更新模塊中,所述根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新所 述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,具體用于根據(jù)所述更新后的擦除次數(shù)更新所述系統(tǒng)表緩 存區(qū)中的所述系統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁號寫入所述系統(tǒng)表緩存區(qū) 中的所述系統(tǒng)表中。
[0163] 所述判斷模塊,還用于判斷所述新擦除計數(shù)頁中的擦除次數(shù)是否大于第一預(yù)設(shè) 值;還用于當所述計算模塊計算得到平均擦除次數(shù)時,判斷所述平均擦除次數(shù)是否大于第 二預(yù)設(shè)值;
[0164] 所述獲取模塊,還用于當所述判斷模塊判斷出所述新擦除計數(shù)頁中的擦除次數(shù)不 大于第一預(yù)設(shè)值時或當所述設(shè)置模塊將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收時,獲取所 述系統(tǒng)表中的擦除總數(shù);
[0165] 所述計算模塊,還用于當所述獲取模塊獲取到所述系統(tǒng)表中的擦除總數(shù)時,根據(jù) 所述擦除總數(shù),計算得到平均擦除次數(shù);
[0166] 所述裝置還包括:
[0167] 設(shè)置模塊,用于當所述判斷模塊判斷出所述新擦除計數(shù)頁中的擦除次數(shù)大于第一 預(yù)設(shè)值時,將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收;用于當所述判斷模塊判斷出所述平 均擦除次數(shù)大于第二預(yù)設(shè)值時,將靜態(tài)回收標記置為需要進行靜態(tài)回收。
[0168] 所述靜態(tài)回收模塊,具體用于執(zhí)行以下操作:
[0169] 步驟gl :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,獲 取系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中的第一個地址映射頁作 為當前地址映射頁;
[0170] 步驟g2 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,執(zhí)行步驟g3,否則執(zhí)行 步驟gl6 ;
[0171] 步驟g3 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第四 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁;
[0172] 步驟g4:判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第四比特位置為未用比特位,執(zhí)行步驟g3,否則執(zhí)行步驟g5 ;
[0173] 步驟g5:判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟g7,否 則將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射緩存區(qū)置為空閑, 執(zhí)行步驟g6 ;
[0174] 步驟g6 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟g3,否則執(zhí)行步驟g7 ;
[0175] 步驟g7 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射頁 修改所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號,獲取當前地址映射頁中所有用戶數(shù) 據(jù)頁的頁號,將第一個用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁;
[0176] 步驟g8 :判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前用戶數(shù)據(jù)頁的頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,執(zhí)行步驟g9,否則執(zhí)行步驟 gl5 ;
[0177] 步驟g9 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第五 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁;
[0178] 步驟glO :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第五比特位置為未用比特位,執(zhí)行步驟g9,否則執(zhí)行步驟gll ;
[0179] 步驟gll :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟gl4, 否則將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存區(qū)置為空閑,執(zhí) 行步驟gl2 ;
[0180] 步驟gl3 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出 現(xiàn)壞頁,如果是,則執(zhí)行步驟g9,否則執(zhí)行步驟gl4 ;
[0181] 步驟gl4:將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶 數(shù)據(jù)頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號;
[0182] 步驟gl5 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行 步驟gl6,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟 g8 ;
[0183] 步驟gl6 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則 將靜態(tài)回收標識置為不需要進行靜態(tài)回收,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中, 回收成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行 步驟g2。
[0184] 所述選擇模塊,具體用于逐位查詢所述系統(tǒng)表緩存區(qū)中所述系統(tǒng)表中的循環(huán)位 圖。
[0185] 所述選擇模塊,具體用于從所述系統(tǒng)表緩存區(qū)中獲取所述系統(tǒng)表中的動態(tài)控制指 令,根據(jù)所述動態(tài)控制指令獲取循環(huán)位圖中相應(yīng)的位置。
[0186] 一種對存儲設(shè)備進行數(shù)據(jù)讀取的裝置,包括:
[0187] 調(diào)用模塊:用于調(diào)用讀取函數(shù),向所述讀取函數(shù)中傳入讀取地址和讀取長度;
[0188] 獲取模塊:用于當調(diào)用模塊向所述讀取函數(shù)中傳入讀取地址和讀取長度后,從所 述存儲設(shè)備中獲取系統(tǒng)表;
[0189] 判斷模塊:用于當獲取模塊從所述存儲設(shè)備中獲取到系統(tǒng)表時,判斷所述系統(tǒng)表 是否為空;用于當計算模塊計算出地址映射頁的物理頁號時,判斷所述地址映射頁的物理 頁號是否為第四預(yù)設(shè)值;用于當計算模塊計算出用戶數(shù)據(jù)頁的頁號時,判斷所述用戶數(shù)據(jù) 頁的頁號是否為所述第四預(yù)設(shè)值;
[0190] 計算模塊:用于當所述判斷模塊判斷出所述系統(tǒng)表不為空時,根據(jù)所述讀取地址 計算邏輯頁號,用于計算與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號和所述邏輯頁號在 所述地址映射頁的頁內(nèi)偏移;
[0191] 讀取模塊:用于當所述判斷模塊判斷出所述地址映射頁的物理頁號不為第四預(yù)設(shè) 值時,根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射 頁中讀出用戶數(shù)據(jù)頁的頁號;用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)頁的頁號為所述第 四預(yù)設(shè)值時,根據(jù)所述讀取長度,返回長度為所述讀取長度的第五預(yù)設(shè)值;用于當所述判斷 模塊判斷出所述用戶數(shù)據(jù)頁的頁號不為所述第三預(yù)設(shè)值時,根據(jù)所述讀取地址和所述讀取 長度,從所述用戶數(shù)據(jù)頁中讀取相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
[0192] 所述獲取模塊,具體用于執(zhí)行以下操作:
[0193] 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號減一對應(yīng)的頁作為第 一有效系統(tǒng)表;
[0194] 步驟h2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號加一對應(yīng)的頁作為第 二有效系統(tǒng)表;
[0195] 步驟h3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果只有所述第二有效系統(tǒng)表通過校驗,則 將所述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果均未通過校驗,則報錯,結(jié)束;
[0196] 步驟h4:分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如 果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩 存區(qū)中;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀 入所述系統(tǒng)表緩存區(qū)中;如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值 對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中。
[0197] 所述計算模塊,具體用于將所述讀取地址除以預(yù)設(shè)頁長,將得到的商作為邏輯頁 號;具體用于將所述邏輯頁號除以預(yù)設(shè)頁長,根據(jù)得到的商從所述系統(tǒng)表中獲取與所述邏 輯頁號對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁號在所述地址映射頁 的頁內(nèi)偏移。
[0198] 第一轉(zhuǎn)換模塊,用于當所述判斷模塊判斷出所述地址映射頁的物理頁號不為第四 預(yù)設(shè)值時,將所述地址映射頁的物理頁號轉(zhuǎn)換為所述地址映射頁的物理地址;
[0199] 所述判斷模塊,還用于當所述第一轉(zhuǎn)換模塊得到所述地址映射頁的物理地址時, 判斷從地址映射緩存區(qū)中是否能夠找到所述地址映射頁的物理地址;
[0200] 所述讀取模塊:具體用于當所述判斷模塊判斷出從所述地址映射緩存區(qū)中獲取到 所述地址映射頁的物理地址時,根據(jù)所述地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏 移,從所述地址映射緩存區(qū)讀出用戶數(shù)據(jù)頁的頁號;具體用于當所述判斷模塊判斷出從所 述地址映射緩存區(qū)中不能讀取所述地址映射頁的物理地址時,根據(jù)所述地址映射頁的物理 頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中讀出用戶數(shù)據(jù)頁的頁號。
[0201] 第二轉(zhuǎn)換模塊,用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)頁的頁號不為第四預(yù)設(shè) 值時,將所述用戶數(shù)據(jù)頁的頁號轉(zhuǎn)換為所述用戶數(shù)據(jù)頁的物理地址;
[0202] 所述判斷模塊,還用于當所述第二轉(zhuǎn)換模塊得到所述用戶數(shù)據(jù)頁的物理地址時, 判斷用戶數(shù)據(jù)緩存區(qū)中是否存在所述用戶數(shù)據(jù)頁的物理地址;
[0203] 所述讀取模塊:具體用于當所述判斷模塊判斷出從所述用戶數(shù)據(jù)緩存區(qū)中存在所 述用戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)緩存區(qū) 中讀取相應(yīng)的數(shù)據(jù),將讀取到的數(shù)據(jù)返回;具體用于當所述判斷模塊判斷出所述用戶數(shù)據(jù) 緩存區(qū)中不存在所述用戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀取長度,從所 述用戶數(shù)據(jù)頁中讀出相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
[0204] 本發(fā)明取得的有益效果是:采用本發(fā)明技術(shù)方案,通過系統(tǒng)表、地址映射頁、用戶 數(shù)據(jù)頁的兩級映射關(guān)系進行數(shù)據(jù)的讀寫,通過管理循環(huán)位圖,能夠?qū)崿F(xiàn)磨損平衡,通過采用 緩存機制,減少對存儲設(shè)備的擦寫次數(shù),延長了存儲設(shè)備的使用壽命。

【專利附圖】

【附圖說明】
[0205] 為了更清楚的說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以 根據(jù)這些附圖獲得其他的附圖。
[0206] 圖1是本發(fā)明實施例一提供的一種對存儲設(shè)備進行數(shù)據(jù)寫入的方法流程圖;
[0207] 圖2是本發(fā)明實施例二提供的一種對存儲設(shè)備進行數(shù)據(jù)讀取的方法流程圖;
[0208] 圖3和圖4是本發(fā)明實施例三提供的一種對存儲設(shè)備進行數(shù)據(jù)寫入的方法流程 圖;
[0209] 圖5是本發(fā)明實施例三中步驟302的具體細化圖;
[0210] 圖6是本發(fā)明實施例四提供的一種對存儲設(shè)備進行數(shù)據(jù)讀取的方法流程圖;
[0211] 圖7和圖8是本發(fā)明實施例五提供的靜態(tài)回收的具體操作流程圖;
[0212] 圖9是本發(fā)明實施例六提供的一種對存儲設(shè)備進行數(shù)據(jù)寫入的裝置圖;
[0213] 圖10是本發(fā)明實施例七提供的一種對存儲設(shè)備進行數(shù)據(jù)讀取的裝置圖。

【具體實施方式】
[0214] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護的范圍。其中,存儲設(shè)備由系統(tǒng)區(qū)和數(shù)據(jù)區(qū)組成,其中,數(shù)據(jù)區(qū)中 包括多個數(shù)據(jù)頁,其中,數(shù)據(jù)頁包括用戶數(shù)據(jù)頁、地址映射頁和擦除計數(shù)頁,其中,用戶數(shù)據(jù) 頁中存放的是用戶有效數(shù)據(jù),地址映射頁中存放的是每個用戶數(shù)據(jù)頁的物理頁號,擦除計 數(shù)頁中存放的是用戶數(shù)據(jù)頁和地址映射頁的擦除次數(shù);系統(tǒng)區(qū)中包括多個系統(tǒng)表和多個靜 態(tài)回收標記頁。
[0215] 優(yōu)選的,本實施例中,以預(yù)設(shè)頁長為256字節(jié)為例來說明,存儲設(shè)備的前64頁為64 頁的系統(tǒng)表,最后一頁系統(tǒng)表之后的4頁為靜態(tài)回收標記頁,最后一頁靜態(tài)回收標記頁之 后的區(qū)域為用戶區(qū);
[0216] 其中,4頁靜態(tài)回收標記頁中僅包含一頁有效靜態(tài)回收標記頁,當有效靜態(tài)回收標 記頁為壞頁時,為防止數(shù)據(jù)丟失,將標識需要靜態(tài)回收的預(yù)設(shè)值寫入其余靜態(tài)回收標記頁 中;
[0217] 其中,64頁系統(tǒng)表中僅包含兩頁有效系統(tǒng)表,當有效系統(tǒng)表為壞頁時,為防止數(shù)據(jù) 丟失,將系統(tǒng)表緩存區(qū)中的數(shù)據(jù)寫入其余系統(tǒng)表中,每一頁系統(tǒng)表中均包括地址映射索引、 擦除計數(shù)索引、動態(tài)控制指針、用戶區(qū)剩余未用空間大小、擦除總數(shù)、循環(huán)位圖、新舊標記和 校驗碼;
[0218] 其中,地址映射索引具體占用系統(tǒng)表32字節(jié),存儲16個地址映射頁的物理頁號; 擦除計數(shù)索引具體占用系統(tǒng)表16字節(jié),存儲8個擦除計數(shù)頁的頁號;動態(tài)控制指針占用系 統(tǒng)表2字節(jié),用于標識循環(huán)位圖的當前位置;用戶區(qū)剩余未用空間大小占用系統(tǒng)表2字節(jié); 擦除總數(shù)占用系統(tǒng)表4字節(jié);循環(huán)位圖占用系統(tǒng)表196字節(jié),每個字節(jié)的每一位按順序?qū)?應(yīng)存儲設(shè)備中的區(qū)域即存儲設(shè)備的用戶區(qū)中的每一個數(shù)據(jù)頁是否未用,預(yù)先約定1表示未 用,0表示已用;新舊標記占用系統(tǒng)表2字節(jié),用于標識該系統(tǒng)表為新系統(tǒng)表或舊系統(tǒng)表;校 驗碼占用系統(tǒng)表2字節(jié);
[0219] 本實施例中,預(yù)先設(shè)定,地址映射索引中第一、二字節(jié)代表第一個地址映射頁的頁 號,第三、四字節(jié)代表第二個地址映射頁的頁號,以此類推;同樣的,預(yù)先設(shè)定,擦除計數(shù)索 引中第一、二個字節(jié)代表第一個擦除計數(shù)頁的頁號,第三、四個字節(jié)代表第二個擦除計數(shù)頁 的頁號,以此類推;
[0220] 例如,地址映射頁的頁號為0x0002,則為第三個地址映射頁(第一個地址映射頁 的頁號為0x0000、第二個地址映射頁的頁號為0x0001),則對應(yīng)的獲取地址映射索引的第 五、六個字節(jié);如果地址映射索引為00010203040506070809……則根據(jù)地址映射頁的頁號 獲取到的數(shù)據(jù)為0x0405 ;
[0221] 例如,擦除計數(shù)頁的頁號為0x0001,則為第二個擦除計數(shù)頁(第一個擦除計數(shù)頁 的頁號為0x0000),則對應(yīng)的獲取擦除計數(shù)索引的第五、六個字節(jié);如果擦除計數(shù)索引為 00010203040506070809……則根據(jù)擦除計數(shù)頁的頁號獲取到的數(shù)據(jù)為0x0203 ;
[0222] 本實施例中,為了達到對存儲設(shè)備的磨損平衡,相應(yīng)地,與所述存儲設(shè)備位于同一 裝置中的RAM里設(shè)置有擦除計數(shù)緩存區(qū)、地址映射緩存區(qū)、用戶數(shù)據(jù)緩存區(qū)和系統(tǒng)表緩存 區(qū),長度各為1頁;
[0223] 其中,用戶數(shù)據(jù)緩存區(qū)中存放的是用戶數(shù)據(jù)頁中的數(shù)據(jù)和用戶數(shù)據(jù)頁的物理地 址,地址映射緩存區(qū)中存放的是地址映射頁中的數(shù)據(jù)和地址映射頁的物理地址,擦除計數(shù) 緩存區(qū)中存放的是擦除計數(shù)頁中的數(shù)據(jù)和擦除計數(shù)頁的物理地址,系統(tǒng)表緩存區(qū)中存放的 是系統(tǒng)表中的數(shù)據(jù)和系統(tǒng)表的物理地址;
[0224] 實施例一
[0225] 本發(fā)明實施例一提供了一種對存儲設(shè)備進行數(shù)據(jù)讀寫的方法,如圖1所示,包括: 調(diào)用寫入函數(shù),向所述寫入函數(shù)中傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址, 所述寫入函數(shù)接收到傳入的待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址后,執(zhí)行以 下操作:
[0226] 步驟101 :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,根 據(jù)所述待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號,根據(jù)所述邏輯頁號,計算與所 述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移;
[0227] 步驟102 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中一個未用比特位,作為第一比特位,將所述第一比特位置為已用比特位,將所述存儲 設(shè)備中與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù)頁;
[0228] 步驟103 :根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,判 斷是否能夠從所述地址映射頁中獲取到第一物理頁號,如果是,則根據(jù)所述存儲設(shè)備中所 述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù) 頁,執(zhí)行步驟105,否則執(zhí)行步驟104 ;
[0229] 步驟104 :將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù) 據(jù)的長度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù);
[0230] 步驟105 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中一個未用比特位,作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲 設(shè)備中所述第二比特位對應(yīng)的數(shù)據(jù)頁作為新地址映射頁;
[0231] 步驟106 :判斷是否能夠從所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中獲取到與所述地址 映射頁的物理頁號對應(yīng)的第二物理頁號,如果是,則根據(jù)所述存儲設(shè)備中所述第二物理頁 號對應(yīng)的數(shù)據(jù)更新所述新地址映射頁,執(zhí)行步驟107,否則將所述新地址映射頁中的數(shù)據(jù)清 空,執(zhí)行步驟107 ;
[0232] 步驟107 :將所述新用戶數(shù)據(jù)頁的物理頁號寫入所述新地址映射頁中,并將所述 新地址映射頁的物理頁號寫入所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中,獲取所述系統(tǒng)表的循環(huán) 位圖中與所述地址映射頁對應(yīng)的比特位,將該比特位置為未用比特位;
[0233] 步驟108 :將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相應(yīng)位置, 寫入結(jié)束。
[0234] 采用本發(fā)明技術(shù)方案,通過系統(tǒng)表、地址映射頁、用戶數(shù)據(jù)頁的兩級映射關(guān)系進行 數(shù)據(jù)的讀寫,通過管理循環(huán)位圖,能夠?qū)崿F(xiàn)磨損平衡,通過采用緩存機制,減少對存儲設(shè)備 的擦寫次數(shù),延長了存儲設(shè)備的使用壽命。
[0235] 實施例二
[0236] 本發(fā)明實施例二提供了一種對存儲設(shè)備進行數(shù)據(jù)讀取的方法,如圖2所示,本實 施例中的存儲設(shè)備采用實施例一提供的方法進行數(shù)據(jù)寫入;所述方法包括:調(diào)用讀取函 數(shù),向所述讀取函數(shù)中傳入讀取地址(該地址為邏輯地址)和讀取長度,所述讀取函數(shù)接收 到傳入的讀取地址和讀取長度后,執(zhí)行以下操作:
[0237] 步驟201 :從所述存儲設(shè)備中獲取系統(tǒng)表,判斷所述系統(tǒng)表是否為空,如果是,則 執(zhí)行步驟207,否則執(zhí)行步驟202 ;
[0238] 步驟202 :根據(jù)所述讀取地址計算邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映 射頁的物理頁號和所述邏輯頁號在所述地址映射頁的頁內(nèi)偏移;
[0239] 步驟203 :判斷所述地址映射頁的物理頁號是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步 驟207,否則執(zhí)行步驟204 ;
[0240] 步驟204 :根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從 所述地址映射頁中讀出用戶數(shù)據(jù)頁的物理頁號;
[0241] 步驟205 :判斷所述用戶數(shù)據(jù)頁的物理頁號是否為所述第四預(yù)設(shè)值,如果是,則執(zhí) 行步驟207,否則執(zhí)行步驟206 ;
[0242] 優(yōu)選的,所述第四預(yù)設(shè)值為Oxffff ;
[0243] 步驟206 :根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)頁中讀出相應(yīng)的 數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回,讀取結(jié)束;
[0244] 步驟207 :根據(jù)所述讀取長度,返回相應(yīng)長度的第五預(yù)設(shè)值,讀取結(jié)束。
[0245] 優(yōu)選的,第五預(yù)設(shè)值為Oxff,例如,讀取長度為5字節(jié),則返回的數(shù)據(jù)為Oxff OxfT Oxff Oxff Oxff。
[0246] 實施例三
[0247] 本發(fā)明實施例三提供了一種對存儲設(shè)備進行數(shù)據(jù)寫入的方法,本實施例以預(yù)設(shè)頁 長為256字節(jié)為例來說明,如圖3和圖4所示,包括:調(diào)用寫入函數(shù),向所述寫入函數(shù)中傳入 待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址,所述寫入函數(shù)接收到傳入的待寫數(shù)據(jù)、 待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址后執(zhí)行以下操作:
[0248] 步驟301 :從存儲設(shè)備中獲取有效靜態(tài)回收標記頁中的靜態(tài)回收標記,判斷靜態(tài) 回收標記是否為預(yù)設(shè)值,如果是,則執(zhí)行靜態(tài)回收的操作,執(zhí)行步驟302,否則直接執(zhí)行步驟 302 ;
[0249] 具體地,獲取全部靜態(tài)回收標記頁中的數(shù)據(jù),獲取每個靜態(tài)回收標記頁中的有效 數(shù)據(jù)和校驗值,對有效數(shù)據(jù)進行計算,得到的結(jié)果判斷是否與校驗值相同,是則確認該靜態(tài) 回收標記頁為有效靜態(tài)回收標記頁,獲取該靜態(tài)回收標記頁中的靜態(tài)回收標記作為有效靜 態(tài)回收標記頁中的靜態(tài)回收標記;否則繼續(xù)校驗直至找到正確的有效靜態(tài)回收標記頁,如 果均不相同,則報錯;
[0250] 本實施例中,靜態(tài)回收標記為有效靜態(tài)回收標記頁的前四個字節(jié),優(yōu)選的,所述判 斷有效靜態(tài)回收標記頁中的靜態(tài)回收標記是否為預(yù)設(shè)值,具體為:判斷有效靜態(tài)回收標記 頁中的前四個字節(jié)的值是否為0xAA55AA55,如果是,則標識需要進行靜態(tài)回收,否則標識不 需要進行靜態(tài)回收;
[0251] 其中,執(zhí)行靜態(tài)回收的操作在實施例五中具體描述,在此不再贅述;
[0252] 步驟302 :判斷是否能夠從系統(tǒng)表緩存區(qū)中獲取到系統(tǒng)表,如果是,則執(zhí)行步驟 304,否則執(zhí)行步驟303 ;
[0253] 本實施例中,所述判斷是否能夠從系統(tǒng)表緩存區(qū)中獲取到系統(tǒng)表,具體為:判斷系 統(tǒng)表緩存區(qū)是否為空,如果是,則不能獲取到系統(tǒng)表,否則獲取到系統(tǒng)表;
[0254] 其中,存儲設(shè)備的系統(tǒng)區(qū)中只有兩頁系統(tǒng)表中存放有效數(shù)據(jù),其余系統(tǒng)表為空或 已為壞頁,優(yōu)選采用從兩邊向中間的方法進行系統(tǒng)表的存儲,例如,存儲設(shè)備的系統(tǒng)區(qū)中一 共有16頁系統(tǒng)表,其中,存放有效數(shù)據(jù)的為第一頁系統(tǒng)表和第十六頁系統(tǒng)表,如果在對第 一頁系統(tǒng)表擦寫時出現(xiàn)壞頁,則將有效數(shù)據(jù)寫入第二頁系統(tǒng)表中,如果在對第十六頁系統(tǒng) 表擦寫時出現(xiàn)壞頁,則將有效數(shù)據(jù)寫入第十五頁系統(tǒng)表中,依次類推;
[0255] 步驟303 :從存儲設(shè)備中獲取系統(tǒng)表,將存儲設(shè)備中系統(tǒng)表中的數(shù)據(jù)寫入系統(tǒng)表 緩存區(qū)中,執(zhí)行步驟304;
[0256] 參見圖5,本實施例中,從存儲設(shè)備中獲取系統(tǒng)表,將存儲設(shè)備中的系統(tǒng)表寫入系 統(tǒng)表緩存區(qū)中,具體操作為 :
[0257] 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表;
[0258] 優(yōu)選的,第四預(yù)設(shè)值為Oxff ;預(yù)先設(shè)置系統(tǒng)區(qū)中最中間的一頁為全ff頁且不可修 改,例如,本實施例中,系統(tǒng)區(qū)中共16頁系統(tǒng)表,則將第8頁系統(tǒng)表設(shè)置為全ff不可修改狀 態(tài);
[0259] 步驟a2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表;
[0260] 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗;
[0261] 如果均通過校驗,則執(zhí)行步驟a4 ;
[0262] 如果只有第一有效系統(tǒng)表通過校驗,則將所述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩 存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索引,執(zhí)行步驟304 ;
[0263] 如果只有第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中, 將第一有效系統(tǒng)表的頁號記為更新索引,執(zhí)行步驟304 ;
[0264] 如果均未通過校驗,則報錯,結(jié)束;
[0265] 其中,所述判斷第一有效系統(tǒng)表和第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通過校驗, 具體為:
[0266] 獲取所述第一有效系統(tǒng)表中的第一有效數(shù)據(jù)和第一校驗碼,根據(jù)所述第一有效數(shù) 據(jù)進行校驗計算,判斷校驗結(jié)果與所述第一校驗碼是否相同,如果是,則第一有效系統(tǒng)表通 過校驗,否則第一有效系統(tǒng)表未通過校驗;
[0267] 同時,獲取所述第二有效系統(tǒng)表中的第二有效數(shù)據(jù)和第二校驗碼,根據(jù)所述第二 有效數(shù)據(jù)進行校驗計算,判斷校驗結(jié)果與所述第二校驗碼是否相同,如果是,則第二有效系 統(tǒng)表通過校驗,否則第二有效系統(tǒng)表未通過校驗;
[0268] 步驟a4 :獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記;
[0269] 如果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所 述系統(tǒng)表緩存區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,執(zhí)行步驟 304 ;
[0270] 如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀 入所述系統(tǒng)表緩存區(qū)中,將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,執(zhí)行 步驟304 ;
[0271] 如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng) 表讀入所述系統(tǒng)表緩存區(qū)中,將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引, 執(zhí)行步驟304。
[0272] 優(yōu)選的,第一預(yù)設(shè)值為0x5555,第二預(yù)設(shè)值為0x55AA,第三預(yù)設(shè)值為0xAA55 ;
[0273] 進一步的,如果存儲設(shè)備從未進行過數(shù)據(jù)擦寫操作,則獲取到的有效系統(tǒng)表中的 數(shù)據(jù)全為ff,則將系統(tǒng)表緩存區(qū)中的數(shù)據(jù)直接置為全ff ;
[0274] 步驟304 :根據(jù)所述待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號;
[0275] 例如,本實施例中,所述待寫數(shù)據(jù)為0x33,待寫數(shù)據(jù)的邏輯地址為0x9D04 ;根據(jù)待 寫數(shù)據(jù)的邏輯地址計算邏輯頁號,具體為:將待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁長,得到的商 為邏輯頁號,本實施例得到的邏輯頁號為0x9D ;
[0276] 步驟305 :根據(jù)所述邏輯頁號,獲知與所述邏輯頁號對應(yīng)的地址映射頁的物理頁 號和在地址映射頁的頁內(nèi)偏移;
[0277] 本實施例中,每張地址映射頁可以存儲用戶區(qū)中連續(xù)的128個用戶物理地址,因 此,根據(jù)所述邏輯頁號,獲知所述邏輯頁號在地址映射頁中的頁號和在地址映射頁的頁內(nèi) 偏移,具體為:將所述邏輯頁號除以128,得到的商為與所述邏輯頁號對應(yīng)的地址映射頁的 物理頁號,余數(shù)為邏輯頁號在地址映射頁中的頁內(nèi)偏移;
[0278] 例如,本實施例中,邏輯頁號為0x9D,除以128,得到的商為1,余數(shù)為29,即地址映 射頁的物理頁號為1,在地址映射頁的頁內(nèi)偏移為29 ;
[0279] 步驟306 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中一個未用比特位,作為第一比特位,將所述第一比特位置為已用比特位,將所述第一 比特位對應(yīng)的存儲設(shè)備的區(qū)域作為新用戶數(shù)據(jù)頁;
[0280] 例如,本實施例中,系統(tǒng)表緩存區(qū)中的數(shù)據(jù)為:
[0281] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0282] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0283] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0284] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0285] ......
[0286] 其中,從第57字節(jié)往后的196字節(jié)均為循環(huán)位圖,循環(huán)位圖的每一位按順序?qū)?yīng) 存儲設(shè)備中用戶區(qū)的每一頁,獲取循環(huán)位圖的第一個字節(jié)ff,即11111111,將最高位的1作 為第一比特位,將第一比特位置為0,即01111111,則循環(huán)位圖的第一個字節(jié)轉(zhuǎn)為7f ;第一 比特位對應(yīng)的新用戶數(shù)據(jù)頁的物理頁號為0x0000 ;
[0287] 本實施例中,通過管理循環(huán)位圖,能夠?qū)崿F(xiàn)在出現(xiàn)壞頁時存儲設(shè)備仍能正常工作, 并能夠?qū)崿F(xiàn)防掉電;
[0288] 步驟307 :根據(jù)地址映射頁的邏輯頁號和在地址映射頁的頁內(nèi)偏移,判斷是否能 夠從地址映射頁中獲取到第一物理頁號,如果是,則執(zhí)行步驟308,否則將用戶數(shù)據(jù)緩存區(qū) 中的數(shù)據(jù)清空,執(zhí)行步驟313 ;
[0289] 其中,所述根據(jù)地址映射頁的邏輯頁號和在地址映射頁的頁內(nèi)偏移,判斷是否能 夠從地址映射頁中獲取到第一物理頁號,具體為:根據(jù)地址映射頁的邏輯頁號,查找系統(tǒng)表 的地址映射索引,將邏輯頁號乘以2得到在地址映射索引的偏移,讀取兩個字節(jié)的數(shù)據(jù),作 為地址映射頁的物理頁號,然后根據(jù)地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏移, 從地址映射頁中獲取數(shù)據(jù),判斷獲取到的數(shù)據(jù)是否為OxfTfT,如果是,則未找到第一物理頁 號,否則找到第一物理頁號;
[0290] 例如,所述地址映射頁為:
[0291] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0292] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0293] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0294] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0295] ......
[0296] 步驟308 :將第一物理頁號轉(zhuǎn)化為第一物理地址,并判斷所述第一物理地址是否 在用戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟313,否則執(zhí)行步驟309 ;
[0297] 步驟309 :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟312, 否則執(zhí)行步驟310;
[0298] 其中,判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,具體為:判斷用戶數(shù)據(jù)緩存區(qū) 中的空閑標識是否置位,如果是,則存在空閑緩存頁,否則不存在空閑緩存頁,其中用戶數(shù) 據(jù)緩存區(qū)中可以包含一個或多個用戶數(shù)據(jù)緩存頁,本實施例以一頁為例來說明;
[0299] 步驟310 :將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,將用戶數(shù)據(jù)緩 存區(qū)置為空閑;
[0300] 具體為:獲取用戶數(shù)據(jù)緩存區(qū)中保存的物理地址,根據(jù)該物理地址將用戶數(shù)據(jù)緩 存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備中與該物理地址對應(yīng)的數(shù)據(jù)頁中;
[0301] 其中,將用戶數(shù)據(jù)緩存區(qū)置為空閑,具體為:將用戶數(shù)據(jù)緩存區(qū)中的空閑標識置 位;
[0302] 步驟311 :判斷用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟306,否則執(zhí)行步驟312 ;
[0303] 其中,判斷是否出現(xiàn)壞頁,具體為:
[0304] 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0305] 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ;
[0306] 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù) 緩存區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2;
[0307] 步驟312 :將第一物理頁號對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入用戶數(shù)據(jù)緩存區(qū)中;
[0308] 步驟313 :根據(jù)待寫數(shù)據(jù)及待寫數(shù)據(jù)的長度,更新用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù);
[0309] 步驟314 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中一個未用比特位,作為第二比特位,將所述第二比特位置為已用比特位,將所述第二 比特位對應(yīng)的存儲設(shè)備的區(qū)域作為新地址映射頁;
[0310] 步驟315 :判斷是否能夠從所述系統(tǒng)表緩存區(qū)中獲取到與所述地址映射頁的物理 頁號對應(yīng)的第二物理頁號,如果是,則執(zhí)行步驟316,否則將所述地址映射緩存區(qū)中的數(shù)據(jù) 清空,執(zhí)行步驟321 ;
[0311] 其中,判斷是否能夠從所述系統(tǒng)表緩存區(qū)中獲取到與所述地址映射頁的物理頁號 對應(yīng)的第二物理頁號,具體為:判斷從系統(tǒng)表緩存區(qū)中獲取到與地址映射頁的物理頁號對 應(yīng)的數(shù)據(jù)是否為第四預(yù)設(shè)值OxfTfT,如果是,則不能獲取對應(yīng)的第二物理地址,否則能夠獲 取對應(yīng)的第二物理地址;
[0312] 其中,將所述地址映射緩存區(qū)中的數(shù)據(jù)清空,具體為:將所述地址映射緩存區(qū)中的 數(shù)據(jù)置為全Οχ-- ;
[0313] 步驟316 :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,并判斷所述第二物理地址 是否在地址映射緩存區(qū)中,如果是,則執(zhí)行步驟321,否則執(zhí)行步驟317 ;
[0314] 步驟317 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟320, 否則執(zhí)行步驟318;
[0315] 其中,判斷地址映射表緩存區(qū)中是否存在空閑緩存頁,具體為:判斷地址映射表緩 存區(qū)中的空閑標識是否置位,如果是,則存在空閑緩存頁,否則不存在空閑緩存頁;
[0316] 步驟318 :將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,將地址映射緩 存區(qū)置為空閑;
[0317] 具體為:獲取地址映射緩存區(qū)中保存的物理地址,根據(jù)該物理地址將地址映射緩 存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備中與該物理地址對應(yīng)的數(shù)據(jù)頁中;
[0318] 其中,所述將地址映射緩存區(qū)置為空閑,具體為:將地址映射緩存區(qū)中的空閑標識 置位;
[0319] 步驟319 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟314,否則執(zhí)行步驟320 ;
[0320] 其中,判斷是否出現(xiàn)壞頁,具體為:
[0321] 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0322] 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ;
[0323] 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址 映射緩存區(qū)中的數(shù)據(jù)寫入的存儲設(shè)備的相應(yīng)位置為壞頁,否則返回步驟bb2 ;
[0324] 其中,優(yōu)選的,預(yù)設(shè)次數(shù)為3次;
[0325] 步驟320 :將新地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中;
[0326] 例如,將地址映射頁的物理頁號為0x0001對應(yīng)的頁中的數(shù)據(jù)寫入地址映射表緩 存區(qū)中;
[0327] 步驟321 :將所述新用戶數(shù)據(jù)頁的物理頁號寫入地址映射緩存區(qū)中,并將新地址 映射頁的物理頁號寫入系統(tǒng)表緩存區(qū)中;
[0328] 例如,本實施例中,將用戶數(shù)據(jù)頁的物理頁號0x0000寫入地址映射緩存區(qū)中,將 地址映射頁的物理頁號0x0001寫入系統(tǒng)表緩存區(qū)中;
[0329] 其中,寫入后的地址映射緩存區(qū)為:
[0330] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0331] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0332] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0333] ff ff ff ff ff ff ff ff ff ff 00 00 ff ff ff ff
[0334] ......
[0335] 與入后的系統(tǒng)表緩存區(qū)為:
[0336] ff ff 00 01 ff ff ff ff ff ff ff ff ff ff ff ff
[0337] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0338] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0339] 00 02 05 e7 00 00 00 00 3f ff ff ff ff ff ff ff
[0340] ......
[0341] 其中,因循環(huán)位圖中的第0位和第1位置為0,第2位為1,故將動態(tài)指針置為00 02,05 e7為用戶數(shù)據(jù)區(qū)的未用空間,因未對存儲設(shè)備進行擦除操作,故將擦除總數(shù)置為00 00 00 00, 3f......為循環(huán)位圖;
[0342] 步驟322 :根據(jù)所述新用戶數(shù)據(jù)頁的物理頁號和新地址映射頁的物理頁號,計算 對應(yīng)的擦除計數(shù)頁;
[0343] 本實施例中,所述根據(jù)所述新用戶數(shù)據(jù)頁號和地址映射表頁號,計算對應(yīng)的擦除 計數(shù)頁,具體為:
[0344] 步驟dl :將所述新用戶數(shù)據(jù)頁的物理頁號除以預(yù)設(shè)頁長,得到第一商值;
[0345] 步驟d2 :將所述新地址映射頁的物理頁號除以預(yù)設(shè)頁長,得到第二商值;
[0346] 步驟d3 :判斷所述第一商值與所述第二商值是否相同,如果是,則獲取與所述第 一商值對應(yīng)的頁作為擦除計數(shù)頁,否則分別獲取與所述第一商值對應(yīng)的擦除計數(shù)頁和與所 述第二商值對應(yīng)的擦除計數(shù)頁,將獲取到的頁作為擦除計數(shù)頁;
[0347] 本實施例中,當計算得到的第一商值與第二商值不相同時,則分別獲取與第一商 值和第二商值對應(yīng)的兩頁,對這兩頁的具體操作相同,因此將第一商值對應(yīng)的頁和第二商 值對應(yīng)的頁均作為擦除計數(shù)頁;以下各步驟對擦除計數(shù)頁的操作,如果是在第一商值和第 二商值不相同的情況下,則所指擦除計數(shù)頁均為對兩頁進行操作;
[0348] 步驟323 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特位,將所述第三 比特位對應(yīng)的存儲設(shè)備的區(qū)域作為新擦除計數(shù)頁;
[0349] 本實施例中,獲取循環(huán)位圖的第一個字節(jié)3f,即00111111,將第三位1作為第三比 特位,將第三比特位置為〇,即00011111,則循環(huán)位圖的第一個字節(jié)轉(zhuǎn)為If,第三比特位對 應(yīng)的存儲設(shè)備為頁號是0x0002的頁,將頁號為0x0002的頁作為新擦除計數(shù)頁;
[0350] 步驟324 :判斷從所述系統(tǒng)表緩存區(qū)中的系統(tǒng)表中是否能夠獲取到與所述擦除計 數(shù)頁的頁號對應(yīng)的第三物理頁號,如果是,則執(zhí)行步驟325,否則將所述擦除計數(shù)緩存區(qū)中 的數(shù)據(jù)清空,執(zhí)行步驟330;
[0351] 其中,判斷是否能夠從系統(tǒng)表緩存區(qū)中讀出擦除計數(shù)頁對應(yīng)的第三物理頁號,具 體為:判斷從系統(tǒng)表緩存區(qū)中的擦除計數(shù)索引中獲取到與擦除計數(shù)頁的頁號對應(yīng)的數(shù)據(jù)是 否OxfTfT,如果是,則未找到第三物理頁號,否則將該數(shù)據(jù)作為第三物理頁號;
[0352] 步驟325 :將第三物理頁號轉(zhuǎn)化為第三物理地址,判斷第三物理地址是否在擦除 計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟330,否則執(zhí)行步驟326 ;
[0353] 其中,所述將第三物理頁號轉(zhuǎn)化為第三物理地址,具體為:將第三物理頁號乘以預(yù) 設(shè)頁長的結(jié)果作為第三物理地址;
[0354] 步驟326 :判斷擦除計數(shù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟329, 否則執(zhí)行步驟327 ;
[0355] 其中,判斷擦除計數(shù)緩存區(qū)中是否存在空閑緩存頁,具體為:判斷擦除計數(shù)緩存區(qū) 中的空閑標識是否置位,如果是,則存在空閑緩存頁,否則不存在空閑緩存頁;
[0356] 步驟327 :將擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,將擦除計數(shù)緩 存區(qū)置為空閑;
[0357] 具體為:獲取擦除計數(shù)緩存區(qū)中保存的物理地址,根據(jù)該物理地址將擦除計數(shù)緩 存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備中與該物理地址對應(yīng)的數(shù)據(jù)頁中;
[0358] 其中,所述將擦除計數(shù)緩存區(qū)置為空閑,具體為:將擦除計數(shù)緩存區(qū)中的空閑標識 置位;
[0359] 步驟328 :判斷擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟323,否則執(zhí)行步驟329 ;
[0360] 其中,判斷是否出現(xiàn)壞頁,具體為:
[0361] 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0362] 步驟cc2 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ;
[0363] 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除 計數(shù)緩存區(qū)中的數(shù)據(jù)寫入的存儲設(shè)備的相應(yīng)位置為壞頁,否則返回步驟cc2 ;
[0364] 步驟329 :將新擦除計數(shù)頁中的數(shù)據(jù)寫入擦除計數(shù)緩存區(qū)中;
[0365] 例如,將頁號為0x0002的新擦除計數(shù)頁中的數(shù)據(jù)讀入擦除計數(shù)緩存區(qū)中;
[0366] 步驟330 :從所述擦除計數(shù)緩存區(qū)中查找與所述新用戶數(shù)據(jù)頁和所述新地址映射 頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除 次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表;
[0367] 本實施例中,所述更新對應(yīng)的擦除次數(shù),具體為:將擦除計數(shù)緩存區(qū)中,與新用戶 數(shù)據(jù)頁和新地址映射頁對應(yīng)的擦除次數(shù)均加0x01 ;
[0368] 例如,本實施例中,更新后的擦除計數(shù)緩存區(qū)中的數(shù)據(jù)為:
[0369] 01 01 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0370] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0371] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0372] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0373] ......
[0374] 進一步的,所述根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新所述系統(tǒng) 表緩存區(qū)中的所述系統(tǒng)表,具體為:根據(jù)所述更新后的擦除次數(shù)更新所述系統(tǒng)表緩存區(qū)中 的所述系統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁號寫入所述系統(tǒng)表緩存區(qū)中的所 述系統(tǒng)表的擦除計數(shù)索引中:
[0375] 更新后的系統(tǒng)表緩存區(qū)為:
[0376] ff ff 00 01 ff ff ff ff ff ff ff ff ff ff ff ff
[0377] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0378] 00 02 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0379] 00 03 05 e7 00 00 00 02 If ff ff ff ff ff ff ff
[0380] ......
[0381] 步驟331 :判斷擦除計數(shù)頁中是否存在大于第六預(yù)設(shè)值的擦除次數(shù),如果是,則執(zhí) 行步驟333,否則執(zhí)行步驟332 ;
[0382] 優(yōu)選的,第六預(yù)設(shè)值為250 ;
[0383] 步驟332 :根據(jù)擦除計數(shù)頁中的擦除次數(shù)和系統(tǒng)表緩存區(qū)中的擦除總數(shù),計算平 均擦除次數(shù),判斷平均擦除次數(shù)是否大于第七預(yù)設(shè)值,如果是,則執(zhí)行步驟333,否則執(zhí)行步 驟 334 ;
[0384] 優(yōu)選的,第七預(yù)設(shè)值為200 ;
[0385] 其中,所述根據(jù)擦除計數(shù)頁中的擦除次數(shù)和系統(tǒng)表緩存區(qū)中的擦除總數(shù),計算平 均擦除次數(shù),具體為:獲取擦除計數(shù)頁中的所有擦除次數(shù),將所有擦除次數(shù)相加,得到總擦 除次數(shù),從系統(tǒng)表緩存區(qū)中獲取擦除總數(shù),將總擦除次數(shù)除以擦除總數(shù),得到平均擦除次 數(shù);
[0386] 步驟333 :將有效靜態(tài)回收標記頁中的靜態(tài)回收標記置為預(yù)設(shè)值;
[0387] 具體的,將靜態(tài)回收標記頁中的靜態(tài)回收標記即前四個字節(jié)設(shè)置為0xaa55aa55, 標識需要進行靜態(tài)回收;
[0388] 步驟334:根據(jù)第一物理地址、第二物理地址和第三物理地址,將用戶數(shù)據(jù)緩存 區(qū)、地址映射緩存區(qū)、擦除計數(shù)緩存區(qū)和系統(tǒng)表緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位 置;
[0389] 本實施例中,優(yōu)選的,按照用戶數(shù)據(jù)緩存區(qū)、地址映射緩存區(qū)、擦除計數(shù)緩存區(qū)和 系統(tǒng)表緩存區(qū)的順序?qū)⑵渲械臄?shù)據(jù)寫入存儲設(shè)備中;
[0390] 本步驟中,先將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的用戶區(qū)中第一物理地址 為0x0000的位置,然后將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的用戶區(qū)中第二物理地 址為0x0001的位置,再將擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的用戶區(qū)中第三物理地 址為0x0002的位置,最后將系統(tǒng)表緩存區(qū)寫入存儲設(shè)備的系統(tǒng)區(qū)中。
[0391] 其中,將系統(tǒng)表緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,具體為:將所述系統(tǒng)表 緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表中,更新所述更新索引對應(yīng)的 有效系統(tǒng)表中的新舊標記;
[0392] 所述將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表 中,還包括:
[0393] 判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表時 是否出現(xiàn)壞頁,如果是,則獲取與所述更新索引對應(yīng)的有效系統(tǒng)表相鄰的非壞頁的系統(tǒng)表, 將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞頁的系統(tǒng)表中;
[0394] 例如,本實施例中,系統(tǒng)區(qū)包括16頁系統(tǒng)表,如果當前有效系統(tǒng)表為第1頁和第16 頁,則如果更新索引對應(yīng)的有效系統(tǒng)表為第1頁,寫入時發(fā)現(xiàn)為壞頁時,將相鄰的第2頁作 為新的系統(tǒng)表,將數(shù)據(jù)寫入第2頁系統(tǒng)表中;如果更新索引對應(yīng)的有效系統(tǒng)表為第16頁,寫 入時發(fā)現(xiàn)為壞頁時,將相鄰的第15頁作為新的系統(tǒng)表,將數(shù)據(jù)寫入第15頁系統(tǒng)表中,依次 類推;
[0395] 更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記,具體為:判斷所述更新索引 對應(yīng)的有效系統(tǒng)表中的新舊標記,如果是所述第一預(yù)設(shè)值,則將該新舊標記更新為所述第 三預(yù)設(shè)值,如果是所述第二預(yù)設(shè)值,則將該新舊標記更新為所述第一預(yù)設(shè)值,如果是所述第 三預(yù)設(shè)值,則將該新舊標記更新為所述第二預(yù)設(shè)值。
[0396] 采用本發(fā)明技術(shù)方案,通過系統(tǒng)表、地址映射頁、用戶數(shù)據(jù)頁的兩級映射關(guān)系進行 數(shù)據(jù)的讀寫,通過管理循環(huán)位圖,能夠?qū)崿F(xiàn)磨損平衡,通過采用緩存機制,減少對存儲設(shè)備 的擦寫次數(shù),延長了存儲設(shè)備的使用壽命。
[0397] 實施例四
[0398] 本發(fā)明實施例四提供了一種對存儲設(shè)備進行數(shù)據(jù)讀取的方法,如圖6所示,本實 施例四中的存儲設(shè)備采用實施例三提供的方法進行數(shù)據(jù)寫入;所述方法包括:調(diào)用讀取函 數(shù),向所述讀取函數(shù)中傳入讀取地址(該地址為邏輯地址)和讀取長度,所述讀取函數(shù)接收 到傳入的讀取地址和讀取長度后執(zhí)行以下操作:
[0399] 步驟401 :從存儲設(shè)備中獲取系統(tǒng)表,將系統(tǒng)表讀入系統(tǒng)表緩存區(qū)中;
[0400] 本實施例中,所述從存儲設(shè)備中猶取系統(tǒng)表,具體為:
[0401] 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表;
[0402] 步驟h2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表; [0403] 步驟h3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟402 ;如果只有所述第二有效系統(tǒng) 表通過校驗,則將所述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟402 ;如果均未 通過校驗,則報錯,結(jié)束;
[0404] 步驟h4:分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如 果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩 存區(qū)中,執(zhí)行步驟402 ;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的 有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟402;如果是所述第三預(yù)設(shè)值和所述第一 預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟402 ;
[0405] 優(yōu)選的,第一預(yù)設(shè)值為0x5555,第二預(yù)設(shè)值為0x55AA,第三預(yù)設(shè)值為0xAA55 ;
[0406] 本實施例中,獲取到的系統(tǒng)表為:
[0407] ff ff 00 01 ff ff ff ff ff ff ff ff ff ff ff ff
[0408] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0409] 00 02 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0410] 00 03 05 e7 00 00 00 02 If ff ff ff ff ff ff ff
[0411] ......
[0412] 步驟402 :判斷系統(tǒng)表是否為空,如果是,則執(zhí)行步驟413,否則執(zhí)行步驟403 ;
[0413] 本實施例中,如果系統(tǒng)表為空,則說明存儲設(shè)備未進行數(shù)據(jù)讀寫,即存儲設(shè)備中的 數(shù)據(jù)全為OxfT ;
[0414] 步驟403 :根據(jù)讀取地址計算邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁 的物理頁號和所述邏輯頁號在地址映射頁的頁內(nèi)偏移;
[0415] 其中,所述根據(jù)讀取地址計算邏輯頁號,具體為:將所述讀取地址除以預(yù)設(shè)頁長, 將得到的商作為邏輯頁號;
[0416] 本實施例中,每張地址映射頁可以存儲用戶區(qū)中連續(xù)的128個物理頁號,因此,根 據(jù)讀取地址計算邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號和在地址映 射頁的頁內(nèi)偏移,具體為:將所述邏輯頁號除以128,根據(jù)得到的商從系統(tǒng)表中讀取邏輯頁 號對應(yīng)的地址映射頁的物理頁號,得到的余數(shù)為所述邏輯頁號在所述地址映射頁的頁內(nèi)偏 移其中,頁內(nèi)偏移是以2字節(jié)頁號為單位的偏移;
[0417] 例如,本實施例中,讀取地址為0x9D04,除以256,得到的商為1,即邏輯頁號為 0x9D,將邏輯頁號0x9D除以預(yù)設(shè)頁長的二分之一 128,得到的商為1,說明為第二張地址映 射頁(優(yōu)選〇標識第一張地址映射頁),即從系統(tǒng)表中的第三四字節(jié)獲取與第二張地址映射 頁對應(yīng)的數(shù)據(jù)即為邏輯頁號對應(yīng)的地址映射頁的物理頁號0x0001,得到的余數(shù)為在地址映 射頁中的頁內(nèi)偏移29 ;
[0418] 步驟404:判斷地址映射頁的物理頁號是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步驟 413,否則執(zhí)行步驟405 ;
[0419] 優(yōu)選的,第四預(yù)設(shè)值為Oxffff ;
[0420] 步驟405 :根據(jù)所述地址映射頁的物理頁號計算所述地址映射頁的物理地址;
[0421] 其中,所述根據(jù)所述地址映射頁的物理頁號計算所述地址映射頁的物理地址,具 體為:將所述地址映射頁的物理頁號乘以預(yù)設(shè)頁長的結(jié)果作為地址映射頁的物理地址;
[0422] 步驟406 :判斷從地址映射緩存區(qū)中是否能夠找到所述地址映射頁的物理地址, 如果是,則執(zhí)行步驟408,否則執(zhí)行步驟407 ;
[0423] 步驟407 :根據(jù)所述地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏移,從地址 映射頁中讀出用戶數(shù)據(jù)頁的物理頁號,執(zhí)行步驟409 ;
[0424] 步驟408 :根據(jù)所述地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏移,從地址 映射緩存區(qū)讀出用戶數(shù)據(jù)頁的物理頁號,執(zhí)行步驟409 ;
[0425] 例如,本實施例中,根據(jù)邏輯頁號對應(yīng)的地址映射頁的物理頁號0x0001得到的物 理地址,獲取到的地址映射頁中的數(shù)據(jù)為:
[0426] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0427] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0428] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0429] ff ff ff ff ff ff ff ff ff ff 00 00 ff ff ff ff
[0430] ......
[0431] 根據(jù)在地址映射頁中的頁內(nèi)偏移29,則從地址映射頁偏移58字節(jié)的位置開始獲 取兩個字節(jié)的數(shù)據(jù),即為用戶數(shù)據(jù)頁的物理頁號,即0x0000 ;
[0432] 步驟409 :判斷用戶數(shù)據(jù)頁的物理頁號是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步驟 413,否則執(zhí)行步驟410 ;
[0433] 步驟410 :根據(jù)用戶數(shù)據(jù)頁的物理頁號計算用戶數(shù)據(jù)頁的物理地址,判斷用戶數(shù) 據(jù)頁的物理地址是否在用戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟411,否則執(zhí)行步驟412 ;
[0434] 例如,本實施例中,將用戶數(shù)據(jù)頁的物理頁號0x0000乘以預(yù)設(shè)頁長256,得到的用 戶數(shù)據(jù)頁的物理地址為0x0000 ;
[0435] 步驟411 :根據(jù)所述讀取地址和所述讀取長度讀取用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),將 讀取到的數(shù)據(jù)返回,讀取結(jié)束;
[0436] 例如,本實施例中,用戶數(shù)據(jù)頁為:
[0437] ff ff ff ff 33 ff ff ff ff ff ff ff ff ff ff ff
[0438] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0439] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0440] ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
[0441] ......
[0442] 則根據(jù)讀取地址可知需讀取的數(shù)據(jù)的偏移為0x04,讀取長度為0x01,讀取到的數(shù) 據(jù)為0x33 ;
[0443] 步驟412 :根據(jù)讀取地址和讀取長度讀取存儲設(shè)備中用戶數(shù)據(jù)頁中的數(shù)據(jù),將讀 取到的數(shù)據(jù)返回,讀取結(jié)束;
[0444] 步驟413 :根據(jù)所述讀取長度,返回相應(yīng)長度的OxfT,讀取結(jié)束;
[0445] 例如,讀取長度為5字節(jié),則返回的數(shù)據(jù)為Οχ -- -- -- -- --。
[0446] 實施例五
[0447] 本發(fā)明實施例五提供了靜態(tài)回收的具體操作,如圖7和圖8所示,具體包括:
[0448] 步驟501 :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中;
[0449] 本實施例中,步驟501與實施例4中的步驟401相同,在此不再贅述;
[0450] 步驟502 :獲取系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中 的第一個地址映射頁作為當前地址映射頁;
[0451] 步驟503 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則執(zhí)行 步驟504,否則執(zhí)行步驟521 ;
[0452] 優(yōu)選的,所述第六預(yù)設(shè)值為250 ;
[0453] 本實施例中,如果當前地址映射頁的擦除次數(shù)達到第六預(yù)設(shè)值時,說明對該地址 映射頁進行擦寫的次數(shù)太頻繁,需要進行靜態(tài)回收,實現(xiàn)磨損平衡;
[0454] 步驟504 :根據(jù)當前地址映射頁的物理頁號計算當前地址映射頁的第四物理地 址;
[0455] 其中,根據(jù)當前地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,具 體為:將當前地址映射頁的物理頁號乘以預(yù)設(shè)頁長,得到的值即為當前地址映射頁的第四 物理地址;
[0456] 步驟505 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第 四比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁;
[0457] 步驟506 :判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第四比特位置為未用比特位,執(zhí)行步驟505,否則執(zhí)行步驟507 ;
[0458] 本實施例中,當待回收地址映射頁的擦除次數(shù)小于第六預(yù)設(shè)值250時,則該待回 收地址映射頁不需要進行靜態(tài)回收,則將第四比特位置為未用比特位;
[0459] 步驟507 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟510, 否則執(zhí)行步驟508 ;
[0460] 步驟508 :將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射 緩存區(qū)置為空閑;
[0461] 其中,將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,具體為:獲取地址映 射緩存區(qū)中保存的頁號,將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備中該頁號對應(yīng)的位置;
[0462] 步驟509 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟505,否則執(zhí)行步驟510 ;
[0463] 其中,判斷是否出現(xiàn)壞頁,具體為:
[0464] 步驟ddl :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0465] 步驟dd2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟dd3 ;
[0466] 步驟dd3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址映射 緩存區(qū)中的數(shù)據(jù)寫入的存儲設(shè)備的相應(yīng)位置為壞頁,否則返回步驟dd2 ;
[0467] 步驟510 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射 頁修改所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號;
[0468] 本實施例中,所述根據(jù)新地址映射頁修改所述系統(tǒng)表緩存區(qū)中當前地址映射頁對 應(yīng)的頁號,具體為:從系統(tǒng)表緩存區(qū)中系統(tǒng)表的地址映射索引中查找與當前地址映射頁對 應(yīng)的頁號,將該頁號改為新地址映射頁的頁號;
[0469] 步驟511 :獲取當前地址映射頁中所有用戶數(shù)據(jù)頁的物理頁號,將第一個用戶數(shù) 據(jù)頁作為當前用戶數(shù)據(jù)頁;
[0470] 步驟512 :判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則執(zhí)行 步驟513,否則執(zhí)行步驟520 ;
[0471] 本實施例中,如果當前用戶數(shù)據(jù)頁的擦除次數(shù)達到第六預(yù)設(shè)值時,說明對該用戶 數(shù)據(jù)頁進行擦寫的次數(shù)太頻繁,需要進行靜態(tài)回收,實現(xiàn)磨損平衡;
[0472] 步驟513 :根據(jù)當前用戶數(shù)據(jù)頁的物理頁號計算當前用戶數(shù)據(jù)頁的第五物理地 址;
[0473] 其中,根據(jù)當前用戶數(shù)據(jù)頁的物理頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,具 體為:將當前用戶數(shù)據(jù)頁的物理頁號乘以預(yù)設(shè)頁長,得到的值即為當前用戶數(shù)據(jù)頁的第五 物理地址;
[0474] 步驟514:從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán) 位圖中的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第 五比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁;
[0475] 步驟515 :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第五比特位置為未用比特位,執(zhí)行步驟514,否則執(zhí)行步驟516 ;
[0476] 本實施例中,當待回收用戶數(shù)據(jù)頁的擦除次數(shù)小于第六預(yù)設(shè)值250時,則該待回 收用戶數(shù)據(jù)頁不需要進行靜態(tài)回收,則將第五比特位置為未用比特位;
[0477] 步驟516 :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟519, 否則執(zhí)行步驟517;
[0478] 步驟517 :將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存 區(qū)置為空閑;
[0479] 其中,將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,具體為:獲取用戶數(shù) 據(jù)緩存區(qū)中保存的頁號,將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備中該頁號對應(yīng)的位置;
[0480] 步驟518 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出 現(xiàn)壞頁,如果是,則執(zhí)行步驟514,否則執(zhí)行步驟519 ;
[0481] 其中,判斷是否出現(xiàn)壞頁,具體為:
[0482] 步驟eel :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0483] 步驟ee2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟ee3 ;
[0484] 步驟ee3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址映射 緩存區(qū)中的數(shù)據(jù)寫入的存儲設(shè)備的相應(yīng)位置為壞頁,否則返回步驟ee2 ;
[0485] 步驟519 :將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶 數(shù)據(jù)頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號;
[0486] 本實施例中,所述根據(jù)新用戶數(shù)據(jù)頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng) 的頁號,具體為:從當前地址映射頁中查找與當前用戶數(shù)據(jù)頁對應(yīng)的頁號,將該頁號改為新 用戶數(shù)據(jù)頁的物理頁號;
[0487] 步驟520 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行 步驟521,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟 512 ;
[0488] 步驟521 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則 將靜態(tài)回收標識置為除預(yù)設(shè)值外的任意值,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中, 回收成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行 步驟503 ;
[0489] 其中,將靜態(tài)回收標識置為除預(yù)設(shè)值外的任意值,具體為將靜態(tài)回收標記置為除 0xaa55aa55外的任意值,優(yōu)選的,將靜態(tài)回收標識置位Oxffffffff ;
[0490] 本實施例提供的靜態(tài)回收機制,對于某些頁的擦寫次數(shù)太高或者平均擦除次數(shù)太 高的情況,進行靜態(tài)回收能夠?qū)崿F(xiàn)將擦寫次數(shù)少的頁與擦寫次數(shù)多的頁進行相互搬移,實 現(xiàn)磨損平衡,進一步延長存儲設(shè)備的使用壽命。
[0491] 實施例六
[0492] 本發(fā)明實施例六提供了一種對存儲設(shè)備進行數(shù)據(jù)寫入的裝置,如圖9所示,包括: 調(diào)用模塊101、獲取模塊102、計算模塊103、選擇模塊104、判斷模塊105、更新模塊106、寫 入模塊107 ;各模塊之間的具體功能如下:
[0493] 調(diào)用模塊101 :用于調(diào)用寫入函數(shù),向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長 度和待寫數(shù)據(jù)的邏輯地址;
[0494] 獲取模塊102 :用于當所述調(diào)用模塊101向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù) 的長度和待寫數(shù)據(jù)的邏輯地址后,從所述存儲設(shè)備中獲取系統(tǒng)表;
[0495] 計算模塊103 :用于根據(jù)待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號;用 于根據(jù)所述邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映 射頁的頁內(nèi)偏移;
[0496] 選擇模塊104 :用于當所述計算模塊103計算得到與所述邏輯頁號對應(yīng)的地址映 射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移時,從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng) 表中的循環(huán)位圖,選擇所述循環(huán)位圖中的一個未用比特位,作為第一比特位,將所述第一比 特位置為已用比特位,將所述存儲設(shè)備中與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù) 頁;用于從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中一個 未用比特位,作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲設(shè)備中所述 第二比特位對應(yīng)數(shù)據(jù)頁作為新地址映射頁;
[0497] 判斷模塊105 :用于當所述計算模塊103計算得到所述地址映射頁的邏輯頁號和 在所述地址映射頁的頁內(nèi)偏移時,根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的 頁內(nèi)偏移,判斷是否能夠從所述地址映射頁中獲取到第一物理頁號;用于判斷是否能夠從 所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中獲取到與所述地址映射頁的物理頁號對應(yīng)的第二物理 頁號;
[0498] 更新模塊106 :用于當所述判斷模塊105判斷出能夠從所述地址映射頁中獲取 到第一物理頁號時,根據(jù)所述存儲設(shè)備中所述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及 所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁;用于當所述判斷模塊105判斷出不能夠從 所述地址映射頁中獲取到第一物理頁號時,將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述 待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù);用于當所述判斷模塊 105判斷出能夠獲取到與所述地址映射頁的物理頁號對應(yīng)的第二物理頁號時,根據(jù)所述存 儲設(shè)備中所述第二物理頁號對應(yīng)的數(shù)據(jù)更新所述新地址映射頁;
[0499] 寫入模塊107 :用于當所述獲取模塊102獲取到系統(tǒng)表時,將所述系統(tǒng)表寫入系統(tǒng) 表緩存區(qū)中;用于當所述判斷模塊105判斷出不能夠獲取到與所述地址映射頁的物理頁號 對應(yīng)的第二物理頁號時,將所述新地址映射頁中的數(shù)據(jù)清空;用于將所述新用戶數(shù)據(jù)頁的 頁號寫入所述新地址映射頁中;用于將所述新地址映射頁的物理頁號寫入所述系統(tǒng)表緩存 區(qū)的所述系統(tǒng)表中;用于獲取所述系統(tǒng)表的循環(huán)位圖中與所述地址映射頁對應(yīng)的比特位, 將該比特位置為未用比特位,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相 應(yīng)位置。
[0500] 其中,所述獲取模塊102,還用于從所述存儲設(shè)備中獲取有效靜態(tài)回收標記頁;
[0501] 所述判斷模塊105,還用于當所述獲取模塊102獲取到所述有效靜態(tài)回收標記頁 時,根據(jù)所述有效靜態(tài)回收標記頁中的靜態(tài)回收標記判斷是否需要進行靜態(tài)回收;
[0502] 所述裝置還包括,靜態(tài)回收模塊,用于執(zhí)行靜態(tài)回收操作。
[0503] 其中,所述獲取模塊102,具體用于執(zhí)行以下操作:
[0504] 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表;
[0505] 步驟a2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表;
[0506] 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟a4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索 弓丨;如果只有所述第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,將 第一有效系統(tǒng)表的頁號記為更新索引;如果均未通過校驗,則報錯,結(jié)束;
[0507] 步驟a4 :獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記, 如果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表 緩存區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第二預(yù) 設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將 所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第三預(yù)設(shè)值和所述第 一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將所述第三 預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引。
[0508] 進一步的,所述寫入模塊107,具體用于將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入 所述更新索引對應(yīng)的有效系統(tǒng)表中;
[0509] 所述更新模塊106,還用于更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記。
[0510] 更進一步的,所述判斷模塊105,還用于判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫 入所述更新索引對應(yīng)的有效系統(tǒng)表時是否出現(xiàn)壞頁;
[0511] 所述獲取模塊102,還用于當所述判斷模塊105判斷出所述系統(tǒng)表緩存區(qū)中的所 述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表出現(xiàn)壞頁時,獲取與所述更新索引對應(yīng)的有 效系統(tǒng)表相鄰的非壞頁的系統(tǒng)表,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞 頁的系統(tǒng)表中;
[0512] 所述更新模塊106,具體用于當所述判斷模塊105判斷出所述系統(tǒng)表緩存區(qū)中的 所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表未出現(xiàn)壞頁時,更新所述更新索引對應(yīng)的 有效系統(tǒng)表中的新舊標記。
[0513] 其中,所述判斷模塊105,還用于判斷所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標 記;
[0514] 所述更新模塊106,還用于當所述判斷模塊105判斷出所述更新索引對應(yīng)的有效 系統(tǒng)表中的新舊標記為第一預(yù)設(shè)值時,將所述新舊標記更新為所述第三預(yù)設(shè)值;還用于當 所述判斷模塊105判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記為第二預(yù)設(shè)值時, 將所述新舊標記更新為所述第一預(yù)設(shè)值;還用于當所述判斷模塊105判斷出所述更新索 引對應(yīng)的有效系統(tǒng)表中的新舊標記為第三預(yù)設(shè)值時,將所述新舊標記更新為所述第二預(yù)設(shè) 值。
[0515] 其中,所述計算模塊103,具體用于將所述待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁長,將 得到的商作為邏輯頁號。
[0516] 其中,所述計算模塊103,具體用于將所述邏輯頁號除以預(yù)設(shè)頁長的二分之一,將 得到的商作為所述邏輯頁號對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁 號在所述地址映射頁的頁內(nèi)偏移。
[0517] 其中,所述判斷模塊105,具體用于根據(jù)所述地址映射頁的邏輯頁號,查找所述系 統(tǒng)表中的地址映射索引,將所述地址映射頁的邏輯頁號乘以2得到在地址映射索引的偏 移,讀取兩個字節(jié)的數(shù)據(jù),作為所述地址映射頁的物理頁號,然后根據(jù)所述地址映射頁的物 理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中獲取數(shù)據(jù),判斷獲取到的數(shù) 據(jù)是否為Oxffff。
[0518] 其中,所述更新模塊106,具體用于執(zhí)行以下操作:
[0519] 步驟1 :將所述第一物理頁號轉(zhuǎn)換為第一物理地址,判斷所述第一物理地址是否 在用戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟2,否則執(zhí)行步驟3 ;
[0520] 步驟2 :根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中 的數(shù)據(jù),觸發(fā)選擇模塊104 ;
[0521] 步驟3 :將所述第一物理地址對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū) 中,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),觸發(fā)選 擇模塊104 ;
[0522] 所述寫入模塊107,還用于將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù) 頁中。
[0523] 其中,所述判斷模塊105,還用于判斷判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述 新用戶數(shù)據(jù)頁時是否出現(xiàn)壞頁;
[0524] 所述寫入模塊107,具體用于當所述判斷模塊105判斷出所述用戶數(shù)據(jù)緩存區(qū)中 的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁未出現(xiàn)壞頁時,將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新 用戶數(shù)據(jù)頁中。
[0525] 進一步的,所述判斷模塊105,具體用于執(zhí)行以下操作:
[0526] 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值;
[0527] 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ;
[0528] 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù) 緩存區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2。
[0529] 其中,所述更新模塊106,具體用于執(zhí)行以下操作:
[0530] 步驟bl :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,判斷所述第二物理地址是否 在地址映射緩存區(qū)中,如果是,則執(zhí)行步驟b3,否則執(zhí)行步驟b2 ;
[0531] 步驟b2 :將所述第二物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述地址映射緩存區(qū) 中,執(zhí)行步驟b3 ;
[0532] 步驟b3 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映 射頁中。
[0533] 進一步的,所述判斷模塊105,還用于判斷所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述 存儲設(shè)備中的所述新地址映射頁時是否出現(xiàn)壞頁;
[0534] 所述寫入模塊107,具體用于當所述判斷模塊105判斷出所述地址映射緩存區(qū)中 的數(shù)據(jù)寫入所述新地址映射頁未出現(xiàn)壞頁時,將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存 儲設(shè)備中的所述新地址映射頁中。
[0535] 更進一步的,所述寫入模塊107,具體用于執(zhí)行以下操作:
[0536] 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0537] 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ;
[0538] 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址 映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁為壞頁,否則返回步驟bb2。
[0539] 其中,所述計算模塊103,還用于根據(jù)所述新用戶數(shù)據(jù)頁的頁號和所述新地址映射 頁的物理頁號,計算對應(yīng)的擦除計數(shù)頁;
[0540] 所述選擇模塊104,還用于從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖, 選擇所述循環(huán)位圖中一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特 位,將所述存儲設(shè)備中所述第三比特位對應(yīng)的數(shù)據(jù)頁作為新擦除計數(shù)頁;
[0541] 所述判斷模塊105,還用于判斷從所述系統(tǒng)表中是否能夠獲取到與所述擦除計數(shù) 頁的頁號對應(yīng)的第三物理頁號;
[0542] 所述寫入模塊107,還用于當所述判斷模塊105判斷出從所述系統(tǒng)表中能夠獲取 到與所述擦除計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述第三物理頁號對應(yīng)的存儲設(shè)備 中的數(shù)據(jù)寫入所述新擦除計數(shù)頁中;
[0543] 所述更新模塊106,還用于當所述判斷模塊105判斷出從所述系統(tǒng)表中不能夠獲 取到與所述擦除計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述新擦除計數(shù)頁中的數(shù)據(jù)清 空;還用于從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng) 的擦除次數(shù),更新對應(yīng)的擦除次數(shù);還用于根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除 次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表。
[0544] 其中,所述寫入模塊107,具體用于執(zhí)行以下操作:
[0545] 步驟el :將所述第三物理頁號轉(zhuǎn)換為第三物理地址,判斷所述第三物理地址是否 在擦除計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟e3,否則執(zhí)行步驟e2 ;
[0546] 步驟e2 :將所述第三物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述擦除計數(shù)緩存區(qū) 中,執(zhí)行步驟e3 ;
[0547] 步驟e3 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計 數(shù)頁中。
[0548] 進一步的,所述判斷模塊105,還用于判斷所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述 存儲設(shè)備中的所述新擦除計數(shù)頁中時是否出現(xiàn)壞頁;
[0549] 所述寫入模塊107,具體用于當所述判斷模塊105判斷出所述擦除計數(shù)緩存區(qū)中 的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中未出現(xiàn)壞頁時,將所述擦除計數(shù)緩存區(qū) 中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中。
[0550] 其中,所述判斷模塊105,具體用于執(zhí)行以下操作:
[0551] 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值;
[0552] 步驟cc2 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該 相應(yīng)位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞 頁,否則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ;
[0553] 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除 計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁為壞頁,否則返回步驟cc2。
[0554] 其中,所述更新模塊106中,所述從所述新擦除計數(shù)頁中分別查找與所述新用戶 數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),具體用于將所述新擦 除計數(shù)頁中與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù)均加0x01。
[0555] 所述更新模塊106中,所述根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更 新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,具體用于根據(jù)所述更新后的擦除次數(shù)更新所述系統(tǒng) 表緩存區(qū)中的所述系統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁號寫入所述系統(tǒng)表緩 存區(qū)中的所述系統(tǒng)表中。
[0556] 所述判斷模塊105,還用于判斷所述新擦除計數(shù)頁中的擦除次數(shù)是否大于第一預(yù) 設(shè)值;還用于當所述計算模塊103計算得到平均擦除次數(shù)時,判斷所述平均擦除次數(shù)是否 大于第二預(yù)設(shè)值;
[0557] 所述獲取模塊102,還用于當所述判斷模塊105判斷出所述新擦除計數(shù)頁中的擦 除次數(shù)不大于第一預(yù)設(shè)值時或當所述設(shè)置模塊將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收 時,獲取所述系統(tǒng)表中的擦除總數(shù);
[0558] 所述計算模塊103,還用于當所述獲取模塊102獲取到所述系統(tǒng)表中的擦除總數(shù) 時,根據(jù)所述擦除總數(shù),計算得到平均擦除次數(shù);
[0559] 所述裝置還包括設(shè)置模塊,用于當所述判斷模塊105判斷出所述新擦除計數(shù)頁中 的擦除次數(shù)大于第一預(yù)設(shè)值時,將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收;用于當所述判 斷模塊105判斷出所述平均擦除次數(shù)大于第二預(yù)設(shè)值時,將靜態(tài)回收標記置為需要進行靜 態(tài)回收。
[0560] 所述靜態(tài)回收模塊,具體用于執(zhí)行以下操作:
[0561] 步驟gl :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,獲 取系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中的第一個地址映射頁作 為當前地址映射頁;
[0562] 步驟g2 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,執(zhí)行步驟g3,否則執(zhí)行 步驟gl6 ;
[0563] 步驟g3 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第四 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁;
[0564] 步驟g4:判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第四比特位置為未用比特位,執(zhí)行步驟g3,否則執(zhí)行步驟g5 ;
[0565] 步驟g5 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟g7,否 則將地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射緩存區(qū)置為空閑, 執(zhí)行步驟g6 ;
[0566] 步驟g6 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟g3,否則執(zhí)行步驟g7 ;
[0567] 步驟g7 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射頁 修改所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號,獲取當前地址映射頁中所有用戶數(shù) 據(jù)頁的頁號,將第一個用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁;
[0568] 步驟g8 :判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù) 當前用戶數(shù)據(jù)頁的頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,執(zhí)行步驟g9,否則執(zhí)行步驟 gl5 ;
[0569] 步驟g9 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位 圖中的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第五 比特位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁;
[0570] 步驟glO :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是, 則將第五比特位置為未用比特位,執(zhí)行步驟g9,否則執(zhí)行步驟gll ;
[0571] 步驟gll :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟gl4, 否則將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存區(qū)置為空閑,執(zhí) 行步驟gl2 ;
[0572] 步驟gl3 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出 現(xiàn)壞頁,如果是,則執(zhí)行步驟g9,否則執(zhí)行步驟gl4 ;
[0573] 步驟gl4:將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶 數(shù)據(jù)頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號;
[0574] 步驟gl5 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行 步驟gl6,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟 g8 ;
[0575] 步驟gl6 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則 將靜態(tài)回收標識置為不需要進行靜態(tài)回收,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中, 回收成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行 步驟g2。
[0576] 所述選擇模塊104,具體用于逐位查詢所述系統(tǒng)表緩存區(qū)中所述系統(tǒng)表中的循環(huán) 位圖。
[0577] 所述選擇模塊104,具體用于從所述系統(tǒng)表緩存區(qū)中獲取所述系統(tǒng)表中的動態(tài)控 制指令,根據(jù)所述動態(tài)控制指令獲取循環(huán)位圖中相應(yīng)的位置。
[0578] 實施例七
[0579] 本發(fā)明實施例七提供了一種對存儲設(shè)備進行數(shù)據(jù)讀取的裝置,如圖10所示,包 括:調(diào)用模塊201、獲取模塊202、判斷模塊203、計算模塊204、讀取模塊205 ;各模塊間的具 體功能為:
[0580] 調(diào)用模塊201 :用于調(diào)用讀取函數(shù),向所述讀取函數(shù)中傳入讀取地址和讀取長度;
[0581] 獲取模塊202 :用于當調(diào)用模塊201向所述讀取函數(shù)中傳入讀取地址和讀取長度 后,從所述存儲設(shè)備中猶取系統(tǒng)表;
[0582] 判斷模塊203 :用于當獲取模塊202從所述存儲設(shè)備中獲取到系統(tǒng)表時,判斷所述 系統(tǒng)表是否為空;用于當計算模塊204計算出地址映射頁的物理頁號時,判斷所述地址映 射頁的物理頁號是否為第四預(yù)設(shè)值;用于當計算模塊204計算出用戶數(shù)據(jù)頁的頁號時,判 斷所述用戶數(shù)據(jù)頁的頁號是否為所述第四預(yù)設(shè)值;
[0583] 計算模塊204 :用于當所述判斷模塊203判斷出所述系統(tǒng)表不為空時,根據(jù)所述讀 取地址計算邏輯頁號,用于計算與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號和所述邏輯 頁號在所述地址映射頁的頁內(nèi)偏移;
[0584] 讀取模塊205 :用于當所述判斷模塊203判斷出所述地址映射頁的物理頁號不為 第四預(yù)設(shè)值時,根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述 地址映射頁中讀出用戶數(shù)據(jù)頁的頁號;用于當所述判斷模塊203判斷出所述用戶數(shù)據(jù)頁的 頁號為所述第四預(yù)設(shè)值時,根據(jù)所述讀取長度,返回相應(yīng)長度的第五預(yù)設(shè)值;用于當所述判 斷模塊203判斷出所述用戶數(shù)據(jù)頁的頁號不為所述第三預(yù)設(shè)值時,根據(jù)所述讀取地址和所 述讀取長度,從所述用戶數(shù)據(jù)頁中讀取相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
[0585] 其中,所述獲取模塊202,具體用于執(zhí)行以下操作:
[0586] 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號減一對應(yīng)的頁作為第 一有效系統(tǒng)表;
[0587] 步驟h2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁 內(nèi)數(shù)據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號加一對應(yīng)的頁作為第 二有效系統(tǒng)表;
[0588] 步驟h3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通 過校驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所 述第一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果只有所述第二有效系統(tǒng)表通過校驗,則 將所述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果均未通過校驗,則報錯,結(jié)束;
[0589] 步驟h4:分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如 果是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩 存區(qū)中;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀 入所述系統(tǒng)表緩存區(qū)中;如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值 對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中。
[0590] 其中,所述計算模塊204,具體用于將所述讀取地址除以預(yù)設(shè)頁長,將得到的商作 為邏輯頁號;具體用于將所述邏輯頁號除以預(yù)設(shè)頁長,根據(jù)得到的商從所述系統(tǒng)表中獲取 與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁號在所述地 址映射頁的頁內(nèi)偏移。
[0591] 其中,所述裝置,還包括:第一轉(zhuǎn)換模塊,用于當所述判斷模塊203判斷出所述地 址映射頁的物理頁號不為第四預(yù)設(shè)值時,將所述地址映射頁的物理頁號轉(zhuǎn)換為所述地址映 射頁的物理地址;
[0592] 所述判斷模塊203,還用于當所述第一轉(zhuǎn)換模塊得到所述地址映射頁的物理地址 時,判斷從地址映射緩存區(qū)中是否能夠找到所述地址映射頁的物理地址;
[0593] 所述讀取模塊205 :具體用于當所述判斷模塊203判斷出從所述地址映射緩存區(qū) 中獲取到所述地址映射頁的物理地址時,根據(jù)所述地址映射頁的物理頁號和在地址映射 頁的頁內(nèi)偏移,從所述地址映射緩存區(qū)讀出用戶數(shù)據(jù)頁的頁號;具體用于當所述判斷模塊 203判斷出從所述地址映射緩存區(qū)中不能讀取所述地址映射頁的物理地址時,根據(jù)所述地 址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中讀出用戶數(shù)據(jù) 頁的頁號。
[0594] 其中,所述裝置,還包括:第二轉(zhuǎn)換模塊,用于當所述判斷模塊203判斷出所述用 戶數(shù)據(jù)頁的頁號不為第四預(yù)設(shè)值時,將所述用戶數(shù)據(jù)頁的頁號轉(zhuǎn)換為所述用戶數(shù)據(jù)頁的物 理地址;
[0595] 所述判斷模塊203,還用于當所述第二轉(zhuǎn)換模塊得到所述用戶數(shù)據(jù)頁的物理地址 時,判斷用戶數(shù)據(jù)緩存區(qū)中是否存在所述用戶數(shù)據(jù)頁的物理地址;
[0596] 所述讀取模塊205 :具體用于當所述判斷模塊203判斷出從所述用戶數(shù)據(jù)緩存區(qū) 中存在所述用戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù) 據(jù)緩存區(qū)中讀取相應(yīng)的數(shù)據(jù),將讀取到的數(shù)據(jù)返回;具體用于當所述判斷模塊203判斷出 所述用戶數(shù)據(jù)緩存區(qū)中不存在所述用戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀 取長度,從所述用戶數(shù)據(jù)頁中讀出相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
[0597] 以上所述,僅為本發(fā)明較佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此, 任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明公開的技術(shù)范圍內(nèi),可輕易想到的變化或替換, 都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍 為準。
【權(quán)利要求】
1. 一種對存儲設(shè)備進行數(shù)據(jù)寫入的方法,其特征在于,包括:調(diào)用寫入函數(shù),向所述寫 入函數(shù)中傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫數(shù)據(jù)的邏輯地址,所述寫入函數(shù)執(zhí)行以下 操作: 步驟S1 :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,根據(jù)所 述待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號,根據(jù)所述邏輯頁號,計算與所述邏 輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移; 步驟S2 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 一個未用比特位,作為第一比特位,將所述第一比特位置為已用比特位,將所述存儲設(shè)備中 與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù)頁; 步驟S3 :根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,判斷是否 能夠從所述地址映射頁中獲取到第一物理頁號,如果是,則根據(jù)所述存儲設(shè)備中與所述第 一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁,執(zhí) 行步驟S5,否則執(zhí)行步驟S4; 步驟S4 :將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長 度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù); 步驟S5 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 一個未用比特位,作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲設(shè)備中 與所述第二比特位對應(yīng)的數(shù)據(jù)頁作為新地址映射頁; 步驟S6 :判斷是否能夠從所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中獲取到與所述地址映射 頁的物理頁號對應(yīng)的第二物理頁號,如果是,則根據(jù)所述存儲設(shè)備中與所述第二物理頁號 對應(yīng)的數(shù)據(jù)更新所述新地址映射頁,執(zhí)行步驟S7,否則將所述新地址映射頁中的數(shù)據(jù)清空, 執(zhí)行步驟S7 ; 步驟S7 :將所述新用戶數(shù)據(jù)頁的物理頁號寫入所述新地址映射頁中,并將所述新地址 映射頁的物理頁號寫入所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表中,獲取所述系統(tǒng)表的循環(huán)位圖中 與所述地址映射頁對應(yīng)的比特位,將該比特位置為未用比特位; 步驟S8 :將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相應(yīng)位置,寫入結(jié) 束。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1之前,還包括:從所述存儲設(shè) 備中獲取有效靜態(tài)回收標記頁,根據(jù)所述有效靜態(tài)回收標記頁中的靜態(tài)回收標記判斷是否 需要進行靜態(tài)回收,如果是,則執(zhí)行靜態(tài)回收操作,執(zhí)行步驟S1,否則直接執(zhí)行步驟S1。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1中,所述從所述存儲設(shè)備中獲 取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,具體為: 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表; 步驟a2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表; 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通過校 驗,如果均通過校驗,則執(zhí)行步驟a4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所述第 一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索引,步 驟a3結(jié)束;如果只有所述第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng)表緩存 區(qū)中,將第一有效系統(tǒng)表的頁號記為更新索引,步驟a3結(jié)束;如果均未通過校驗,則報錯, 步驟a3結(jié)束; 步驟a4 :獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如果 是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存 區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束;如果是所 述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存 區(qū)中,將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束;如果是所 述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表 緩存區(qū)中,將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引,步驟a4結(jié)束。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟S8,具體為:將所述系統(tǒng)表緩存 區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表中,更新所述更新索引對應(yīng)的有效 系統(tǒng)表中的新舊標記。
5. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng) 表寫入所述更新索引對應(yīng)的有效系統(tǒng)表中,還包括: 判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng)的有效系統(tǒng)表時是否 出現(xiàn)壞頁,如果是,則獲取與所述更新索引對應(yīng)的有效系統(tǒng)表相鄰的非壞頁的系統(tǒng)表,將所 述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞頁的系統(tǒng)表中,否則執(zhí)行更新所述更新 索引對應(yīng)的有效系統(tǒng)表中的新舊標記的操作。
6. 根據(jù)權(quán)利要求4所述的方法,其特征在于,所述更新所述更新索引對應(yīng)的有效系統(tǒng) 表中的新舊標記,具體為:判斷所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記,如果是所述 第一預(yù)設(shè)值,則將所述新舊標記更新為所述第三預(yù)設(shè)值,如果是所述第二預(yù)設(shè)值,則將所述 新舊標記更新為所述第一預(yù)設(shè)值,如果是所述第三預(yù)設(shè)值,則將所述新舊標記更新為所述 第二預(yù)設(shè)值。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1中,所述根據(jù)所述待寫數(shù)據(jù)的 邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號,具體為:將所述待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁 長,將得到的商作為邏輯頁號。
8. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S1中,所述根據(jù)所述邏輯頁號, 計算與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,具體 為:將所述邏輯頁號除以預(yù)設(shè)頁長的二分之一,將得到的商作為與所述邏輯頁號對應(yīng)的地 址映射頁的邏輯頁號,將得到的余數(shù)作為在所述地址映射頁的頁內(nèi)偏移。
9. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S3中,所述根據(jù)所述地址映射 頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,判斷是否能夠從所述地址映射頁中獲取到 第一物理頁號,具體為:根據(jù)所述地址映射頁的邏輯頁號,查找所述系統(tǒng)表中的地址映射索 弓丨,將所述地址映射頁的邏輯頁號乘以2得到在地址映射索引的偏移,讀取兩個字節(jié)的數(shù) 據(jù),作為所述地址映射頁的物理頁號,然后根據(jù)所述地址映射頁的物理頁號和在所述地址 映射頁的頁內(nèi)偏移,從所述地址映射頁中獲取數(shù)據(jù),判斷獲取到的數(shù)據(jù)是否為Oxffff,如果 是,則未找到第一物理頁號,否則找到第一物理頁號。
10. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述步驟S3中,所述根據(jù)所述存儲設(shè)備中與所述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫 數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁,具體為: 步驟1 :將所述第一物理頁號轉(zhuǎn)換為第一物理地址,判斷所述第一物理地址是否在用 戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟2,否則執(zhí)行步驟3 ; 步驟2 :根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù) 據(jù),執(zhí)行步驟S5 ; 步驟3:將所述第一物理地址對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中, 根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),執(zhí)行步驟 S5 ; 所述步驟S8之前還包括:將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁中。
11. 根據(jù)權(quán)利要求10所述的方法,其特征在于,所述將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù) 寫入所述新用戶數(shù)據(jù)頁中,還包括:判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù) 據(jù)頁時是否出現(xiàn)壞頁,如果是,則返回執(zhí)行步驟S2,否則將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫 入所述新用戶數(shù)據(jù)頁中。
12. 根據(jù)權(quán)利要求11所述的方法,其特征在于,所述判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù) 據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞頁,具體為: 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值; 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ; 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù)緩存 區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2。
13. 根據(jù)權(quán)利要求1所述的方法,其特征在于, 所述步驟S6中,所述根據(jù)所述存儲設(shè)備中與所述第二物理頁號對應(yīng)的數(shù)據(jù)更新所述 新地址映射頁,具體為: 步驟bl :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,判斷所述第二物理地址是否在地 址映射緩存區(qū)中,如果是,則執(zhí)行步驟b3,否則執(zhí)行步驟b2 ; 步驟b2 :將所述第二物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述地址映射緩存區(qū)中,執(zhí) 行步驟b3 ; 步驟b3 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁 中,執(zhí)行步驟S7。
14. 根據(jù)權(quán)利要求13所述的方法,其特征在于,所述步驟b3,還包括:判斷所述地址映 射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁時是否出現(xiàn)壞頁,如果是,則 返回步驟S5,否則將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射 頁中。
15. 根據(jù)權(quán)利要求14所述的方法,其特征在于,所述判斷所述地址映射緩存區(qū)中的數(shù) 據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁時是否出現(xiàn)壞頁,具體為: 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值; 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ; 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址映射 緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁為壞頁,否則返回步驟bb2。
16. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟S7與所述步驟S8之間還包括: 步驟cl :根據(jù)所述新用戶數(shù)據(jù)頁的物理頁號和所述新地址映射頁的物理頁號,計算對 應(yīng)的擦除計數(shù)頁; 步驟c2 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特位,將所述存儲設(shè)備中 所述第三比特位對應(yīng)的數(shù)據(jù)頁作為新擦除計數(shù)頁; 步驟c3 :判斷從所述系統(tǒng)表中是否能夠獲取到與所述擦除計數(shù)頁的頁號對應(yīng)的第三 物理頁號,如果是,則將所述第三物理頁號對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述新擦除計數(shù)頁 中,執(zhí)行步驟c4,否則將所述新擦除計數(shù)頁中的數(shù)據(jù)清空,執(zhí)行步驟c4 ; 步驟c4 :從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁 對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次 數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,執(zhí)行步驟S8。
17. 根據(jù)權(quán)利要求16所述的方法,其特征在于,所述步驟c3中,所述將所述第三物理頁 號對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述新擦除計數(shù)頁中,具體為: 步驟el :將所述第三物理頁號轉(zhuǎn)換為第三物理地址,判斷所述第三物理地址是否在擦 除計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟e3,否則執(zhí)行步驟e2 ; 步驟e2 :將所述第三物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述擦除計數(shù)緩存區(qū)中,執(zhí) 行步驟e3 ; 步驟e3:將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁 中,執(zhí)行步驟c4。
18. 根據(jù)權(quán)利要求17所述的方法,其特征在于,所述步驟e3,還包括:判斷所述擦除計 數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中時是否出現(xiàn)壞頁,如果是, 則返回步驟S5,否則將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計 數(shù)頁中。
19. 根據(jù)權(quán)利要求18所述的方法,其特征在于,所述判斷所述擦除計數(shù)緩存區(qū)中的數(shù) 據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁中時是否出現(xiàn)壞頁,具體為: 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值; 步驟cc2:將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ; 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除計數(shù) 緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁為壞頁,否則返回步驟cc2。
20. 根據(jù)權(quán)利要求16所述的方法,其特征在于,所述從所述新擦除計數(shù)頁中分別查 找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),具體 為:將所述新擦除計數(shù)頁中與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù)均加 0x01ο
21. 根據(jù)權(quán)利要求16所述的方法,其特征在于,所述根據(jù)所述新擦除計數(shù)頁的頁號和 更新后的擦除次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,具體為:根據(jù)所述更新后的擦 除次數(shù)更新所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁 號寫入所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表中。
22. 根據(jù)權(quán)利要求16所述的方法,其特征在于,所述步驟c4與所述步驟S8之間還包 括: 步驟Π :判斷所述新擦除計數(shù)頁中的擦除次數(shù)是否大于第一預(yù)設(shè)值,如果是,則將靜 態(tài)回收標記置為需要進行靜態(tài)回收,執(zhí)行步驟f2,否則執(zhí)行步驟f2 ; 步驟f2 :獲取所述系統(tǒng)表中的擦除總數(shù),根據(jù)所述擦除總數(shù),計算得到平均擦除次數(shù), 判斷所述平均擦除次數(shù)是否大于第二預(yù)設(shè)值,如果是,則將所述靜態(tài)回收標識置位需要進 行靜態(tài)回收,執(zhí)行步驟S8,否則直接執(zhí)行步驟S8。
23. 根據(jù)權(quán)利要求2所述的方法,其特征在于,所述執(zhí)行靜態(tài)回收操作,具體為: 步驟gl :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,獲取系 統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中的第一個地址映射頁作為當 前地址映射頁; 步驟g2 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù)當前 地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,執(zhí)行步驟g3,否則執(zhí)行步驟 gl6 ; 步驟g3 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第四比特 位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁; 步驟g4 :判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是,則將 第四比特位置為未用比特位,執(zhí)行步驟g3,否則執(zhí)行步驟g5 ; 步驟g5 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟g7,否則將 地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射緩存區(qū)置為空閑,執(zhí)行 步驟g6 ; 步驟g6 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞頁,如 果是,則執(zhí)行步驟g3,否則執(zhí)行步驟g7 ; 步驟g7 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射頁修改 所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號,獲取當前地址映射頁中所有用戶數(shù)據(jù)頁 的物理頁號,將第一個用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁; 步驟g8 :判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù)當前 用戶數(shù)據(jù)頁的物理頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,執(zhí)行步驟g9,否則執(zhí)行步驟 gl5 ; 步驟g9 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第五比特 位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁; 步驟gl〇 :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是,則將 第五比特位置為未用比特位,執(zhí)行步驟g9,否則執(zhí)行步驟gll ; 步驟gll :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟gl4,否則 將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存區(qū)置為空閑,執(zhí)行步 驟 gl2 ; 步驟gl3 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟g9,否則執(zhí)行步驟gl4 ; 步驟gl4:將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶數(shù)據(jù) 頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號; 步驟gl5 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行步驟 gl6,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟g8 ; 步驟gl6 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則將靜 態(tài)回收標識置為不需要進行靜態(tài)回收,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中,回收 成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行步驟 g2。
24. 根據(jù)權(quán)利要求1或16所述的方法,其特征在于,所述從所述系統(tǒng)表緩存區(qū)中查詢所 述系統(tǒng)表中的循環(huán)位圖,具體為:逐位查詢所述系統(tǒng)表緩存區(qū)中所述系統(tǒng)表中的循環(huán)位圖。
25. 根據(jù)權(quán)利要求1或16所述的方法,其特征在于,所述從所述系統(tǒng)表緩存區(qū)中查詢所 述系統(tǒng)表中的循環(huán)位圖,具體為:從所述系統(tǒng)表緩存區(qū)中獲取所述系統(tǒng)表中的動態(tài)控制指 令,根據(jù)所述動態(tài)控制指令獲取循環(huán)位圖中相應(yīng)的位置。
26. -種對存儲設(shè)備進行數(shù)據(jù)讀取的方法,其特征在于,包括:調(diào)用讀取函數(shù),向所述 讀取函數(shù)中傳入讀取地址和讀取長度,所述讀取函數(shù)執(zhí)行以下操作: 步驟A1 :從所述存儲設(shè)備中獲取系統(tǒng)表,判斷所述系統(tǒng)表是否為空,如果是,則執(zhí)行步 驟A7,否則執(zhí)行步驟A2; 步驟A2 :根據(jù)所述讀取地址計算邏輯頁號,根據(jù)所述邏輯頁號計算與所述邏輯頁號對 應(yīng)的地址映射頁的物理頁號和所述邏輯頁號在所述地址映射頁的頁內(nèi)偏移; 步驟A3 :判斷所述地址映射頁的物理頁號是否為第四預(yù)設(shè)值,如果是,則執(zhí)行步驟A7, 否則執(zhí)行步驟A4; 步驟A4:根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地 址映射頁中讀出用戶數(shù)據(jù)頁的物理頁號; 步驟A5 :判斷所述用戶數(shù)據(jù)頁的物理頁號是否為所述第四預(yù)設(shè)值,如果是,則執(zhí)行步 驟A7,否則執(zhí)行步驟A6 ; 步驟A6 :根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)頁中讀出相應(yīng)的數(shù)據(jù), 并將所述相應(yīng)的數(shù)據(jù)返回,讀取結(jié)束; 步驟A7 :根據(jù)所述讀取長度,返回長度為所述讀取長度的第五預(yù)設(shè)值,讀取結(jié)束。
27. 根據(jù)權(quán)利要求26所述的方法,其特征在于,所述從所述存儲設(shè)備中獲取系統(tǒng)表,具 體包括: 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號減一對應(yīng)的頁作為第一有 效系統(tǒng)表; 步驟h2 :從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號加一對應(yīng)的頁作為第二有 效系統(tǒng)表; 步驟h3:判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通過校 驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所述第 一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2 ;如果只有所述第二有效系統(tǒng)表通過 校驗,則將所述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2;如果均未通過校 驗,則報錯,結(jié)束; 步驟h4:分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如果是 第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū) 中;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所 述系統(tǒng)表緩存區(qū)中;如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng) 的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,執(zhí)行步驟A2。
28. 根據(jù)權(quán)利要求26所述的方法,其特征在于, 所述步驟A2中,所述根據(jù)所述讀取地址計算邏輯頁號,具體為:將所述讀取地址除以 預(yù)設(shè)頁長,將得到的商作為邏輯頁號; 所述步驟A2中,所述根據(jù)所述邏輯頁號計算與所述邏輯頁號對應(yīng)的地址映射頁的物 理頁號和所述邏輯頁號在地址映射頁的頁內(nèi)偏移,具體為:將所述邏輯頁號除以預(yù)設(shè)頁長, 根據(jù)得到的商從所述系統(tǒng)表中獲取與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號,將得到 的余數(shù)作為所述邏輯頁號在所述地址映射頁的頁內(nèi)偏移。
29. 根據(jù)權(quán)利要求26所述的方法,其特征在于,所述步驟A3與所述步驟A4之間還包 括:將所述地址映射頁的物理頁號轉(zhuǎn)換為所述地址映射頁的物理地址,判斷從地址映射緩 存區(qū)中是否能夠找到所述地址映射頁的物理地址,如果是,則根據(jù)所述地址映射頁的物理 頁號和在地址映射頁的頁內(nèi)偏移,從所述地址映射緩存區(qū)中讀出用戶數(shù)據(jù)頁的物理頁號, 執(zhí)行步驟A5,否則執(zhí)行步驟A4。
30. 根據(jù)權(quán)利要求26所述的方法,其特征在于,所述步驟A5與所述步驟A6之間還包 括:將所述用戶數(shù)據(jù)頁的物理頁號轉(zhuǎn)換為所述用戶數(shù)據(jù)頁的物理地址,判斷用戶數(shù)據(jù)緩存 區(qū)中是否存在所述用戶數(shù)據(jù)頁的物理地址,如果是,則根據(jù)所述讀取地址和所述讀取長度, 從所述用戶數(shù)據(jù)緩存區(qū)中讀取相應(yīng)的數(shù)據(jù),將讀取到的數(shù)據(jù)返回,讀取結(jié)束,否則執(zhí)行步驟 A6。
31. -種對存儲設(shè)備進行數(shù)據(jù)寫入的裝置,其特征在于,包括: 調(diào)用模塊:用于調(diào)用寫入函數(shù),向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待寫 數(shù)據(jù)的邏輯地址; 獲取模塊:用于當所述調(diào)用模塊向所述寫入函數(shù)傳入待寫數(shù)據(jù)、待寫數(shù)據(jù)的長度和待 寫數(shù)據(jù)的邏輯地址后,從所述存儲設(shè)備中獲取系統(tǒng)表; 計算模塊:用于根據(jù)待寫數(shù)據(jù)的邏輯地址,計算所述待寫數(shù)據(jù)的邏輯頁號;用于根據(jù) 所述邏輯頁號,計算與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁號和在所述地址映射頁的 頁內(nèi)偏移; 選擇模塊:用于當所述計算模塊計算得到與所述邏輯頁號對應(yīng)的地址映射頁的邏輯頁 號和在所述地址映射頁的頁內(nèi)偏移時,從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位 圖,選擇所述循環(huán)位圖中的一個未用比特位,作為第一比特位,將所述第一比特位置為已用 比特位,將所述存儲設(shè)備中與所述第一比特位對應(yīng)的數(shù)據(jù)頁作為新用戶數(shù)據(jù)頁;用于從所 述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中一個未用比特位, 作為第二比特位,將所述第二比特位置為已用比特位,將所述存儲設(shè)備中所述第二比特位 對應(yīng)數(shù)據(jù)頁作為新地址映射頁; 判斷模塊:用于當所述計算模塊計算得到所述地址映射頁的邏輯頁號和在所述地址映 射頁的頁內(nèi)偏移時,根據(jù)所述地址映射頁的邏輯頁號和在所述地址映射頁的頁內(nèi)偏移,判 斷是否能夠從所述地址映射頁中獲取到第一物理頁號;用于判斷是否能夠從所述系統(tǒng)表緩 存區(qū)的所述系統(tǒng)表中獲取到與所述地址映射頁的物理頁號對應(yīng)的第二物理頁號; 更新模塊:用于當所述判斷模塊判斷出能夠從所述地址映射頁中獲取到第一物理頁號 時,根據(jù)所述存儲設(shè)備中所述第一物理頁號對應(yīng)的數(shù)據(jù)、所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的 長度,更新所述新用戶數(shù)據(jù)頁;用于當所述判斷模塊判斷出不能夠從所述地址映射頁中獲 取到第一物理頁號時,將所述新用戶數(shù)據(jù)頁中的數(shù)據(jù)清空,根據(jù)所述待寫數(shù)據(jù)及所述待寫 數(shù)據(jù)的長度,更新所述新用戶數(shù)據(jù)頁中的數(shù)據(jù);用于當所述判斷模塊判斷出能夠獲取到與 所述地址映射頁的物理頁號對應(yīng)的第二物理頁號時,根據(jù)所述存儲設(shè)備中所述第二物理頁 號對應(yīng)的數(shù)據(jù)更新所述新地址映射頁; 寫入模塊:用于當所述獲取模塊獲取到系統(tǒng)表時,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中; 用于當所述判斷模塊判斷出不能夠獲取到與所述地址映射頁的物理頁號對應(yīng)的第二物理 頁號時,將所述新地址映射頁中的數(shù)據(jù)清空;用于將所述新用戶數(shù)據(jù)頁的頁號寫入所述新 地址映射頁中;用于將所述新地址映射頁的物理頁號寫入所述系統(tǒng)表緩存區(qū)的所述系統(tǒng)表 中;用于獲取所述系統(tǒng)表的循環(huán)位圖中與所述地址映射頁對應(yīng)的比特位,將該比特位置為 未用比特位,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述存儲設(shè)備的相應(yīng)位置。
32. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述獲取模塊,還用于從所述存儲設(shè)備中獲取有效靜態(tài)回收標記頁; 所述判斷模塊,還用于當所述獲取模塊獲取到所述有效靜態(tài)回收標記頁時,根據(jù)所述 有效靜態(tài)回收標記頁中的靜態(tài)回收標記判斷是否需要進行靜態(tài)回收; 所述裝置還包括,靜態(tài)回收模塊,用于執(zhí)行靜態(tài)回收操作。
33. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述獲取模塊,具體用于執(zhí)行以下操作: 步驟al :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第四預(yù)設(shè)值的第一個頁,將該頁的頁號減一對應(yīng)的頁作為第一有效系統(tǒng)表; 步驟a2:從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第四預(yù)設(shè)值的第一個頁時,將該頁的頁號加一對應(yīng)的頁作為第二有效系統(tǒng)表; 步驟a3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通過校 驗,如果均通過校驗,則執(zhí)行步驟a4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所述第 一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中,將所述第二有效系統(tǒng)表的頁號記為更新索引;如 果只有所述第二有效系統(tǒng)表通過校驗,則將第二有效系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,將第一 有效系統(tǒng)表的頁號記為更新索引;如果均未通過校驗,則報錯,結(jié)束; 步驟a4:獲取并判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如果 是第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存 區(qū)中,將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第二預(yù)設(shè)值 和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將所述 第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引;如果是所述第三預(yù)設(shè)值和所述第一預(yù) 設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中,將所述第三預(yù)設(shè) 值對應(yīng)的有效系統(tǒng)表的頁號記為更新索引。
34. 根據(jù)權(quán)利要求33所述的裝置,其特征在于, 所述寫入模塊,具體用于將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng) 的有效系統(tǒng)表中; 所述更新模塊,還用于更新所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記。
35. 根據(jù)權(quán)利要求34所述的裝置,其特征在于, 所述判斷模塊,還用于判斷所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入所述更新索引對應(yīng) 的有效系統(tǒng)表時是否出現(xiàn)壞頁; 所述獲取模塊,還用于當所述判斷模塊判斷出所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫 入所述更新索引對應(yīng)的有效系統(tǒng)表出現(xiàn)壞頁時,獲取與所述更新索引對應(yīng)的有效系統(tǒng)表相 鄰的非壞頁的系統(tǒng)表,將所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫入該相鄰的非壞頁的系統(tǒng)表 中; 所述更新模塊,具體用于當所述判斷模塊判斷出所述系統(tǒng)表緩存區(qū)中的所述系統(tǒng)表寫 入所述更新索引對應(yīng)的有效系統(tǒng)表未出現(xiàn)壞頁時,更新所述更新索引對應(yīng)的有效系統(tǒng)表中 的新舊標記。
36. 根據(jù)權(quán)利要求34所述的裝置,其特征在于, 所述判斷模塊,還用于判斷所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記; 所述更新模塊,還用于當所述判斷模塊判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中的新 舊標記為第一預(yù)設(shè)值時,將所述新舊標記更新為所述第三預(yù)設(shè)值;還用于當所述判斷模塊 判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中的新舊標記為第二預(yù)設(shè)值時,將所述新舊標記更 新為所述第一預(yù)設(shè)值;還用于當所述判斷模塊判斷出所述更新索引對應(yīng)的有效系統(tǒng)表中的 新舊標記為第三預(yù)設(shè)值時,將所述新舊標記更新為所述第二預(yù)設(shè)值。
37. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述計算模塊,具體用于將所述待寫數(shù)據(jù)的邏輯地址除以預(yù)設(shè)頁長,將得到的商作為 邏輯頁號。
38. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述計算模塊,具體用于將所述邏輯頁號除以預(yù)設(shè)頁長的二分之一,將得到的商作為 所述邏輯頁號對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁號在所述地址 映射頁的頁內(nèi)偏移。
39. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述判斷模塊,具體用于根據(jù)所述地址映射頁的邏輯頁號,查找所述系統(tǒng)表中的地 址映射索引,將所述地址映射頁的邏輯頁號乘以2得到在地址映射索引的偏移,讀取兩個 字節(jié)的數(shù)據(jù),作為所述地址映射頁的物理頁號,然后根據(jù)所述地址映射頁的物理頁號和在 所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中獲取數(shù)據(jù),判斷獲取到的數(shù)據(jù)是否為 OxfffT。
40. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述更新模塊,具體用于執(zhí)行以下操作: 步驟1 :將所述第一物理頁號轉(zhuǎn)換為第一物理地址,判斷所述第一物理地址是否在用 戶數(shù)據(jù)緩存區(qū)中,如果是,則執(zhí)行步驟2,否則執(zhí)行步驟3 ; 步驟2 :根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù) 據(jù),觸發(fā)選擇模塊; 步驟3 :將所述第一物理地址對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中, 根據(jù)所述待寫數(shù)據(jù)及所述待寫數(shù)據(jù)的長度,更新所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù),觸發(fā)選擇 模塊; 所述寫入模塊,還用于將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁中。
41. 根據(jù)權(quán)利要求40所述的裝置,其特征在于, 所述判斷模塊,還用于判斷判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁 時是否出現(xiàn)壞頁; 所述寫入模塊,具體用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入 所述新用戶數(shù)據(jù)頁未出現(xiàn)壞頁時,將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入所述新用戶數(shù)據(jù)頁 中。
42. 根據(jù)權(quán)利要求41所述的裝置,其特征在于, 所述判斷模塊,具體用于執(zhí)行以下操作: 步驟aal :將執(zhí)行寫入讀出次數(shù)置為初始值; 步驟aa2 :將所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟aa3 ; 步驟aa3 :判斷執(zhí)行寫入讀出的次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述用戶數(shù)據(jù)緩存 區(qū)中的數(shù)據(jù)寫入的對應(yīng)的存儲設(shè)備區(qū)域為壞頁,否則返回步驟aa2。
43. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述更新模塊,具體用于執(zhí)行以下操作: 步驟bl :將所述第二物理頁號轉(zhuǎn)換為第二物理地址,判斷所述第二物理地址是否在地 址映射緩存區(qū)中,如果是,則執(zhí)行步驟b3,否則執(zhí)行步驟b2 ; 步驟b2 :將所述第二物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述地址映射緩存區(qū)中,執(zhí) 行步驟b3 ; 步驟b3 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁 中。
44. 根據(jù)權(quán)利要求43所述的裝置,其特征在于, 所述判斷模塊,還用于判斷所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述 新地址映射頁時是否出現(xiàn)壞頁; 所述寫入模塊,具體用于當所述判斷模塊判斷出所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所 述新地址映射頁未出現(xiàn)壞頁時,將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所 述新地址映射頁中。
45. 根據(jù)權(quán)利要求44所述的裝置,其特征在于, 所述寫入模塊,具體用于執(zhí)行以下操作: 步驟bbl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值; 步驟bb2 :將所述地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置處將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟bb3 ; 步驟bb3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述地址映射 緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新地址映射頁為壞頁,否則返回步驟bb2。
46. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述計算模塊,還用于根據(jù)所述新用戶數(shù)據(jù)頁的頁號和所述新地址映射頁的物理頁 號,計算對應(yīng)的擦除計數(shù)頁; 所述選擇模塊,還用于從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所 述循環(huán)位圖中一個未用比特位,作為第三比特位,將所述第三比特位置為已用比特位,將所 述存儲設(shè)備中所述第三比特位對應(yīng)的數(shù)據(jù)頁作為新擦除計數(shù)頁; 所述判斷模塊,還用于判斷從所述系統(tǒng)表中是否能夠獲取到與所述擦除計數(shù)頁的頁號 對應(yīng)的第三物理頁號; 所述寫入模塊,還用于當所述判斷模塊判斷出從所述系統(tǒng)表中能夠獲取到與所述擦除 計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述第三物理頁號對應(yīng)的存儲設(shè)備中的數(shù)據(jù)寫入 所述新擦除計數(shù)頁中; 所述更新模塊,還用于當所述判斷模塊判斷出從所述系統(tǒng)表中不能夠獲取到與所述擦 除計數(shù)頁的頁號對應(yīng)的第三物理頁號時,將所述新擦除計數(shù)頁中的數(shù)據(jù)清空;還用于從所 述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù),更 新對應(yīng)的擦除次數(shù);還用于根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新所述系 統(tǒng)表緩存區(qū)中的所述系統(tǒng)表。
47. 根據(jù)權(quán)利要求46所述的裝置,其特征在于, 所述寫入模塊,具體用于執(zhí)行以下操作: 步驟el :將所述第三物理頁號轉(zhuǎn)換為第三物理地址,判斷所述第三物理地址是否在擦 除計數(shù)緩存區(qū)中,如果是,則執(zhí)行步驟e3,否則執(zhí)行步驟e2 ; 步驟e2 :將所述第三物理地址對應(yīng)存儲設(shè)備中的數(shù)據(jù)寫入所述擦除計數(shù)緩存區(qū)中,執(zhí) 行步驟e3 ; 步驟e3 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁 中。
48. 根據(jù)權(quán)利要求47所述的裝置,其特征在于, 所述判斷模塊,還用于判斷所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述 新擦除計數(shù)頁中時是否出現(xiàn)壞頁; 所述寫入模塊,具體用于當所述判斷模塊判斷出所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入所 述存儲設(shè)備中的所述新擦除計數(shù)頁中未出現(xiàn)壞頁時,將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入 所述存儲設(shè)備中的所述新擦除計數(shù)頁中。
49. 根據(jù)權(quán)利要求48所述的裝置,其特征在于, 所述判斷模塊,具體用于執(zhí)行以下操作: 步驟ccl :將執(zhí)行寫入讀出的操作次數(shù)置為初始值; 步驟cc2 :將所述擦除計數(shù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置后,再從該相應(yīng) 位置中將該數(shù)據(jù)讀出,判斷讀出的數(shù)據(jù)與寫入的數(shù)據(jù)是否相同,如果是,則未出現(xiàn)壞頁,否 則更新所述執(zhí)行寫入讀出的次數(shù),執(zhí)行步驟cc3 ; 步驟cc3 :判斷執(zhí)行寫入讀出的操作次數(shù)是否達到預(yù)設(shè)次數(shù),如果是,則所述擦除計數(shù) 緩存區(qū)中的數(shù)據(jù)寫入所述存儲設(shè)備中的所述新擦除計數(shù)頁為壞頁,否則返回步驟cc2。
50. 根據(jù)權(quán)利要求46所述的裝置,其特征在于, 所述更新模塊中,所述從所述新擦除計數(shù)頁中分別查找與所述新用戶數(shù)據(jù)頁和所述新 地址映射頁對應(yīng)的擦除次數(shù),更新對應(yīng)的擦除次數(shù),具體用于將所述新擦除計數(shù)頁中與所 述新用戶數(shù)據(jù)頁和所述新地址映射頁對應(yīng)的擦除次數(shù)均加 0x01。
51. 根據(jù)權(quán)利要求46所述的裝置,其特征在于, 所述更新模塊中,所述根據(jù)所述新擦除計數(shù)頁的頁號和更新后的擦除次數(shù)更新所述系 統(tǒng)表緩存區(qū)中的所述系統(tǒng)表,具體用于根據(jù)所述更新后的擦除次數(shù)更新所述系統(tǒng)表緩存區(qū) 中的所述系統(tǒng)表中的擦除總數(shù),并將所述新擦除計數(shù)頁的頁號寫入所述系統(tǒng)表緩存區(qū)中的 所述系統(tǒng)表中。
52. 根據(jù)權(quán)利要求46所述的裝置,其特征在于, 所述判斷模塊,還用于判斷所述新擦除計數(shù)頁中的擦除次數(shù)是否大于第一預(yù)設(shè)值;還 用于當所述計算模塊計算得到平均擦除次數(shù)時,判斷所述平均擦除次數(shù)是否大于第二預(yù)設(shè) 值; 所述獲取模塊,還用于當所述判斷模塊判斷出所述新擦除計數(shù)頁中的擦除次數(shù)不大于 第一預(yù)設(shè)值時或當所述設(shè)置模塊將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收時,獲取所述系 統(tǒng)表中的擦除總數(shù); 所述計算模塊,還用于當所述獲取模塊獲取到所述系統(tǒng)表中的擦除總數(shù)時,根據(jù)所述 擦除總數(shù),計算得到平均擦除次數(shù); 所述裝置還包括: 設(shè)置模塊,用于當所述判斷模塊判斷出所述新擦除計數(shù)頁中的擦除次數(shù)大于第一預(yù)設(shè) 值時,將靜態(tài)回收標記設(shè)置為需要進行靜態(tài)回收;用于當所述判斷模塊判斷出所述平均擦 除次數(shù)大于第二預(yù)設(shè)值時,將靜態(tài)回收標記置為需要進行靜態(tài)回收。
53. 根據(jù)權(quán)利要求31所述的裝置,其特征在于, 所述靜態(tài)回收模塊,具體用于執(zhí)行以下操作: 步驟gl :從所述存儲設(shè)備中獲取系統(tǒng)表,將所述系統(tǒng)表寫入系統(tǒng)表緩存區(qū)中,獲取系 統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,將所有地址映射頁中的第一個地址映射頁作為當 前地址映射頁; 步驟g2 :判斷當前地址映射頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù)當前 地址映射頁的物理頁號計算當前地址映射頁的第四物理地址,執(zhí)行步驟g3,否則執(zhí)行步驟 gl6 ; 步驟g3 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 的一個未用比特位,作為第四比特位,將所述第四比特位置為已用比特位,將所述第四比特 位對應(yīng)的存儲設(shè)備區(qū)域作為待回收地址映射頁; 步驟g4 :判斷所述待回收地址映射頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是,則將 第四比特位置為未用比特位,執(zhí)行步驟g3,否則執(zhí)行步驟g5 ; 步驟g5 :判斷地址映射緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟g7,否則將 地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將地址映射緩存區(qū)置為空閑,執(zhí)行 步驟g6 ; 步驟g6 :判斷地址映射緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞頁,如 果是,則執(zhí)行步驟g3,否則執(zhí)行步驟g7 ; 步驟g7 :將當前地址映射頁中的數(shù)據(jù)寫入地址映射緩存區(qū)中,根據(jù)新地址映射頁修改 所述系統(tǒng)表緩存區(qū)中當前地址映射頁對應(yīng)的頁號,獲取當前地址映射頁中所有用戶數(shù)據(jù)頁 的頁號,將第一個用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁; 步驟g8:判斷當前用戶數(shù)據(jù)頁的擦除次數(shù)是否達到第六預(yù)設(shè)值,如果是,則根據(jù)當前 用戶數(shù)據(jù)頁的頁號計算當前用戶數(shù)據(jù)頁的第五物理地址,執(zhí)行步驟g9,否則執(zhí)行步驟gl5 ; 步驟g9 :從所述系統(tǒng)表緩存區(qū)中查詢所述系統(tǒng)表中的循環(huán)位圖,選擇所述循環(huán)位圖中 的一個未用比特位,作為第五比特位,將所述第五比特位置為已用比特位,將所述第五比特 位對應(yīng)的存儲設(shè)備區(qū)域作為待回收用戶數(shù)據(jù)頁; 步驟gl〇 :判斷所述待回收用戶數(shù)據(jù)頁的擦除次數(shù)是否小于第六預(yù)設(shè)值,如果是,則將 第五比特位置為未用比特位,執(zhí)行步驟g9,否則執(zhí)行步驟gll ; 步驟gll :判斷用戶數(shù)據(jù)緩存區(qū)中是否存在空閑緩存頁,如果是,則執(zhí)行步驟gl4,否則 將用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置,并將用戶緩存區(qū)置為空閑,執(zhí)行步 驟 gl2 ; 步驟gl3 :判斷所述用戶數(shù)據(jù)緩存區(qū)中的數(shù)據(jù)寫入存儲設(shè)備的相應(yīng)位置時是否出現(xiàn)壞 頁,如果是,則執(zhí)行步驟g9,否則執(zhí)行步驟gl4 ; 步驟gl4 :將當前用戶數(shù)據(jù)頁中的數(shù)據(jù)寫入所述用戶數(shù)據(jù)緩存區(qū)中,根據(jù)新用戶數(shù)據(jù) 頁修改當前地址映射頁中當前用戶數(shù)據(jù)頁對應(yīng)的頁號; 步驟gl5 :判斷是否處理完當前地址映射頁中的所有用戶數(shù)據(jù)頁,如果是,則執(zhí)行步驟 gl6,否則將當前用戶數(shù)據(jù)頁的下一用戶數(shù)據(jù)頁作為當前用戶數(shù)據(jù)頁,返回執(zhí)行步驟g8 ; 步驟gl6 :判斷是否處理完系統(tǒng)表緩存區(qū)中系統(tǒng)表的所有地址映射頁,如果是,則將靜 態(tài)回收標識置為不需要進行靜態(tài)回收,將系統(tǒng)表緩存區(qū)中的系統(tǒng)表寫入存儲設(shè)備中,回收 成功,結(jié)束,否則將當前地址映射頁的下一地址映射頁作為當前地址映射頁,返回執(zhí)行步驟 g2。
54. 根據(jù)權(quán)利要求31或46所述的裝置,其特征在于, 所述選擇模塊,具體用于逐位查詢所述系統(tǒng)表緩存區(qū)中所述系統(tǒng)表中的循環(huán)位圖。
55. 根據(jù)權(quán)利要求31或46所述的裝置,其特征在于, 所述選擇模塊,具體用于從所述系統(tǒng)表緩存區(qū)中獲取所述系統(tǒng)表中的動態(tài)控制指令, 根據(jù)所述動態(tài)控制指令獲取循環(huán)位圖中相應(yīng)的位置。
56. -種對存儲設(shè)備進行數(shù)據(jù)讀取的裝置,其特征在于,包括: 調(diào)用模塊:用于調(diào)用讀取函數(shù),向所述讀取函數(shù)中傳入讀取地址和讀取長度; 獲取模塊:用于當調(diào)用模塊向所述讀取函數(shù)中傳入讀取地址和讀取長度后,從所述存 儲設(shè)備中獲取系統(tǒng)表; 判斷模塊:用于當獲取模塊從所述存儲設(shè)備中獲取到系統(tǒng)表時,判斷所述系統(tǒng)表是否 為空;用于當計算模塊計算出地址映射頁的物理頁號時,判斷所述地址映射頁的物理頁號 是否為第四預(yù)設(shè)值;用于當計算模塊計算出用戶數(shù)據(jù)頁的頁號時,判斷所述用戶數(shù)據(jù)頁的 頁號是否為所述第四預(yù)設(shè)值; 計算模塊:用于當所述判斷模塊判斷出所述系統(tǒng)表不為空時,根據(jù)所述讀取地址計算 邏輯頁號,用于計算與所述邏輯頁號對應(yīng)的地址映射頁的物理頁號和所述邏輯頁號在所述 地址映射頁的頁內(nèi)偏移; 讀取模塊:用于當所述判斷模塊判斷出所述地址映射頁的物理頁號不為第四預(yù)設(shè)值 時,根據(jù)所述地址映射頁的物理頁號和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁 中讀出用戶數(shù)據(jù)頁的頁號;用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)頁的頁號為所述第四 預(yù)設(shè)值時,根據(jù)所述讀取長度,返回長度為所述讀取長度的第五預(yù)設(shè)值;用于當所述判斷模 塊判斷出所述用戶數(shù)據(jù)頁的頁號不為所述第三預(yù)設(shè)值時,根據(jù)所述讀取地址和所述讀取長 度,從所述用戶數(shù)據(jù)頁中讀取相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
57. 根據(jù)權(quán)利要求56所述的裝置,其特征在于, 所述獲取模塊,具體用于執(zhí)行以下操作: 步驟hi :從高地址向低地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號減一對應(yīng)的頁作為第一有 效系統(tǒng)表; 步驟h2:從低地址向高地址依次遍歷所述存儲設(shè)備中的系統(tǒng)區(qū),獲取系統(tǒng)區(qū)中頁內(nèi)數(shù) 據(jù)全為第二預(yù)設(shè)值的第一個頁,將所述獲取到的第一個頁的頁號加一對應(yīng)的頁作為第二有 效系統(tǒng)表; 步驟h3 :判斷所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的數(shù)據(jù)是否能夠通過校 驗,如果均通過校驗,則執(zhí)行步驟h4 ;如果只有所述第一有效系統(tǒng)表通過校驗,則將所述第 一有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果只有所述第二有效系統(tǒng)表通過校驗,則將所 述第二有效系統(tǒng)表寫入所述系統(tǒng)表緩存區(qū)中;如果均未通過校驗,則報錯,結(jié)束; 步驟h4 :分別獲取所述第一有效系統(tǒng)表和所述第二有效系統(tǒng)表中的新舊標記,如果是 第一預(yù)設(shè)值和第二預(yù)設(shè)值,則將所述第二預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū) 中;如果是所述第二預(yù)設(shè)值和第三預(yù)設(shè)值,則將所述第三預(yù)設(shè)值對應(yīng)的有效系統(tǒng)表讀入所 述系統(tǒng)表緩存區(qū)中;如果是所述第三預(yù)設(shè)值和所述第一預(yù)設(shè)值,則將所述第一預(yù)設(shè)值對應(yīng) 的有效系統(tǒng)表讀入所述系統(tǒng)表緩存區(qū)中。
58. 根據(jù)權(quán)利要求56所述的裝置,其特征在于, 所述計算模塊,具體用于將所述讀取地址除以預(yù)設(shè)頁長,將得到的商作為邏輯頁號;具 體用于將所述邏輯頁號除以預(yù)設(shè)頁長,根據(jù)得到的商從所述系統(tǒng)表中獲取與所述邏輯頁號 對應(yīng)的地址映射頁的物理頁號,將得到的余數(shù)作為所述邏輯頁號在所述地址映射頁的頁內(nèi) 偏移。
59. 根據(jù)權(quán)利要求56所述的裝置,其特征在于,還包括: 第一轉(zhuǎn)換模塊,用于當所述判斷模塊判斷出所述地址映射頁的物理頁號不為第四預(yù)設(shè) 值時,將所述地址映射頁的物理頁號轉(zhuǎn)換為所述地址映射頁的物理地址; 所述判斷模塊,還用于當所述第一轉(zhuǎn)換模塊得到所述地址映射頁的物理地址時,判斷 從地址映射緩存區(qū)中是否能夠找到所述地址映射頁的物理地址; 所述讀取模塊:具體用于當所述判斷模塊判斷出從所述地址映射緩存區(qū)中獲取到所述 地址映射頁的物理地址時,根據(jù)所述地址映射頁的物理頁號和在地址映射頁的頁內(nèi)偏移, 從所述地址映射緩存區(qū)讀出用戶數(shù)據(jù)頁的頁號;具體用于當所述判斷模塊判斷出從所述地 址映射緩存區(qū)中不能讀取所述地址映射頁的物理地址時,根據(jù)所述地址映射頁的物理頁號 和在所述地址映射頁的頁內(nèi)偏移,從所述地址映射頁中讀出用戶數(shù)據(jù)頁的頁號。
60.根據(jù)權(quán)利要求56所述的裝置,其特征在于,還包括: 第二轉(zhuǎn)換模塊,用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)頁的頁號不為第四預(yù)設(shè)值 時,將所述用戶數(shù)據(jù)頁的頁號轉(zhuǎn)換為所述用戶數(shù)據(jù)頁的物理地址; 所述判斷模塊,還用于當所述第二轉(zhuǎn)換模塊得到所述用戶數(shù)據(jù)頁的物理地址時,判斷 用戶數(shù)據(jù)緩存區(qū)中是否存在所述用戶數(shù)據(jù)頁的物理地址; 所述讀取模塊:具體用于當所述判斷模塊判斷出從所述用戶數(shù)據(jù)緩存區(qū)中存在所述用 戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀取長度,從所述用戶數(shù)據(jù)緩存區(qū)中讀 取相應(yīng)的數(shù)據(jù),將讀取到的數(shù)據(jù)返回;具體用于當所述判斷模塊判斷出所述用戶數(shù)據(jù)緩存 區(qū)中不存在所述用戶數(shù)據(jù)頁的物理地址時,根據(jù)所述讀取地址和所述讀取長度,從所述用 戶數(shù)據(jù)頁中讀出相應(yīng)的數(shù)據(jù),并將所述相應(yīng)的數(shù)據(jù)返回。
【文檔編號】G06F3/06GK104090730SQ201410322860
【公開日】2014年10月8日 申請日期:2014年7月8日 優(yōu)先權(quán)日:2014年7月8日
【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
阆中市| 遵义县| 泾阳县| 将乐县| 阿巴嘎旗| 永康市| 万州区| 安陆市| 呼伦贝尔市| 泰兴市| 察哈| 四平市| 屯昌县| 沙湾县| 河曲县| 锡林浩特市| 勐海县| 疏勒县| 石河子市| 株洲市| 德格县| 祥云县| 册亨县| 普兰县| 尖扎县| 镇原县| 盐边县| 泾川县| 清远市| 同江市| 呼和浩特市| 威远县| 万源市| 社旗县| 扎赉特旗| 云梦县| 墨竹工卡县| 漠河县| 斗六市| 武安市| 图们市|