存储器更新覆历保存装置和 存储器更新覆历保存方法 本发明涉及保存主存储器的更新覆历信息的存储器覆历保存装置和存储器更新覆历保存方法,上述主存储器的更新覆历信息对于实现使计算机系统的主存储器的内容复原的存储器状态恢复功能必须的。
在通常的计算机系统中,在已执行了程序的情况下。一旦进行完处理。一般说就不可能回到在此之前的状态重新进行处理。
然而,在下述各种应用技术中,却希望具有使存储器的内容回到以前的状态并从该处继续进行处理的功能(存储器状态恢复功能:memorystatus restore fuction)。
(1)软件调试
在程序执行过程中已产生了某种错误的情况下,通过返回到以前的状态,可以对错误的原因进行解析。
(2)容错系统
在系统工作中由于一种什么故障而不能继续进行处理的情况下。通过使之回到以前的状态并从该处重新进行处理的办法,可以使之继续工作而不使系统停止下来。
这样的容错技术,例如已公开于Philip A Bernstein,“Sequoia:用于事务处理的容错紧密连接多处理器”,IEEE Computer, Vol.21,No.2,1988之内。
(3)回逆法
在逻辑型的编程语言中,执行状态的回逆是一种基本操作。通过应用使存储器的内容回到以前地状态的功能。可以实现回逆。
作为实现以上那种存储器状态恢复功能的方法而研究出来的技术之一,有向后(backward)法。这样的技术已在例如Rok Sosic,“覆历高速缓存器:反向执行的硬件支持(History Cache:Hardware Supportfor Reverse Execution)”,Computer Architecture,Vol.22,No.5,1994中讲述。
在图1中,示出了为了用“向后”法实现存储器状态恢复功能所必须的现有的典型的计算机系统的构成。
在图1的系统中,设有与N个CPU311~CPU31N相对应的N个超高速缓(冲)存(储器)411~41N。超高速缓存411~41N通过系统总线50已连到存储器控制部分60上。
存储器控制部分60已连到主存储器70和前象缓冲器80上,控制对主存储器70和前象缓冲器80的存取。前象缓冲器80用于存放由主存储器70的更新前数据(previous data)及其更新地址(update address)这一组数据组成的更新覆历信息(前象)update history information(before-image)。
当存储器控制部分60发出了对主存储器70的写入要求时,在对主存储器70进行实际的写入存取之前,要先从主存储器70中读出写入对象的更新前数据,并将该读出数据及与之相对应的更新地址写入前象缓冲器80中去。
若采用这种构成,则在发生障碍时等等,仅仅向主存储器70中重新写入前象缓冲器80的更新覆历信息,就可以使主存储器70的内容复原到障碍发生之前的状态。
然而,在这种方式中,由于必须向存储器控制部分60中组装入控制对前象缓冲器80进行存取的缓冲器存取控制功能和用于控制为保存主存储器70的状态所必须的各种功能的状态保存功能,故存在着不能利用现有的存储器控制器,因而必须重新开发存储器控制部分60所用的专用存储器控制器的问题。因此,在现实情况下原封不动地沿用现有的计算机系统要实现存储器状态恢复功能是困难的。
本发明的目的是提供一种不对现有的计算机系统的存储器控制部分进行改造,原封不动地沿用现有的计算机系统可以容易地实现存储器状态恢复功能的存储器更新覆历保存装置和存储器更新覆历保存方法。
本发明的特征是:在用于已具备有1个以上的CPU、与各CPU相对应而设置的1个以上的超高速缓冲、主存储器、控制该主存储器的存储器控制器、把1个以上的超高速缓存与上述存储器控制器连接起来的总线的计算机系统中,保存为复原上述主存储器的存储内容所必须的更新覆历信息的存储器更新覆历保存装置中,具有用于把上述主存储器的更新之前的数据及其更新地址这一组数据作为上述更新覆历信息存放起来的缓冲器和被连到上述总线上并控制对上述缓冲器的更新覆历信息的写入的缓冲器存取控制装置。
上述缓冲器存取装置具备有指令发出装置用于在从上述CPU中已发出了对与之相对应的超高速缓冲进行写入存取要求的情况下,对从该超高速缓冲中发出到上述总线上去的指令作为应答后,把用于读出成为上述写入存取存要求的对象的上述主存储器上的数据的读入指令发出到上述总线上去;还具有更新覆历写入装置,用于对上述读出指令的发出作出应答后,用上述存储器控制器,把已从上述主存储器读出到上述总线上的数据和与之相对应的地址存放到上述缓冲器中去。
在该存储器更新覆历保存装置中。除存储器控制器之外。还另设有缓冲器存取控制装置,该装置已被连到总线上。缓冲器存取控制装置并不是在对主存储器的写入存取要求已送出存储器控制器时动作,而是在已从CPU有了对与之对应的超高速缓存进行写入存取要求的情况下,从该超高速缓存要发出到总线上去的指令,比如说,对于可达到总线上的其他的超高速缓存指使所对应的超高速缓存线无效化的无效化指令作出响应后自动地动作。即,当检测到无效指令后,缓冲器存取控制装置借助于应用由该无效化指令所要指定的超高速缓存线的地址的办法。把用于读出将成为写入存取要求对象的主存储器上的数据的读出指令发到总线上去。接下来,对该读出指令作出响应后把存储器控制器已从主存储器中读出到总线上的数据和与该数据相对应的地址用缓冲器存取控制装置写入缓冲器中去。
这样一来,采用设置可以和存储器控制器独立地进行动作的缓冲器存取控制装置的办法,就可以原封不动地沿用现有的计算机系统使之容易地实现存储器状态恢复功能而不必对现有的计算机系统的存储器控制器进行改造。
仅把已保持于超高速缓存中的更新数据读出到主存储器中去即可,由于在这一时刻不需要把更新前数据保存于缓冲器中8,故检查点处理的开销可以减小。
此外,缓冲器存取控制装置,在从超高速缓存发出的指令是来自主存储器或者可以接到总线上其他超高速缓存的对应的超高速缓存线的数据读出指令,和指使其他的超高速缓存的对应的超高速缓存线的无效化的读出和无效化指令的情况下,则不向总线上发指令,可以借助于来自超高速缓存的读出或无效化指令,原封不动地利用已读出至总线上的数据和对应的地址存放于缓冲器中去。
下面简单说明附图。
图1的方框图示出了为实现存储器恢复功能所必须的现有的多处理器系统的构成。
图2的方框图示出了应用了本发明的第1实施例的存储器更新覆历保存装置的多处理器系统的构成。
图3示出的是设于以上实施例的系统中的超高速缓存的构成例。
图4示出的是已保持于设于以上实施例的系统中的超高速施缓存中的超高速缓存线数据的状态。
图5的时序图示出了以上实施例中的存储器更新覆历信息的收集(acquisifion)动作。
图6的方框图示出了同上实施例的变形例的构成。
以下参照附图说明本发明的装置的实施例。在图2中示出了本发明的一个实施例的计算机系统的构成。
如图2所示,本实施例的计算机系统设有N个CPU(处理器)141~14N和与各CPU对应的N个超高速缓存171~17N。超高速缓存171~17N与存储器控制部分20和前象缓冲器控制部分21一起已被连接到系统总线16上。
存储器控制部分是对主存储器12进行存取控制的通常的存储器控制器。前象缓冲器控制部分21用于对把主存储器12的更新前数据及其地址这一组数据以堆栈形式存放起来的前象缓冲器13进行控制,包括有总线接口控制部分211,状态保存控制部分(status store controller)212,总线指令应答控制部分213,缓冲器存取控制部分214和总线指令发出控制部分215。
总线接口控制部分211与系统总线16直接相连,进行系统总线16的控制和总线指令的监视(snoop)。就是说,总线接口控制部分211总是对系统总线16进行着监视并根据已发到系统总线16上的指令进行动作。状态保存控制部分212控制为保存主存储器12的状态所必须的各种功能。总线指令应答控制部分213控制对已发出到系统总线16上去的指令返回应答的功能。缓冲器存取控制部分214与前象缓冲器相连,控制对前象缓冲器的存取。总线指令发出控制部分215控制发出为把主存储器12的状态保存到前象缓冲器12中去所必须的总线指令的功能。
超高速缓冲171~17N是一种反向复制(copy back)式的超高速缓存,遵照以下所说明的方式实现用于保持数据一贯性(data coherency)的规约。这些超高速缓冲存储器171~17N,在分别对应的CPU(处理器)141~14N中存在着1块超高速缓存的情况下起着2次超高速缓存的作用。另外,也可以把这些超高速缓存171~17N本身内藏于对应的CPU之内。
超高速缓存171~17N,如图3所示。由许多条,比如说216条超高速缓冲线(也叫做超高来缓存块)组成,每一超高速缓存线都具有保持超高速缓存线数据(比如说64字节)的数据存储器和用来保持管理已存放于数据存储器中的各超高速缓存线数据的信息的标记存储器(tagmemory)(比如说4个字节)。
在标记存储器中,存放表示对应的超高速缓存线数据的超高速缓存线地址的地址标记和,表示超高速缓存线数据的关态的3位的数据。超高速缓存线数据的状态由有效(Valid)“V”,修改(modified)“M”,共享(shared)“S”这三位的值的组合进行管理。有效“V”表示对应的超高速缓冲线数据是有效“1”。修改“M”表示在超高速缓存上处于已更新后的状态。共享“S”表示有可能在其他的处理器的超高速缓存上边也已经保持有相同的超高速缓存线数据。借助于这3位的值的组合,如图4所示,超高速缓存线线数据将取4个状态:无效(invalid),完全排斥(clean-exclusive),完全共享(clean-shared)和修改(modified)。
与反向复制超高速缓冲相关连,本发明中应监视的总线指令,包括下述指令。
“Read-Line”指令:是从主存储器中向超高速线存进行的超高速缓存线数据的读出指令。
这条指令在对于对来自CPU的某一地址的超高速缓存线的读出存取,在超高速缓存中不存在相当的有效的超高速缓存线数据,出现了超高速缓冲未命中(cache miss)的情况下发出。另外,超高速缓存未命中是表明在标记存储器中尚未存放表示作为存取的对象的超高速缓冲线数据的地址,和虽然已存有地址但有效位“V”为无效“0”的情况。对此,超高速缓存命中(caehe hit)是在标记存储器中已存放有作为对象的超高速线数据的地址。有效位“V”为有效“1”的情况。
“Read-Line-with-Invalidate”指令:这是一条使从主存储器中向超高速缓存进行的超高速缓存线数据的读出和已存放于其他的超高速缓存中的数据无效化的指令。
这一指令在对来自CPU的写入存取已产生了超高速缓冲未命中时发出。即,当在来自CPU的写入存取中产生了超高速缓存未命中时,可以预料,在该时刻,与保持同一超高速缓存线数据的其他的超高速缓存之间会产生不匹配。这是因为写入对象的超高速缓存线数据在从主存储器向超高速缓存内重新装入(refill)之后,要进行该超高速缓存线数据的重写的缘故。因此,在对来自CPU的写入存取产生了超高速缓存未命中的情况下,执行同时指使超高速缓存线数据的读出和使已存放于其他的超高速缓存中的数据无效化的指令。
“Write-Line”指令:这是使超高速缓存线数据从超高速缓存向主存储器写入的写入指令。
这条指令,在用来自CPU的指示清楚地表明把超高速缓存线数据写出至主存储器12中去的情况下。在产生了置换超高速缓存线数据的必要,把更新数据写出至主存储器12中去的情况下,和根据来自别的CPU的要求,把更新数据写出至主存储器12中去的情况下发出。
“Invalidate”指令:这是一条使已存于其他的超高速缓存中的数据无效化的无效化指令。
这一指令,在对于来自CPU的写入存取虽然在超高速缓存中已存在相当的线,但却是完全共享的情况下发生。完全共享是一种在其他的超高速缓存中有可能已存在着同一超高速缓冲线数据,而且这些超高速缓存线数据为同一值的状态。在该指令中,仅仅进行表明无效化对象的超高速缓存线数据的地址的传送,并不伴之以数据转送。
另外,除这些之外。还支持下述总线指令。
“Read-Line-non-Snoop”指令:不监视别的超高速缓存,存储器控制部分必须进行应答,并从主存储器中读出线数据。在本实施例中,不会从处理器和超高速缓存中发出。
除以上给出的指令之外,还有广为支持的指令,但由于和以下的叙述没有直接的关系,故不对它们进行说明。
在超高速缓冲存储器171~17N已分别内藏于对应的CPU中的情况下,结果就变成为由CPU本身发出上述的指令。
系统总线16是用可以支持的处理器总线等等构成多处理器构成的系统总线,包含有共享应答信呈线161,修改应答信号线162,总线指令信号线163,地址/数据信号线164。一般说除此之外还含有用于进行促裁的信号线。但由于和以下的叙述没有直接关系,故免予说明。
共享应答信号线161,对于由其他的CPU、超高速缓存发出来的指令,该指令用于通知保持即共享作为对象的超高速缓存线数据。
修改应答信号线162,对于由其他的CPU,超高速缓存发出来的指令,把该指令用于通知把已定为对象的超高速缓存线数数在已更新了的状态下保持下来。在该信号已被确认(assert)时,该指令就被异常结束(abort)。之后,已异常结束指令的从机在获得了系统总线之后,向存储器中写出更新超高速缓存线数据。另一方面,已发出了最初的指令的主机,在再度获得了系统总线之后,发出相同的指令。
还有,在共享应答信号线161和修改应答信号线162这两条应答线同时被确认完毕之后,其指令也同样地被异常结束。
总线指令信号线163,除了表示前边说过的总线指令的种类之外,还被用于传送与指令有关地各种信息。
地址/数据信号线164是总线指令用来传送定为其对象的超高速缓存线数据的地址和数据的信号线。这些信号线161-164,虽然在图2中归纳起来表示成一个,但也有用时分割来使用共用的信号线的方式和对地址/数据分别设置独立的信号线的方式,不论哪种方式都行。
其次,说明图2的多处理器系统的动作,即说明如何用前述总线指令实现超高速缓存之间的数据一贯性保持规约。
在这里,分别对发出指令并使存取启动一侧的CPU和超高速缓存(主处理器),其他的CPU,对超高速缓存已发出的指令进行动作的CPU和超高速缓存(从处理器),存储器控制部分20和前象缓冲器控制部分21的动作进行说明。
(1)主处理器的动作
首先,对发出指令并启动存取的主处理器的动作和与已发出的指令对应的超高速缓存的状态迁移进行说明。还有,假定主处理器为CPU141(超高速缓存171)来进行说明。
读出存取(超高速缓存储器命中):在CPU141要求进行读出存取的结果在超高速缓存171中已命中了超高速缓存的情况下,就从超高速缓存171中读出相当的数据。CPU141(超高速缓存171)不向系统总线16上发指令。这时,超高速缓存线的状态不变。
读出存取(超高速缓存未命中):在CPU141要求进行读出存取的结果在超高速缓存171中没有命中超高速缓存的情况下,CPU141(超高速缓存171)向系统总线16发出“Reed-Line”指令。
对此,如果介以修改应答信号线162修改应答信号已被确认,则结果就变成为其余的超高速缓冲172~17N之内的一个已保持有该线的更新数据。超高速缓存171,之后,从已对修改应答信号进行了断言的超高速缓存中读入已写出划主存储器12中的超高速缓存线数据,并存放于该超高速缓存的数据存储器中去。使超高速缓存线的状态变成为“完全共享”。
另一方面,如果修改应答信号未被确认,而介以共享应答信号线161共享应答信号已被确认,则结果就将变成为其余的超高速缓存在洁净的状态下保持该线。超高速缓存171使超高速缓存线的状态变成“完全共享”的同时,取入已从主存储器12中读出的数据并存放于数据存储器中去。
此外,在修改应答信号和共享应答信号不论哪一个都未被确认的情况下,在哪一个超高速缓冲中都未保持作为对象的超高速缓存线。超高速缓存171使超高速缓存线的状态变为“完全排斥”。在这种情况下,超高速缓存171也读入已从主存储器12中读出的数据并存放于数据存储器中。但是,如后边要说的那样,由于在本方式中控制为使之避开完全排斥状态,故本条件实际上不存在。
不论在哪一种情况下,超高速缓存171都把已从系统总线16中取入的超高速缓存线数据之内的必要的数据返送回CPU14中去。
写入(超高速缓存命中/修改):在CPU141已要求进行写入存取的结果。在超高速缓存171中进行超高速缓存命中,且对应的超高速缓存线数据为修改状态的情况下,就向相当的超高速缓存线中写入数据。CPU141(超高速缓存171)不向系统总线16发指令。这时,超高速缓存线的状态不变。
写入(超高速缓存命中/完全排斥):在CPU141已要求进行写入存取的结果,在超高速缓存171中进行超高速缓存命中,且对应的超高速缓存线数据为完全排斥的状态的情况下。向相应的超高速缓存线上写入数据。CPU141(超高速缓存171),不向系统总线16上发指令。超高速缓存171把相应的超高速缓存线的状态,变更为“修改”。但是,如后所述,由于在本方式中,被控制为使之避开完全排斥状态,故本条件实际上不存在。
写入(超高速缓存命中/完全共享):在CPU141已要求写入存取的结果,在超高速缓冲171中进行超高速缓存命中,且对应的超高速缓存线数据为完全共享的状态的情况下,CPU141(超高速缓存171)向系统总线16上发出“ Inva-lidate”指令。之后,超高速缓存171把相应的超高速缓存线的状态变为“修改”后写入数据。
写入(超高速缓存未命中):在CPU141已要求进行写入存取的结果,在超高速缓存171中未命中超高速缓存的情况下,向系统总线16上发“ Read-Line-With-Invalidate”指令。
对此,如果修改应答信号已被确认,则其余的超高速缓存172~17N之内的一个已保持该线的更新数据。之后,超高速缓存171从已对修改应答信号进行了维护的超高速缓存中读入已写出到主存储器12中的超高速缓存线数据并把它存放至数据存储器中。
另一方面,如果修改响应信号未被确认则超高速缓存171取入已从主存储器12读出来的数据,并放入数据存储器中。
不论是在哪种情况下。都把相当的超高速缓存线的状态变成“修改”总写入数据。
(2)从处理器的动作
其次,对于其余的处理器,超高速缓存所发出的指令的处理器和与之对应的超高速缓存(从处理器)的动作及状态迁移进行说明。还有,设主处理器是CPU141(超高速缓存171),从处理器为CPU14N(超高速缓存17N),对主处理器141所发出的每一指令进行说明。
对“Read-Line”指令的应答:
超高速缓存17N在“Read-Line”指令在“修改”的状态下已保持有作为对象的超高速缓存线数据的情况下,介以修改应答信号线162对修改应答信号进行维护后,通知已保持有更新数据。之后一超高速缓存17N发出“Write-Line”指令,便更新数据写出到主存储器12中去。超高速缓存17N使相当的超高速缓存线的状态变成为“完全共享”。
此外,超高速缓存17N,在“Read-Line”指令在“完全排斥”或“完全共享”的状态下已保持有作为对象的超高速缓存线数据的情况下,介以共享应答信号线161对共享应答信号进行维护之后,通知已保持有洁净数据。不论在哪一种情况下,超高速缓存17N使相应的超高速缓存的线的状态变为“完全共享”。
此外,超高速缓存17N在尚未保持对应的有效的超高速缓存线数据的情况下,什么也不作。
对“Read-Line-With-Invalidate”指令的应答:
超高速缓为17N,在“Read-Line-With-Invalidare”指令在“修改”的状态下已保持有作为对象的超高速缓存线数据的情况下,介以修改应答信号线162对修改应答信号进行维护,并通知已保持有更新数据。之后,超高速缓存17N发出“Write-Line”指令,把更新数据写出至主存储器12中。超高速缓存17N使相应的超高速缓存线的状态变成为“无效”。
此外,超高速缓存17N,在“Read-Line-With-Invalidate”指令在“完全排斥”或“完全共享”的状态下已保持有作为对象的超高速缓冲线数据的情况下,使相应的超高速缓存线的状态变成为“无效”。
超高速缓存17N在未保持有对应的有效的超高速缓存线数据的情况下,什么也不作。
对“Invalidate”指令的应答:
超高速缓存17N,在“Invalidate”指令在“完全排斥”或“完全共享”的状态下已保持有作为对象的超高速缓存线数据的情况下,把相当的超高速缓存线的状态变成“无效”。
此外,在没有保持对应的有效的超高速缓存线数据的情况下,超高速缓存17N什么也不作。
还有,在这种情况下,不能在“修改”的状态下,保持对应的线。
对“Write-Line”指令的应答:
超高速缓存17N什么也不作。
对“Read-Line-non-Snoop”指令的应答:
超高速缓存17N什么也不作。
(3)存储器控制部分20的动作。
存储器控制部分20对于各总线指令作下述动作。
对“Write-Line”指令的应答:在监视(Snoop)到已发到系统总线16上的“Write-Line”指令时,存储器控制部分20取入要从超高速缓存中写出的超高速缓存线数据并写入主存储器12的相当的地址中去。
对“Invalidate”指令的应答:什么也不作。
对“Read-Line”,“Read-Line-With-In-validate”指令的应答:存储器控制部分20对于这两条指令作相同的动作。
在对于这些指令已进行了修改应答信号维护的情况下,什么也不作。这表明维护后的从处理器的超高速缓存已经保持有更新数据。在这种情况下,跟在这些指令之后。从该超高速缓存中发出“Write-Line”指令,写出更新数据。
另一方面,在未对修改应答信号进行维护的情况下,从用已变成存取对象的超高速缓存线的地址给出的存储器位置中读出超高速缓存线数据,输出到系统总线16上去。
对“Read-Line-non-Snoop”指令的应答:
从用已变成存取对象的超高速缓存线的地址给出的存储器位置中读出超高速缓存线数据,并输出到系统总线16上去。
(4)前象缓冲器控制部分21的动作
其次,对于每一条将要发到系统总线16上去的指令,说明对于各总线指令的前象缓冲器控制部分21的动作。
对“Read-Line”指令的应答:
当总线接口控制部分211监视到已发到系统总线16上去的“Read-Line”指令时,状态保存控制部分212就使总线指令应答控制部分213起动。总线指令应答控制部分213介以总线接口控制部分211维护共享应答信号。这样一来,就可以把已变成主处理器的超高速缓存的现在处理对象的超高速缓存线的状态变成为“完全共享”的状态而不是“完全排斥”。因此,在之后对该超高速缓存线发出了写入存取要求的情况下。可以引起“Invalidate”指令的发出:且可以保存更新前的数据。
另外,作为处理器和超高速缓存的功能,在具有避开“完全排斥”状态的功能的情况下,前象缓冲器控制部分21不必对共享应答信号进行维护。
对“Invalidate”指令的应答:
当总线接口控制部分211监视到已发到系统总线16上的“Invalidate”指令时,状态保存控制部分212就使总线指令应答控制部分213起动。总线指令应答控制部分213介以总线接口控制部分211对共享应答信号和修改应答信号进行维护。这样一来,结果就变成为“Invalidate”指令被异常结束,之后,在主处理器再次获得了系统总线后,再发出相同的指令。
总线指令应答控制部分213,直到结束下述处理之前,对于已再次发出的“Invalidate”指令,对共享应答信号和修改应答信号进行维护并继续异常结束。
状态保存控制部分212使总线指令发出控制部分215起动。总线指令发出控制部分215,为了获得更新前的超高速缓存线数据,发出对由已介以总线接口部分211得到的已变成为无效对象的超高速缓存线的地址给出的存储器位置的“Read-Line-non-Snoop”指令,并从主存储器中读取更新前的数据。
此外,状态保存控制部分212还起动缓冲器存取控制部分214,并把存储器控制部分20已从主存储器12中读出后输出到系统总线16上去的超高速缓存线数据由总线接口控制部分转送至缓冲器存取控制部分214,并与地址值一起写入前象缓冲器13中去。
当该处理结束之后,总线指令应答控制部分213就中止对再次发出的“Invalidate”指令的异常结束。
此外,状态保存控制部分212还存储已实施了上述处理的超高速缓存块的地址,之后,在再次对同一地址发出“Invalidate”指令的情况下就不再理会它。
在图5中示出了对上述“Invalidate”指令的应答处理的动作时序。当总线指令发出控制部分215确认了“Invalidate”指令后。就开始用于使用该时的地址(AD)从主存储器12中读出地址(AD)的更新前数据(D1~D4)的“Read-Line-non-Snoop”指令。这时各个超高速缓存对于该指令不进行监视动作。
存储器控制部分20对“Read-Line-non-Snoop”指令作出应答,并控制已设于与主存储器12之间的地址线(MM address),数据线(MM data),读写控制线(MM RAS#,CAS#,WE#),从主存储器12的地址(AD)中读出超高速缓存线数据(D1-D4)并将之输出至系统总线16的数据总线(data bus)上。
另一方面,在前象缓冲器控制部分21中,也把地址(AD)送至缓冲器存取控制部分214。缓冲器存取控制部分214控制已设于与前象缓冲器13之间的地址线(BIB address),数据线(BIB data)和读写控制线(BIB RAS#,CAS#,WE#),并把地址(AD)和已输出至系统总线16的数据总线(data bus)上边的数据(D1-D4)这一组数据,堆叠于前象缓冲器13的相应的入口中去。
对“Read-Line-With-Invalidate”指令的应答:
在伴随着“Read-Line-With-Invalidate”指令的发出,修改应答信号已被确认的情况下,可知已进行了维护的超高速缓存表明已保持有更新数据,而且其处理器在最新的检查点以后已执行了写入存取。因此,在该时刻以前的数据已存放于前象缓冲器13中,不需要再次向前象缓冲器13中存放该地址的数据。因此,状态保存控制部分112什么也不作。
另一方面,在伴随着“Read-Line-With-Invalidate”指令的发出,修改应答信号未被确认的情况下,就使缓冲器存取控制部分起动,把存储器控制部分20从主存储器12中读出并已输出到系统总线16上的超高速缓存线数据从总线接口控制部分211转送至缓冲器存取控制部分214,并和地址值一起写入前象缓冲器13中。
在这种情况下,没有必要发出“ Read-Line-non-Snoop”指令。
对“Write-Line”指令的应答:什么也不作。
其次,对前述那样地动作的多处理器系统中的检查点处理进行说明。
检查点重新运行方式是一种定期地把关于系统的执行状态的信息保存到存储器中去(把这叫做检查点处理),在发生障碍时,采用重新运行其前一检查点的办法,使处理重新进行的系统恢复办法。
在检查点时,在把处理器141~14N的内部状态写出到主存储器12中去的同时,把各超高速缓冲171~17N的处于“修改”状态的全部的超高速缓冲线的数据写回到主存储器12中去。另外,由于实际上把处理器内部状态向主存储12的写出也介以超高速缓存进行,故在总线指令上不需特别的关照。超高速缓存171~17N把已写回到主存储器12中去的超高速缓存线的状态变成“完全共享”或“无效”。超高速缓存线数据向主存储器12的写回用“Write-Line”指令进行,故这时不会发生向前象缓冲器13进行的数据保存。
另外,前象缓冲器13的内容在已获取到检查点时被清除,而在重新进行通常的加工处理时,开始向前象缓冲器13进行的更新覆历信息的写入。重新运行时,不仅仅各CPU的内部状态,主存储器12的状态也被复原至上一次检查点时的状态。该主存储器12的状态恢复,用逐次读出已存储于前象缓冲器13中的更新前数据并写回到主存储器12的对应地址中去的办法实现。
倘采用这种方式,则由于在检查点时,仅仅把已保持在反向复制超高速缓存中的更新数据写出到主存储器16中去即可,在这一时刻没必要把更新前数据保存到前象缓冲器13中去,故可以减小检查点处理的开销。
如上所述,在该实施例中,除由通常的存储器控制器构成的存储器控制部分20之外,还另设一个前象缓冲器控制部分21,该前象缓冲器控制部分21已连到系统总线16上。前象缓冲器控制部分21并不是在对主存储器16的写入存取要求已送到存储器控制部分20中去时才动作,而是在CPU有了对与之对应的超高速缓存写入存取要求时,对从该超高速缓存将发到系统器线16上的指令作出响应而自动地起动,从主存储器12发出用于读出更新前数据的指令。这样一来。通过采用设置与存储器控制部分20可独立动作的前象缓冲器控制部分21的办法,原封不动地沿用现有的计算机系统而不对现有的计算机系统的存储器控制器20进行改造,就可容易地实现存储器状态恢复功能。
另外,本实施例还可把前象缓冲器控制部分21对“Invalidate”指令和“Write-Line”指令的动作变形如下。
变形例:
对“Invalidate”指令的应答:
当总线接口控制部分211监视到已发到系统总线16上的“Invalidate”指令时,状态保存控制部分212起动总线指令应答控制部分213。总线指令应答控制部分213,直到下述处理结束为止,对于对同一地址的“Write-Line”指令进行共享应答信号维护,继续进行异常结束。
状态保存控制部分212使总线指令发出控制部分215起动。总线指令发出控制部分215为了得到更新前的超高速缓存线数据,发出对用介以总线接口控制部分211得到的已变成无效对象的超高速缓存线的地址给出的存储器位置的“Read-Line-Snoop”指令。
状态保存控制部分212还起动缓冲器存取控制部分214,把存储器控制部分20从主存储器12读出并已输出到系统总线16上的超高速缓存线数据,从总线接口控制部分211转送至缓冲器存取控制部分214并和地址值一起写入到前象缓冲器13中去。
该处理结束后,总线指令应答控制部分213中止对对同一地址的“Write-Line”指令的异常结束。
对“Write-Line”指令的应答:
如上所述,当在对“Invalidate”指令的更新前超高速缓存线数据读入处理中,总线接口控制部分211监视到已发到系统总线16上的“Write-Line”指令时,如果该指令是对同一地址的指令,则总线指令应答控制部分213对共享应答信号和修改应答信号进行维护并进行异常结束。
即使在该处理执行中以外和执行中,在对于不同的地址的情况下什么也不作。
在上述的说明中,虽然用独立的存储器构成前象缓器13并已连接到前象缓冲器控制部分21上,但利用主存储器12的一部分来实现前象缓冲器也是可能的。这样的变形例示于图6。
在图6的系统构成中,前象缓冲器13A已用主存储器12A的一部分的存储区实现。另外,缓冲器存取控制部分21A也被连接到总线指令发出控制部分215上,且为了对前象缓冲器13A进行存取,具有对系统总线16发指令的功能。
总线存取控制部分214A,在转送更新前数据和更新地址时,为了把这些要存放于主存储器12A中的前象缓冲器13A中去,起动总线指令发出控制部分215。指令发出控制部分215介以总线接口控制部分211发出两条“Write-Line”指令。
一条指令用于存放更新前数据,另一条用于存放相应的地址。
倘采用该变形例,不必设置2个独立的存储器,因而可以廉价地构成系统。
在以上的第1实施例中,作为超高速缓存用反向复制型的超高速缓存进行了说明,但如照下述来作,则对于写入通过(Write through)型的超高速缓存也可进行更新前数据的保存。
在这里虽然以图2的超高速缓存171~17N具有在读入通过模式下动作的功能的情况来例进行说明,但即便是写入通过专用的超高速缓存也可同样地实现。
在写入通过模式下动作的超高速缓存的状态有(1)无效、(2)有效这两种。如作为有效的一个例子举出完全共享时,则用图4的状态管理表就可以应用无效和完全共享这两个状态进行管理。在写入通过的情况下,由于总是把同一数据写入主存储器和超高速缓存中去,故不会有修改状态。
作为从超高速缓存171~17N向系统总线16发出的指令的种类,支持下述两条。
“Read-Line”指令:超高速缓存线数据的读出。
这条指令与第1实施例相同,并在对于对来自CPU的某一地址的超高速缓存线的读出存取,在超高速缓存中不存在相当的有效的超高速缓冲线数据,超高速缓存未命中的情况下发出。
“Write-Word”指令:数据的写入。
这一条指令对来自CPU的写入存取,与超高速缓存中的该数据的有无无关系地发出。
系统总线16也作成为与第1实施例的构成相同。但是,在本实施例中,在共享应答信号线161,修改应答信号线162已同时被确认的情况下,仅仅应用使该指令异常结束这一功能。
其次,将说明在写入通过动作的超高速缓存中,如何应用上边说过的总线指令实现超高速缓存之间的数据一贯性保持规约。在这里也和第1实施例一样,分别对主处理器,从处理器,存储器控制部分20和前象缓冲器控制部分21的动作进行说明。
(1)主处理器的动作
首先,对发出指令并起动存取的主处理器的动作和与已发出的指令对应的超高速缓存的状态迁移进行说明。另外,设主处理器是CPU141(超高速缓存171)进行说明。
读出存取(超高速缓存命中):在CPU141已要求读出存取的结果,在超高速缓存171中已命中了超高速缓存的情况下,从超高速缓存171中读出相应的数据。CPU141(超高速缓存171)不向系统总线16上发指令。这时,超高速缓存线的状态不变。
读出存取(超高速缓存未命中):在CPU141已要求读出存取的结果,在超高速缓存171中未命中超高速缓存的情况下。CPU141(超高速缓存171)向系统总线16上发“Read-Line”指令。
超高速缓存171使超高速缓存线的状态变成“完全共享”的同时,取入已从主存储器12中读出来的数据,存放于数据存储器中。
超高速缓存171把已从系统总线16上取入了进来的超高速缓存线数据之内所需的数据返回到CPU141中去。
写入(超高速缓存命中):CPU141已要求写入存取的结果,在超高速缓存171中未命中超高速缓存的情况下,在写入对应的超高速缓存线数据的同时。向系统总线16上发“Write-Word”指令,改写主存储器12的数据。这时超高速缓存线的状态不变。
写入(超高速缓存未命中):在CPU141已要求写入存取的结果,在超高速缓存171中未命中超高速缓存的情况下,就向系统总线16上发“Write-Word”指令,改写主存储器12的数据。这时,超高速缓存线的状态不变。
(2)从处理器的动作
其次,对处理器和与之对应的超高速缓存(从处理器)对其他的处理器,超高速缓存所发出的指令的动作和状态迁移进行说明。另外,设主处理器为CPU141(超高速缓存171),从处理器为CPU14N(超高速缓存17N)。
对“Read-Line”指令的应答:什么也不作。
对“Write-Word”指令的应答:在指令在“完全共享”的状态下已保持有作为对象的超高速缓存线数据的情况下。超高速缓冲17N使相当的超高速缓存线的状态变成为“无效”。
(3)存储器控制部分
存储器控制部分对于各总线指令作如下动作。
对“Read-Line”指令的应答:从由已成为存取对象的超高速缓存线的地址给出的存储器位置中读出超高速缓存线数据并输出至系统总线16上。
对“Write-Word”指令的应答:读入从超高速缓存要写出的数据,写入存储器12的相当的地址中去。
(4)前象缓冲器控制部分
其次,对发到系统总线16上去的每一指令,说明前象缓冲器控制部分21对各条指令的动作。
对“Read-Line”指令的应答:什么也不作。
对“Write-Word”指令的应答:当总线接口控制部分211监视到已发到系统总线16上的“Write-Word”指令时。状态保存控制部分212就使总线指令应答控制部分213起动。总线指令应答控制部分213介以总线接口控制部分211把共享应答控制信号和修改应答信号维护于共享应答信号线161和修改应答信号线162上。因此,结果变成为“Write-Word”指令已被确认。之后,在主处理器再度获得系统总线之后,再发同一指令。
总线指令应答控制部分213,直到下述处理结束为止,对于再发出的“Write-Word”指令维护共享应答信号和修改应答信号,继续进行异常结束。
状态保存控制部分212起动总线指令发出控制部分215。总线指令发出控制部分215,为了得到更新前的超高速缓存线数据,发出对由介以总线接口控制部分211得到的已变成为无效对象的超高速缓存线的地址给出的存储器位置的“Read-Line”指令。
此外,状态保存控制部分212还起动总线存取控制部分214并把存储器控制部分20从主存储器12中读出且已输出到系统总线16上去的超高速缓存线数据,从总线接口控制部分211传送到缓冲器存取控制部分214中去,并和地址值一起写入前象缓冲器13中去。
当该处理结束后,总线指令应答控制部分213就将中止对已再次发出的“Write-Word”指令的异常中断。
此外,状态保存控制部分212存储已执行过上述处理的超高速缓存块的地址,在之后,再发出对同一地址的“Write-Word”指令的情况下,不予理会。
还有,在本例中,虽然以线单位对于“Write-Word”指令已保存了更新前数据,但如果字数据的读出得到支持,也可以以字单位保存更新前数据。
其次,对像上述那样地动作的多处理器系统中的检查点处理进行说明。
检查点的处理用把处理器的内部状态写出到主存储器中去的办法实现。但是,由于是一种写入通过型超高速缓存,故没必要把超高速缓存的内容写出。
本发明并不受限于上边说过的实施例,经种种变形后实施是可能的。例如,虽然上述说明以写入通过超高速缓存为对象,但更一般地说来,即便是用于不具有超高速缓存的计算机系统或具有非超高速缓存存取动作模式的计算机系统中去,用同样的控制,也可实现存储器状态恢复功能。
此外,虽然说明的是具有多个处理器141~14N的多处理器系统,但只要超高速缓存具有同样的功能(只要处理器发出改写超高速缓存内的数据的无效指令),则即便是对由单一处理器构成的计算机系统也可以应用。另外,对于超高速缓存不是一个而是采取阶层构造的情况也同样可以应用。就是说,只要是具有多处理器对应的CPU和超高速缓存的系统,就可以应用。
如以上说明的那样,倘采用本发明,则前象缓冲器控制部分根据已从某一超高速缓存或CPU发到系统总线上去的指令,把含有已保持于主存储器中的更新前数据的超高速缓存线数据保存到前象缓冲器中去。因此,采用给系统总线附加上前象缓冲器控制部分而不对现有的计算机系统的系统总线,处理器,超高速缓存和存储器控制部分进行任何处理的办法,使得不对现有的计算机系统的存储器控制部分进行改造,只附加硬件就可以实现存储器状态恢复功能,因而可以原封不动地沿用现有的计算机系统。
此外,由于不是在向主存储器写入数据时,而是在向超高速缓存写入数据时获取更新前数据,故在应用到已利用了检查点重新运行这种系统恢复手法的系统中去的情况下,在检查点时,由于仅把已保持在超高速缓存中的更新数据写出到主存储器中即可,不必在该时刻把更新前数据保存到缓冲器中去,故可以减少检查点处理的开销。