欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于文件系統(tǒng)向NandFlash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置及方法

文檔序號(hào):6426584閱讀:215來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置及方法
技術(shù)領(lǐng)域
本發(fā)明涉及對(duì)Nand Flash (與非閃存)的訪問(wèn)技術(shù),特別涉及一種用于文件系統(tǒng) (本文全文所述的“文件系統(tǒng)”即是指“Nand Flash文件系統(tǒng)”)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置、以及一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法。
背景技術(shù)
Nand Flash由多個(gè)Block (塊)組成,每個(gè)Block又由多個(gè)Page (頁(yè))組成。其中,Block是對(duì)Nand Flash擦除的基本操作單位,Page是對(duì)Nand Flash讀或?qū)憰r(shí)的基本操作單位。實(shí)際應(yīng)用中,文件系統(tǒng)對(duì)Nand Flash的以Page為基本操作的讀和寫(xiě)、以及以 Block為基本操作單位的擦除,均需要通過(guò)驅(qū)動(dòng)Nand Flash硬件控制器(本文后續(xù)將“Nand Flash硬件控制器”簡(jiǎn)稱(chēng)為“硬件控制器”)來(lái)執(zhí)行。如圖1所示,在用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)中,驅(qū)動(dòng)層介于文件系統(tǒng)所在的軟件層以及硬件控制器所在的硬件層之間。驅(qū)動(dòng)層中提供了可被軟件層的文件系統(tǒng)調(diào)用的初始化模塊、讀模塊、寫(xiě)模塊、以及擦除模塊,這些模塊可通過(guò)驅(qū)動(dòng)層提供的軟件接口(圖1中未示出)與硬件層的硬件控制器交互。從而,初始化模塊可啟動(dòng)硬件控制器對(duì)Nand Flash的初始化、并向文件系統(tǒng)上報(bào)Nand Flash的信息(例如可供文件系統(tǒng)使用的訪問(wèn)空間等),讀模塊則可以驅(qū)動(dòng)硬件控制器執(zhí)行讀操作,寫(xiě)模塊則可以驅(qū)動(dòng)硬件控制器執(zhí)行寫(xiě)操作,擦除模塊則可以驅(qū)動(dòng)硬件控制器執(zhí)行擦除操作。實(shí)際應(yīng)用中,驅(qū)動(dòng)層中還設(shè)置有BufTerUlWg ),用于在讀模塊驅(qū)動(dòng)硬件控制器執(zhí)行讀操作的過(guò)程中暫存讀數(shù)據(jù)、在寫(xiě)模塊驅(qū)動(dòng)硬件控制器執(zhí)行寫(xiě)操作的過(guò)程中暫存寫(xiě)數(shù)據(jù)。在如圖1所示的架構(gòu)中,每一次執(zhí)行讀、寫(xiě)、擦除的過(guò)程都是由文件系統(tǒng)的軟件處理、驅(qū)動(dòng)層中相應(yīng)模塊的驅(qū)動(dòng)操作、以及硬件層的硬件操作以串行方式交替組成。其中,對(duì)于寫(xiě)過(guò)程來(lái)說(shuō),上述的串行方式會(huì)大大降低文件系統(tǒng)的寫(xiě)效率。具體參見(jiàn)圖2,文件系統(tǒng)對(duì)Nand Flash的一次寫(xiě)操作過(guò)程包括S201,文件系統(tǒng)準(zhǔn)備要寫(xiě)入Nand Flash的數(shù)據(jù);S202,文件系統(tǒng)對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行均衡算法處理;S203,文件系統(tǒng)對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行ECC (Error Correcting Code,錯(cuò)誤糾正碼) 計(jì)算;S204,文件系統(tǒng)調(diào)用驅(qū)動(dòng)層的寫(xiě)模塊。S205,寫(xiě)模塊在被文件系統(tǒng)調(diào)用后向硬件控制器發(fā)送寫(xiě)命令和寫(xiě)地址;S206,寫(xiě)模塊將來(lái)自文件系統(tǒng)的寫(xiě)數(shù)據(jù)存入至Buffer ;S207,寫(xiě)模塊啟動(dòng)硬件控制器開(kāi)始執(zhí)行寫(xiě)操作。S208,硬件控制器向Nand Flash發(fā)送寫(xiě)命令和寫(xiě)地址;S209,硬件控制器將Buffer中的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。S210,硬件控制器在寫(xiě)數(shù)據(jù)寫(xiě)入完成之后檢測(cè)Nand Flash是否由Busy (忙)狀態(tài)變?yōu)镽eady (準(zhǔn)備)狀態(tài)。S211,硬件控制器在檢測(cè)出Nand Flash由Busy變?yōu)镽eady狀態(tài)后從Nand Flash 獲取寫(xiě)狀態(tài)。S212,寫(xiě)模塊接收硬件控制器上報(bào)的寫(xiě)狀態(tài)、并塊判斷寫(xiě)狀態(tài)是否為成功,如果是,則跳轉(zhuǎn)至S213,否則跳轉(zhuǎn)至S214 ;S213,寫(xiě)模塊向文件系統(tǒng)返回0K、表示文件系統(tǒng)可繼續(xù)對(duì)下一次寫(xiě)進(jìn)行處理,然后跳轉(zhuǎn)至S215 ;S214,寫(xiě)模塊向文件系統(tǒng)返回ERR(錯(cuò)誤),然后跳轉(zhuǎn)至S215。S215,文件系統(tǒng)依據(jù)寫(xiě)模塊返回的OK或ERR判斷是否寫(xiě)成功,如果是則結(jié)束本次寫(xiě)過(guò)程、并可繼續(xù)對(duì)下一次寫(xiě)進(jìn)行處理,否則跳轉(zhuǎn)至S216 ;S216,文件系統(tǒng)進(jìn)行壞塊管理,然后結(jié)束本次寫(xiě)過(guò)程、并可繼續(xù)對(duì)下一次寫(xiě)進(jìn)行處理。從上述過(guò)程可以看出,文件系統(tǒng)在每次寫(xiě)過(guò)程中只需要在S201 S204執(zhí)行軟件處理、以及S215 S216執(zhí)行壞塊管理,并在驅(qū)動(dòng)層的驅(qū)動(dòng)操作和硬件控制器的硬件操作階段均處于等待狀態(tài)。在文件系統(tǒng)處于等待狀態(tài)的驅(qū)動(dòng)操作和硬件操作階段中,大部分耗時(shí)都集中在硬件操作階段;而在硬件操作階段中,檢測(cè)Nand Flash是否由Busy狀態(tài)變?yōu)镽eady狀態(tài)的耗時(shí)會(huì)占到硬件操作總耗時(shí)的73% 83%,因此,檢測(cè)Nand Flash是否由Busy狀態(tài)變?yōu)?Ready狀態(tài)就極大地增加了文件系統(tǒng)在寫(xiě)過(guò)程中的等待時(shí)間,進(jìn)而導(dǎo)致文件系統(tǒng)的寫(xiě)效率不高。

