基于FLASH星載存儲(chǔ)器的高效管理研究
為了提高存儲(chǔ)速率,引入并行擴(kuò)展和流水線操作的概念,將存儲(chǔ)陣列劃分為流水線組,每組多片芯片構(gòu)成并行結(jié)構(gòu)。并行擴(kuò)展的概念較為直接,由于單片FLASH 芯片的數(shù)據(jù)總線 位寬較小,因而將多片芯片的IO 端口進(jìn)行并行擴(kuò)展,而所有控制信號(hào)直接連接在一起,這 樣每組芯片可以看作一個(gè)整體進(jìn)行控制,實(shí)現(xiàn)了數(shù)據(jù)的并行操作。并行N 片的寬總線結(jié)構(gòu)數(shù)據(jù)處理能力可以達(dá)到單片芯片的N 倍。另外由于FLASH 芯片為串行操作接口,數(shù)據(jù)的寫入需要經(jīng)過數(shù)據(jù)加載、芯片自動(dòng)編程、狀態(tài)讀取的過程才能執(zhí)行下一次的寫入操作,因而寫入性能較差??紤]到芯片自動(dòng)編程過程的時(shí)間較長且不需要外部干預(yù),可以借鑒流水線的設(shè)計(jì)思想,利用這段空閑時(shí)間對(duì)其他組芯片進(jìn)行控制,提高數(shù)據(jù)吞吐率。流水線操作示意圖如 圖2 所示。假設(shè)數(shù)據(jù)加載時(shí)間為Tload,芯片自動(dòng)編程時(shí)間為Tprog,狀態(tài)讀取時(shí)間為 Tcheck,采用M 級(jí)流水線完成一次流水操作的總時(shí)間不超過(Tload+Tcheck)*M+Tprog, 相比不采用流水線操作縮短了(M-1)*Tprog 時(shí)間,提高了數(shù)據(jù)吞吐率。具體的總線寬度以及 流水線級(jí)數(shù)設(shè)置可以根據(jù)具體應(yīng)用需求確定。
最后,為了提高數(shù)據(jù)的可靠性,在 FLASH 控制模塊中增加數(shù)據(jù)檢錯(cuò)糾錯(cuò)處理模塊。
圖 2 流水線操作示意圖
3. YAFFS2 分析與改進(jìn)
YAFFS2 具有優(yōu)良的文件管理特性,但是畢竟YAFFS2 是針對(duì)商用領(lǐng)域設(shè)計(jì)的文件系統(tǒng),對(duì)于空間應(yīng)用并沒有特殊考慮,直接應(yīng)用有其局限性。本節(jié)針對(duì)空間存儲(chǔ)器的特點(diǎn),對(duì) YAFFS2 不適合空間應(yīng)用的方面提出具體的修改方案,使得修改后的文件系統(tǒng)能夠滿足空間 數(shù)據(jù)存儲(chǔ)的需求。
3.1 硬件結(jié)構(gòu)適應(yīng)性
YAFFS2 文件系統(tǒng)只是針對(duì)單片F(xiàn)LASH 設(shè)計(jì)的系統(tǒng),對(duì)于FLASH 存儲(chǔ)陣列的結(jié)構(gòu)沒有 考慮,因而不適宜于直接在陣列結(jié)構(gòu)上面使用,需要進(jìn)行修改。
并行結(jié)構(gòu)的處理比較簡單,將同組內(nèi)的所有芯片當(dāng)作整體統(tǒng)一進(jìn)行處理即可。這樣的設(shè)計(jì)簡單,但也會(huì)帶來一些額外的問題需要注意。比如當(dāng)某一片芯片出現(xiàn)壞塊的時(shí)候,組內(nèi)其他芯片相應(yīng)塊也需標(biāo)記為壞塊,造成一定的存儲(chǔ)空間浪費(fèi)。另外讀取該組狀態(tài)的時(shí)候需要同時(shí)兼顧并行多片的狀態(tài)。這些問題需要在文件系統(tǒng)設(shè)計(jì)中進(jìn)行相應(yīng)的修改。 流水線的設(shè)計(jì)較為復(fù)雜。由于YAFFS2 的存儲(chǔ)區(qū)管理是基于單片芯片的,因而在多級(jí)流 水線結(jié)構(gòu)中,每級(jí)流水線需要單獨(dú)維護(hù)自己的存儲(chǔ)區(qū),比如存儲(chǔ)塊的分配、壞塊的標(biāo)記等。數(shù)據(jù)寫入的時(shí)候首先需要選擇流水線級(jí),在流水線級(jí)內(nèi)部再采用現(xiàn)有的存儲(chǔ)區(qū)管理方式。
3.2 壞塊管理策略
FLASH 壞塊的類型可以分為初始?jí)膲K和使用時(shí)產(chǎn)生壞塊兩類,不同芯片廠家采用不同 的方式標(biāo)示初始?jí)膲K,用戶可以根據(jù)具體的芯片手冊(cè)進(jìn)行壞塊識(shí)別。三星NAND FLASH 通 過在每塊的第一頁或第二頁的第2048 字節(jié)寫入非0xFF 來標(biāo)示初始?jí)膲K,新產(chǎn)生的壞塊則 需要用戶自己進(jìn)行記錄。
壞塊管理的首要任務(wù)就是對(duì)壞塊進(jìn)行識(shí)別和標(biāo)記,并且對(duì)于壞塊盡量不再進(jìn)行擦寫操 作。YAFFS2 文件系統(tǒng)要求底層FLASH 驅(qū)動(dòng)提供壞塊識(shí)別和標(biāo)記的函數(shù),文件系統(tǒng)對(duì)這部分 功能并沒有實(shí)現(xiàn),也沒有要求具體的實(shí)現(xiàn)方式??紤]到存儲(chǔ)區(qū)的并行結(jié)構(gòu)特點(diǎn),本方案對(duì)新產(chǎn)生的壞塊也采用在該塊第一頁的第2048 字節(jié)寫入非0xFF 的方法進(jìn)行標(biāo)記。由于寫入或者擦除是對(duì)組內(nèi)并行多片芯片同時(shí)進(jìn)行操作,而這些芯片同時(shí)發(fā)生壞塊的概率可以認(rèn)為接近于0,因而對(duì)于壞塊的標(biāo)記總能夠成功寫入某個(gè)芯片。該方法將新產(chǎn)生壞塊和原始?jí)膲K進(jìn)行了統(tǒng)一,設(shè)計(jì)簡單并且不需要額外的存儲(chǔ)空間來存儲(chǔ)壞塊表,缺點(diǎn)是對(duì)于新產(chǎn)生的壞塊還有 一次寫入操作。
評(píng)論