專利名稱:預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種預(yù)防數(shù)據(jù)毀損的方法,特別是涉及一種預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法。
在電腦系統(tǒng)中,軟盤控制器(Floppy Diskette Controller)是用以對(duì)軟盤進(jìn)行數(shù)據(jù)傳輸(寫入或讀取數(shù)據(jù))的控制,并作為中央處理器CPU與軟盤實(shí)體的接口(interface)。軟盤控制器必須能對(duì)軟盤在數(shù)據(jù)傳輸時(shí)所可能發(fā)生的各種操作狀況進(jìn)行監(jiān)控;當(dāng)有錯(cuò)誤、或異常狀態(tài)發(fā)生時(shí),軟盤控制器應(yīng)會(huì)對(duì)電腦系統(tǒng)發(fā)出警示信號(hào),以促使電腦系統(tǒng)能夠進(jìn)行對(duì)應(yīng)的措施;例如,重新進(jìn)行數(shù)據(jù)的傳輸……等。但是,若干廠商所提供的軟盤控制器,由于在設(shè)計(jì)上有缺陷,因此對(duì)某些特定的情形下所會(huì)發(fā)生的錯(cuò)誤,經(jīng)常無(wú)法予以檢測(cè)得知。
Adams在其美國(guó)專利(證號(hào)5379414)中也提及數(shù)據(jù)漏失及/或數(shù)據(jù)損毀在數(shù)據(jù)傳輸至軟盤時(shí)會(huì)發(fā)生;尤其當(dāng)一數(shù)據(jù)扇區(qū)(sector)的最后一筆數(shù)據(jù)字節(jié)(data byte),若延遲一段時(shí)間才寫入軟盤,則發(fā)生數(shù)據(jù)漏失及/或數(shù)據(jù)損毀的機(jī)率最大。一般而言,軟盤控制器均無(wú)法檢測(cè)出此種錯(cuò)誤狀況。
Adams在其美國(guó)專利中也提出一種解決上述問(wèn)題的方法,其主要精神為在軟盤上進(jìn)行的數(shù)據(jù)寫入進(jìn)行至最后一筆字節(jié)時(shí),利用軟件方式量測(cè)最后一筆字節(jié)的寫入延遲時(shí)間,若上述寫入延遲時(shí)間超出一特定值,則強(qiáng)迫發(fā)出警示信號(hào),借此以促使軟盤控制器、或電腦系統(tǒng)進(jìn)行相對(duì)的處理程序(例如,重新進(jìn)行數(shù)據(jù)傳輸),以便將數(shù)據(jù)漏失及/或數(shù)據(jù)毀損的危險(xiǎn)性、及機(jī)率降至最低。
其中,需注意的是Adam所指的寫入延遲時(shí)間,是指從DMA請(qǐng)求信號(hào)(DREQ)發(fā)出直到DMA確認(rèn)信號(hào)(DACK)發(fā)出的時(shí)間間隔。
根據(jù)Adams所公開(kāi)的技術(shù),僅是針對(duì)最后一筆字節(jié)進(jìn)行檢測(cè),但是實(shí)際傳輸時(shí),所有數(shù)據(jù)均有漏失及/或毀損的可能。例如,即使延遲寫入的情形并非發(fā)生在最后一筆字節(jié),但是全體數(shù)據(jù)仍然會(huì)因?yàn)橄惹皵?shù)據(jù)的延遲寫入,而導(dǎo)致有漏失及/或毀損的可能。
在電腦系統(tǒng)與軟盤間進(jìn)行數(shù)據(jù)傳輸時(shí),大多采取直接存儲(chǔ)器存取(Direct Memory Access;以下簡(jiǎn)稱為DMA)的操作模式。在DMA模式下進(jìn)行數(shù)據(jù)傳輸時(shí),有時(shí)為了增進(jìn)傳輸效率而會(huì)啟動(dòng)先入先出(first-infirst-out;以下簡(jiǎn)稱為FIFO)緩沖裝置。在軟盤間進(jìn)行數(shù)據(jù)傳輸時(shí),即使發(fā)生數(shù)據(jù)延遲寫入的狀態(tài)時(shí),由于數(shù)據(jù)是先暫存在FIFO緩沖裝置中,故而一般情形是不會(huì)發(fā)生數(shù)據(jù)漏失及/或毀損的可能。但是,Adams顯然并未考慮在DMA模式中采用FIFO緩沖裝置的情形。
考慮在DMA模式中采用FIFO緩沖裝置,依據(jù)Adams的技術(shù),當(dāng)檢測(cè)到最后一筆字節(jié)有延遲寫入的情形時(shí),即強(qiáng)制發(fā)出警示信號(hào);但是,由于數(shù)據(jù)是存于FIFO緩沖裝置中,故產(chǎn)生數(shù)據(jù)漏失及/或毀損的可能性相當(dāng)小。所以,采用Adams的技術(shù)對(duì)于軟盤的操作而言,相當(dāng)容易造成誤判;此外,頻頻發(fā)出警示信號(hào),要求電腦系統(tǒng)作對(duì)應(yīng)處理,也將大幅降低軟盤的存取效率。
有鑒于此,本發(fā)明目的之一在于提出一種軟件控制方法,以彌補(bǔ)軟盤控制器的缺陷,并協(xié)助電腦系統(tǒng)檢測(cè)出所有可能發(fā)生錯(cuò)誤的數(shù)據(jù),以減少因?yàn)檠舆t寫入軟盤所發(fā)生的數(shù)據(jù)漏失及/或數(shù)據(jù)損毀。
為達(dá)到上述目的,本發(fā)明針對(duì)至少包括有中央處理器、系統(tǒng)中斷時(shí)鐘、軟盤、軟盤控制器及對(duì)應(yīng)周邊裝置的電腦系統(tǒng),提出了一種預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法,其主要包括如下步驟
判定上述電腦系統(tǒng)是否對(duì)上述軟盤進(jìn)行數(shù)據(jù)存??;量測(cè)上述DMA請(qǐng)求信號(hào)(DREQ),從送出到移除的時(shí)間間隔;上述時(shí)間間隔若大于一特定值,則促使上述電腦系統(tǒng)發(fā)出一錯(cuò)誤信號(hào)。
此外,本發(fā)明的方法,也配合預(yù)先鉤掛內(nèi)置程序給上述系統(tǒng)中斷時(shí)鐘所攔截的中斷向量;配合加快上述系統(tǒng)中斷時(shí)鐘的方式,以進(jìn)行上述時(shí)間間隔的量測(cè);待完成數(shù)據(jù)傳輸后,再使上述系統(tǒng)中斷時(shí)鐘恢復(fù)正常。
下面結(jié)合實(shí)施例及其所示附圖,對(duì)本發(fā)明的上述目的、特征、和優(yōu)點(diǎn)作進(jìn)一步詳細(xì)說(shuō)明。
圖1為典型電腦系統(tǒng)10的結(jié)構(gòu);圖2為上述電腦系統(tǒng)進(jìn)行DMA模式傳輸時(shí)的相關(guān)信號(hào)時(shí)序;圖3為依據(jù)本發(fā)明的軟盤驅(qū)動(dòng)控制方法的實(shí)施例流程圖;圖4a為以內(nèi)置程序量測(cè)最大間隔值的流程小驟;圖4b為量測(cè)取程序的流程步驟。
參照?qǐng)D1,其為典型電腦系統(tǒng)10的結(jié)構(gòu)。電腦系統(tǒng)10的中央處理器(CPU)12和主存儲(chǔ)器14設(shè)置于系統(tǒng)單元的內(nèi)部,可通過(guò)總線15而彼此溝通。在電腦系統(tǒng)10工作期間,中央處理器12所使用的指令(例如可執(zhí)行文件……等)及數(shù)據(jù)是儲(chǔ)存于主存儲(chǔ)器14中。由于主存儲(chǔ)器14只有在系統(tǒng)啟動(dòng)(power on)時(shí)才能夠儲(chǔ)存指令及數(shù)據(jù),故電腦系統(tǒng)10內(nèi)也設(shè)置有硬盤(hard disk)裝置(未圖示),用以長(zhǎng)久儲(chǔ)存必要數(shù)據(jù)。一般而言,電腦系統(tǒng)10也至少配備有一軟盤驅(qū)動(dòng)器(floppy disk drive)16,用以接受一可抽換的軟盤(flppy disk)17。
在傳輸數(shù)據(jù)至軟盤17時(shí),中央處理器12通常是通過(guò)程序化DMA控制器18以執(zhí)行數(shù)據(jù)的輸入/輸出(I/O)傳輸。央處理單元12發(fā)出一指令給一軟盤控制器20來(lái)開(kāi)始進(jìn)行數(shù)據(jù)的I/O傳輸;接著,等待軟盤控制器20以完整的中斷信號(hào)對(duì)中央處理器12進(jìn)行中斷(interrupt)。
上述電腦系統(tǒng)10,也具有一系統(tǒng)時(shí)鐘(system clock)22;例如,由8253計(jì)時(shí)器所構(gòu)成。系統(tǒng)時(shí)鐘22以每秒約18.2次的頻率對(duì)中央處理器12發(fā)出中斷,也即大約每54.9ms對(duì)中央處理器進(jìn)行中斷一次。
DMA控制器18是處理軟盤控制器20和主存儲(chǔ)器14間的數(shù)據(jù)傳輸。當(dāng)上述電腦系統(tǒng)10請(qǐng)求以DMA模式對(duì)軟盤17進(jìn)行數(shù)據(jù)傳輸(例如寫入數(shù)據(jù))時(shí),可能由軟盤控制器20發(fā)出一DMA請(qǐng)求信號(hào)(DREQ)至DMA控制器18。在DMA控制器18確認(rèn)可進(jìn)行DMA模式傳輸時(shí),即回復(fù)一DMA確認(rèn)信號(hào)(DACK)給軟盤控制器20。之后,DMA請(qǐng)求信號(hào)(DREQ)將自動(dòng)被移除;同時(shí),例如由電腦系統(tǒng)10發(fā)出一讀/寫信號(hào)(R/W;圖1中未圖示),以開(kāi)始進(jìn)行數(shù)據(jù)的寫入。
參照?qǐng)D2,其為上述電腦系統(tǒng)進(jìn)行DMA模式傳輸時(shí)的相關(guān)信號(hào)時(shí)序。其中,當(dāng)發(fā)出上述DMA請(qǐng)求信號(hào)(DREQ)時(shí),DMA請(qǐng)求信號(hào)(DREQ)的二進(jìn)制位由邏輯“0”變成邏輯“1”;當(dāng)發(fā)出上述DMA確認(rèn)信號(hào)(DACK)時(shí),DMA確認(rèn)信號(hào)(DACK)的二進(jìn)制位由邏輯“1”變成邏輯“0”;之后,當(dāng)移除上述DMA請(qǐng)求信號(hào)(DREQ)時(shí),KMA請(qǐng)求信號(hào)(DREQ)的二進(jìn)制位由邏輯“1”就成邏輯“0”。
在電腦系統(tǒng)10的主機(jī)板(mainboard)上的DMA指定(DMAassignment),是指定KMA第2通道(channel 2)來(lái)對(duì)軟盤17進(jìn)行字節(jié)的數(shù)據(jù)傳輸。因?yàn)椋?通道的優(yōu)先權(quán)(priority)小于其它DMA通道;所以,當(dāng)軟盤17進(jìn)行DMA模式傳輸時(shí),若電腦系統(tǒng)10處于相當(dāng)繁忙的運(yùn)行階段、或其他因素時(shí),從發(fā)出上述DMA請(qǐng)求信號(hào)(DREQ)到上述DMA確認(rèn)信號(hào)(DACK)回復(fù)的時(shí)間延遲Td可能會(huì)變得相當(dāng)長(zhǎng),從而造成軟盤17數(shù)據(jù)寫入/讀出的延遲。在某些廠商的輸出入(I/O)芯片中,上述時(shí)間延遲Td若介于20μs~30μs時(shí),則數(shù)據(jù)最有可能發(fā)生漏失及/或損毀的情形。另外,若軟盤控制器20或DMA控制器18有將其FIFO裝置(未圖示)啟動(dòng)的話,由于數(shù)據(jù)能夠暫存于FIFO裝置中,所以上述時(shí)間延遲Td在介于250μs~260μ以上時(shí),數(shù)據(jù)才有可能發(fā)生漏失及/或毀損的情形。
由上述說(shuō)明可知,在每一次以DMA模式進(jìn)行數(shù)據(jù)字節(jié)的寫入/讀出時(shí),上述時(shí)間延遲Td的長(zhǎng)度,是判定寫入/讀出的數(shù)據(jù)是否發(fā)生有漏失及/或毀損情形的重要指標(biāo)。
依據(jù)Adams所提的技術(shù),僅是針對(duì)DMA傳輸?shù)淖詈笠还P字節(jié)進(jìn)行檢測(cè),同時(shí)量得寫入最后一筆字節(jié)前的時(shí)間延遲Td,再依上述時(shí)間延遲Td是否超出一特定值,而判定數(shù)據(jù)是否有漏失及/或毀損的可能。很明顯,若是在先前其他筆字節(jié)(非最后一筆字節(jié))寫入/讀出軟盤17時(shí),若也發(fā)生有上述時(shí)間延遲Td超出一特定值的情形的話,Adams技術(shù)顯然無(wú)法判別出此一狀況,也無(wú)法通知系統(tǒng)作適當(dāng)?shù)幕貞?yīng)處理。另外,考慮DMA控制器18將其FIFO緩沖裝置啟動(dòng)的情形,上述時(shí)間延遲Td的容許值可以變得更長(zhǎng)(例如由20μs成為250μs);但是由于Adams的技術(shù)未考慮應(yīng)用FIFO的情形,所以可能會(huì)將根本正常的傳輸狀況(即20μs<Td<250μs的情形),誤判為有數(shù)據(jù)漏失及/或損毀,而促使系統(tǒng)作額外的對(duì)應(yīng)處理(例如,重新進(jìn)行傳輸),而此舉顯然會(huì)降低軟盤17及電腦系統(tǒng)的運(yùn)行效率。
為了能夠預(yù)防軟盤控制器造成的數(shù)據(jù)毀損,本發(fā)明提出的方法,主要包括如下步驟(a)判定一電腦系統(tǒng)是否對(duì)軟盤進(jìn)行數(shù)據(jù)存?。?b)鉤掛(hook)一內(nèi)置程序,供上述系統(tǒng)中斷時(shí)鐘所攔載的中斷向量;(c)程序化上述系統(tǒng)中斷時(shí)鐘,以加快上述系統(tǒng)中斷時(shí)鐘發(fā)出中斷的頻率;其中,每一次系統(tǒng)中斷時(shí)鐘發(fā)出中斷,即檢測(cè)上述DMA請(qǐng)求信號(hào)(DREQ)是否存在;
(d)呼叫上述電腦系統(tǒng)中的軟盤服務(wù)例行程序,而對(duì)上述軟盤進(jìn)行數(shù)據(jù)存?。?e)分別量測(cè)上述數(shù)據(jù)請(qǐng)求信號(hào)(DREQ),在每一次由送出到移除的時(shí)間間隔,并記錄其最大間隔值;(f)上述最大間隔值若大于一特定值,則會(huì)促使上述電腦系統(tǒng)發(fā)出一錯(cuò)誤信號(hào);(g)重新程序化上述系統(tǒng)中斷時(shí)鐘,使上述系統(tǒng)中斷時(shí)鐘所發(fā)出中斷的頻率恢復(fù)正常。
以下將配合圖3和圖4對(duì)本發(fā)明作詳細(xì)的敘述。
一般而言INTEL及其相兼容結(jié)構(gòu)的CPU至少可以產(chǎn)生256個(gè)中斷(interrupt),在電腦系統(tǒng)上這些中斷各有其用途。以下,就與本發(fā)明有關(guān)的中斷進(jìn)行簡(jiǎn)單的說(shuō)明。
INT 13h是為軟盤I/O服務(wù)例行程序。
INT 8屬于硬盤中斷,主要由系統(tǒng)時(shí)鐘(system clock)、或系統(tǒng)中斷時(shí)鐘,以每秒18.2次的頻率向CPU發(fā)出INT 8h中斷,也即每54.9ms發(fā)出一次INT 8h的中斷。在INT 8h的中斷例行程序(interrupt routine)內(nèi),設(shè)計(jì)者可自行定義、或鉤掛(hook)所需要的內(nèi)置服務(wù)例行程序(interposeservice routine),以便在INT 8h中斷產(chǎn)生時(shí)(也即,系統(tǒng)時(shí)鐘攔載到INT8h中斷,即可以進(jìn)行內(nèi)置服務(wù)例行程序所定義的動(dòng)作。
如上述步驟(b)所述,在此實(shí)施例中,本發(fā)明直接攔載INT 8h中斷,是因速度上的要求的考濾。上述內(nèi)置程序如圖4a所示的流程,將于下文中詳細(xì)說(shuō)明。
圖3為依據(jù)本發(fā)明的軟盤驅(qū)動(dòng)控制方法的實(shí)施例流程圖。
參照?qǐng)D3,當(dāng)電腦系統(tǒng)10要進(jìn)行軟盤數(shù)據(jù)存取時(shí),即通過(guò)作業(yè)系統(tǒng)呼叫啟動(dòng)磁盤驅(qū)動(dòng)程序(步驟300),以進(jìn)行數(shù)據(jù)存取。
在此實(shí)施例中,磁盤驅(qū)動(dòng)程序是在傳統(tǒng)的磁盤服務(wù)程序(步驟303)中,加上若干增補(bǔ)的程序步驟,以完成本實(shí)施例所需的控制流程。
在磁盤驅(qū)動(dòng)程序啟動(dòng)后。首先,即判定電腦系統(tǒng)10是否對(duì)軟盤17進(jìn)行數(shù)據(jù)存取(步驟301)。
經(jīng)步驟301判定電腦系統(tǒng)10是對(duì)軟盤17進(jìn)行存取時(shí),(步驟302)則通過(guò)中斷請(qǐng)求IRQ 0,對(duì)電腦系統(tǒng)請(qǐng)求INT 8h的中斷服務(wù),重新定義系統(tǒng)中斷時(shí)鐘(或稱系統(tǒng)時(shí)鐘)22,將由每經(jīng)過(guò)54.9ms發(fā)出中斷一次,加速至每10μs發(fā)出中斷一次;并設(shè)定加速標(biāo)記Speed Up為“TRUE”;以及,設(shè)定軟盤讀/寫標(biāo)記FDD R/W為“TRUE”。
接著,進(jìn)行傳統(tǒng)的磁盤服務(wù)程序(步驟303),一般其核心模式主要是呼叫INT 13h軟盤I/O服務(wù)例行程序中的對(duì)應(yīng)功能。在此期間,若有請(qǐng)求DMA模式傳輸,則DMA通道2的標(biāo)記DMA2START也會(huì)設(shè)定為“TRUE”(一般電腦系統(tǒng)進(jìn)行軟盤存取時(shí),是采用DMA模式中DMA通道2的功能)。
在步驟303運(yùn)行期間,系統(tǒng)中斷時(shí)鐘22仍維持每10μs發(fā)出中斷一次。每中斷一次即對(duì)上述DMA請(qǐng)求信號(hào)(DREQ)的存在與否進(jìn)行檢測(cè);在此實(shí)施例中,是檢測(cè)標(biāo)記DREQ2的邏輯值是否為“1”,借此以便量測(cè)DMA請(qǐng)求信號(hào)(DREQ)每一次由送出(DREQ2=1)到移除(DREQ2=0)的時(shí)間間隔,并記錄DMA請(qǐng)求信號(hào)(DREQ)由送出至移除的最大間隔值Tdelay_max。。
數(shù)據(jù)傳輸完成后(步驟303結(jié)束),系統(tǒng)中斷時(shí)鐘22也會(huì)恢復(fù)正常的中斷頻率。接著,步驟304會(huì)判定步驟303的磁盤服務(wù)程序是否是進(jìn)行軟盤的存取(也即,判定軟盤讀/寫標(biāo)記FDD_R/W是否為“TRUE”)。若為“TRUE”,步驟305則進(jìn)行重置清除上述軟盤讀/寫標(biāo)記FDD_R/W使成為“FALSE”;對(duì)系統(tǒng)時(shí)間進(jìn)行相對(duì)應(yīng)的補(bǔ)償。
接著,檢測(cè)軟盤控制器20或DMA控制器18是否將有FIFO緩沖裝置予以啟動(dòng)(步驟306)。若FIFO緩沖裝置未啟動(dòng),接著步驟307判定上述最大間隔值Tdelay_max大于一第一容許值(例如為20μs),則會(huì)促使上述電腦系統(tǒng)10發(fā)出一錯(cuò)誤信號(hào)(步驟309)。若FIFO緩沖裝置已啟動(dòng),接著步驟308判定上述最大間隔值Tdelay_max大于一第二容許值(例如為250μs),則會(huì)促使上述電腦系統(tǒng)10發(fā)出一錯(cuò)誤信號(hào)(步驟309)。
請(qǐng)參照?qǐng)D3,電腦系統(tǒng)在呼叫磁盤驅(qū)動(dòng)程序(步驟300)之后,若判定電腦系統(tǒng)10并非對(duì)軟盤17進(jìn)行數(shù)據(jù)存取(而是對(duì)硬盤或其他儲(chǔ)存裝置進(jìn)行存取),則電腦系統(tǒng)10直接執(zhí)行傳統(tǒng)的磁盤服務(wù)程序(步驟303),而完成數(shù)據(jù)的傳輸。
以下參照?qǐng)D4A、4B,來(lái)詳細(xì)說(shuō)明量測(cè)上述最大間隔值Tdelay_max的流程步驟。
每一次電腦系統(tǒng)10通過(guò)IRQ 0請(qǐng)求INT 8h的中斷服務(wù)后(步驟400),即進(jìn)行預(yù)先定義的內(nèi)置服務(wù)例行程序(在此,簡(jiǎn)稱為內(nèi)置程序)中。首先,內(nèi)置程序當(dāng)判定SpeedUp標(biāo)記是設(shè)定為“TRUE”(步驟401)時(shí),則可確認(rèn)電腦系統(tǒng)10對(duì)軟盤17進(jìn)行存取。否則,則執(zhí)行傳統(tǒng)的INT8h中斷程序(步驟406)。
接著,若判定DMA通道2的標(biāo)記DMA2START并未設(shè)定為“TRUE”(步驟402),即再進(jìn)行DMA請(qǐng)求信號(hào)(DREQ)的標(biāo)記DREQ2邏輯值是否為“1”的判定(步驟403)。若DREQ2邏輯值不為“1”,表示電腦系統(tǒng)10尚未開(kāi)始以DMA模式對(duì)軟盤17進(jìn)行數(shù)據(jù)的存取。若判定DREQ2邏輯值為“1”(步驟403)后,步驟404進(jìn)行將DMA2START設(shè)定為“TRUE”;以及,設(shè)定一最大間隔值TDMAX為0。
接著,進(jìn)行一量測(cè)程序(步驟405),用以分別量測(cè)上述DMA請(qǐng)求信號(hào)(DREQ),在每一次以DMA模式存取字節(jié)數(shù)據(jù)前,由送出到移除期間所對(duì)應(yīng)的各個(gè)間隔計(jì)數(shù)值TCNT(或稱為取樣點(diǎn))。同時(shí),在結(jié)束DMA模式數(shù)據(jù)傳輸時(shí),得出所得的最大間隔時(shí)間值Tdelay_max;并將DMA2START及SpeedUp標(biāo)記均予以重置而設(shè)定為“FALSE”;以及,恢復(fù)系統(tǒng)中斷時(shí)鐘IRQ 0的中斷請(qǐng)求頻率。
參照?qǐng)D4B,在上述量測(cè)程序(步驟405)中,先判定DMA請(qǐng)求信號(hào)(DREQ)的標(biāo)記DREQ2邏輯值是否為“1”(步驟405-a)。若DREQ2=1,則將上述初始值為0的間隔計(jì)數(shù)值TCNT加上1(步驟405-b),再返回作業(yè)系統(tǒng)。之后,每隔10μs就重復(fù)進(jìn)行步驟405-a的判定;若是DMA請(qǐng)求信號(hào)(DREQ)仍處于發(fā)出的狀態(tài)(也即,DREQ2=1),則持續(xù)在上述間隔計(jì)數(shù)值TCNT上累加1(步驟405-b)。
當(dāng)DMA確認(rèn)信號(hào)(DACK)發(fā)出之后,如上所述,DMA請(qǐng)求信號(hào)(DREQ)將會(huì)自動(dòng)被移除(也即,DREQ2=0)。經(jīng)過(guò)步驟405-a判別后,則繼續(xù)判定所累加的上述間隔計(jì)數(shù)值TCNT是否大于上述最大間隔值TDMAX(步驟405-c)。若TCNT大于TDMAX,則以TCNT之值取代TDMAX之值,也即令TDMAX=TCNT(步驟405-d);否則,保持TDMAX之值不變,再將TCNT之值歸零(步驟405-e),用以計(jì)測(cè)以DMA模式存取其他筆字節(jié)數(shù)據(jù)之前,DREQ2保持在“1”的對(duì)應(yīng)時(shí)間。
在完成步驟405-e后所得的最大間隔值TDMAX,是對(duì)應(yīng)于某一時(shí)期內(nèi)DMA請(qǐng)求信號(hào)(DREQ)由發(fā)出至移除的間隔時(shí)間Tdelay_max(=TDMAX×10μs)。
接著,檢測(cè)是否已完成DMA模式的傳輸(步驟405-f);若DMA模式的傳輸仍未完成,則重覆上述步驟405,并重新繼續(xù)進(jìn)行累加TCNT值的動(dòng)作,以便在最后完成DMA模式傳輸時(shí),能得出最大間隔值TDMAX。
當(dāng)完成DMA模式的傳輸后,繼續(xù)步驟405-g,以將DMA2START及SpeedUp標(biāo)記均予以重置而設(shè)定為“FALSE”;以及,恢復(fù)系統(tǒng)中斷時(shí)鐘正常IRQ 0的中斷請(qǐng)求頻率。
由上述圖3、圖4A、圖4B所示的流程步驟可知,通過(guò)所得到的最大間隔值TDMAX,可得到在所有各筆字節(jié)數(shù)據(jù)以DMA模式寫入或讀出軟盤之前,DMA請(qǐng)求信號(hào)(DREQ)由發(fā)出至移除的最大間隔時(shí)間Tdelay_max(也即寫入或讀出延遲);借由判定上述間隔時(shí)間Tdelay_max是否大于特定的值(如20μs、或使用FIFO時(shí)的150μs),即可以判定在數(shù)據(jù)傳輸時(shí)是否有漏失及/或損毀的可能性發(fā)生,并通知電腦系作特定的回應(yīng)處理。
綜上所述,應(yīng)用本發(fā)明的方法,有如下的優(yōu)點(diǎn)可檢測(cè)出所有可能發(fā)出錯(cuò)誤的數(shù)據(jù)。
由于考慮FIFO啟動(dòng)的情形,故可以提供傳輸效率。
對(duì)于主機(jī)板或系統(tǒng)廠商而言,應(yīng)用本發(fā)明所衍生的測(cè)試方法,可以檢測(cè)出所使用的軟盤控制器是否有問(wèn)題,并發(fā)現(xiàn)問(wèn)題之所在,以確保未來(lái)出廠的主機(jī)板不會(huì)使客戶蒙受數(shù)據(jù)漏失及/或損毀的潛在威協(xié)。
對(duì)有問(wèn)題且已經(jīng)出貨的軟盤控制器,只要應(yīng)用本發(fā)明公開(kāi)的方法,修改驅(qū)動(dòng)程序或BIOS,再提供給客戶即可以避免數(shù)據(jù)漏失及/或損毀的威協(xié)。
雖然本發(fā)明已以較佳實(shí)施例公開(kāi)如上,但其并非用以限定本發(fā)明,任何本專業(yè)領(lǐng)域內(nèi)的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可做適當(dāng)?shù)母暮蜐?rùn)飾,因此本發(fā)明的保護(hù)范圍應(yīng)當(dāng)以權(quán)利要求所限定的內(nèi)容為準(zhǔn)。
權(quán)利要求
1.一種預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法,適用于一電腦系統(tǒng);上述電腦系統(tǒng)至少包括中央處理器;系統(tǒng)中斷時(shí)鐘;軟盤;軟盤控制器,用以控制對(duì)上述軟盤的數(shù)據(jù)傳輸;周邊裝置,用以配合上述軟盤控制器,以提供一DMA請(qǐng)求信號(hào)(DREQ)及一DMA確認(rèn)信號(hào)(DACK);其中,當(dāng)上述電腦系統(tǒng)請(qǐng)求進(jìn)行數(shù)據(jù)傳輸時(shí),上述DMA請(qǐng)求信號(hào)(DREQ)將會(huì)被送出;當(dāng)上述數(shù)據(jù)傳輸可進(jìn)行時(shí),上述DMA確認(rèn)信號(hào)(DACK)會(huì)被送出,并使上述DMA請(qǐng)求信號(hào)(DREQ)被移除;上述方法,包括如下步驟判定上述電腦系統(tǒng)是否對(duì)上述軟盤進(jìn)行數(shù)據(jù)存取;量測(cè)上述DMA請(qǐng)求信號(hào)(DREQ),從送出到移除的時(shí)間間隔;以及上述時(shí)間間隔若大于一特定值,則促使上述電腦系統(tǒng)發(fā)出一錯(cuò)誤信號(hào)。
2.如權(quán)利要求1所述的方法,還包括如下步驟預(yù)先鉤掛一內(nèi)置程序,給上述系統(tǒng)中斷時(shí)鐘所攔截的中斷向量;加快上述系統(tǒng)中斷時(shí)鐘發(fā)出中斷攔截的頻率;其中,每發(fā)出一次發(fā)出中斷攔截,即通過(guò)上述內(nèi)置程序進(jìn)行上述時(shí)間間隔的量測(cè);及待軟盤的數(shù)據(jù)存取完成后,使上述系統(tǒng)中斷時(shí)鐘回復(fù)正常;并移除所鉤掛的上述中斷向量。
3.一種預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法,適用于一電腦系統(tǒng);上述電腦系統(tǒng)至少包括中央處理器;系統(tǒng)中斷時(shí)鐘;軟盤;軟盤控制器,用以控制對(duì)上述軟盤的數(shù)據(jù)傳輸;周邊裝置,用以配合上述軟盤控制器,提供一DMA請(qǐng)求信號(hào)(DREQ)、及一DMA確認(rèn)信號(hào)(DACK);其中,當(dāng)請(qǐng)求進(jìn)行數(shù)據(jù)傳輸時(shí),上述DMA請(qǐng)求信號(hào)(DREQ)將會(huì)被送出;在上述數(shù)據(jù)傳輸可進(jìn)行時(shí),上述DMA確認(rèn)信號(hào)(DACK)會(huì)被送出,并使上述DMA請(qǐng)求信號(hào)(DREQ)被移除;上述方法,包括如下步驟判定上述電腦系統(tǒng)是否對(duì)上述軟盤進(jìn)行數(shù)據(jù)存?。怀绦蚧鲜鱿到y(tǒng)中斷時(shí)鐘,以加快上述系統(tǒng)中斷時(shí)鐘發(fā)出中斷的頻率;其中,每一次上述系統(tǒng)中斷時(shí)鐘發(fā)出中斷攔截后,即檢測(cè)上述DMA請(qǐng)求信號(hào)(DREQ)是否存在;呼叫上述電腦系統(tǒng)中的軟盤服務(wù)例行程序,而對(duì)上述軟盤進(jìn)行數(shù)據(jù)存??;分別量測(cè)上述數(shù)據(jù)請(qǐng)求信號(hào)(DREQ),在每一次由送出到移除的時(shí)間間隔,并記錄其最大間隔值;上述最大間隔值若大于一特定值,則促使上述電腦系統(tǒng)發(fā)出一錯(cuò)誤信號(hào);以及重新程序化上述系統(tǒng)中斷時(shí)鐘,使上述系統(tǒng)中斷時(shí)鐘所發(fā)出中斷的頻率恢復(fù)正常。
全文摘要
一種預(yù)防軟盤控制器造成數(shù)據(jù)毀損的方法,通過(guò)判定在所有各筆字節(jié)數(shù)據(jù)以DMA模式寫入或讀出軟盤之前,DMA請(qǐng)求信號(hào)(DREQ)由發(fā)出至移除的最大間隔時(shí)間是否大于特定值的方式,以斷定在數(shù)據(jù)傳輸時(shí)是否有漏失及/或損毀的可能性發(fā)生,并通知電腦系統(tǒng)作特定的回應(yīng)處理,以減少因?yàn)檠舆t寫入軟盤所發(fā)生的數(shù)據(jù)漏失及/或數(shù)據(jù)損毀。
文檔編號(hào)G06F11/00GK1351344SQ00130099
公開(kāi)日2002年5月29日 申請(qǐng)日期2000年10月27日 優(yōu)先權(quán)日2000年10月27日
發(fā)明者楊金新 申請(qǐng)人:華碩電腦股份有限公司