發(fā)明內(nèi)容
有鑒于此,本發(fā)明提供了一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置、以及一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法,能夠提高文件系統(tǒng)對(duì)Nand Flash 的寫(xiě)效率。本發(fā)明提供的一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置,該驅(qū)動(dòng)裝置位于文件系統(tǒng)與硬件控制器之間的驅(qū)動(dòng)層,該驅(qū)動(dòng)裝置包括初始化模塊,在初始化時(shí)將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間;索引存儲(chǔ)模塊,其中存放有壞塊索引表,所述壞塊索引表中記錄了訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊;寫(xiě)模塊,在被文件系統(tǒng)調(diào)用、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,以及,備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù),并在啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入后通知文件系統(tǒng)開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理;壞塊管理模塊,依據(jù)硬件控制器上報(bào)的Nand Flash的寫(xiě)狀態(tài)判斷當(dāng)前寫(xiě)成功或失敗,如果當(dāng)前寫(xiě)成功則通知寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě),否則調(diào)用讀模塊和寫(xiě)模塊;讀模塊,在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù);寫(xiě)模塊還在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入;壞塊管理模塊還在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)所寫(xiě)入的塊作為對(duì)應(yīng)塊在所述壞塊索引表中增加記錄,并通知寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě)。訪問(wèn)空間中的總塊數(shù)為Nand Flash的最小合法塊數(shù)量減1。保留空間中包含有Nand Flash的首塊,保留空間中的所述首塊用于備份所述壞塊索引表、其余塊用作訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊。所述壞塊索引表中包含有每一所述其余塊對(duì)應(yīng)的表項(xiàng),每一表項(xiàng)中包含有表示對(duì)應(yīng)的所述其余塊是否被使用的標(biāo)記位、以及映射在對(duì)應(yīng)的所述其余塊的壞塊標(biāo)識(shí)。壞塊管理模塊如果在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)的寫(xiě)入過(guò)程中,接收到硬件控制器上報(bào)的表示寫(xiě)失敗的寫(xiě)狀態(tài),則進(jìn)一步重新調(diào)用寫(xiě)模塊、使寫(xiě)模塊重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。進(jìn)一步包括第一 Buffer和第二 Buffer以及第三Buffer,其中寫(xiě)模塊將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)存放至第一 Buffer、并在第二 Buffer中備份;讀模塊在被壞塊管理模塊調(diào)用后所讀取的數(shù)據(jù)存放至第三Buffer ;壞塊管理模塊進(jìn)一步在當(dāng)前寫(xiě)失敗時(shí),將第二 Buffer中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至第三Buffer與讀取的數(shù)據(jù)合并。讀模塊進(jìn)一步在被文件系統(tǒng)調(diào)用后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊;以及,該驅(qū)動(dòng)裝置進(jìn)一步包括擦除模塊,在被文件系統(tǒng)調(diào)用后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。本發(fā)明提供的一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法,該驅(qū)動(dòng)方法應(yīng)用于文件系統(tǒng)與硬件控制器之間的驅(qū)動(dòng)層,其特征在于,該驅(qū)動(dòng)方法包括aO、在初始化時(shí)將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間,以及,在驅(qū)動(dòng)層設(shè)置壞塊索引表,所述壞塊索引表中記錄了訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊;al、在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)寫(xiě)操作、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,以及,備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù),并在啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入后通知文件系統(tǒng)開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理;a4、依據(jù)硬件控制器上報(bào)的Nand Flash的寫(xiě)狀態(tài)判斷當(dāng)前寫(xiě)成功或失敗,如果當(dāng)前寫(xiě)成功則確認(rèn)能夠開(kāi)始新一次的寫(xiě),否則執(zhí)行步驟a5 ;a5、啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù);
a6、啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入;a7、在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)所寫(xiě)入的塊作為對(duì)應(yīng)塊在所述壞塊索引表中增加記錄,并確認(rèn)能夠開(kāi)始新一次的寫(xiě)。訪問(wèn)空間中的總塊數(shù)為Nand Flash的最小合法塊數(shù)量減1。保留空間中包含有Nand Flash的首塊,保留空間中的所述首塊用于備份所述壞塊索引表、其余塊用作訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊。所述壞塊索引表中包含有每一所述其余塊對(duì)應(yīng)的表項(xiàng),每一表項(xiàng)中包含有表示對(duì)應(yīng)的所述其余塊是否被使用的標(biāo)記位、以及映射在對(duì)應(yīng)的所述其余塊的壞塊標(biāo)識(shí)。所述步驟a6中,如果在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)的寫(xiě)入過(guò)程中,接收到硬件控制器上報(bào)的表示寫(xiě)失敗的寫(xiě)狀態(tài),則進(jìn)一步重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。該方法進(jìn)一步在驅(qū)動(dòng)層設(shè)置第一 Buffer和第二 Buffr以及第三Buffer,其中所述步驟al中將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)存放至第一 Buffer、并在第二 Buffer中備份;所述步驟a5中將讀取的數(shù)據(jù)存放至第三Buffer ;所述步驟a5之后、步驟a6之前進(jìn)一步將第二 Buffer中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至第三Buffer與讀取的數(shù)據(jù)合并。在步驟a7之后,該方法進(jìn)一步包括在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)讀操作后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊;以及,在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)擦除操作后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。由上述技術(shù)方案可見(jiàn),本發(fā)明在每一次寫(xiě)過(guò)程中均由驅(qū)動(dòng)層結(jié)合硬件層來(lái)替代文件系統(tǒng)針對(duì)寫(xiě)過(guò)程中發(fā)現(xiàn)的壞塊執(zhí)行壞塊管理,因而使得文件系統(tǒng)在每一次寫(xiě)過(guò)的驅(qū)動(dòng)操作完成后即可開(kāi)始下一次寫(xiě)過(guò)程的軟件處理,從而能夠減少文件系統(tǒng)在每次寫(xiě)過(guò)程中的等待時(shí)間,相應(yīng)地,也就提高了文件系統(tǒng)的寫(xiě)效率。


