本發(fā)明的實施方式主要涉及存儲裝置及其工作方法。
背景技術(shù):
已知有磁盤、半導(dǎo)體存儲器等向存儲介質(zhì)寫入數(shù)據(jù)的存儲裝置。
技術(shù)實現(xiàn)要素:
本發(fā)明的實施方式提供一種能夠提高對從主機(jī)接收到的讀出命令的響應(yīng)性的存儲裝置及其工作方法。
實施方式的存儲裝置具有接口、讀寫器以及控制器。所述接口接收命令。所述讀寫器從具備多個存儲區(qū)域的存儲介質(zhì)中的一部分或全部存儲區(qū)域讀出數(shù)據(jù),并向所述存儲區(qū)域?qū)懭霐?shù)據(jù)。所述控制器基于通過所述接口接收到的命令控制所述讀寫器。另外,所述控制器使所述讀寫器將至少包含第一數(shù)據(jù)和第二數(shù)據(jù)的數(shù)據(jù)組向與檢測出錯誤的第一存儲區(qū)域不同的至少一個存儲區(qū)域?qū)懭?。所述第一?shù)據(jù)是向所述第一存儲區(qū)域?qū)懭肓说臄?shù)據(jù)的至少一部分,所述第二數(shù)據(jù)是向與所述第一存儲區(qū)域物理上連續(xù)的第二存儲區(qū)域?qū)懭肓说臄?shù)據(jù)的至少一部分。
附圖說明
圖1是表示第一實施方式中的存儲設(shè)備的構(gòu)成的一例的圖。
圖2是表示第一實施方式中的磁盤的構(gòu)成的一例的圖。
圖3是表示第一實施方式中的mcu(microcontrollerunit:微控制單元)的構(gòu)成和保存于ram的信息的一例的圖。
圖4是表示扇區(qū)管理表的一例的圖。
圖5是表示在鍵值(key-value)方式中使用的各鍵地址表的一例的圖。
圖6是表示第一實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。
圖7是表示將向包含異常扇區(qū)的扇區(qū)組寫入了的數(shù)據(jù)組向在磁盤的周向上連續(xù)的扇區(qū)寫入的處理的一例的流程圖。
圖8是示意地表示將數(shù)據(jù)組向其他扇區(qū)寫入的處理的情形的圖。
圖9是示意地表示將數(shù)據(jù)組向其他扇區(qū)寫入的處理的情形的圖。
圖10是示意地表示在相同的軌道內(nèi)不存在連續(xù)的空閑區(qū)域的情況下進(jìn)行的向其他扇區(qū)寫入數(shù)據(jù)組的處理的情形的圖。
圖11是示意性地表示在磁盤內(nèi)通過碎片整理增加了連續(xù)的空閑區(qū)域的數(shù)量的情形的圖。
圖12是表示伴隨著向其他扇區(qū)寫入數(shù)據(jù)組的處理而被改寫的各鍵地址表的一例的圖。
圖13是表示第一實施方式中的向其他扇區(qū)寫入用戶數(shù)據(jù)的處理的結(jié)果的圖。
圖14是示意地表示跨越在磁盤的徑向上連續(xù)的軌道并將數(shù)據(jù)組寫入的處理的情形的圖。
圖15是示意地表示跨越在磁盤的徑向上連續(xù)的軌道并將數(shù)據(jù)組寫入的處理的情形的圖。
圖16是表示第二實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。
圖17是表示僅將寫入到異常扇區(qū)的用戶數(shù)據(jù)寫入到相同的軌道內(nèi)的情形的圖。
圖18是表示僅將寫入到異常扇區(qū)的用戶數(shù)據(jù)寫入到相同的軌道內(nèi)的情形的圖。
圖19是表示了將寫入到包含異常扇區(qū)的扇區(qū)組的數(shù)據(jù)組寫入到相鄰的軌道內(nèi)的情形的圖。
圖20是表示了將寫入到包含異常扇區(qū)在內(nèi)的扇區(qū)組的數(shù)據(jù)組寫入到相鄰的軌道內(nèi)的情形的圖。
圖21是表示利用lba方式從主機(jī)接收的寫入命令的內(nèi)容的一例的 圖。
圖22是表示在lba方式中使用的各lba地址表的一例的圖。
圖23是表示第四實施方式中的mcu的構(gòu)成的一例的圖。
圖24是表示同時訪問(access)頻率表的一例的圖。
圖25是表示第四實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。
圖26是表示第五實施方式中的存儲設(shè)備的構(gòu)成的一例的圖。
圖27是表示轉(zhuǎn)換表的一例的圖。
圖28是表示再配置管理表的一例的圖。
圖29是表示將寫入到包含異常單元的頁的數(shù)據(jù)組向其他頁寫入的處理的情形的圖。
圖30是表示將寫入到包含異常頁的塊(block)的數(shù)據(jù)組向其他塊寫入的處理的情形的圖。
具體實施方式
以下,參照附圖說明本發(fā)明的實施方式。此外,以下說明中的構(gòu)成要素的數(shù)量、大小、比率、處理的順序等僅為一例,并不限定于此。
實施方式的存儲裝置是向磁盤、nand等半導(dǎo)體存儲器、磁阻存儲器等存儲介質(zhì)的存儲區(qū)域?qū)懭霐?shù)據(jù)或從存儲區(qū)域讀出數(shù)據(jù)的存儲裝置?!按鎯^(qū)域”是指非易失性存儲介質(zhì)的一部分或全部,是存儲數(shù)據(jù)的區(qū)域。
在存儲介質(zhì)為磁盤的情況下,“存儲區(qū)域”可以是一個或多個扇區(qū)或者一個扇區(qū)的一部分。
在存儲介質(zhì)為半導(dǎo)體存儲器或磁阻存儲器的情況下,“存儲區(qū)域”可以是一個或多個頁或簇,或者是一個頁或簇的一部分。
以下,有時將實施方式的存儲裝置和存儲介質(zhì)合在一起的部件稱為存儲設(shè)備來進(jìn)行說明。
(第一實施方式)
圖1是表示第一實施方式中的存儲設(shè)備的構(gòu)成的一例的圖。第一實施方式中的存儲設(shè)備1可以包含磁盤10、磁頭臂組件(headstackassembly: hsa)20、讀寫通道(在圖中為r/w通道)30、vcm(voicecoilmotor:音圈馬達(dá))驅(qū)動電路31、spm(spindlemotor:主軸馬達(dá))驅(qū)動電路32、主機(jī)接口40、hdc(harddiskcontroller:硬盤控制器)50、mcu(microcontrollerunit:中央控制器單元)60、ram(randomaccessmemory:隨機(jī)訪問存儲器)70、rom(readonlymemory:只讀存儲器)80,但不限定于此。
磁頭臂組件20和讀寫通道30為“讀寫器”的一例,hdc50和mcu60為“控制器”的一例。此外,在“讀寫器”中,除了磁頭臂組件20和讀寫通道30之外,也可以包含vcm驅(qū)動電路31和spm驅(qū)動電路32。
存儲設(shè)備1與主機(jī)(客戶端)100進(jìn)行通信。存儲設(shè)備1根據(jù)來自主機(jī)100的請求,向磁盤10寫入信息或讀出寫入到磁盤10的信息。主機(jī)100既可以是存儲設(shè)備1的利用者(用戶)使用的信息處理裝置,也可以是進(jìn)一步基于從另一裝置接收到的命令等向存儲設(shè)備1發(fā)送各種命令的裝置。另外,主機(jī)100也可以是基于在內(nèi)部進(jìn)行了信息處理的結(jié)果,生成各種命令并發(fā)送給存儲設(shè)備1的裝置。
主機(jī)100對存儲設(shè)備1發(fā)送指示讀出數(shù)據(jù)的讀出命令、指示寫入數(shù)據(jù)的寫入命令以及指示刪除數(shù)據(jù)的刪除命令等。
主機(jī)100也可以利用鍵值(key-value)方式生成對存儲設(shè)備1的命令。鍵值方式是用指定了識別數(shù)據(jù)的鍵和作為數(shù)據(jù)的內(nèi)容的值的命令,對存儲設(shè)備1進(jìn)行指示的方式。鍵是不受連號生成等規(guī)則的限制而任意生成的信息。以下,有時將根據(jù)來自主機(jī)100的指示寫入到存儲設(shè)備1的數(shù)據(jù)或被指示了寫入的數(shù)據(jù)稱為用戶數(shù)據(jù)。
用戶數(shù)據(jù)是與各鍵地址表72進(jìn)行了關(guān)聯(lián)的數(shù)據(jù),所述地址表72是將物理地址與由來自后述的主機(jī)100的命令指定的鍵進(jìn)行了關(guān)聯(lián)而得到的表。另外,用戶數(shù)據(jù)也可以是與各lba地址表72a進(jìn)行了關(guān)聯(lián)的數(shù)據(jù),所述地址表72a是將物理地址與后述的來自主機(jī)100的命令指定的lba(logicalblockaddressing:邏輯區(qū)塊地址)進(jìn)行了關(guān)聯(lián)而得到的表。
磁盤10是在鋁或玻璃等基板的正反面形成了磁記錄層的圓盤 (platter:盤片)。磁盤10既可以由單一的圓盤構(gòu)成,也可以相對于圓盤的厚度方向?qū)盈B多片圓盤而構(gòu)成。在本實施方式中,對磁盤10由單一的圓盤構(gòu)成進(jìn)行說明。磁盤10是存儲介質(zhì)的一例。
圖2是表示第一實施方式中的磁盤的構(gòu)成的一例的圖。在磁盤10中設(shè)置有多個軌道tr。軌道tr是將磁盤10的一個面分割成同心圓狀而成的各個區(qū)域。在各軌道tr中包含多個扇區(qū)sc。扇區(qū)sc是沿周向分割軌道tr而成的各個區(qū)域,所述周向是繞著磁盤10的中心的方向。扇區(qū)sc是數(shù)據(jù)的寫入和讀出的單位。彼此相鄰的多個扇區(qū)sc是“物理上連續(xù)的存儲區(qū)域”的一例?!拔锢怼笔侵阜恰斑壿嫛钡囊馑?。
另外,也可以在磁盤10中設(shè)置伺服區(qū)域sv,所述伺服區(qū)域sv保存有用于進(jìn)行記錄再生磁頭21的定位的伺服信息。磁盤10中的數(shù)據(jù)的記錄方式既可以是面內(nèi)(in-plane)記錄方式,也可以是垂直記錄方式。
返回圖1,磁頭臂組件20包含記錄再生磁頭21、頭放大器(headamplifier)ic22、音圈馬達(dá)23以及主軸馬達(dá)24。
記錄再生磁頭21搭載在頭臂上,利用音圈馬達(dá)23的驅(qū)動一邊在磁盤10上方懸浮,一邊相對于磁盤10進(jìn)行相對移動。記錄再生磁頭21既可以是使用了記錄和再生兼用的電磁鐵的薄膜頭,也可以是組合了由mr(magnetoresistive:磁電阻)頭實現(xiàn)的再生專用頭和由薄膜頭實現(xiàn)的記錄專用頭而成的部件,mr頭是使用了gmr(giantmagnetoresistive:特大磁電阻)或tmr(tunnelmagnetoresistance:隧道磁電阻)等半導(dǎo)體的部件。
記錄再生磁頭21在寫入用戶數(shù)據(jù)的情況下,通過基于由頭放大器ic22供給的電信號產(chǎn)生磁場使磁盤10的磁記錄層的磁化方向變化。由此,記錄再生磁頭21將用戶數(shù)據(jù)向磁盤10寫入。
另外,記錄再生磁頭21在讀出用戶數(shù)據(jù)的情況下,一邊在磁盤10上移動,一邊生成與磁盤10的磁記錄層的磁化方向?qū)?yīng)的電信號。記錄再生磁頭21經(jīng)由頭放大器ic22將生成的電信號供給到讀寫通道30。
頭放大器ic22對由記錄再生磁頭21供給的電信號的信號強(qiáng)度進(jìn)行放 大。另外,頭放大器ic22將由讀寫通道30供給的用戶數(shù)據(jù)轉(zhuǎn)換成電信號,并供給到記錄再生磁頭21。
音圈馬達(dá)23根據(jù)由vcm驅(qū)動電路31供給的驅(qū)動電流,驅(qū)動磁頭臂組件20。由此,音圈馬達(dá)23使記錄再生磁頭21沿著磁盤10的徑向(或沿著相對于徑向具有角度的傾斜的方向)向外側(cè)或內(nèi)側(cè)移動,并使之在軌道tr間移動。徑向是指穿過磁盤的中心的方向。
主軸馬達(dá)24根據(jù)由spm驅(qū)動電路32供給的驅(qū)動電流,使磁盤10旋轉(zhuǎn)。例如,主軸馬達(dá)24是dc(直流)無刷電機(jī)(brushlessmotor)。
讀寫通道30例如由lsi(largescaleintegration:大規(guī)模集成電路)或asic(applicationspecificintegratedcircuit:專用集成電路)、fpga(field-programmablegatearray:現(xiàn)場可編程門陣列)等硬件來實現(xiàn)。讀寫通道30將經(jīng)由mcu60由hdc50供給的用戶數(shù)據(jù)編碼成預(yù)定格式的數(shù)據(jù)序列。讀寫通道30將編碼而成的數(shù)據(jù)序列供給到頭放大器ic22。
另外,讀寫通道30對由記錄再生磁頭21讀出并由頭放大器ic22放大而成的電信號進(jìn)行解碼,并經(jīng)由mcu60供給到hdc50。此外,在記錄再生磁頭21采用dfh(dynamicflyingheightcontrol:動態(tài)浮動高度控制)技術(shù)的情況下,讀寫通道30也可以向?qū)τ涗浽偕蓬^21進(jìn)行加熱的加熱器供給電流。
vcm驅(qū)動電路31接受來自mcu60的控制信號并向音圈馬達(dá)23供給驅(qū)動電流。spm驅(qū)動電路32接受mcu60的控制信號并向主軸馬達(dá)24供給驅(qū)動電流。
主機(jī)接口40與主機(jī)100進(jìn)行通信。主機(jī)接口40是接口的一例。主機(jī)接口40從主機(jī)100接收寫入命令、讀出命令或其他命令,所述寫入命令請求對磁盤10寫入用戶數(shù)據(jù),所述讀出命令請求從磁盤10讀出用戶數(shù)據(jù)。例如,在由主機(jī)100發(fā)送的寫入命令中,至少包含鍵和值(用戶數(shù)據(jù)),在讀出命令中至少包含鍵。此外,主機(jī)100也可以向存儲設(shè)備1分別發(fā)送寫入命令、鍵或值。另外,主機(jī)100也可以向存儲設(shè)備1分別發(fā)送讀出命令和鍵。
另外,主機(jī)接口40將根據(jù)接收到的讀出命令而讀出的用戶數(shù)據(jù)發(fā)送給作為讀出命令的發(fā)送源的主機(jī)100。
另外,主機(jī)接口40也可以在對從主機(jī)100接收到的命令進(jìn)行預(yù)定的信號處理之后,將進(jìn)行了該信號處理的命令供給到之后的hdc50等。
hdc50將通過主機(jī)接口40接收到的寫入命令所包含的用戶數(shù)據(jù)暫時保存在ram70的寫入緩存(未圖示)中。另外,hdc50將通過mcu60的控制從磁盤10讀出的用戶數(shù)據(jù)暫時保存在ram70的讀出緩存(未圖示)中。
另外,hdc50向從主機(jī)100接收到的用戶數(shù)據(jù)賦予糾錯碼(errorcorrectioncode:ecc),并供給到讀寫通道30。hdc50在糾錯碼中使用ldpc(low-densityparity-check:低密度奇偶校驗)符號或里德所羅門符號、漢明符號、塊符號、奇偶校驗符號等碼。另外,hdc50也可以向用戶數(shù)據(jù)賦予crc(cyclicredundancycheck:循環(huán)冗余檢驗)符號。
另外,hdc50基于由讀寫通道30解碼而成的用戶數(shù)據(jù)所包含的糾錯碼,進(jìn)行糾錯。
所謂“糾錯”可以是包含對數(shù)據(jù)中的錯誤進(jìn)行訂正的處理,或者將檢測出錯誤的數(shù)據(jù)使用通過冗余化保存在其他存儲區(qū)域中的與該數(shù)據(jù)內(nèi)容相同的其他數(shù)據(jù)來進(jìn)行改寫(overwrite)的處理的過程(process)。
例如,hdc50使用糾錯碼,以位為單位或以字節(jié)為單位等按照預(yù)定的數(shù)據(jù)大小的單位,檢測數(shù)據(jù)的錯誤,并對檢測出錯誤的數(shù)據(jù)進(jìn)行訂正?!板e誤error”的概念包含錯誤(errors)和可能的錯誤(likelyerrors)??梢栽O(shè)為:用“糾錯”訂正的數(shù)據(jù)中是否真的存在錯誤并不是問題(matter),而是經(jīng)“糾錯”的數(shù)據(jù)存在有錯誤的可能性。
另外,“糾錯”也可以通過將基于糾錯碼檢測出錯誤的數(shù)據(jù)用與該數(shù)據(jù)內(nèi)容相同的其他數(shù)據(jù)進(jìn)行改寫來執(zhí)行。
“與該數(shù)據(jù)內(nèi)容相同的其他數(shù)據(jù)”例如既可以保存在相同的存儲介質(zhì)內(nèi)的、與保存有該數(shù)據(jù)的存儲區(qū)域不同的其他存儲區(qū)域,也可以保存在與具有保存該數(shù)據(jù)的存儲區(qū)域的存儲介質(zhì)不同的存儲介質(zhì)的存儲區(qū)域。
例如,hdc50以保存在磁盤10上的預(yù)定存儲區(qū)域的冗余化數(shù)據(jù)為基礎(chǔ),將不能讀出的用戶數(shù)據(jù)復(fù)原,并使復(fù)原后的用戶數(shù)據(jù)向作為讀出對象的扇區(qū)sc覆蓋并寫入。
另外,hdc50也可以在未利用后述的mcu60進(jìn)行用戶數(shù)據(jù)的寫入處理或讀出處理的期間控制記錄再生磁頭21并進(jìn)行驗證。驗證是存儲設(shè)備1主動地讀出被寫入到磁盤10的任意的扇區(qū)sc的數(shù)據(jù),并對讀出的數(shù)據(jù)進(jìn)行糾錯的處理。
另外,hdc50也可以通過反向(reverse)ecc(errorcorrectioncode:糾錯碼),進(jìn)行糾錯碼的賦予和糾錯。反向ecc是在進(jìn)行數(shù)據(jù)的編碼前賦予糾錯碼,并在進(jìn)行用戶數(shù)據(jù)的解碼前進(jìn)行糾錯的方式。
mcu60按保存在寫入緩存中的順序,寫入或讀出用戶數(shù)據(jù),所述寫入緩存保存在ram70中。mcu60需要等待用戶數(shù)據(jù)的寫入或讀出,直到記錄再生磁頭21向作為目的的軌道tr上的移動完成。因此,為了提高對主機(jī)100的命令的響應(yīng)速度,hdc50可以調(diào)換寫入緩存中的用戶數(shù)據(jù)的保存順序,以使得記錄再生磁頭21的移動時間成為最小,即音圈馬達(dá)23的驅(qū)動量成為最小。
圖3是表示第一實施方式中的mcu的構(gòu)成和保存于ram的信息的一例的圖。第一實施方式中的mcu60也可以包含頭控制部61、異常判定部62以及改寫處理部63,但不限于此。上述mcu60的構(gòu)成要素的一部分或全部也可以通過mpu(microprocessingunit:微型處理單元)等處理器執(zhí)行存儲于rom80的程序來實現(xiàn)。另外,mcu60的構(gòu)成要素中的一部分或全部也可以由lsi或asic、fpga等硬件實現(xiàn),并具有用于實現(xiàn)各個功能的電路結(jié)構(gòu)(circuitry)。
例如,除了將用戶數(shù)據(jù)保存在寫入緩存中以外,ram70還保存扇區(qū)管理表71和各鍵地址表72等。扇區(qū)管理表71和各鍵地址表72在存儲設(shè)備1的電源設(shè)為關(guān)閉狀態(tài)期間保持在磁盤10中。
另外,當(dāng)存儲設(shè)備1的電源成為開啟狀態(tài)時,扇區(qū)管理表71和各鍵地址表72在ram70中被展開并使用,在電源設(shè)為關(guān)閉狀態(tài)時,回寫到磁盤 10中。此外,存儲設(shè)備1也可以包含非易失地保持扇區(qū)管理表71、各鍵地址表72的非易失性存儲器(未圖示)。非易失性存儲器例如是指閃存或mram(magnetoresistiverandomaccessmemory:磁阻式隨機(jī)訪問存儲器)。
rom80保存hdc50、mcu60的處理器執(zhí)行的引導(dǎo)程序、固件等程序。程序的一部分也可以保存在磁盤10或上述非易失性存儲器中。
圖4是表示扇區(qū)管理表的一例的圖。如圖所示,扇區(qū)管理表71對按各軌道tr的編號(軌道編號)的軌道tr所包含的扇區(qū)sc的編號(扇區(qū)編號)賦予表示數(shù)據(jù)保存完成或未保存這樣的保存狀態(tài)的信息。
例如,軌道編號表示磁盤10上的軌道tr的物理坐標(biāo)(在徑向上,從外側(cè)或從內(nèi)側(cè)起第幾個)。扇區(qū)編號表示從利用軌道編號確定的軌道tr上的成為基準(zhǔn)的扇區(qū)sc起,沿周向數(shù)為第幾個扇區(qū)sc。因此,帶有與第一扇區(qū)sc的編號連續(xù)的扇區(qū)編號的第二扇區(qū)sc是與第一扇區(qū)sc物理上連續(xù)的扇區(qū)sc。
圖5是表示在鍵值方式中使用的各鍵地址表的一例的圖。各鍵地址表72是參照信息的一例。在圖示的例子中,在各鍵地址表72中,對用命令指定的鍵關(guān)聯(lián)有用戶數(shù)據(jù)的數(shù)據(jù)長度、軌道編號以及最前頭扇區(qū)的扇區(qū)編號。最前頭扇區(qū)是指,被寫入了與相應(yīng)的鍵進(jìn)行了關(guān)聯(lián)的用戶數(shù)據(jù)的扇區(qū)sc中的、扇區(qū)編號最小的扇區(qū)sc。以下,有時將被寫入了與一個鍵進(jìn)行了關(guān)聯(lián)的數(shù)據(jù)的扇區(qū)sc的集合稱為扇區(qū)組sg。此外,在圖5的例子中,設(shè)為與一個鍵進(jìn)行了關(guān)聯(lián)的數(shù)據(jù)向一個軌道tr內(nèi)寫入,但是也可以是與一個鍵進(jìn)行了關(guān)聯(lián)的數(shù)據(jù)跨越多個軌道tr而寫入的情況。在該情況下,也可以對一個鍵關(guān)聯(lián)有多組軌道編號與最前頭扇區(qū)的扇區(qū)編號的組合。
頭控制部61根據(jù)由主機(jī)接口40接收到的命令,使記錄再生磁頭21在作為對象的扇區(qū)sc上移動。頭控制部61在使記錄再生磁頭21在作為對象的扇區(qū)sc上移動時,使記錄再生磁頭21從軌道tr上的伺服區(qū)域sv讀出伺服信息,并控制在磁盤10上移動的記錄再生磁頭21的位置。在伺服信息中包含軌道編號、扇區(qū)編號以及用于定位的突發(fā)(burst)信號。
例如,頭控制部61在使記錄再生磁頭21向由命令指定的期望的扇區(qū)sc移動的情況下,首先,控制spm驅(qū)動電路32使磁盤10旋轉(zhuǎn),從記錄再生磁頭21所處的軌道tr上的伺服區(qū)域sv讀出伺服信息。頭控制部61基于讀出的兩點間的伺服信息(最近的信息和其之前的一點的信息),算出記錄再生磁頭21相對于磁盤10的相對移動速度。
頭控制部61算出包含最近讀出的伺服信息的軌道tr與包含期望的扇區(qū)sc的軌道tr的距離,決定與該算出的距離對應(yīng)的記錄再生磁頭21的目標(biāo)速度。頭控制部61基于決定了的目標(biāo)速度和算出的相對移動速度,決定向音圈馬達(dá)23供給的驅(qū)動電流。頭控制部61控制vcm驅(qū)動電路31,向音圈馬達(dá)23供給決定了的驅(qū)動電流。這樣,頭控制部61控制記錄再生磁頭21的移動速度。
在記錄再生磁頭21移動到目的軌道tr上后,頭控制部61等待,直到期望的扇區(qū)sc旋轉(zhuǎn)到記錄再生磁頭21的位置。當(dāng)期望的扇區(qū)sc到達(dá)記錄再生磁頭21的位置時,頭控制部61使記錄再生磁頭21對該期望的扇區(qū)sc進(jìn)行與命令相應(yīng)的讀出、寫入以及刪除等處理。
在期望的扇區(qū)sc要旋轉(zhuǎn)來到記錄再生磁頭21的寫入位置期間,為了維持包含期望的扇區(qū)sc的軌道tr上的位置,頭控制部61使記錄再生磁頭21從該軌道tr上的伺服區(qū)域sv讀出伺服信息。頭控制部61基于讀出的伺服信息中的突發(fā)信號的波形圖案(信號電平、脈沖寬度等),調(diào)整音圈馬達(dá)23的驅(qū)動量。由此,頭控制部61使記錄再生磁頭21維持在軌道tr的中心線(沿著磁盤10的周向?qū)⒏鬈壍赖膮^(qū)域二等分的線)上的位置。
[寫入處理]
以下,說明通過主機(jī)接口40接收到寫入命令的情況下的頭控制部61的處理。在通過主機(jī)接口40接收到指定了新的鍵的寫入命令的情況下,頭控制部61基于由寫入命令指定的數(shù)據(jù)長度,決定要寫入用戶數(shù)據(jù)的扇區(qū)sc。新的鍵是未登記在各鍵地址表72中的鍵。頭控制部61基于用戶數(shù)據(jù)的數(shù)據(jù)長度和每個扇區(qū)sc的存儲容量算出需要的扇區(qū)數(shù),并判定在磁盤10上是否存在該扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域。空閑區(qū)域是指能夠 寫入數(shù)據(jù)的一個以上存儲區(qū)域。在存儲介質(zhì)為磁盤10的情況下,空閑區(qū)域是指能夠?qū)懭霐?shù)據(jù)的一個以上扇區(qū)sc(空閑扇區(qū))。頭控制部61通過參照扇區(qū)管理表71來判定是否為空閑區(qū)域。此外,在寫入命令中不包含數(shù)據(jù)長度的情況下,頭控制部61通過參照hdc50或mcu60將用戶數(shù)據(jù)(值)保存于ram70時的開始地址和結(jié)束地址來導(dǎo)出數(shù)據(jù)長度。
在扇區(qū)sc的編號連續(xù)且保存狀態(tài)為未保存的扇區(qū)sc數(shù)為需要的扇區(qū)數(shù)以上的情況下,頭控制部61將用戶數(shù)據(jù)寫入到該扇區(qū)sc的編號連續(xù)的一個以上的扇區(qū)sc的集合中。并且,頭控制部61改寫扇區(qū)管理表71和各鍵地址表72。
在向磁盤10寫入與新的鍵對應(yīng)的用戶數(shù)據(jù)的情況下,頭控制部61在各鍵地址表72上追加數(shù)據(jù)序列,所述數(shù)據(jù)序列是將新的鍵、用戶數(shù)據(jù)(值)的數(shù)據(jù)長度、寫入了的軌道編號、開始寫入的最初的最前頭扇區(qū)sch的扇區(qū)編號進(jìn)行了關(guān)聯(lián)得到的數(shù)據(jù)序列。并且,頭控制部61在扇區(qū)管理表71上,將表示寫入了與新的鍵對應(yīng)的用戶數(shù)據(jù)的扇區(qū)sc的扇區(qū)編號的保存狀態(tài)改寫為“保存完成”。
另外,在通過主機(jī)接口40接收到指定了存在于各鍵地址表72的已有的鍵和新的用戶數(shù)據(jù)的寫入命令的情況下,頭控制部61在與已有的鍵對應(yīng)的扇區(qū)sc的集合中覆蓋并寫入新的用戶數(shù)據(jù)。
[讀出處理]
以下,說明在通過主機(jī)接口40接收到讀出命令的情況下的頭控制部61的處理。在通過主機(jī)接口40接收到讀出命令的情況下,頭控制部61使用由讀出命令指定的鍵,參照各鍵地址表72,判定在各鍵地址表72中是否存在與讀出命令所包含的鍵一致的鍵。
在存在一致的鍵的情況下,頭控制部61使記錄再生磁頭21從與鍵對應(yīng)的全部扇區(qū)中依次讀出用戶數(shù)據(jù)。并且,頭控制部61經(jīng)由讀寫通道30,向hdc50發(fā)送讀出的用戶數(shù)據(jù)。
例如,頭控制部61參照與鍵對應(yīng)的軌道編號和最前頭扇區(qū)sch的扇區(qū)編號,確定寫入了用戶數(shù)據(jù)的扇區(qū)組sg的最前頭扇區(qū)sch。并且,頭 控制部61從以該最前頭扇區(qū)sch開始的扇區(qū)組sg依次讀出用戶數(shù)據(jù)。在不存在一致的鍵的情況下,頭控制部61使主機(jī)接口40向主機(jī)100發(fā)送錯誤響應(yīng)。
頭控制部61經(jīng)由hdc50向主機(jī)接口40供給包含從扇區(qū)組sg讀出的用戶數(shù)據(jù)的數(shù)據(jù)的集合(以下稱為數(shù)據(jù)組)。“數(shù)據(jù)組”是指分別已存儲或?qū)⒁鎯υ诓煌拇鎯^(qū)域中的多個數(shù)據(jù)的集合。主機(jī)接口40對作為讀出命令的發(fā)送源的主機(jī)100發(fā)送用戶數(shù)據(jù)。
[異常判定·改寫處理]
以下,說明異常判定部62和改寫處理部63的處理。異常判定部62基于記錄再生磁頭21對用戶數(shù)據(jù)的讀取狀態(tài),判定在扇區(qū)組sg內(nèi)的某一個扇區(qū)sc中是否檢測出錯誤。
例如,異常判定部62可以在磁盤10旋轉(zhuǎn)期間,試行兩次以上的某決定的次數(shù)的從相同的扇區(qū)sc讀出用戶數(shù)據(jù),在其結(jié)果為該某決定的次數(shù)都不能讀出用戶數(shù)據(jù)的情況(用戶數(shù)據(jù)的讀出失敗的情況)下,判定為在該扇區(qū)sc中檢測出錯誤。“某決定的次數(shù)都不能讀出用戶數(shù)據(jù)的情況”是指,例如在某決定的次數(shù)為三次的情況下,包含在第一至三次都不能讀出用戶數(shù)據(jù),在第四次能夠讀出用戶數(shù)據(jù)的情況。
另外,異常判定部62也可以在利用hdc50進(jìn)行的基于糾錯碼的糾錯的結(jié)果是,在經(jīng)糾錯訂正后的用戶數(shù)據(jù)的錯誤數(shù)為閾值以上的情況下,判定為在該扇區(qū)sc中檢測出錯誤。即,檢測出錯誤的狀態(tài)可以是指以位為單位或以字節(jié)為單位等以預(yù)定的數(shù)據(jù)大小為單位,執(zhí)行了一次以上的某決定的次數(shù)的糾錯后的狀態(tài)。
hdc50在進(jìn)行糾錯期間對訂正后的用戶數(shù)據(jù)的錯誤數(shù)進(jìn)行計數(shù),并存儲在ram70中。異常判定部62參照存儲在該ram70中的信息,取得訂正后的用戶數(shù)據(jù)的錯誤數(shù)。
異常判定部62在利用hdc50進(jìn)行了驗證的情況下也同樣地判定在扇區(qū)sc中是否檢測出錯誤。
改寫處理部63在由異常判定部62判定為在扇區(qū)sc中檢測出錯誤的 情況下,控制記錄再生磁頭21,將寫入到包含由異常判定部62判定為檢測出錯誤的扇區(qū)sc(以下,稱為異常扇區(qū)sce)的扇區(qū)組sg的數(shù)據(jù)組向同一軌道tr內(nèi)的物理上連續(xù)的一個以上扇區(qū)sc的集合(不包含異常扇區(qū)sce)寫入(改寫)。在寫入到包含異常扇區(qū)sce的扇區(qū)組sg的數(shù)據(jù)組中,例如至少包含寫入到異常扇區(qū)sce的用戶數(shù)據(jù)中的一部分或全部,和寫入到與異常扇區(qū)sce不同的一個以上扇區(qū)sc的用戶數(shù)據(jù)中的一部分或全部并且是與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)。
“與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)”是指,例如與寫入異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)有相同的鍵的用戶數(shù)據(jù)。即,“與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)”是指,與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)指定了相同的鍵信息并被指示了寫入的用戶數(shù)據(jù)。寫入到異常扇區(qū)sce的用戶數(shù)據(jù)是“第一數(shù)據(jù)”的一例,與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)是“第二數(shù)據(jù)”的一例。寫入到異常扇區(qū)sce的用戶數(shù)據(jù)和與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)是指,在寫入處理或利用改寫處理部63進(jìn)行的改寫處理中,寫入到物理上連續(xù)的扇區(qū)sc中。因此,在數(shù)據(jù)組中包含寫入到與異常扇區(qū)sce物理上連續(xù)的扇區(qū)sc的數(shù)據(jù)。
在該數(shù)據(jù)組中還可以包含不與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)(第一數(shù)據(jù))關(guān)聯(lián)的用戶數(shù)據(jù)或伺服信息等其他數(shù)據(jù)?!安慌c寫入到異常扇區(qū)sce的用戶數(shù)據(jù)關(guān)聯(lián)的用戶數(shù)據(jù)”是指,例如關(guān)聯(lián)了與寫入到異常扇區(qū)sce的用戶數(shù)據(jù)不同的鍵的用戶數(shù)據(jù)。
此外,即使伺服區(qū)域sv進(jìn)入到扇區(qū)組sg之間,也將各個扇區(qū)sc彼此作為物理上連續(xù)的扇區(qū)進(jìn)行處理。
圖6是表示第一實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。本流程圖的處理例如在主機(jī)接口40從主機(jī)100接收到讀出命令時或進(jìn)行驗證時開始。
首先,頭控制部61控制記錄再生磁頭21,以主機(jī)接口40接收到的讀出命令的鍵所對應(yīng)的數(shù)據(jù)長度為基礎(chǔ),開始從以最前頭扇區(qū)sch起始的扇 區(qū)組sg讀出用戶數(shù)據(jù)(步驟s100)。
接著,異常判定部62判定是否能夠從扇區(qū)組sg讀出用戶數(shù)據(jù)(步驟s102)。在判定為能夠讀出用戶數(shù)據(jù)的情況下,異常判定部62判定為在作為讀出對象的扇區(qū)組sg內(nèi)的任一個扇區(qū)sc中均沒有產(chǎn)生異常,并結(jié)束本流程圖的處理。
另一方面,在由異常判定部62判定為不能讀出用戶數(shù)據(jù)的情況下,hdc50基于用戶數(shù)據(jù)所包含的糾錯碼進(jìn)行用戶數(shù)據(jù)的糾錯,并將用戶數(shù)據(jù)復(fù)原(步驟s104)。
例如,在盡管進(jìn)行了糾錯用戶數(shù)據(jù)也沒被復(fù)原的情況下,頭控制部61使記錄再生磁頭21維持在相同的軌道tr上的位置,控制spm驅(qū)動電路32,一邊使磁盤10旋轉(zhuǎn)預(yù)定次數(shù),一邊每當(dāng)磁盤10旋轉(zhuǎn)時,從作為讀出對象的扇區(qū)sc讀出用戶數(shù)據(jù)。hdc50在利用頭控制部61反復(fù)進(jìn)行讀出處理期間,每次都試行糾錯。
接著,異常判定部62判定在利用頭控制部61反復(fù)進(jìn)行的讀出處理的次數(shù)為預(yù)定次數(shù)以內(nèi)的期間是否能夠讀出用戶數(shù)據(jù)(步驟s106)。在由異常判定部62判定為在讀出處理的次數(shù)為預(yù)定次數(shù)以內(nèi)的期間不能讀出用戶數(shù)據(jù)的情況下,hdc50經(jīng)由主機(jī)接口40向主機(jī)100發(fā)送錯誤信息,所述錯誤信息表示不能讀出與讀出命令對應(yīng)的用戶數(shù)據(jù)(步驟s108)。
另一方面,在由異常判定部62判定為在讀出處理的次數(shù)為預(yù)定次數(shù)以內(nèi)的期間讀出了用戶數(shù)據(jù)的情況下,異常判定部62判定為在相應(yīng)的扇區(qū)sc中檢測出錯誤。
當(dāng)利用異常判定部62在作為讀出對象的扇區(qū)組sg內(nèi)的某一個扇區(qū)sc中檢測出錯誤時,改寫處理部63進(jìn)行將寫入到包含異常扇區(qū)sce的扇區(qū)組sg的數(shù)據(jù)組向不包含異常扇區(qū)sce且同一軌道tr內(nèi)的物理上連續(xù)的扇區(qū)sc寫入的處理(步驟s110)。如上所述,在寫入到包含異常扇區(qū)sce的扇區(qū)組sg的數(shù)據(jù)組中,包含寫入到異常扇區(qū)sce的第一數(shù)據(jù)和在各鍵地址表72中關(guān)聯(lián)了與第一數(shù)據(jù)相同的鍵的第二數(shù)據(jù)。
圖7是表示將寫入到包含異常扇區(qū)的扇區(qū)組的數(shù)據(jù)組向在磁盤的周向 上連續(xù)的扇區(qū)寫入的處理的一例的流程圖。本流程圖的處理相當(dāng)于上述圖6所示的流程圖的步驟s110。
首先,改寫處理部63判定在與包含異常扇區(qū)sce的扇區(qū)組sg相同的軌道tr內(nèi),是否存在扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域(步驟s200)。在判定為在相同的軌道tr內(nèi)存在連續(xù)的空閑區(qū)域的情況下,改寫處理部63控制記錄再生磁頭21,將寫入到與鍵對應(yīng)的扇區(qū)組sg(包含異常扇區(qū)sce的扇區(qū)組sg)的數(shù)據(jù)組向相同的軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭?步驟s202)。在這里,“寫入”例如是指如下處理:讀出或復(fù)原寫入到扇區(qū)組sg的數(shù)據(jù)組,將讀出或復(fù)原后的數(shù)據(jù)組向ram70寫入,并將寫入到ram70的數(shù)據(jù)組向軌道tr內(nèi)的連續(xù)的空閑區(qū)域?qū)懭搿?/p>
圖8和圖9是示意地表示向其他扇區(qū)寫入數(shù)據(jù)組的處理的情形的圖。如圖8所示,在扇區(qū)組sg內(nèi)中產(chǎn)生了異常扇區(qū)sce。因此,改寫處理部63判定在相同的軌道tr內(nèi)是否存在扇區(qū)組sg的扇區(qū)數(shù)7以上的物理上連續(xù)的空閑區(qū)域。在圖8的例子中,在相同的軌道tr內(nèi),存在8個扇區(qū)數(shù)的物理上連續(xù)的空閑區(qū)域。因此,如圖9所示,改寫處理部63將寫入到扇區(qū)組sg的數(shù)據(jù)組向物理上連續(xù)的空閑區(qū)域?qū)懭?。以下,在圖中,有時對包含異常扇區(qū)sce的扇區(qū)組賦予并示出sg的符號,對改寫了數(shù)據(jù)組而得到的扇區(qū)的集合賦予并示出sg#的符號。
返回圖7的說明。在步驟s200中判定為在相同的軌道tr內(nèi)不存在物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63判定在其他軌道tr內(nèi)是否存在扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域(步驟s204)。在判定為在其他軌道tr內(nèi)存在物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63控制記錄再生磁頭21,將寫入到與鍵對應(yīng)的扇區(qū)組sg的數(shù)據(jù)組向其他軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭?步驟s206)。
圖10是示意地表示在相同的軌道內(nèi)不存在物理上連續(xù)的空閑區(qū)域的情況下進(jìn)行的向其他扇區(qū)寫入數(shù)據(jù)組的處理的情形的圖。在圖示的例子中,在軌道tr2內(nèi)不存在包含異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)數(shù)以上的物理 上連續(xù)的空閑區(qū)域。在該情況下,改寫處理部63例如可以優(yōu)先將用戶數(shù)據(jù)向相對于該軌道tr2在磁盤10的徑向上相鄰的軌道tr1寫入。在這里,徑向既可以是指向外側(cè)的方向,也可以是指向內(nèi)側(cè)的方向。
例如,改寫處理部63判定在與軌道tr2相鄰的軌道tr1內(nèi)是否存在包含異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域。在圖示的例子中,由于在軌道tr1內(nèi)存在扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域,所以異常判定部62將寫入到扇區(qū)組sg的數(shù)據(jù)組向該軌道tr1內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭搿?/p>
此外,寫入數(shù)據(jù)組的軌道tr的優(yōu)先順序既可以優(yōu)先設(shè)定相對于包含異常扇區(qū)sce的軌道tr位于徑向外側(cè)的軌道tr,也可以優(yōu)先設(shè)定相對于包含異常扇區(qū)sce的軌道tr位于內(nèi)側(cè)的軌道tr。
返回圖7的說明。在步驟s204中判定為在其他軌道tr內(nèi)不存在連續(xù)的空閑區(qū)域的情況下,改寫處理部63對磁盤10進(jìn)行碎片整理(盤碎片整理),進(jìn)行增加物理上連續(xù)的空閑區(qū)域的數(shù)量的處理(步驟s208)。
圖11是示意性地表示在磁盤內(nèi)通過碎片整理增加了物理上連續(xù)的空閑區(qū)域的數(shù)量的情形的圖。例如,改寫處理部63為了將零碎化的數(shù)據(jù)統(tǒng)一歸攏而進(jìn)行數(shù)據(jù)的再配置?!皵?shù)據(jù)的再配置”是指如下處理:將寫入到已經(jīng)寫入有數(shù)據(jù)的扇區(qū)sc的數(shù)據(jù)向能夠?qū)懭霐?shù)據(jù)的扇區(qū)sc寫入,釋放原本寫入有數(shù)據(jù)的扇區(qū)sc的數(shù)據(jù),并生成物理上連續(xù)的空閑區(qū)域。
“釋放”例如是指在扇區(qū)管理表71上,將與扇區(qū)sc的扇區(qū)編號對應(yīng)的保存狀態(tài)改寫為“未保存”,并將改寫了保存狀態(tài)的扇區(qū)sc設(shè)為能夠?qū)懭胄碌臄?shù)據(jù)的狀態(tài)。另外,“釋放”也可以指包含如下處理:向?qū)懭肓藬?shù)據(jù)的扇區(qū)sc實際寫入預(yù)定的數(shù)據(jù),并擦除數(shù)據(jù)。
返回圖7的說明。改寫處理部63在進(jìn)行盤碎片整理后,判定在與包含異常扇區(qū)sce的扇區(qū)組sg相同的軌道tr內(nèi),是否生成了扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域(步驟s210)。如果判定為在相同的軌道tr內(nèi)生成了扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s202的處理。
另一方面,如果判定為在相同的軌道tr內(nèi)未生成扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s206的處理。
在結(jié)束了向其他扇區(qū)sc寫入數(shù)據(jù)組的處理的情況下,改寫處理部63改寫扇區(qū)管理表71和各鍵地址表72(步驟s212)。
在使數(shù)據(jù)組移動至相同的軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63在各鍵地址表72上將最前頭扇區(qū)sch的扇區(qū)編號改寫為移動目的地的扇區(qū)sc的扇區(qū)編號。另外,改寫處理部63在扇區(qū)管理表71上將與移動目的地的扇區(qū)sc的扇區(qū)編號對應(yīng)的保存狀態(tài)改寫為“保存完成”,并且,將除去了異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)編號所對應(yīng)的保存狀態(tài)改寫為“未保存”。
在將數(shù)據(jù)組寫入到其他軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63在各鍵地址表72上,將軌道編號改寫為移動目的地的軌道編號,并且將最前頭扇區(qū)sch的扇區(qū)編號改寫為移動目的地的扇區(qū)sc的扇區(qū)編號。另外,改寫處理部63在扇區(qū)管理表71上將與移動目的地的扇區(qū)sc的扇區(qū)編號對應(yīng)的保存狀態(tài)改寫為“保存完成”,并且,將除去了異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)編號所對應(yīng)的保存狀態(tài)改寫為“未保存”。
圖12是表示伴隨著向其他扇區(qū)寫入數(shù)據(jù)組的處理而被改寫的各鍵地址表的一例的圖。例如,改寫處理部63在上述圖5所示的各鍵地址表72中將與鍵“aaaa”對應(yīng)的用戶數(shù)據(jù)從軌道tr2移動到相鄰的軌道tr1內(nèi)的連續(xù)的空閑區(qū)域的情況下,將各鍵地址表72的軌道編號2改寫為移動目的地的軌道編號1,并且將最前頭扇區(qū)sch的扇區(qū)編號02改寫為移動目的地的扇區(qū)sc的扇區(qū)編號22。
在結(jié)束了將數(shù)據(jù)組寫入到其他扇區(qū)sc的處理的情況下,為了禁止對異常扇區(qū)sce的數(shù)據(jù)的寫入,改寫處理部63也可以在扇區(qū)管理表71上將異常扇區(qū)sce的扇區(qū)編號所對應(yīng)的保存狀態(tài)固定為“保存完成”。
圖13是表示第一實施方式中的向其他扇區(qū)寫入用戶數(shù)據(jù)的處理的結(jié) 果的圖。如圖所示,在第一實施方式中,將寫入到包含異常扇區(qū)sce的扇區(qū)組sg的數(shù)據(jù)組寫入到不包含異常扇區(qū)sce且物理上連續(xù)的扇區(qū)sc。
因此,由于反復(fù)使用存儲設(shè)備1而成為產(chǎn)生了異常扇區(qū)sce的狀態(tài)后,通過讀出全部扇區(qū)sc,對寫入到異常扇區(qū)sce的用戶數(shù)據(jù)的移動后的扇區(qū)sc的位置與寫入有相同的數(shù)據(jù)組所包含的剩余的數(shù)據(jù)的扇區(qū)sc的位置進(jìn)行比較,能夠判斷是否進(jìn)行了與實施方式同樣的處理。
根據(jù)以上說明的第一實施方式,由于將至少包含第一數(shù)據(jù)和第二數(shù)據(jù)的數(shù)據(jù)組寫入到與異常扇區(qū)sce不同的至少一個扇區(qū)sc,所以在接下來讀出數(shù)據(jù)組的情況下,能夠減少在使記錄再生磁頭21移動到期望的扇區(qū)sc后還發(fā)生記錄再生磁頭21的尋找(移動)的可能性,所述第一數(shù)據(jù)是寫入到檢測出錯誤的異常扇區(qū)sce的數(shù)據(jù)的至少一部分,所述第二數(shù)據(jù)是寫入到與異常扇區(qū)sce物理上連續(xù)的扇區(qū)sc的數(shù)據(jù)的至少一部分。其結(jié)果,第一實施方式中的存儲設(shè)備1能夠提高對從主機(jī)100接收到的讀出命令的響應(yīng)性。
(第一實施方式的變形例)
以下,說明第一實施方式的變形例。上述第一實施方式中的改寫處理部63在判定為包含異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域在任一個軌道tr中都不存在的情況下,也可以使寫入到扇區(qū)組sg的數(shù)據(jù)組跨越在磁盤10的徑向上連續(xù)的軌道tr而移動。
圖14和圖15是示意地表示跨越在磁盤的徑向上連續(xù)的軌道并寫入數(shù)據(jù)組的處理的情形的圖。在圖14的例子中,在包含異常扇區(qū)sce的軌道tr2內(nèi),不存在扇區(qū)組sg的7個扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域,僅存在與3個扇區(qū)數(shù)相應(yīng)的物理上連續(xù)的空閑區(qū)域。另外,假設(shè)與7個扇區(qū)數(shù)相應(yīng)的空閑區(qū)域也不存在于任一個軌道tr中。在該情況下,改寫處理部63判定在相鄰的軌道tr1內(nèi)是否存在與剩余的4個扇區(qū)數(shù)相應(yīng)的物理上連續(xù)的空閑區(qū)域。在圖14的例子中,在軌道tr1內(nèi)存在與5個扇區(qū)數(shù)相應(yīng)的物理上連續(xù)的空閑區(qū)域。因此,如圖15所示,改寫處理部63將寫入到扇區(qū)組sg的數(shù)據(jù)組進(jìn)行分割,并將分割得到的數(shù)據(jù)組(以下,稱 為子數(shù)據(jù)組)向軌道tr2內(nèi)的與3個扇區(qū)數(shù)相應(yīng)的物理上連續(xù)的空閑區(qū)域和軌道tr1內(nèi)的與4個扇區(qū)數(shù)相應(yīng)的物理上連續(xù)的空閑區(qū)域?qū)懭搿?/p>
進(jìn)一步,即使一個軌道tr全部為空閑區(qū)域,在該一個軌道tr內(nèi)無法容納數(shù)據(jù)組的情況下,改寫處理部63也可以同樣地將數(shù)據(jù)組分割為子數(shù)據(jù)組,使子數(shù)據(jù)組跨越多個軌道tr移動。
另外,改寫處理部63也可以算出或推定碎片整理所需的處理時間或處理負(fù)荷,如果算出或推定出的處理時間或處理負(fù)荷大于基準(zhǔn)以上,則將數(shù)據(jù)組分割為子數(shù)據(jù)組,使子數(shù)據(jù)組跨越多個軌道tr移動,而不進(jìn)行碎片整理。
(第二實施方式)
以下,說明第二實施方式中的存儲設(shè)備1a。在第二實施方式的存儲設(shè)備1a中,與第一實施方式的不同之處在于:如果能夠?qū)懭氲疆惓I葏^(qū)sce的用戶數(shù)據(jù)向相同的軌道tr寫入,則僅將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)向相同的軌道tr的空閑區(qū)域?qū)懭?。因此,以涉及的不同之處為中心進(jìn)行說明,并省略針對共同的部分的說明。
圖16是表示第二實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。本流程圖的處理相當(dāng)于上述圖6所示的流程圖的步驟s110。
首先,改寫處理部63判定在包含異常扇區(qū)sce的相同的軌道tr內(nèi)是否存在與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域(步驟s300)。在判定為在相同的軌道tr內(nèi)存在數(shù)目相同的空閑區(qū)域的情況下,改寫處理部63控制記錄再生磁頭21,將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)向相同的軌道tr內(nèi)的空閑區(qū)域?qū)懭?步驟s302)。
圖17和圖18是表示僅將寫入到異常扇區(qū)的用戶數(shù)據(jù)向相同的軌道內(nèi)寫入的情形的圖。在圖17中,示出了在磁盤10內(nèi)產(chǎn)生了一個異常扇區(qū)sce的情況。在該情況下,例如,如圖18所示,改寫處理部63僅將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)向同一軌道tr上的一個空閑區(qū)域?qū)懭?圖中用sc#表示的區(qū)域)。
另一方面,在判定為在相同的軌道tr內(nèi)不存在數(shù)目相同的空閑區(qū)域 的情況下,改寫處理部63判定在其他軌道tr內(nèi)是否存在與包含異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域(步驟s304)。在判定為在其他軌道tr內(nèi)存在與扇區(qū)組sg的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63控制記錄再生磁頭21,將寫入到扇區(qū)組sg的數(shù)據(jù)組向其他軌道tr內(nèi)的空閑區(qū)域?qū)懭?步驟s306)。
圖19和圖20是表示了將寫入到包含異常扇區(qū)的扇區(qū)組的數(shù)據(jù)組向相鄰的軌道內(nèi)寫入的情形的圖。在圖19中,示出了在與扇區(qū)組sg相同的軌道tr內(nèi)不存在與扇區(qū)組sg的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域,在相鄰的軌道tr內(nèi)存在與扇區(qū)組sg的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域。在該情況下,例如,如圖20所示,改寫處理部63將寫入到包含異常扇區(qū)sce的扇區(qū)組sg的數(shù)據(jù)組向相鄰的軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭搿?/p>
另一方面,在判定為在其他軌道tr內(nèi)不存在與扇區(qū)組sg的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域的情況下,改寫處理部63對磁盤10進(jìn)行碎片整理,進(jìn)行增加連續(xù)的空閑區(qū)域的數(shù)量的處理(步驟s308)。
接著,改寫處理部63判定在包含異常扇區(qū)sce的相同的軌道tr內(nèi)是否生成了與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域(步驟s310)。在判定為在相同的軌道tr內(nèi)生成了與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s302的處理。
另一方面,在判定為在相同的軌道tr內(nèi)未生成與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s306的處理。接著,在將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)或?qū)懭氲缴葏^(qū)組sg的數(shù)據(jù)組向其他扇區(qū)sc寫入的處理結(jié)束了的情況下,改寫處理部63改寫扇區(qū)管理表71和各鍵地址表72(步驟s312)。由此,本流程圖的處理結(jié)束。
根據(jù)以上說明的第二實施方式,在相同的軌道tr內(nèi)存在與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域的情況下,將寫入到異常扇區(qū)sce的第一數(shù)據(jù)寫入到相同的軌道tr內(nèi)的空閑區(qū)域,并且在相同的軌道tr內(nèi)不存在與異常扇區(qū)sce的扇區(qū)數(shù)數(shù)目相同的空閑區(qū)域的情況下,在其他軌道 tr內(nèi)的空閑區(qū)域中,將至少包含第一數(shù)據(jù)和第二數(shù)據(jù)的數(shù)據(jù)組寫入到與異常扇區(qū)sce不同的至少一個扇區(qū)sc。由此,第二實施方式中的存儲設(shè)備1a與第一實施方式同樣地,能夠提高對從主機(jī)100接收到的讀出命令的響應(yīng)性。
(第三實施方式)
以下,說明第三實施方式中的存儲設(shè)備1b。在第三實施方式的存儲設(shè)備1b中,與第一和第二實施方式的不同之處在于:與主機(jī)100進(jìn)行包含遵從lba方式的地址的命令的通信,并進(jìn)行用某固定的數(shù)據(jù)長度指定的數(shù)據(jù)的寫入和讀出。因此,以涉及的不同之處為中心進(jìn)行說明,并省略針對共同的部分的說明。
圖21是表示利用lba方式從主機(jī)接收的寫入命令的內(nèi)容的一例的圖。在第三實施方式中,在從主機(jī)100接收的寫入命令中包含lba、向由lba指定的扇區(qū)sc寫入的或從扇區(qū)sc讀出的數(shù)據(jù)的數(shù)據(jù)長度、以及表示同時進(jìn)行訪問的同時訪問標(biāo)記。
同時訪問標(biāo)記是指定主機(jī)100對跨越多個扇區(qū)sc寫入的用戶數(shù)據(jù)同時進(jìn)行寫入或讀出的標(biāo)記。同時訪問標(biāo)記例如包含能夠識別用戶數(shù)據(jù)的識別符。寫入到建立了相同的同時訪問標(biāo)記的扇區(qū)sc的各個數(shù)據(jù)彼此作為相互關(guān)聯(lián)的數(shù)據(jù)來處理。
當(dāng)由主機(jī)接口40接收到寫入命令時,mcu60生成圖22例示的各lba地址表72a并保存在ram70中。
圖22是表示在lba方式中使用的各lba地址表的一例的圖。各lba地址表72a是參照信息的另一例。在圖示的例子中,在各lba地址表72a中,與lba關(guān)聯(lián)有用戶數(shù)據(jù)的數(shù)據(jù)長度、軌道編號、扇區(qū)編號以及同時訪問標(biāo)記。
在由主機(jī)接口40接收到遵從lba方式的讀出命令的情況下,頭控制部61參照各lba地址表72a,對讀出命令的lba所對應(yīng)的扇區(qū)編號判定是否建立了同時訪問標(biāo)記。在建立了同時訪問標(biāo)記的情況下,頭控制部61從建立了同時訪問標(biāo)記的全部扇區(qū)編號表示的扇區(qū)sc讀出用戶數(shù)據(jù)。 在圖22的例子中,由于對扇區(qū)編號02至07建立了同時訪問標(biāo)記,所以頭控制部61從這些扇區(qū)編號的扇區(qū)sc同時讀出用戶數(shù)據(jù)。此外,也可以不進(jìn)行這樣的處理。在該情況下,主機(jī)100對預(yù)先賦予了同時訪問標(biāo)記的用戶數(shù)據(jù)發(fā)行多個命令,一次寫入或讀出。
在由主機(jī)接口40接收到的lba方式的命令為讀出命令的情況下或進(jìn)行驗證的情況下,異常判定部62判定在建立了同時訪問標(biāo)記的扇區(qū)sc的任一個中是否檢測出錯誤。在由異常判定部62判定為在建立了同時訪問標(biāo)記的扇區(qū)sc的任一個中檢測出錯誤的情況下,與第一實施方式同樣地,改寫處理部63將寫入到建立了相同的同時訪問標(biāo)記的扇區(qū)組sg的數(shù)據(jù)組向不包含異常扇區(qū)sce且同一軌道tr內(nèi)的物理上連續(xù)的扇區(qū)sc寫入。
第三實施方式的存儲設(shè)備1b既可以如第一實施方式的變形例那樣,在判定為在任一個軌道tr中均不存在包含異常扇區(qū)sce的扇區(qū)組sg的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域的情況下,使寫入到扇區(qū)組sg的數(shù)據(jù)組跨越在磁盤10的徑向上連續(xù)的多個軌道tr而移動,也可以如第二實施方式那樣,如果能夠?qū)懭氲疆惓I葏^(qū)sce的用戶數(shù)據(jù)向相同的軌道tr寫入,則僅將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)移動到相同的軌道tr的空閑區(qū)域。
根據(jù)以上說明的第三實施方式中的存儲設(shè)備1b,在賦予了表示同時被訪問的信息的扇區(qū)sc的任一個中檢測出錯誤的情況下,將寫入到異常扇區(qū)sce的第一數(shù)據(jù)和帶有與該第一數(shù)據(jù)相同的同時訪問標(biāo)記的第二數(shù)據(jù)向同一軌道tr內(nèi)的物理上連續(xù)的扇區(qū)sc寫入。其結(jié)果,第三實施方式中的存儲設(shè)備1b能夠提高對從主機(jī)100接收到的讀出命令的響應(yīng)性。
(第四實施方式)
以下,說明第四實施方式中的存儲設(shè)備1c。第四實施方式中的存儲設(shè)備1c與第一至第三實施方式的不同之處在于:基于從主機(jī)100接收到的讀出命令的內(nèi)容,判定是否關(guān)聯(lián)有扇區(qū)sc間的數(shù)據(jù)。因此,以涉及的不同之處為中心進(jìn)行說明,并省略針對共同的部分的說明。
圖23是表示第四實施方式中的mcu的構(gòu)成的一例的圖。第四實施方 式中的mcu60c除了上述的頭控制部61、異常判定部62以及改寫處理部63以外,還包含訪問解析部64。另外,ram70c除了上述扇區(qū)管理表71和各lba地址表72a以外,還保存同時訪問頻率表73。對第四實施方式中的存儲設(shè)備1c與主機(jī)100進(jìn)行按照lba方式的命令的通信進(jìn)行說明,但不限于此,也可以進(jìn)行按照鍵值方式的命令的通信。在該情況下,ram70c也可以包含各鍵地址表72。
訪問解析部64基于由主機(jī)接口40接收到的讀出命令的內(nèi)容,判定是否關(guān)聯(lián)有扇區(qū)sc間的各個數(shù)據(jù)。例如,在指定按照lba方式的地址而與主機(jī)100進(jìn)行通信的情況下,在接收到包含某lba的讀出命令時,訪問解析部64判定是否存在與包含該lba的讀出命令同時或連續(xù)地接收的頻率高的讀出命令。“連續(xù)地接收”例如既可以指在預(yù)定時間以內(nèi)接收,也可以指在預(yù)定時間以內(nèi)持續(xù)地(在中間不夾入其他命令)接收。在判定為存在同時或連續(xù)地接收的頻率高的讀出命令的情況下,訪問解析部64判定為關(guān)聯(lián)了與這些讀出命令所包含的lba對應(yīng)的多個扇區(qū)sc間的各個數(shù)據(jù)。例如,訪問解析部64通過參照保存在ram70中的同時訪問頻率表73,判定是否關(guān)聯(lián)了各個數(shù)據(jù)彼此。
圖24是表示同時訪問頻率表的一例的圖。同時訪問頻率表73是參照信息的另一例。訪問解析部64按軌道編號與扇區(qū)編號的組合的每一個,對接收次數(shù)進(jìn)行計數(shù),并登記在同時訪問頻率表73中,所述軌道編號與扇區(qū)編號的組合是表示由主機(jī)接口40同時接收到的lba所對應(yīng)的扇區(qū)sc的軌道編號與扇區(qū)編號的組合,或表示連續(xù)地通過主機(jī)接口40接收到的lba所對應(yīng)的扇區(qū)sc的軌道編號與扇區(qū)編號的組合。訪問解析部64在通過登記在同時訪問頻率表73中的軌道編號與扇區(qū)編號的組合中的、接收次數(shù)為閾值以上的組合表示的扇區(qū)sc的組中將數(shù)據(jù)彼此關(guān)聯(lián)。
異常判定部62判定在構(gòu)成扇區(qū)sc的組的任一個扇區(qū)sc中是否檢測出錯誤,所述扇區(qū)sc保存由訪問解析部64進(jìn)行了關(guān)聯(lián)的數(shù)據(jù)。在由異常判定部62判定為在構(gòu)成扇區(qū)sc的組的任一個扇區(qū)sc中檢測出錯誤的情況下,改寫處理部63將寫入到扇區(qū)sc的組的用戶數(shù)據(jù)向同一軌道tr內(nèi) 的物理上連續(xù)的扇區(qū)sc寫入。
首先,第四實施方式中的存儲設(shè)備1c進(jìn)行與上述圖6所示流程圖的處理相同的處理,在判定為在作為讀出對象的扇區(qū)組sg內(nèi)的任一個扇區(qū)sc中檢測出錯誤時,進(jìn)行后述的圖25所示的流程圖的處理。
圖25是表示第四實施方式中的存儲設(shè)備進(jìn)行的處理的一例的流程圖。本流程圖的處理相當(dāng)于上述圖6所示的流程圖的步驟s110。
首先,改寫處理部63判定表示異常扇區(qū)sce的軌道編號和扇區(qū)編號是否登記在同時訪問頻率表73中(步驟s400)。在判定為表示異常扇區(qū)sce的軌道編號和扇區(qū)編號未登記在同時訪問頻率表73中的情況下,改寫處理部63將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)單獨地向相同的軌道tr內(nèi)的空閑區(qū)域或其他軌道tr內(nèi)的空閑區(qū)域?qū)懭?步驟s402)。
另一方面,在判定為表示異常扇區(qū)sce的軌道編號和扇區(qū)編號登記在同時訪問頻率表73中的情況下,改寫處理部63從同時訪問頻率表73提取包含異常扇區(qū)sce的扇區(qū)sc的組(步驟s404)。接著,改寫處理部63判定在與異常扇區(qū)sce相同的軌道tr內(nèi),是否存在與構(gòu)成提取出的扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的連續(xù)的空閑區(qū)域(步驟s406)。
在判定為在相同的軌道tr內(nèi)存在與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的連續(xù)的空閑區(qū)域的情況下,改寫處理部63將寫入到扇區(qū)sc的組的用戶數(shù)據(jù)向相同的軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭?步驟s408)。
另一方面,在判定為在相同的軌道tr內(nèi)不存在與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的連續(xù)的空閑區(qū)域的情況下,改寫處理部63判定在其他軌道tr內(nèi),是否存在與構(gòu)成提取出的扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域(步驟s410)。
在判定為在其他軌道tr內(nèi)存在與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的連續(xù)的空閑區(qū)域的情況下,改寫處理部63將寫入到扇區(qū)sc的組的用戶數(shù)據(jù)向其他軌道tr內(nèi)的物理上連續(xù)的空閑區(qū)域?qū)懭?步驟s412)。
另一方面,在判定為在其他軌道tr內(nèi)不存在與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63對磁盤10進(jìn)行碎片整理(盤碎片整理),并進(jìn)行增加空閑區(qū)域的處理(步驟s414)。
接著,改寫處理部63判定在與異常扇區(qū)sce相同的軌道tr內(nèi)是否生成了與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域(步驟s416)。在判定為在相同的軌道tr內(nèi)生成了與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s408的處理。
另一方面,在判定為在相同的軌道tr內(nèi)未生成與構(gòu)成扇區(qū)sc的組的扇區(qū)sc的扇區(qū)數(shù)數(shù)目相同的物理上連續(xù)的空閑區(qū)域的情況下,改寫處理部63進(jìn)行步驟s412的處理。接著,在結(jié)束了將用戶數(shù)據(jù)寫入到其他扇區(qū)sc的處理的情況下,改寫處理部63改寫扇區(qū)管理表71和各lba地址表72a(步驟s418)。由此,本流程圖的處理結(jié)束。
第四實施方式的存儲設(shè)備1c既可以如第一實施方式的變形例那樣,在判定為在任一個軌道tr中均不存在包含異常扇區(qū)sce的扇區(qū)sc的組的扇區(qū)數(shù)以上的物理上連續(xù)的空閑區(qū)域的情況下,使寫入到扇區(qū)sc的組的用戶數(shù)據(jù)跨越在磁盤10的徑向上連續(xù)的多個軌道tr而移動,也可以如第二實施方式那樣,如果能夠?qū)懭氲疆惓I葏^(qū)sce的用戶數(shù)據(jù)寫入相同的軌道tr,則僅將寫入到異常扇區(qū)sce的用戶數(shù)據(jù)移動到相同的軌道tr的空閑區(qū)域中。
根據(jù)以上說明的第四實施方式中的存儲設(shè)備1c,基于從主機(jī)100接收到的讀出命令的內(nèi)容將扇區(qū)sc間的數(shù)據(jù)進(jìn)行關(guān)聯(lián),并確定寫入了容易同時被主機(jī)100訪問的數(shù)據(jù)的扇區(qū)sc的組。并且,第四實施方式中的存儲設(shè)備1c在構(gòu)成扇區(qū)sc的組的任一個扇區(qū)sc中檢測出錯誤的情況下,使以該扇區(qū)sc的組為單位寫入的數(shù)據(jù)通過同一歸攏,向同一軌道tr內(nèi)的物理上連續(xù)的扇區(qū)sc寫入。由此,第四實施方式中的存儲設(shè)備1c能夠提高對從主機(jī)100接收到的讀出命令的響應(yīng)性。
(第五實施方式)
以下,說明第五實施方式中的存儲設(shè)備1d。第五實施方式中的存儲設(shè)備1d與第一至第四實施方式不同之處在于存儲介質(zhì)為nand等半導(dǎo)體存儲器270。
圖26是表示第五實施方式中的存儲設(shè)備的構(gòu)成的一例的圖。存儲設(shè)備1d可以包含主機(jī)接口210、讀/寫管理器220、命令緩存222、寫入緩存224、讀出緩存226、轉(zhuǎn)換表230、讀/寫器240、再配置管理器250、再配置管理表252、再寫入緩存254、垃圾收集管理器(以下稱為gc管理器)260、訪問頻率管理表262以及半導(dǎo)體存儲器270,但不限定于此。
主機(jī)接口210通過連接器與主機(jī)100連接,并從主機(jī)100接收各種命令。命令既可以從主機(jī)100主動地發(fā)送來,也可以通過根據(jù)來自主機(jī)100的通知,存儲設(shè)備1d向主機(jī)100請求命令發(fā)送(通過命令獲取),從而從主機(jī)100發(fā)送過來。
第五實施方式中的主機(jī)100與上述第一實施方式同樣地,既可以利用鍵值方式生成對存儲設(shè)備1d的命令,也可以利用lba方式生成對存儲設(shè)備1d的命令。在本實施方式中,作為一例,對主機(jī)100利用鍵值方式生成對存儲設(shè)備1d的命令進(jìn)行說明。
讀/寫管理器220、讀/寫器240、再配置管理器250以及gc管理器260也可以由lsi或asic、frga、plc等硬件實現(xiàn),并具有用于實現(xiàn)各自的功能的電路結(jié)構(gòu)(circuitry)等。另外,讀/寫管理器220、讀/寫器240、再配置管理器250以及gc管理器260中的一部分或全部也可以通過cpu等處理器執(zhí)行程序來實現(xiàn)。讀/寫管理器220、讀/寫器240、再配置管理器250以及gc管理器260的一部分或全部是“控制器”的一例。
命令緩存222、寫入緩存224、讀出緩存226、轉(zhuǎn)換表230、再配置管理表252以及訪問頻率管理表262被設(shè)定為存儲設(shè)備1d具備的易失性存儲器(未圖示)。作為易失性存儲器,可以使用dram(dynamicrandomaccessmemory:動態(tài)隨機(jī)訪問存儲器)等各種ram。另外,轉(zhuǎn)換表230、再配置管理表252以及訪問頻率管理表262在存儲設(shè)備1d的電源被設(shè)為 關(guān)閉時保存于半導(dǎo)體存儲器270,并在下次接通電源時被從半導(dǎo)體存儲器270讀出并在易失性存儲器中展開。
讀/寫管理器220控制讀/寫器240,基于從主機(jī)100接收到的寫入命令向半導(dǎo)體存儲器270寫入數(shù)據(jù),或基于從主機(jī)100接收到的讀出命令從半導(dǎo)體存儲器270讀出數(shù)據(jù)。
從主機(jī)100接收到的命令保存在命令緩存222中。在寫入命令保存在命令緩存222的情況下,讀/寫管理器220在寫入緩存224中確保寫入?yún)^(qū)域,并將數(shù)據(jù)發(fā)送請求發(fā)送給主機(jī)100。主機(jī)100接受該數(shù)據(jù)發(fā)送請求而將請求寫入的數(shù)據(jù)(以下稱為寫入數(shù)據(jù))發(fā)送給存儲設(shè)備1d。存儲設(shè)備1d將從主機(jī)100接收到的寫入數(shù)據(jù)保存在寫入緩存224中。讀/寫管理器220控制讀/寫器240,將保存在寫入緩存224的寫入數(shù)據(jù)向與附加在寫入命令中的鍵對應(yīng)的半導(dǎo)體存儲器270的物理地址寫入。此外,存儲設(shè)備1d也可以不以這樣的形式取得寫入數(shù)據(jù),可以從最初起接收附加有數(shù)據(jù)的命令。
另一方面,在讀出命令保存于命令緩存222的情況下,讀/寫管理器220控制讀/寫器240,從與附加在寫入命令中的鍵對應(yīng)的半導(dǎo)體存儲器270的物理地址讀出數(shù)據(jù),將該數(shù)據(jù)向讀出緩存226寫入。
圖27是表示轉(zhuǎn)換表230的一例的圖。轉(zhuǎn)換表230是用于將命令所包含的鍵和半導(dǎo)體存儲器270的物理地址相互轉(zhuǎn)換的表。物理地址可以用塊編號和頁編號表現(xiàn),但不限定于此。
在通過向半導(dǎo)體存儲器270寫入數(shù)據(jù)而變更了物理地址與鍵的關(guān)系的情況下,利用讀/寫管理器220或讀/寫器240更新轉(zhuǎn)換表230。存儲設(shè)備1d既可以包含一個轉(zhuǎn)換表230,也可以冗余地包含多個轉(zhuǎn)換表230。
讀/寫器240包含作為與半導(dǎo)體存儲器270的接口的接口電路、糾錯用的電路以及dma控制器等。讀/寫器240將保存于寫入緩存224的數(shù)據(jù)向半導(dǎo)體存儲器270寫入,或讀出寫入到半導(dǎo)體存儲器270的數(shù)據(jù)并向讀出緩存226寫入。
在向半導(dǎo)體存儲器270寫入數(shù)據(jù)的情況下,讀/寫器240向數(shù)據(jù)賦予糾錯碼。另外,讀/寫器240讀出寫入到半導(dǎo)體存儲器270的數(shù)據(jù),并基于讀 出的數(shù)據(jù)的糾錯碼進(jìn)行糾錯。
例如,讀/寫器240使用糾錯碼,以位為單位或以字節(jié)為單位等以預(yù)定的數(shù)據(jù)大小為單位,檢測數(shù)據(jù)的錯誤,并對檢測出錯誤的數(shù)據(jù)進(jìn)行訂正。
在檢測出數(shù)據(jù)的錯誤的情況下,讀/寫器240向再配置管理器250通知表示在數(shù)據(jù)中產(chǎn)生了錯誤的信息。
再配置管理器250包含再配置管理表252。在這里,半導(dǎo)體存儲器270可以是nand存儲器,但不限定于此。半導(dǎo)體存儲器270包含多個作為數(shù)據(jù)的擦除單位的塊272。此外,半導(dǎo)體存儲器270中的數(shù)據(jù)的寫入以簇為單位進(jìn)行。該簇既可以是與nand存儲器中的頁相同的大小,也可以是不同的大小。
圖28是表示再配置管理表252的一例的圖。再配置管理表252也可以是對識別塊272的“塊no.”關(guān)聯(lián)了表示在該塊272內(nèi)的存儲區(qū)域是有空閑區(qū)域還是沒有空閑區(qū)域的“空閑區(qū)域信息”、表示能夠?qū)懭氲拇氐臄?shù)量的“殘留簇數(shù)”、表示進(jìn)行了擦除的次數(shù)的“擦除次數(shù)”以及表示在數(shù)據(jù)的讀出時產(chǎn)生了錯誤的“錯誤發(fā)生標(biāo)記”等信息而得到的表。第五實施方式中的空閑區(qū)域是指能夠?qū)懭霐?shù)據(jù)的一個以上頁(空閑扇區(qū))或單元(空閑單元)。
再配置管理表252中的各項目由再配置管理器250基于從存儲設(shè)備1d的各構(gòu)成要素通知的信息進(jìn)行更新。
再配置管理器250進(jìn)行刷新和損耗均衡。
刷新是按塊272將寫入到作為對象的塊272的數(shù)據(jù)改寫到其他塊272的處理。例如向“錯誤發(fā)生標(biāo)記”寫入有表示產(chǎn)生了錯誤的信息的情況下,再配置管理器250對該塊272進(jìn)行刷新。在由讀/寫器240進(jìn)行了糾錯的情況下,“錯誤發(fā)生標(biāo)記”接受來自讀/寫器240的通知而由再配置管理器250更新。當(dāng)進(jìn)行刷新時,解除對應(yīng)的塊272的錯誤發(fā)生標(biāo)記(例如返回到0)。
另外,刷新也可以是將寫入到作為對象的塊272內(nèi)的頁的數(shù)據(jù)向作為對象的塊272內(nèi)的其他頁改寫的處理。
損耗均衡是指進(jìn)行控制以使得改寫次數(shù)、擦除次數(shù)或從擦除起的經(jīng)過 時間在塊272間或存儲元件之間變得均等的處理。損耗均衡包括在接受寫入命令的情況下作為選擇數(shù)據(jù)的寫入目的地的處理而執(zhí)行的情況和與寫入命令無關(guān)而作為數(shù)據(jù)的再配置處理而執(zhí)行的情況。
另外,損耗均衡也可以指進(jìn)行控制以使得改寫次數(shù)、擦除次數(shù)或從擦除起的經(jīng)過時間在各塊272內(nèi)的頁之間成為均等的處理。
返回圖26,在再寫入緩存254中保存有在執(zhí)行了上述刷新、損耗均衡或后述的垃圾收集的情況下,從半導(dǎo)體存儲器270讀出并被再次向半導(dǎo)體存儲器270寫入的數(shù)據(jù)。
另外,再配置管理器250在通過讀/寫管理器220的控制讀出數(shù)據(jù)或者在上述損耗均衡或刷新的過程中,按各塊272的頁或頁的單元判定是否檢測出錯誤。以下,有時將檢測出錯誤的頁稱為“異常頁”,將檢測出錯誤的單元稱為“異常單元”來進(jìn)行說明。
例如,也可以在某決定的時間中試行了兩次以上的某決定的次數(shù)的從相同的頁或單元讀出數(shù)據(jù)的結(jié)果是,在該某決定的次數(shù)中不能讀出數(shù)據(jù)的情況(數(shù)據(jù)的讀出失敗的情況下)下,再配置管理器250判定為在該頁或該單元中檢測出錯誤。
另外,也可以在利用讀/寫器240進(jìn)行的基于糾錯碼的糾錯的結(jié)果是,在通過糾錯訂正而得到的數(shù)據(jù)的錯誤數(shù)為閾值以上的情況下,再配置管理器250判定為在該頁或該單元中檢測出錯誤。即,檢測出錯誤的狀態(tài)可以是以位為單位或以字節(jié)為單位等以預(yù)定的數(shù)據(jù)大小為單位、執(zhí)行了一次以上的某決定的次數(shù)的糾錯而得到的狀態(tài)。
讀/寫器240在進(jìn)行糾錯期間對訂正而得到的數(shù)據(jù)的錯誤數(shù)進(jìn)行計數(shù),并存儲于易失性存儲器。再配置管理器250參照存儲于該易失性存儲器的信息,取得訂正而得到的數(shù)據(jù)的錯誤數(shù)。
另外,在利用后述的gc管理器260進(jìn)行了垃圾收集的情況下,再配置管理器250也可以同樣地判定在頁或單元是否檢測出錯誤。
gc管理器260進(jìn)行如下處理:將保存在至少一個塊272中的數(shù)據(jù)移動到其他區(qū)域,并且擦除保存在作為移動源的塊272中的數(shù)據(jù)(垃圾收集)。
gc管理器260在存儲設(shè)備1d從主機(jī)100接收到寫入命令的情況下,進(jìn)行后述的判定并決定是否執(zhí)行垃圾收集,但不限定于此。gc管理器260也可以不管是否接收到來自主機(jī)100的命令,都執(zhí)行垃圾收集。
垃圾收集是指為了將零碎化的數(shù)據(jù)統(tǒng)一歸攏而進(jìn)行塊內(nèi)的數(shù)據(jù)的再配置。
例如,gc管理器260參照再配置管理表252的空閑區(qū)域信息,當(dāng)gc用的塊272的空閑區(qū)域消失時,使讀/寫器240讀出塊272內(nèi)的數(shù)據(jù),并將讀出的數(shù)據(jù)向再寫入緩存254寫入。接著,gc管理器260將寫入到再寫入緩存254的數(shù)據(jù)向與作為數(shù)據(jù)的讀出對象的塊272不同的塊272寫入。并且,gc管理器260將讀出了數(shù)據(jù)的塊272釋放并擦除。此外,該擦除的處理也可以在進(jìn)行釋放之后,在有數(shù)據(jù)的寫入指示時進(jìn)行。
在執(zhí)行垃圾收集期間,讀/寫器240進(jìn)行上述糾錯,在檢測出數(shù)據(jù)的錯誤的情況下,向再配置管理器250通知表示在數(shù)據(jù)中產(chǎn)生了錯誤的信息。
圖29是表示將寫入到包含異常單元的頁的數(shù)據(jù)組向其他頁寫入的處理的情形的圖。該處理也可以作為損耗均衡的一部分執(zhí)行。
例如,在讀/寫器240對從屬于塊272a的頁274a的某單元276讀出的數(shù)據(jù)進(jìn)行了糾錯的情況下,再配置管理器250將寫入到包含單元(以下稱為異常單元)276的頁274的數(shù)據(jù)組寫入相同的塊272的其他頁中,所述單元276保存有進(jìn)行了糾錯的數(shù)據(jù)。在這里的數(shù)據(jù)組是保存在頁274的各單元276中的數(shù)據(jù)的集合。在圖示的例子中,再配置管理器250將寫入到包含異常單元276的頁274a中的數(shù)據(jù)組寫入到相同的塊272a的頁274c中。
圖30是表示將寫入到包含異常頁的塊的數(shù)據(jù)組向其他塊寫入的處理的情形的圖。該處理也可以作為刷新、損耗均衡或垃圾收集的一部分執(zhí)行。
例如,在讀/寫器240對從塊272的某頁274讀出的數(shù)據(jù)組的任一個的數(shù)據(jù)進(jìn)行了糾錯的情況下,再配置管理器250將寫入到包含頁(以下稱為異常頁)274的塊272中的數(shù)據(jù)組向其他塊272改寫,所述頁274保存有進(jìn)行了糾錯的數(shù)據(jù)組。在這里的數(shù)據(jù)組是保存在塊272的各頁274中的數(shù) 據(jù)的集合。在圖示的例子中,再配置管理器250將寫入到包含異常頁274a的塊272a中的數(shù)據(jù)組寫入到塊272b的頁274a和274b。
根據(jù)以上說明的第五實施方式中的存儲設(shè)備1d,由于以包含檢測出錯誤的頁274的塊272為單位,或以包含檢測出錯誤的單元276的頁274為單位,使數(shù)據(jù)移動到其他頁274或其他塊272,所以能夠容易地進(jìn)行數(shù)據(jù)的管理。
根據(jù)以上說明的至少一個實施方式,由于將至少包含第一數(shù)據(jù)和第二數(shù)據(jù)的數(shù)據(jù)組寫入到與檢測出錯誤的存儲區(qū)域不同的至少一個存儲區(qū)域,所以能夠提高對從主機(jī)100接收到的讀出命令的響應(yīng)性,所述第一數(shù)據(jù)是寫入到檢測出錯誤的存儲區(qū)域中的數(shù)據(jù)的至少一部分,所述第二數(shù)據(jù)是寫入到與檢測出錯誤的存儲區(qū)域物理上連續(xù)的存儲區(qū)域中的數(shù)據(jù)的至少一部分。
以上說明了幾個實施方式,但是這些實施方式只是作為例子而提出,并不是意在限定發(fā)明的范圍。這些實施方式能以其他各種方式來實施,在不脫離發(fā)明的要旨的范圍內(nèi),能夠進(jìn)行各種省略、替換以及變更。這些實施方式或其變形包含在發(fā)明的范圍或要旨內(nèi),并被包含在權(quán)利要求書所記載的發(fā)明及與之等同的范圍內(nèi)。