在执行用户程序的多处理器中服务异步中断的方法和系统的制作方法

文档序号:6543928阅读:137来源:国知局
专利名称:在执行用户程序的多处理器中服务异步中断的方法和系统的制作方法
技术领域
本发明涉及为异步中断提供服务的方法和系统,更具体而言涉及到在执行用户程序的多处理器中为中断提供服务的方法和系统。
背景技术
本申请要求了临时申请-序列号为60/557,812(HP PDNO200403395-1(2162-28500))的权益,在此将其全部引入以供参考,就好像在以下将其全文复制了一样。此外,本申请还涉及到同时提交的下列申请申请序列号(HP PDNO 200316143-1(2162-22100)),题目为“Method and System of Executing User Programs onNon-Deterministic Processors”;申请序列号(HP PDNO 200316183-1(2162-22400)),题目为“Method and System of ExchangingInformation Between Processors”;以及申请序列号(HP PDNO200402489-1(2162-30600)),题目为“Method and System ofDetermining Whether A User Program Has Made a System LevelCall”。
至少两种类型的计算故障可能是计算机系统设计者所关注的。第一种故障可能是硬件故障,诸如处理器故障或不可复原的存储器错误。第二种故障可能是计算故障,诸如可能会由宇宙辐射改变硬件中位的状态而引起。为了使计算机系统在有硬件故障的情况下保持操作或检测并恢复计算故障,一些计算系统具有执行相同软件应用的多处理器。如果处理器之一遭受硬件故障,那么所述计算用仍然正常起作用的一个或多个处理器来继续。比较多处理器的输出可以允许检测并纠正计算故障。
有时执行相同软件应用的处理器采用逐个周期或严格的锁步方式操作,每个处理器都被提供了复制的时钟同步信号并且逐周期地执行相同的软件代码。尽管处理器时钟同步频率已经增加了,但是小片(die)尺寸也增加了。增加的时钟频率结合较大的小片尺寸,使得难于控制在计算机系统的时钟同步信号中的相位差,因此同样难于实现严格的锁步。此外困难还可能包括处理在一个处理器而不在其它处理器中发生的可复原错误(软错误)。为了解决这些困难,一些计算机生产商可以实现宽松的锁步(lock-step)系统,其中处理器执行相同的代码,但是不必采用逐个周期的方式或按照相同的挂钟时间执行。为了确保执行相同代码的处理器互相不差得太远,这些系统计数已执行的指令,并且在预先确定的指令数目到期之后,通过停滞较快的处理器来允许较慢的处理器赶上来以便达到同步。
然而,在处理器设计中新兴技术允许非确定性的处理器执行。非确定性的处理器执行可以意味着被提供有相同软件应用指令的多处理器将不必按相同的次序或使用相同的步骤数目来执行所述指令。所述差异可以归因于下列改进,诸如推测性执行(诸如分支预测),乱序处理和在处理器内实现的软错误恢复。从而,执行相同软件应用的两个或多个处理器可以不必精确地执行相同的指令序列,因此严格的锁步容错以及依赖于对退出指令的计数宽松的锁步容错也许是不可能的。

发明内容
本发明提供了一种基于处理器的方法,包括在第一处理器上执行用户程序,并且在第二处理器上复制拷贝所述用户程序;由所述第一和第二处理器这二者接收异步中断;在第一处理器上对在所述第一处理器上执行的所述用户程序的被同意的系统调用执行中断服务例程;以及在所述第二处理器上对在所述第二处理器上执行的所述用户程序的被同意的系统调用执行中断服务例程。
一种计算系统,包括第一处理器,可操作来执行用户程序;和第二处理器,与所述第一处理器耦合,所述第二处理器可操作来执行所述用户程序的复制拷贝;其中所述第一处理器可操作来向所述第二处理器提供信息,所述信息表明中断已经被置为有效和建议的用户程序系统调用号,在所述系统调用号为所述中断提供中断;其中所述第二处理器可操作来向所述第一处理器提供信息,所述信息表明中断已经被置为有效和建议的用户程序系统调用号,在所述系统调用号为所述中断提供服务;其中在被同意的各用户程序系统调用号,第一和第二处理器中的每个可操作来为所述中断提供服务。


