具有检查点恢复功能的i/o控制设备的制作方法

文档序号:6411752阅读:523来源:国知局
专利名称:具有检查点恢复功能的i/o控制设备的制作方法
技术领域
本发明涉及适用于具有检查点恢复功能的计算机系统的一种I/O控制设备。
近年来,计算机系统得到了很大的发展。随着这种发展,对诸如应付故障的可靠性的要求提高了。作为构成容错计算机系统的一种方法,有一种检查点恢复方案。
根据用于实施检查点恢复方案的一种方法,CPU的内部状态,即寄存器和CPU的高速缓冲存储器的内容被定期保存在一个主存储器中,以便在主存储器上获得一个检查点。当数据处理由于计算机系统中的故障而不能继续时,主存储器被恢复到最近检查点的状态,且利用存储在主存储器中的CPU内部状态重新开始数据处理。
用于将主存储器恢复到检查点状态的一种方法如下。在主存储器的一种更新操作中,所要更新的地址和数据被存储在一个存储器状态恢复单元55中。在计算机系统发生了故障时,把存储在存储器状态恢复单元55中的以前的数据写回到主存储器。
虽然在该检查点恢复方案中,在计算机系统发生故障时,主存储器或CPU的内部状态能够通过利用存储器状态恢复单元55而被恢复到最近检查点的状态,但与该计算机系统相连的一个I/O装置不能被方便地恢复到最近检查点的状态。
下面将结合

