本申請(qǐng)要求于2016年2月3日提交的第10-2016-0013549號(hào)韓國專利申請(qǐng)的優(yōu)先權(quán),所述韓國專利申請(qǐng)的公開通過引用全部包含于此。
與示例實(shí)施例一致的設(shè)備涉及廉價(jià)/獨(dú)立磁盤冗余陣列(raid)-6數(shù)據(jù)存儲(chǔ)裝置以及包括其的數(shù)據(jù)存儲(chǔ)系統(tǒng)。
背景技術(shù):
在計(jì)算機(jī)存儲(chǔ)領(lǐng)域,raid是一數(shù)據(jù)存儲(chǔ)虛擬化技術(shù),該數(shù)據(jù)存儲(chǔ)虛擬化技術(shù)為了數(shù)據(jù)冗余度和/或性能改善的目的,將多個(gè)物理磁盤驅(qū)動(dòng)器組件合并為單個(gè)邏輯單元。數(shù)據(jù)按照取決于冗余和性能的等級(jí)的被稱為raid級(jí)別的若干方式之中的一種方式被分布在物理磁盤驅(qū)動(dòng)器組件。
標(biāo)準(zhǔn)raid級(jí)別包括raid0至raid6。raid6包括具有雙重分布式奇偶校驗(yàn)的塊級(jí)條帶化。雙重奇偶校驗(yàn)提供達(dá)到兩個(gè)故障驅(qū)動(dòng)器的容錯(cuò)。
在包括數(shù)據(jù)存儲(chǔ)裝置的raid6數(shù)據(jù)系統(tǒng)中正在執(zhí)行讀取操作的同時(shí),raid6數(shù)據(jù)系統(tǒng)的糾錯(cuò)碼(ecc)解碼器將已經(jīng)從多個(gè)數(shù)據(jù)存儲(chǔ)裝置之中的一個(gè)數(shù)據(jù)存儲(chǔ)裝置讀取的數(shù)據(jù)進(jìn)行解碼。當(dāng)在ecc解碼期間發(fā)生不可校正的錯(cuò)誤時(shí),包括在數(shù)據(jù)存儲(chǔ)裝置中的raid控制器從其他數(shù)據(jù)存儲(chǔ)裝置讀取數(shù)據(jù),并且使用該數(shù)據(jù)來恢復(fù)不可校正的錯(cuò)誤。這樣的錯(cuò)誤恢復(fù)花費(fèi)大量的時(shí)間。因此,期望高效率的錯(cuò)誤恢復(fù)方法。
技術(shù)實(shí)現(xiàn)要素:
根據(jù)示例實(shí)施例,一種數(shù)據(jù)存儲(chǔ)裝置包括:存儲(chǔ)介質(zhì),被配置為存儲(chǔ)在條帶集中包括的數(shù)據(jù)塊;控制器,連接到存儲(chǔ)介質(zhì),并且被配置為:在數(shù)據(jù)塊之中的設(shè)置在一列中的第一數(shù)據(jù)塊的讀取操作期間,將第一數(shù)據(jù)塊進(jìn)行解碼;基于第一數(shù)據(jù)塊的讀取故障,讀取數(shù)據(jù)塊之中的設(shè)置在所述列中的第一組數(shù)據(jù)塊。
根據(jù)示例實(shí)施例,一種數(shù)據(jù)存儲(chǔ)裝置包括:存儲(chǔ)介質(zhì),被配置為:根據(jù)廉價(jià)/獨(dú)立磁盤冗余陣列(raid)6,存儲(chǔ)在條帶集中包括的數(shù)據(jù)塊;控制器,連接到存儲(chǔ)介質(zhì),并且被配置為:在數(shù)據(jù)塊之中的設(shè)置在一列中的第一數(shù)據(jù)塊的讀取操作期間,將第一數(shù)據(jù)塊進(jìn)行解碼;基于第一數(shù)據(jù)塊的讀取故障,讀取數(shù)據(jù)塊之中的設(shè)置在所述列中的除了第一數(shù)據(jù)塊之外的第二數(shù)據(jù)塊。
根據(jù)示例實(shí)施例,一種數(shù)據(jù)處理系統(tǒng)包括:數(shù)據(jù)存儲(chǔ)裝置;主機(jī),連接到數(shù)據(jù)存儲(chǔ)裝置。數(shù)據(jù)存儲(chǔ)裝置包括:存儲(chǔ)介質(zhì),被配置為:根據(jù)廉價(jià)/獨(dú)立磁盤冗余陣列(raid)6,存儲(chǔ)在條帶集中包括的數(shù)據(jù)塊;控制器,連接到存儲(chǔ)介質(zhì),并且被配置為:在數(shù)據(jù)塊之中的設(shè)置在一列中的第一數(shù)據(jù)塊的讀取操作期間,將第一數(shù)據(jù)塊進(jìn)行解碼;基于第一數(shù)據(jù)塊的讀取故障,讀取數(shù)據(jù)塊之中的設(shè)置在所述列中的除了第一數(shù)據(jù)塊之外的第二數(shù)據(jù)塊;使用讀取的第二數(shù)據(jù)塊來恢復(fù)第一數(shù)據(jù)塊;將恢復(fù)的第一數(shù)據(jù)塊發(fā)送到主機(jī)。
根據(jù)示例實(shí)施例,一種數(shù)據(jù)存儲(chǔ)裝置包括:存儲(chǔ)介質(zhì),被配置為存儲(chǔ)數(shù)據(jù)塊;控制器,連接到存儲(chǔ)介質(zhì),并且被配置為:讀取并且解碼數(shù)據(jù)塊之中的設(shè)置在一列中的第一數(shù)據(jù)塊;基于第一數(shù)據(jù)塊的讀取故障,讀取并且解碼數(shù)據(jù)塊之中的設(shè)置在所述列中的除了第一數(shù)據(jù)塊之外的第二數(shù)據(jù)塊;基于解碼的第二數(shù)據(jù)塊恢復(fù)第一數(shù)據(jù)塊。
附圖說明
圖1是根據(jù)示例實(shí)施例的數(shù)據(jù)處理系統(tǒng)的框圖。
圖2是根據(jù)示例實(shí)施例的廉價(jià)/獨(dú)立磁盤冗余陣列(raid)-6條帶集的結(jié)構(gòu)的示圖。
圖3是圖1中示出的閃存控制器的框圖。
圖4a是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障的第一恢復(fù)模式的概念性示圖。
圖4b是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障和讀取q校驗(yàn)條帶時(shí)的故障的第一恢復(fù)模式的概念性示圖。
圖5是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障和讀取p校驗(yàn)條帶時(shí)的故障的第二恢復(fù)模式的概念性示圖。
圖6是根據(jù)示例實(shí)施例的針對(duì)讀取兩個(gè)數(shù)據(jù)條帶時(shí)的故障的第三恢復(fù)模式的概念性示圖。
圖7是根據(jù)示例實(shí)施例的條帶集的存儲(chǔ)的示圖。
圖8是根據(jù)示例實(shí)施例的條帶集的存儲(chǔ)的示圖。
圖9和圖10是根據(jù)示例實(shí)施例的圖1中示出的數(shù)據(jù)儲(chǔ)存裝置的操作的流程圖。
圖11是根據(jù)示例實(shí)施例的圖1中示出的數(shù)據(jù)儲(chǔ)存裝置的操作的流程圖。
具體實(shí)施方式
如在此使用的,數(shù)據(jù)塊是被執(zhí)行解碼(例如,糾錯(cuò)碼(ecc)解碼)的最小單元,并且被稱為ecc扇區(qū)(sector)。
圖1是根據(jù)示例實(shí)施例的數(shù)據(jù)處理系統(tǒng)100的框圖。數(shù)據(jù)處理系統(tǒng)100包括主機(jī)200以及可通過接口110與主機(jī)200傳送信號(hào)的數(shù)據(jù)存儲(chǔ)裝置300。數(shù)據(jù)處理系統(tǒng)100可以是存儲(chǔ)器系統(tǒng)。數(shù)據(jù)處理系統(tǒng)100可被實(shí)現(xiàn)為個(gè)人計(jì)算機(jī)(pc)、工作站、數(shù)據(jù)中心、互聯(lián)網(wǎng)數(shù)據(jù)中心(idc)、直連式存儲(chǔ)(das)、存儲(chǔ)區(qū)域網(wǎng)(san)、網(wǎng)絡(luò)附加存儲(chǔ)(nas)或移動(dòng)計(jì)算裝置,但示例實(shí)施例不限于這些示例。數(shù)據(jù)處理系統(tǒng)100可以是智能汽車或汽車系統(tǒng)。移動(dòng)計(jì)算裝置可以是膝上型計(jì)算機(jī)、智能電話、平板pc、個(gè)人數(shù)字助手(pda)、企業(yè)數(shù)字助手(eda)、移動(dòng)互聯(lián)網(wǎng)裝置(mid)、可穿戴計(jì)算機(jī)、物聯(lián)網(wǎng)(iot)裝置、萬物聯(lián)網(wǎng)(ioe)裝置或無人機(jī)。
接口110可被實(shí)現(xiàn)為串行高級(jí)技術(shù)附件(sata)接口、sata快速(satae)接口、sas(串行連接小型計(jì)算機(jī)系統(tǒng)接口(scsi))、外圍組件互聯(lián)快速(pcie)接口、非易失性存儲(chǔ)器快速(nvme)接口、高級(jí)主機(jī)控制器接口(ahci)或多媒體卡(mmc)接口,但是示例實(shí)施例不限于這些示例。接口110可發(fā)送電信號(hào)或光信號(hào)。
主機(jī)200可通過接口110控制數(shù)據(jù)存儲(chǔ)裝置300的數(shù)據(jù)處理操作(例如,寫入或讀取操作)。主機(jī)200可表示主機(jī)控制器。主機(jī)200可被實(shí)現(xiàn)為集成電路(ic)、母板、片上系統(tǒng)(soc)、應(yīng)用處理器(ap)、移動(dòng)ap、網(wǎng)絡(luò)(web)服務(wù)器、數(shù)據(jù)服務(wù)器、數(shù)據(jù)庫服務(wù)器或引擎控制單元(ecu),但是示例實(shí)施例不限于這些示例。
數(shù)據(jù)存儲(chǔ)裝置300包括控制器310、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram)360和存儲(chǔ)介質(zhì)400。例如,數(shù)據(jù)存儲(chǔ)裝置300可具有廉價(jià)/獨(dú)立磁盤冗余陣列(raid)-6架構(gòu)。
數(shù)據(jù)存儲(chǔ)裝置300可被實(shí)現(xiàn)為基于閃存的存儲(chǔ)器裝置,但是示例實(shí)施例不限于此。例如,數(shù)據(jù)存儲(chǔ)裝置300可被實(shí)現(xiàn)為固態(tài)驅(qū)動(dòng)器或固態(tài)盤(ssd)、嵌入式ssd(essd)、通用閃存(ufs)、mmc、嵌入式mmc(emmc)或管理型nand,但是示例實(shí)施例不限于這些示例?;陂W存的存儲(chǔ)器裝置可以是nand型閃存裝置或nor型閃存裝置。數(shù)據(jù)存儲(chǔ)裝置300可表示數(shù)據(jù)庫??蛇x地,數(shù)據(jù)存儲(chǔ)裝置300可被實(shí)現(xiàn)為硬盤驅(qū)動(dòng)器(hdd)、相變隨機(jī)存取存儲(chǔ)器(pram)裝置、磁阻式ram(mram)裝置、自旋扭矩mram(stt-mram)裝置、鐵電ram(fram)裝置或電阻式ram(rram),但是示例實(shí)施例不限于這些示例。
控制器310可控制主機(jī)200、dram360和存儲(chǔ)器介質(zhì)400之間的信號(hào)的傳輸或處理??刂破?10可被實(shí)現(xiàn)為ic或soc,并且可被稱為ssd控制器或raid-6控制器。控制器310包括:傳輸介質(zhì)315、中央處理單元(cpu)320、內(nèi)存儲(chǔ)器325、只讀存儲(chǔ)器(rom)330、主機(jī)接口335、緩沖器控制器340、直接存儲(chǔ)器存取(dam)控制器345和存儲(chǔ)介質(zhì)控制器350。
傳輸介質(zhì)315可以是傳輸線或總線。當(dāng)傳輸介質(zhì)315是總線時(shí),該總線可被實(shí)現(xiàn)為高級(jí)微控制器總線架構(gòu)(amba)、高級(jí)高性能總線(ahb)、高級(jí)外圍總線(apb)、高級(jí)可擴(kuò)展接口(axi)、高級(jí)系統(tǒng)總線(asb)、axi一致性擴(kuò)展(ace)或它們的組合,但是示例實(shí)施例不限于這些示例。
cpu320可控制控制器310。cpu320可通過傳輸介質(zhì)315來控制內(nèi)存儲(chǔ)器325、rom330、主機(jī)接口335、緩沖器控制器340、dma控制器345和/或存儲(chǔ)介質(zhì)控制器350。cpu320可包括至少一個(gè)核。
內(nèi)存儲(chǔ)器325可存儲(chǔ)可由cpu330執(zhí)行的rom代碼或閃存轉(zhuǎn)換層(ftl)代碼。當(dāng)數(shù)據(jù)存儲(chǔ)裝置300被啟動(dòng)時(shí),rom代碼可從rom330加載到內(nèi)存儲(chǔ)器325,ftl代碼可從存儲(chǔ)介質(zhì)400加載到內(nèi)存儲(chǔ)器325中。內(nèi)存儲(chǔ)器325可被實(shí)現(xiàn)為ram、dram、靜態(tài)ram(sram)、緩沖器、緩沖器存儲(chǔ)器、高速緩存或緊密結(jié)合存儲(chǔ)器(tcm),但是示例實(shí)施例不限于這些示例。
rom330可存儲(chǔ)rom代碼。執(zhí)行rom代碼的cpu320可初始化主機(jī)接口335、存儲(chǔ)介質(zhì)控制器350和dram360。cpu320將控制器310的固件從存儲(chǔ)介質(zhì)400加載到dram360,可將固件從dram360加載到內(nèi)存儲(chǔ)器325,并且可在內(nèi)存儲(chǔ)器325中執(zhí)行固件。
主機(jī)接口335可改變將被發(fā)送到主機(jī)200的信號(hào)的格式,并且可通過接口110將改變格式的信號(hào)發(fā)送到主機(jī)200。主機(jī)接口335還可從主機(jī)200接收信號(hào),改變信號(hào)的格式,并且將改變格式的信號(hào)發(fā)送到cpu320和/或緩沖器控制器340。主機(jī)接口335可包括發(fā)送和接收信號(hào)的收發(fā)器。
主機(jī)接口335的結(jié)構(gòu)和操作可被配置為可與接口110的結(jié)構(gòu)和操作兼容。主機(jī)接口335可以是sata接口、satae接口、sas、pcie接口、nvme接口、ahci、mmc接口、nand型閃存接口或nor型閃存接口,但是不限于此。
緩沖器控制器340可根據(jù)cpu320的控制或者由cpu320執(zhí)行的固件的控制,將數(shù)據(jù)寫入到dram360,或從dram360讀取數(shù)據(jù)。緩沖器控制器340可被稱為控制對(duì)dram360執(zhí)行的寫入和讀取操作的控制器或緩沖器管理器。dma控制器345可將數(shù)據(jù)從緩沖器控制器340發(fā)送到存儲(chǔ)介質(zhì)控制器350,或者將數(shù)據(jù)從存儲(chǔ)介質(zhì)控制器350發(fā)送到緩沖器控制器340。
存儲(chǔ)介質(zhì)控制器350可根據(jù)cpu320的控制或者由cpu320執(zhí)行的固件的控制,通過多個(gè)通道ch1和ch2之中的一個(gè)通道,控制關(guān)于存儲(chǔ)介質(zhì)400的數(shù)據(jù)處理操作(例如,寫入操作或讀取操作)。存儲(chǔ)介質(zhì)控制器350可被實(shí)現(xiàn)為sata接口、satae接口、sas、pcie接口、nvme接口、ahci、mmc接口、nand型閃存接口或nor型閃存接口,但是示例實(shí)施例不限于這些示例。
存儲(chǔ)介質(zhì)控制器350包括ecc編碼器/解碼器355。ecc編碼器/解碼器355可生成將被存儲(chǔ)在存儲(chǔ)介質(zhì)400中的ecc扇區(qū)。ecc扇區(qū)包括數(shù)據(jù)和ecc奇偶校驗(yàn)。ecc扇區(qū)是被控制器310執(zhí)行ecc解碼的單元。ecc編碼器/解碼器355可校正從存儲(chǔ)介質(zhì)400輸出的ecc扇區(qū)中的錯(cuò)誤。ecc編碼器/解碼器355可以是ecc引擎。
dram360可接收并存儲(chǔ)從主機(jī)接口335輸出的數(shù)據(jù)或從dma控制器345輸出的數(shù)據(jù),或者可根據(jù)緩沖器控制器340的控制,將數(shù)據(jù)發(fā)送到緩沖器控制器340。dram360是易失性存儲(chǔ)器裝置的示例。
dram360可包括:存儲(chǔ)關(guān)于存儲(chǔ)介質(zhì)400的用于邏輯地址到物理地址的轉(zhuǎn)換的映射表的第一區(qū)域以及用作高速緩存的第二區(qū)域。由cpu320執(zhí)行的ftl代碼可使用存儲(chǔ)在第一區(qū)域中的映射表來執(zhí)行邏輯地址到物理地址的轉(zhuǎn)換。
當(dāng)控制器310和dram360分別以不同的半導(dǎo)體芯片形成時(shí),控制器310和dram360可以以封裝件上封裝(pop)、多芯片封裝(mcp)或封裝中的系統(tǒng)(sip)被實(shí)現(xiàn),但是示例實(shí)施例不限于這些示例。包括dram360的第一半導(dǎo)體芯片可使用堆疊球(stackball)而被堆疊在包括控制器310的第二半導(dǎo)體芯片之上。
存儲(chǔ)介質(zhì)400包括多個(gè)nvm裝置410-1至410-8以及420-1至420-8。nvm裝置410-1至410-8連接到第一通道ch1,nvm裝置420-1至420-8連接到第二通道ch2。在此,通道可表示獨(dú)立的數(shù)據(jù)路徑。數(shù)據(jù)路徑可包括發(fā)送數(shù)據(jù)或控制信號(hào)的傳輸線。術(shù)語“路(way)”可表示共享一個(gè)通道的一個(gè)或多個(gè)非易失性存儲(chǔ)器裝置的組。因此,多個(gè)路可連接到一個(gè)通道。例如,8個(gè)路way0至way7可連接到通道ch1和ch2中的每個(gè)通道。
nvm裝置410-1至410-8以及420-1至420-8(由nand共同表示)中的每個(gè)nvm裝置可被實(shí)現(xiàn)為可包括存儲(chǔ)器單元陣列的閃存裝置。存儲(chǔ)器單元陣列可包括多個(gè)存儲(chǔ)器單元。存儲(chǔ)器單元陣列可包括二維(2d)存儲(chǔ)器單元陣列或三維(3d)存儲(chǔ)器單元陣列。存儲(chǔ)器單元中的每個(gè)存儲(chǔ)器單元可被實(shí)現(xiàn)為2d或3d存儲(chǔ)器單元。
3d存儲(chǔ)器單元陣列被單片地形成在具有設(shè)置在硅基底和與這些存儲(chǔ)器單元的操作相關(guān)聯(lián)的電路之上的有源區(qū)域的存儲(chǔ)器單元的陣列的一個(gè)或多個(gè)物理級(jí)中,3d存儲(chǔ)器單元陣列在這樣的基底上或在這樣的基底內(nèi)。術(shù)語“單片(monolithic)”表示陣列的每級(jí)的層被直接設(shè)置在陣列的每個(gè)基礎(chǔ)級(jí)(underlyinglevel)的層上。在示例實(shí)施例中,3d存儲(chǔ)器單元陣列包括垂直取向使得至少一個(gè)存儲(chǔ)器單元位于另一存儲(chǔ)器單元上方的垂直nand串。至少一個(gè)存儲(chǔ)器單元可包括電荷俘獲層。通過引用合并于此的下面的專利文檔(第7,679,133號(hào)、第8,553,466號(hào)、第8,654,587號(hào)和第8,559,235號(hào)美國專利,以及公開號(hào)為2011/0233648的美國專利)描述用于三維存儲(chǔ)器單元陣列的合適的配置,其中,三維存儲(chǔ)器單元陣列被配置為具有在級(jí)之間共享的字線和/或位線的多個(gè)級(jí)。
圖2是根據(jù)示例實(shí)施例的raid-6條帶集(stripeset)的結(jié)構(gòu)的示圖。參照?qǐng)D1和圖2,raid-6條帶集可被存儲(chǔ)在存儲(chǔ)介質(zhì)400中,具體地說,raid-6條帶集可被存儲(chǔ)在包括在存儲(chǔ)介質(zhì)400中的非易失性存儲(chǔ)器裝置中。raid-6條帶集被概念地并且邏輯地示出在圖2中。
單個(gè)raid-6條帶集包括n個(gè)數(shù)據(jù)條帶d0至dn-1以及兩個(gè)奇偶校驗(yàn)條帶dn和dn+1。條帶d0至dn+1可分別被包括或存儲(chǔ)在不同的路(或半導(dǎo)體芯片)中。條帶d0至dn+1中的每個(gè)條帶包括多個(gè)ecc扇區(qū)(例如,l個(gè)扇區(qū))。ecc扇區(qū)包括數(shù)據(jù)data和ecc奇偶校驗(yàn)eccparity。ecc扇區(qū)可以是被控制器310執(zhí)行ecc解碼的單元。在此,n和l是至少為0的整數(shù)。
數(shù)據(jù)存儲(chǔ)裝置300可包括存儲(chǔ)包括在條帶集中的全部數(shù)據(jù)塊(或ecc扇區(qū))的存儲(chǔ)介質(zhì)400以及連接到存儲(chǔ)介質(zhì)400的控制器310。在讀取操作期間,控制器310可將存儲(chǔ)在存儲(chǔ)介質(zhì)400中的全部數(shù)據(jù)塊之中的邏輯地位于列的第一數(shù)據(jù)塊進(jìn)行解碼,并且可在第一數(shù)據(jù)塊中發(fā)生讀取故障時(shí)讀取邏輯地布置在該列的其他數(shù)據(jù)塊。
如上所述,包括數(shù)據(jù)塊的條帶集可根據(jù)raid6被邏輯地或物理地存儲(chǔ)在存儲(chǔ)介質(zhì)400中。存儲(chǔ)介質(zhì)400包括多個(gè)nvm裝置401-1至410-8以及420-1至420-8。條帶集包括數(shù)據(jù)條帶d0至dn-1、p校驗(yàn)條帶dn和q校驗(yàn)條帶dn+1。如圖7中所示,數(shù)據(jù)條帶d0至dn-1、p校驗(yàn)條帶dn和q校驗(yàn)條帶dn+1可分別存儲(chǔ)在nvm裝置401-1至410-8以及420-1至420-8中。nvm裝置401-1至410-8包括在不同的路way0至way7中,nvm裝置420-1至420-8可包括在不同的路way0至way7中。
可通過對(duì)n個(gè)數(shù)據(jù)條帶d0至dn-1執(zhí)行擴(kuò)展里德-所羅門(extendedreed-solomon)編碼來生成奇偶校驗(yàn)條帶dn和dn+1。可使用等式1來計(jì)算p校驗(yàn)條帶p(=dn)中的第jecc扇區(qū)p[j]和q校驗(yàn)條帶q(=dn+1)中的第jecc扇區(qū)q[j]。
其中,di(j)(0≤i≤(n-1),0≤j≤(l-1))是第i數(shù)據(jù)條帶中的第jecc扇區(qū),g0、g1、g2...gn-2和gn-1是伽羅華域(galoisfield)gf(2q)的q位符號(hào),并且可具有值gk=αk或逆序的值gk=αn-1-k,
當(dāng)將等式1應(yīng)用到包括在每列中的ecc扇區(qū)時(shí),p校驗(yàn)條帶p(=dn)的l個(gè)ecc扇區(qū)p[0]至p[l-1]被計(jì)算。當(dāng)l個(gè)ecc扇區(qū)p[0]至p[l-1]彼此連接時(shí),包括l個(gè)ecc扇區(qū)p[0]至p[l-1]的p校驗(yàn)條帶p(=dn)可被計(jì)算。此外,當(dāng)將等式1應(yīng)用到包括在每列中的ecc扇區(qū)時(shí),q校驗(yàn)條帶q(=dn+1)的l個(gè)ecc扇區(qū)q[0]至q[l-1]被計(jì)算。當(dāng)l個(gè)ecc扇區(qū)q[0]至q[l-1]彼此連接時(shí),包括l個(gè)ecc扇區(qū)q[0]至q[l-1]的q校驗(yàn)條帶q(=dn+1)可被計(jì)算。
當(dāng)將gk=αn-1-k應(yīng)用到等式1時(shí),等式1重新寫為等式2:
圖3是圖1中示出的存儲(chǔ)介質(zhì)控制器350的框圖。參照?qǐng)D1和圖3,存儲(chǔ)介質(zhì)控制器350被假設(shè)為閃存控制器。閃存控制器350包括ecc編碼器/解碼器355和raid-6引擎357。
ecc編碼器/解碼器355可針對(duì)對(duì)存儲(chǔ)介質(zhì)400的寫入操作,生成編碼的ecc扇區(qū)、編碼的p校驗(yàn)ecc扇區(qū)和編碼的q校驗(yàn)ecc扇區(qū)。ecc編碼器/解碼器355可針對(duì)從存儲(chǔ)介質(zhì)400的讀取操作,將編碼的ecc扇區(qū)、編碼的p校驗(yàn)ecc扇區(qū)和編碼的q校驗(yàn)ecc扇區(qū)進(jìn)行解碼。raid-6引擎357使用等式1生成p校驗(yàn)ecc扇區(qū)(pd)和q校驗(yàn)ecc扇區(qū)(qd),并且將p校驗(yàn)ecc扇區(qū)和q校驗(yàn)ecc扇區(qū)發(fā)送到ecc編碼器/解碼器355。
圖4a是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障的第一恢復(fù)模式mode0的概念性示圖。參照?qǐng)D2和圖4a,當(dāng)即使在對(duì)ecc扇區(qū)d2[0]執(zhí)行ecc解碼之后仍在邏輯地位于第一列col1中的ecc扇區(qū)d2[0]中存在不可校正的錯(cuò)誤時(shí),針對(duì)ecc扇區(qū)d2[0]發(fā)生讀取故障。當(dāng)針對(duì)ecc扇區(qū)d2[0]發(fā)生讀取故障時(shí),控制器310可使用第一恢復(fù)模式mode0來恢復(fù)ecc扇區(qū)d2[0]。換言之,當(dāng)針對(duì)包括在數(shù)據(jù)條帶d2中的一個(gè)ecc扇區(qū)d2[0]發(fā)生讀取故障時(shí),控制器310可使用第一恢復(fù)模式mode0來恢復(fù)ecc扇區(qū)d2[0]。
圖4b是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障和讀取q校驗(yàn)條帶時(shí)的故障的第一恢復(fù)模式mode0的概念性示圖。參照?qǐng)D2和圖4b,當(dāng)因?yàn)榧词挂呀?jīng)對(duì)ecc扇區(qū)d2[1]和q[1]執(zhí)行了ecc解碼,在ecc扇區(qū)d2[1]和q[1]中的每個(gè)中仍存在不可校正的錯(cuò)誤而針對(duì)邏輯地布置在第二列col2中的兩個(gè)ecc扇區(qū)d2[1]和q[1]發(fā)生讀取故障時(shí),控制器310可使用第一恢復(fù)模式mode0來恢復(fù)ecc扇區(qū)d2[1]和q[1]。
換言之,當(dāng)針對(duì)兩個(gè)ecc扇區(qū)d2[1]和q[1]中的每個(gè)發(fā)生讀取故障時(shí),兩個(gè)ecc扇區(qū)d2[1]和q[1]之中的一個(gè)ecc扇區(qū)d2[1]被包括在數(shù)據(jù)條帶d2中,兩個(gè)ecc扇區(qū)d2[1]和q[1]之中的另一ecc扇區(qū)q[1]被包括在q校驗(yàn)條帶dn+1中,控制器310可使用第一恢復(fù)模式mode0來順序地恢復(fù)ecc扇區(qū)d2[1]和q[1]。
圖5是根據(jù)示例實(shí)施例的針對(duì)讀取單個(gè)數(shù)據(jù)條帶時(shí)的故障和讀取p校驗(yàn)條帶時(shí)的故障的第二恢復(fù)模式mode1的概念性示圖。參照?qǐng)D2和圖5,當(dāng)因?yàn)榧词挂呀?jīng)對(duì)ecc扇區(qū)d1[2]和p[2]執(zhí)行了ecc解碼,在ecc扇區(qū)d1[2]和p[2]中的每個(gè)中仍存在不可校正的錯(cuò)誤而針對(duì)邏輯地布置在第三列col3中的兩個(gè)ecc扇區(qū)d1[2]和p[2]發(fā)生讀取故障時(shí),控制器310可使用第二恢復(fù)模式mode1來恢復(fù)ecc扇區(qū)d1[2]和p[2]。
換言之,當(dāng)針對(duì)兩個(gè)ecc扇區(qū)d1[2]和p[2]中的每個(gè)發(fā)生讀取故障時(shí),兩個(gè)ecc扇區(qū)d1[2]和p[2]之中的一個(gè)ecc扇區(qū)d1[2]被包括在數(shù)據(jù)條帶d1中,兩個(gè)ecc扇區(qū)d1[2]和p[2]之中的另一ecc扇區(qū)p[1]被包括在p校驗(yàn)條帶dn中,控制器310可使用第二恢復(fù)模式mode1來順序地恢復(fù)ecc扇區(qū)d1[2]和p[2]。
圖6是根據(jù)示例實(shí)施例的針對(duì)讀取兩個(gè)數(shù)據(jù)條帶時(shí)的故障的第三恢復(fù)模式mode2的概念性示圖。參照?qǐng)D2和圖6,當(dāng)因?yàn)榧词挂呀?jīng)對(duì)ecc扇區(qū)d1[3]和d2[3]執(zhí)行了ecc解碼,在ecc扇區(qū)d1[3]和d2[3]中的每個(gè)中仍存在不可校正的錯(cuò)誤而針對(duì)邏輯地布置在第四列col4中的兩個(gè)ecc扇區(qū)d1[3]和d2[3]發(fā)生讀取故障時(shí),控制器310可使用第三恢復(fù)模式mode2來恢復(fù)ecc扇區(qū)d1[3]和d2[3]。
換言之,當(dāng)針對(duì)兩個(gè)ecc扇區(qū)d1[3]和d2[3]中的每個(gè)發(fā)生讀取故障時(shí),ecc扇區(qū)d1[3]和d2[3]可被分別包括在數(shù)據(jù)條帶d1和d2中,控制器310可使用第三恢復(fù)模式mode2來恢復(fù)ecc扇區(qū)d1[3]和d2[3]。
圖7是根據(jù)示例實(shí)施例的條帶集的存儲(chǔ)的示圖。參照?qǐng)D1和圖7,將數(shù)據(jù)條帶d0至dn+1分別存儲(chǔ)在nvm裝置401-1至410-8以及420-1至420-8中,nvm裝置401-1至410-8以及420-1至420-8中的每個(gè)包括在路way0至way7之中的不同的路中。
圖8是根據(jù)示例實(shí)施例的條帶集的存儲(chǔ)的示圖。包括在第一數(shù)據(jù)條帶d0中的ecc扇區(qū)d0[0]至d0[l-1]被分別存儲(chǔ)在nvm裝置401-1、401-2…410-8以及420-1至420-8中,nvm裝置401-1、401-2…410-8以及420-1至420-8中的每個(gè)包括在路way0至way7之中的不同的路中。此外,包括在q校驗(yàn)條帶dn+1中的ecc扇區(qū)q[0]至q[l-1]被分別存儲(chǔ)在nvm裝置401-1、401-2…410-8以及420-1至420-8中,nvm裝置401-1、401-2…410-8以及420-1至420-8中的每個(gè)包括在路way0至way7之中的不同的路中。
圖9和圖10是根據(jù)示例實(shí)施例的圖1中示出的數(shù)據(jù)存儲(chǔ)裝置300的操作的流程圖。將參照?qǐng)D1、圖2、圖4a、圖9和圖10詳細(xì)地描述在單個(gè)數(shù)據(jù)條帶中發(fā)生讀取故障時(shí)執(zhí)行第一恢復(fù)模式mode0的控制器310的操作。
假設(shè)僅針對(duì)邏輯地在第三數(shù)據(jù)條帶d2的第一列col1中包括的ecc扇區(qū)di[j](=d2[0]=dk[j])發(fā)生讀取故障。此時(shí),“i”(0≤i≤(n-1))是2,“k”(0≤k≤(n-1))是2,“j”(0≤j≤(l-1))是0??刂破?10可執(zhí)行第一恢復(fù)模式mode0。
當(dāng)在操作s110中針對(duì)ecc扇區(qū)d2[0]產(chǎn)生讀取故障時(shí),在操作s112中,控制器310暫時(shí)確定執(zhí)行默認(rèn)恢復(fù)模式,即,第一恢復(fù)模式mode0。在此,c=0指示第一恢復(fù)模式mode0。
在操作s114中,控制器310從存儲(chǔ)介質(zhì)400(nand)讀取ecc扇區(qū)p[j](=p[0]),例如,包括在p校驗(yàn)條帶dn中并且邏輯地位于第一列col1中的p數(shù)據(jù)塊或pecc扇區(qū)。包括在閃存控制器350中的ecc編碼器/解碼器355可解碼ecc扇區(qū)p[0],并且將解碼的ecc扇區(qū)p[0]存儲(chǔ)在dma控制器345中??蛇x地,可根據(jù)緩沖器控制器340的控制將解碼的ecc扇區(qū)p[0]存儲(chǔ)在dram360中。為了描述的方便起見,一個(gè)標(biāo)號(hào)用于表示存儲(chǔ)在存儲(chǔ)介質(zhì)400中的編碼的ecc扇區(qū)和解碼的ecc扇區(qū)二者。例如,標(biāo)號(hào)d2[0]用于表示編碼的ecc扇區(qū)和解碼的ecc扇區(qū)二者。編碼的ecc扇區(qū)d2[0]可包括數(shù)據(jù)和ecc奇偶校驗(yàn),但是解碼的ecc扇區(qū)d2[0]可僅包括數(shù)據(jù)。
在操作s116中,ecc編碼器/解碼器355確定解碼的ecc扇區(qū)p[0]是否具有不可校正的錯(cuò)誤。當(dāng)解碼的ecc扇區(qū)p[0]不具有不可校正的錯(cuò)誤時(shí),在操作s116中不發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況)。
在操作s120中,控制器310通過將i設(shè)置為0,來初始化用于從存儲(chǔ)介質(zhì)400讀取包括在第一數(shù)據(jù)條帶d0中并且邏輯地位于第一列col1中的ecc扇區(qū)d0[0]。因?yàn)樵诓僮鱯122中d0[0]不為d2[0](對(duì)應(yīng)于“否”的情況),所以在操作s124中,控制器310從存儲(chǔ)介質(zhì)400讀取包括在第一數(shù)據(jù)條帶d0中并且邏輯地位于第一列col1中的ecc扇區(qū)d0[0]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d0[0],并且將解碼的ecc扇區(qū)d0[0]存儲(chǔ)在dma控制器345中??蛇x地,可根據(jù)緩沖器控制器340的控制將解碼的ecc扇區(qū)d0[0]存儲(chǔ)在dram360。
dma控制器345可對(duì)解碼的ecc扇區(qū)p[0]和解碼的ecc扇區(qū)d0[0]執(zhí)行按位xor操作,并且可存儲(chǔ)xor操作結(jié)果作為第一目標(biāo)數(shù)據(jù)。此時(shí),dma控制器245可包括存儲(chǔ)解碼的ecc扇區(qū)p[0]、解碼的ecc扇區(qū)d0[0]和第一目標(biāo)數(shù)據(jù)的寄存器??蛇x地,dma控制器345可從dram360讀取解碼的ecc扇區(qū)p[0]和解碼的ecc扇區(qū)d0[0],對(duì)解碼的ecc扇區(qū)p[0]和d0[0]執(zhí)行按位xor操作,并且將xor操作結(jié)果作為第一目標(biāo)數(shù)據(jù)存儲(chǔ)在dram360中。
因?yàn)樵诓僮鱯126中針對(duì)ecc扇區(qū)d0[0]未發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況),所以控制器310可執(zhí)行操作s132。因?yàn)樵诓僮鱯132中,d0[0]不是在數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中包括的ecc扇區(qū)dn-1[0],所以控制器310返回到操作s122。在操作s122中,控制器310初始化用于從存儲(chǔ)介質(zhì)400讀取位于第二數(shù)據(jù)條帶d1的第一列col1中的ecc扇區(qū)d1[0]的操作。因?yàn)樵诓僮鱯122中d1[0]不為d2[0](對(duì)應(yīng)于“否”的情況),所以在操作s124中,控制器310從存儲(chǔ)介質(zhì)400讀取包括在第二數(shù)據(jù)條帶d1中并且邏輯地位于第一列col1中的ecc扇區(qū)d1[0]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d1[0],并且將解碼的ecc扇區(qū)d1[0]存儲(chǔ)在dma控制器345中。可選地,可根據(jù)緩沖器控制器340的控制將解碼的ecc扇區(qū)d1[0]存儲(chǔ)在dram360中。
dma控制器345可對(duì)第一目標(biāo)數(shù)據(jù)和解碼的ecc扇區(qū)d1[0]執(zhí)行按位xor操作,并且可將xor操作結(jié)果作為第二目標(biāo)數(shù)據(jù)存儲(chǔ)在它的寄存器中??蛇x地,dma控制器345可從dram360讀取第一目標(biāo)數(shù)據(jù)和解碼的ecc扇區(qū)d1[0],對(duì)第一目標(biāo)數(shù)據(jù)和解碼的ecc扇區(qū)d1[0]執(zhí)行按位xor操作,并且將xor操作結(jié)果作為第二目標(biāo)數(shù)據(jù)存儲(chǔ)在dram360中。
因?yàn)樵诓僮鱯126中針對(duì)ecc扇區(qū)d1[0]未發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況),所以控制器310可執(zhí)行操作s132。因?yàn)樵诓僮鱯132中,d1[0]不為ecc扇區(qū)dn-1[0],所以控制器310返回到操作s122。在操作s122中,控制器310初始化用于從存儲(chǔ)介質(zhì)400讀取位于第一列col1中的ecc扇區(qū)d2[0]的操作。因?yàn)樵诓僮鱯122中d2[0]為d2[0](對(duì)應(yīng)于“是”的情況),所以在操作s132中,控制器310確定d2[0]是否為dn-1[0]。換言之,在操作s132中,控制器310確定當(dāng)前讀取的ecc扇區(qū)d2[0]是否為數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中的第一ecc扇區(qū)。
控制器310對(duì)ecc扇區(qū)d3[0]至dn-1[0]執(zhí)行操作s122至s132。在對(duì)數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中的第一ecc扇區(qū)dn-1[0]執(zhí)行操作s126之后,在操作s134中,控制器310確定當(dāng)前的恢復(fù)模式是否為第一恢復(fù)模式mode0。因?yàn)楫?dāng)前的恢復(fù)模式為第一恢復(fù)模式mode0,所以在操作s142中,控制器310根據(jù)raid6執(zhí)行第一恢復(fù)模式mode0。
控制器310可使用等式3來恢復(fù)ecc扇區(qū)d2[0]:
如上所述,當(dāng)在第三數(shù)據(jù)條帶d2中的第一ecc扇區(qū)d2[0]發(fā)生讀取故障時(shí),控制器不讀取全部的條帶集,而是僅讀取在包括ecc扇區(qū)d2[0]的第一列col1中包括的ecc扇區(qū)p[0]、d0[0]、d1[0]和d3[0]至dn-1[0],來恢復(fù)ecc扇區(qū)d2[0]。因此,與將全部的條帶集從存儲(chǔ)介質(zhì)發(fā)送到控制器的傳統(tǒng)的數(shù)據(jù)存儲(chǔ)裝置相比,從存儲(chǔ)介質(zhì)400發(fā)送到控制器310的數(shù)據(jù)量被減少。
將參照?qǐng)D1、圖2、圖4b、圖9和圖10詳細(xì)地描述當(dāng)在一個(gè)數(shù)據(jù)條帶d2和q校驗(yàn)條帶dn+1中發(fā)生讀取故障時(shí)執(zhí)行第一恢復(fù)模式mode0的控制器310的操作。假設(shè)在第三數(shù)據(jù)條帶d2中的第二ecc扇區(qū)d2[1]發(fā)生讀取故障。
在圖10的操作s134中,控制器310確定當(dāng)前的恢復(fù)模式是否為第一恢復(fù)模式mode0。當(dāng)在操作134中當(dāng)前的恢復(fù)模式為第一恢復(fù)模式mode0(即,在“是”的情況下),控制器310在不讀取q校驗(yàn)條帶dn+1中的第二ecc扇區(qū)q[1]的情況下,使用ecc扇區(qū)p[1]、d0[1]、d1[1]和d3[1]至dn-1[1]來恢復(fù)ecc扇區(qū)d2[1]。
將參照?qǐng)D1、圖2、圖5、圖9和圖10詳細(xì)地描述在一個(gè)數(shù)據(jù)條帶和p校驗(yàn)條帶dn中發(fā)生讀取故障時(shí)執(zhí)行第二恢復(fù)模式mode1的控制器310的操作。假設(shè)在第三列col3中包括的ecc扇區(qū)di[j](=d1[2]=dk[j])中以及在p校驗(yàn)條帶dn的第三列col3中包括的ecc扇區(qū)p[2]中發(fā)生讀取故障。此時(shí),“i”為1,“k”為1,“j”為2。控制器310可執(zhí)行第二恢復(fù)模式mode1。
當(dāng)在操作s110中,在ecc扇區(qū)d1[2]發(fā)生讀取故障時(shí),在操作s112,中控制器310暫時(shí)地確定執(zhí)行第一恢復(fù)模式mode0。這里,c=0指示第一恢復(fù)模式mode0。
在操作s114中,控制器310從存儲(chǔ)介質(zhì)400讀取包括在p校驗(yàn)條帶dn中并且位于第三列col3中的ecc扇區(qū)p[j](=p[2])。ecc編碼器/解碼器355可解碼ecc扇區(qū)p[2],并且將解碼的ecc扇區(qū)p[2]存儲(chǔ)在dma控制器345中??蛇x地,可根據(jù)緩沖器控制器340的控制將解碼的ecc扇區(qū)p[2]存儲(chǔ)在dram360中。
在操作s116中,ecc編碼器/解碼器355確定解碼的ecc扇區(qū)p[2]是否具有不可校正的錯(cuò)誤。因?yàn)榻獯a的ecc扇區(qū)p[2]具有不可校正的錯(cuò)誤,所以在操作s116中發(fā)生讀取故障(對(duì)應(yīng)于“是”的情況)。在操作s118中,控制器310確定執(zhí)行第二恢復(fù)模式mode1。因此,在操作s118中“c”改變?yōu)?。
在操作s120中,控制器310通過將i設(shè)置為0,來初始化用于從存儲(chǔ)介質(zhì)400讀取位于第三列col3第一行中的ecc扇區(qū)d0[2]的操作。因?yàn)樵诓僮鱯122中d0[2]不為d1[2](對(duì)應(yīng)于“否”的情況),所以在操作s124中控制器310從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d0[2]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d0[2],并且將解碼的ecc扇區(qū)d0[2]存儲(chǔ)在dma控制器345或dram360中。
因?yàn)樵诓僮鱯126中針對(duì)ecc扇區(qū)d0[2]未發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況),所以控制器310可執(zhí)行操作s132。因?yàn)樵诓僮鱯132中,d0[2]不是在數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中包括的ecc扇區(qū)dn-1[2],所以控制器310返回到操作s122。在操作s122中,控制器310初始化從存儲(chǔ)介質(zhì)400讀取位于第三列col3中的ecc扇區(qū)d1[2]的操作。因?yàn)樵诓僮鱯122中,d1[2]為d1[2](對(duì)應(yīng)于“是”的情況),所以控制器310執(zhí)行操作s132。
因?yàn)閐1[2]不為dn-1[2],所以在操作s124中,控制器310從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d2[2]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d2[2],并且將解碼的ecc扇區(qū)d2[2]存儲(chǔ)在dma控制器345或dram360中。
因?yàn)樵诓僮鱯126中針對(duì)ecc扇區(qū)d2[2]未發(fā)生讀取故障,所以在操作s122中,控制器310初始化用于從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d3[2]的操作。
控制器310對(duì)ecc扇區(qū)d3[2]至dn-1[2]執(zhí)行操作s122。在對(duì)數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中的第三ecc扇區(qū)dn-1[2]執(zhí)行操作s126之后,在操作s134中,控制器310可確定當(dāng)前的恢復(fù)模式是否為第一恢復(fù)模式mode0。因?yàn)楫?dāng)前的恢復(fù)模式為第二恢復(fù)模式mode1(對(duì)應(yīng)于操作s134中的“否”的情況),所以在操作s136中,控制器310讀取q校驗(yàn)條帶dn+1中的第三ecc扇區(qū)q[2]。
在操作s140中,控制器310確定針對(duì)第三ecc扇區(qū)q[2]是否發(fā)生讀取故障。因?yàn)獒槍?duì)第三ecc扇區(qū)q[2]未發(fā)生讀取故障(對(duì)應(yīng)于操作s140中的“否”的情況),所以在操作s144中,控制器310確定當(dāng)前的恢復(fù)模式是否為第二恢復(fù)模式mode1。因?yàn)樵诓僮鱯118中c=1,所以當(dāng)前的恢復(fù)模式為第二恢復(fù)模式mode1(對(duì)應(yīng)于操作s144中的“是”的情況)。因此,在操作s146中,控制器310執(zhí)行第二恢復(fù)模式mode1。當(dāng)針對(duì)第三ecc扇區(qū)q[2]發(fā)生讀取故障q[2](對(duì)應(yīng)于操作s140中的“是”的情況)時(shí),在操作s138中,控制器310確定存在raid-6恢復(fù)故障。
因?yàn)閝校驗(yàn)條帶dn+1中的第三ecc扇區(qū)q[2]在第二恢復(fù)模式mode1下不具有不可校正的錯(cuò)誤,所以控制器310可使用等式4來恢復(fù)ecc扇區(qū)d1[2]。
如上所述,當(dāng)在第二數(shù)據(jù)條帶d1中的第三ecc扇區(qū)d1[2]并且在p校驗(yàn)條帶dn中的第三ecc扇區(qū)p[2]發(fā)生讀取故障時(shí),控制器310可使用等式4來計(jì)算ecc扇區(qū)q′[2],并且可使用ecc扇區(qū)q′[2]和解碼的ecc扇區(qū)q[2]來恢復(fù)ecc扇區(qū)d1[2]??刂破?10可通過接口110將恢復(fù)的ecc扇區(qū)d1[2]存儲(chǔ)在dram360中,并且將其發(fā)送到主機(jī)200??蛇x地,控制器310可使用恢復(fù)的ecc扇區(qū)d1[2]或等式1來生成ecc扇區(qū)p[2]和q[2],并且將恢復(fù)的ecc扇區(qū)d1[2]以及ecc扇區(qū)p[2]和q[2]寫入到存儲(chǔ)介質(zhì)400。
當(dāng)在ecc扇區(qū)d1[2]和p[2]二者中發(fā)生讀取故障時(shí),控制器310可不讀取全部的條帶集,而僅讀取在包括ecc扇區(qū)d1[2]的第三列col2中包括的ecc扇區(qū)d0[2]、d2[2]至dn-1[2]以及q[2],來恢復(fù)ecc扇區(qū)d1[2]。因此,與將全部的條帶集從存儲(chǔ)介質(zhì)發(fā)送到控制器的傳統(tǒng)的數(shù)據(jù)存儲(chǔ)裝置相比,從存儲(chǔ)介質(zhì)400發(fā)送到控制器310的數(shù)據(jù)量被減少。
將參照?qǐng)D1、圖2、圖6、圖9和圖10詳細(xì)地描述在兩個(gè)數(shù)據(jù)條帶中發(fā)生讀取故障時(shí)執(zhí)行第三恢復(fù)模式mode2的控制器310的操作。假設(shè)在第二數(shù)據(jù)條帶d1的第四列col4中包括的ecc扇區(qū)di[j](=d1[3]=dk[j])中以及在第三數(shù)據(jù)條帶d2的第四列col4中包括的ecc扇區(qū)di[j](=d2[3]=dm[j])中發(fā)生讀取故障。此時(shí),“i”為1,“k”為1,“m”為2,“j”為3。控制器310可執(zhí)行第三恢復(fù)模式mode2。
當(dāng)在操作s110中在ecc扇區(qū)d1[3]中發(fā)生讀取故障時(shí),在操作s112中,控制器310暫時(shí)確定執(zhí)行第一恢復(fù)模式mode0。在此,c=0指示第一恢復(fù)模式mode0。
在操作s114中,控制器310從存儲(chǔ)介質(zhì)400讀取在p校驗(yàn)條帶dn中包括的并且位于第四列col4的ecc扇區(qū)p[j](=p[3])。ecc編碼器/解碼器355可解碼ecc扇區(qū)p[3]??蓪⒔獯a的ecc扇區(qū)p[3]存儲(chǔ)在dma控制器345或dram360中。
在操作s116中,ecc編碼器/解碼器355確定解碼的ecc扇區(qū)p[3]是否具有不可校正的錯(cuò)誤。因?yàn)榻獯a的ecc扇區(qū)p[3]不具有不可校正的錯(cuò)誤,所以在操作s116中未發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況)。
在操作s120中,控制器310通過將i設(shè)置為0來初始化用于從存儲(chǔ)介質(zhì)400讀取位于第四列col4第一行的ecc扇區(qū)d0[3]的操作。因?yàn)樵诓僮鱯122中d0[3]不為d1[3](對(duì)應(yīng)于“否”的情況),所以在操作s124中,控制器310從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d0[3]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d0[3],并且將解碼的ecc扇區(qū)d0[3]存儲(chǔ)在dma控制器345或dram360中。
因?yàn)樵诓僮鱯126中針對(duì)ecc扇區(qū)d0[3]未發(fā)生讀取故障(對(duì)應(yīng)于“否”的情況),所以控制器310可執(zhí)行操作s132。因?yàn)樵诓僮鱯132中,d0[3]不是在數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中包括的ecc扇區(qū)dn-1[3],所以控制器310返回到操作s122。在操作s122中控制器310可初始化用于從存儲(chǔ)介質(zhì)400讀取位于第四列col4第二行的ecc扇區(qū)d1[3]的操作。因?yàn)樵诓僮鱯122中d1[3]為d1[3](對(duì)應(yīng)于“是”的情況),所以控制器310執(zhí)行操作s132。因?yàn)樵诓僮鱯132中,d1[3]不為ecc扇區(qū)dn-1[3],所以控制器310返回到操作s122。
在操作s122中,控制器310初始化用于從存儲(chǔ)介質(zhì)400讀取位于第四列col4第三行的ecc扇區(qū)d2[3]的操作。因?yàn)樵诓僮鱯122中d2[3]不為d1[3](對(duì)應(yīng)于“否”的情況),所以控制器310執(zhí)行操作s124。在操作s124,控制器310從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d2[3]。然而,因?yàn)閑cc扇區(qū)d2[3]具有不可校正的錯(cuò)誤,所以針對(duì)ecc扇區(qū)d2[3]發(fā)生讀取故障(對(duì)應(yīng)于操作s126中的“是”的情況)??刂破?10執(zhí)行操作s128。作為執(zhí)行操作s128的結(jié)果,c=2。因?yàn)椤癱”不大于2(對(duì)應(yīng)于操作s130中的“否”的情況),所以在操作s132中,控制器310確定ecc扇區(qū)d2[3]是否為在數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中包括的ecc扇區(qū)dn-1[3]。當(dāng)“c”大于2(對(duì)應(yīng)于操作s130中的“是”的情況)時(shí),在操作s138中,控制器310確定存在raid-6恢復(fù)故障。
因?yàn)閑cc扇區(qū)d2[3]不為ecc扇區(qū)dn-1[3](對(duì)應(yīng)于操作s132中的“否”的情況),所以在操作s122和s124中控制器310從存儲(chǔ)介質(zhì)400讀取ecc扇區(qū)d2[4]。ecc編碼器/解碼器355可解碼ecc扇區(qū)d2[4],并且將解碼的ecc扇區(qū)d2[4]存儲(chǔ)在dma控制器345或dram360中。
控制器310對(duì)ecc扇區(qū)d2[3]至dn-1[3]執(zhí)行操作s122至s132。在對(duì)數(shù)據(jù)條帶d0至dn-1之中的最后的數(shù)據(jù)條帶dn-1中的第四ecc扇區(qū)dn-1[3]執(zhí)行操作s126之后,在操作s134中,控制器310確定當(dāng)前的恢復(fù)模式是否為第一恢復(fù)模式mode0。因?yàn)楫?dāng)前的恢復(fù)模式為第三恢復(fù)模式mode2(對(duì)應(yīng)于操作s134中的“否”的情況),所以在操作s136中,控制器310讀取q校驗(yàn)條帶dn+1中的第四ecc扇區(qū)q[3]。
在操作s140中,控制器310確定針對(duì)第四ecc扇區(qū)q[3]是否發(fā)生讀取故障。因?yàn)獒槍?duì)第四ecc扇區(qū)q[3]未發(fā)生讀取故障(對(duì)應(yīng)于操作s140中的“否”的情況),所以在操作s144中,控制器310確定當(dāng)前的恢復(fù)模式是否為第二恢復(fù)模式mode1。因?yàn)樵诓僮鱯128中已經(jīng)將“c”設(shè)置為2,所以當(dāng)前的恢復(fù)模式為第三恢復(fù)模式mode2(對(duì)應(yīng)于操作s144中的“否”的情況)。因此,在操作s148中控制器310執(zhí)行第三恢復(fù)模式mode2。當(dāng)針對(duì)第四ecc扇區(qū)q[3]發(fā)生讀取故障(對(duì)應(yīng)于操作s140中的“是”的情況)時(shí),在操作s138中,控制器310確定存在raid-6恢復(fù)故障。
因?yàn)樵诘谌x取模式mode2下,讀取故障既沒有發(fā)生在p校驗(yàn)條帶dn中的第四ecc扇區(qū)p[3]中也沒有發(fā)生在q校驗(yàn)條帶dn+1中的第四ecc扇區(qū)q[3]中,所以控制器310可使用等式5來恢復(fù)ecc扇區(qū)d1[3]和d2[3]:
如上所述,當(dāng)在第二數(shù)據(jù)條帶d1中的第四ecc扇區(qū)d1[3]以及在第三數(shù)據(jù)條帶d2中的第四ecc扇區(qū)d2[3]發(fā)生讀取故障時(shí),控制器310可使用等式5來計(jì)算ecc扇區(qū)p′[3]和ecc扇區(qū)q′[3],可使用計(jì)算的ecc扇區(qū)p′[3]和q′[3]以及解碼的ecc扇區(qū)p[3]和q[3]來恢復(fù)ecc扇區(qū)d1[3],并且可使用計(jì)算的ecc扇區(qū)p′[3]和q′[3]以及解碼的ecc扇區(qū)p[3]和q[3]來恢復(fù)ecc扇區(qū)d2[3]??刂破?10可將恢復(fù)的ecc扇區(qū)d1[3]和d2[3]存儲(chǔ)在dram360或存儲(chǔ)介質(zhì)400中,并且通過接口110將它們發(fā)送到主機(jī)200。
當(dāng)在ecc扇區(qū)d1[3]和d2[3]二者中發(fā)生讀取故障時(shí),控制器310不讀取全部的條帶集,而僅讀取在包括ecc扇區(qū)d1[3]和d2[3]的第四列col4中包括的ecc扇區(qū)d0[3]、d4[3]至dn-1[3]、p[3]和q[3],來恢復(fù)ecc扇區(qū)d1[3]和d2[3]。因此,與將全部的條帶集從存儲(chǔ)介質(zhì)發(fā)送到控制器的傳統(tǒng)的數(shù)據(jù)存儲(chǔ)裝置相比,從存儲(chǔ)介質(zhì)400發(fā)送到控制器310的數(shù)據(jù)量被減少。
圖11是根據(jù)示例實(shí)施例的圖1中示出的數(shù)據(jù)存儲(chǔ)裝置300的操作的流程圖。參照?qǐng)D1至圖11,在操作s210中,控制器310恢復(fù)在多個(gè)數(shù)據(jù)條帶之中的一個(gè)數(shù)據(jù)條帶或兩個(gè)數(shù)據(jù)條帶中包括的一個(gè)ecc扇區(qū)或兩個(gè)ecc扇區(qū)。假設(shè)以參照?qǐng)D1至圖10描述的恢復(fù)模式mode0至mode2中的每個(gè)恢復(fù)模式來恢復(fù)一個(gè)ecc扇區(qū)或兩個(gè)ecc扇區(qū)。因此,在全部的數(shù)據(jù)條帶被恢復(fù)之后,在操作s220中,使用等式1來恢復(fù)在p校驗(yàn)條帶和/或q校驗(yàn)條帶中包括的一個(gè)ecc扇區(qū)或多個(gè)ecc扇區(qū)。
如上所述,根據(jù)示例實(shí)施例,具有raid-6架構(gòu)的數(shù)據(jù)存儲(chǔ)裝置在讀取操作期間,將存儲(chǔ)在存儲(chǔ)介質(zhì)中的數(shù)據(jù)塊之中的邏輯地或物理地位于第一列中的第一數(shù)據(jù)塊進(jìn)行解碼,當(dāng)在第一數(shù)據(jù)塊中發(fā)生讀取故障時(shí),數(shù)據(jù)存儲(chǔ)裝置讀取所述數(shù)據(jù)塊之中的邏輯地或物理地布置在第一列中的除了第一數(shù)據(jù)塊之外的第二數(shù)據(jù)塊,而非讀取全部的數(shù)據(jù)塊,并且使用第二數(shù)據(jù)塊來恢復(fù)第一數(shù)據(jù)塊。因此,當(dāng)在第一數(shù)據(jù)塊中發(fā)生讀取故障時(shí),從存儲(chǔ)介質(zhì)讀取的數(shù)據(jù)量被顯著減少。作為結(jié)果,數(shù)據(jù)存儲(chǔ)裝置在短時(shí)間有效地恢復(fù)數(shù)據(jù)。此外,數(shù)據(jù)存儲(chǔ)裝置根據(jù)在第一列中包括的第二塊之中已經(jīng)發(fā)生讀取故障的塊的數(shù)量,從多個(gè)恢復(fù)模式中選擇最有效的模式,并且使用選擇的恢復(fù)模式來恢復(fù)已經(jīng)發(fā)生讀取故障的一個(gè)數(shù)據(jù)塊或兩個(gè)數(shù)據(jù)塊。
按照本發(fā)明構(gòu)思的領(lǐng)域中的傳統(tǒng),實(shí)施例根據(jù)功能塊、單元和/或模塊而被描述和示出在附圖中。本領(lǐng)域技術(shù)人員將理解,通過可使用基于半導(dǎo)體的制造技術(shù)或其他制造技術(shù)形成的電子(或光學(xué))電路(諸如,邏輯電路、分立元件、微處理器、硬連接電路、存儲(chǔ)器元件、有線連接等)來物理實(shí)現(xiàn)這些塊、單元和/或模塊。在塊、單元和/或模塊通過微處理器或類似物實(shí)現(xiàn)的情況下,可使用軟件(例如,微碼)對(duì)它們進(jìn)行編程以執(zhí)行在此討論的各種功能,并可通過固件和/或軟件來選擇性地驅(qū)動(dòng)它們??蛇x擇地,可通過專用硬件,或作為執(zhí)行一些功能的專用硬件和執(zhí)行其他功能的處理器(例如,一個(gè)或多個(gè)編程微處理器和相關(guān)電路)的組合來實(shí)現(xiàn)每個(gè)塊、單元和/或模塊。此外,在不脫離本發(fā)明構(gòu)思的范圍的情況下,可將示例實(shí)施例的每個(gè)塊、單元和/或模塊物理地分割成兩個(gè)或更多個(gè)相互作用并且分立的塊、單元和/或模塊。此外,在不脫離本發(fā)明構(gòu)思的范圍的情況下,可將示例實(shí)施例的每個(gè)塊、單元和/或模塊物理地組合成更復(fù)雜的塊、單元和/或模塊。
雖然已經(jīng)參照本發(fā)明構(gòu)思的示例實(shí)施例對(duì)本發(fā)明構(gòu)思進(jìn)行了示出和描述,但是本領(lǐng)域的普通技術(shù)人員將理解,在不脫離由權(quán)利要求限定的本發(fā)明構(gòu)思的精神和范圍的情況下可在形式和細(xì)節(jié)上對(duì)其做出各種改變。