本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,特別是涉及一種數(shù)據(jù)處理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì)。
背景技術(shù):
1、由于nand?flash(nand閃存)的固有特性以及工藝制作等原因,在對nand?flash進(jìn)行數(shù)據(jù)讀寫的過程中,偶爾會(huì)產(chǎn)生一位或幾位的數(shù)據(jù)錯(cuò)誤,例如,二進(jìn)制表示中的某些位從“1”變?yōu)椤?”,或者從“0”變?yōu)椤?”;而當(dāng)位翻轉(zhuǎn)發(fā)生在關(guān)鍵代碼或者關(guān)鍵數(shù)據(jù)時(shí),有可能導(dǎo)致系統(tǒng)崩潰、數(shù)據(jù)丟失等,從而造成嚴(yán)重后果。
2、通常情況下,對于位翻轉(zhuǎn)問題的解決方法是采用ecc(error?correcting?code,糾錯(cuò)碼),具體為對從某數(shù)據(jù)頁中讀取的用戶數(shù)據(jù)計(jì)算一個(gè)糾錯(cuò)碼,通過對糾錯(cuò)碼進(jìn)行分析以確定發(fā)生位翻轉(zhuǎn)的位數(shù),如果發(fā)生位翻轉(zhuǎn)的位數(shù)小于或等于ecc的可糾錯(cuò)位數(shù),則可以基于糾錯(cuò)碼對用戶數(shù)據(jù)進(jìn)行糾錯(cuò),但是如果發(fā)生位翻轉(zhuǎn)的位數(shù)大于ecc的可糾錯(cuò)位數(shù),由于超出了ecc的糾錯(cuò)能力,因此有可能導(dǎo)致該數(shù)據(jù)頁的數(shù)據(jù)丟失。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例的目的在于提供一種數(shù)據(jù)處理方法、裝置、設(shè)備及存儲(chǔ)介質(zhì),能夠在位翻轉(zhuǎn)數(shù)不小于位翻轉(zhuǎn)閾值時(shí)先將目標(biāo)數(shù)據(jù)頁所在目標(biāo)數(shù)據(jù)塊中的數(shù)據(jù)備份至預(yù)留區(qū),然后再基于位翻轉(zhuǎn)數(shù)與預(yù)設(shè)可糾錯(cuò)位數(shù)之間的大小關(guān)系對目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò),以降低位翻轉(zhuǎn)數(shù)大于預(yù)設(shè)可糾錯(cuò)位數(shù)時(shí)容易使目標(biāo)數(shù)據(jù)頁中的數(shù)據(jù)發(fā)生丟失的風(fēng)險(xiǎn),提高目標(biāo)閃存中數(shù)據(jù)的穩(wěn)定性。其具體方案如下:
2、第一方面,本發(fā)明提供了一種數(shù)據(jù)處理方法,應(yīng)用于預(yù)設(shè)處理器,包括:
3、確定針對目標(biāo)閃存的用戶區(qū)中的目標(biāo)數(shù)據(jù)頁的數(shù)據(jù)處理操作;其中,所述目標(biāo)閃存為采用非線性宏單元模式的閃存;所述用戶區(qū)用于存儲(chǔ)用戶數(shù)據(jù);
4、在預(yù)設(shè)存儲(chǔ)器中不存在第一塊映射表,或,所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中不存在與所述目標(biāo)數(shù)據(jù)頁所在的目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),若所述數(shù)據(jù)處理操作為數(shù)據(jù)讀取操作,則對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以從所述目標(biāo)數(shù)據(jù)頁中讀取目標(biāo)數(shù)據(jù),并獲取所述目標(biāo)閃存的控制器發(fā)送的基于所述目標(biāo)數(shù)據(jù)對應(yīng)的目標(biāo)糾錯(cuò)碼確定的位翻轉(zhuǎn)數(shù);
5、若所述位翻轉(zhuǎn)數(shù)不小于預(yù)設(shè)位翻轉(zhuǎn)閾值,則從所述目標(biāo)閃存的預(yù)留區(qū)中確定滿足預(yù)設(shè)條件的預(yù)留數(shù)據(jù)塊,并將所述目標(biāo)數(shù)據(jù)塊中的數(shù)據(jù)備份至所述預(yù)留數(shù)據(jù)塊,以及利用所述第一塊映射表對所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系進(jìn)行存儲(chǔ),然后基于所述位翻轉(zhuǎn)數(shù)與預(yù)設(shè)可糾錯(cuò)位數(shù)的大小關(guān)系對所述目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò);其中,所述預(yù)設(shè)位翻轉(zhuǎn)閾值小于所述預(yù)設(shè)可糾錯(cuò)位數(shù)。
6、可選的,所述確定針對目標(biāo)閃存的用戶區(qū)中的目標(biāo)數(shù)據(jù)頁的數(shù)據(jù)處理操作之后,還包括:
7、在所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中存在與所述目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),基于與所述目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系從所述預(yù)留區(qū)中確定相應(yīng)的待操作數(shù)據(jù)塊,并對所述待操作數(shù)據(jù)塊執(zhí)行所述數(shù)據(jù)處理操作;其中,所述數(shù)據(jù)處理操作包括數(shù)據(jù)讀取操作、數(shù)據(jù)寫入操作和數(shù)據(jù)擦除操作。
8、可選的,所述數(shù)據(jù)處理方法,還包括:
9、在所述預(yù)設(shè)存儲(chǔ)器中不存在所述第一塊映射表,或,所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中不存在與所述目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),若所述數(shù)據(jù)處理操作不為數(shù)據(jù)讀取操作,則對所述目標(biāo)數(shù)據(jù)頁執(zhí)行所述數(shù)據(jù)處理操作;其中,所述數(shù)據(jù)處理操作包括數(shù)據(jù)寫入操作和數(shù)據(jù)擦除操作;
10、其中,若所述數(shù)據(jù)處理操作為數(shù)據(jù)寫入操作,則在對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)寫入操作后,基于寫入所述目標(biāo)數(shù)據(jù)頁中的數(shù)據(jù)計(jì)算原始糾錯(cuò)碼,并將所述原始糾錯(cuò)碼存儲(chǔ)至所述目標(biāo)數(shù)據(jù)頁對應(yīng)的目標(biāo)空閑區(qū)域中。
11、可選的,所述對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以從所述目標(biāo)數(shù)據(jù)頁中讀取目標(biāo)數(shù)據(jù),并獲取所述目標(biāo)閃存的控制器發(fā)送的基于所述目標(biāo)數(shù)據(jù)對應(yīng)的目標(biāo)糾錯(cuò)碼確定的位翻轉(zhuǎn)數(shù),包括:
12、對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以從所述目標(biāo)數(shù)據(jù)頁中讀取目標(biāo)數(shù)據(jù),以便所述目標(biāo)閃存的控制器對所述目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò)碼的計(jì)算得到目標(biāo)糾錯(cuò)碼,并基于所述目標(biāo)糾錯(cuò)碼與所述目標(biāo)空閑區(qū)域中存儲(chǔ)的所述原始糾錯(cuò)碼之間的比較結(jié)果確定相應(yīng)的位翻轉(zhuǎn)數(shù);
13、獲取所述目標(biāo)閃存的控制器發(fā)送的所述位翻轉(zhuǎn)數(shù)。
14、可選的,所述從所述目標(biāo)閃存的預(yù)留區(qū)中確定滿足預(yù)設(shè)條件的預(yù)留數(shù)據(jù)塊,包括:
15、基于狀態(tài)標(biāo)識(shí)和壞塊標(biāo)識(shí)從所述預(yù)留區(qū)的各數(shù)據(jù)塊中確定處于空閑狀態(tài)且不屬于壞塊的預(yù)留數(shù)據(jù)塊;其中,所述數(shù)據(jù)塊中的任一數(shù)據(jù)頁對應(yīng)的空閑區(qū)域中存儲(chǔ)有用于標(biāo)識(shí)所述數(shù)據(jù)塊是否為壞塊的所述壞塊標(biāo)識(shí)以及用于標(biāo)識(shí)所述數(shù)據(jù)塊的當(dāng)前狀態(tài)的所述狀態(tài)標(biāo)識(shí)。
16、可選的,所述確定針對目標(biāo)閃存的用戶區(qū)中的目標(biāo)數(shù)據(jù)頁的數(shù)據(jù)處理操作之前,還包括:
17、對所述目標(biāo)閃存的管理區(qū)進(jìn)行遍歷,以將所述管理區(qū)中的第一個(gè)數(shù)據(jù)塊確定為當(dāng)前數(shù)據(jù)塊,并將所述當(dāng)前數(shù)據(jù)塊中的第一個(gè)數(shù)據(jù)頁確定為當(dāng)前數(shù)據(jù)頁,以及對所述當(dāng)前數(shù)據(jù)頁進(jìn)行讀取,并確定讀取到的塊映射表標(biāo)識(shí)是否為預(yù)設(shè)標(biāo)識(shí);其中,所述管理區(qū)用于存儲(chǔ)塊映射表;
18、若讀取到的所述塊映射表標(biāo)識(shí)為所述預(yù)設(shè)標(biāo)識(shí),則表征與所述塊映射表標(biāo)識(shí)對應(yīng)的第二塊映射表為有效塊映射表,并基于所述第二塊映射表在所述預(yù)設(shè)存儲(chǔ)器中創(chuàng)建相應(yīng)的所述第一塊映射表,然后結(jié)束對所述管理區(qū)的遍歷;
19、若未讀取到所述塊映射表標(biāo)識(shí)或讀取到的所述塊映射表標(biāo)識(shí)不為所述預(yù)設(shè)標(biāo)識(shí),則判斷所述當(dāng)前數(shù)據(jù)頁是否為所述當(dāng)前數(shù)據(jù)塊中的最后一個(gè)數(shù)據(jù)頁;
20、若所述當(dāng)前數(shù)據(jù)頁不為所述當(dāng)前數(shù)據(jù)塊中的最后一個(gè)數(shù)據(jù)頁,則將所述當(dāng)前數(shù)據(jù)塊中的下一個(gè)數(shù)據(jù)頁確定為新的當(dāng)前數(shù)據(jù)頁,并重新跳轉(zhuǎn)至所述對所述當(dāng)前數(shù)據(jù)頁進(jìn)行讀取的步驟;
21、若所述當(dāng)前數(shù)據(jù)頁為所述當(dāng)前數(shù)據(jù)塊中的最后一個(gè)數(shù)據(jù)頁,則判斷所述當(dāng)前數(shù)據(jù)塊是否為所述管理區(qū)中的最后一個(gè)數(shù)據(jù)塊;
22、若所述當(dāng)前數(shù)據(jù)塊不為所述管理區(qū)中的最后一個(gè)數(shù)據(jù)塊,則將所述管理區(qū)中的下一個(gè)數(shù)據(jù)塊確定為新的當(dāng)前數(shù)據(jù)塊,并重新跳轉(zhuǎn)至所述將所述當(dāng)前數(shù)據(jù)塊中的第一個(gè)數(shù)據(jù)頁確定為當(dāng)前數(shù)據(jù)頁的步驟;
23、若所述當(dāng)前數(shù)據(jù)塊為所述管理區(qū)中的最后一個(gè)數(shù)據(jù)塊,則結(jié)束對所述管理區(qū)的遍歷。
24、可選的,所述利用所述第一塊映射表對所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系進(jìn)行存儲(chǔ),包括:
25、在所述預(yù)設(shè)存儲(chǔ)器中不存在所述第一塊映射表時(shí),在所述預(yù)設(shè)存儲(chǔ)器中創(chuàng)建所述第一塊映射表,并將所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系存儲(chǔ)至所述第一塊映射表中,以及基于所述第一塊映射表在所述管理區(qū)中創(chuàng)建相應(yīng)的所述第二塊映射表;
26、或,在所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中不存在與所述目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),將所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系存儲(chǔ)至所述第一塊映射表中,并基于所述第一塊映射表更新所述管理區(qū)中的所述第二塊映射表。
27、第二方面,本發(fā)明提供了一種數(shù)據(jù)處理裝置,應(yīng)用于預(yù)設(shè)處理器,包括:
28、處理操作確定模塊,用于確定針對目標(biāo)閃存的用戶區(qū)中的目標(biāo)數(shù)據(jù)頁的數(shù)據(jù)處理操作;其中,所述目標(biāo)閃存為采用非線性宏單元模式的閃存;所述用戶區(qū)用于存儲(chǔ)用戶數(shù)據(jù);
29、位翻轉(zhuǎn)數(shù)獲取模塊,用于在預(yù)設(shè)存儲(chǔ)器中不存在第一塊映射表,或,所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中不存在與所述目標(biāo)數(shù)據(jù)頁所在的目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),若所述數(shù)據(jù)處理操作為數(shù)據(jù)讀取操作,則對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以從所述目標(biāo)數(shù)據(jù)頁中讀取目標(biāo)數(shù)據(jù),并獲取所述目標(biāo)閃存的控制器發(fā)送的基于所述目標(biāo)數(shù)據(jù)對應(yīng)的目標(biāo)糾錯(cuò)碼確定的位翻轉(zhuǎn)數(shù);
30、數(shù)據(jù)備份模塊,用于若所述位翻轉(zhuǎn)數(shù)不小于預(yù)設(shè)位翻轉(zhuǎn)閾值,則從所述目標(biāo)閃存的預(yù)留區(qū)中確定滿足預(yù)設(shè)條件的預(yù)留數(shù)據(jù)塊,并將所述目標(biāo)數(shù)據(jù)塊中的數(shù)據(jù)備份至所述預(yù)留數(shù)據(jù)塊,以及利用所述第一塊映射表對所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系進(jìn)行存儲(chǔ),然后基于所述位翻轉(zhuǎn)數(shù)與預(yù)設(shè)可糾錯(cuò)位數(shù)的大小關(guān)系對所述目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò);其中,所述預(yù)設(shè)位翻轉(zhuǎn)閾值小于所述預(yù)設(shè)可糾錯(cuò)位數(shù)。
31、第三方面,本發(fā)明提供了一種電子設(shè)備,包括:
32、存儲(chǔ)器,用于存儲(chǔ)計(jì)算機(jī)程序;
33、處理器,用于執(zhí)行所述計(jì)算機(jī)程序以實(shí)現(xiàn)前述數(shù)據(jù)處理方法的步驟。
34、第四方面,本發(fā)明提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)前述數(shù)據(jù)處理方法的步驟。
35、本發(fā)明中,預(yù)設(shè)處理器確定針對目標(biāo)閃存的用戶區(qū)中的目標(biāo)數(shù)據(jù)頁的數(shù)據(jù)處理操作;其中,所述目標(biāo)閃存為采用非線性宏單元模式的閃存;所述用戶區(qū)用于存儲(chǔ)用戶數(shù)據(jù);在預(yù)設(shè)存儲(chǔ)器中不存在第一塊映射表,或,所述預(yù)設(shè)存儲(chǔ)器中存在所述第一塊映射表且所述第一塊映射表中不存在與所述目標(biāo)數(shù)據(jù)頁所在的目標(biāo)數(shù)據(jù)塊對應(yīng)的映射關(guān)系時(shí),若所述數(shù)據(jù)處理操作為數(shù)據(jù)讀取操作,則對所述目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以從所述目標(biāo)數(shù)據(jù)頁中讀取目標(biāo)數(shù)據(jù),并獲取所述目標(biāo)閃存的控制器發(fā)送的基于所述目標(biāo)數(shù)據(jù)對應(yīng)的目標(biāo)糾錯(cuò)碼確定的位翻轉(zhuǎn)數(shù);若所述位翻轉(zhuǎn)數(shù)不小于預(yù)設(shè)位翻轉(zhuǎn)閾值,則從所述目標(biāo)閃存的預(yù)留區(qū)中確定滿足預(yù)設(shè)條件的預(yù)留數(shù)據(jù)塊,并將所述目標(biāo)數(shù)據(jù)塊中的數(shù)據(jù)備份至所述預(yù)留數(shù)據(jù)塊,以及利用所述第一塊映射表對所述目標(biāo)數(shù)據(jù)塊與所述預(yù)留數(shù)據(jù)塊之間的映射關(guān)系進(jìn)行存儲(chǔ),然后基于所述位翻轉(zhuǎn)數(shù)與預(yù)設(shè)可糾錯(cuò)位數(shù)的大小關(guān)系對所述目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò);其中,所述預(yù)設(shè)位翻轉(zhuǎn)閾值小于所述預(yù)設(shè)可糾錯(cuò)位數(shù)。
36、有益效果:本發(fā)明通過對采用非線性宏單元模式的目標(biāo)閃存進(jìn)行分區(qū),以將目標(biāo)閃存分為用于存儲(chǔ)用戶數(shù)據(jù)的用戶區(qū)以及用于存儲(chǔ)備份數(shù)據(jù)的預(yù)留區(qū),并通過設(shè)置小于預(yù)設(shè)可糾錯(cuò)位數(shù)的預(yù)設(shè)位翻轉(zhuǎn)閾值,從而在對用戶區(qū)中的目標(biāo)數(shù)據(jù)頁執(zhí)行數(shù)據(jù)讀取操作以讀取目標(biāo)數(shù)據(jù)時(shí),若基于目標(biāo)數(shù)據(jù)對應(yīng)的糾錯(cuò)碼確定的位翻轉(zhuǎn)數(shù)大于或等于預(yù)設(shè)位翻轉(zhuǎn)閾值,則可以先將目標(biāo)數(shù)據(jù)頁所在目標(biāo)數(shù)據(jù)塊中的數(shù)據(jù)備份至預(yù)留區(qū)中的滿足預(yù)設(shè)條件的預(yù)留數(shù)據(jù)塊,然后再基于位翻轉(zhuǎn)數(shù)與預(yù)設(shè)可糾錯(cuò)位數(shù)之間的大小關(guān)系對目標(biāo)數(shù)據(jù)進(jìn)行糾錯(cuò),以降低位翻轉(zhuǎn)數(shù)大于預(yù)設(shè)可糾錯(cuò)位數(shù)時(shí)容易使目標(biāo)數(shù)據(jù)頁中的數(shù)據(jù)發(fā)生丟失的風(fēng)險(xiǎn),提高目標(biāo)閃存中數(shù)據(jù)的穩(wěn)定性。