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