为了详细说明本发明的示例性实施例,现在将参照附图,其中图1举例说明了依照本发明实施例的计算系统;图2非常详细地举例说明了依照本发明实施例的计算系统;图3举例说明了依照本发明实施例的部分计算系统;图4举例说明了依照本发明至少一些实施例的示例性时间线;图5A和5B举例说明了可以由依照本发明实施例的中断处理例程来实现的流程图;图6依照本发明实施例举例说明了可以在同步逻辑内实现的流程图;图7依照本发明实施例举例说明了可以由系统调用实现的流程图;图8举例说明了依照本发明实施例的时间线;图9举例说明了依照本发明实施例的时间线;图10举例说明了依照本发明实施例的时间线;图11举例说明了依照本发明实施例的时间线;图12A和12B依照本发明实施例举例说明了可以由不合作的过程处理例程来实现的流程图;图13举例说明了依照本发明实施例的又一时间线;和图14依照本发明实施例举例说明了可以由过程等级重组例程(process level reintegration routine)实现的流程图。
具体实施例方式
标记和术语遍及下列描述使用某些术语来指代特定的系统组件。本领域技术人员将理解,计算机制造公司可以指不同名字的组件。本文献不打算区分那些名称不同而不是功能不同的组件。
在下面论述中以及在权利要求中,以无限制的方式使用术语“包括”和“包含”,从而应该将其解释为“包括但不限于”。同样,术语“耦合”或“连接”意指间接的或直接的连接。从而,如果第一设备与第二设备耦合,那么该连接可以经由直接连接,或经由其它设备和连接来间接的电连接。
下列论述针对本发明的各个实施例。尽管这些实施例中的一个或多个可以是优选的,但是不应该把所公开的实施例解释或使用为对本公开内容的限制。另外,本领域内技术人员将理解下列描述具有广泛的应用,并且任何实施例的论述对该实施例来说仅仅是示例性的,而不意味着把所公开的范围限制在该实施例中。
图1举例说明了依照本发明实施例的计算系统1000。特别地是,所述计算系统1000可以包括多个多处理器计算机系统10。在一些实施例中,可以只使用两个多处理器计算机系统10,并且照此计算系统1000可以实现双模冗余(DMR)系统。如在图1中举例说明,所述计算系统1000包括三个多处理器计算机系统10,因此实现三模冗余(TMR)系统。不管所述计算机系统是双模冗余还是三模冗余,所述计算系统1000都可以通过由所述多处理器计算机系统冗余地执行用户程序来实现故障容错。
依照本发明实施例,优选地是,每个多处理器计算机系统10包括一个或多个处理器,并且如在图1中所举例说明的四个处理器。图1的每个处理器具有表明是处理器的开始“P”。此外,向每个处理器给出字母标识“A”、“B”或“C”以便分别表明处理器在所述多处理器计算机系统10A、10B和10C之一内的物理位置。最后,向每个处理器给出数字标识以便表明处理器在每个多处理器计算机系统内的位置。从而,例如,在多处理器计算机系统10A中的处理器具有标识“PA1”、“PA2”、“PA3”和“PA4”。
依照本发明实施例,可以在逻辑上分组来自每个多处理器计算机系统10的至少一个处理器以便形成逻辑处理器12。在图1的说明性实施例中,把处理器PA3、PB3和PC3分组以便形成逻辑处理器12。依照本发明实施例,在逻辑处理器内的每个处理器基本上同时执行用户程序的复制拷贝,从而实现了容错。特别地是,向在逻辑处理器内的每个处理器提供相同用户程序指令流,并且所述每个处理器计算相同的结果(假定没有错误),但是在所述逻辑处理器内的处理器不采用逐周期或严格的锁步方式;更确切地讲,宽松地锁步所述处理器,同步和中断处理的发生是基于会合点(rendezvous point)的(如下所述)。依照某些实施例,所述处理器可以具有非确定性的执行,并且从而严格的锁步也许不会是可能的。如果处理器之一发生了故障,其余一个或多个处理器可以继续工作,而不会影响总体系统性能。
由于在逻辑处理器内可以有两个或多个处理器执行相同的用户程序,所以可以产生复制的读取和写入,诸如对输入/输出(I/O)设备14和16的读取和写入。所述I/O设备14和16可以是任何合适的I/O设备,例如网络接口卡、软盘驱动器、硬盘驱动器、CD ROM驱动器和/或键盘。为了故障检测目的而比较所述读取和写入,每个逻辑处理器具有与其相关联的同步逻辑。例如,处理器PA1、PB1和PC1可以形成与同步逻辑18相关联的逻辑处理器。同样,处理器PA2、PB2和PC2可以形成与同步逻辑20相关联的逻辑处理器。所述逻辑处理器12可以与同步逻辑22相关联。最后,处理器PA4、PB4和PC4可以形成与同步逻辑24相关联的逻辑处理器。从而,每个多处理器计算机系统10可以经由互连26来与同步逻辑18、20、22和24中的每一个均耦合。所述互连26可以是外设组件互连(PCI)总线,并且特别地是串行PCI总线,不过可以等效地使用其它总线和/或网络通信模式。
每个同步逻辑18、20、22和24包括表决(Voter)逻辑单元,例如同步逻辑22的表决逻辑28。下列论述—当针对同步逻辑22的表决逻辑28时—同样适用于在每个同步逻辑18、20、22和24中的每个表决逻辑单元。所述表决逻辑28起到合并来自处理器的读取和写入请求的作用,并且用于交换在处理器之间的信息。为了解释目的,认为在逻辑处理器12中的每个处理器执行其用户程序的拷贝,而且每个处理器向网络接口34产生读请求。逻辑处理器12的每个处理器把其读请求发送到表决逻辑28。所述表决逻辑28接收每个读请求,比较所述读请求,并且(假定所述读请求同意)向所述网络接口34发出单个读请求。
响应于由同步逻辑所发出的单个读请求,说明性的网络接口34向所述表决逻辑28返回所请求的信息。随后,表决逻辑复制并把所请求的信息传送到逻辑处理器中的每个处理器。同样,对于其它输入/输出功能,诸如向其它程序(可能在其它逻辑处理器上执行)写入并转送分组消息,所述同步逻辑确保所述请求匹配,继而向适当的位置转送单个请求。如果在逻辑处理器中任何一个处理器不能正常地起作用(例如,没能产生请求、没能在指定时间内产生请求、产生了不匹配的请求或完全故障),那么所述用户程序可以根据所述逻辑处理器的、其余一个或多个处理器的请求来继续。同样,对于外部产生的通信,所述同步逻辑复制所述外部通信并且向每个处理器提供所述通信。在外部产生的、对直接存储器访问(亦称远程DMA)请求的情况下,所述同步逻辑复制用于分发的请求,并且根据那些请求比较并合并由每个处理器所提供的数据。
除把读取和写入向外部接口(诸如网络接口34)合并,以及复制来自那些外部接口的消息和数据之外,同步逻辑还用于确保当请求该信息时向每个处理器提供相同的日时。特别地是,用户程序可以在它们执行中的某些点进行用于请求日时信息的系统调用。系统调用是诸如操作系统程序之类的特权程序(以比用户模式更高的特权模式执行)的任何调用。用于获得日时信息的系统调用只是属于系统调用范畴的程序系列的一个例子,并且下面将更充分地讨论在使处于逻辑处理器中的处理器之间的用户程序同步以及处理中断中对系统调用的任务。为了在用户程序中相应的执行点为每个用户程序提供相同的日时(尽管当到达那些执行点时挂钟时间可能会有所差异),依照本发明实施例的同步逻辑向在逻辑处理器中的每个处理器提供日时信息。也就是说,作为调度在每个处理器中的每个用户程序中的点来服务中断的过程的一部分(下面更彻底地讨论),所述同步逻辑向每个处理器提供日时信息。而不是当用户程序这样请求时内部导出日时,依照本发明实施例的日时系统调用利用由所述同步逻辑提供的最近的日时信息。采用这种方法,独立于是否在精确的相同挂钟时间执行所述用户程序,向每个用户程序提供相同的日时信息。
图2非常详细地举例说明了多处理器计算机系统10。特别地是,图2举例说明了依照本发明实施例的多处理器计算机系统10可以具有多个处理器,在图2的说明性的情况中是四个这种处理器34、36、38和40。虽然只示出了四个处理器,但是在不脱离本发明的范围和精神的情况下,可以使用任何数目的处理器。处理器34-40可以是单独地封装的处理器,处理器封装包括在单个封装内的两个或多个处理器片,或在单个片上的多处理器。每个处理器可以经由处理器总线44与I/O桥和存储器控制器42(以下称为I/O桥42)相耦合。所述I/O桥42经由存储器总线45把处理器34-40耦合到一个或多个存储器模块46。从而,所述I/O桥42控制对由一个或多个存储器模块46定义的存储区的读取和写入。所述I/O桥42还允许每个处理器34-40与同步逻辑(在图2中未示出)耦合,如由总线线路43举例说明。
仍然参照图2,可以划分由一个或多个存储器模块46定义的存储器,为每个处理器划分一个分区,因此允许每个处理器独立地操作。在可选择的实施例中,每个处理器可以具有它自己的集成存储器控制器,并且从而每个处理器可以具有它自己的专用存储器,并且这也往往在本发明的构思之中。计算系统1000实现了在逻辑处理器内处理器之间宽松地锁步执行用户程序,多处理器计算机系统10可以形成所述计算系统1000的一部分。宽松地锁步可以意味着逻辑处理器(例如逻辑处理器12)的每个处理器可以执行用户程序的复制拷贝,但是既不需要所述指令以严格的锁步方式执行,也不需要在相同的挂钟时间执行。从而,处理器34-40可以具有各种体系结构,包括(但不限于)非确定性的处理器,所述处理器可以不适合于严格的锁步执行也可以不依赖对退出的指令的计数。Intel’sItanium处理器系列(IPF)是处理器系列的一个例子,所述处理器实施非确定性的执行,因此不适合于严格的锁步执行也不依赖对退出的指令的计数。
图2还示出了每个多处理器计算机系统10包括耦合在I/O桥42和存储器模块46之间的重组逻辑(reintegration logic)48。图1的说明性实施例示出了以环形式互连的重组逻辑(线路51),但是可以等效地使用任何网络拓扑(例如,环、树、双环、完全连接)。操作中,重组逻辑48对I/O桥42是透明的,并且不妨碍对一个或多个存储器模块46的读取和写入。然而,如果在逻辑处理器内的一个处理器经受故障并且需要重新启动时,重组逻辑48起作用。
当重新启动处理器时,希望在与逻辑处理器中没有经受过错误的处理器相同的点开始执行用户程序。换句话说,重新启动的处理器可以到达其它处理器已经在用户程序中到达的点,而不是所述处理器经受过瞬时故障或硬件错误的那点。在图2举例说明的实施例中,在每个多处理器计算机系统10中的重组逻辑48复制来自未故障的多处理器计算机系统—其没有经受过其一个处理器错误—存储器的存储。从而,再次参照图1,线路51举例说明了每个多处理器计算机系统10把它们的重组逻辑48耦合在一起来使复制存储器分区便于进行以便可以在与逻辑分区中的其它处理器相同的状态开始重新启动的多处理器计算机系统。整个存储器的复制和由于在系统中一个处理器的故障而导致的在多处理器计算机系统中的所有处理器的随后重新启动,可以通过只具有单个存储器控制器(I/O桥)42来命令。在可选择的实施例中,可以有多个存储器控制器(例如每个处理器有一个),并且从而可以只需要复制一部分存储器(即那些对应于由要求重新启动的处理器所使用的存储器分区),并且同样可以只需要重新启动一部分处理器(即,那些与被复制的存储器相关联的处理器)。
在宽松地锁步系统中,处理器可以领先或滞后的原因可以有很多。例如,虽然每个处理器可以以基本上相同的时钟频率来执行指令,但是在实际时钟频率中即使是微小的差异随着时间的流逝也会导致显著的差异(定时的非确定性)。此外,依照本发明至少某些实施例实现的处理器具有非确定性的执行,并且从而即使精确地提供了相同的用户程序,所述处理器在用于到达用户程序中的公共点的执行步骤的数目上也会有很大分歧。更进一步,一些处理器可能遇到数据访问延迟和/或固有错误(非体系结构上可见的状态非确定性)。一些例子可以是一个处理器可能会遭受高速缓存未命中,而其它处理器可能没有遭受;一个处理器可能会遭受可纠正的存储器错误,从而要求执行其余处理器所不需要的恢复例程;以及一个处理器可能会遭受未命中翻译后备缓冲器,导致用户程序的附加处理但不影响其最后结果。同样,虽然处理器最后到达在所述用户程序中相同的执行点,但是所执行的指令数目和所要求执行那些指令的时间可能是不相同的。
带着这个想法逻辑处理器的处理器可能正在执行相同的指令流,但是可能不在指令流中的相同点,论述转到在这种环境中对中断的处理。即使按照精确相同的挂钟时间对每个处理器把相同的中断置为有效,由于各自处理器宽松地锁步执行,所以可能不会在用户程序相同的执行点把所述中断置为有效。由于中断断言本身是异步的这一事实,进一步地加大了困难。为了确保正常操作,在逻辑处理器内的每个处理器需要在所述用户程序指令流中相同的执行点服务中断。依照本发明实施例,通过把同步逻辑作为用于协定为所述中断提供服务的会合点的机制来利用,就实现了确保在所述指令流中相同的执行点服务中断。
依照本发明实施例,在逻辑处理器内的处理器彼此之间通信已经把特定的中断置为有效;以及在用户程序中所建议的点,在该点上挂起执行并且为所述中断提供服务。换句话说,在逻辑处理器中的处理器协定将服务(或将首先服务)哪个中断,并且还协定在用户程序中的哪个点上为所述中断提供服务。图3举例说明了部分计算系统1000以便描述各个组件的操作,所述组件合作以便协调服务中断。图3是图1系统的简化版本,意义在于在这种情况下的逻辑处理器50只包括两个处理器PA1和PB1。在另一意义上,还比图1更详细地描述了图3,这是因为图3举例说明了用于每个处理器的存储器分区52,以及所述处理器怎样经由I/O桥42与所述存储器分区和所述表决逻辑相耦合。从而,图3的逻辑处理器50包括均来自多处理器计算机系统10A和10B的一个处理器。处理器PA1与I/O桥42A耦合,所述I/O桥42A又把它们与同步逻辑18和PA1处理器的存储器分区52A相耦合。处理器PB1与其各自的I/O桥42B相耦合,其随后又耦合到同步逻辑18和PB1处理器的存储器分区52B。
依照至少一些实施例,为了建立会合点使逻辑处理器的处理器交换信息包括每个处理器向在所述同步逻辑18的表决逻辑56中的同步寄存器54写入信息。依照本发明实施例,会合点可以是任何适当的位置,诸如每当操作系统的分派程序功能执行并且设置要执行的其它任务时;软中断和故障处理程序;和由用户程序所发出的系统调用。在该说明书中以及权利要求中,术语“系统调用”用于指的是任何潜在的会合点。系统调用号可以是表明从任意的开始点已经发出了多少系统调用的数目。图3的位置72举例说明了在存储器分区52中可以驻留系统调用号的位置。在可选择的实施例中,可以等效地把系统调用号存储在不是位于存储器分区52中的寄存器中。在图3中举例说明的实施例中,把同步寄存器54预先指定为存储位置,但是可以写入数据的任何位置都将是可以的。在一些或所有处理器已经写入它们各自的信息之后,表决逻辑56把在所述同步寄存器54中的信息写回到在每个存储器分区52中的相应寄存器57集中。在写回操作期间,所述表决逻辑56还可以把其它信息写入寄存器57,所述信息诸如日时信息。把所述信息写入同步逻辑允许继续处理用户程序,同时等待其余处理器看见中断。在可选择的实施例中,每个处理器可以对在同步寄存器54中的存储位置发出一个等待的读操作,等待意味着所述读操作将不会完成,直到每个处理器写入关于所述中断的相应信息为止。虽然作为副产品的等待的读操作可以起同步所述处理器的作用,但是每个处理器在软件循环中等待完成读操作,从而作为用于交换关于中断信息的机制的、等待的读操作不允许所述用户程序继续执行。不管怎样执行数据交换,通过交换信息,在逻辑处理器内的处理器协调在所述用户程序中的哪一点上来服务中断。
经由包含中断信息的基于分组的消息,或经由专用中断信号线路,可以在任何时候对处理器把中断置为有效。还可以根据内源来对处理器把中断置为有效,所述内源诸如为被设置为在某些数目的处理器时钟周期之后到期的计时器。当由所述处理器接收并检测这种分组、信号线路或内部中断时,挂起用户程序并且调用中断处理例程。中断处理例程的目的是开始识别会合点的过程。相对于由所述中断请求的服务,中断处理例程不采取任何动作。会合点(例如,系统调用)是这样的点,在该点上完成调度所述会合点以及调度用于服务所接收的中断的程序的过程。
图4依照本发明实施例示出了一组事件的说明性的时间线(时间沿着页面向下而增加)。在标记PA1和PB1下面的垂直条分别表示由那些处理器对程序的执行。在垂直线路之间的块表示硬件和/或事件,而在中央块和垂直条之间的线路表示各个组件作为时间函数的交互作用。同时参照图3和4,假定每个处理器接收中断(如块5 8和指向每个垂直条的箭头所指示)。作为举例说明,在不同的时间对每个处理器把所述中断置为有效。当接收所述中断时,挂起所述用户程序并且执行中断处理例程(如由交叉影线区域59例示)。中断处理例程确定中断的性质,并且把关于所述中断的信息连同建议的系统调用号一起写入所述同步寄存器,其中在所述系统调用号为所述中断提供服务。写入中断信息和建议的系统调用号用线路60来举例说明,例如处理器PA1接收中断5,而且该处理器建议在系统调用号1001为所述中断提供服务。同样相对于处理器PB1,尽管可以在用户程序中以稍有不同的时间把所述中断置为有效,但是此后不久就执行中断处理例程(交叉影线区域59),并且所述中断处理例程向同步寄存器54写入指示,所述指示为已经接收到中断和所建议的、为所述中断提供服务的系统调用号,如线路62所示。中断处理例程一完成对同步寄存器的写入,所述用户程序就继续执行(从点61和63开始)。
一旦在逻辑处理器内的所有处理器已经向同步寄存器54写入其各自的数据,那么表决逻辑56向在逻辑处理器中的每个处理器的存储器分区中相应的寄存器57,写入在所述同步寄存器54中的至少一部分信息。依照本发明至少一些实施例,连同日时信息一起把来自所有处理器的信息写回到每个单个处理器。
按其为中断提供服务的系统调用号在一些实施例中是由在所述逻辑处理器内的任何处理器所建议的最高系统调用号。当每个单个处理器到达指定的系统调用号时(例如,进行日时调用,其系统调用号是建议的最高系统调用号),每个单个处理器的系统调用程序除执行其指定的任务之外,把中断服务例程置于其用于执行的各自分派队列中。从而,处理器PA1刚好在执行先前确定的系统调用号(在这种情况下是SCN 1001;如由在PA1时间线中阴影区域64所表明)之后,执行用于中断5的服务例程(如阴影区域67所表明)。作为选择,可以在系统调用之前立即执行所述服务例程。此后一段时间,滞后的处理器PB1到达先前确定的系统调用号(SCN 1001),执行所述系统调用(阴影区域66),并且执行用于示例性中断5(在PB1时间线中的阴影区域67)的中断服务例程。从而,尽管两个处理器没有同时接收所述中断,并且只是宽松地锁步所述处理器,但是会在用户程序中相同的点为中断提供服务。注意,如在图4中举例说明,在接收所述中断并且执行所述中断处理例程之后在每个处理器内的正常处理继续,直到到达执行所述中断服务例程的系统调用号为止。还要注意,在图4的说明性情况中,所述处理器就它们的用户程序执行点而言是略有分歧的,从而在所举例说明的方法中处理器既不停滞也不减缓。在图4中举例说明的一系列事件是简单的情况,并且向读者展示依照本发明实施例中断处理的性质。在更详细地说明由所述中断处理例程采用的步骤,以及由依照本发明实施例的系统调用执行的步骤之后,给出了其它情况。
图5(包括5A和5B)举例说明了依照本发明实施例的中断处理例程的流程图。所述过程可以由断言中断并且执行中断处理例程开始(块500)。下一步骤可以是禁止中断(块502),后面是确定触发了所述中断处理例程的中断是否是不合作的过程计时器的到期(块504)。如果不合作的过程计时器导致中断处理例程这一情况,那么调用不合作的过程处理程序(块506)。下面相对于图12更完整地讨论不合作的过程,以及依照本发明实施例怎样处理它们。假定所述中断不是由不合作的过程计时器的到期所引起的,那么把触发的中断增加到挂起列表(块508),包括中断类型的指示。在实现Itanium处理器系列的处理器的系统中,可以通过读取中断向量寄存器(IVR)来完成对中断类型的确定。从而,挂起列表是已经被置为有效的中断的列表,但是为此,调度会合点的过程尚需开始。
在说明性的过程中的下一步骤可以是确定是否存在用于调度尚需完成的会合点的企图(块510)。从处理器的角度来看,调度会合可以是二阶段的过程向同步寄存器54写入建议的会合信息;以及接收来自所述逻辑处理器的一些或所有处理器的确认。从而尚需完成的调度会合点可以是其中已经把尚需要返回的数据写入同步寄存器54的情况,或对于这种情况,数据已经被返回但尚需分析。如果没有未完成的用于调度会合点的企图,那么所述说明性的方法可以从所述挂起列表中选择最高优先级的中断(块512),其可以是所触发的中断或先前置于所述挂起列表中其它较高优先级的中断。可选择的实施例可以从所述挂起列表中选择多个最高优先级的中断。此后,清除在所述存储器分区中的寄存器57(表决逻辑最后将向其中写入数据),并且把中断号和为所述中断提供服务的系统调用号写入所述同步寄存器54(块514)。所述系统调用号可以是驻留在每个处理器的存储器分区52(如在图3中由位置72举例说明)内的数,其表明从任意的开始点已经进行了多少系统调用。依照本发明至少一些实施例,所建议的系统调用号是当前系统调用号加一。把系统调用号增加大于一的数目以便创建所建议的系统调用号也在本发明的范围和精神内。在图4中由线路60(对于处理器PA1)和线路62(对于处理器PB1)举例说明了中断标识符和所建议的系统调用号的写入(块512)。
现在省略立即动作中断的论述,在写入同步寄存器之后,在所述过程中下一步骤可以是向挂起会合日志写入中断号和建议的系统调用号,并且从所述挂起列表删除所述中断(块518)。从而所述挂起会合日志是已经为其提出建议的中断列表,但是对于其尚需接收确认,或者对于其还没有达成一致。一旦从所述表决逻辑接收其它处理器达成一致的确认,实现图5的程序以及其它程序(特别是相对于图7所讨论的系统调用程序),从所述挂起会合日志中清除条目。依照本发明至少一些实施例,所述挂起会合日志可以是在每个处理器的存储器分区内的一组存储位置46(参见图3)。此后,启用中断(块520),然后中断处理例程过程结束(块522)。现在论述转向在中断处理例程上下文中的立即动作中断。
如相对于图4所论述的,用户程序在断言中断之后可以恢复执行,从而给出处理器同意对哪个中断提供服务的时间,以及在哪个系统调用号来为所述中断提供服务。然而,一些中断需要被立即服务(而不允许用户程序继续下去),并且从而可以将其称为“立即动作中断”。立即动作中断可以包括页面故障,以及用于校正不合作的(uncooperative)过程的动作。不是立即动作类型的中断可以包括输入/输出(I/O)完成中断、排队的事件中断,以及用于在启动操作期间在处理器之间交换信息的软件事件中断。回到判定是否已经存在用于调度尚需完成的会合点的企图(块510),如果存在用于调度会合点的未完成的企图,下一步骤可能是检查所述表决逻辑是否已经写回关于先前未确认的会合点的信息(块524)。如果所述表决逻辑尚需写回数据(块524),下一步骤可以是判定在所述挂起列表上是否存在立即动作中断(块528)。如果在所述挂起列表(块528)上没有立即动作中断,那么启用中断然后所述过程结束(块522),这是因为调度用于先前中断的会合点尚需完成,并且依照一些实施例在任一时刻只有一个调度企图可能是活动的。另一方面,如果在所述挂起列表上存在立即动作中断(块528),那么所述过程在软件循环中等待(块530)以便写回来自所述先前调度企图的数据。当所述表决逻辑把所述数据写回到寄存器57时,所述过程移到图5B的说明性的方法步骤。同样,如果存在未完成的用于调度会合点的企图(块510),并且所述表决逻辑已经写回数据(块524),那么启用图5B的说明性的方法步骤。所述说明性的过程也可以到达在软件循环中的等待(块530),并且经由确定刚才建议的中断是否是立即动作类型(块516)到达随后图5B的说明性的步骤。
图5B举例说明了响应于来自表决逻辑的数据的返回而采取的步骤。特别地是,进行关于在该执行中断处理例程中是否建议了立即动作中断的判定(块550)。如果经由(图5A的)块524进入该说明性的子过程,那么立即动作中断不是由该处理器先前建议的。然而如果经由(图5A的)块530进入该说明性的子过程,那么立即动作中断是先前建议的,或在挂起列表上存在立即动作中断。如果由该处理器先前建议的中断不是立即动作类型,那么进行关于其它处理器是否建议了为立即动作中断提供服务的判定(块552)。如果这样的话,把在挂起会合日志上的中断移回挂起列表(块560),并且通过从所述挂起列表中选择最高优先级的中断来恢复执行(图5A的块512)。如果所述逻辑处理器的其它处理器没有建议为服务立即动作中断提供(还是在块552),在挂起会合日志上做出关于中断和在哪个系统调用号为那些由其它处理器建议的中断提供服务的记号(块553)。此后,判定所述处理器对于为那个中断提供服务是否达成一致(块554)。对于同意的中断,把在挂起会合日志上的、同意的一个或多个中断移到确认的列表(块562),并且通过从所述挂起列表中选择最高优先级的中断来恢复执行(图5A的块512)。从而,除其中另一处理器建议立即动作中断的情况(块552和560)之外,一旦在挂起会合日志上放置中断将在那里保持,直到同意处理器为所述中断提供服务。
仍然参照图5B,并且回到块550,如果先前建议的中断是立即动作类型(经由块530的条目),那么分析由所述表决逻辑返回的数据以便判定在逻辑处理器中的其它处理器是否同样建议了为所述立即动作中断提供服务(块558)。如果这样的话,调用适当的立即动作中断服务例程(块564)并且从所述挂起列表中删除其指示,以及在从所述服务例程返回之时,通过从所述挂起列表中选择最高优先级的中断来恢复执行(图5A的块512)。如果处理器没有达成一致,把立即动作中断放回挂起列表(块566),并且通过从所述挂起列表中选择最高优先级的中断来恢复执行(图5A的块512)。然而在这种情况下,刚被置于所述列表的立即动作中断往往是最高优先级的中断,从而图5的中断处理例程立即再次开始使逻辑处理器的处理器同意为所述立即动作中断提供服务的过程。
图6举例说明了如下过程的流程图,所述过程可以在同步逻辑18内实现以便执行部分调度会合点。在图6中举例说明的步骤可以采用在处理器或作为同步逻辑一部分的微控制器(没有特别示出)上执行的软件来实现,或者所述过程可以采用硬件来实现,例如可以经由被设计为用于实现所述说明性的步骤的状态机的专用集成电路(ASIC)来实现。所述过程开始(块600),继而移到判定在同步寄存器54的触发寄存器中是否存在数据(块602)。在一些实施例中,所述同步逻辑18可以不知道写入的数据是“新的”还是“旧的”。在这些实施例中,每个处理器向其写入的寄存器54中的至少一个可以充当触发寄存器,启动作为过程一部分的计时器以便在把接收的至少一些数据写入到每个处理器之前等待来自所有处理器的数据。在可选择的实施例中,所述同步逻辑18可以足够高级以便能够比较数据来确定它是“旧的”还是“新的”。
一旦处理器写入触发寄存器(块602),就判定在逻辑处理器中是否存在不止一个处理器(块603)。例如,如果在双模系统中一个处理器故障,那么所述逻辑处理器可以在只有单个处理器的情况下操作。同样,如果在三模系统中两个处理器故障,那么所述逻辑处理器可以在只有单个处理器的情况下操作。如果在所述逻辑处理器中只有一个处理器是活动的,那么可以立即写回所述数据(块618)。
假定在所述逻辑处理器内不止一个处理器是活动的,启动计时器(块604)并且判定逻辑处理器的第二处理器是否写入其各自触发寄存器(块606)。否则,所述过程在软件循环中等待(块606和608)直到写入所述触发寄存器为止或计时器到期。如果在所述逻辑处理器中存在不止两个处理器(块610),那么重新启动所述计时器(块612),并且所述过程同样在软件循环中等待(块614和616),直到写入第三处理器的触发寄存器为止或所述计时器到期。图6的方法说明了包括三个处理器的逻辑处理器。如果给出更多的处理器,可以增加附加计时器的重新启动和在软件循环中的等待。同样,如果逻辑处理器只包括两个处理器,那么可以省略与第三处理器相关联的步骤。如果已经接收了所有数据,那么连同日时数据一起把至少一些数据写入每个逻辑处理器(块618)。如果处理器之一没能在计时器到期之前写入其各自的触发寄存器,那么把写入同步逻辑18的数据的至少一部分写回到每个处理器(块620)。除写入由所述处理器提供的数据之外,还可以把状态字写入每个存储器分区;所述状态字表明完成了所述操作,指示哪些处理器参与所述操作,以及哪些处理器(如果有的话)超时(还是在块620)。如果一个处理器没能在所分配的时间内写入,那么从所述逻辑处理器中删除损坏的(offending)处理器(块622),然后所述说明性的过程重新开始。依照本发明至少一些实施例,如果处理器不在第一处理器的几毫秒内向同步寄存器写入数据,那么应该采取纠正性的动作。
因为各个实施例的逻辑处理器实现宽松地锁步执行,所以每个处理器的中断处理例程(像我们稍后将要看到的,所述系统调用)向同步寄存器54写入数据的时间可以不必精确地对准。从而,块604-616的组合允许一定量的余地,其中所有处理器可以检测并对所述中断作出反应。简要地参照图3,从所述同步寄存器写回到每个处理器的确认数据可以包括把所述数据从同步寄存器54拷贝到在每个存储器分区中的位置,例如位置57A和57B。依照本发明至少一些实施例,把由所述表决逻辑56写入到所述存储器分区的数据与主机处理器的固有高速缓存块对准。
在继续之前概括一下,中断处理例程的中断触发执行。在图4中的影线区59表示中断处理例程的执行,从而暂时地挂起用户程序。假定当前没有未完成的用于调度所述会合点的企图,所述中断处理例程连同建议的为所述中断提供服务的系统调用号一起,把中断标识符写入在表决逻辑56中的同步寄存器54(参见图4的线路60和62;图5的块514)。一旦在逻辑处理器内的每个处理器写入其信息,表决逻辑56就把至少一些信息写入到在每个处理器的存储器分区中的位置57(参见图4的线路65;图6的块618或620)。在所述系统调用具有适当的系统调用号时,把用于中断的中断服务例程置于调度队列中并且为该例程提供服务。
图7举例说明了通过至少一些系统调用除系统调用的正常任务—例如获取日时—之外,充当会合点并且协调中断处理来实现的至少一部分步骤。从而,存在于图7的方法步骤不意味着是任何一个系统调用可以执行的整体步骤集;更确切地讲,该说明性的流程图突出附加步骤,至少一些系统调用可以执行所述附加步骤以便协调中断处理,并且有时实现宽松地锁步处理器的同步。所述过程可以由用户程序发出系统调用开始(块700),所述系统调用诸如对当前日时或存储器分配的请求。此后,系统调用程序可以禁止中断(块702)并且增加系统调用号,以便特定的处理器知道其当前正在执行的是哪个系统调用号。跳过现在不合作的过程(块706、724和726),在所述过程中的下一步骤可以是判定是否已经存在用于调度已经完成的会合点的企图(块708),这可以通过检查在寄存器57中的非零数据来确定。如果这样的话,下一步骤可以是判定任何其它处理器是否建议了为立即动作中断提供服务(块730)。如果这样的话,把在挂起会合日志上的中断移回所述挂起列表(块736)。在一些实施例中,假定用于在其它处理器中所看见的中断立即动作的触发将在瞬间处理器中出现,并且从而忽略所述情况并且还可以发生用于调度会合点的企图(从判定块712开始)。在可选择的实施例中,处理可以开始解决触发立即动作中断的预期错误(没有特别示出)。
回到块730,如果其它处理器没有建议服务立即动作中断,那么下一步骤可以在挂起会合日志中记录所述中断和其它处理器建议的系统调用号(块731)。此后,判定所述处理器对于要为哪个中断提供服务是否达成一致(734)。如果一致,那么把所述中断从挂起会合日志移到所确认的列表(块732),并且还可以发生用于调度会合点的企图(从判定块712开始)。所确认的列表是已经对其接收了确认的中断列表,所述确认是应该为所述中断提供服务,以及应该在什么系统调用号为所述中断提供服务。如果所述处理器对于为所述中断提供服务没有达成一致(块734),例如一个处理器建议为中断5提供服务而第二个处理器建议为中断9提供服务,那么在将来建议中将纠正该情况,并且还可以发生用于调度会合点的企图(从判定块712开始)。
如果没有完成会合(块708),那么下一步骤可以是判定是否存在开始的、尚需完成的会合(块710)。跳过分析挂起列表的时刻(块712),在说明性过程中的下一步骤可以检查在挂起会合日志上是否存在任何为当前系统调用号所建议的中断(块714)。如果这样的话,所述说明性的程序轮询中断(块716)(因为已由块702禁止中断),并且所述过程在软件循环中等待(从判定块708开始)。在这种情况下,由瞬时处理器所建议的系统调用号可能是最高系统调用号,因此所述处理器在软件循环中等待确认。
如果在挂起会合日志上没有建议的、要在当前系统调用号上被服务的中断(块714),那么下一步骤可以是判定在所确认的列表上是否存在任何在当前系统调用号上调度的中断(块718)。从而调度要在当前系统调用号上服务的、在所确认的列表上的中断都具有它们的调度用于执行的中断服务例程,并且从所确认列表上删除它们的条目(块720),启用中断(块722),然后系统执行其正常活动(例如,日时调用)(块723)。简要地参照图4,在当前系统调用程序结束(阴影区域64和66)之处,置于任务调度器中的一个或多个中断服务例程执行,如阴影区域67所示。作为选择,可以在执行系统调用的主函数之前执行中断服务例程。如果在所确认的列表上没有任何中断具有在当前系统调用号的会合(块718),那么允许中断(块720),并且所述系统执行其正常活动(块723)。
依照本发明至少一些实施例,在把至少一个中断号和建议的系统调用号写入表决逻辑,并且把相同的信息写入挂起会合日志之后(图5的块514和518),对于会合点没有进一步的建议可以被起动,直到所述表决逻辑返回所述数据为止。从而,可以把一些中断置于所述挂起列表上(图5的块508)以便将来调度。如果写入所确认的列表(块732),返回在挂起会合日志上中断的挂起列表(块736),或为哪个中断提供服务没有达成一致(块734),那么存在再次开始会合点调度过程的机会。为此原因,系统调用程序可以执行与中断处理程序类似的工作,并且通过检查所述挂起列表来确定是否有任何中断需要调度服务。如果存在需要调度的中断,那么所述系统调用执行所述调度过程的初始阶段,包括把所建议的会合信息写入同步寄存器54(块740)。在图5中的块512、514、516、530和550-566非常详细地举例说明了在执行会合调度的初始阶段中所涉及的步骤。可以由系统调用程序来执行这些相同的步骤,但是采用说明性的方法(块740)把它们组合为单个条目以便不使该图变得过于复杂。
图8举例说明了可能会遇到的情况,其中逻辑处理器的一个处理器在另一处理器之前看见中断,然而它们对应该在哪个系统调用号为中断提供服务达成了一致。特别地是,处理器PA1刚好在断言所述中断之前执行系统调用号1003,而处理器PB1在断言所述中断之前很久执行系统调用号1003。两个处理器建议在系统调用号1004上为示例性的中断5提供服务,如线路100和102所示。然而,在该示例性情况下,处理器PB1在由表决逻辑56把同步数据写回到所述处理器之前到达系统调用号1004。在这种情况下,处理器PB1在软件循环中等待(图7的块708、710和714),如阴影区域104所表明,直到写回用于确认将在系统调用号1004上为所述中断提供服务的数据。同样,在由所述表决逻辑写入之前,处理器PA1到达系统调用号1004,并且同样,处理器PA1在软件循环中等待(还是图7的708、710和714),如阴影区域106所表明。当与示例性的两个处理器相关联的表决逻辑把所收集的信息写回到每个处理器的存储器分区时,并且所述系统调用程序确认系统调用号1004是其中应该为中断提供服务的号(图7的块732和734),那么两个处理器都为所述中断提供服务(图7的块720)并且继续正常处理。注意所述两个处理器虽然就它们的执行点最初有些分歧,但是从所述表决逻辑写入同步寄存器以及随后为所述中断提供服务之时,变得至少部分同步。
图9举例说明了其中逻辑处理器的处理器建议或通知服务不同的中断号的情况。在图9中示出的说明性情况中,所述处理器PA1刚好在断言中断5之前让其中断启用,因此处理器PA1建议在系统调用号96为中断5提供服务。然而,处理器PB1不启用其中断,直到在断言中断5和9之后为止。为了解释目的假定中断9具有比中断5更高的优先级。因此在启用中断之后,处理器PB1建议在说明性的系统调用号96为中断9提供服务(由于其较高的优先级)。因为在这种情况下处理器PA1在把所述数据从同步寄存器写回到存储器分区之前到达系统调用号96,所以处理器PA1在软件循环中等待(图7的块708、710和714)。同样,处理器PB1在确认其所建议的中断9是否将在系统调用号96被服务之前到达系统调用号96,并且同样它也在软件循环中等待确认。当所述表决逻辑把所述同步数据写回到每个处理器的存储器分区时,每个处理器注意中断类型失配(一个处理器建议为中断5提供服务,而第二处理器建议为中断9提供服务)(图7的块734)。在每种情况下,所述处理器然后建议先前没有被建议的最高优先级的中断(图7的块712和740)。在说明性PA1的情况下,中断9是最高优先级的中断,从而它被建议。此外,由于处理器PA1先前已经建议在系统调用号96为中断5提供服务,而且该建议仍然是未完成的,所以所述系统调用在软件循环中继续等待(图7的块708、710和714)。对于说明性的处理器PB1,先前没有建议的最高优先级的中断是中断5,从而建议中断5(图7的块712和740)。因为根据图9的第二说明性的写操作写回了数据,所述处理器同意在最高建议的系统调用号为两个中断5和9提供服务,在这种情况下所述系统调用号为97。当系统调用号97发生在每个处理器时,为所述中断提供服务(块718和720),首先是为最高优先级的中断。
在图4、8、9的说明性系统中,被置为有效的每个中断是事件类型中断,这意味着所述中断表示可以不要求立即动作的事件。然而,不同地处理立即动作中断。图10依照本发明实施例举例说明了处理诸如页面故障之类的立即动作中断的时间线。在图10的说明性情况下,处理器PB1经历立即动作中断,在该说明性的情况下,诸如页面故障(PF)。触发所述中断处理例程,判断所述立即动作中断的性质(图5的块516),以及把立即动作中断的指示写入同步寄存器(图5的块514)。依照本发明实施例,处理器PB1不进一步执行用户程序,而是在软件循环中等待确认,确认其它处理器也已经碰到页面故障(图5的块530)。仍然参照图10,在处理器PB1页面故障之后的某个时间,处理器PA1经历相应的页面故障,触发其中断处理例程,并且把所述页面故障的指示发送到所述同步寄存器。一旦表决逻辑接收来自每个处理器(或处理器之一超时)的数据,把该信息写入每个处理器的存储器分区(图6的块618或620),如由线路150例示。一旦所述中断处理例程确认所有处理器同意所述立即动作中断(图5的块558),每个中断处理例程调度为立即动作中断执行中断服务例程(图5的块564)。在完成用于所述立即动作中断的中断服务例程之后,所述中断处理程序开始重新调度会合点(从图5的块512开始)。在页面故障的说明性情况下,用于立即动作中断的中断服务例程可以是页面故障服务例程。注意,参考图10,该处理在每个处理器中停止直到确认所有处理器已经到达在用户程序中的、发生页面故障的点。
图11举例说明了事件中断和立即动作中断的相关处理。特别地是,图11举例说明了在具有两个处理器PA1和PB1的示例性系统中,处理器PA1在页面故障中断之前接收中断5的指示,而处理器PB1在页面故障中断之后接收所述中断5。在这种情况下,在处理器PA1上执行的中断处理例程写入在系统调用号1006上为中断5提供服务的建议(图5的块514)。然而,在处理器PB1上执行的中断处理例程(根据页面故障)建议服务所述页面故障,并且在软件循环中等待直到确认该建议(图5的块514、516和530)。此后一段时间,处理器PA1看见其页面故障。在该示例性的情况中,处理器PA1具有未确认的会合(对于中断5),并且从而在执行由所述页面故障触发的中断处理例程之时,所述处理器在软件循环中等待(图5的块530)直到所述表决逻辑写回同步信息。与这两个处理器相关联的表决逻辑把在同步寄存器中的信息写回到每个处理器的存储器分区。然而,在首先把同步数据写入每个处理器的存储器分区的过程中,一个处理器建议了在系统调用号1006为中断5提供服务,而另一个处理器建议了为所述页面故障提供服务。在这种情况下,每个处理器取消为所述中断提供服务的企图(对于处理器PB1,通过块566的操作进行,而对于处理器PA1,通过图5的块552、560的操作进行)。在每种情况下,所述立即动作中断是最高优先级的中断(在图5的块512选择),从而两个处理器都建议为所述立即动作中断提供服务。此后,表决逻辑56把所述信息写回到每个处理器的存储器分区,并且这时在例图中所述处理器同意应该解决所述页面故障。一旦已经为所述立即动作中断提供服务,在以后的某一时间,仍然参照图11,处理器PA1和PB1中的每个建议调度在特定的系统调用号的、先前被置为有效的中断5,所述特定的系统调用号在该说明性情况下为系统调用号1006。现在清除所述页面故障,如在其它示例性实施例中所述,可以在系统调用号1006发生为中断5提供服务。虽然图4和8-11中的每个只示出了两个处理器,然而应当理解描述的技术同样适用于在每个逻辑处理器中具有三个或更多处理器的计算机系统1000。相对于图4和8-11的描述示出了两个处理器以便不使处理各个事件中断和立即动作中断过于复杂。
由图4和8-11示出的调度会合点的论述被限制在每次只调度一个中断。例如,图4举例说明了每个处理器把单个中断号和建议的、为中断提供服务的系统调用号写入同步寄存器。依照可选择的实施例,在为每个中断调度会合点的企图中,可以把多个中断(和所建议的、为所述中断提供服务的系统调用号)写入同步寄存器。各个流程图对这些可选择实施例的操作保持不变,除多个中断之外,在一些实施例中是三个,其可以被建议并一次写入所述挂起会合日志,以及同样可以把多个中断移到所确认的列表。
此外,对该点描述的各个实施例利用三个列表挂起列表(被置为有效而尚未建议的中断);挂起会合日志(建议的中断但对其还未接收确认或已接收但还未分析确认);和同意的或确认的列表(对其已经接收确认的中断)。可选择的实施例可以只使用两个列表所述挂起列表和所确认的列表。在这些实施例中,一次可以建议一个或多个中断,但是所述中断保持在所述挂起列表上直到处理器之间就会合点达成一致。一旦对每个中断都达成一致,将其从所述挂起列表移到所确认的列表。因为只有一个用于调度会合点的建议集可以是未完成的,所以当把数据写入同步寄存器时,这些可选择的实施例可以设置标志作为未完成的企图的指示。同样,当从所述表决逻辑返回确认数据时可以复位标志。在这些可选择的实施例中,在所述处理器同意为所述中断提供服务之前可以多次建议每个中断(甚至在没有立即动作中断的情况下)。从而,在这些可选择的实施例中,每个处理器分析所返回的数据以便了解其它处理器同意服务一个或多个中断。如果同意,把所同意的中断从挂起列表删除并且置于所确认的列表上。对于没有同意的中断,丢弃所返回的数据并且所述过程通过从所述挂起列表中选择最高优先级的中断以便建议会合点来重新开始。
对于立即动作中断,在描述当一个处理器看见(并且建议)立即动作中断时的点的各个实施例中,其它处理器可以继续建议它们的最高优先级的非立即动作中断,直到它们也发现立即动作中断为止。在可选择的实施例中,一旦至少一个处理器建议为立即动作中断提供服务,那么其余处理器可以抑制另外的非立即动作中断的建议,并且作为替代继续处理直到发生相应的立即动作中断。从而,非立即动作中断可以在每个处理器的挂起列表中积累直到在为所述立即动作中断提供服务之后。从而这些可选择的实施例可以降低所有处理器到达、同意并为所述立即动作中断提供服务所花费的时间。
如上所述,依照本发明实施例,处理器的至少部分同步和中断的协调服务可以在会合点实现。然而,可以存在对于扩展的时段不发出系统调用的用户程序。因此,在逻辑处理器内的处理器相对于它们正执行的用户程序部分可能会有显著地分歧,另外可以不具有足够的机会来为中断提供服务。可以足够的频率发出系统调用的用户程序可以被称作“不合作的过程”。
为了解释,可以认为处理不合作的过程具有四个阶段。第一阶段是标识用户程序的确是不合作的。第二阶段可能正在最小化计算故障的可能性,所述故障就像所述应用不合作的性质在逻辑处理器中处理器之间所导致的,还允许不合作的过程,及其他不相关的过程,以便继续执行希望所述过程变得合作。第三阶段可能正在采取措施以便确保在逻辑处理器的每个处理器中的不合作的过程处在相同的执行阶段。最后,最后阶段可能正在修改原本不合作的过程。将依次阐明这些阶段中的每一个。
在一些实施例中,识别很少发出系统调用的用户程序并且因此认为其是不合作的,会涉及使用计时器。如果在所述计时器到期之前所述用户程序没有发出系统调用,那么所述用户程序就是一个不合作的过程。依照本发明的一些实施例,每当处理器的分派程序(以最高特权状态—内核模式)设置要执行的用户程序时,所述分派程序也启动不合作的过程计时器并且存储当前系统调用号的指示。在所述计时器到期时,把调用不合作的过程处理例程的中断置为有效。所述不合作的过程处理例程检查在由所述计时器定义的时段期间是否已经存在了至少一个系统调用,在一些实施例中,所述时段可以是100微秒数量级的。在可选择的实施例中,系统调用程序可以复位所述计时器以免触发不合作的过程处理例程,但是这些复位可能会要求代价高的内核模式处理调用。
图12(包括12A和12B)依照本发明实施例举例说明了所述不合作的过程处理例程的流程图。特别地是,所述不合作的过程处理例程可以通过在由所述分派程序启动的计时器-以下称为不合作的过程计时器到期之后断言中断来开始(块1201)。不合作的过程计时器的到期可以直接开始说明性的图12,或者可以经由所述中断处理程序通过确定不合作的过程计时器的到期(图5的块504)以及处理程序的调用(图5的块506)来调用图12的步骤。在禁止中断(块1204)之后,所述不合作的过程处理程序可以读取当前系统调用号(块1208)和由所述分派程序在启动时存储的系统调用号(块1212)。当前系统调用号与由所述分派程序在启动存储的系统调用号相同(块1216)表明所述用户程序还没能在由所述计时器定义的时段期间进行系统调用,并且因此是不合作的过程。另一方面如果所述当前系统调用号不与所存储的系统调用号相同(还是在块1216),所述过程是合作的,因此所述说明性的方法重新启动不合作的过程计时器(块1237),存储当前系统调用号(块1239),启用中断(块1238),然后结束(块1236)。
依照本发明实施例,在逻辑处理器的至少一个处理器内变得不合作的用户程序调用会合操作以便确定在所述逻辑处理器中的其它处理器是否同意其不合作的性质。仍然参照图12,如果当前系统调用号与由所述分派程序存储的系统调用号相同(块1216),下一步骤可以是确定是否存在未确认的会合操作(块1220)。如果不同,下一步骤可以通过把所述用户程序不合作的性质的指示,连同当前系统调用号一起写入在表决逻辑56中的同步寄存器54来开始会合操作(块1224)。此后,不合作的过程处理例程在软件循环中等待所述表决逻辑返回所述同步数据(块1228)。
因为在任一时刻只可以有一个调度会合点在进行中,所以如果已存在已开始的、在不合作的过程计时器到期时尚需完成的会合(还是块1220),那么下一步骤可以在软件循环中等待(块1246)直到所述表决逻辑写入同步数据。记住写回的同步数据是关于先前中断的(而不是不合作的过程计时器到期中断,所述中断触发当前执行的不合作的过程处理例程),或者把会合信息写入所确认的列表以便将来执行,或者把所述中断移回所述挂起列表(块1250)(参见图5的块552、554、560、562和556)。此后,所述过程继续把指示用户程序不合作的性质,连同当前系统调用号一起写入在表决逻辑56中的同步寄存器54(块1224),并且在软件循环中等待数据返回(块1228)。
如果处理器不同意所述用户程序是不合作的(块1232),那么分析同步数据以便确定所述用户程序在其它处理器中是否是合作的(块1234)。例如,虽然在一个处理器中不合作的过程计时器刚好可能在由用户程序进行系统调用之前到期(或翻转),但是在逻辑处理器的第二处理器中的用户程序可能刚好在其到期之前进行系统调用。从而,一个处理器将表明所述过程是不合作的,并且第二处理器将企图调度处理下一中断,包括写入所建议的会合点。如果分析显示所述用户程序不久将进行系统调用(块1234),那么重新启动不合作的过程计时器(块1237),存储当前系统调用号(块1239),启用中断(块1238)然后所述过程结束(块1236)。仍然参照图12,如果所述逻辑处理器的所有处理器都同意所述用户程序是不合作的(块1232)(所有处理器表明所述用户程序对于不合作的过程计时器周期是在相同的系统调用号上),那么处理不合作的过程的第一阶段通过设置不合作的过程标志并且增加计数器来开始(块1254)。如果这是第一次把所述用户程序标记为不合作的(块1258),这可以通过读取所述计数器来确定(在块1254中增加),那么把访问与不合作的过程相同的存储位置中的相同数据值的用户程序(不合作的程序的“过程集”)置于不允许它们继续执行的列表上。换句话说,用于所述处理器的分派程序将不调度所述过程集中的任何成员来执行,亦称为隔离的过程集(块1262)。因为所述过程集与不合作的过程共享存储器,并且还由于在不合作的过程内执行点中潜在的不一致,如在可以导致在过程集可见的共享存储器中产生差异的逻辑处理器的处理器之间,所以隔离所述过程集确保在所述过程集中没有过程能看见在(如在处理器之间)存储器中不同的数据,从而导致计算故障。在该第一阶段中,仍然允许所述不合作的过程运行希望它会变得合作。从而,在隔离所述过程集之后,所述不合作的过程处理例程重新启动所述不合作的过程计时器(块1237),存储当前系统调用号(块1239),启用中断(块1238)然后结束(块1236)。
依照本发明实施例,允许所述不合作的过程继续执行,而其过程集保持隔离。在下一调度不合作的过程以便执行时,所述分派程序再次存储当前系统调用号并且开始不合作的过程计时器。如果所述不合作的过程对于不合作的过程计时器期间在没有进行系统调用的情况下再次执行,那么再次调用不合作的过程处理例程。如果所有处理器再次同意用户程序的不合作的性质(块1232),那么所述例程设置不合作的过程标志(块1254)(但是根据先前条目已经把该标志置为有效),并且增加所述计数器(块1254)。由于在该示例性的情况中所述用户程序不是新近不合作的(块1258),所以下一步骤可以是确定对于预先确定的迭代数目,所述用户程序是否被认为是不合作的(块1266)。在一些实施例中,在隔离所述过程集之后,在采取进一步的校正动作之前所述用户程序可以被宣布为不合作十次。如果所述用户程序已经被确认为不合作的次数小于预先确定的迭代数目(块1266),那么所述不合作的中断处理例程重新启动不合作的过程计时器(块1237),存储当前系统调用号(块1239),启用中断(块1238)以及结束(块1236),还希望在采取进一步的动作之前所述不合作的过程变得合作。在讨论如果在预先确定的迭代数目之前进行系统调用,那么怎样处理不合作的过程之后,将讨论不合作的过程处理的第三阶段。
为了进一步解释的目的,假定用户程序已经被确认为不合作的至少一次,那么必须隔离其过程集,但是对于预先确定的迭代数目尚需被确认为不合作的。此外假定所述用户程序进行系统调用。再次简要地参照图7,当系统调用程序执行时,在增加系统调用号之后(块704),进行关于所述调用程序先前是否已经被标记为不合作的确定(块706)。如果没有,那么所述系统调用执行如先前所讨论的步骤。然而如果所述调用程序先前已经被标记为不合作的,那么所述系统调用程序可以不隔离所述过程集(块724)并且清除不合作的过程标志(块726)。
图13是用于举例说明相对于事件中断的处理不合作的过程的时间线,以便进一步举例说明图12的方法。特别地是,图13举例说明了其中每个处理器经历系统调用号1999的情况。在处理器PA1的情况下,在不合作的过程计时器到期之前把中断5置为有效,从而处理器PA1建议在系统调用号2000为中断5提供服务(线路1300;图5的块514)。在建议为中断5提供服务之后不久,处理器PA1的不合作的过程计时器到期,并且由于未确认的会合所以所述处理器在软件循环中等待(图12的块1246),等待所述表决逻辑写回来自先前建议的同步数据。相反,处理器PB1在把中断置为有效之前使其不合作的过程计时器到期,并且从而处理器PB1把不合作的过程信息写入同步寄存器54(线路1302)并且在软件循环中等待确认(图12的块1224和1228)。然后所述表决逻辑把所述同步数据写回到每个处理器(线路1304)。因为所述处理器不同意为所述中断提供服务,并且由于不合作的过程中断的立即动作性质,所以处理器PA1把所述中断5写回到所述挂起列表(块1250),把所述不合作的过程的指示写入同步寄存器(线路1306;块1224),并且在软件循环中等待确认(块1228)。对于处理器PB1,所述处理器对于所述不合作的过程没有达成一致(块1232)(处理器PA1建议了为中断提供服务而不是所述用户程序是不合作的指示)。此外,由处理器PA1建议的系统调用号(在该示例性情况下,系统调用2000)不建议在处理器PB1中的系统调用是即将到来的;相反地,所建议的系统调用号2000意味着处理器PA1也等待系统调用号1999(块1234)。从而,处理器PB1进行表明不合作的过程的第二次同步数据写入(线路1308;块1224),并且再次在软件循环中等待确认(块1228)。此后一段时间,所述表决逻辑56把同步数据写入每个处理器(线路1310)。在该示例性的第二次写入中,所述处理器同意不合作的状态(对于每个处理器块1232),从而每个处理器置不合作的过程标志为有效,增加所述不合作的过程的计数器(块1254),并且隔离所述不合作的过程的过程集(块1262)。此后,所述用户程序继续操作(在每个处理器时间线中的区域1312),即使所述不合作的过程的过程集已被隔离。图13还举例说明了下列情况,其中尽管写入所述表决逻辑的同步数据失配,但是处理器还收集用户程序的不合作的性质可以不久结束的信息。特别地是,图13还举例说明了处理器PA1进行系统调用(区域1314),在该示例性情况下,系统调用号是3000。作为系统调用过程的一部分,处理器PA1建议或通告下一会合(线路1316;也参见图7的块712和740)。相反,处理器PB1在所述系统调用之前使其不合作的过程计时器到期,因此写入所述不合作的过程的指示(线路1318;块1224)并且在软件循环中等待确认(块1228)。当所述表决逻辑返回同步数据时(线路1320),处理器PA1发现中断类型失配(如果由系统调用分析的话是图7的块730,而如果是由中断处理程序分析的话是块552),并且企图再次写入同步数据(线路1321;图7的块740或图5的块514)。相反,处理器PB1接收所述同步数据(线路1320),并且虽然所述处理器就所述用户程序的不合作的性质没有达成一致(块1232),但是来自处理器PA1的所建议的会合信息示出了系统调用即将到来(块1234)。从而,处理器PB1继续执行用户程序直到进行系统调用。在以后的某一时间,所述处理器对原来由处理器PA1建议的中断达成一致。
现在返回图12,并且特别地是由块1266说明的步骤。如果对于预先确定的迭代数目用户程序已经被标记为不合作的过程(块1266),那么下一步骤可以隔离所述不合作的过程(块1268),并且调用过程等级重组(reintegrotion)例程(块1270)。
在逻辑处理器的每个处理器中运行的、并且被标识为不合作的过程的用户程序可能在所述处理器之间它们的执行点有显著地分歧。依照本发明至少一些实施例,如果所述用户程序将不提供用于根据系统调用来同步的机会,那么可以通过强迫每个用户程序在指令流中相同的点恢复执行来发生同步。这可能意味着一些处理器多重地执行一些指令,而其它处理器可以跳过执行一些指令。然而,在允许所述用户程序在所述指令流中相同的点恢复执行之前,每个处理器的工作存储器需要是相同的。换句话说,所述不合作的过程已对其写访问的任何存储器应该在逻辑处理器的处理器之间比较并且使其相同。采用这种方法,当执行恢复时,每个处理器的过程状态将是相同的。从而依照本发明实施例,当在图12中举例说明的不合作的过程处理例程确定要求强迫的同步时(块1266),可以需要所述用户程序工作存储器的过程级重组。
图14举例说明了过程等级重组例程的流程图,所述过程等级重组例程基本上可以同时在逻辑处理器的每个处理器中执行。特别地是,所述过程根据由在图12中举例说明的不合作的过程处理例程所进行的调用来开始(块1400)。在说明性的过程中下一步骤对所述逻辑处理器的其它处理器起作用以便选择源处理器(块1402)。为了选择源处理器,可以使用所述表决逻辑来在所述处理器之间交换消息。可以选择所述逻辑处理器的任何一个处理器。
所述说明性的过程的下一步骤确定所述不合作的过程对其写访问的存储区(块1404)。例如可以通过参照所述处理器的存储器管理和/或页面表来进行该判定。一旦确定所述不合作的过程对其写访问的存储区的范围,下一步骤是判定存储页面从其创建以来是否还未被修改过(或者称为干净的)(块1406)。权衡说明性的图14的描述,假定由所述处理器一次只分析一个存储页面;然而,可选择的实施例在任一时刻比较多个存储页面。如果考虑中的存储页面不是干净的(或者称为脏的)(还是块1406),所述说明性过程的下一步骤计算所述存储页面的校验和(块1408)。所述说明性过程的下一步骤是交换数据(块1410),所述数据为表明考虑中的存储页面是干净的指示(经由块1406的条目),或者如果所述存储页面是脏的话(经由块1408的条目),所述数据为所计算的校验和。这种数据交换可以使用表决逻辑发生,并且在每个处理器在软件循环中等待将要从所述表决逻辑返回的数据意义上讲(等待每个处理器写入其各自的数据,并且等待所述表决逻辑写回所述数据),与关于立即动作中断的交换相似。没有明确地示出这些步骤以免使该图变得过于复杂。一旦接收所述数据,就进行关于是否所有的处理器同意所述存储页面是干净的判定(块1412)。如果所有的处理器同意所述存储页面是干净的,那么不必拷贝来自源处理器的所述存储页面,从而下一步骤可以是判定是否已经分析了所有的存储页面(块1414)。如果不是,那么所述过程重新开始分析另一存储页面。
仍然参照图14,如果所有处理器不同意所述存储页面的干净状态(还是块1412),那么下一步骤是判定所述处理器和源处理器是否同意所述存储页面是脏的,在所述处理器中正在运行说明性的过程(块1416)。如果是这样的话,进行关于由源处理器提供的校验和与由所述处理器计算的校验和是否相等的判定,在所述处理器中正在运行所述说明性的过程(块1418)。如果所述校验和相等,那么不必拷贝来自所述源处理器的存储页面,因为所述存储页面,尽管是脏的,但包含相同的数据。另一方面,如果在源处理器和所述处理器之间的校验和不相等,在所述处理器中正在运行所述说明性的过程(还是块1418),那么所述存储页面不是相同的,从而把来自所述源处理器的存储页面拷贝到所述处理器,在其中正在运行所述说明性的过程(块1420)。同样如果源处理器和所述处理器就所述存储页面是脏的状态没有达成一致,在所述处理器中正运行所述说明性的过程(还是块1416),那么所述存储页面不是相同的从而把来自所述源处理器的存储页面拷贝到所述处理器,其中正运行着所述说明性的过程(还是块1420)。除拷贝来自所述源处理器的存储页面之外,拷贝来自所述源处理器的、与所述存储页面相关联的干净/脏的位。例如可以把这些位存储在所述源处理器的页面表或页面映射表中。如果两个处理器就所述存储页面脏的状态达成一致的话,不必拷贝所述干净/脏的位;然而从编程和交换时间的角度来看,每当拷贝存储页面时拷贝所述位可以是便利的并且代价不大。在拷贝之后,所述说明性的方法移到是否存在更多要分析的存储页面的判定(块1414)。
一旦已经分析了所有页面,并且可能已经把一些存储页面从所述源处理器拷贝到一个或多个非源处理器,那么在所述说明性的过程中下一步骤把过程控制块从所述源处理器拷贝到所述非源处理器,所述过程控制块可能包括指令指针和其它寄存器(块1422)。这种拷贝确保每个处理器在与源处理器相同的执行点恢复执行所述用户程序。此后,所述过程等级重组例程返回(块1426)。应当注意所述过程等级重组例程作为过程运行,与执行其它过程(除在所述隔离的过程集中那些以外)交错。
一旦控制已经返回在图12中举例说明的不合作的过程处理例程,把所述用户程序及其过程集从所述隔离列表中删除(块1274),清除所述不合作的过程标志和所述计数器(块1278),重新启动所述不合作的过程计时器(块1237),存储当前系统调用号(块1239),启用中断(块1238)以及所述过程结束(块1236)。从而,原先不合作的过程已经被同步(在这种情况下通过可写存储器的过程级重组),并且可以再次由所述处理器执行。因为从源处理器中拷贝指令指针和其它寄存器,所以所有处理器在用户程序中相同的执行点恢复执行。依照至少一些实施例,单独的过程级重组可足以确保正确操作而不管用户程序的不合作的性质。除所述过程级重组外,或代替所述过程级重组,至少一些实施例可以采取主动的步骤以便确保导致了不合作的过程指定的用户程序的至少一部分不会再次这样做(块1424)。所述主动的步骤可以采取多种形式。在一些实施例中,修改所述用户程序损坏(offending)的部分(最可能是软件循环)以便包含系统调用。这可以例如通过用系统调用(例如日时调用)替换空操作指令(NOP)来实现。如果所述用户程序指令流不允许纯粹的替换,那么可以把指令替换为指向被替换指令的分支指令、系统调用和返回分支指令。当用户程序存在于主存储器中和/或存在于诸如磁盘驱动器之类的长期存储设备中之时,可以做出这些修改。在又一个实施例中,在多处理器计算机系统(具有合作的和不合作的过程的两种处理器)内整个处理器的重组可以被用来使穿过多处理器的不合作的过程同步。
在又一可选择实施例中,处理器硬件可以支持在指令流中的特定点插入中断的机制,并且所述中断可以触发用于同步和中断调度的系统调用。例如,由Intel制造的的Itanium处理器系列支持在处理器内的寄存器,其被称为“指令断点寄存器”。所述断点寄存器可以装载有指令指针值,并且当所述实际指令指针匹配在所述断点寄存器中的值时,触发中断。从而可以使用该示例性的机制来触发中断,其为同步目的又触发系统调用。可以不必在所有体系结构中使该基于硬件的机制有用,但是修改所述用户程序的实施例可以具有普遍应用。
在又一实施例中,在多处理器计算机系统(包括具有不合作的过程的处理器和其过程是合作的处理器)内的整个处理器重组(拷贝所有存储器)可以被用来使穿过所述逻辑处理器的多处理器的不合作的过程同步。上述论述意指说明本发明的原理和各个实施例。一旦完全理解上述公开内容,大量变化和修改对那些本领域内技术人员来说将是显而易见的。下列权利要求意在被解释为包含所有这种变化和修改。
权利要求
1.一种基于处理器的方法,包括在第一处理器(PA、PB、PC)上执行用户程序,并且在第二处理器(PA、PB、PC)上复制拷贝所述用户程序;由所述第一和第二处理器(PA、PB、PC)这二者接收异步中断;在第一处理器(PA、PB、PC)上对在所述第一处理器(PA、PB、PC)上执行的所述用户程序的被同意的系统调用执行中断服务例程;以及在所述第二处理器上对在所述第二处理器(PA、PB、PC)上执行的所述用户程序的被同意的系统调用执行中断服务例程。
2.如权利要求1所述的基于处理器的方法,还包括在所述处理器(PA、PB、PC)之间交换中断标识和建议的系统调用号,在所述系统调用号上为中断提供服务;检查所交换的中断标识以便确定所识别的中断是否匹配;以及如果所交换的中断标识匹配,在作为最高的所建议的系统调用号的所同意的系统调用上执行所述中断服务例程,执行中断服务例程。
3.如权利要求2所述的基于处理器的方法,还包括在交换和检查之间,继续在每个处理器(PA、PB、PC)中执行用户程序。
4.如权利要求2所述的基于处理器的方法,其中交换还包括由所述第一处理器(PA、PB、PC)把所述中断标识和建议的系统调用号写入逻辑系统(18、20、22、24)的寄存器(54),所述逻辑系统与所述第一和第二处理器耦合;由所述第二处理器(PA、PB、PC)把所述中断标识和建议的系统调用号写入逻辑设备(18、20、22、24)的寄存器(54);以及由所述逻辑设备(18、20、22、24)向每个处理器(PA、PB、PC)提供在所述寄存器(54)中的至少一部分信息。
5.如权利要求4所述的基于处理器的方法,在所述写入和提供之间还包括继续在所述第一处理器(PA、PB、PC)中执行所述用户程序,直到用户程序到达所建议的系统调用号为止;以及停滞所述第一处理器(PA、PB、PC),至少直到提供所述信息的一部分为止。
6.一种计算系统,包括第一处理器(PA、PB、PC),可操作来执行用户程序;和第二处理器(PA、PB、PC),与所述第一处理器(PA、PB、PC)耦合,所述第二处理器(PA、PB、PC)可操作来执行所述用户程序的复制拷贝;其中所述第一处理器(PA、PB、PC)可操作来向所述第二处理器(PA、PB、PC)提供信息,所述信息表明中断已经被置为有效和建议的用户程序系统调用号,在所述系统调用号为所述中断提供中断;其中所述第二处理器(PA、PB、PC)可操作来向所述第一处理器(PA、PB、PC)提供信息,所述信息表明中断已经被置为有效和建议的用户程序系统调用号,在所述系统调用号为所述中断提供服务;其中在被同意的各用户程序系统调用号,第一和第二处理器(PA、PB、PC)中的每个可操作来为所述中断提供服务。
7.如权利要求6所述的计算系统,还包括其中所述第一处理器(PA、PB、PC)可操作来向所述第二处理器(PA、PB、PC)提供信息,所述信息表明多个中断已经被置为有效,并且其中所述第一处理器(PA、PB、PC)还可操作来提供多个建议的系统调用号,每一个系统调用号对应于多个中断中的每一个;其中所述第二处理器(PA、PB、PC)可操作来向所述第一处理器(PA、PB、PC)提供信息,所述信息表明多个中断已经被置为有效,并且其中所述第二处理器(PA、PB、PC)还可操作来提供多个建议的系统调用号,每一个系统调用号对应于多个中断中的每一个;以及其中在同意的各用户程序系统调用号,第一和第二处理器(PA、PB、PC)中的每个可操作来为至少一个中断提供服务。
8.如权利要求6所述的计算系统,还包括具有寄存器组(54)的同步逻辑(18、20、22、24),所述同步逻辑(18、20、22、24)与所述第一和第二处理器(PA、PB、PC)耦合;其中把由所述第一处理器(PA、PB、PC)提供的信息写入所述寄存器组(54)的至少一部分;以及其中把由所述第二处理器(PA、PB、PC)提供的信息写入所述寄存器组(54)的至少一部分。
9.如权利要求8所述的计算系统,其中所述第一处理器(PA、PB、PC)可操作来从所述寄存器组(54)中读取至少一些信息,并且其中所述第二处理器(PA、PB、PC)可操作来从所述寄存器组(54)中读取至少一些信息。
10.如权利要求8所述的计算机系统,其中在把由每个处理器(PA、PB、PC)提供的信息写入所述寄存器组(54)之后,在每个处理器中的所述用户程序可操作来恢复执行。
全文摘要
一种在执行用户程序的多处理器(PA、PB、PC)中为异步中断提供服务的方法和系统。一些示例性的实施例可以是一种方法,包括在第一处理器(PA、PB、PC)上执行用户程序,而在第二处理器(PA、PB、PC)上复制拷贝所述用户程序,由所述第一和第二处理器(PA、PB、PC)这二者接收异步中断,对同意的在第一处理器(PA、PB、PC)上执行的用户程序的系统调用,在所述第一处理器(PA、PB、PC)上执行中断服务例程,以及对同意的、第二处理器(PA、PB、PC)上执行的用户程序的系统调用,在所述第二处理器(PA、PB、PC)上执行中断服务例程。
文档编号G06F11/28GK1677354SQ20051006271
公开日2005年10月5日 申请日期2005年3月30日 优先权日2004年3月30日
发明者D·L·伯尼克, W·F·布鲁克尔特, D·J·加西亚, R·L·贾丁, J·S·克莱卡, R·M·雷克托 申请人:惠普开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1