图1和2来描述该问题。
如图1所示,在此计算机系统中,一个CPU51请求一个盘控制器52存取一个盘53以进行I/O操作。图2显示了具有上述设置的计算机系统的I/O处理的时序图。
如图2所示,盘控制器52的寄存器被设定在时刻T0至T1(图2中的(1))从盘53的预定位置读取数据,且盘控制器52在时刻T1(图2中的(2))被启动。以此方式,盘控制器52和盘53在时刻T1至T2执行了一个读取操作(图2中的(3))。读取的数据通过DMA传送而被从盘控制器52传送到主存储器54中。
CPU51在时刻T2从盘控制器52接收一个完成中断(图2中的(4)),从而在时刻T2至T3进行至盘控制器52的完成中断处理(图2中的(5)和(6))。有关读取操作的另一后处理在时刻T3至T4进行(图2中的(7))。
在此情况下的第一个困难是在任意定时下获得的检查点不总是有效的。
例如,设在盘控制器52的寄存器的设定期间获得了一个检查点(时刻T0与时刻T1之间的设定顺序)。
在此情况下,在计算机随后发生故障时,设定顺序的后面部分从最近检查点重新进行,即只有盘控制器52的寄存器的一部分得到了重新设定。因此,盘控制器52并不总是象所希望的那样运行。
考虑到盘控制器52的特性,不仅在上述的时刻T0至T1,而且在时刻T0至T3,即当CPU51在诸如读取/写入操作的I/O操作的设定顺序期间获得了一个检查点时,当设顺程序的后面部分在系统发生故障之后从该检查点重新进行时,盘控制器52不总是如所希望地运行。
克服这种困难的一种方法是绝对不在I/O装置的操作期间获得检查点。然而,在其中包含很多I/O装置的计算机系统中,CPU几乎总是执行I/O操作的设定顺序。因此,如果阻止在I/O装置的设定顺序期间获得检查点,就会严重地降低性能。
第二个困难如下。设在从盘控制器52至主存储器54的DMA传送期间系统中发生了故障。在此情况下,正在进行的DMA传送必须在主存储器54被恢复到最近检查点状态之前被停止。
在传统的计算机系统中,为了停止正在进行的DMA传送,需要对I/O装置进行初始化(复位)。由于通过初始化I/O装置而把I/O装置置于初始状态,所以需要进行特殊处理来将I/O装置恢复到最近检查点状态。
作为用于解决在上述检查点恢复方案中的I/O处理的问题的方案,已知的有以下两种方案。
第一个方案公布在美国专利第4740969“硬件故障恢复的方法和设备”中。在正常的数据处理中,I/O装置的寄存器的读取/写入的数据和来自I/O装置的中断,都被记录在一个运行记录存储器中。在计算机系统发生故障之后,当从最近检查点重新开始寄存器设定顺序时,在故障发生之前为I/O装置的寄存器进行的读取/写入操作被以如下方式重新进行。对于写入操作,数据被放弃且不被写入I/O装置的寄存器。对于读取操作,不从I/O装置的寄存器读取数据,而是将运行记录存储器中的数据送回到CPU。对于来自I/O装置的中断,该中断得到产生并以与前面的执行相同的时序被送到CPU。
这种方案要求特殊的接口电路,而这种接口电路没有被提供给通常的计算机系统。另外,难于将这种方案应用于多处理器系统。
第二种方案被公布在1988年2月的IEEE“计算机”杂志的“Sequoia用于事务处理的容错紧密耦合多处理器”中。在此方案中,计算机系统中的数据处理被分成可以通过只利用CPU和主存储器进行的数据处理部分和处理I/O装置的I/O处理部分。这些部分由不同的计算机执行。
图3显示了一种计算机系统的示意性设置,计算机系统的数据处理被分成通过只存取一个主存储器而进行的部分和包括对I/O装置的存取的部分,且前者由其可靠性借助检查点恢复方案而得到改善的计算机100执行,而后者则由未采用检查点恢复方案的计算机200来执行。在这些部分之间的逻辑接口中,表示“在指定的盘的指定位置读取指定量的数据”的一个请求被从计算机100送到计算机200。当计算机200实际已经读取了数据时,表明操作是否正常完成的一个结束码和从盘读取的数据被从计算机200送回到计算机100。
为了改善计算机200的可靠性,计算机200的组成元件是双份的。即,计算机200由计算机主体210a和210b以及I/O装置220a和220b组成。在正常状态下,请求在两侧同时得到处理,且执行结果被相互比较以检查执行结果是否相同。如果在一侧发生了故障,所请求的操作在另一侧上继续进行。
这种方案具有以下缺点。即,由于必须提供至少两种计算机,计算机系统大且费用高。
由第二种方案可以得到以下想法。即,计算机100和计算机200可以通过采用虚拟计算机技术而由一个计算机实施。然而,这种想法的效果并不好,其原因如下。
在Sequoia中公布的方案是基于以下假定的。由于采用了独立的计算机100和200,即使计算机100的数据处理由于计算机100中发生了故障而由一个检查点重新开始,计算机200的I/O处理由不受该故障的影响。
然而,如果计算机100和计算机200通过利用虚拟计算机技术而由一个计算机实施,计算机100和计算机200将同时受到基本计算机系统中发生的故障的影响。
如上所述,检查点恢复计算机系统需要对I/O处理部分的特殊处理。采用了在CPU和I/O装置之间设置一个专用接口的方法,或在两个独立计算机上分别执行计算部分和I/O处理部分的方法。因此,费用被大大地增加了。
本发明的一个目的,是提供一种I/O控制设备,它能够控制在具有检查点恢复功能的计算机上的I/O装置,而不需要专用的接口电路或两个独立的计算机。
另一个目的,是提供在操作系统内核与当计算机系统在发生故障的情况下重新运行时恢复I/O装置的状态的一个已有的装置驱动程序之间提供一个软件层。
根据本发明,在包括一或多个CPU、一个主存储器、以及一或多个I/O装置的计算机系统中,CPU定期保存CPU的内部状态和主存储器的内容作为一个检查点且当计算机系统发生故障时最近检查点的CPU的内部状态和主存储器的内容得到恢复以重新开始数据处理,在该计算机系统中的一个I/O控制设备包括I/O装置状态存储装置,用于存储由CPU的I/O装置状态设定的运行记录数据;以及,I/O装置状态恢复装置,用于通过首先初始化I/O装置并随后根据由I/O装置状态存储装置存储的运行记录数据而重新进行状态设定,而将I/O装置的状态恢复到最近检查点的状态。
根据本发明,当由CPU进行诸如操作模式设定的对I/O装置的状态设定时,状态设定的运行记录数据被存储在例如一个主存储器中。当计算机系统发生故障时,借助一个初始化指令或一个复位信号确认而使一个I/O装置得到初始化,且随后根据运行记录数据对I/O装置重新执行状态设定顺序,从而使I/O装置的状态被恢复到最近检查点的状态。
经常的情况是,一部分运行记录数据因新的状态设定而变成不必要的,因此该不必要的部分能够被消除。例如,假定具有初始状态“状态A”的I/O装置被设定到“状态B”,接着被设定到“状态C”,然后获得了一个检查点。在此情况下,在设定“状态C”时,用于“状态B”的运行记录数据变成不必要,因而能够被清除。一旦获得了检查点,除了“状态C”设定之外的所有运行记录数据都变为多余的,可被清除。因此,提供了清除运行记录数据的多余部分的装置,从而使运行记录数据所需的区能够被保存。另外,用于在I/O装置初始化之后重新进行状态设定顺序所需的时间可被缩短。
对于自前一检查点以来没有进行新的状态设定的I/O装置,在发生故障时不需要初始化I/O装置和重新执行状态设定顺序。因此,设置了用于跳过这种I/O装置的初始化和状态设定顺序的装置。恢复所需的时间能够得到进一步的缩短。
本发明进一步包括请求块产生装置,用于当计算机系统中的应用过程作出一个I/O请求时,在主存储器中产生包含进行I/O请求所需信息的一个请求块;I/O执行过程,用于通过根据请求块存取I/O装置而执行I/O操作;以及,I/O执行过程初始化装置,用于在从故障发生之后的最近检查点重新开始时,初始化正在进行的I/O执行过程并使被I/O执行过程正在执行的I/O操作从开始处重新被执行。
根据本发明,当一个应用过程发出一个I/O请求时,包含I/O操作所需的信息的请求块由I/O执行过程产生和执行。该应用过程移至等侯状态直到I/O操作结束。
假定在I/O操作期间计算机系统发生了故障。在计算机系统的状态重新运行到最近检查点的同时,I/O装置状态恢复装置恢复I/O装置的状态。在从最近检查点重新开始时,I/O执行过程初始化装置初始化负责I/O操作的I/O执行过程,并使进行到一半的I/O操作从开始处重新进行。在重新开始阶段,一个I/O执行过程根据请求块而简单地进行I/O操作。
I/O操作由一个I/O执行过程进行而不由应用过程本身进行这一事实使得I/O操作可从开始处重新进行。如果应用过程以传统方式进行I/O操作,将难于或不可能从开始处重新进行。应该注意的是,在最近检查点,I/O操作正在进行之中。
在存储在主存储器中的请求块中,在最近检查点之前产生的请求块应该由I/O执行过程进行处理,且在最近检查点之后产生的请求块的执行应该被延期至下一个检查点。
一般地,如果发生了重新运行,由于实时时钟和异步事件(即外部中断),从最近检查点的第二次数据处理不总是与第一次数据处理相同。因此,在故障发生之前由数据处理发出的I/O请求可能不被作出,或在故障恢复之后由第二次数据处理以不同的方式作出。因此,需要将最近检查点之后产生的请求块的执行延期至获得新的检查点为此。
当已经获得了检查点时,很多请求块都变成可执行的。因此,一旦获得检查点,就将很多CPU分配给I/O执行过程以使I/O操作以小的延迟进行是有效的。
使已经执行了要求I/O操作的应用过程的CPU也执行负责I/O操作的I/O执行过程将提高高速缓存命中率。
根据所要处理的请求块的数目而适当地确定分配给I/O执行过程的CPU的数目将改善系统的性能。
假定当I/O执行过程正在执行把字符串输出到一个打印单元的装置驱动例行程序时,计算机系统发生了故障。则只有一部分字符可以被打印在纸上并不能被擦除。在此情况下,作出I/O请求的应用过程应该接收到一个错误回答,从而使应用过程能够在应用级别上进行错误恢复,如打印机堵塞错误。
假定I/O执行过程完成了将字符串输出到打印机单元的装置驱动例行程序的执行,然后计算机系统发生了故障。在此情况下,整个字符串都已经被打印出来了。如果在故障恢复之后重新执行请求块,将导致重复打印。因此,在I/O请求是一个输出请求并在故障发生之前已经完成的情况下,所希望的是即使计算机系统发生了故障,发出I/O请求的应用过程也接收一个成功的I/O完成回答而不重新执行I/O请求。
本发明的其它目的和优点将在以下描述中给出,且其中的一些通过该描述而变得显而易见,或者可以通过实施本发明而学习到。本发明的目的和优点可以借助在所附权利要求书中具体指出的手段和组合而实现和获得。
附图被用来说明本发明的原理,其中图1显示了采用传统检查点恢复方案的计算机系统的设置;图2是图1所示的计算机系统的I/O处理的时序图;图3显示了一种设置,其中由一个计算机系统采用传统的检查点恢复方案来实施I/O控制;图4是示意图,显示了根据本发明的第一实施例的计算机系统的设置;图5是第一实施例中的配置例行程序的流程图;图6是第一实施例的检查点获得的流程图;图7是第一实施例中的故障恢复的流程图;图8是第一实施例的配置例行程序的流程图;图9是第一实施例的检查点获得的流程图;图10是第一实施例中的故障恢复的流程图;图11是在本发明的第二实施例中发出I/O请求的应用过程的流程图;图12是第二实施例中的I/O执行过程的流程图;图13A至13D显示了如何借助第二实施例的应用过程和I/O执行过程来进行I/O操作;图14是第二实施例的检查点获得的流程图;图15是第二实施例中的故障恢复的流程图;图16是第二实施例中发出I/O请求的应用过程的流程图;图17是第二实施例中的I/O执行过程的流程图;图18是第二实施例中的检查点获得的流程图;图19A至19E显示了在第二实施例中如何借助应用过程和I/O执行过程来延迟执行I/O操作;图20是第二实施例中的故障恢复的流程图;图21是在本发明的第三实施例中发出I/O请求的应用过程的流程图;图22是第三实施例的I/O执行过程的流程图;图23是第三实施例中检查点获得的流程图;图24是第三实施例中的故障恢复的流程图;图25是第三实施例中发出I/O请求的应用过程的流程图26是第三实施例中的I/O执行过程的流程图。
下面结合附图描述本发明的实施例。
(第一实施例)以下结合图4描述本发明的第一实施例。图4是示意图,显示了根据第一实施例的计算机系统。
如图4中所示,本实施例的计算机系统包括CPU1a和1b、存储器状态恢复单元2、主存储器3以及诸如打印机和RS232C控制器的I/O装置4a和4b。
当主存储器3的内容受到CPU1a或1b的更新时,存储器状态恢复单元2保持以前的映象以恢复主存储器3的内容。存储器状态恢复单元2的细节,在Kubiak等人在FTCS,1982上的文章“PENELOPEARECOVERY MECHANISM FOR TRANSIENT HARDWAREFAILURES AND SOFTWARE ERRORS”中得到了描述。包括一个堆栈区和数据区的应用过程的上下文,作为上下文信息31被存储在主存储器3中。这里,应用过程意味着传统的计算机系统的过程。
当系统被初始化或应用过程请求时,操作系统33,更具体地说是打印装置驱动程序和RS232C装置驱动程序,设定操作模式,诸如波特率、停止位和奇偶校验等等。所设定的操作模式作为运行记录数据被存储在状态设定存储区34中。
例如,在典型的UNIX操作系统中,对诸如RS232C控制器的I/O装置的状态设定顺序由被称为xxconfig的装置驱动例行程序执行,该装置驱动例行程序的接口对于所有装置驱动程序都是共同的。因此,配置例行程序的参数最好在配置例行程序输入时被存储在主存储器3的状态设定存储区34中,且配置例行程序的参数能够不依赖于I/O装置的类型而以相同的方式得到记录。
图5显示了各个I/O装置的配置例行程序的流程图。
(1)将配置例行程序的参数存储在主存储器中,作为状态设定值(步骤A1)。
(2)设定I/O装置的态(步骤S2)。
图6显示了检查点获得的流程图。
(1)将CPU的初始状态即寄存器的内容和高速缓冲存储器数据保存在主存储器中(步骤B1)。
(2)清除保持在主存储器恢复单元中的数据。
图7显示了在发生故障时当从最近检查点重新执行设定顺序时的流程图。
(1)借助一个复位指令或复位信号确认来初始化I/O装置。
(2)利用主存储器恢复单元将主存储器的状态恢复到最近检查点状态(步骤C2)。其结果是I/O装置的状态设定的运行记录被恢复到最近检查点状态。
(3)利用存储在主存储器中的配置参数重新执行配置例行程序(步骤C3)。这种重新执行是从最老至最新地进行的。其结果是I/O装置的状态被恢复到检查点的状态。
(4)重新开始曾经在检查点被执行的数据处理(步骤C4)。
因此,在其中各个I/O装置的状态被设定到检查点的状态的状态下,数据处理被重新开始。这意味着在单个的计算机中实现了检查点恢复机制和I/O装置恢复机制。
对于RS232C控制器,当新设定诸如波特率、停止位以及奇偶校验的操作模式时,老的设定值变得多余。因此,只需要在主存储器3的状态设定存储区34中保持RS232C控制器4b的操作模式的最新值(放弃不必要的运行记录数据)。这样,缩短了故障恢复时间。
在主存储器3中有效地设置了一个状态保持区36,以管理I/O装置4a和4b的状态设定标记。该状态设定标记是按照如下方式得到管理的。该状态设定标记ON表示自最近检查点以来I/O装置的某些状态设定顺序已被执行或正在被执行,而状态设定标记OFF表示自最近检查点以来没有对I/O装置进行状态设定。
图8显示了在采用上述状态设定标记的情况下配置例行程序的流程图。
(1)将配置例行程序的参数存储在主存储器中(步骤D1)。使I/O装置的状态设定标记处于ON。
(2)设定I/O装置的状态(步骤D2)。
图9显示了在此情况下的检查点获得的流程图。
(1)将CPU的初始状态保存在主存储器中(步骤E1)。
(2)将各个I/O装置的状态设定标记置于OFF。
(3)清除保持在存储器状态恢复单元中的数据(步骤E3)。
图10显示了在此情况下的故障恢复的流程图。
(1)如果某个I/O装置的状态设定标记处于ON,就初始化该I/O装置,因为这意味着从最近检查点以来已经设定了新的状态(步骤F1)。相反地,状态设定标记为OFF的I/O装置不需要被初始化。
(2)利用存储器状态恢复单元来将主存储器的状态恢复到最近检查点状态(步骤F2)。其结果是I/O装置的状态设定的运行记录被恢复到最近检查点的状态。
(3)利用存储在主存储器中的配置参数只对于已经在步骤F1得到初始化的I/O装置重新执行配置例行程序(步骤F3)。这种重新执行是从最老至最新地执行的。其结果是I/O装置的状态被恢复到最近检查点状态。
(4)重新开始曾经在最近检查点被执行的数据处理(步骤F4)。
以此方式,借助恢复设定标记OFF,故障恢复能够跳过对I/O装置的初始化,这使得故障恢复进行得更快。
(第二实施例)假定根据该实施例的计算机系统除了在第一实施例中描述的计算机系统的设置之外还包括具有请求块存储区35和I/O执行过程的设置(图4)。
在此实施例中,当应用过程发出一个系统调用来请求一个I/O装置的I/O操作时,操作系统不是调用调用者处理的上下文中的装置驱动程序,而是调用一个请求块产生例行程序。该请求块产生程序产生具有装置驱动例行程序的入口地址和参数的请求块。这里,应用(调用者)处理进入等侯状态。请求块被简单地保持在主存储器中直到获得新的检查点为止。因此,如果计算机系统中有大量的应用过程,保持在主存储器中的请求块的数目随着时间而增大。
在系统中有一定数目的I/O执行过程。一个I/O执行过程是根据请求块执行装置驱动例行程序的专用处理。
当已经获得了新的检查点时,请求块就做好了被处理的准备。带有初始状态的I/O执行过程被分配给请求块之一。该I/O执行过程执行具有适当参数的装置驱动例行程序-该参数和程序都是由该请求块指定的。因此,同时正在被处理的I/O操作的数目取决于I/O执行过程的数目。当I/O执行过程在指定的装置驱动例行程序中启动了I/O装置时,它就进入等候状态。当I/O装置送回一个结束中断时,装置驱动程序的中断处理例行程序就被调用且该结果被反映在I/O执行过程上下文内。然后,I/O执行过程准备就绪。在I/O操作结束时,I/O执行过程将结果经过请求块报告给应用过程。
如果在从I/O装置至主存储器的DMA传送期间计算机系统发生了故障,就需要在主存储器被恢复之前通过初始化I/O装置来停止DMA传送。为此,为具有DMA能力的每一个I/O单元都采用了一个正在操作标记,以确定各个I/O装置是否必须被初始化。只有当相应的I/O装置进行DMA传送时,正在操作标记才被控制为ON。
图11显示了由本实施例中的应用过程执行的I/O请求流程图。
(1)将与I/O操作有关的参数存储在主存储器中作为请求块(步骤G1)。
(2)转换到等侯状态直到请求块中描述的I/O操作完成为止(步骤G2)。
(3)当应用过程恢复其执行时,在与I/O请求有关的应用过程侧参照请求块的结果码字段执行完成步骤,并随后执行后续步骤(步骤G3)。
图12显示了I/O执行过程的流程图,这里,假定同时执行多个I/O执行过程。
(1)等候一个可执行的请求块(初始状态,步骤H1)。
(2)设定I/O装置的寄存器并根据请求块将正在操作标记置于ON,从而启动I/O装置(步骤H2)。
(3)在接收到来自I/O装置的完成中断时,将正在操作标记置于OFF、执行I/O请求的完成步骤、将结果码写入请求块、并使已经处于等候状态的应用过程成为准备就绪状态(步骤H3)。
图13A至13D显示了由两个应用过程和两个I/O执行过程执行的I/O操作的示范性顺序。
当应用过程发出一个I/O请求时,相应的请求块得到产生并被存储在存储器中(图13A和13B)。在产生请求块之后,在I/O执行过程上下文之下执行一个I/O执行过程(寄存器设定、启动以及I/O装置的完成中断处理)(图13C和13D)。
图14显示了本实施例中的检查点获得的流程图。
(1)将CPU的内部状态保持在主存储器中(步骤I1)。
(2)将各个I/O装置的状态设定标记置于OFF(步骤I2)。
(3)清除保持在存储器状态恢复单元中的数据(步骤I3)。
图15显示了在本实施例中当发生故障时的故障恢复的流程图。
(1)如果某一I/O装置的相应状态设定标记被置于ON或者正在操作标记处于ON,就初始化该I/O装置。将状态设定标记和正在操作标记置于OFF(步骤J1)。
(2)利用存储器状态恢复单元将主存储器的状态恢复到最近检查点状态(步骤J2)。
(3)参照保持在主存储器中的状态设定值的运行记录只对于已经在步骤J1得到初始化的I/O装置从最老至最新地重新执行状态设定顺序(步骤J3)。以此方式,I/O装置的状态被恢复到最近检查点状态。
(4)初始化I/O执行过程。更具体地说,不论在最近检查点的I/O执行过程的状态如何,都将I/O执行过程设定至步骤H1。
(5)重新开始曾经在最近检查点所执行的数据处理(步骤J5)。
重要的是I/O装置的控制是在I/O执行过程的上下文中进行的-这不同于应用过程,步骤J4的初始化能够在不受请求I/O操作的应用过程的影响的情况下进行。在现有技术中,由于I/O操作是在应用过程上下文中进行的,以上的初始化需要更复杂或特别的处理。
把一个执行允许标记加到各个请求块是有效的。该执行允许标记受到控制,从而使该执行允许标记保持为OFF,直到获得新的检查点为止,且当已经获得了新检查点时它被置于ON。
图16显示了当加有执行允许标记时由应用过程执行的流程图。
(1)将与单元I/O操作有关的参数作为请求块存储在主存储器中(步骤K1)。将请求块的执行允许标记置于OFF。
(2)转换到等候状态,直到请求块中指定的I/O操作完成为止(步骤K2)。
(3)当应用过程恢复其执行时,在与I/O请求有关的应用过程侧参考请求块的结果码字段执行完成步骤,并随后执行后续步骤(步骤K3)。
图17显示了I/O执行过程的流程图。在此情况下,假定同时执行多个I/O执行过程。
(1)等候其执行允许标记为ON的请求块(步骤L1)。
(2)根据该请求块设定I/O装置的寄存器并将正在操作标记置于ON,从而启动I/O装置(步骤L2)。
(3)在从I/O装置接收到完成中断时,将正在操作标记置于OFF,执行I/O请求的完成步骤,将结果码写入请求块,并使已经处于等候状态的应用过程成为准备就绪状态(步骤L3)。
图18显示了检查点获得的流程图。
(1)将CPU的内部状态保存在主存储器中(步骤M1)。
(2)将各个I/O装置的状态设定标记置于OFF(步骤M2)。将存储在主存储器中的各个请求块的执行允许标记置于ON。
(3)清除保持在存储器状态恢复单元中的数据(步骤M3)。
图19A至19E显示了I/O请求是如何执行的。这里涉及到两个应用过程、一个检查点获得、以及两个I/O执行过程。
当I/O请求由一个应用过程发出时,相应的请求块得到产生并被存储在存储器中(图19A和19B)。由于请求块的执行允许标记在检查点被获得之前被保持为OFF,所以I/O执行过程停留在空闲状态。
当已经获得了检查点时,请求块的执行允许标记被置于ON(图19C)。I/O执行过程取得其执行允许标记为ON的请求块并执行该I/O操作(设定I/O装置的寄存器、启动该I/O装置、并处理I/O装置的完成中断)(图19D和19E)。
图20显示了I/O操作的故障恢复和重新执行的流程图。
(1)如果一个I/O装置的状态设定标记为ON或者正在操作标记为ON,就初始化该I/O装置(步骤N1)。将状态设定标记和正在操作标记置于OFF。
(2)利用存储器状态恢复单元将主存储器的状态恢复到最近检查点状态(步骤N2)。
(3)参照存储在主存储器中的状态设定的运行记录,只对于在步骤N1得到初始化的I/O装置从最老至最新地重新执行状态设定(步骤N3)。I/O装置的状态被恢复到最近检查点状态。
(4)初始化正在进行的I/O执行过程(步骤N4)。更具体地说,I/O执行过程被设定到步骤L1的状态,而不论最近检查点处的I/O执行过程的状态如何。
(5)重新开始曾经在最近检查点被执行的数据处理(步骤N5)。
假定故障在I/O操作期间发生。当故障发生时,I/O装置的正在操作标记处于ON,因而I/O装置被初始化。请求块的内容由存储器状态恢复单元返回到最近检查点的内容。然后,I/O装置的状态通过重新执行保持在主存储器中的设定顺序而得到恢复(步骤N3)。当故障恢复步骤已经完成时,I/O处理取得请求块并根据该请求块从头开始重新执行该I/O操作。
这就是半路被中断的I/O操作在故障恢复之后是如何被重新进行的。
当已经获得了检查点时,自前一检查点以来已经产生的请求块变为可执行的。因此,可以在获得检查点之后将I/O执行过程的优先级设定为更高,从而立即执行受到延迟的I/O请求。
为了保持高的高速缓冲存储器命中率,执行发出I/O请求的应用过程的CPU应该被分配给管理由该I/O请求所产生的请求块的I/O执行过程。
一种较佳实施例如下。
一种请求块具有一个CPU标识符字段。当请求块得到产生时,执行应用过程的CPU的标识符被写入到该CPU标识符字段中。一个I/O执行过程借助执行该I/O执行过程的CPU取得具有相同CPU标识符的请求块。
分配给I/O执行过程的CPU的数目应该根据可执行的请求块的数目和计算机的CPU的数目而确定。如果可执行请求块的数目增大,更多的CPU应该被分配给I/O执行过程。一个较佳的实施例是,计算机的调度程序根据可执行请求块的数目来确定是把空闲状态CPU分配给一个应用过程还是分配给一个I/O执行过程。
(第三实施例)根据该实施例的计算机系统除了在第二实施例中描述的计算机系统的设置之外,还包括一个状态保持区36。
在此实施例中,把注意力集中在诸如打印机的I/O装置上。对于打印机,当在打印纸片时发生了故障,该纸片就可被留在未完成状态(即打印机不能被恢复到最近检查点状态或完全完成该纸片的打印。)为了检测这种状态,在此实施例中把一个执行中断错误标记加到请求块上。该执行中断错误标记被用来标明请求块所指定的I/O操作是否通过计算机系统的故障而导致了不可恢复的I/O错误。
图21显示了由本实施例中的应用过程执行的流程图。
(1)将与I/O操作有关的参数作为请求块存储在主存储器中(步骤O1)。将请求块的执行允许标记置于OFF,并将请求块的执行中断错误标记置于OFF。
(2)转换到等候状态,直到完成了请求块中指定的I/O操作为止(步骤O2)。
(3)当应用过程恢复其执行时,参照请求块的结果码字段在与I/O请求有关的应用过程侧执行完成步骤,并随后执行后续步骤(步骤O3)。
图22显示了I/O执行过程的流程图。
(1)等侯其执行允许标记为ON的一个请求块(步骤P1)。
(2)如果该请求块的执行中断错误标记为ON,在该请求块的结果码字段中设定一个错误码,并使已经处于等侯状态的应用过程成为准备就绪状态(步骤P2,P5)。
(3)否则,设定I/O装置的寄存器并根据请求块将正在操作标记置于ON(步骤P3)。如果I/O装置是打印机,将请求块的执行中断错误标记置于ON。
(4)在接收到来自I/O装置的完成中断时,将正在操作标记置于OFF,执行I/O请求的完成步骤,将结果码写入请求块,并使已经处于等候状态的应用过程成为准备就绪状态(步骤P4)。如果I/O装置是打印机,把请求块的执行中断错误标记置于OFF。
图23显示了本实施例中的检查点获得的流程图。
(1)将CPU的内部状态保存到主存储器中(步骤Q1)。
(2)将各个I/O装置的状态设定标记置于OFF(步骤Q2)。将存储在主存储器中的各个请求块的执行允许标记置于ON。
(3)清除保持在存储器状态恢复单元中的数据(步骤Q3)。
图24显示了本实施例中在发生故障时的故障恢复的流程图。
(1)如果I/O装置的状态设定标记为ON或者正在操作标记为ON,初始化该I/O装置(步骤R1)。将状态设定标记和正在操作标记置于OFF(步骤R1)。
(2)利用存储器状态恢复单元把主存储器的状态恢复到最近检查点的状态。
对于与打印机对应的请求块的执行中断错误标记,该标记的值在主存储器的恢复中必须是不变的。这种操作是通过例如以下方式而实现的。通常的计算机系统具有一个用于处理系统参数的NVRAM(非易失存储器),且在该NVRAM中被更新的数据能够受到控制,从而使状态不由主存储器恢复单元来恢复。因此,当故障发生时,在主存储器恢复之前将执行中断错误标记的值保存在NVRAM中,并在主存储器恢复之后将保存的值写回到标记中(步骤R2)。
(3)参照保持在主存储器中的状态设定的运行记录,只对于已经在步骤R1得到初始化的I/O装置从最老至最新地重新执行状态设定顺序(步骤R3)。以此方式,I/O装置的状态被恢复到最近检查点的状态。
(4)初始化正在进行的I/O执行过程(步骤R4)。更具体地说,该I/O执行过程被设定到步骤P1的状态,而不论在最近检查点的I/O执行过程状态如何。
(5)重新开始曾经在最近检查点被执行的数据处理(步骤R5)。
当根据请求块在打印机I/O操作期间发生了故障时,执行中断错误标记为ON且它在整个主存储器恢复期间保持不变。然后一个I/O执行过程尝试重新执行该请求块且它发现执行中断错误标记为ON(步骤P2)。该I/O执行过程不是重新执行I/O操作而是在该请求块的结果码字段中设定一个错误码,并使应用过程成为准备就绪状态。
以此方式,当打印机I/O操作由于发生故障而在半路中断时,该打印机I/O操作不被再次重复,而是由应用过程应付诸如打印机堵塞错误这样的错误。
在打印机的情况下,最适合的方式是使执行中断错误标记作为一个三重标记,即完成/在执行/非执行。
图25显示了在此情况下由应用过程执行的流程图。
(1)把关于I/O操作的参数存储到主存储器中作为请求块(步骤S1)。将请求块的执行允许标记置于OFF,并将请求块的执行中断错误标记置于非执行。
(2)转换至等候状态直到请求块中描述的I/O操作得到完成为止(步骤S2)。
(3)当应用过程恢复其执行时,参照请求块的结果码字段在与I/O请求有关的应用过程侧执行完成步骤,并随后执行后续步骤(步骤S3)。
图26显示了I/O执行过程的流程图。
(1)等侯其执行允许标记为ON的请求块(步骤T1)。
(2)如果该请求块的执行中断错误标记为执行,在请求块的结果码字段中设定一个错误码,并使已经处于等候状态的应用过程成为准备就绪状态(步骤T2,T6)。
(3)否则,如果完成了执行中断错误标记,就在请求块的结果码字段中设定一个完成码,并使已经处于等侯状态的应用过程成为准备就绪状态(步骤T3,T7)。
(4)否则,设定I/O装置的寄存器并根据该请求块将正在操作标记置于ON(步骤T4)。
(5)在接收到来自I/O装置的完成中断时,将正在操作标记置于OFF,将执行中断错误标记设定为完成,并使已经处于等候状态的应用过程成为准备就绪状态(步骤T5)。
当在打印机I/O操作结束之后发生故障时,执行中断错误标记得到完成且它在整个主存储器恢复期间保持不变。然后一个I/O执行过程尝试重新执行请求块且它发现执行中断错误标记显示出完成(步骤T3)。该I/O执行过程不是重新执行该I/O操作而是在请求块的结果码字段中设定一个结束码,并使应用过程成为准备就绪状态。
以此方式,当在计算机中发生故障之前已经完成了一个打印机I/O操作时,该打印机I/O操作不再被重复,而是应用过程接收到一个结果码。
对于本领域的技术人员来说,其它的优点和修正是显而易见的。因此,本发明的更广阔的范围不仅限于在此显示和描述的具体细节、代表性的装置以及所示的例子。相应地,在不脱离如所附权利要求书及其等价物描述所确定的一般发明概念的精神或范围的前提下,可以做出各种修正。
权利要求
1.计算机系统中的一种I/O控制设备,该计算机系统包括一个或多个CPU(1a,1b)、一个主存储器(3)、以及一个或多个I/O装置(4a,4b),其特征在于所述CPU定期保存所述CPU的内部状态以及所述主存储器的内容以作为一个检查点,当所述计算机系统发生故障时,就恢复最近检查点的所述CPU的内部状态和所述主存储器的内容以恢复数据处理,该I/O控制设备包括I/O装置状态存储装置(34,A1,A2,1a),用于存储由所述CPU执行的所述I/O装置状态设定的运行记录数据;以及I/O装置状态恢复装置(1a,C1,C2,C3),用于通过首先初始化所述I/O装置并随后根据所述I/O装置状态存储装置存储的所述运行记录数据重新执行状态设定顺序,而将所述I/O装置的状态恢复到最近检查点的状态。
2.根据权利要求1的设备,其特征在于所述存储装置包括用于擦除由于设定了新的状态而变得多余的一部分已有运行记录数据的装置(1a,C2)。
3.根据权利要求1的设备,其特征在于所述I/O装置状态恢复装置包括用于跳过自最近检查点以来没有被进行新的状态设定的I/O装置的初始化和状态设定程序的重新执行的装置(1a,F1)。
4.根据权利要求1的设备,其特征在于进一步包括请求块产生装置(35),用于当所述计算机系统中的应用过程发出一个I/O请求时,在所述主存储器中产生包含执行所述I/O请求所需的信息的一个请求块;I/O执行过程(32,图4,图12中的H1,H2,H3),用于通过根据一个请求块执行I/O装置驱动例行程序而执行I/O操作;I/O执行过程初始化装置(图15中的J4),用于当在发生故障之后从最近检查点进行恢复时,初始化不处于初始状态的所述I/O执行过程,并使正在由所述I/O执行过程执行的I/O操作从开始处重新执行。
5.根据权利要求2的设备,其特征在于进一步包括请求块产生装置(35),用于当所述计算机系统中的应用过程发出一个I/O请求时,在所述主存储器中产生包含执行所述I/O请求所需的信息的一个请求块;I/O执行过程(32,图4,图12中的H1,H2,H3),用于通过根据一个请求块执行I/O装置驱动例行程序而执行I/O操作;I/O执行过程初始化装置(图15中的J4),用于当在发生故障之后从最近检查点进行恢复时,初始化不处于初始状态的所述I/O执行过程,并使正在由所述I/O执行过程执行的I/O操作从开始处重新执行。
6.根据权利要求3的设备,其特征在于进一步包括请求块产生装置(35),用于当所述计算机系统中的应用过程发出一个I/O请求时,在所述主存储器中产生包含执行所述I/O请求所需的信息的一个请求块;I/O执行过程(32,图4,图12中的H1,H2,H3),用于通过根据一个请求块执行I/O装置驱动例行程序而执行I/O操作;I/O执行过程初始化装置(图15中的J4),用于当在发生故障之后从最近检查点进行恢复,时初始化不处于初始状态的所述I/O执行过程,并使正在由所述I/O执行过程执行的I/O操作从开始处重新执行。
7.根据权利要求4的设备,其特征在于在所述主存储器保持的请求块中,所述I/O执行过程根据在最近检查点之前产生的一个请求块而开始执行一个I/O操作,而所述I/O执行过程根据在最近检查点之后产生的一个请求块把一个I/O操作延期到获得新的检查点。
8.根据权利要求5的设备,其特征在于在所述主存储器保持的请求块中,所述I/O执行过程根据在最近检查点之前产生的一个请求块而开始执行一个I/O操作,而所述I/O执行过程根据在最近检查点之后产生的一个请求块把一个I/O操作延期到获得新的检查点。
9.根据权利要求6的设备,其特征在于在所述主存储器保持的请求块中,所述I/O执行过程根据在最近检查点之前产生的一个请求块而开始执行一个I/O操作,而所述I/O执行过程根据在最近检查点之后产生的一个请求块把一个I/O操作延期到获得新的检查点。
10.根据权利要求7的设备,其特征在于当新检查点的获得已经完成时所述CPU被分配给所述I/O执行过程。
11.根据权利要求8的设备,其特征在于当新检查点的获得已经完成时所述CPU被分配给所述I/O执行过程。
12.根据权利要求9的设备,其特征在于当新检查点的获得已经完成时所述CPU被分配给所述I/O执行过程。
13.根据权利要求4的设备,其特征在于执行发出一个I/O请求的应用过程的CPU也执行管理根据所述I/O请求产生的请求块的I/O执行过程。
14.根据权利要求5的设备,其特征在于执行发出一个I/O请求的应用过程的CPU也执行管理根据所述I/O请求产生的请求块的I/O执行过程。
15.根据权利要求6的设备,其特征在于执行发出一个I/O请求的应用过程的CPU也执行管理根据所述I/O请求产生的请求块的I/O执行过程。
16.根据权利要求4的设备,其特征在于分配给所述I/O执行过程的CPU的数目根据所要处理的请求块的数目而恰当确定。
17.根据权利要求5的设备,其特征在于分配给所述I/O执行过程的CPU的数目根据所要处理的请求块的数目而恰当确定。
18.根据权利要求6的设备,其特征在于分配给所述I/O执行过程的CPU的数目根据所要处理的请求块的数目而恰当确定。
19.根据权利要求4的设备,其特征在于进一步包括这样的装置(图22中的P2),该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
20.根据权利要求5的设备,其特征在于进一步包括这样的装置,该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
21.根据权利要求6的设备,其特征在于进一步包括这样的装置,该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
22.根据权利要求7的设备,其特征在于进一步包括这样的装置,该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
23.根据权利要求8的设备,其特征在于进一步包括这样的装置,该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
24.根据权利要求9的设备,其特征在于进一步包括这样的装置,该装置用于在所述I/O装置状态恢复装置不试图恢复与所述I/O请求有关的I/O装置的状态的情况下,在发生一个错误时不重新执行所请求的I/O操作而向应用过程发出一个错误回答。
25.根据权利要求4的设备,其特征在于进一步包括这样的装置,该装置当故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,不重新执行所请求的I/O操作而向应用过程发出一个成功I/O完成回答。
26.根据权利要求5的设备,其特征在于进一步包括这样的装置,该装置当故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,不重新执行所请求的I/O操作而向应用过程发出一个成功I/O完成回答。
27.根据权利要求6的设备,其特征在于进一步包括这样的装置,该装置当故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,不重新执行所请求的I/O操作而向应用过程发出一个成功I/O完成回答。
28.根据权利要求7的设备,特征在于进一步包括这样的装置,该装置当故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,在不重新执行所请求的I/O操作而向应用过程发出一个成功I/O完成回答。
29.根据权利要求8的设备,其特征在于进一步包括这样的装置,该装置当计算机系统中的故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,不重新执行所请求的I/O操作而向I/O请求处理发出一个成功I/O完成回答。
30.根据权利要求9的设备,其特征在于进一步包括这样的装置,该装置当故障发生时,在I/O请求是一个输出请求且该I/O请求已经在故障发生之前得到完成的情况下,不重新执行所请求的I/O操作而向应用过程发出一个成功I/O完成回答。
31.计算机系统中的一种I/O控制方法,该计算机系统包括一个或多个CPU、一个主存储器、以及一个或多个I/O装置,其特征在于所述CPU定期保存所述CPU的内部状态和所述主存储器的内容作为一个检查点,当所述计算机系统发生故障时,就恢复最近检查点的所述CPU的内部状态和所述主存储器的内容以恢复数据处理,该I/O控制方法包括存储(图5中的A1)由所述CPU执行的所述I/O装置状态设定的运行记录数据;以及通过首先初始化所述I/O装置并随后根据所述存储的运行记录数据重新执行状态设定顺序,而将所述I/O装置的状态恢复(图6中的B1)到最近检查点的状态。
32.一种产品,包括包含有计算机可读取程序码的可由计算机使用的介质,该介质用于当计算机系统从故障发生处重新开始时使输入和输出(I/O)单元的状态被恢复到相应的检查点,所述产品中的该计算机可读取程序码包括用于当设定包括I/O装置的操作模式的状态时使计算机保存运行记录数据状态的计算机可读取程序码;及用于当计算机系统发生故障时使计算机初始化I/O装置并根据保存的运行记录数据设定I/O装置的状态的计算机可读取程序码。
33.一种产品,包括包含有计算机可读取程序码的可由计算机使用的介质,该介质用于当计算机系统从故障发生处重新启动时使输入和输出(I/O)单元的状态被恢复到相应的检查点,该计算机系统具有一个或多个CPU、一个主存储器、以及一个或多个I/O装置并定期保存所述CPU的内部状态和所述主存储器的内容作为一个检查点,当所述计算机系统发生故障时,就恢复最近检查点的所述CPU的内部状态和所述主存储器的内容以重新启动数据处理,所述产品中的该计算机可读取程序码包括用于当设定包括I/O装置的操作模式的状态时使计算机保存运行记录数据状态的计算机可读取程序码;用于当计算机系统发生故障时使计算机初始化I/O装置并根据保存的运行记录数据设定I/O装置的状态的计算机可读取程序码;用于当所述计算机系统中的过程发出一个I/O请求时使计算机在所述主存储器中产生包含执行所述I/O请求所需的信息的一个请求块的计算机可读取程序码;用于通过根据一个请求块存取所述I/O装置而使计算机执行一个I/O操作的计算机可读取程序码;计算机可读取程序码,用于在当发生故障之后从最近检查点重新启动时,使计算机在执行状态下初始化所述I/O执行过程并使正在由所述I/O执行过程执行的I/O操作从开始处重新被执行。
全文摘要
在一种计算机系统中,当CPU(1a,1b)执行I/O装置(4a,4b)的操作模式等的状态设定时,状态设定的运行记录数据被存储在设定运行记录存储区中。在计算机系统中发生故障时,I/O装置得到清除,且I/O装置的状态设定根据存储在设定运行记录存储区(34)中的状态设定运行记录数据而进行。因此,当过程重新开始时,I/O装置的状态能够被恢复到一个检查点的状态。
文档编号G06F11/14GK1165344SQ9710209
公开日1997年11月19日 申请日期1997年1月28日 优先权日1996年1月31日
发明者保科聪, 佐久间毅, 酒井浩 申请人:株式会社东芝
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1