專利名稱:具有檢查點恢復(fù)功能的i/o控制設(shè)備的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及適用于具有檢查點恢復(fù)功能的計算機系統(tǒng)的一種I/O控制設(shè)備。
近年來,計算機系統(tǒng)得到了很大的發(fā)展。隨著這種發(fā)展,對諸如應(yīng)付故障的可靠性的要求提高了。作為構(gòu)成容錯計算機系統(tǒng)的一種方法,有一種檢查點恢復(fù)方案。
根據(jù)用于實施檢查點恢復(fù)方案的一種方法,CPU的內(nèi)部狀態(tài),即寄存器和CPU的高速緩沖存儲器的內(nèi)容被定期保存在一個主存儲器中,以便在主存儲器上獲得一個檢查點。當(dāng)數(shù)據(jù)處理由于計算機系統(tǒng)中的故障而不能繼續(xù)時,主存儲器被恢復(fù)到最近檢查點的狀態(tài),且利用存儲在主存儲器中的CPU內(nèi)部狀態(tài)重新開始數(shù)據(jù)處理。
用于將主存儲器恢復(fù)到檢查點狀態(tài)的一種方法如下。在主存儲器的一種更新操作中,所要更新的地址和數(shù)據(jù)被存儲在一個存儲器狀態(tài)恢復(fù)單元55中。在計算機系統(tǒng)發(fā)生了故障時,把存儲在存儲器狀態(tài)恢復(fù)單元55中的以前的數(shù)據(jù)寫回到主存儲器。
雖然在該檢查點恢復(fù)方案中,在計算機系統(tǒng)發(fā)生故障時,主存儲器或CPU的內(nèi)部狀態(tài)能夠通過利用存儲器狀態(tài)恢復(fù)單元55而被恢復(fù)到最近檢查點的狀態(tài),但與該計算機系統(tǒng)相連的一個I/O裝置不能被方便地恢復(fù)到最近檢查點的狀態(tài)。
下面將結(jié)合
圖1和2來描述該問題。
如圖1所示,在此計算機系統(tǒng)中,一個CPU51請求一個盤控制器52存取一個盤53以進行I/O操作。圖2顯示了具有上述設(shè)置的計算機系統(tǒng)的I/O處理的時序圖。
如圖2所示,盤控制器52的寄存器被設(shè)定在時刻T0至T1(圖2中的(1))從盤53的預(yù)定位置讀取數(shù)據(jù),且盤控制器52在時刻T1(圖2中的(2))被啟動。以此方式,盤控制器52和盤53在時刻T1至T2執(zhí)行了一個讀取操作(圖2中的(3))。讀取的數(shù)據(jù)通過DMA傳送而被從盤控制器52傳送到主存儲器54中。
CPU51在時刻T2從盤控制器52接收一個完成中斷(圖2中的(4)),從而在時刻T2至T3進行至盤控制器52的完成中斷處理(圖2中的(5)和(6))。有關(guān)讀取操作的另一后處理在時刻T3至T4進行(圖2中的(7))。
在此情況下的第一個困難是在任意定時下獲得的檢查點不總是有效的。
例如,設(shè)在盤控制器52的寄存器的設(shè)定期間獲得了一個檢查點(時刻T0與時刻T1之間的設(shè)定順序)。
在此情況下,在計算機隨后發(fā)生故障時,設(shè)定順序的后面部分從最近檢查點重新進行,即只有盤控制器52的寄存器的一部分得到了重新設(shè)定。因此,盤控制器52并不總是象所希望的那樣運行。
考慮到盤控制器52的特性,不僅在上述的時刻T0至T1,而且在時刻T0至T3,即當(dāng)CPU51在諸如讀取/寫入操作的I/O操作的設(shè)定順序期間獲得了一個檢查點時,當(dāng)設(shè)順程序的后面部分在系統(tǒng)發(fā)生故障之后從該檢查點重新進行時,盤控制器52不總是如所希望地運行。
克服這種困難的一種方法是絕對不在I/O裝置的操作期間獲得檢查點。然而,在其中包含很多I/O裝置的計算機系統(tǒng)中,CPU幾乎總是執(zhí)行I/O操作的設(shè)定順序。因此,如果阻止在I/O裝置的設(shè)定順序期間獲得檢查點,就會嚴(yán)重地降低性能。
第二個困難如下。設(shè)在從盤控制器52至主存儲器54的DMA傳送期間系統(tǒng)中發(fā)生了故障。在此情況下,正在進行的DMA傳送必須在主存儲器54被恢復(fù)到最近檢查點狀態(tài)之前被停止。
在傳統(tǒng)的計算機系統(tǒng)中,為了停止正在進行的DMA傳送,需要對I/O裝置進行初始化(復(fù)位)。由于通過初始化I/O裝置而把I/O裝置置于初始狀態(tài),所以需要進行特殊處理來將I/O裝置恢復(fù)到最近檢查點狀態(tài)。
作為用于解決在上述檢查點恢復(fù)方案中的I/O處理的問題的方案,已知的有以下兩種方案。
第一個方案公布在美國專利第4740969“硬件故障恢復(fù)的方法和設(shè)備”中。在正常的數(shù)據(jù)處理中,I/O裝置的寄存器的讀取/寫入的數(shù)據(jù)和來自I/O裝置的中斷,都被記錄在一個運行記錄存儲器中。在計算機系統(tǒng)發(fā)生故障之后,當(dāng)從最近檢查點重新開始寄存器設(shè)定順序時,在故障發(fā)生之前為I/O裝置的寄存器進行的讀取/寫入操作被以如下方式重新進行。對于寫入操作,數(shù)據(jù)被放棄且不被寫入I/O裝置的寄存器。對于讀取操作,不從I/O裝置的寄存器讀取數(shù)據(jù),而是將運行記錄存儲器中的數(shù)據(jù)送回到CPU。對于來自I/O裝置的中斷,該中斷得到產(chǎn)生并以與前面的執(zhí)行相同的時序被送到CPU。
這種方案要求特殊的接口電路,而這種接口電路沒有被提供給通常的計算機系統(tǒng)。另外,難于將這種方案應(yīng)用于多處理器系統(tǒng)。
第二種方案被公布在1988年2月的IEEE“計算機”雜志的“Sequoia用于事務(wù)處理的容錯緊密耦合多處理器”中。在此方案中,計算機系統(tǒng)中的數(shù)據(jù)處理被分成可以通過只利用CPU和主存儲器進行的數(shù)據(jù)處理部分和處理I/O裝置的I/O處理部分。這些部分由不同的計算機執(zhí)行。
圖3顯示了一種計算機系統(tǒng)的示意性設(shè)置,計算機系統(tǒng)的數(shù)據(jù)處理被分成通過只存取一個主存儲器而進行的部分和包括對I/O裝置的存取的部分,且前者由其可靠性借助檢查點恢復(fù)方案而得到改善的計算機100執(zhí)行,而后者則由未采用檢查點恢復(fù)方案的計算機200來執(zhí)行。在這些部分之間的邏輯接口中,表示“在指定的盤的指定位置讀取指定量的數(shù)據(jù)”的一個請求被從計算機100送到計算機200。當(dāng)計算機200實際已經(jīng)讀取了數(shù)據(jù)時,表明操作是否正常完成的一個結(jié)束碼和從盤讀取的數(shù)據(jù)被從計算機200送回到計算機100。
為了改善計算機200的可靠性,計算機200的組成元件是雙份的。即,計算機200由計算機主體210a和210b以及I/O裝置220a和220b組成。在正常狀態(tài)下,請求在兩側(cè)同時得到處理,且執(zhí)行結(jié)果被相互比較以檢查執(zhí)行結(jié)果是否相同。如果在一側(cè)發(fā)生了故障,所請求的操作在另一側(cè)上繼續(xù)進行。
這種方案具有以下缺點。即,由于必須提供至少兩種計算機,計算機系統(tǒng)大且費用高。
由第二種方案可以得到以下想法。即,計算機100和計算機200可以通過采用虛擬計算機技術(shù)而由一個計算機實施。然而,這種想法的效果并不好,其原因如下。
在Sequoia中公布的方案是基于以下假定的。由于采用了獨立的計算機100和200,即使計算機100的數(shù)據(jù)處理由于計算機100中發(fā)生了故障而由一個檢查點重新開始,計算機200的I/O處理由不受該故障的影響。
然而,如果計算機100和計算機200通過利用虛擬計算機技術(shù)而由一個計算機實施,計算機100和計算機200將同時受到基本計算機系統(tǒng)中發(fā)生的故障的影響。
如上所述,檢查點恢復(fù)計算機系統(tǒng)需要對I/O處理部分的特殊處理。采用了在CPU和I/O裝置之間設(shè)置一個專用接口的方法,或在兩個獨立計算機上分別執(zhí)行計算部分和I/O處理部分的方法。因此,費用被大大地增加了。
本發(fā)明的一個目的,是提供一種I/O控制設(shè)備,它能夠控制在具有檢查點恢復(fù)功能的計算機上的I/O裝置,而不需要專用的接口電路或兩個獨立的計算機。
另一個目的,是提供在操作系統(tǒng)內(nèi)核與當(dāng)計算機系統(tǒng)在發(fā)生故障的情況下重新運行時恢復(fù)I/O裝置的狀態(tài)的一個已有的裝置驅(qū)動程序之間提供一個軟件層。
根據(jù)本發(fā)明,在包括一或多個CPU、一個主存儲器、以及一或多個I/O裝置的計算機系統(tǒng)中,CPU定期保存CPU的內(nèi)部狀態(tài)和主存儲器的內(nèi)容作為一個檢查點且當(dāng)計算機系統(tǒng)發(fā)生故障時最近檢查點的CPU的內(nèi)部狀態(tài)和主存儲器的內(nèi)容得到恢復(fù)以重新開始數(shù)據(jù)處理,在該計算機系統(tǒng)中的一個I/O控制設(shè)備包括I/O裝置狀態(tài)存儲裝置,用于存儲由CPU的I/O裝置狀態(tài)設(shè)定的運行記錄數(shù)據(jù);以及,I/O裝置狀態(tài)恢復(fù)裝置,用于通過首先初始化I/O裝置并隨后根據(jù)由I/O裝置狀態(tài)存儲裝置存儲的運行記錄數(shù)據(jù)而重新進行狀態(tài)設(shè)定,而將I/O裝置的狀態(tài)恢復(fù)到最近檢查點的狀態(tài)。
根據(jù)本發(fā)明,當(dāng)由CPU進行諸如操作模式設(shè)定的對I/O裝置的狀態(tài)設(shè)定時,狀態(tài)設(shè)定的運行記錄數(shù)據(jù)被存儲在例如一個主存儲器中。當(dāng)計算機系統(tǒng)發(fā)生故障時,借助一個初始化指令或一個復(fù)位信號確認(rèn)而使一個I/O裝置得到初始化,且隨后根據(jù)運行記錄數(shù)據(jù)對I/O裝置重新執(zhí)行狀態(tài)設(shè)定順序,從而使I/O裝置的狀態(tài)被恢復(fù)到最近檢查點的狀態(tài)。
經(jīng)常的情況是,一部分運行記錄數(shù)據(jù)因新的狀態(tài)設(shè)定而變成不必要的,因此該不必要的部分能夠被消除。例如,假定具有初始狀態(tài)“狀態(tài)A”的I/O裝置被設(shè)定到“狀態(tài)B”,接著被設(shè)定到“狀態(tài)C”,然后獲得了一個檢查點。在此情況下,在設(shè)定“狀態(tài)C”時,用于“狀態(tài)B”的運行記錄數(shù)據(jù)變成不必要,因而能夠被清除。一旦獲得了檢查點,除了“狀態(tài)C”設(shè)定之外的所有運行記錄數(shù)據(jù)都變?yōu)槎嘤嗟模杀磺宄?。因此,提供了清除運行記錄數(shù)據(jù)的多余部分的裝置,從而使運行記錄數(shù)據(jù)所需的區(qū)能夠被保存。另外,用于在I/O裝置初始化之后重新進行狀態(tài)設(shè)定順序所需的時間可被縮短。
對于自前一檢查點以來沒有進行新的狀態(tài)設(shè)定的I/O裝置,在發(fā)生故障時不需要初始化I/O裝置和重新執(zhí)行狀態(tài)設(shè)定順序。因此,設(shè)置了用于跳過這種I/O裝置的初始化和狀態(tài)設(shè)定順序的裝置?;謴?fù)所需的時間能夠得到進一步的縮短。
本發(fā)明進一步包括請求塊產(chǎn)生裝置,用于當(dāng)計算機系統(tǒng)中的應(yīng)用過程作出一個I/O請求時,在主存儲器中產(chǎn)生包含進行I/O請求所需信息的一個請求塊;I/O執(zhí)行過程,用于通過根據(jù)請求塊存取I/O裝置而執(zhí)行I/O操作;以及,I/O執(zhí)行過程初始化裝置,用于在從故障發(fā)生之后的最近檢查點重新開始時,初始化正在進行的I/O執(zhí)行過程并使被I/O執(zhí)行過程正在執(zhí)行的I/O操作從開始處重新被執(zhí)行。
根據(jù)本發(fā)明,當(dāng)一個應(yīng)用過程發(fā)出一個I/O請求時,包含I/O操作所需的信息的請求塊由I/O執(zhí)行過程產(chǎn)生和執(zhí)行。該應(yīng)用過程移至等侯狀態(tài)直到I/O操作結(jié)束。
假定在I/O操作期間計算機系統(tǒng)發(fā)生了故障。在計算機系統(tǒng)的狀態(tài)重新運行到最近檢查點的同時,I/O裝置狀態(tài)恢復(fù)裝置恢復(fù)I/O裝置的狀態(tài)。在從最近檢查點重新開始時,I/O執(zhí)行過程初始化裝置初始化負(fù)責(zé)I/O操作的I/O執(zhí)行過程,并使進行到一半的I/O操作從開始處重新進行。在重新開始階段,一個I/O執(zhí)行過程根據(jù)請求塊而簡單地進行I/O操作。
I/O操作由一個I/O執(zhí)行過程進行而不由應(yīng)用過程本身進行這一事實使得I/O操作可從開始處重新進行。如果應(yīng)用過程以傳統(tǒng)方式進行I/O操作,將難于或不可能從開始處重新進行。應(yīng)該注意的是,在最近檢查點,I/O操作正在進行之中。
在存儲在主存儲器中的請求塊中,在最近檢查點之前產(chǎn)生的請求塊應(yīng)該由I/O執(zhí)行過程進行處理,且在最近檢查點之后產(chǎn)生的請求塊的執(zhí)行應(yīng)該被延期至下一個檢查點。
一般地,如果發(fā)生了重新運行,由于實時時鐘和異步事件(即外部中斷),從最近檢查點的第二次數(shù)據(jù)處理不總是與第一次數(shù)據(jù)處理相同。因此,在故障發(fā)生之前由數(shù)據(jù)處理發(fā)出的I/O請求可能不被作出,或在故障恢復(fù)之后由第二次數(shù)據(jù)處理以不同的方式作出。因此,需要將最近檢查點之后產(chǎn)生的請求塊的執(zhí)行延期至獲得新的檢查點為此。
當(dāng)已經(jīng)獲得了檢查點時,很多請求塊都變成可執(zhí)行的。因此,一旦獲得檢查點,就將很多CPU分配給I/O執(zhí)行過程以使I/O操作以小的延遲進行是有效的。
使已經(jīng)執(zhí)行了要求I/O操作的應(yīng)用過程的CPU也執(zhí)行負(fù)責(zé)I/O操作的I/O執(zhí)行過程將提高高速緩存命中率。
根據(jù)所要處理的請求塊的數(shù)目而適當(dāng)?shù)卮_定分配給I/O執(zhí)行過程的CPU的數(shù)目將改善系統(tǒng)的性能。
假定當(dāng)I/O執(zhí)行過程正在執(zhí)行把字符串輸出到一個打印單元的裝置驅(qū)動例行程序時,計算機系統(tǒng)發(fā)生了故障。則只有一部分字符可以被打印在紙上并不能被擦除。在此情況下,作出I/O請求的應(yīng)用過程應(yīng)該接收到一個錯誤回答,從而使應(yīng)用過程能夠在應(yīng)用級別上進行錯誤恢復(fù),如打印機堵塞錯誤。
假定I/O執(zhí)行過程完成了將字符串輸出到打印機單元的裝置驅(qū)動例行程序的執(zhí)行,然后計算機系統(tǒng)發(fā)生了故障。在此情況下,整個字符串都已經(jīng)被打印出來了。如果在故障恢復(fù)之后重新執(zhí)行請求塊,將導(dǎo)致重復(fù)打印。因此,在I/O請求是一個輸出請求并在故障發(fā)生之前已經(jīng)完成的情況下,所希望的是即使計算機系統(tǒng)發(fā)生了故障,發(fā)出I/O請求的應(yīng)用過程也接收一個成功的I/O完成回答而不重新執(zhí)行I/O請求。
本發(fā)明的其它目的和優(yōu)點將在以下描述中給出,且其中的一些通過該描述而變得顯而易見,或者可以通過實施本發(fā)明而學(xué)習(xí)到。本發(fā)明的目的和優(yōu)點可以借助在所附權(quán)利要求書中具體指出的手段和組合而實現(xiàn)和獲得。
附圖被用來說明本發(fā)明的原理,其中圖1顯示了采用傳統(tǒng)檢查點恢復(fù)方案的計算機系統(tǒng)的設(shè)置;圖2是圖1所示的計算機系統(tǒng)的I/O處理的時序圖;圖3顯示了一種設(shè)置,其中由一個計算機系統(tǒng)采用傳統(tǒng)的檢查點恢復(fù)方案來實施I/O控制;圖4是示意圖,顯示了根據(jù)本發(fā)明的第一實施例的計算機系統(tǒng)的設(shè)置;圖5是第一實施例中的配置例行程序的流程圖;圖6是第一實施例的檢查點獲得的流程圖;圖7是第一實施例中的故障恢復(fù)的流程圖;圖8是第一實施例的配置例行程序的流程圖;圖9是第一實施例的檢查點獲得的流程圖;圖10是第一實施例中的故障恢復(fù)的流程圖;圖11是在本發(fā)明的第二實施例中發(fā)出I/O請求的應(yīng)用過程的流程圖;圖12是第二實施例中的I/O執(zhí)行過程的流程圖;圖13A至13D顯示了如何借助第二實施例的應(yīng)用過程和I/O執(zhí)行過程來進行I/O操作;圖14是第二實施例的檢查點獲得的流程圖;圖15是第二實施例中的故障恢復(fù)的流程圖;圖16是第二實施例中發(fā)出I/O請求的應(yīng)用過程的流程圖;圖17是第二實施例中的I/O執(zhí)行過程的流程圖;圖18是第二實施例中的檢查點獲得的流程圖;圖19A至19E顯示了在第二實施例中如何借助應(yīng)用過程和I/O執(zhí)行過程來延遲執(zhí)行I/O操作;圖20是第二實施例中的故障恢復(fù)的流程圖;圖21是在本發(fā)明的第三實施例中發(fā)出I/O請求的應(yīng)用過程的流程圖;圖22是第三實施例的I/O執(zhí)行過程的流程圖;圖23是第三實施例中檢查點獲得的流程圖;圖24是第三實施例中的故障恢復(fù)的流程圖;圖25是第三實施例中發(fā)出I/O請求的應(yīng)用過程的流程圖26是第三實施例中的I/O執(zhí)行過程的流程圖。
下面結(jié)合附圖描述本發(fā)明的實施例。
(第一實施例)以下結(jié)合圖4描述本發(fā)明的第一實施例。圖4是示意圖,顯示了根據(jù)第一實施例的計算機系統(tǒng)。
如圖4中所示,本實施例的計算機系統(tǒng)包括CPU1a和1b、存儲器狀態(tài)恢復(fù)單元2、主存儲器3以及諸如打印機和RS232C控制器的I/O裝置4a和4b。
當(dāng)主存儲器3的內(nèi)容受到CPU1a或1b的更新時,存儲器狀態(tài)恢復(fù)單元2保持以前的映象以恢復(fù)主存儲器3的內(nèi)容。存儲器狀態(tài)恢復(fù)單元2的細(xì)節(jié),在Kubiak等人在FTCS,1982上的文章“PENELOPEARECOVERY MECHANISM FOR TRANSIENT HARDWAREFAILURES AND SOFTWARE ERRORS”中得到了描述。包括一個堆棧區(qū)和數(shù)據(jù)區(qū)的應(yīng)用過程的上下文,作為上下文信息31被存儲在主存儲器3中。這里,應(yīng)用過程意味著傳統(tǒng)的計算機系統(tǒng)的過程。
當(dāng)系統(tǒng)被初始化或應(yīng)用過程請求時,操作系統(tǒng)33,更具體地說是打印裝置驅(qū)動程序和RS232C裝置驅(qū)動程序,設(shè)定操作模式,諸如波特率、停止位和奇偶校驗等等。所設(shè)定的操作模式作為運行記錄數(shù)據(jù)被存儲在狀態(tài)設(shè)定存儲區(qū)34中。
例如,在典型的UNIX操作系統(tǒng)中,對諸如RS232C控制器的I/O裝置的狀態(tài)設(shè)定順序由被稱為xxconfig的裝置驅(qū)動例行程序執(zhí)行,該裝置驅(qū)動例行程序的接口對于所有裝置驅(qū)動程序都是共同的。因此,配置例行程序的參數(shù)最好在配置例行程序輸入時被存儲在主存儲器3的狀態(tài)設(shè)定存儲區(qū)34中,且配置例行程序的參數(shù)能夠不依賴于I/O裝置的類型而以相同的方式得到記錄。
圖5顯示了各個I/O裝置的配置例行程序的流程圖。
(1)將配置例行程序的參數(shù)存儲在主存儲器中,作為狀態(tài)設(shè)定值(步驟A1)。
(2)設(shè)定I/O裝置的態(tài)(步驟S2)。
圖6顯示了檢查點獲得的流程圖。
(1)將CPU的初始狀態(tài)即寄存器的內(nèi)容和高速緩沖存儲器數(shù)據(jù)保存在主存儲器中(步驟B1)。
(2)清除保持在主存儲器恢復(fù)單元中的數(shù)據(jù)。
圖7顯示了在發(fā)生故障時當(dāng)從最近檢查點重新執(zhí)行設(shè)定順序時的流程圖。
(1)借助一個復(fù)位指令或復(fù)位信號確認(rèn)來初始化I/O裝置。
(2)利用主存儲器恢復(fù)單元將主存儲器的狀態(tài)恢復(fù)到最近檢查點狀態(tài)(步驟C2)。其結(jié)果是I/O裝置的狀態(tài)設(shè)定的運行記錄被恢復(fù)到最近檢查點狀態(tài)。
(3)利用存儲在主存儲器中的配置參數(shù)重新執(zhí)行配置例行程序(步驟C3)。這種重新執(zhí)行是從最老至最新地進行的。其結(jié)果是I/O裝置的狀態(tài)被恢復(fù)到檢查點的狀態(tài)。
(4)重新開始曾經(jīng)在檢查點被執(zhí)行的數(shù)據(jù)處理(步驟C4)。
因此,在其中各個I/O裝置的狀態(tài)被設(shè)定到檢查點的狀態(tài)的狀態(tài)下,數(shù)據(jù)處理被重新開始。這意味著在單個的計算機中實現(xiàn)了檢查點恢復(fù)機制和I/O裝置恢復(fù)機制。
對于RS232C控制器,當(dāng)新設(shè)定諸如波特率、停止位以及奇偶校驗的操作模式時,老的設(shè)定值變得多余。因此,只需要在主存儲器3的狀態(tài)設(shè)定存儲區(qū)34中保持RS232C控制器4b的操作模式的最新值(放棄不必要的運行記錄數(shù)據(jù))。這樣,縮短了故障恢復(fù)時間。
在主存儲器3中有效地設(shè)置了一個狀態(tài)保持區(qū)36,以管理I/O裝置4a和4b的狀態(tài)設(shè)定標(biāo)記。該狀態(tài)設(shè)定標(biāo)記是按照如下方式得到管理的。該狀態(tài)設(shè)定標(biāo)記ON表示自最近檢查點以來I/O裝置的某些狀態(tài)設(shè)定順序已被執(zhí)行或正在被執(zhí)行,而狀態(tài)設(shè)定標(biāo)記OFF表示自最近檢查點以來沒有對I/O裝置進行狀態(tài)設(shè)定。
圖8顯示了在采用上述狀態(tài)設(shè)定標(biāo)記的情況下配置例行程序的流程圖。
(1)將配置例行程序的參數(shù)存儲在主存儲器中(步驟D1)。使I/O裝置的狀態(tài)設(shè)定標(biāo)記處于ON。
(2)設(shè)定I/O裝置的狀態(tài)(步驟D2)。
圖9顯示了在此情況下的檢查點獲得的流程圖。
(1)將CPU的初始狀態(tài)保存在主存儲器中(步驟E1)。
(2)將各個I/O裝置的狀態(tài)設(shè)定標(biāo)記置于OFF。
(3)清除保持在存儲器狀態(tài)恢復(fù)單元中的數(shù)據(jù)(步驟E3)。
圖10顯示了在此情況下的故障恢復(fù)的流程圖。
(1)如果某個I/O裝置的狀態(tài)設(shè)定標(biāo)記處于ON,就初始化該I/O裝置,因為這意味著從最近檢查點以來已經(jīng)設(shè)定了新的狀態(tài)(步驟F1)。相反地,狀態(tài)設(shè)定標(biāo)記為OFF的I/O裝置不需要被初始化。
(2)利用存儲器狀態(tài)恢復(fù)單元來將主存儲器的狀態(tài)恢復(fù)到最近檢查點狀態(tài)(步驟F2)。其結(jié)果是I/O裝置的狀態(tài)設(shè)定的運行記錄被恢復(fù)到最近檢查點的狀態(tài)。
(3)利用存儲在主存儲器中的配置參數(shù)只對于已經(jīng)在步驟F1得到初始化的I/O裝置重新執(zhí)行配置例行程序(步驟F3)。這種重新執(zhí)行是從最老至最新地執(zhí)行的。其結(jié)果是I/O裝置的狀態(tài)被恢復(fù)到最近檢查點狀態(tài)。
(4)重新開始曾經(jīng)在最近檢查點被執(zhí)行的數(shù)據(jù)處理(步驟F4)。
以此方式,借助恢復(fù)設(shè)定標(biāo)記OFF,故障恢復(fù)能夠跳過對I/O裝置的初始化,這使得故障恢復(fù)進行得更快。
(第二實施例)假定根據(jù)該實施例的計算機系統(tǒng)除了在第一實施例中描述的計算機系統(tǒng)的設(shè)置之外還包括具有請求塊存儲區(qū)35和I/O執(zhí)行過程的設(shè)置(圖4)。
在此實施例中,當(dāng)應(yīng)用過程發(fā)出一個系統(tǒng)調(diào)用來請求一個I/O裝置的I/O操作時,操作系統(tǒng)不是調(diào)用調(diào)用者處理的上下文中的裝置驅(qū)動程序,而是調(diào)用一個請求塊產(chǎn)生例行程序。該請求塊產(chǎn)生程序產(chǎn)生具有裝置驅(qū)動例行程序的入口地址和參數(shù)的請求塊。這里,應(yīng)用(調(diào)用者)處理進入等侯狀態(tài)。請求塊被簡單地保持在主存儲器中直到獲得新的檢查點為止。因此,如果計算機系統(tǒng)中有大量的應(yīng)用過程,保持在主存儲器中的請求塊的數(shù)目隨著時間而增大。
在系統(tǒng)中有一定數(shù)目的I/O執(zhí)行過程。一個I/O執(zhí)行過程是根據(jù)請求塊執(zhí)行裝置驅(qū)動例行程序的專用處理。
當(dāng)已經(jīng)獲得了新的檢查點時,請求塊就做好了被處理的準(zhǔn)備。帶有初始狀態(tài)的I/O執(zhí)行過程被分配給請求塊之一。該I/O執(zhí)行過程執(zhí)行具有適當(dāng)參數(shù)的裝置驅(qū)動例行程序-該參數(shù)和程序都是由該請求塊指定的。因此,同時正在被處理的I/O操作的數(shù)目取決于I/O執(zhí)行過程的數(shù)目。當(dāng)I/O執(zhí)行過程在指定的裝置驅(qū)動例行程序中啟動了I/O裝置時,它就進入等候狀態(tài)。當(dāng)I/O裝置送回一個結(jié)束中斷時,裝置驅(qū)動程序的中斷處理例行程序就被調(diào)用且該結(jié)果被反映在I/O執(zhí)行過程上下文內(nèi)。然后,I/O執(zhí)行過程準(zhǔn)備就緒。在I/O操作結(jié)束時,I/O執(zhí)行過程將結(jié)果經(jīng)過請求塊報告給應(yīng)用過程。
如果在從I/O裝置至主存儲器的DMA傳送期間計算機系統(tǒng)發(fā)生了故障,就需要在主存儲器被恢復(fù)之前通過初始化I/O裝置來停止DMA傳送。為此,為具有DMA能力的每一個I/O單元都采用了一個正在操作標(biāo)記,以確定各個I/O裝置是否必須被初始化。只有當(dāng)相應(yīng)的I/O裝置進行DMA傳送時,正在操作標(biāo)記才被控制為ON。
圖11顯示了由本實施例中的應(yīng)用過程執(zhí)行的I/O請求流程圖。
(1)將與I/O操作有關(guān)的參數(shù)存儲在主存儲器中作為請求塊(步驟G1)。
(2)轉(zhuǎn)換到等侯狀態(tài)直到請求塊中描述的I/O操作完成為止(步驟G2)。
(3)當(dāng)應(yīng)用過程恢復(fù)其執(zhí)行時,在與I/O請求有關(guān)的應(yīng)用過程側(cè)參照請求塊的結(jié)果碼字段執(zhí)行完成步驟,并隨后執(zhí)行后續(xù)步驟(步驟G3)。
圖12顯示了I/O執(zhí)行過程的流程圖,這里,假定同時執(zhí)行多個I/O執(zhí)行過程。
(1)等候一個可執(zhí)行的請求塊(初始狀態(tài),步驟H1)。
(2)設(shè)定I/O裝置的寄存器并根據(jù)請求塊將正在操作標(biāo)記置于ON,從而啟動I/O裝置(步驟H2)。
(3)在接收到來自I/O裝置的完成中斷時,將正在操作標(biāo)記置于OFF、執(zhí)行I/O請求的完成步驟、將結(jié)果碼寫入請求塊、并使已經(jīng)處于等候狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟H3)。
圖13A至13D顯示了由兩個應(yīng)用過程和兩個I/O執(zhí)行過程執(zhí)行的I/O操作的示范性順序。
當(dāng)應(yīng)用過程發(fā)出一個I/O請求時,相應(yīng)的請求塊得到產(chǎn)生并被存儲在存儲器中(圖13A和13B)。在產(chǎn)生請求塊之后,在I/O執(zhí)行過程上下文之下執(zhí)行一個I/O執(zhí)行過程(寄存器設(shè)定、啟動以及I/O裝置的完成中斷處理)(圖13C和13D)。
圖14顯示了本實施例中的檢查點獲得的流程圖。
(1)將CPU的內(nèi)部狀態(tài)保持在主存儲器中(步驟I1)。
(2)將各個I/O裝置的狀態(tài)設(shè)定標(biāo)記置于OFF(步驟I2)。
(3)清除保持在存儲器狀態(tài)恢復(fù)單元中的數(shù)據(jù)(步驟I3)。
圖15顯示了在本實施例中當(dāng)發(fā)生故障時的故障恢復(fù)的流程圖。
(1)如果某一I/O裝置的相應(yīng)狀態(tài)設(shè)定標(biāo)記被置于ON或者正在操作標(biāo)記處于ON,就初始化該I/O裝置。將狀態(tài)設(shè)定標(biāo)記和正在操作標(biāo)記置于OFF(步驟J1)。
(2)利用存儲器狀態(tài)恢復(fù)單元將主存儲器的狀態(tài)恢復(fù)到最近檢查點狀態(tài)(步驟J2)。
(3)參照保持在主存儲器中的狀態(tài)設(shè)定值的運行記錄只對于已經(jīng)在步驟J1得到初始化的I/O裝置從最老至最新地重新執(zhí)行狀態(tài)設(shè)定順序(步驟J3)。以此方式,I/O裝置的狀態(tài)被恢復(fù)到最近檢查點狀態(tài)。
(4)初始化I/O執(zhí)行過程。更具體地說,不論在最近檢查點的I/O執(zhí)行過程的狀態(tài)如何,都將I/O執(zhí)行過程設(shè)定至步驟H1。
(5)重新開始曾經(jīng)在最近檢查點所執(zhí)行的數(shù)據(jù)處理(步驟J5)。
重要的是I/O裝置的控制是在I/O執(zhí)行過程的上下文中進行的-這不同于應(yīng)用過程,步驟J4的初始化能夠在不受請求I/O操作的應(yīng)用過程的影響的情況下進行。在現(xiàn)有技術(shù)中,由于I/O操作是在應(yīng)用過程上下文中進行的,以上的初始化需要更復(fù)雜或特別的處理。
把一個執(zhí)行允許標(biāo)記加到各個請求塊是有效的。該執(zhí)行允許標(biāo)記受到控制,從而使該執(zhí)行允許標(biāo)記保持為OFF,直到獲得新的檢查點為止,且當(dāng)已經(jīng)獲得了新檢查點時它被置于ON。
圖16顯示了當(dāng)加有執(zhí)行允許標(biāo)記時由應(yīng)用過程執(zhí)行的流程圖。
(1)將與單元I/O操作有關(guān)的參數(shù)作為請求塊存儲在主存儲器中(步驟K1)。將請求塊的執(zhí)行允許標(biāo)記置于OFF。
(2)轉(zhuǎn)換到等候狀態(tài),直到請求塊中指定的I/O操作完成為止(步驟K2)。
(3)當(dāng)應(yīng)用過程恢復(fù)其執(zhí)行時,在與I/O請求有關(guān)的應(yīng)用過程側(cè)參考請求塊的結(jié)果碼字段執(zhí)行完成步驟,并隨后執(zhí)行后續(xù)步驟(步驟K3)。
圖17顯示了I/O執(zhí)行過程的流程圖。在此情況下,假定同時執(zhí)行多個I/O執(zhí)行過程。
(1)等候其執(zhí)行允許標(biāo)記為ON的請求塊(步驟L1)。
(2)根據(jù)該請求塊設(shè)定I/O裝置的寄存器并將正在操作標(biāo)記置于ON,從而啟動I/O裝置(步驟L2)。
(3)在從I/O裝置接收到完成中斷時,將正在操作標(biāo)記置于OFF,執(zhí)行I/O請求的完成步驟,將結(jié)果碼寫入請求塊,并使已經(jīng)處于等候狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟L3)。
圖18顯示了檢查點獲得的流程圖。
(1)將CPU的內(nèi)部狀態(tài)保存在主存儲器中(步驟M1)。
(2)將各個I/O裝置的狀態(tài)設(shè)定標(biāo)記置于OFF(步驟M2)。將存儲在主存儲器中的各個請求塊的執(zhí)行允許標(biāo)記置于ON。
(3)清除保持在存儲器狀態(tài)恢復(fù)單元中的數(shù)據(jù)(步驟M3)。
圖19A至19E顯示了I/O請求是如何執(zhí)行的。這里涉及到兩個應(yīng)用過程、一個檢查點獲得、以及兩個I/O執(zhí)行過程。
當(dāng)I/O請求由一個應(yīng)用過程發(fā)出時,相應(yīng)的請求塊得到產(chǎn)生并被存儲在存儲器中(圖19A和19B)。由于請求塊的執(zhí)行允許標(biāo)記在檢查點被獲得之前被保持為OFF,所以I/O執(zhí)行過程停留在空閑狀態(tài)。
當(dāng)已經(jīng)獲得了檢查點時,請求塊的執(zhí)行允許標(biāo)記被置于ON(圖19C)。I/O執(zhí)行過程取得其執(zhí)行允許標(biāo)記為ON的請求塊并執(zhí)行該I/O操作(設(shè)定I/O裝置的寄存器、啟動該I/O裝置、并處理I/O裝置的完成中斷)(圖19D和19E)。
圖20顯示了I/O操作的故障恢復(fù)和重新執(zhí)行的流程圖。
(1)如果一個I/O裝置的狀態(tài)設(shè)定標(biāo)記為ON或者正在操作標(biāo)記為ON,就初始化該I/O裝置(步驟N1)。將狀態(tài)設(shè)定標(biāo)記和正在操作標(biāo)記置于OFF。
(2)利用存儲器狀態(tài)恢復(fù)單元將主存儲器的狀態(tài)恢復(fù)到最近檢查點狀態(tài)(步驟N2)。
(3)參照存儲在主存儲器中的狀態(tài)設(shè)定的運行記錄,只對于在步驟N1得到初始化的I/O裝置從最老至最新地重新執(zhí)行狀態(tài)設(shè)定(步驟N3)。I/O裝置的狀態(tài)被恢復(fù)到最近檢查點狀態(tài)。
(4)初始化正在進行的I/O執(zhí)行過程(步驟N4)。更具體地說,I/O執(zhí)行過程被設(shè)定到步驟L1的狀態(tài),而不論最近檢查點處的I/O執(zhí)行過程的狀態(tài)如何。
(5)重新開始曾經(jīng)在最近檢查點被執(zhí)行的數(shù)據(jù)處理(步驟N5)。
假定故障在I/O操作期間發(fā)生。當(dāng)故障發(fā)生時,I/O裝置的正在操作標(biāo)記處于ON,因而I/O裝置被初始化。請求塊的內(nèi)容由存儲器狀態(tài)恢復(fù)單元返回到最近檢查點的內(nèi)容。然后,I/O裝置的狀態(tài)通過重新執(zhí)行保持在主存儲器中的設(shè)定順序而得到恢復(fù)(步驟N3)。當(dāng)故障恢復(fù)步驟已經(jīng)完成時,I/O處理取得請求塊并根據(jù)該請求塊從頭開始重新執(zhí)行該I/O操作。
這就是半路被中斷的I/O操作在故障恢復(fù)之后是如何被重新進行的。
當(dāng)已經(jīng)獲得了檢查點時,自前一檢查點以來已經(jīng)產(chǎn)生的請求塊變?yōu)榭蓤?zhí)行的。因此,可以在獲得檢查點之后將I/O執(zhí)行過程的優(yōu)先級設(shè)定為更高,從而立即執(zhí)行受到延遲的I/O請求。
為了保持高的高速緩沖存儲器命中率,執(zhí)行發(fā)出I/O請求的應(yīng)用過程的CPU應(yīng)該被分配給管理由該I/O請求所產(chǎn)生的請求塊的I/O執(zhí)行過程。
一種較佳實施例如下。
一種請求塊具有一個CPU標(biāo)識符字段。當(dāng)請求塊得到產(chǎn)生時,執(zhí)行應(yīng)用過程的CPU的標(biāo)識符被寫入到該CPU標(biāo)識符字段中。一個I/O執(zhí)行過程借助執(zhí)行該I/O執(zhí)行過程的CPU取得具有相同CPU標(biāo)識符的請求塊。
分配給I/O執(zhí)行過程的CPU的數(shù)目應(yīng)該根據(jù)可執(zhí)行的請求塊的數(shù)目和計算機的CPU的數(shù)目而確定。如果可執(zhí)行請求塊的數(shù)目增大,更多的CPU應(yīng)該被分配給I/O執(zhí)行過程。一個較佳的實施例是,計算機的調(diào)度程序根據(jù)可執(zhí)行請求塊的數(shù)目來確定是把空閑狀態(tài)CPU分配給一個應(yīng)用過程還是分配給一個I/O執(zhí)行過程。
(第三實施例)根據(jù)該實施例的計算機系統(tǒng)除了在第二實施例中描述的計算機系統(tǒng)的設(shè)置之外,還包括一個狀態(tài)保持區(qū)36。
在此實施例中,把注意力集中在諸如打印機的I/O裝置上。對于打印機,當(dāng)在打印紙片時發(fā)生了故障,該紙片就可被留在未完成狀態(tài)(即打印機不能被恢復(fù)到最近檢查點狀態(tài)或完全完成該紙片的打印。)為了檢測這種狀態(tài),在此實施例中把一個執(zhí)行中斷錯誤標(biāo)記加到請求塊上。該執(zhí)行中斷錯誤標(biāo)記被用來標(biāo)明請求塊所指定的I/O操作是否通過計算機系統(tǒng)的故障而導(dǎo)致了不可恢復(fù)的I/O錯誤。
圖21顯示了由本實施例中的應(yīng)用過程執(zhí)行的流程圖。
(1)將與I/O操作有關(guān)的參數(shù)作為請求塊存儲在主存儲器中(步驟O1)。將請求塊的執(zhí)行允許標(biāo)記置于OFF,并將請求塊的執(zhí)行中斷錯誤標(biāo)記置于OFF。
(2)轉(zhuǎn)換到等候狀態(tài),直到完成了請求塊中指定的I/O操作為止(步驟O2)。
(3)當(dāng)應(yīng)用過程恢復(fù)其執(zhí)行時,參照請求塊的結(jié)果碼字段在與I/O請求有關(guān)的應(yīng)用過程側(cè)執(zhí)行完成步驟,并隨后執(zhí)行后續(xù)步驟(步驟O3)。
圖22顯示了I/O執(zhí)行過程的流程圖。
(1)等侯其執(zhí)行允許標(biāo)記為ON的一個請求塊(步驟P1)。
(2)如果該請求塊的執(zhí)行中斷錯誤標(biāo)記為ON,在該請求塊的結(jié)果碼字段中設(shè)定一個錯誤碼,并使已經(jīng)處于等侯狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟P2,P5)。
(3)否則,設(shè)定I/O裝置的寄存器并根據(jù)請求塊將正在操作標(biāo)記置于ON(步驟P3)。如果I/O裝置是打印機,將請求塊的執(zhí)行中斷錯誤標(biāo)記置于ON。
(4)在接收到來自I/O裝置的完成中斷時,將正在操作標(biāo)記置于OFF,執(zhí)行I/O請求的完成步驟,將結(jié)果碼寫入請求塊,并使已經(jīng)處于等候狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟P4)。如果I/O裝置是打印機,把請求塊的執(zhí)行中斷錯誤標(biāo)記置于OFF。
圖23顯示了本實施例中的檢查點獲得的流程圖。
(1)將CPU的內(nèi)部狀態(tài)保存到主存儲器中(步驟Q1)。
(2)將各個I/O裝置的狀態(tài)設(shè)定標(biāo)記置于OFF(步驟Q2)。將存儲在主存儲器中的各個請求塊的執(zhí)行允許標(biāo)記置于ON。
(3)清除保持在存儲器狀態(tài)恢復(fù)單元中的數(shù)據(jù)(步驟Q3)。
圖24顯示了本實施例中在發(fā)生故障時的故障恢復(fù)的流程圖。
(1)如果I/O裝置的狀態(tài)設(shè)定標(biāo)記為ON或者正在操作標(biāo)記為ON,初始化該I/O裝置(步驟R1)。將狀態(tài)設(shè)定標(biāo)記和正在操作標(biāo)記置于OFF(步驟R1)。
(2)利用存儲器狀態(tài)恢復(fù)單元把主存儲器的狀態(tài)恢復(fù)到最近檢查點的狀態(tài)。
對于與打印機對應(yīng)的請求塊的執(zhí)行中斷錯誤標(biāo)記,該標(biāo)記的值在主存儲器的恢復(fù)中必須是不變的。這種操作是通過例如以下方式而實現(xiàn)的。通常的計算機系統(tǒng)具有一個用于處理系統(tǒng)參數(shù)的NVRAM(非易失存儲器),且在該NVRAM中被更新的數(shù)據(jù)能夠受到控制,從而使?fàn)顟B(tài)不由主存儲器恢復(fù)單元來恢復(fù)。因此,當(dāng)故障發(fā)生時,在主存儲器恢復(fù)之前將執(zhí)行中斷錯誤標(biāo)記的值保存在NVRAM中,并在主存儲器恢復(fù)之后將保存的值寫回到標(biāo)記中(步驟R2)。
(3)參照保持在主存儲器中的狀態(tài)設(shè)定的運行記錄,只對于已經(jīng)在步驟R1得到初始化的I/O裝置從最老至最新地重新執(zhí)行狀態(tài)設(shè)定順序(步驟R3)。以此方式,I/O裝置的狀態(tài)被恢復(fù)到最近檢查點的狀態(tài)。
(4)初始化正在進行的I/O執(zhí)行過程(步驟R4)。更具體地說,該I/O執(zhí)行過程被設(shè)定到步驟P1的狀態(tài),而不論在最近檢查點的I/O執(zhí)行過程狀態(tài)如何。
(5)重新開始曾經(jīng)在最近檢查點被執(zhí)行的數(shù)據(jù)處理(步驟R5)。
當(dāng)根據(jù)請求塊在打印機I/O操作期間發(fā)生了故障時,執(zhí)行中斷錯誤標(biāo)記為ON且它在整個主存儲器恢復(fù)期間保持不變。然后一個I/O執(zhí)行過程嘗試重新執(zhí)行該請求塊且它發(fā)現(xiàn)執(zhí)行中斷錯誤標(biāo)記為ON(步驟P2)。該I/O執(zhí)行過程不是重新執(zhí)行I/O操作而是在該請求塊的結(jié)果碼字段中設(shè)定一個錯誤碼,并使應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)。
以此方式,當(dāng)打印機I/O操作由于發(fā)生故障而在半路中斷時,該打印機I/O操作不被再次重復(fù),而是由應(yīng)用過程應(yīng)付諸如打印機堵塞錯誤這樣的錯誤。
在打印機的情況下,最適合的方式是使執(zhí)行中斷錯誤標(biāo)記作為一個三重標(biāo)記,即完成/在執(zhí)行/非執(zhí)行。
圖25顯示了在此情況下由應(yīng)用過程執(zhí)行的流程圖。
(1)把關(guān)于I/O操作的參數(shù)存儲到主存儲器中作為請求塊(步驟S1)。將請求塊的執(zhí)行允許標(biāo)記置于OFF,并將請求塊的執(zhí)行中斷錯誤標(biāo)記置于非執(zhí)行。
(2)轉(zhuǎn)換至等候狀態(tài)直到請求塊中描述的I/O操作得到完成為止(步驟S2)。
(3)當(dāng)應(yīng)用過程恢復(fù)其執(zhí)行時,參照請求塊的結(jié)果碼字段在與I/O請求有關(guān)的應(yīng)用過程側(cè)執(zhí)行完成步驟,并隨后執(zhí)行后續(xù)步驟(步驟S3)。
圖26顯示了I/O執(zhí)行過程的流程圖。
(1)等侯其執(zhí)行允許標(biāo)記為ON的請求塊(步驟T1)。
(2)如果該請求塊的執(zhí)行中斷錯誤標(biāo)記為執(zhí)行,在請求塊的結(jié)果碼字段中設(shè)定一個錯誤碼,并使已經(jīng)處于等候狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟T2,T6)。
(3)否則,如果完成了執(zhí)行中斷錯誤標(biāo)記,就在請求塊的結(jié)果碼字段中設(shè)定一個完成碼,并使已經(jīng)處于等侯狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟T3,T7)。
(4)否則,設(shè)定I/O裝置的寄存器并根據(jù)該請求塊將正在操作標(biāo)記置于ON(步驟T4)。
(5)在接收到來自I/O裝置的完成中斷時,將正在操作標(biāo)記置于OFF,將執(zhí)行中斷錯誤標(biāo)記設(shè)定為完成,并使已經(jīng)處于等候狀態(tài)的應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)(步驟T5)。
當(dāng)在打印機I/O操作結(jié)束之后發(fā)生故障時,執(zhí)行中斷錯誤標(biāo)記得到完成且它在整個主存儲器恢復(fù)期間保持不變。然后一個I/O執(zhí)行過程嘗試重新執(zhí)行請求塊且它發(fā)現(xiàn)執(zhí)行中斷錯誤標(biāo)記顯示出完成(步驟T3)。該I/O執(zhí)行過程不是重新執(zhí)行該I/O操作而是在請求塊的結(jié)果碼字段中設(shè)定一個結(jié)束碼,并使應(yīng)用過程成為準(zhǔn)備就緒狀態(tài)。
以此方式,當(dāng)在計算機中發(fā)生故障之前已經(jīng)完成了一個打印機I/O操作時,該打印機I/O操作不再被重復(fù),而是應(yīng)用過程接收到一個結(jié)果碼。
對于本領(lǐng)域的技術(shù)人員來說,其它的優(yōu)點和修正是顯而易見的。因此,本發(fā)明的更廣闊的范圍不僅限于在此顯示和描述的具體細(xì)節(jié)、代表性的裝置以及所示的例子。相應(yīng)地,在不脫離如所附權(quán)利要求書及其等價物描述所確定的一般發(fā)明概念的精神或范圍的前提下,可以做出各種修正。
權(quán)利要求
1.計算機系統(tǒng)中的一種I/O控制設(shè)備,該計算機系統(tǒng)包括一個或多個CPU(1a,1b)、一個主存儲器(3)、以及一個或多個I/O裝置(4a,4b),其特征在于所述CPU定期保存所述CPU的內(nèi)部狀態(tài)以及所述主存儲器的內(nèi)容以作為一個檢查點,當(dāng)所述計算機系統(tǒng)發(fā)生故障時,就恢復(fù)最近檢查點的所述CPU的內(nèi)部狀態(tài)和所述主存儲器的內(nèi)容以恢復(fù)數(shù)據(jù)處理,該I/O控制設(shè)備包括I/O裝置狀態(tài)存儲裝置(34,A1,A2,1a),用于存儲由所述CPU執(zhí)行的所述I/O裝置狀態(tài)設(shè)定的運行記錄數(shù)據(jù);以及I/O裝置狀態(tài)恢復(fù)裝置(1a,C1,C2,C3),用于通過首先初始化所述I/O裝置并隨后根據(jù)所述I/O裝置狀態(tài)存儲裝置存儲的所述運行記錄數(shù)據(jù)重新執(zhí)行狀態(tài)設(shè)定順序,而將所述I/O裝置的狀態(tài)恢復(fù)到最近檢查點的狀態(tài)。
2.根據(jù)權(quán)利要求1的設(shè)備,其特征在于所述存儲裝置包括用于擦除由于設(shè)定了新的狀態(tài)而變得多余的一部分已有運行記錄數(shù)據(jù)的裝置(1a,C2)。
3.根據(jù)權(quán)利要求1的設(shè)備,其特征在于所述I/O裝置狀態(tài)恢復(fù)裝置包括用于跳過自最近檢查點以來沒有被進行新的狀態(tài)設(shè)定的I/O裝置的初始化和狀態(tài)設(shè)定程序的重新執(zhí)行的裝置(1a,F(xiàn)1)。
4.根據(jù)權(quán)利要求1的設(shè)備,其特征在于進一步包括請求塊產(chǎn)生裝置(35),用于當(dāng)所述計算機系統(tǒng)中的應(yīng)用過程發(fā)出一個I/O請求時,在所述主存儲器中產(chǎn)生包含執(zhí)行所述I/O請求所需的信息的一個請求塊;I/O執(zhí)行過程(32,圖4,圖12中的H1,H2,H3),用于通過根據(jù)一個請求塊執(zhí)行I/O裝置驅(qū)動例行程序而執(zhí)行I/O操作;I/O執(zhí)行過程初始化裝置(圖15中的J4),用于當(dāng)在發(fā)生故障之后從最近檢查點進行恢復(fù)時,初始化不處于初始狀態(tài)的所述I/O執(zhí)行過程,并使正在由所述I/O執(zhí)行過程執(zhí)行的I/O操作從開始處重新執(zhí)行。
5.根據(jù)權(quán)利要求2的設(shè)備,其特征在于進一步包括請求塊產(chǎn)生裝置(35),用于當(dāng)所述計算機系統(tǒng)中的應(yīng)用過程發(fā)出一個I/O請求時,在所述主存儲器中產(chǎn)生包含執(zhí)行所述I/O請求所需的信息的一個請求塊;I/O執(zhí)行過程(32,圖4,圖12中的H1,H2,H3),用于通過根據(jù)一個請求塊執(zhí)行I/O裝置驅(qū)動例行程序而執(zhí)行I/O操作;I/O執(zhí)行過程初始化裝置(圖15中的J4),用于當(dāng)在發(fā)生故障之后從最近檢查點進行恢復(fù)時,初始化不處于初始狀態(tài)的所述I/O執(zhí)行過程,并使正在由所述I/O執(zhí)行過程執(zhí)行的I/O操作從開始處重新執(zhí)行。
6.根據(jù)權(quán)利要求3的設(shè)備,其特征在于進一步包括請求塊產(chǎn)生裝置(35),用于當(dāng)所述計算機系統(tǒng)中的應(yīng)用過程發(fā)出一個I/O請求時,在所述主存儲器中產(chǎn)生包含執(zhí)行所述I/O請求所需的信息的一個請求塊;I/O執(zhí)行過程(32,圖4,圖12中的H1,H2,H3),用于通過根據(jù)一個請求塊執(zhí)行I/O裝置驅(qū)動例行程序而執(zhí)行I/O操作;I/O執(zhí)行過程初始化裝置(圖15中的J4),用于當(dāng)在發(fā)生故障之后從最近檢查點進行恢復(fù),時初始化不處于初始狀態(tài)的所述I/O執(zhí)行過程,并使正在由所述I/O執(zhí)行過程執(zhí)行的I/O操作從開始處重新執(zhí)行。
7.根據(jù)權(quán)利要求4的設(shè)備,其特征在于在所述主存儲器保持的請求塊中,所述I/O執(zhí)行過程根據(jù)在最近檢查點之前產(chǎn)生的一個請求塊而開始執(zhí)行一個I/O操作,而所述I/O執(zhí)行過程根據(jù)在最近檢查點之后產(chǎn)生的一個請求塊把一個I/O操作延期到獲得新的檢查點。
8.根據(jù)權(quán)利要求5的設(shè)備,其特征在于在所述主存儲器保持的請求塊中,所述I/O執(zhí)行過程根據(jù)在最近檢查點之前產(chǎn)生的一個請求塊而開始執(zhí)行一個I/O操作,而所述I/O執(zhí)行過程根據(jù)在最近檢查點之后產(chǎn)生的一個請求塊把一個I/O操作延期到獲得新的檢查點。
9.根據(jù)權(quán)利要求6的設(shè)備,其特征在于在所述主存儲器保持的請求塊中,所述I/O執(zhí)行過程根據(jù)在最近檢查點之前產(chǎn)生的一個請求塊而開始執(zhí)行一個I/O操作,而所述I/O執(zhí)行過程根據(jù)在最近檢查點之后產(chǎn)生的一個請求塊把一個I/O操作延期到獲得新的檢查點。
10.根據(jù)權(quán)利要求7的設(shè)備,其特征在于當(dāng)新檢查點的獲得已經(jīng)完成時所述CPU被分配給所述I/O執(zhí)行過程。
11.根據(jù)權(quán)利要求8的設(shè)備,其特征在于當(dāng)新檢查點的獲得已經(jīng)完成時所述CPU被分配給所述I/O執(zhí)行過程。
12.根據(jù)權(quán)利要求9的設(shè)備,其特征在于當(dāng)新檢查點的獲得已經(jīng)完成時所述CPU被分配給所述I/O執(zhí)行過程。
13.根據(jù)權(quán)利要求4的設(shè)備,其特征在于執(zhí)行發(fā)出一個I/O請求的應(yīng)用過程的CPU也執(zhí)行管理根據(jù)所述I/O請求產(chǎn)生的請求塊的I/O執(zhí)行過程。
14.根據(jù)權(quán)利要求5的設(shè)備,其特征在于執(zhí)行發(fā)出一個I/O請求的應(yīng)用過程的CPU也執(zhí)行管理根據(jù)所述I/O請求產(chǎn)生的請求塊的I/O執(zhí)行過程。
15.根據(jù)權(quán)利要求6的設(shè)備,其特征在于執(zhí)行發(fā)出一個I/O請求的應(yīng)用過程的CPU也執(zhí)行管理根據(jù)所述I/O請求產(chǎn)生的請求塊的I/O執(zhí)行過程。
16.根據(jù)權(quán)利要求4的設(shè)備,其特征在于分配給所述I/O執(zhí)行過程的CPU的數(shù)目根據(jù)所要處理的請求塊的數(shù)目而恰當(dāng)確定。
17.根據(jù)權(quán)利要求5的設(shè)備,其特征在于分配給所述I/O執(zhí)行過程的CPU的數(shù)目根據(jù)所要處理的請求塊的數(shù)目而恰當(dāng)確定。
18.根據(jù)權(quán)利要求6的設(shè)備,其特征在于分配給所述I/O執(zhí)行過程的CPU的數(shù)目根據(jù)所要處理的請求塊的數(shù)目而恰當(dāng)確定。
19.根據(jù)權(quán)利要求4的設(shè)備,其特征在于進一步包括這樣的裝置(圖22中的P2),該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
20.根據(jù)權(quán)利要求5的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
21.根據(jù)權(quán)利要求6的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
22.根據(jù)權(quán)利要求7的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
23.根據(jù)權(quán)利要求8的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
24.根據(jù)權(quán)利要求9的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置用于在所述I/O裝置狀態(tài)恢復(fù)裝置不試圖恢復(fù)與所述I/O請求有關(guān)的I/O裝置的狀態(tài)的情況下,在發(fā)生一個錯誤時不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個錯誤回答。
25.根據(jù)權(quán)利要求4的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置當(dāng)故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個成功I/O完成回答。
26.根據(jù)權(quán)利要求5的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置當(dāng)故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個成功I/O完成回答。
27.根據(jù)權(quán)利要求6的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置當(dāng)故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個成功I/O完成回答。
28.根據(jù)權(quán)利要求7的設(shè)備,特征在于進一步包括這樣的裝置,該裝置當(dāng)故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,在不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個成功I/O完成回答。
29.根據(jù)權(quán)利要求8的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置當(dāng)計算機系統(tǒng)中的故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,不重新執(zhí)行所請求的I/O操作而向I/O請求處理發(fā)出一個成功I/O完成回答。
30.根據(jù)權(quán)利要求9的設(shè)備,其特征在于進一步包括這樣的裝置,該裝置當(dāng)故障發(fā)生時,在I/O請求是一個輸出請求且該I/O請求已經(jīng)在故障發(fā)生之前得到完成的情況下,不重新執(zhí)行所請求的I/O操作而向應(yīng)用過程發(fā)出一個成功I/O完成回答。
31.計算機系統(tǒng)中的一種I/O控制方法,該計算機系統(tǒng)包括一個或多個CPU、一個主存儲器、以及一個或多個I/O裝置,其特征在于所述CPU定期保存所述CPU的內(nèi)部狀態(tài)和所述主存儲器的內(nèi)容作為一個檢查點,當(dāng)所述計算機系統(tǒng)發(fā)生故障時,就恢復(fù)最近檢查點的所述CPU的內(nèi)部狀態(tài)和所述主存儲器的內(nèi)容以恢復(fù)數(shù)據(jù)處理,該I/O控制方法包括存儲(圖5中的A1)由所述CPU執(zhí)行的所述I/O裝置狀態(tài)設(shè)定的運行記錄數(shù)據(jù);以及通過首先初始化所述I/O裝置并隨后根據(jù)所述存儲的運行記錄數(shù)據(jù)重新執(zhí)行狀態(tài)設(shè)定順序,而將所述I/O裝置的狀態(tài)恢復(fù)(圖6中的B1)到最近檢查點的狀態(tài)。
32.一種產(chǎn)品,包括包含有計算機可讀取程序碼的可由計算機使用的介質(zhì),該介質(zhì)用于當(dāng)計算機系統(tǒng)從故障發(fā)生處重新開始時使輸入和輸出(I/O)單元的狀態(tài)被恢復(fù)到相應(yīng)的檢查點,所述產(chǎn)品中的該計算機可讀取程序碼包括用于當(dāng)設(shè)定包括I/O裝置的操作模式的狀態(tài)時使計算機保存運行記錄數(shù)據(jù)狀態(tài)的計算機可讀取程序碼;及用于當(dāng)計算機系統(tǒng)發(fā)生故障時使計算機初始化I/O裝置并根據(jù)保存的運行記錄數(shù)據(jù)設(shè)定I/O裝置的狀態(tài)的計算機可讀取程序碼。
33.一種產(chǎn)品,包括包含有計算機可讀取程序碼的可由計算機使用的介質(zhì),該介質(zhì)用于當(dāng)計算機系統(tǒng)從故障發(fā)生處重新啟動時使輸入和輸出(I/O)單元的狀態(tài)被恢復(fù)到相應(yīng)的檢查點,該計算機系統(tǒng)具有一個或多個CPU、一個主存儲器、以及一個或多個I/O裝置并定期保存所述CPU的內(nèi)部狀態(tài)和所述主存儲器的內(nèi)容作為一個檢查點,當(dāng)所述計算機系統(tǒng)發(fā)生故障時,就恢復(fù)最近檢查點的所述CPU的內(nèi)部狀態(tài)和所述主存儲器的內(nèi)容以重新啟動數(shù)據(jù)處理,所述產(chǎn)品中的該計算機可讀取程序碼包括用于當(dāng)設(shè)定包括I/O裝置的操作模式的狀態(tài)時使計算機保存運行記錄數(shù)據(jù)狀態(tài)的計算機可讀取程序碼;用于當(dāng)計算機系統(tǒng)發(fā)生故障時使計算機初始化I/O裝置并根據(jù)保存的運行記錄數(shù)據(jù)設(shè)定I/O裝置的狀態(tài)的計算機可讀取程序碼;用于當(dāng)所述計算機系統(tǒng)中的過程發(fā)出一個I/O請求時使計算機在所述主存儲器中產(chǎn)生包含執(zhí)行所述I/O請求所需的信息的一個請求塊的計算機可讀取程序碼;用于通過根據(jù)一個請求塊存取所述I/O裝置而使計算機執(zhí)行一個I/O操作的計算機可讀取程序碼;計算機可讀取程序碼,用于在當(dāng)發(fā)生故障之后從最近檢查點重新啟動時,使計算機在執(zhí)行狀態(tài)下初始化所述I/O執(zhí)行過程并使正在由所述I/O執(zhí)行過程執(zhí)行的I/O操作從開始處重新被執(zhí)行。
全文摘要
在一種計算機系統(tǒng)中,當(dāng)CPU(1a,1b)執(zhí)行I/O裝置(4a,4b)的操作模式等的狀態(tài)設(shè)定時,狀態(tài)設(shè)定的運行記錄數(shù)據(jù)被存儲在設(shè)定運行記錄存儲區(qū)中。在計算機系統(tǒng)中發(fā)生故障時,I/O裝置得到清除,且I/O裝置的狀態(tài)設(shè)定根據(jù)存儲在設(shè)定運行記錄存儲區(qū)(34)中的狀態(tài)設(shè)定運行記錄數(shù)據(jù)而進行。因此,當(dāng)過程重新開始時,I/O裝置的狀態(tài)能夠被恢復(fù)到一個檢查點的狀態(tài)。
文檔編號G06F11/14GK1165344SQ9710209
公開日1997年11月19日 申請日期1997年1月28日 優(yōu)先權(quán)日1996年1月31日
發(fā)明者??坡? 佐久間毅, 酒井浩 申請人:株式會社東芝