文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2017.06.003
中文引用格式: 楊志勇,董振興,,朱巖,,等. 星載高速大容量存儲器文件化壞塊管理設(shè)計[J].電子技術(shù)應(yīng)用,2017,,43(6):11-14.
英文引用格式: Yang Zhiyong,,Dong Zhenxing,Zhu Yan,,et al. Design of file-based bad block management of high-speed large-capacity space-borne storage[J].Application of Electronic Technique,,2017,43(6):11-14.
0 引言
星載高速大容量存儲器是衛(wèi)星及其他航天器進(jìn)行信息獲取,、信息處理及信息傳輸?shù)年P(guān)鍵設(shè)備之一,。NAND Flash芯片具有存儲密度大,、接口速率高、非易失性,、低功耗,、抗震性強(qiáng)、工作溫度寬等特點,,是星載高速大容量存儲器的理想存儲介質(zhì)[1-3],。但NAND Flash在空間高能粒子輻射、極高低溫環(huán)境下,,極易出現(xiàn)位翻轉(zhuǎn)錯誤[4-5],,采用錯誤檢測糾正(Error Correcting Code,ECC)技術(shù)對其糾錯可一定程度上保證數(shù)據(jù)的正確性[6-8],。然而,NAND Flash受制造工藝限制,,出廠時存在一定數(shù)量隨機(jī)分布的壞塊[5,,9-10],并且隨著時間的推移,,F(xiàn)lash達(dá)到擦除極限,,壞塊數(shù)量將會不斷增多。壞塊的產(chǎn)生將影響存儲器的存儲速率和存儲信息數(shù)據(jù)的正確性,、完整性,,甚至決定航天探測任務(wù)的成敗。因此,,高效,、可靠的壞塊管理對星載高速大容量存儲器具有重大意義。
1 星載存儲器背景
隨著空間探測任務(wù)的發(fā)展,,有效載荷產(chǎn)生的數(shù)據(jù)帶寬急劇增大,,存儲速率同樣需要提高,然而NAND Flash固有寫操作特性降低了有效吞吐率,。Flash寫入數(shù)據(jù)分為兩個過程,,首先將命令、地址及數(shù)據(jù)以字節(jié)方式寫入芯片內(nèi)部緩存(即“加載”過程),;其次芯片需要一個內(nèi)部編程過程,,才可確定編程是否成功[11-12]。編程過程中,,芯片不響應(yīng)外部命令,。星載高速大容量存儲器針對Flash寫操作特點,采用四級流水[9,,11]存儲技術(shù),,充分利用芯片編程時間加載其他芯片,實現(xiàn)存儲區(qū)全速無間斷數(shù)據(jù)寫入。圖1為四級流水線寫操作過程,。
空間探測有效載荷不斷增多,,各個有效載荷所產(chǎn)生的數(shù)據(jù)量參差不齊。傳統(tǒng)單分區(qū)環(huán)形隊列順序?qū)懭氲拇鎯芾矸绞?從前往后存儲,,待至存儲空間尾部,,擦除存儲空間首部已寫入塊,使其變?yōu)槲词褂脡K,,以便尾部空間存滿后,,再次從存儲空間首部繼續(xù)存儲)不能適應(yīng)新的需求。若存在兩種不同速率的有效載荷同時產(chǎn)生數(shù)據(jù):高速設(shè)備產(chǎn)生的數(shù)據(jù)存儲滿存儲空間尾部后,,環(huán)形隊列順序?qū)懭氲拇鎯Ψ绞綄⒉脸撞靠臻g,;低速設(shè)備所存儲的數(shù)據(jù)很少,并且由于回放數(shù)據(jù)優(yōu)先級的原因,,存在低速設(shè)備的數(shù)據(jù)未及時回放,,卻被擦除以得到高速設(shè)備存儲新數(shù)據(jù)所需要的未使用塊。
因此,,傳統(tǒng)的環(huán)形隊列順序?qū)懭氲拇鎯芾矸绞?,不能適用于多載荷。本文所提到的星載高速大容量存儲器,,采用的是四級流水存儲技術(shù),,每一個有效載荷分一個文件的方式進(jìn)行鏈?zhǔn)酱鎯芾怼?/p>
2 傳統(tǒng)壞塊管理
2.1 壞塊替換
存儲器初始化時,讀取相應(yīng)的塊狀態(tài)信息,,構(gòu)建壞塊表,。數(shù)據(jù)存儲時,根據(jù)壞塊表中信息,,跳過已有的壞塊,。若在存儲塊中寫入數(shù)據(jù)的過程中第n頁失敗則獲得一塊未使用塊,替換正在寫入塊,,并將失敗塊的前n-1頁復(fù)制到有效未使用塊,,并將第n頁及之后的數(shù)據(jù)寫入新塊[7,10,,12-15],。如圖2所示。
傳統(tǒng)的壞塊替換方法是將存儲出錯塊中的有效數(shù)據(jù)復(fù)制到新的替代塊中,,以增加額外的存儲時間開銷來保證數(shù)據(jù)存儲的正確性,。若在存儲塊的尾部出錯,那么將復(fù)制出錯塊近一塊的數(shù)據(jù)到替代塊中,,這大大降低了存儲的速率,。在整個存儲過程中,,由于出錯塊出錯所在的頁數(shù)不同,將會出現(xiàn)存儲速率抖動,。星載高速存儲器不允許存儲速率的抖動,,否則將可能出現(xiàn)數(shù)據(jù)的丟失。
2.2 動態(tài)壞塊管理
動態(tài)壞塊管理[2,,4-5,,13]將存儲空間分為4個區(qū):數(shù)據(jù)存儲區(qū)、交換塊區(qū),、替換(保留)塊區(qū)[10,,15-16]和壞塊區(qū)。其思想是在存儲器使用過程中出現(xiàn)壞塊,,采用動態(tài)方式標(biāo)記壞塊,,將壞塊加入壞塊映射區(qū),從替換(保留)塊區(qū)選擇有效未使用塊對壞塊進(jìn)行替換,,并更新邏輯-物理塊地址映射表,。若對已寫入數(shù)據(jù)塊修改,需將整個存儲塊的數(shù)據(jù)讀到存儲控制器,,對其數(shù)據(jù)進(jìn)行修改,然后將修改后的數(shù)據(jù)寫入到交換塊區(qū)的存儲塊,,最后更新邏輯-物理塊地址映射表[10,,13]。
動態(tài)壞塊管理對已寫入數(shù)據(jù)的修改方式,,比直接在原存儲塊中寫入速率高,。星載高速大容量存儲器只對有效載荷數(shù)據(jù)存儲,不對數(shù)據(jù)進(jìn)行修改,。同時,,存儲器采用四級流水存儲技術(shù),并對不同的有效載荷分文件進(jìn)行鏈?zhǔn)酱鎯?。因此,,動態(tài)壞塊管理的方法不適合星載高速大容量存儲管理。
2.3 異步壞塊管理
異步壞塊管理[6]是基于嵌入式文件系統(tǒng)實現(xiàn)讀,、寫,、擦除等請求的壞塊管理緩沖層。文件系統(tǒng)發(fā)出讀,、寫,、擦除等請求,獨立運(yùn)行的異步壞塊管理進(jìn)程將這些請求緩沖到隊列,,并直接向文件系統(tǒng)返回請求執(zhí)行成功狀態(tài),。異步壞塊管理進(jìn)程在響應(yīng)寫請求時,,將其他讀、寫,、擦除請求阻塞,,直到此次寫請求完成為止。當(dāng)執(zhí)行寫請求出現(xiàn)壞塊時,,異步壞塊管理進(jìn)程將復(fù)制已寫入壞塊的數(shù)據(jù)到替代塊中,,并將請求緩沖隊列中相應(yīng)寫請求的數(shù)據(jù)寫入到未使用塊,從而保證數(shù)據(jù)的完整性和正確性,。
異步壞塊管理中不能同時執(zhí)行讀,、寫、擦除三種類型的請求,,這將降低星載存儲器的數(shù)據(jù)存儲管理性能,;寫入數(shù)據(jù)出現(xiàn)壞塊,讀取已寫入壞塊數(shù)據(jù)將增加星載CPU運(yùn)行內(nèi)存資源消耗,;異步壞塊管理是一種基于嵌入式文件系統(tǒng)的管理算法,,星載存儲器不宜采用不成熟的星載文件系統(tǒng)技術(shù)。因此,,星載高速大容量存儲器不能采用異步壞塊管理方法,。
3 文件化壞塊管理
3.1 塊狀態(tài)信息存儲
星載高速大容量存儲器,F(xiàn)PGA和CPU協(xié)調(diào)配合共同控制管理數(shù)據(jù)存儲,。存儲器塊狀態(tài)信息存儲在每個塊的空余區(qū),,當(dāng)系統(tǒng)第一次啟動時,F(xiàn)PGA掃描存儲器中所有塊空余區(qū),,獲取所有塊狀態(tài)信息,,并由FPGA組建OBAT(Original Block Allocate Table)存儲到掉電非易失型存儲器MRAM,再由CPU將OBAT從MRAM中讀到CPU運(yùn)行內(nèi)存,,最后由CPU組建成IBAT(Index Block Allocate Table),,并將組建好的IBAT寫回MRAM。系統(tǒng)正常運(yùn)行過程中,,存儲塊狀態(tài)發(fā)生改變,,F(xiàn)GPA修改相應(yīng)塊空余區(qū),并實時維護(hù)MRAM中的IBAT表,。這樣的存儲機(jī)制,,能夠保證大容量存儲管理系統(tǒng)快速可靠的啟動。系統(tǒng)正常斷電,,將CPU運(yùn)行內(nèi)存中的IBAT寫回MRAM,,系統(tǒng)重啟時,CPU直接從MRAM快速讀取IBAT即可,。當(dāng)系統(tǒng)異常斷電啟動,,F(xiàn)PGA校驗MRAM中的數(shù)據(jù),,若校驗成功,CPU直接從MRAM中快速讀取IBAT表即可,;若校驗失敗,,系統(tǒng)的啟動過程和第一次啟動過程一樣。 因此,,系統(tǒng)只是第一次啟動和系統(tǒng)異常斷電校驗失敗時的啟動時間較長,。OBAT表和IBAT表分別如表1、表2所示,。
表1,、表2中:(1)塊狀態(tài)表示正常寫入塊、正常替代塊,、正常失敗塊,、替代失敗塊、未使用塊和無效塊,。(2)塊尾頁地址,,表示塊的正常寫入頁地址。(3)文件號,,表示不同有效載荷,。(4)本文件內(nèi)塊計數(shù),表示該文件已經(jīng)寫入的塊數(shù),。(5)本文件下一流水級指針,,即下一流水級的塊序號。
3.2 文件化組織結(jié)構(gòu)
星載高速大容量存儲器,,為解決低速寫入單塊速率的限制,采用四級流水并行寫入的方式,,以提高系統(tǒng)的存儲速率,。同時,為了對多有效載荷的管理,,存儲系統(tǒng)采用文件化的管理方式,。所謂文件化管理,即根據(jù)不同的有效載荷分不同的文件對其進(jìn)行存儲,,將未使用塊根據(jù)四個流水級分為四個文件進(jìn)行管理,,以及無效塊作為一個文件進(jìn)行管理。
存儲器系統(tǒng)第一次啟動,,F(xiàn)PGA從塊的空余區(qū)掃描塊狀態(tài)組織成OBAT結(jié)構(gòu)存放于MRAM中,,CPU從MRAM讀取OBAT到內(nèi)存的一塊連續(xù)存儲空間,并由OBAT組建成IBAT,,也是一個文件化的過程,。其OBAT變?yōu)镮BAT,,文件化的過程為:(1)根據(jù)塊狀態(tài)、流水級和文件號分為不同的塊組,;(2)針對各個有效載荷文件,,根據(jù)OBAT中的本文件內(nèi)塊計數(shù)按照從小到大進(jìn)行排序;(3)各有效載荷文件根據(jù)排序結(jié)果,,將OBAT中的塊計數(shù)的存儲位置修改為指向下一流水級的指針,,即塊序號。分流水級的未使用塊和無效塊無需排序,,直接將其修改為后續(xù)的塊序號,。
OBAT組建成IBAT,得到文件化鏈?zhǔn)酱鎯Y(jié)構(gòu)(如圖3所示)后,,原存放OBAT的連續(xù)內(nèi)存空間大小不改變,,相應(yīng)塊狀態(tài)信息物理位置及序號不變,只是在內(nèi)存中增加了相應(yīng)文件的頭信息(文件ID,、文件大小,、指向第一塊塊序號指針等)。分流水級的未使用塊文件中指針指向本流水級塊序號,,無效塊文件中指針不分流水級,,直接指向無效塊序號。
3.3 文件化壞塊替換
星載高速大容量存儲器,,CPU向FPGA提供有效的未使用塊,,F(xiàn)PGA采用四級流水存儲技術(shù)向未使用塊中寫入數(shù)據(jù),二者協(xié)同配合,,共同實現(xiàn)對有效載荷數(shù)據(jù)高速有效穩(wěn)定的存儲,。FPGA內(nèi)部為每個有效載荷文件創(chuàng)建四級流水乒乓緩沖塊空間,即存放8個塊序號,。CPU和FPGA一致,,創(chuàng)建同樣類似的緩沖塊空間。以某一有效載荷向Flash中寫入數(shù)據(jù)為例:
(1)系統(tǒng)啟動初始化,,CPU為相應(yīng)文件分配四個流水級的未使用塊序號ABCD,,并發(fā)送給FPGA。如表3所示,。
(2)FPGA將ABCD移入正在寫入塊緩沖空間,,并向CPU申請第0流水級的未使用塊。CPU收到FPGA的申請后,,首先將ABCD添加到文件鏈表,,其次將ABCD移入正在寫入塊緩沖,最后分別從四個流水級未使用塊文件中快速獲得未使用塊EFGH發(fā)送給FPGA,。FPGA將獲得的未使用塊添加到相應(yīng)緩沖空間,,并開始對A塊寫入數(shù)據(jù),。如表4所示。
(3)當(dāng)FGPA再次向CPU正常申請第0水級流未使用塊時,,和上一步驟操作類似,。如表5所示。
(4)若FPGA向第1流水級塊F寫入出錯,,F(xiàn)GPA將J直接作為其替代塊,,將J放入到正在寫入塊緩沖。FGPA向CPU申請?zhí)娲鷫K,,并告知出錯塊的有效尾頁地址,。CPU收到申請后,首先設(shè)置塊F正常失敗狀態(tài)和有效尾頁地址,,其次將J作為F的替代塊,,并將J添加到文件鏈表之后,設(shè)置J的塊狀態(tài)為正常替代塊,,最后從第1流水級未使用塊文件中快速申請塊M,,如表6所示。
(5)當(dāng)后續(xù)正常申請時,,與步驟(2)和(3)的操作相同,。
當(dāng)出現(xiàn)出錯塊時,保持出錯塊中已寫入數(shù)據(jù)不變,,從出錯塊的出錯頁地址開始向替代塊中寫入數(shù)據(jù),,避免了數(shù)據(jù)存儲過程中的數(shù)據(jù)抖動,保持一定的速率寫入數(shù)據(jù),。對于任何一個流水級的塊出錯,,都能夠得到快速高效的響應(yīng)。星載存儲器采用與寫入數(shù)據(jù)時相對應(yīng)的算法,,對存儲塊中的數(shù)據(jù)進(jìn)行回放,。
4 結(jié)論
傳統(tǒng)壞塊管理方法是將已寫入的數(shù)據(jù)復(fù)制到緩沖空間中,增大了緩沖空間資源占用,;將已寫入壞塊數(shù)據(jù)重新寫入未使用塊的方式,造成數(shù)據(jù)存儲速率抖動,;只針對單流水級存儲塊實施壞塊管理,。
文件化壞塊管理采用四倍于單塊寫入速率的四級流水存儲技術(shù),能夠同時對多個有效載荷產(chǎn)生的數(shù)據(jù)分文件進(jìn)行管理,。文件化壞塊管理將已寫入數(shù)據(jù)的壞塊保留在有效載荷文件存儲塊鏈表中,,從相應(yīng)流水級未使用塊文件快速獲取新塊作為其替代塊,避免了數(shù)據(jù)存儲速率抖動,,保證了星載高速大容量存儲器高效穩(wěn)定運(yùn)行,。此方案已在某型號任務(wù)中得到驗證和應(yīng)用,。
參考文獻(xiàn)
[1] 徐永剛,任國強(qiáng),,吳欽章,,等.NAND Flash圖像記錄系統(tǒng)壞塊管理關(guān)鍵技術(shù)[J].紅外與激光工程,2012,,41(4):1101-1106.
[2] 喬立巖,,張鵬,魏德寶,,等.一種新型NAND Flash壞塊管理算法的研究與實現(xiàn)[J].電子測量技術(shù),,2015,38(11):37-41.
[3] ASHRAF M N,,DASTUR J.Software based nand flash management techniques[C].2009 International Conference on Computing, Engineering and Information,,2009:168-171.
[4] 張小萌.NAND Flash存儲管理的設(shè)計與實現(xiàn)[D].廣州:廣東工業(yè)大學(xué),2014.
[5] 張鵬.NAND Flash壞塊管理算法研究與實現(xiàn)[D].哈爾濱:哈爾濱工業(yè)大學(xué),,2015.
[6] MAHESH S,SAUGATA D P.Asynchronous bad block management in nand flash memory[P/OL]:United States,,US 2013/0205072 A1.(2013-8-8)[2017-4-5].http://kns.cnki.net/kns/detail/detail.aspx?FileName=US9483395(B2)&DbName=SOPD2016.
[7] PELEATO B,TABRIZI H,,AGARWAL R,,et al.Ber-based wear leveling and bad block management for nand flash[C].2015 IEEE International Conference on Communications(icc),2015:295-300.
[8] MA Y,,DU H,,YANG S.Independent bad block management for mass storage flash memory arrays[C].2015 6th IEEE International Conference on Software Engineering and Service Science(icsess),2015:388-391.
[9] 趙亞慧,,金龍旭,,陶宏江,等.基于NAND Flash的高速大容量存儲系統(tǒng)的設(shè)計[J].電光與控制,,2016,,23(5):71-75,79.
[10] SUPRIYA K P.Study of bad block management and wear leveling in nand flash memories[J].International Journal of Research in Engineering and Technology,,2013,,2(10):284-288.
[11] 閆夢婷,安軍社,江源源.實現(xiàn)流水存儲及壞塊處理的Flash控制器設(shè)計[J].電子設(shè)計工程,,2016,,24(16):50-53.
[12] Samsungelectronics.1Gx8bit-2Gx8bit Nand flash memory_K9F8G08UXM[EB/OL].Samsung Corporation.2006-9-26(2007-3-31)[2017-4-6].https://wenku.baidu.com/view/96a00d00bed5b9f3f90f1cbe.html.
[13] 邢旺,郁聰沖.數(shù)據(jù)記錄器中NAND Flash的壞塊管理方法[J].艦船電子工程,,2016,,36(8):132-134,160.
[14] 舒文麗,吳云峰,,趙啟義,,等.NAND Flash存儲的壞塊管理方法[J].電子器件,2011,,34(5):580-583.
[15] 寧飛.大容量存儲中NAND Flash壞塊的管理方法[J].電子測試,,2010,38(12):64-68.
[16] 湯瑞.一種基于NAND Flash固態(tài)硬盤的壞塊管理方法[J].電子科技,,2014,,27(8):40-42.
作者信息:
楊志勇1,2,,董振興1,,2,朱 巖1,,2,,董文濤1
(1.中國科學(xué)院國家空間科學(xué)中心,北京100190,;2.中國科學(xué)院大學(xué),,北京100190)