專利名稱:讀/寫硬盤時(shí)處理數(shù)據(jù)錯(cuò)誤和重試的方法
技術(shù)領(lǐng)域:
本發(fā)明的一個(gè)或多個(gè)實(shí)施方案一般涉及在硬盤上讀/寫數(shù)據(jù)時(shí),處理讀/寫數(shù)據(jù)錯(cuò)誤和重試的方法。
背景技術(shù):
根據(jù)現(xiàn)有的在硬盤上讀/寫數(shù)據(jù)時(shí)處理讀/寫數(shù)據(jù)錯(cuò)誤和的方法,例如要求寫入數(shù)據(jù),到一百(100)個(gè)連續(xù)的扇區(qū)(0到99)的寫入操作,通常按如下步驟進(jìn)行操作。當(dāng)?shù)竭_(dá)了一硬盤軌道的0扇區(qū),數(shù)據(jù)處理伺服控制器將根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種使數(shù)據(jù)開始寫入。如果根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種而寫入數(shù)據(jù)錯(cuò)誤被發(fā)現(xiàn)(這些寫錯(cuò)誤可能是由于以下任何一種情況,諸如,但并不僅限于(a)外部的震動(dòng)或者振動(dòng)導(dǎo)致讀/寫頭偏離了軌道中心,(b)發(fā)現(xiàn)不正確的伺服扇區(qū)數(shù)據(jù)及(c)其他),該數(shù)據(jù)處理伺服控制器將根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種立刻停止寫操作,以避免不正確地寫入數(shù)據(jù)和/或者避免可能影響記錄在臨近數(shù)據(jù)軌道上的數(shù)據(jù)。在發(fā)現(xiàn)數(shù)據(jù)錯(cuò)誤時(shí),一些數(shù)據(jù)扇區(qū)或許已經(jīng)寫入數(shù)據(jù),而一些扇區(qū)還未寫入數(shù)據(jù)。在這種情況下,根據(jù)以前的方法,硬盤將繼續(xù)旋轉(zhuǎn),一旦寫入數(shù)據(jù)錯(cuò)誤被發(fā)現(xiàn)的扇區(qū)再次處于寫入狀態(tài),數(shù)據(jù)處理伺服控制器將重新開始數(shù)據(jù)寫入操作(這被稱為重試)。當(dāng)寫入數(shù)據(jù)錯(cuò)誤再次發(fā)生時(shí),這種程序?qū)⒅貜?fù)進(jìn)行。最后,根據(jù)本領(lǐng)域中以前的方法,若不是整個(gè)100個(gè)扇區(qū)被成功的寫入,則是執(zhí)行預(yù)定數(shù)量的重寫操作。類似的程序也應(yīng)用于讀取數(shù)據(jù)。
不難看出,上文所述的傳統(tǒng)方法既低效又耗時(shí)。
綜上所述,需要提供一種能克服上述方法中一個(gè)或者多個(gè)已知問題的方法。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案滿足了本領(lǐng)域上述一個(gè)或者多個(gè)已知的需求。更為確切的說,本發(fā)明的一個(gè)實(shí)施方案為在硬盤軌道的多個(gè)扇區(qū)上寫入數(shù)據(jù)的方法,該方法包括(a)發(fā)送一個(gè)在軌道的第一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);(b)接收寫入數(shù)據(jù)錯(cuò)誤;(c)當(dāng)跳過預(yù)設(shè)數(shù)量的扇區(qū)后,發(fā)送一個(gè)在該軌道的另外一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);(d)等待第一個(gè)扇區(qū)重新就位;以及(e)如果在該軌道上重試寫入數(shù)據(jù)的次數(shù)尚未超過預(yù)定次數(shù),發(fā)送一個(gè)在第一扇區(qū)上重試寫入數(shù)據(jù)的信號(hào)。
圖1所示為本寫入數(shù)據(jù)發(fā)明的一個(gè)或者多個(gè)實(shí)施方案的流程圖。
圖2所示為本讀取數(shù)據(jù)發(fā)明的一個(gè)或者多個(gè)實(shí)施方案的流程圖。
圖3所示為使用在發(fā)明背景中描述的現(xiàn)有方法與使用本發(fā)明一個(gè)實(shí)施方案的方法的一組在一百(100)個(gè)扇區(qū)上寫入數(shù)據(jù)的連續(xù)重試模擬,其中硬盤每次旋轉(zhuǎn)中,一個(gè)軌道之中的6個(gè)隨機(jī)數(shù)據(jù)扇區(qū)被檢測(cè)出有數(shù)據(jù)錯(cuò)誤;并且圖4所示為使用在發(fā)明背景中描述的現(xiàn)有的方法與使用本發(fā)明一個(gè)實(shí)施方案的方法的另一組在一百(100)個(gè)扇區(qū)上寫入數(shù)據(jù)的連續(xù)重試模擬,其中硬盤每次旋轉(zhuǎn)中,一個(gè)軌道之中的6個(gè)隨機(jī)數(shù)據(jù)扇區(qū)被指出有數(shù)據(jù)錯(cuò)誤。
具體實(shí)施例方式
根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案,例如需要在硬盤軌道的一百(100)個(gè)扇區(qū)(0到99)上寫入數(shù)據(jù)的寫入操作,將如以下所述來進(jìn)行。一旦根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種而到達(dá)硬盤驅(qū)動(dòng)器的硬盤上軌道的扇區(qū)0時(shí),數(shù)據(jù)處理伺服控制器將根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種使數(shù)據(jù)開始寫入。如果根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種,寫入數(shù)據(jù)錯(cuò)誤被發(fā)現(xiàn)(例如,當(dāng)數(shù)據(jù)被寫入時(shí)或者寫入之后),數(shù)據(jù)處理伺服控制器將根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種方法立刻使寫入操作停止,但這僅僅是對(duì)于那些被檢測(cè)到發(fā)生寫入數(shù)據(jù)錯(cuò)誤的扇區(qū)。而根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案,數(shù)據(jù)處理伺服控制器在發(fā)現(xiàn)寫入數(shù)據(jù)錯(cuò)誤的扇區(qū)之后,跳過預(yù)定數(shù)量的扇區(qū),然后使寫入操作開始。例如,當(dāng)預(yù)定的數(shù)量為0時(shí),將在接下來的扇區(qū)中立即開始寫入。此外,預(yù)定的數(shù)量可以是1,2或者更多。接下來,由于硬盤繼續(xù)旋轉(zhuǎn),根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案,數(shù)據(jù)處理伺服控制器使數(shù)據(jù)寫入操作開始于先前旋轉(zhuǎn)中由于發(fā)現(xiàn)了寫數(shù)據(jù)錯(cuò)誤而沒有寫入的扇區(qū)(這被稱為重試)。這些操作將被持續(xù)執(zhí)行,直至所有100個(gè)扇區(qū)被成功的寫入,或者直至預(yù)定數(shù)量的重試被執(zhí)行為止。根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案,根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種,數(shù)據(jù)處理伺服控制器將標(biāo)注所有已寫入的扇區(qū),并且標(biāo)注由于發(fā)生寫入數(shù)據(jù)錯(cuò)誤而沒有寫入的扇區(qū)。
圖1圖示了本寫入數(shù)據(jù)發(fā)明的一個(gè)或者多個(gè)實(shí)施方案的流程圖。如框990所示,數(shù)據(jù)處理伺服控制器設(shè)定(a)“重試的次數(shù)”(NRETRY)等于0,(b)“在軌道中待寫的第一個(gè)數(shù)據(jù)扇區(qū)”(FSW),(c)“在軌道中待寫入的扇區(qū)數(shù)量”(NUMS),(d)“下一個(gè)待寫入的扇區(qū)”(NEXTS)等于FSW,和(e)SEC(0)到SEC(NUMS-1)=K1(其中,K1的值表示未寫入的扇區(qū),K2的值表示已寫入的扇區(qū))。然后控制轉(zhuǎn)到判斷框1000。
判斷框1000判斷“重試的數(shù)量(NRETRY)是否超過了預(yù)定的最大值(RETRYMAX)”。如果超過,控制轉(zhuǎn)移到框1010以報(bào)告寫入錯(cuò)誤,否則,控制轉(zhuǎn)到判斷框1020。
判斷框1020判斷“下一個(gè)待寫入的扇區(qū)”(NEXTS)是否已到達(dá)。如果已到達(dá),控制轉(zhuǎn)到框1030,否則,進(jìn)行等待。
框1030發(fā)出在一扇區(qū)(即NEXTS)進(jìn)行寫入操作的命令。之后控制轉(zhuǎn)到判斷框1040。
判斷框1040判斷是否有寫入錯(cuò)誤發(fā)生。如果有,控制轉(zhuǎn)移到框1110,否則,控制轉(zhuǎn)到1050。
框1050將待寫入的扇區(qū)的數(shù)量減1(NUMS=NUMS-1)并設(shè)定SEC(NEXTS)=K2。然后控制轉(zhuǎn)到判斷框1060。
判斷框1060判斷是否有更多的數(shù)據(jù)要寫入(NUMS>0?)。如果有,控制轉(zhuǎn)到框1070,否則退出。
在框圖1070,通過在SEC()中搜尋在NEXTS之后而且等於K1的下一個(gè)待寫入扇區(qū)(來回搜尋SEC()),以設(shè)定NEXTSnew。然后控制轉(zhuǎn)到框1080。
判斷框1080判斷是否需要作多一個(gè)硬盤旋轉(zhuǎn)才能寫入更多的數(shù)據(jù),即是否NEXTSnew<NEXTS。如果是,控制調(diào)用框1110,否則控制轉(zhuǎn)到框圖1090。
框圖1090重新設(shè)定NEXTS,即NEXTS=NEXTSnew。然后控制轉(zhuǎn)到判斷框1020。
框1100將重試的次數(shù)增加1(NRETRY=NRETRY+1)并重新設(shè)定NEXTS(即NEXTS=NEXTSnew)。然后控制轉(zhuǎn)到判斷框1000。
框1110將NEXTS加上一個(gè)預(yù)定的數(shù)目(NSKIP)。然后控制轉(zhuǎn)向框1070。
本領(lǐng)域的一般技術(shù)人員將會(huì)認(rèn)可,即本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案或可用于硬盤的讀取數(shù)據(jù)操作。在讀取數(shù)據(jù)操作的情況下,數(shù)據(jù)處理伺服控制器使數(shù)據(jù)由所有應(yīng)讀取的扇區(qū)讀到數(shù)據(jù)緩存中。在讀取數(shù)據(jù)時(shí),將對(duì)讀取數(shù)據(jù)錯(cuò)誤進(jìn)行檢測(cè),以便數(shù)據(jù)處理伺服控制器判斷哪一些扇區(qū)中發(fā)生了數(shù)據(jù)讀取錯(cuò)誤。然后,根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案,在硬盤的后續(xù)旋轉(zhuǎn)中,數(shù)據(jù)處理伺服控制器使產(chǎn)生數(shù)據(jù)讀取錯(cuò)誤的扇區(qū)進(jìn)行重讀(這稱為重試)。這種操作將重復(fù)執(zhí)行,直至所有扇區(qū)被成功地讀取,或者是已執(zhí)行了所預(yù)定重試次數(shù)。根據(jù)本發(fā)明的一個(gè)或者多個(gè)實(shí)施方案、根據(jù)本領(lǐng)域中一般專業(yè)人員所熟知的方法中的任一種,數(shù)據(jù)處理伺服控制器將標(biāo)注所有已成功讀出的扇區(qū),并且標(biāo)注發(fā)生數(shù)據(jù)讀取錯(cuò)誤的扇區(qū)。
圖2所示為本讀取數(shù)據(jù)發(fā)明的一個(gè)或者多個(gè)實(shí)施方案的流程圖。如框1990所示,數(shù)據(jù)處理伺服控制器設(shè)定(a)“重試的數(shù)目”(NRETRY)等于0,(b)“一軌道中第一個(gè)待讀取數(shù)據(jù)的扇區(qū)”(FSR),(c)“該軌道中待讀取的扇區(qū)數(shù)目”(NUMS),和(d)SEC(0)到SEC(NUMS-1)=K1(其中,K1的值表示未讀取的扇區(qū),K2的值表示已讀取的扇區(qū))。然后控制轉(zhuǎn)到判斷框2000。
判斷框圖2000判斷“第一個(gè)待讀取的扇區(qū)”(FSR)是否以到達(dá)。如果以到達(dá),控制轉(zhuǎn)到框2010,否則,進(jìn)行等待。
框2010發(fā)出讀取NUMS扇區(qū)的命令。然后控制轉(zhuǎn)到框2020。
框2020接收數(shù)據(jù)讀取錯(cuò)誤信號(hào),為每個(gè)接收到數(shù)據(jù)讀取錯(cuò)誤的扇區(qū)設(shè)定SEC()=K1,設(shè)定NUMDEFAULT等于接收到的錯(cuò)誤數(shù)量,設(shè)定NUMS=NUMDEFAULT??刂迫缓筠D(zhuǎn)到判斷框2030。
判斷框2030判斷NUMS=0是否成立。如果成立,退出,否則,控制將轉(zhuǎn)到框2040。
框2040將重試的次數(shù)增加1(NRETRY=NRETRY+1)。然后控制轉(zhuǎn)到判斷框2050。
判斷框2050判斷“重試的數(shù)量(NRETRY)是否超過了預(yù)定的最大值(RETRYMAX)”。如果超過,控制轉(zhuǎn)到框2060以報(bào)告讀取錯(cuò)誤,否則,控制轉(zhuǎn)到框2070。
框2070通過搜索SEC()中的K1,以決定代表(一集合中第一個(gè)待讀取的扇區(qū),接收到讀取數(shù)據(jù)錯(cuò)誤的連續(xù)扇區(qū)數(shù))的值對(duì)(FSRi,NSECi)的集合,其中,該種集合的數(shù)量為NUMGroup。將SEC()中的K1設(shè)回到K2。然后控制轉(zhuǎn)到框2080。
框2080設(shè)定NUMDEFAULT=0,并在硬盤旋轉(zhuǎn)所余下的部分中,循環(huán)讀過這些集合。對(duì)每一個(gè)集合執(zhí)行以下所述。判斷FSRi是否已經(jīng)到達(dá)。如果是,發(fā)出讀NSECi扇區(qū)的命令,否則等待。接收任何的數(shù)據(jù)讀取錯(cuò)誤信號(hào),為每個(gè)接收到數(shù)據(jù)讀取錯(cuò)誤信號(hào)的扇區(qū)設(shè)SEC()=K1,并將NUMDEFAULT的值加1。最后,設(shè)定NUMS=NUMDEFAUL。然后控制轉(zhuǎn)到判斷框2030。
不難想象,上述一個(gè)或者多個(gè)提出的實(shí)施方案中,有一些類型的寫/讀數(shù)據(jù)錯(cuò)誤,在再次試圖寫入/讀取前,需要數(shù)據(jù)處理伺服控制器等待以跳過預(yù)定數(shù)量的扇區(qū)(比如等到硬盤旋轉(zhuǎn)了一整圈)。
圖3和圖4所示為一組在一百(100)個(gè)扇區(qū)上寫入數(shù)據(jù)的連續(xù)重試模擬,其中硬盤每次旋轉(zhuǎn)中,一個(gè)軌道之中的6個(gè)隨機(jī)數(shù)據(jù)扇區(qū)被指出有寫入數(shù)據(jù)錯(cuò)誤。圖3圖4所示的數(shù)據(jù)為硬盤驅(qū)動(dòng)器被放置在特定類型的振動(dòng)下產(chǎn)生的一般錯(cuò)誤數(shù)據(jù),或者顯示其他錯(cuò)誤數(shù)據(jù)的情況,例如但并不限于,非重復(fù)脫離軌道(“NRRO”)。圖3所示為一系列的在一百(100)個(gè)扇區(qū)上寫入數(shù)據(jù)的連續(xù)重試模擬,其中硬盤每次旋轉(zhuǎn)中,一個(gè)軌道之中的6個(gè)隨機(jī)數(shù)據(jù)扇區(qū)被指出有數(shù)據(jù)錯(cuò)誤。圖3的100部分是使用在發(fā)明背景中所描述的現(xiàn)有方法所產(chǎn)生的結(jié)果,圖3的200部分對(duì)應(yīng)為本發(fā)明的一個(gè)實(shí)施方案所產(chǎn)生的結(jié)果。如圖3的100部分所示,110部分的首行(對(duì)應(yīng)于硬盤的一次旋轉(zhuǎn)),扇區(qū)1,27,28,13,99和52產(chǎn)生了寫入數(shù)據(jù)錯(cuò)誤。接著,如120部分的首行所示(其中,0表示扇區(qū)被寫入,1表示扇區(qū)沒有被寫入),在第一次硬盤旋轉(zhuǎn)中,只有扇區(qū)1被寫入數(shù)據(jù)。然后,110部分的第二行中(對(duì)應(yīng)于硬盤的一次旋轉(zhuǎn)),扇區(qū)6,8,51,62,73和99發(fā)生了寫入數(shù)據(jù)錯(cuò)誤。接下來,如120部分的第二行所示,在第二次硬盤旋轉(zhuǎn)中,扇區(qū)1-5被寫入。持續(xù)這種操作,不難看出,圖3的100部分說明在100個(gè)扇區(qū)中寫入信息時(shí),使用現(xiàn)有的方法需要十(10)次硬盤旋轉(zhuǎn)。
如圖3的200部分所示,210部分的首行中,扇區(qū)1,27,28,13,99和52產(chǎn)生了寫入數(shù)據(jù)錯(cuò)誤。接著,在220部分的首行,在第一次硬盤旋轉(zhuǎn)中,扇區(qū)0,2-12,14-26,29-51和53-98被寫入數(shù)據(jù)。然后,220部分的第二行中,扇區(qū)6,8,51,62,73和99發(fā)生了寫入數(shù)據(jù)錯(cuò)誤。接下來,如220部分的第二行所示,在第二次硬盤旋轉(zhuǎn)中,扇區(qū)1,13,27-28和52被寫入。持續(xù)這種操作,不難看出,圖3的200部分說明使用本發(fā)明的一個(gè)實(shí)施方案在100個(gè)扇區(qū)中寫入信息時(shí),需要三(3)次硬盤旋轉(zhuǎn)。
圖4所示為另一組在一百(100)個(gè)扇區(qū)上寫入數(shù)據(jù)的連續(xù)重試模擬,其中硬盤每次旋轉(zhuǎn)中,一個(gè)軌道之中的6個(gè)隨機(jī)數(shù)據(jù)扇區(qū)被指出有數(shù)據(jù)錯(cuò)誤。圖4的300部分是使用在發(fā)明背景中描述的現(xiàn)有方法所產(chǎn)生的結(jié)果,圖4的400部分是使用本發(fā)明的一個(gè)實(shí)施方案所產(chǎn)生的結(jié)果。由圖4中不難得到,使用現(xiàn)有的方法在100個(gè)扇區(qū)中寫入信息需要硬盤旋轉(zhuǎn)(3)次,而使用本發(fā)明的一個(gè)實(shí)施方案在100個(gè)扇區(qū)中寫入信息只需要硬盤旋轉(zhuǎn)(2)次。
盡管包含于本發(fā)明的宗旨的各種實(shí)施方案在此給予了詳細(xì)的描述和說明,本領(lǐng)域中的技術(shù)人員將容易設(shè)計(jì)出仍然包含于這些宗旨的其他各種實(shí)施方案。
權(quán)利要求
1.一種在硬盤軌道的多個(gè)扇區(qū)上寫入數(shù)據(jù)的方法,該方法包括發(fā)送一個(gè)在該軌道的第一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);接收至少一個(gè)數(shù)據(jù)寫入錯(cuò)誤;當(dāng)跳過預(yù)設(shè)數(shù)目的扇區(qū)后,發(fā)送一個(gè)在軌道的另外一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);等待第一個(gè)扇區(qū)重新就位;并且如果在軌道上寫入數(shù)據(jù)的重試數(shù)目尚未超過預(yù)定的次數(shù)時(shí),發(fā)送一個(gè)在第一扇區(qū)重試寫入數(shù)據(jù)的信號(hào)。
2.一種在硬盤軌道的多個(gè)扇區(qū)上讀取數(shù)據(jù)的方法,該方法包括發(fā)送一個(gè)從該軌道的第一個(gè)扇區(qū)上開始讀取數(shù)據(jù)的信號(hào);接收一個(gè)或者多個(gè)數(shù)據(jù)讀取錯(cuò)誤;等待第一個(gè)扇區(qū)重新就位;并且如果數(shù)據(jù)寫入的重試數(shù)目尚未超過預(yù)定的次數(shù),發(fā)送一個(gè)從該軌道先前不能讀取的扇區(qū)重試讀取數(shù)據(jù)的信號(hào)。
3.權(quán)利要求1中所述方法,其中所預(yù)定要跳過的扇區(qū)數(shù)為0。
4.權(quán)利要求1中所述方法,其中所預(yù)定要跳過的扇區(qū)數(shù)為1,2或者更多。
全文摘要
本發(fā)明的一個(gè)實(shí)施方案為在硬盤軌道的多個(gè)扇區(qū)上寫入數(shù)據(jù)的方法,該方法包括(a)發(fā)送一個(gè)在軌道的第一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);(b)接收寫入數(shù)據(jù)默認(rèn)值(default);(c)當(dāng)跳過預(yù)設(shè)數(shù)目的扇區(qū)后,發(fā)送一個(gè)在軌道的另外一個(gè)扇區(qū)上寫入數(shù)據(jù)的信號(hào);(d)等待第一個(gè)扇區(qū)重新就位;并(e)如果在軌道上寫入數(shù)據(jù)的重試數(shù)目尚未超過預(yù)定的次數(shù)時(shí),發(fā)送一個(gè)在第一扇區(qū)重試寫入數(shù)據(jù)的信號(hào)。
文檔編號(hào)G11B20/18GK1607599SQ200410046220
公開日2005年4月20日 申請(qǐng)日期2004年5月31日 優(yōu)先權(quán)日2003年10月16日
發(fā)明者戴維·M·德魯因 申請(qǐng)人:南方匯通微硬盤科技有限公司