圖1為現(xiàn)有技術(shù)中用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)示意圖;圖2為現(xiàn)有技術(shù)中基于如圖1所示架構(gòu)實(shí)現(xiàn)文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)過(guò)程的示意圖;圖3為本發(fā)明實(shí)施例中實(shí)現(xiàn)文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的流水線(xiàn)方式示意圖;圖4為本發(fā)明實(shí)施例中用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)示意圖;圖5為本發(fā)明實(shí)施例中對(duì)Nand Flash進(jìn)行初始化時(shí)劃分空間的一實(shí)例示意圖;圖6a至圖6c為本發(fā)明實(shí)施例中如圖4所示架構(gòu)實(shí)現(xiàn)文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的過(guò)程示意8
圖7為本發(fā)明實(shí)施例中用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法的流程示意圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。本實(shí)施例為了解決文件系統(tǒng)的寫(xiě)效率低的問(wèn)題,將寫(xiě)過(guò)程由串行方式改為串并結(jié)合的流水線(xiàn)方式。具體參見(jiàn)圖3,每一次(即第i次,i為大于等于1且小于η的正整數(shù))的寫(xiě)過(guò)程中,依次由文件系統(tǒng)執(zhí)行當(dāng)前次(第i次)寫(xiě)過(guò)程的軟件操作、驅(qū)動(dòng)層執(zhí)行當(dāng)前次寫(xiě)過(guò)程的驅(qū)動(dòng)操作、硬件層執(zhí)行當(dāng)前次寫(xiě)過(guò)程的硬件操作、以及由驅(qū)動(dòng)層結(jié)合硬件層來(lái)替代文件系統(tǒng)針對(duì)寫(xiě)過(guò)程中發(fā)現(xiàn)的壞塊執(zhí)行壞塊管理(由于并不是每次寫(xiě)過(guò)程均會(huì)發(fā)生壞塊管理、因而在圖3中以虛線(xiàn)表示)。如圖3可見(jiàn),由于文件系統(tǒng)不需要再等待硬件操作之后來(lái)執(zhí)行壞塊管理,因而驅(qū)動(dòng)層可以在當(dāng)前次寫(xiě)過(guò)程的驅(qū)動(dòng)操作完成后即通知文件系統(tǒng)寫(xiě)成功,從而使文件系統(tǒng)在驅(qū)動(dòng)層執(zhí)行完當(dāng)前次寫(xiě)過(guò)程的驅(qū)動(dòng)操作后即可開(kāi)始下一次(第i+Ι次)寫(xiě)過(guò)程的軟件處理。這樣,就使得文件系統(tǒng)針對(duì)下一次寫(xiě)的軟件處理與硬件控制器針對(duì)當(dāng)前次寫(xiě)的硬件操作全部或部分地同步進(jìn)行,從而使得二者同步進(jìn)行的全部或部分耗時(shí)被抵消。從而,就減少了文件系統(tǒng)在每次寫(xiě)過(guò)程中的等待時(shí)間,相應(yīng)地,也就提高了文件系統(tǒng)的寫(xiě)效率。雖然驅(qū)動(dòng)層結(jié)合硬件層執(zhí)行壞塊管理會(huì)造成下一次寫(xiě)的延誤,但畢竟在實(shí)際應(yīng)用中出現(xiàn)壞塊的概率并不高(即,實(shí)際應(yīng)用中不會(huì)出現(xiàn)圖3中所示出的每次寫(xiě)均需要壞塊管理的情況),因此,相比于串行方式的每次寫(xiě)都需要等待大量時(shí)間的情況,多次寫(xiě)中偶爾出現(xiàn)一次或幾次的壞塊管理所造成的延誤可以忽略不計(jì)。下面,結(jié)合具體實(shí)施例,對(duì)如何實(shí)現(xiàn)驅(qū)動(dòng)層執(zhí)行壞塊管理、以及如何通過(guò)驅(qū)動(dòng)層執(zhí)行壞塊管理來(lái)實(shí)現(xiàn)流水線(xiàn)方式予以詳細(xì)說(shuō)明。圖4為本發(fā)明實(shí)施例中用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)示意圖。如圖 4所示,在本實(shí)施例中用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)中,驅(qū)動(dòng)層介于文件系統(tǒng)所在的軟件層以及硬件控制器所在的硬件層之間。驅(qū)動(dòng)層中包括有可被軟件層的文件系統(tǒng)調(diào)用的加速初始化模塊、讀模塊、加速寫(xiě)模塊、擦除模塊、以及索引存儲(chǔ)模塊和壞塊管理模塊,這些模塊可通過(guò)驅(qū)動(dòng)層提供的軟件接口(圖4中未示出)與硬件層的硬件控制器交互。其中,讀模塊和擦除模塊所能夠驅(qū)動(dòng)的讀和擦除過(guò)程仍采用串行方式;而加速初始化模塊、加速寫(xiě)模塊、以及索引存儲(chǔ)模塊和壞塊管理模塊則主要用于實(shí)現(xiàn)流水線(xiàn)方式的寫(xiě)過(guò)程,從而實(shí)現(xiàn)相比于串行方式寫(xiě)過(guò)程的加速效果,加速初始化模塊和加速寫(xiě)模塊中的 “加速”也正是為了體現(xiàn)這樣的加速效果、并容易區(qū)分與現(xiàn)有技術(shù)中如圖1所示的常規(guī)的初始化模塊和寫(xiě)模塊的不同之處。具體說(shuō)加速初始化模塊,其在初始化時(shí)將Nand Flash劃分為用于驅(qū)動(dòng)層實(shí)現(xiàn)壞塊管理的保留空間、以及向文件系統(tǒng)上報(bào)并供文件系統(tǒng)使用的訪問(wèn)空間。
索引存儲(chǔ)模塊,其中存放有壞塊索引表,壞塊索引表中記錄了訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊。其中,壞塊索引表是在驅(qū)動(dòng)層執(zhí)行的壞塊管理過(guò)程中維護(hù)的,只要發(fā)現(xiàn)訪問(wèn)空間中的壞塊,壞塊中的數(shù)據(jù)即可在壞塊管理過(guò)程中被轉(zhuǎn)移至保留空間中的對(duì)應(yīng)塊,相應(yīng)地,壞塊索引表中就會(huì)增添相應(yīng)的記錄(對(duì)于數(shù)據(jù)的轉(zhuǎn)移和壞塊索引表的維護(hù)將在下文中予以詳細(xì)說(shuō)明)。這樣,文件系統(tǒng)對(duì)訪問(wèn)空間中的壞塊的讀、寫(xiě)、以及擦除,均可通過(guò)壞塊索引表被映射在保留空間中的對(duì)應(yīng)塊。相應(yīng)地,也就需要讀模塊、加速寫(xiě)模塊、以及擦除模塊具有依據(jù)壞塊索引表進(jìn)行地址重映射的功能。此外,由于壞塊的映射是由驅(qū)動(dòng)層來(lái)完成,因而壞塊索引表中記錄的壞塊對(duì)于文件系統(tǒng)并不可見(jiàn),從而也就不需要文件系統(tǒng)再關(guān)注壞塊的存在、更不需要文件系統(tǒng)對(duì)寫(xiě)過(guò)程中發(fā)現(xiàn)的壞塊進(jìn)行壞塊管理。讀模塊在被文件系統(tǒng)調(diào)用后,需要依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,讀模塊在讀過(guò)程中需要執(zhí)行的其他驅(qū)動(dòng)操作均按照現(xiàn)有方式來(lái)實(shí)現(xiàn);同樣地,擦除模塊在被文件系統(tǒng)調(diào)用后,也需要依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,擦除模塊在擦除過(guò)程中需要執(zhí)行的其他驅(qū)動(dòng)操作也均按照現(xiàn)有方式來(lái)實(shí)現(xiàn)。加速寫(xiě)模塊,其在被文件系統(tǒng)調(diào)用后,需要等待上一次寫(xiě)的硬件操作已完成、或可能出現(xiàn)的壞塊管理操作已完成后才能夠進(jìn)行當(dāng)前寫(xiě)的驅(qū)動(dòng)操作,這是因?yàn)閷?duì)于每次的寫(xiě)過(guò)程,文件系統(tǒng)的軟件處理與硬件控制器的硬件操作為非串行過(guò)程,導(dǎo)致文件系統(tǒng)的軟件處理有可能在硬件控制器的硬件操結(jié)束之前完成。那么,加速寫(xiě)模塊在被文件系統(tǒng)調(diào)用時(shí),如果上一次寫(xiě)的硬件操作尚未完成、或可能出現(xiàn)的壞塊管理操作未完成,則加速寫(xiě)模塊需要通知文件系統(tǒng)將當(dāng)前寫(xiě)的任務(wù)暫時(shí)掛起,直至上一次寫(xiě)的硬件操作完成為止。也就是說(shuō)加速寫(xiě)模塊在被文件系統(tǒng)調(diào)用、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)(即確認(rèn)上一次寫(xiě)的硬件操作已完成或可能出現(xiàn)的壞塊管理操作已完成)后,才能夠進(jìn)行當(dāng)前寫(xiě)的驅(qū)動(dòng)操作。在被文件系統(tǒng)調(diào)用后針對(duì)當(dāng)前寫(xiě)的驅(qū)動(dòng)操作包括依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊;在圖4中示出的Buffer2內(nèi)備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)、以便于在當(dāng)前寫(xiě)失敗后進(jìn)行壞塊管理時(shí)使用;然后,按照現(xiàn)有方式向硬件控制器發(fā)送寫(xiě)命令、以及經(jīng)過(guò)壞塊過(guò)濾的當(dāng)前寫(xiě)的寫(xiě)地址,并將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)放入至Bufferl,再啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將Bufferl中的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入;以及,在啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入之后,通知文件系統(tǒng)開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理。壞塊管理模塊,其依據(jù)硬件控制器上報(bào)的Nand Flash的寫(xiě)狀態(tài)判斷當(dāng)前寫(xiě)成功或失??;
如果當(dāng)前寫(xiě)成功則通知加速寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě);可選地,加速寫(xiě)模塊可以進(jìn)一步為每一次寫(xiě)維護(hù)一個(gè)用于表示寫(xiě)是否完成的標(biāo)記,壞塊管理模塊進(jìn)一步通過(guò)將該標(biāo)記設(shè)置為寫(xiě)完成狀態(tài)來(lái)通知加速寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě);另外,如果文件系統(tǒng)此時(shí)已針對(duì)下一次寫(xiě)調(diào)用了加速寫(xiě)模塊、并由于當(dāng)前寫(xiě)未完成而將下一次寫(xiě)的任務(wù)掛起,則加速寫(xiě)模塊可以在獲知當(dāng)前寫(xiě)已完成后通知文件系統(tǒng)解除掛起;否則,表示當(dāng)前寫(xiě)失敗,則調(diào)用讀模塊和加速寫(xiě)模塊、并將Buffer2中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至Bufferf中。讀模塊在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊(即壞塊)的讀地址從Nand Flash中讀取數(shù)據(jù)、并存入至Buffer3中。其中,所讀取的數(shù)據(jù)是,在當(dāng)前寫(xiě)失敗的塊內(nèi)的除了當(dāng)前寫(xiě)的一頁(yè)寫(xiě)數(shù)據(jù)之外的其他所有頁(yè),因此,讀模塊被壞塊管理模塊的調(diào)用是以頁(yè)為單位的多次調(diào)用。進(jìn)而,由于 Buffer2中備份的當(dāng)前寫(xiě)的一頁(yè)寫(xiě)數(shù)據(jù)也會(huì)被轉(zhuǎn)移至Buffer3中,因而就相當(dāng)于在Buffer3 中將屬于同一壞塊的所有頁(yè)的數(shù)據(jù)合并。也就是說(shuō),Bufferl和Buffer2可以是只足夠存放一頁(yè)數(shù)據(jù)的頁(yè)Buffer,而B(niǎo)uffer3則是需要足夠存放一塊數(shù)據(jù)的塊Buffer。實(shí)際應(yīng)用中,Bufferl、Buffer2、Buffer3都可以是隨時(shí)申請(qǐng)的內(nèi)存空間,而并不一定是一直存在于驅(qū)動(dòng)層中的存儲(chǔ)結(jié)構(gòu)。例如,Bufferl和Buffer2可以由讀模塊和加速寫(xiě)模塊隨時(shí)申請(qǐng),Bufferf則是由壞塊管理模塊在判斷出當(dāng)前寫(xiě)失敗之后、調(diào)用讀模塊之前申請(qǐng)。加速寫(xiě)模塊在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址,將Bufferf中存放的數(shù)據(jù)(即包含讀取的數(shù)據(jù)、以及從Buffer2中轉(zhuǎn)移而來(lái)的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù))向Nand Flash寫(xiě)入。其中,由于當(dāng)前寫(xiě)失敗的塊內(nèi)的所有頁(yè)數(shù)據(jù)均要以頁(yè)為單位寫(xiě)入至保留空間中的可用塊,加速寫(xiě)模塊被壞塊管理模塊的調(diào)用也是以頁(yè)為單位的多次調(diào)用。上述讀模塊和加速寫(xiě)模塊被壞塊管理模塊調(diào)用后所驅(qū)動(dòng)的讀、寫(xiě)操作即是前文所述的將壞塊中的數(shù)據(jù)轉(zhuǎn)移至保留空間中的對(duì)應(yīng)塊。實(shí)際應(yīng)用中,指向當(dāng)前寫(xiě)失敗的塊的讀地址、以及指向保留空間中任一可用塊的寫(xiě)地址都是由壞塊管理模塊提供的,壞塊管理模塊向讀模塊提供的指向當(dāng)前寫(xiě)失敗的塊的讀地址、以及向加速寫(xiě)模塊提供的指向保留空間中任一可用塊的寫(xiě)地址,能夠保證壞塊中的各頁(yè)在對(duì)應(yīng)塊中保持相同的位置,因而不會(huì)導(dǎo)致數(shù)據(jù)轉(zhuǎn)移后的混亂。而且,由于在被壞塊管理模塊調(diào)用后的讀、寫(xiě)地址都是指向保留空間的,因而,此時(shí)的讀模塊和加速寫(xiě)模塊無(wú)需再利用壞塊索引表進(jìn)行壞塊過(guò)濾??蛇x地,以上所述的讀模塊和加速寫(xiě)模塊被壞塊管理模塊調(diào)用后所驅(qū)動(dòng)的讀、寫(xiě)操作,也可以不是先讀、以及合并,然后再寫(xiě),而是可以按照各頁(yè)的順序,每從壞塊讀一頁(yè)至Bufferl就將Bufferl的一頁(yè)向?qū)?yīng)的可用塊寫(xiě)入的交替執(zhí)行的操作、并在此期間的適當(dāng)時(shí)機(jī)內(nèi)將Buffer2中備份的一頁(yè)數(shù)據(jù)向?qū)?yīng)的可用塊寫(xiě)入,這種情況下可以不需要 Buffer3、以節(jié)省內(nèi)存空間。此外,壞塊管理模塊向加速寫(xiě)模塊提供的寫(xiě)地址所指向的可用塊,是壞塊管理模塊在保留空間中任意所選擇的,其中的“可用”是指該塊尚未被其他壞塊轉(zhuǎn)移而來(lái)的數(shù)據(jù)所占用。但即便是保留空間中的“可用”的塊,也有可能是壞塊。
這種情況下,仍需要壞塊管理模塊判斷向該可用塊寫(xiě)入每一頁(yè)后的寫(xiě)狀態(tài)是否為寫(xiě)成功,塊管理模塊如果在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)的寫(xiě)入過(guò)程中,接收到硬件控制器上報(bào)的表示寫(xiě)失敗的寫(xiě)狀態(tài),則需要重新選擇保留空間中的另一可用塊,并進(jìn)一步重新調(diào)用加速寫(xiě)模塊,使加速寫(xiě)模塊重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)、及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。如此反復(fù),直至讀取的數(shù)據(jù)、及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)全部被成功寫(xiě)入至保留空間中的某一可用塊為止。此后,壞塊管理模塊在Bufferf中存放的所讀取的數(shù)據(jù)、及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、將讀取的數(shù)據(jù)及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)最終成功寫(xiě)入的保留空間中的塊作為對(duì)應(yīng)塊,在壞塊索引表中增加相應(yīng)的記錄、然后通知加速寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě),此時(shí),如果文件系統(tǒng)已針對(duì)下一次寫(xiě)調(diào)用了加速寫(xiě)模塊、并由于當(dāng)前寫(xiě)未完成而將下一次寫(xiě)的任務(wù)掛起,則加速寫(xiě)模塊可以在獲知當(dāng)前寫(xiě)已完成后通知文件系統(tǒng)解除掛起。如上可見(jiàn),只要硬件處理器被啟動(dòng)開(kāi)始執(zhí)行當(dāng)前寫(xiě)的硬件操作,文件系統(tǒng)即可開(kāi)始下一次寫(xiě)的軟件處理,從而使得當(dāng)前寫(xiě)的硬件操作與下一次寫(xiě)的軟件處理的同步部分的耗時(shí)能夠相互抵消。進(jìn)而,文件系統(tǒng)在每次寫(xiě)過(guò)程中通常需要的等待時(shí)間,能夠由“軟件操作耗時(shí)+驅(qū)動(dòng)操作耗時(shí)+硬件操作耗時(shí)”減少為“軟件處理耗時(shí)與硬件操作耗時(shí)這二者中的最大值+驅(qū)動(dòng)操作耗時(shí)”,這樣,也能夠提高文件系統(tǒng)的寫(xiě)效率。即便偶爾出現(xiàn)壞塊而導(dǎo)致等待時(shí)間為“軟件處理耗時(shí)與硬件操作耗時(shí)這二者中的最大值+驅(qū)動(dòng)操作耗時(shí)+壞塊管理耗時(shí)”,但由于此類(lèi)情況出現(xiàn)的概率很低,因而相對(duì)于多次寫(xiě)過(guò)程的等待時(shí)間總和,偶爾出現(xiàn)的此類(lèi)情況的等待時(shí)間不會(huì)明顯影響到寫(xiě)效率。而且,如上述可知,軟件處理耗時(shí)與硬件操作耗時(shí)的長(zhǎng)短越接近、即軟件處理耗時(shí)與硬件操作耗時(shí)之差的絕對(duì)值越小,文件系統(tǒng)的等待時(shí)間中的無(wú)效部分就越少,相應(yīng)地,寫(xiě)加速的效果就越好;反之,寫(xiě)加速的效果就不明顯。因此,較佳地,在如圖4所示的架構(gòu)中,仍可以設(shè)置現(xiàn)有技術(shù)中如圖1所示的常規(guī)寫(xiě)模塊,該常規(guī)寫(xiě)模塊仍按照現(xiàn)有的串行方式執(zhí)行驅(qū)動(dòng)操作、但需要具有依據(jù)壞塊索引表進(jìn)行地址重映射的功能。這樣,優(yōu)選地對(duì)于上述絕對(duì)值較大的情況(例如,在批量連續(xù)寫(xiě)時(shí),文件系統(tǒng)集中對(duì)分次寫(xiě)的各頁(yè)集中處理,從而導(dǎo)致每次以頁(yè)為單位的寫(xiě)過(guò)程所需的軟件處理時(shí)間都很短),文件系統(tǒng)可以調(diào)用常規(guī)寫(xiě)模塊、并可以由文件系統(tǒng)負(fù)責(zé)此時(shí)的壞塊管理,以避免為了不明顯的加速效果而增加驅(qū)動(dòng)層的負(fù)擔(dān);而對(duì)于上述絕對(duì)值較小的情況(例如,在無(wú)法被文件系統(tǒng)集中處理的離散寫(xiě)時(shí), 每次寫(xiě)過(guò)程所需的軟件處理時(shí)間都比較長(zhǎng)、并與硬件操作耗時(shí)相近),文件系統(tǒng)可以調(diào)用加速寫(xiě)模塊,并由驅(qū)動(dòng)層負(fù)責(zé)壞塊管理,以此產(chǎn)生明顯的加速效果。另需要說(shuō)明的是,每個(gè)Nand Flash都有其生產(chǎn)廠商承諾的NVB(number of valid BLOCKs,最小合法塊數(shù)目),在Nand Flash的使用壽命周期內(nèi),如果可使用的總塊數(shù)不低于 NVB則能夠確保較高的可靠性。
因此,加速初始化模塊在劃分時(shí),可以使保留空間中可用于轉(zhuǎn)移數(shù)據(jù)的塊數(shù)滿(mǎn)足 Nand Flash的總塊數(shù)減去NVB的差,這樣,允許的壞塊總數(shù)就不會(huì)導(dǎo)致Nand Flash的可用塊數(shù)低于NVB,如此就能夠利用生產(chǎn)廠商所承諾的NVB來(lái)確保更高的可靠性。需要說(shuō)明的是,NVB僅僅是一種為了達(dá)到較高可靠性的參考值,但決不是可使用的總塊數(shù)低于NVB就會(huì)導(dǎo)致Nand Flash不可被訪問(wèn),因此,加速初始化模塊也并不是必須依照NVB來(lái)劃分。此外,Nand Flash的首塊(BlockO)通常都能夠被確保是好塊、保證可以連續(xù)擦寫(xiě) 1000次。因此,還可以利用首塊來(lái)備份索引存儲(chǔ)模塊中的壞塊索引表、以確保壞塊索引表不會(huì)丟失。但由于壞塊索引表中的壞塊對(duì)文件系統(tǒng)不可見(jiàn)(如前文所述),因此,首塊也應(yīng)劃歸在保留空間中。其中,首塊中的壞塊索引表可以由加速初始化模塊建立,并由壞塊管理模塊調(diào)用加速寫(xiě)模塊(如果同時(shí)存在常規(guī)寫(xiě)模塊也可調(diào)用常規(guī)寫(xiě)模塊),并啟動(dòng)硬件控制器以指向首塊的寫(xiě)地址來(lái)更新首塊中的壞塊索引表。這樣一來(lái),訪問(wèn)空間中的總塊數(shù)就為Nand Flash的NVB-1。圖5中以256M字節(jié)的Nand Flash為例,其總塊數(shù)為2048、NVB為2008,也就是說(shuō)最多可以有40個(gè)壞塊。在劃分時(shí)首塊BlockO、以及Blockl Block40共41個(gè)塊被劃分在保留空間,其中,首塊 BlockO用于存放壞塊索引表、Blockl Block40作為訪問(wèn)空間中的壞塊的對(duì)應(yīng)塊;Block41 Block2047共2007 (即NVB-1)個(gè)塊被劃分在訪問(wèn)空間、并上報(bào)給文件系統(tǒng)。這樣,當(dāng)訪問(wèn)空間中最多出現(xiàn)了 40個(gè)壞后,可以由保留空間中Blockl Block40 這40個(gè)對(duì)應(yīng)塊頂替,再加上能夠確保是好塊的首塊BlockO,通常(備用的Blockl Block40由于不常被使用,因而出現(xiàn)壞塊的概率不高)就能夠確保Nand Flash中的好塊不會(huì)低于2008。仍參見(jiàn)圖5,首塊BlockO的壞塊索引表(與索引存儲(chǔ)模塊存放的壞塊索引表相同)中,包含有保留空間中除首塊之外的其余每一塊Blockl Block40對(duì)應(yīng)的表項(xiàng)。每一表項(xiàng)中包括表示該表項(xiàng)在Blockl Block40中對(duì)應(yīng)塊是否被使用的標(biāo)記(Flag)位;以及,映射于該表項(xiàng)在Blockl Block40中對(duì)應(yīng)塊的壞塊(訪問(wèn)空間中的 Block41 Block2047)的標(biāo)識(shí),以表示該表項(xiàng)在Blockl Block40中對(duì)應(yīng)塊備份有訪問(wèn)空間中Block41 Block2047的哪一個(gè)壞塊的數(shù)據(jù),該標(biāo)識(shí)在圖5中由塊號(hào)表示。可選地,每一表項(xiàng)中還可以包括表示該表項(xiàng)在Blockl Block40中對(duì)應(yīng)塊是否為壞塊的標(biāo)記,以供在數(shù)據(jù)轉(zhuǎn)移過(guò)程中發(fā)現(xiàn)保留空間中的壞塊后可予以標(biāo)識(shí)。在上述架構(gòu)中,如果只需要實(shí)現(xiàn)提高寫(xiě)效率的加速寫(xiě)過(guò)程,則無(wú)需包含擦除模塊, 即,加速初始化模塊、讀模塊、加速寫(xiě)模塊、以及索引存儲(chǔ)模塊和壞塊管理模即可作為一驅(qū)動(dòng)裝置。圖6a至圖6c為本發(fā)明實(shí)施例中如圖4所示架構(gòu)實(shí)現(xiàn)文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的過(guò)程示意圖。在按照前文所述方式對(duì)Nand Flash進(jìn)行初始化、并將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間之后,如圖6a至圖6c所示,該過(guò)程包括S601,文件系統(tǒng)準(zhǔn)備要寫(xiě)入Nand Flash的數(shù)據(jù);S602,文件系統(tǒng)對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行均衡算法處理;S603,文件系統(tǒng)對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行ECC計(jì)算。S604,文件系統(tǒng)調(diào)用加速寫(xiě)模塊。S605,加速寫(xiě)模塊在被文件系統(tǒng)調(diào)用之后,判斷是否能夠開(kāi)始新一次的寫(xiě),如果是,則直接跳轉(zhuǎn)至S606,否則等待上一次寫(xiě)的硬件操作完成后在跳轉(zhuǎn)至S606、并通知文件系統(tǒng)在此等待過(guò)程中將當(dāng)前寫(xiě)的任務(wù)掛起。S606,加速寫(xiě)模塊在被文件系統(tǒng)調(diào)用、并且確認(rèn)上一次寫(xiě)的硬件操作已完成后,依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。S607,加速寫(xiě)模塊在Buffer2中備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)。S608,加速寫(xiě)模塊向硬件控制器發(fā)送寫(xiě)命令、經(jīng)壞塊過(guò)濾后的寫(xiě)地址。S609,加速寫(xiě)模塊將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)存入至Bufferl中。S610,加速寫(xiě)模塊啟動(dòng)硬件控制器開(kāi)始以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向 Nand Flash 寫(xiě)入。S611,加速寫(xiě)模塊向文件系統(tǒng)返回0K,通知文件系統(tǒng)可以開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理。S612,硬件控制器向Nand Flash發(fā)送寫(xiě)命令和壞塊過(guò)濾后的寫(xiě)地址。S613,硬件控制器將Bufferl中的當(dāng)前的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。S614,硬件控制器在寫(xiě)數(shù)據(jù)寫(xiě)入完成之后檢測(cè)Nand Flash是否由Busy狀態(tài)變?yōu)?Ready狀態(tài)。S615,硬件控制器在檢測(cè)出Nand Flash由Busy變?yōu)镽eady狀態(tài)后從Nand Flash 獲取寫(xiě)狀態(tài)。S616,壞塊管理模塊接收硬件控制器上報(bào)的寫(xiě)狀態(tài)、并判斷寫(xiě)狀態(tài)是否為成功,如果是,則跳轉(zhuǎn)至S633,否則跳轉(zhuǎn)至S617。
S617,壞塊管理模塊調(diào)用讀模塊,由讀模塊向硬件控制器發(fā)送讀命令、以及指向當(dāng)前寫(xiě)失敗的塊的讀地址。S618,讀模塊啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù)。S619,硬件控制器向Nand Flash發(fā)送讀命令、以及指向當(dāng)前寫(xiě)失敗的塊的寫(xiě)地址。S620,硬件控制器接收Nand Flash輸出的一頁(yè)讀數(shù)據(jù)、并上傳至Buffer3。S621,壞塊管理模塊判斷當(dāng)前寫(xiě)失敗的塊中應(yīng)讀取的數(shù)據(jù)是否讀完,如果是則跳轉(zhuǎn)至S622,否則返回S617繼續(xù)讀取。S622,壞塊管理模塊將Buffer2中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至Bufferf,以將當(dāng)前寫(xiě)失敗的塊的數(shù)據(jù)合并。S623,壞塊管理模塊選擇一個(gè)保留空間中的可用塊。S624,壞塊管理模塊調(diào)用加速寫(xiě)模塊,由加速寫(xiě)模塊向硬件控制器發(fā)送寫(xiě)命令、
14以及指向選擇的可用塊的寫(xiě)地址。S625,加速寫(xiě)模塊啟動(dòng)硬件控制器以指向選擇的可用塊的寫(xiě)地址將Bufferl中屬于當(dāng)前寫(xiě)失敗的塊的數(shù)據(jù)(即讀取的數(shù)據(jù)及備份的當(dāng)前的寫(xiě)數(shù)據(jù))向Nand Flash寫(xiě)入。S626,硬件控制器向Nand Flash發(fā)送寫(xiě)命令和指向選擇的可用塊的寫(xiě)地址。S627,硬件控制器將Buffer3中合并數(shù)據(jù)中的一頁(yè)數(shù)據(jù)向Nand Flash寫(xiě)入。S628,硬件控制器在寫(xiě)數(shù)據(jù)寫(xiě)入完成之后檢測(cè)Nand Flash是否由Busy狀態(tài)變?yōu)?Ready狀態(tài)。S629,硬件控制器在檢測(cè)出Nand Flash由Busy變?yōu)镽eady狀態(tài)后從Nand Flash 獲取寫(xiě)狀態(tài)。S630,壞塊管理模塊接收硬件控制器上報(bào)的寫(xiě)狀態(tài)、并判斷寫(xiě)狀態(tài)是否為成功,如果是,則跳轉(zhuǎn)至S631,否則返回至S623重新選擇、并記錄之前選擇的塊為壞塊。S631,壞塊管理模塊判斷Bufferf中合并的數(shù)據(jù)是否寫(xiě)完,如果是則跳轉(zhuǎn)至S632, 否則返回S624繼續(xù)寫(xiě)入。S632,壞塊管理模塊將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及備份的寫(xiě)數(shù)據(jù)成功寫(xiě)入的可用塊作為對(duì)應(yīng)塊,在壞塊索引表中增加記錄。S633,壞塊管理模塊通知加速寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě),并返回至S605。至此,上述過(guò)程結(jié)束。以上,是對(duì)本實(shí)施例中用于文件系統(tǒng)訪問(wèn)Nand Flash的系統(tǒng)架構(gòu)、以及該架構(gòu)中的驅(qū)動(dòng)裝置的詳細(xì)說(shuō)明。下面,再對(duì)本實(shí)施例中用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法進(jìn)行說(shuō)明。圖7為本發(fā)明實(shí)施例中用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法的流程示意圖。如圖7所示,本實(shí)施例中用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法包括S700,驅(qū)動(dòng)層驅(qū)動(dòng)硬件控制器對(duì)Nand Flash進(jìn)行初始化,將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間,以及,在驅(qū)動(dòng)層設(shè)置如前文所述的壞塊索引表。優(yōu)選地,劃分的訪問(wèn)空間中的總塊數(shù)滿(mǎn)足Nand Flash的NVB,保留空間中包含有 Nand Flash的首塊,并將保留空間中的首塊用于備份如前文所述的壞塊索引表、其余塊作為訪問(wèn)空間中的壞塊的對(duì)應(yīng)塊。在S700之后,文件系統(tǒng)即開(kāi)始進(jìn)行寫(xiě)的軟件處理,具體包括準(zhǔn)備要寫(xiě)入Nand Flash的數(shù)據(jù)、對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行均衡算法處理、對(duì)準(zhǔn)備好的數(shù)據(jù)進(jìn)行ECC計(jì)算等。S701,驅(qū)動(dòng)層在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)寫(xiě)操作、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)后,依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。S702,驅(qū)動(dòng)層備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù),并在啟動(dòng)硬件控制器開(kāi)始以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入之后,通知文件系統(tǒng)可以開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理。在S702之后,硬件控制器即開(kāi)始執(zhí)行當(dāng)前寫(xiě)的硬件操作,具體包括向Nand Flash發(fā)送寫(xiě)命令和壞塊過(guò)濾后的寫(xiě)地址、將當(dāng)前的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入、在寫(xiě)數(shù)據(jù)寫(xiě)入完成之后檢測(cè)Nand Flash是否由Busy狀態(tài)變?yōu)镽eady狀態(tài)、以及在檢測(cè)出Nand Flash 由Busy變?yōu)镽eady狀態(tài)后從Nand Flash獲取寫(xiě)狀態(tài)。
在硬件控制器開(kāi)始執(zhí)行當(dāng)前寫(xiě)的硬件操作的同時(shí),文件系統(tǒng)即可針對(duì)下一次寫(xiě)開(kāi)始進(jìn)行軟件處理。S703,驅(qū)動(dòng)層接收硬件控制器上報(bào)的寫(xiě)狀態(tài)、并判斷寫(xiě)狀態(tài)是否為成功,如果是, 則確認(rèn)能夠開(kāi)始新一次的寫(xiě)并返回S701,否則跳轉(zhuǎn)至S704。S704,驅(qū)動(dòng)層啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù)。S705,驅(qū)動(dòng)層啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及備份的當(dāng)前的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。實(shí)際應(yīng)用中,S704可以是以頁(yè)為單位的連續(xù)多次讀、直至當(dāng)前寫(xiě)失敗的塊中的數(shù)據(jù)被全部讀出,并且在S704之后,驅(qū)動(dòng)層可以將讀取的數(shù)據(jù)與之前備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)在同一內(nèi)存空間中合并,然后在S705再以頁(yè)為單位的連續(xù)多次寫(xiě)、直至合并的數(shù)據(jù)全部被與兀。當(dāng)然,也可以不是先讀、以及合并,然后再寫(xiě),而是可以按照各頁(yè)的順序,交替地通過(guò)S704和S705每讀一頁(yè)即寫(xiě)一頁(yè),并在次過(guò)程中將備份的寫(xiě)數(shù)據(jù)在合適的時(shí)機(jī)寫(xiě)入,這樣,可以節(jié)省合并數(shù)據(jù)所需的空間。此外,在向保留空間的可用塊寫(xiě)入數(shù)據(jù)的過(guò)程中,驅(qū)動(dòng)層也需要判斷向該可用塊寫(xiě)入每一頁(yè)后的寫(xiě)狀態(tài)是否為寫(xiě)成功,如果出現(xiàn)寫(xiě)失敗的寫(xiě)狀態(tài),則需要重新選擇保留空間中的另一可用塊,并重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)、及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。如此反復(fù),直至讀取的數(shù)據(jù)、及備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)全部被成功寫(xiě)入至保留空間中的某一可用塊為止。S706,驅(qū)動(dòng)層在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及備份的寫(xiě)數(shù)據(jù)最終成功寫(xiě)入的塊作為對(duì)應(yīng)塊在壞塊索引表中增加記錄,并確認(rèn)能夠開(kāi)始新一次的寫(xiě)、返回S701。至此,驅(qū)動(dòng)方法的上述流程結(jié)束。經(jīng)過(guò)上述流程之后如果驅(qū)動(dòng)層被文件系統(tǒng)調(diào)用驅(qū)動(dòng)讀操作,并依據(jù)壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,則能夠從保留空間中的對(duì)應(yīng)塊讀取到訪問(wèn)空間中的壞塊內(nèi)的數(shù)據(jù);如果驅(qū)動(dòng)層被文件系統(tǒng)調(diào)用驅(qū)動(dòng)擦除操作,并依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,則能夠?qū)⒂性L問(wèn)空間中的壞塊映射在保留空間中的對(duì)應(yīng)塊內(nèi)的數(shù)據(jù)擦除。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置,該驅(qū)動(dòng)裝置位于文件系統(tǒng)與硬件控制器之間的驅(qū)動(dòng)層,其特征在于,該驅(qū)動(dòng)裝置包括初始化模塊,在初始化時(shí)將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間;索引存儲(chǔ)模塊,其中存放有壞塊索引表,所述壞塊索引表中記錄了訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊;寫(xiě)模塊,在被文件系統(tǒng)調(diào)用、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,以及,備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù),并在啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入后通知文件系統(tǒng)開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理;壞塊管理模塊,依據(jù)硬件控制器上報(bào)的Nand Flash的寫(xiě)狀態(tài)判斷當(dāng)前寫(xiě)成功或失敗, 如果當(dāng)前寫(xiě)成功則通知寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě),否則調(diào)用讀模塊和寫(xiě)模塊;讀模塊,在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù);寫(xiě)模塊還在被壞塊管理模塊調(diào)用后,啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入;壞塊管理模塊還在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)所寫(xiě)入的塊作為對(duì)應(yīng)塊在所述壞塊索引表中增加記錄,并通知寫(xiě)模塊能夠開(kāi)始新一次的寫(xiě)。
2.如權(quán)利要求1所述的驅(qū)動(dòng)裝置,其特征在于,訪問(wèn)空間中的總塊數(shù)為NandFlash的最小合法塊數(shù)量減1。
3.如權(quán)利要求2所述的驅(qū)動(dòng)裝置,其特征在于,保留空間中包含有NandFlash的首塊, 保留空間中的所述首塊用于備份所述壞塊索引表、其余塊用作訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊。
4.如權(quán)利要求3所述的驅(qū)動(dòng)裝置,其特征在于,所述壞塊索引表中包含有每一所述其余塊對(duì)應(yīng)的表項(xiàng),每一表項(xiàng)中包含有表示對(duì)應(yīng)的所述其余塊是否被使用的標(biāo)記位、以及映射在對(duì)應(yīng)的所述其余塊的壞塊標(biāo)識(shí)。
5.如權(quán)利要求1至4中任一項(xiàng)所述的驅(qū)動(dòng)裝置,其特征在于,壞塊管理模塊如果在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)的寫(xiě)入過(guò)程中,接收到硬件控制器上報(bào)的表示寫(xiě)失敗的寫(xiě)狀態(tài),則進(jìn)一步重新調(diào)用寫(xiě)模塊、使寫(xiě)模塊重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。
6.如權(quán)利要求1至4中任一項(xiàng)所述的驅(qū)動(dòng)裝置,其特征在于,進(jìn)一步包括第一Buffer 和第二 Buffer以及第三Buffer,其中寫(xiě)模塊將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)存放至第一 Buffer、并在第二 Buffer中備份;讀模塊在被壞塊管理模塊調(diào)用后所讀取的數(shù)據(jù)存放至第三Buffer ;壞塊管理模塊進(jìn)一步在當(dāng)前寫(xiě)失敗時(shí),將第二 Buffer中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至第三Buffer與讀取的數(shù)據(jù)合并。
7.如權(quán)利要求1至4中任一項(xiàng)所述的驅(qū)動(dòng)裝置,其特征在于,讀模塊進(jìn)一步在被文件系統(tǒng)調(diào)用后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊;以及,該驅(qū)動(dòng)裝置進(jìn)一步包括擦除模塊,在被文件系統(tǒng)調(diào)用后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。
8.一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)方法,該驅(qū)動(dòng)方法應(yīng)用于文件系統(tǒng)與硬件控制器之間的驅(qū)動(dòng)層,其特征在于,該驅(qū)動(dòng)方法包括a0、在初始化時(shí)將Nand Flash劃分為保留空間和供文件系統(tǒng)使用的訪問(wèn)空間,以及,在驅(qū)動(dòng)層設(shè)置壞塊索引表,所述壞塊索引表中記錄了訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊;al、在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)寫(xiě)操作、并且確認(rèn)能夠開(kāi)始新一次的寫(xiě)后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前寫(xiě)的寫(xiě)地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前寫(xiě)的寫(xiě)地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊,以及,備份當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù),并在啟動(dòng)硬件控制器以壞塊過(guò)濾后的寫(xiě)地址將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入后通知文件系統(tǒng)開(kāi)始對(duì)下一次寫(xiě)進(jìn)行軟件處理;a4、依據(jù)硬件控制器上報(bào)的Nand Flash的寫(xiě)狀態(tài)判斷當(dāng)前寫(xiě)成功或失敗,如果當(dāng)前寫(xiě)成功則確認(rèn)能夠開(kāi)始新一次的寫(xiě),否則執(zhí)行步驟a5 ;a5、啟動(dòng)硬件控制器以指向當(dāng)前寫(xiě)失敗的塊的讀地址從Nand Flash中讀取數(shù)據(jù); a6、啟動(dòng)硬件控制器以指向保留空間中任一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入;a7、在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)寫(xiě)完成后,將當(dāng)前寫(xiě)失敗的塊作為壞塊、讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)所寫(xiě)入的塊作為對(duì)應(yīng)塊在所述壞塊索引表中增加記錄,并確認(rèn)能夠開(kāi)始新一次的寫(xiě)。
9.如權(quán)利要求8所述的驅(qū)動(dòng)方法,其特征在于,訪問(wèn)空間中的總塊數(shù)為NandFlash的最小合法塊數(shù)量減1。
10.如權(quán)利要求9所述的驅(qū)動(dòng)方法,其特征在于,保留空間中包含有NandFlash的首塊,保留空間中的所述首塊用于備份所述壞塊索引表、其余塊用作訪問(wèn)空間中的壞塊在保留空間中的對(duì)應(yīng)塊。
11.如權(quán)利要求10所述的驅(qū)動(dòng)方法,其特征在于,所述壞塊索引表中包含有每一所述其余塊對(duì)應(yīng)的表項(xiàng),每一表項(xiàng)中包含有表示對(duì)應(yīng)的所述其余塊是否被使用的標(biāo)記位、以及映射在對(duì)應(yīng)的所述其余塊的壞塊標(biāo)識(shí)。
12.如權(quán)利要求8至11中任一項(xiàng)所述的驅(qū)動(dòng)方法,其特征在于,所述步驟a6中,如果在讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)的寫(xiě)入過(guò)程中,接收到硬件控制器上報(bào)的表示寫(xiě)失敗的寫(xiě)狀態(tài),則進(jìn)一步重新啟動(dòng)硬件控制器以指向保留空間中另一可用塊的寫(xiě)地址將讀取的數(shù)據(jù)及所述備份的寫(xiě)數(shù)據(jù)向Nand Flash寫(xiě)入。
13.如權(quán)利要求8至11中任一項(xiàng)所述的驅(qū)動(dòng)方法,其特征在于,該方法進(jìn)一步在驅(qū)動(dòng)層設(shè)置第一 Buffer和第二 Buffer以及第三Buffer,其中所述步驟al中將當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)存放至第一 Buffer、并在第二 Buffer中備份; 所述步驟a5中將讀取的數(shù)據(jù)存放至第三Buffer ;所述步驟a5之后、步驟a6之前進(jìn)一步將第二 Buffer中備份的當(dāng)前寫(xiě)的寫(xiě)數(shù)據(jù)轉(zhuǎn)移至第三Buffer與讀取的數(shù)據(jù)合并。
14.如權(quán)利要求8至11中任一項(xiàng)所述的驅(qū)動(dòng)方法,其特征在于,在步驟a7之后,該方法進(jìn)一步包括 在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)讀操作后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前讀的讀地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前讀的讀地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊;以及,在被文件系統(tǒng)調(diào)用驅(qū)動(dòng)擦除操作后,依據(jù)所述壞塊索引表對(duì)文件系統(tǒng)的當(dāng)前擦除的擦除地址進(jìn)行壞塊過(guò)濾、以使當(dāng)前擦除的擦除地址在指向壞塊時(shí)能夠被映射至保留空間中的對(duì)應(yīng)塊。
全文摘要
本發(fā)明公開(kāi)了一種用于文件系統(tǒng)向Nand Flash寫(xiě)數(shù)據(jù)的驅(qū)動(dòng)裝置及方法。本發(fā)明在每一次寫(xiě)過(guò)程中均由驅(qū)動(dòng)層結(jié)合硬件層來(lái)替代文件系統(tǒng)針對(duì)寫(xiě)過(guò)程中發(fā)現(xiàn)的壞塊執(zhí)行壞塊管理,因而使得文件系統(tǒng)在每一次寫(xiě)過(guò)程中的驅(qū)動(dòng)操作完成后即可開(kāi)始下一次寫(xiě)過(guò)程的軟件處理,從而能夠減少文件系統(tǒng)在每次寫(xiě)過(guò)程中的等待時(shí)間,相應(yīng)地,也就提高了文件系統(tǒng)的寫(xiě)效率。
文檔編號(hào)G06F12/02GK102331911SQ20111016495
公開(kāi)日2012年1月25日 申請(qǐng)日期2011年6月17日 優(yōu)先權(quán)日2011年6月17日
發(fā)明者張穎, 李星爽, 段琳, 趙志宇, 錢(qián)嘉林 申請(qǐng)人:杭州華三通信技術(shù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阜宁县| 忻城县| 泰来县| 杭锦后旗| 石景山区| 五寨县| 宁强县| 冀州市| 呼和浩特市| 桑植县| 米泉市| 焉耆| 旬邑县| 武陟县| 延吉市| 芜湖县| 安义县| 延津县| 密山市| 六安市| 孝义市| 延吉市| 新泰市| 汕尾市| 株洲市| 大竹县| 邯郸县| 蒙阴县| 芦溪县| 陆良县| 绍兴县| 泗水县| 固安县| 安庆市| 万荣县| 巨鹿县| 邵东县| 阿拉善左旗| 临澧县| 淳化县| 三明市|