文獻(xiàn)標(biāo)識碼: A
DOI:10.16157/j.issn.0258-7998.2017.06.003
中文引用格式: 楊志勇,董振興,朱巖,等. 星載高速大容量存儲器文件化壞塊管理設(shè)計(jì)[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)、工作溫度寬等特點(diǎn),是星載高速大容量存儲器的理想存儲介質(zhì)[1-3]。但NAND Flash在空間高能粒子輻射、極高低溫環(huán)境下,極易出現(xiàn)位翻轉(zhuǎn)錯(cuò)誤[4-5],采用錯(cuò)誤檢測糾正(Error Correcting Code,ECC)技術(shù)對其糾錯(cuò)可一定程度上保證數(shù)據(jù)的正確性[6-8]。然而,NAND Flash受制造工藝限制,出廠時(shí)存在一定數(shù)量隨機(jī)分布的壞塊[5,9-10],并且隨著時(shí)間的推移,F(xiàn)lash達(dá)到擦除極限,壞塊數(shù)量將會不斷增多。壞塊的產(chǎn)生將影響存儲器的存儲速率和存儲信息數(shù)據(jù)的正確性、完整性,甚至決定航天探測任務(wù)的成敗。因此,高效、可靠的壞塊管理對星載高速大容量存儲器具有重大意義。
1 星載存儲器背景
隨著空間探測任務(wù)的發(fā)展,有效載荷產(chǎn)生的數(shù)據(jù)帶寬急劇增大,存儲速率同樣需要提高,然而NAND Flash固有寫操作特性降低了有效吞吐率。Flash寫入數(shù)據(jù)分為兩個(gè)過程,首先將命令、地址及數(shù)據(jù)以字節(jié)方式寫入芯片內(nèi)部緩存(即“加載”過程);其次芯片需要一個(gè)內(nèi)部編程過程,才可確定編程是否成功[11-12]。編程過程中,芯片不響應(yīng)外部命令。星載高速大容量存儲器針對Flash寫操作特點(diǎn),采用四級流水[9,11]存儲技術(shù),充分利用芯片編程時(shí)間加載其他芯片,實(shí)現(xiàn)存儲區(qū)全速無間斷數(shù)據(jù)寫入。圖1為四級流水線寫操作過程。
空間探測有效載荷不斷增多,各個(gè)有效載荷所產(chǎn)生的數(shù)據(jù)量參差不齊。傳統(tǒng)單分區(qū)環(huán)形隊(duì)列順序?qū)懭氲拇鎯芾矸绞?從前往后存儲,待至存儲空間尾部,擦除存儲空間首部已寫入塊,使其變?yōu)槲词褂脡K,以便尾部空間存滿后,再次從存儲空間首部繼續(xù)存儲)不能適應(yīng)新的需求。若存在兩種不同速率的有效載荷同時(shí)產(chǎn)生數(shù)據(jù):高速設(shè)備產(chǎn)生的數(shù)據(jù)存儲滿存儲空間尾部后,環(huán)形隊(duì)列順序?qū)懭氲拇鎯Ψ绞綄⒉脸撞靠臻g;低速設(shè)備所存儲的數(shù)據(jù)很少,并且由于回放數(shù)據(jù)優(yōu)先級的原因,存在低速設(shè)備的數(shù)據(jù)未及時(shí)回放,卻被擦除以得到高速設(shè)備存儲新數(shù)據(jù)所需要的未使用塊。
因此,傳統(tǒng)的環(huán)形隊(duì)列順序?qū)懭氲拇鎯芾矸绞剑荒苓m用于多載荷。本文所提到的星載高速大容量存儲器,采用的是四級流水存儲技術(shù),每一個(gè)有效載荷分一個(gè)文件的方式進(jìn)行鏈?zhǔn)酱鎯芾怼?/p>
2 傳統(tǒng)壞塊管理
2.1 壞塊替換
存儲器初始化時(shí),讀取相應(yīng)的塊狀態(tài)信息,構(gòu)建壞塊表。數(shù)據(jù)存儲時(shí),根據(jù)壞塊表中信息,跳過已有的壞塊。若在存儲塊中寫入數(shù)據(jù)的過程中第n頁失敗則獲得一塊未使用塊,替換正在寫入塊,并將失敗塊的前n-1頁復(fù)制到有效未使用塊,并將第n頁及之后的數(shù)據(jù)寫入新塊[7,10,12-15]。如圖2所示。
傳統(tǒng)的壞塊替換方法是將存儲出錯(cuò)塊中的有效數(shù)據(jù)復(fù)制到新的替代塊中,以增加額外的存儲時(shí)間開銷來保證數(shù)據(jù)存儲的正確性。若在存儲塊的尾部出錯(cuò),那么將復(fù)制出錯(cuò)塊近一塊的數(shù)據(jù)到替代塊中,這大大降低了存儲的速率。在整個(gè)存儲過程中,由于出錯(cuò)塊出錯(cuò)所在的頁數(shù)不同,將會出現(xiàn)存儲速率抖動(dòng)。星載高速存儲器不允許存儲速率的抖動(dòng),否則將可能出現(xiàn)數(shù)據(jù)的丟失。
2.2 動(dòng)態(tài)壞塊管理
動(dòng)態(tài)壞塊管理[2,4-5,13]將存儲空間分為4個(gè)區(qū):數(shù)據(jù)存儲區(qū)、交換塊區(qū)、替換(保留)塊區(qū)[10,15-16]和壞塊區(qū)。其思想是在存儲器使用過程中出現(xiàn)壞塊,采用動(dòng)態(tài)方式標(biāo)記壞塊,將壞塊加入壞塊映射區(qū),從替換(保留)塊區(qū)選擇有效未使用塊對壞塊進(jìn)行替換,并更新邏輯-物理塊地址映射表。若對已寫入數(shù)據(jù)塊修改,需將整個(gè)存儲塊的數(shù)據(jù)讀到存儲控制器,對其數(shù)據(jù)進(jìn)行修改,然后將修改后的數(shù)據(jù)寫入到交換塊區(qū)的存儲塊,最后更新邏輯-物理塊地址映射表[10,13]。
動(dòng)態(tài)壞塊管理對已寫入數(shù)據(jù)的修改方式,比直接在原存儲塊中寫入速率高。星載高速大容量存儲器只對有效載荷數(shù)據(jù)存儲,不對數(shù)據(jù)進(jìn)行修改。同時(shí),存儲器采用四級流水存儲技術(shù),并對不同的有效載荷分文件進(jìn)行鏈?zhǔn)酱鎯ΑR虼?,?dòng)態(tài)壞塊管理的方法不適合星載高速大容量存儲管理。
2.3 異步壞塊管理
異步壞塊管理[6]是基于嵌入式文件系統(tǒng)實(shí)現(xiàn)讀、寫、擦除等請求的壞塊管理緩沖層。文件系統(tǒng)發(fā)出讀、寫、擦除等請求,獨(dú)立運(yùn)行的異步壞塊管理進(jìn)程將這些請求緩沖到隊(duì)列,并直接向文件系統(tǒng)返回請求執(zhí)行成功狀態(tài)。異步壞塊管理進(jìn)程在響應(yīng)寫請求時(shí),將其他讀、寫、擦除請求阻塞,直到此次寫請求完成為止。當(dāng)執(zhí)行寫請求出現(xiàn)壞塊時(shí),異步壞塊管理進(jìn)程將復(fù)制已寫入壞塊的數(shù)據(jù)到替代塊中,并將請求緩沖隊(duì)列中相應(yīng)寫請求的數(shù)據(jù)寫入到未使用塊,從而保證數(shù)據(jù)的完整性和正確性。
異步壞塊管理中不能同時(shí)執(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)信息存儲在每個(gè)塊的空余區(qū),當(dāng)系統(tǒng)第一次啟動(dòng)時(shí),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ū),并實(shí)時(shí)維護(hù)MRAM中的IBAT表。這樣的存儲機(jī)制,能夠保證大容量存儲管理系統(tǒng)快速可靠的啟動(dòng)。系統(tǒng)正常斷電,將CPU運(yùn)行內(nèi)存中的IBAT寫回MRAM,系統(tǒng)重啟時(shí),CPU直接從MRAM快速讀取IBAT即可。當(dāng)系統(tǒng)異常斷電啟動(dòng),F(xiàn)PGA校驗(yàn)MRAM中的數(shù)據(jù),若校驗(yàn)成功,CPU直接從MRAM中快速讀取IBAT表即可;若校驗(yàn)失敗,系統(tǒng)的啟動(dòng)過程和第一次啟動(dòng)過程一樣。 因此,系統(tǒng)只是第一次啟動(dòng)和系統(tǒng)異常斷電校驗(yàn)失敗時(shí)的啟動(dòng)時(shí)間較長。OBAT表和IBAT表分別如表1、表2所示。
表1、表2中:(1)塊狀態(tài)表示正常寫入塊、正常替代塊、正常失敗塊、替代失敗塊、未使用塊和無效塊。(2)塊尾頁地址,表示塊的正常寫入頁地址。(3)文件號,表示不同有效載荷。(4)本文件內(nèi)塊計(jì)數(shù),表示該文件已經(jīng)寫入的塊數(shù)。(5)本文件下一流水級指針,即下一流水級的塊序號。
3.2 文件化組織結(jié)構(gòu)
星載高速大容量存儲器,為解決低速寫入單塊速率的限制,采用四級流水并行寫入的方式,以提高系統(tǒng)的存儲速率。同時(shí),為了對多有效載荷的管理,存儲系統(tǒng)采用文件化的管理方式。所謂文件化管理,即根據(jù)不同的有效載荷分不同的文件對其進(jìn)行存儲,將未使用塊根據(jù)四個(gè)流水級分為四個(gè)文件進(jìn)行管理,以及無效塊作為一個(gè)文件進(jìn)行管理。
存儲器系統(tǒng)第一次啟動(dòng),F(xiàn)PGA從塊的空余區(qū)掃描塊狀態(tài)組織成OBAT結(jié)構(gòu)存放于MRAM中,CPU從MRAM讀取OBAT到內(nèi)存的一塊連續(xù)存儲空間,并由OBAT組建成IBAT,也是一個(gè)文件化的過程。其OBAT變?yōu)镮BAT,文件化的過程為:(1)根據(jù)塊狀態(tài)、流水級和文件號分為不同的塊組;(2)針對各個(gè)有效載荷文件,根據(jù)OBAT中的本文件內(nèi)塊計(jì)數(shù)按照從小到大進(jìn)行排序;(3)各有效載荷文件根據(jù)排序結(jié)果,將OBAT中的塊計(jì)數(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é)同配合,共同實(shí)現(xiàn)對有效載荷數(shù)據(jù)高速有效穩(wěn)定的存儲。FPGA內(nèi)部為每個(gè)有效載荷文件創(chuàng)建四級流水乒乓緩沖塊空間,即存放8個(gè)塊序號。CPU和FPGA一致,創(chuàng)建同樣類似的緩沖塊空間。以某一有效載荷向Flash中寫入數(shù)據(jù)為例:
(1)系統(tǒng)啟動(dòng)初始化,CPU為相應(yīng)文件分配四個(gè)流水級的未使用塊序號ABCD,并發(fā)送給FPGA。如表3所示。
(2)FPGA將ABCD移入正在寫入塊緩沖空間,并向CPU申請第0流水級的未使用塊。CPU收到FPGA的申請后,首先將ABCD添加到文件鏈表,其次將ABCD移入正在寫入塊緩沖,最后分別從四個(gè)流水級未使用塊文件中快速獲得未使用塊EFGH發(fā)送給FPGA。FPGA將獲得的未使用塊添加到相應(yīng)緩沖空間,并開始對A塊寫入數(shù)據(jù)。如表4所示。
(3)當(dāng)FGPA再次向CPU正常申請第0水級流未使用塊時(shí),和上一步驟操作類似。如表5所示。
(4)若FPGA向第1流水級塊F寫入出錯(cuò),F(xiàn)GPA將J直接作為其替代塊,將J放入到正在寫入塊緩沖。FGPA向CPU申請?zhí)娲鷫K,并告知出錯(cuò)塊的有效尾頁地址。CPU收到申請后,首先設(shè)置塊F正常失敗狀態(tài)和有效尾頁地址,其次將J作為F的替代塊,并將J添加到文件鏈表之后,設(shè)置J的塊狀態(tài)為正常替代塊,最后從第1流水級未使用塊文件中快速申請塊M,如表6所示。
(5)當(dāng)后續(xù)正常申請時(shí),與步驟(2)和(3)的操作相同。
當(dāng)出現(xiàn)出錯(cuò)塊時(shí),保持出錯(cuò)塊中已寫入數(shù)據(jù)不變,從出錯(cuò)塊的出錯(cuò)頁地址開始向替代塊中寫入數(shù)據(jù),避免了數(shù)據(jù)存儲過程中的數(shù)據(jù)抖動(dòng),保持一定的速率寫入數(shù)據(jù)。對于任何一個(gè)流水級的塊出錯(cuò),都能夠得到快速高效的響應(yīng)。星載存儲器采用與寫入數(shù)據(jù)時(shí)相對應(yīng)的算法,對存儲塊中的數(shù)據(jù)進(jìn)行回放。
4 結(jié)論
傳統(tǒng)壞塊管理方法是將已寫入的數(shù)據(jù)復(fù)制到緩沖空間中,增大了緩沖空間資源占用;將已寫入壞塊數(shù)據(jù)重新寫入未使用塊的方式,造成數(shù)據(jù)存儲速率抖動(dòng);只針對單流水級存儲塊實(shí)施壞塊管理。
文件化壞塊管理采用四倍于單塊寫入速率的四級流水存儲技術(shù),能夠同時(shí)對多個(gè)有效載荷產(chǎn)生的數(shù)據(jù)分文件進(jìn)行管理。文件化壞塊管理將已寫入數(shù)據(jù)的壞塊保留在有效載荷文件存儲塊鏈表中,從相應(yīng)流水級未使用塊文件快速獲取新塊作為其替代塊,避免了數(shù)據(jù)存儲速率抖動(dòng),保證了星載高速大容量存儲器高效穩(wěn)定運(yùn)行。此方案已在某型號任務(wù)中得到驗(yàn)證和應(yīng)用。
參考文獻(xiàn)
[1] 徐永剛,任國強(qiáng),吳欽章,等.NAND Flash圖像記錄系統(tǒng)壞塊管理關(guān)鍵技術(shù)[J].紅外與激光工程,2012,41(4):1101-1106.
[2] 喬立巖,張鵬,魏德寶,等.一種新型NAND Flash壞塊管理算法的研究與實(shí)現(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è)計(jì)與實(shí)現(xiàn)[D].廣州:廣東工業(yè)大學(xué),2014.
[5] 張鵬.NAND Flash壞塊管理算法研究與實(shí)現(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ì)[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] 閆夢婷,安軍社,江源源.實(shí)現(xiàn)流水存儲及壞塊處理的Flash控制器設(shè)計(jì)[J].電子設(shè)計(jì)工程,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)