CN1040803C - 在数据处理系统提供附加系统特性的方法和装置 - Google Patents

在数据处理系统提供附加系统特性的方法和装置 Download PDF

Info

Publication number
CN1040803C
CN1040803C CN90102592A CN90102592A CN1040803C CN 1040803 C CN1040803 C CN 1040803C CN 90102592 A CN90102592 A CN 90102592A CN 90102592 A CN90102592 A CN 90102592A CN 1040803 C CN1040803 C CN 1040803C
Authority
CN
China
Prior art keywords
bus
processor
data
operating system
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
CN90102592A
Other languages
English (en)
Other versions
CN1047407A (zh
Inventor
欧内斯特·戴散尔特·巴克
小约翰·蒙劳·蒂恩维蒂
龙尼·爱德华·格利茨
詹姆斯·英里斯·乔伊斯
乔恩·玛利奥·洛夫莱道
肯恩特·卢瑟尔·桑德森
格斯塔沃·阿尔马道·苏阿茨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US07/353,116 external-priority patent/US5325517A/en
Priority claimed from US07/353,111 external-priority patent/US5283868A/en
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1047407A publication Critical patent/CN1047407A/zh
Application granted granted Critical
Publication of CN1040803C publication Critical patent/CN1040803C/zh
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/387Information transfer, e.g. on bus using universal interface adapter for adaptation of different data processing systems to different peripheral devices, e.g. protocol converters for incompatible systems, open system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)

Abstract

两个虚拟操作系统的功能被合并成一个实际系统,S/88处理器的一对伙伴运行S/88OS并处理系统的容错和而且把整个系统看作是单一系统映象。一对或多对S/370处理器的伙伴通过S/88OS总线直接与相应的S/88OS处理器耦合。各S/370处理器的S/88主存贮器的连续的存贮区中被分配有1-16兆字节。各S/370虚拟操作系统认为其存贮分配在地址O开始,它利用正常S/370的动态存贮分配和分页技术管理其存贮器。

Description

在数据处理系统提供附加系统特性的方法和装置
本发明的改进涉及给一数据处理系统增加新特性的方法和装置,而在原系统中,中央处理单元及其操作系统缺乏这些特性。
一些当代最新开发的数据处理系统提供许多先进的特性,这些特性在旧的主机系统中不能得到或得不到主机操作系统的支持。这些特性包括:经过一个分布式计算网络提供一个单一的系统映象;热接插处理器和I/O控制器的能力(接通电源时安装和折卡);瞬时误差检测;不中断计算机用户就可对有故障的部件进行故障隔离或断电;由远程服务支持识别的用户可更换的单元;在系统继续正常工作时,由于部件故障或给系统增加新的服务,可动态地改变配置。
然而,其客户的广度,操作系统的成熟程度以及可用的用户程序的数量和范围远不及几个厂商的老牌的主机系统,例如IBM投放市场的系统370系统(S/370)。
这样一种新系统即容错系统的实例,是由IBM公司投放市场的系统88(S/88)系统。IBM S/88的一种型号和IBMS/370的一种型号构成了本发明改进的优选形式的整体部分。
这种容错系统被典型地自底向上设计以保证容错操作。处理器、存贮器,I/O设备及操作系统是为容错环境而特别设计的。
将上述特征结合到S/370的环境和体系结构的建议一般包括重写S/370的操作系统和用户应用程序和/或从头开始重新开发硬件。然而,许多人认为VM,VSE,IX370等操作系统的重写是一个巨大的任务,需要大量的程序员和相当长的时间。一般需要5年以上的时间来使一个复杂的操作系统,(如IBM S/370VM或MVS)成熟化。到目前为止大多数系统崩溃是操作系统错误造成的。另外,也需要许多年才能使用户熟悉一个操作系统的使用。因而,一旦一个操作系统已成熟并已有了一个很大的用户基数,要改进编码而引进新的功能(例如容错,动态重新构造,单一系统映象等),就不是一件容易的事。
由于将一个成熟的操作系统移植到一个新的机器体系结构是一件很复杂的事并且耗费很大,设计者通常决定只开发一种新的不易被广大用户所接受的操作系统。可以证明修改已成熟的操作系统,将新开发的操作系统的一些新特征加进去是很不实际的。然而,新的操作系统可能永远建立不了一个用户基地,而且要花许多年的实际应用来解决大多数问题。
因此,本发明改进的主要目的是给缺乏上述这些特性的数据处理系统提供一种或多种附加特征或特性,特别是单一系统映象,而无需要重写操作系统。
本发明改进的另一目的是给一个通常没有容错的处理系统和操作系统提供一种容错环境和体系结构,而无需大规模地重写操作系统。
上述目标是把至少一个缺乏所期望特性的第一类CPU与至少一个在能够提供所希望特性的一个操作系统的控制下运行的第二类CPU耦合在一起成为一个整体来实现的。第二CPU受控作为第一CPU的I/O控制器运行,第二CPU的操作系统没有意识到第一CPU的存在。此外,命令和/或数据在第一和第二CPU间传送而不用第二CPU的操作系统的服务。
在一个实施例中,多个以前是非容错(NFT)的第一CPU的每一个独特地与在操作系统软件控制下以容错方式工作的多个不同的第二CPU中的每一个相耦合,操作系统软件提供容错环境,每组CPU在程序控制下完成各自的同样的操作。这样相互连接使非容错的第一CPU在各自的非容错的操作系统软件控制下执行程序指令期间能够以容错方式运行。第二CPU与容错主存贮器和容错I/O设备连接,并受控作为第一CPU的I/O控制器。还提供有周期性地比较各组中CPU状态以检测错误的装置。只要至少两个耦合的第一和第二CPU无错误,容错操作就可继续下去。附图的简要说明
图1表示利用一条通信线路的标准互连计算机系统;
图2表示在容错环境中S/88处理器的互连;
图3表示较佳实施例中S/370处理器与S/88处理器的互连;
图4表示以较佳实施例的方式将一台S/370系统连接到一台S/88系统;
图5表示较佳实施例中用一台分离的S/88处理器来支持S/370与S/88之间的数据交换;
图6A,6B与6C表示采用原有技术IBM系统/88模块、以高速数据通信线(HSDI)互连的多个模块,以及在具有单一系统映象的容错环境中通过网络互连的多个模块;
图7表示本发明的一种改进模块,它提供了S/370处理器在一个S/370操作系统的控制下执行S/370的应用程序,凭借处理器是互相连接的并且与S/88处理器,I/O和主存储器互相连接这种方式使之成为能够容错;
图8更详细地展示了成对的S/370单元与S/88单元互相连接构成一个处理器单元还展示了容错操作而把它们与另一个完全相同的合伙处理器单元之间的连接;
图9A与9B示出了在两块板上的成对的S/370与S/88单元的一种物理组装方式以使把它们插入一个处理系统外壳的底板中;
图10概念性地示出了S/88主存储器以及该存储器中专用于S/370处理器单元而S/88操作系统并不知道的段;
图11图示了一台S/370处理器的较佳形式的一些部件以及将其与一台S/88处理器和存储器相连的装置;
图12更详细地示出了图11中的部件以及一台S/88处理器的一个较佳形式的各种部件;
图13图示了S/370总线适配器;
图14A,14B与15A-C概念性地示出了数据经过S/370总线适配器的输出通道的定时与移动;
图16更详细地图示了一台S/370与一台S/88处理器之间的直接互连;
图17概念性地示出了图16的互连中一台S/370总线适配器与一台DMA控制器之间的数据流;
图18示出了四个通道之一的DMAC寄存器;
图19A,19B,和19C(以图19的配置)较图16更详细地示意/图示了把一台S/370处理器与一台S/88处理器及主存储器互连在一起的总线控制单元的一个较佳形式;
图20展示了两个逻辑的较佳形式,一个是把一台S/88处理器与其相关联的系统硬件拆离的逻辑,另一个是用于处理从外来的S/370处理器到S/88处理器的中断请求的逻辑;
图21概念性地示出了根据本申请的指导对具有多个互连的S/370-S/88处理器的一个模块的现有S/88中断结构的修改;
图22,23与24为S/88的较佳形式的读,写与中断应答周期的定时图;
图25与26展示了在信箱读命令,Q选通命令,BSM读命令与MSM写命令期间,适配器总线通道0,1的信号握手定时图;
图27为一台S/370中央处理单元的一个较佳形式的方框图;
图28与29示出S/370主存储器与控制存储器的一些区域;
图30示出了在S/370中央处理单元,I/O适配器,高速缓冲存储器控制器;存储器控制接口及S/88系统总线和处理器之间的接口总线的一种较佳形式;
图31为一台S/370高速缓冲存储器控制器的一种较佳形式的方框图;
图32A与32B(以图32的配置)示意性地更详细地示出存储器控制接口的一种较佳形式;
图33为图示S/88系统总线上的单元之间的数据传输的总线节拍的定时图;
图34示出一个成对的存储器控制接口的“数据进入”寄存器的片段示意图;
图35示出了存储在图32B中的FIFO(先进先出)中的命令与存储数据字的格式;
图36A-D示出了在存储器控制接口中执行的从S/370处理器及适配器中存储与取命令;
图37为从一位程序员的观点来看本申请时整个系统的较佳实施例的概念图;
图38,39和40分别图示S/370与S/88接口的微码设计,S/370 I/O命令的执行,以及EXEC(执行)370软件与S/370 I/O驱动器之间的接口的划分(即ETIO+BCU+S/370微码);
图41A与41B概念性地示出EXEC370软件与S/370微码之间以及ETIO微码与EXEC370软件之间的接口与协议;
图41C-H示出了BCU本地存储器的内容,包括数据缓冲器,工作队列缓冲器,队列,包括一个链表的队列通信区和硬件通信区,以及工作队列缓冲器通过队列的移动,队列的元素包括了S/370微码与EXEC370软件互相通信所用的协议;
图42概念性示出工作队列缓冲器以及EXEC370,ETIOS/370微码与S/370-S/88耦合硬件之间的协议通过链表与队列的移动情况;
图43概念性地示出一条典型的S/370启动I/O指令的执行;
图44A-L图示当S/370微码与EXEC370为执行各种S/370 I/O指令互相通信时它们的控制/数据流;
图45A-AG图示在BCU中进行数据传输操作时在本地地址与数据总线上的数据,命令及状态信息;
图46A-K概念性地示出磁盘仿真进程的一种较佳形式,借此S/88响应S/370 I/O指令(经由BCU,ETIO与EXEC370)存储与取出S/88磁盘上S/370格式的信息;
图47概念性地示出图10的存储器映象连同S/88存储器映象入口的视图,其中某些入口为了供应一个S/370存储区域而已被去除;
图48A-K图示S/88的虚拟/物理存储器管理的一种较佳方式,该S/88能够与在系统启动时新提供的子程序和重新配置子程序交互作用以在S/88物理存储器中建立S/370存储区域;
图49与50展示用于使成对的S/370-S/88处理器与伙伴单元同步的某些逻辑;
图51与52示出了本改进的其它实施例。较佳实施例的说明导言
实现本发明的较佳实施例包括一个容错系统。容错系统一般是为容错操作自底向上设计的。处理器,存储器,I/O装置和操作系统都经过特殊改装以提供一个容错环境。然而,它们的客户的广泛性,它们的操作系统的成熟程度,可利用的用户程序的数量及范围都不如某些制造厂商的相当老的主机系统,例如国际商用机器公司所出售的系统/370(S/370)系统的那么大。
目前的容错数据处理系统提供许多较老的非容错主机系统一般不具备的或者主机操作系统所不支持的先进特性。这些特性中包括:跨越一个分布式计算网络所表现的一个单一系统映象;热插入处理器与I/O控制器(在电源接通时抽掉或插入插件板);即时的错误检测、故障隔离,以及不中断计算机用户而将出故障的部件从服务中电气地去掉;由远程服务支持标识的用户可更换单元;以及在系统工作过程中由于部件故障或要在系统中增加新的设备而导致的动态重新配置。这种容错系统的例子之一便是国际商用机器公司出售的System/88(S/88)系统。
在S/370环境与体系结构中加进上述特性的建设一般包括操作系统与用户应用程序的重大改写和/或临时凑合研制的新的硬件。然而一个操作系统例如VM,VSE,IX370等的重大改写被许多人认为是一件巨大的任务,需要大量程序员和相当长的时间。一般要使一个复杂的操作系统例如IBM S/370 VM或MVS成熟需要五年以上的时间。直到目前为止大多数崩溃是操作系统错误所导致的。同时,用户需要化多年时间来熟练地使用一个操作系统。不幸的是,一个操作系统一旦成熟并拥有了一个大的用户基地,修改其代码以引入新的功能例如容错,动态重新配置,单一系统映象之类并不是一件简单的工件。
由于将一个成熟的操作系统移植到一台新机器体系结构上的复杂性和费用,设计人员通常决定开发一个新的操作系统,而这一操作系统往往不是用户集团所能一下子便接受的。将一个成熟的操作系统进行修改以包括新开发的操作系统所体现的新特性可能已证明是不现实的;然而,新操作系统可能永远也发展不了一个相当规模的用户基地而且在大多数问题得到解决以前要经过多年的现场使用。
因而,本改进的意图在于为一个一般非容错处理系统与操作系统提供一个容错环境而无需对该操作系统作重大的改写。在本较佳实施例中一台IBM System/88型计算机被耦合到一台IBM S/370型号的机器上。
耦合不同处理和操作系统的一种现代方法是在每一个系统上增加某种类型的通信控制器,在操作系统中附加设备驱动程序,以及使用某种通信码例如系统网络体系结构(SNA)或OSI(开放系统互连)来传送数据。一般情况下,在一个网络的端节点计算机之间实现数据通信要求每一个端节点理解所要交换的数据并对其提供一组兼容的服务。
为了减少设计复杂性,大多数网络是按层次结构组织而成的,每一层建立在其前一层之上。层的数目,各层的名称,以及各层的功能网络与网络之间各不相同。然而,在所有的网络中,各层的目的都是为了给较高的层提供某些服务,目的是使较高层不必去关心较低层的实现细节。一台机器上的第n层与另一台机器上的第n层进行对话。在这种对话中所用的规则与约定总称为第n层协议。在不同的机器上包含对应层的实体称作同等层进程,所谓利用协议进行通讯就是指这些同等层而言的。
实际上,一台机器上的第n层并不向另一台机器上的第n层直接传送数据的(除了在最低层即物理层)。即,在不同系统上运行应用程序可以没有直接的耦合。反之,各层将数据与控制信息传递给紧靠着它的下一层,直到达到最低层。在这最低层上存在着与较高层所用的虚拟通信对应的与其它机器的物理通信。
这些服务组合的定义已经存在于若干不同的网络中,如上文所述。而最近人们的兴趣已经集中在规定协议来方便不同厂商的系统之间的互连。开发这些协议的一种结构便是国际标准组织(ISO)七层OSI模型所定义的结构。这一模型中的各层负责向它上面的一层提供网络服务而要求在它下面的一层向它提供服务。各层所提供的服务是严格定义的,使它们能够被网络中的每一个站完全相同地执行。这便是所说的允许不同厂商的设备互连。在一个节点内部的层与层之间的服务的实现是随实现而异的并允许在一个站的内部所提供的服务存在厂商之间的差异。
重要的是要注意实现这样的一个结构化协议集合的一个目的在于执行端对端数据传送。如果理解了用户节点所关心的是将数据从源应用程序发送到接收方应用程序这一点,OSI模型中的主要划分便可以更好地得到理解了。为了发送这些数据,OSI协议在各层上对数据进行作用以向网络提供帧。帧是在数据与各OSI层上所加的对应头标结合中建立起来的。然后将这些帧以比特的集合提供给物理介质并通过该介质传输。然后,它们经历了一组逆过程以后向接收站上的应用程序提供数据。
如上文所述,耦合不同处理器与操作系统的一种现代方法是通过在各系统上加上某种通信控制器,在操作系统上附加设备驱动程序,以及使用某种通信码例如系统网络体系结构(SNA)或SSI以传送数据。图1示出了以一个本地网络(LAN)连接的两台计算机系统的标准互连。具体地示出一台IBM S/370体系结构系统被连接到一台IBM系统/88体系结构。下面将要讨论在每一台体系结构中,一个应用程序的运行通过与操作系统的一个接口来控制一个处理器及访问一条I/O通道或总线。每一体系结构备有一个通信控制器以交换数据。为了进行通信,必须使用一个多层协议来允许在对应的应用程序之间交换数据。
另一种交换数据的方法可以是一种协处理器的方法,该协处理器位于系统总线上,对系统总线进行仲裁,并与宿主处理器使用相同的I/O。协处理方法的缺点是为了支持非本地产的(不相同的)宿主I/O所需改写的代码数量。另一个缺点是为了从协处理器到宿主操作系统之间来回切换,用户必须对两种体系结构都熟悉,这是一种不友好的用户环境。
一种原有技术的容错计算机系统具有一个处理器模块,其中包括一个处理单元,一个随机访问存储器单元,外部设备控制单元以及一条单一总线结构,该总线提供模块中这些单元之间传送的全部信息。各处理器模块内部的系统总线结构包括双份合伙总线,而一个处理器模块的内部的各功能单元也有一个双份合伙单元。总线结构对一个模块的单元提供操作能力和来自主时钟的系统定时信号。
图2以功能图的方式示出了一个处理器模块的处理单元的结构。利用安装在共用的备份插件板上的同步执行相同操作的完全相同的一对处理器可以用比较的方法来检测处理错误。各插件板一般具有一个相同结构的冗余合伙单元。
计算机系统在整个处理器模块内部在各功能单元级上提供故障检测。错误检测器监视每一单元中的硬件操作并检验单元之间的信息传输。在处理器模块检测到一个错误时便将导致该错误的单元隔离并禁止它向其它单元传输信息,而模块则使用该故障单元的合伙者继续操作。
在任何单元中检测到一个故障时,该单元便被隔离并被置于脱机状态使之不能向其他单元传送不正确的信息。现在,脱机单元的合伙者继续操作并借此使整个模块能够继续操作。用户很少知道这一故障检测和向脱机状态的转移,除非以显示或其它表示方法提出对脱机单元提供服务的一个维护请求。插件板的配置允许方便地抽出和更换。
存储器单元也赋于检验系统总线的任务。为了这一目的,该单元设有测试总线结构上的地址信号和总线结构上的数据信号的奇偶校验器。一旦确定两条总线之一出现了故障,存储器单元便向模块中的其他单元发信号要它们只服从没有故障的总线。处理器模块的电源单元使用两个电源,每一个电源只向每对合伙单元中的一个单元供应操作电源。当检测到一个有故障的电源电压时,所有从受影响的单元到总线结构的输出线路都接到接地电位上以防止电源故障导致向总线结构传输错误信息。
图3以功能图的方式示出成对的S/370处理器与成对的S/88处理器,它们以容错结构的方式互连,使之能直接交换数据。与原有的S/88结构(图2)的相似性是故意留下的,但是用硬件和软件两者进行互连则是建立该实施例的操作的独特方法。下文将要讨论除了S/88型比较逻辑外,S/370处理器还与存储器控制逻辑和总线接口逻辑相耦合。下文还要说明,该比较逻辑与S/88处理器的比较逻辑以同样方式操作。此外,S/370处理器是直接耦合的而与对应的S/88处理器之间的耦合则是通过系统总线实现的的。与S/88处理器相同,S/370处理器是成对耦合的,而且这些处理器对被故意安装在现场可更换的,可以热插入的电路插件上。若干驱动器的互连细节将在下文更详细地说明。
本较佳实施例互连多台S/370处理器用于在一个S/370操作系统的控制下并发执行相同的S/370指令。它们与对应的多台S/88处理器,I/O装置以及主存储器耦合,它们全部在一个S/88操作系统的控制下并发执行相同的S/88指令。如下文所述,本实施例加入了异步地将S/88处理器从它们的I/O装置和存储器拆离的机制,使得在S/88处理器被拆离期间将来自S/370处理器的I/O命令和数据传递给S/88处理器,并将命令和数据转换成为S/88能够使用的形式供S/88重新被耦合到它们的I/O装置和主存贮器以后进行处理。1.在一个容错环境中运行一台正常情况下并不容错的处理器
上文所列的容错特性是在一个较佳实施例中实现的,该实施例将正常情况下非容错的处理器,例如S/370处理器耦合成第一对,它在S/370操作系统之一的控制下同时执行相同的S/370指令,并提供了比较一台处理器中的各种信号的状态与另一台处理器中的各种信号的状态的机构,以便即时地检测一台或两台处理器中的错误。
带有比较装置的S/370处理器的第二合伙对被用于与第一对并发执行相同的S/370指令及检测第二对中的错误。各S/370处理器耦合于一个容错系统的一台对应的S/88处理器,例如具有第一与合伙的第二对处理器,S/88 I/O装置以及S/88主存储器的S/88数据处理系统。每一台S/88处理器都有与之相关联的硬件将它耦合于I/O装置与主存储器。
对应的S/370与S/88处理器通过包括一个总线控制单元的装置将它们的处理器总线互相耦合。每一个总线控制单元包括这样一个装置,该装置与在对应的S/88处理器上运行的一个应用程序交互作用,以便异步地使这个S/88处理器脱离其关联的硬件并将其与总线控制单元相耦合,其作用是(1)将S/370命令和数据从S/370处理器传送到S/88处理器和(2)将S/370命令转换成S/88能执行的命令和将S/370数据转换成S/88可使用的数据。
S/88数据处理系统在S/88操作系统的控制下相继地处理该命令与数据。S/88数据处理系统也响应S/370处理器对中的任何一个中产生的错误信号或者与它们对应地耦合的S/88处理器对中产生的错误信号,以便将这一耦合对从服务中去掉,并允许其他的S/370,S/88耦合对继续进行容错操作。以上述这样一种安排,S/370处理器(在S/88系统协助进行I/O的操作下)在一个容错(FT)环境中以S/88的优越特性执行S/370程序,一切都不需要对S/370和S/88操作系统作重大的改动。
此外,S/88的存储器管理单元在S/88操作系统不知道的情况下受到控制,将S/88主存储器中的专用区域分配给双工的S/370处理器对中的每一对及它们的操作系统。双工的S/370处理器中的处理器独立地通过一个存储器管理装置和S/88总线接口耦合于S/88的公用总线结构以便从它们对应的专用存储器区域中取和存S/370指令与数据。
本较佳实施例提供了不改写S/370操作系统或S/370应用程序而在S/370硬件中实现容错性的一种方法和装置。不需要按例设计一个支持容错性的处理器而提供完整的S/370CPU硬件冗余与同步。一个S/370操作系统与一个容错操作系统(都是虚拟存储器系统)并发地运行而无须对其中任何一个作重大改写。本较佳实施例中提供了对等处理器对之间的硬件/微码接口,各处理器执行一个不同的操作系统。一台处理器是微码控制的执行一个IBM操作系统(例如,VM,VSE,IX370等)的IBM S/370机器。本实施例的第二台处理器是执行一个能够控制一个硬件容错环境(例如,IBM系统/88)的一个操作系统的一台硬件容错机,执行着S/88 VOS(虚拟操作系统)。
处理器对之间的硬件/微码接口允许两个操作系统并存于一个环境中而在用户看来如同一个单一系统环境。当每一个操作系统在处理各自的系统功能部分时,硬件/微码资源(存储器,系统总线,磁盘I/O,磁带,通信I/O终端,电源与外壳)各自独立工作。FT处理器和操作系统主管错误检测/隔离与复原,动态重新配置以及I/O操作。NFT处理器执行本身的指令而对FT处理器毫不知情。在NFT处理器看来FT处理器好像是多个I/O通道。
硬件/微码接口允许两台虚拟存储器处理器共享一个公用的容错存储器。FT处理器的存储器分配表中的一块连续的存储器块被分配给各NFT处理器。NFT处理器的动态地址翻译特性控制FT处理器分配给它的那一块存储器。通过使用一个位移寄存器在NFT处理器看来其存储器从地址0开始。为了将NFT处理器限制在其自己的存储器界限内,进行了界限检验。FT处理器可以访问NFT存储器和NFT地址空间内外的DMA(直接存储器访问)I/O数据块,而NFT处理器则被防止访问分配给它的地址空间以外的存储器。改变配置表可以变更NFT存储器的大小。2.将一台处理器从其相关联的硬件上解耦以便向其自身提供来自另一台处理器的命令和数据。
在一台现存的处理器和操作系统上增加一个新的设备一般需要通过一条总线或通道的硬件连接,以及为操作系统编写新的设备驱动软件。改进的“解耦”特性允许两台不同的处理器互相通信而无须将处理器中的一台连接到一条总线,通道也无须为总线控制进行仲裁。处理器不需要重大的操作系统修改或者传统的设备驱动程序便可进行通信。在两台不同的和不相似的处理器合并时给用户以一个单一系统的映象,即使每台处理器是在执行各自本身的操作系统也是这样。
这一特性提供了一种方法和装置,以一个成熟的操作系统的用户角度和可靠性将一个新近开发的操作系统所表现的特殊特性结合进去。它将所述的两个系统(硬件与软件)耦合在一起而构成一个新的第三系统。对于熟悉本技术的人员应能理解,虽然在本较佳实施例中所示的是将一台S/370系统耦合到一台S/88系统,然而任何两台不同的系统都是可以耦合的。这一概念的设计标准是:对该成熟的操作系统作小的改变或者不作改变以使它保持其可靠性,为减少代码开发时间而尽可能不去碰新近开发的操作系统。
这一特性包括一种方法,将两台不一样的系统各自带着自身的特征合并进一个兼备两者的特征的一个第三系统。这一方法的一个较佳方式在系统之间需要耦合逻辑,该逻辑的主要作用是作为一个直接存储器访问控制器(DMAC)。这一特性的主要目的是向在一台容错处理器(例如本较佳实施例中的S/88)中并在分层的容错操作系统上运行的一个应用程序提供从一台不同的处理器(例如本较佳实施例中的S/370)及其操作系统中取得数据和命令的方法。在任何一台处理器上都存在着硬件和软件两种防护机制以防止入侵(即管理态与用户态,存储器映象检验等)。通常,操作系统力图控制所有的系统资源,例如中断,DMA通道,以及I/O设备与控制器。所以多数人认为要将两种不同的体系结构耦合并且在这些机器之间传送命令和数据而又不曾从根本上设计这种功能是一项历史性的任务和/或不能实现的。
图4图示了在本较佳实施例的环境中将一台S/370处理器耦合到一台S/88处理器上。与图1中所示的S/370处理器相比,存储器已被S/88总线接口逻辑所取代,而S/370通道处理器已被一个总线适配器和总线控制单元所取代。需要引起特别注意的是用双虚线表示的S/370总线控制单元与S/88处理器之间的互连。
这一特性包括将处理器耦合逻辑连接到S/88容错处理器的虚拟地址总线,数据总线,控制总线结构,而不像大多数设备那样连接到系统总线或通道上。选通线表示在地址信号被触发后经过几个毫微秒在容错处理器的虚拟地址总线上的一个合法地址便被激活。包括总线适配器与总线控制单元的耦合逻辑确定是否在选通信号出现之前,一个S/88应用程序已经提出了一个予先选定的地址范围。如果检测到了这一地址范围,地址选通信号被封锁不使它去往S/88容错处理器硬件。这一消失的信号将防止容错硬件与操作系统知道一个机器周期的存在。硬件中的容错检验逻辑在这一周期中被隔离并将完全失去在这一时间中发生的任何动作。在处理器总线上的所有高速缓冲存储器,虚拟地址映象逻辑与浮点处理器不能知道已经出现了一个机器周期。即,所有S/88 CPU功能都被“冻结”,等待S/88处理器对地址选通信号的确定。
由于容错处理器逻辑封锁的地址选通信号被送往耦合逻辑。这便给于了S/88容错处理器对耦合逻辑的完全控制,该耦合逻辑是在容错专用的应用程序与连接的S/370处理器之间的接口。地址选通信号与虚拟地址是用于选择本地存储器、寄存器以及DMAC的,这些都是耦合逻辑的部件。图5图示了来自S/370总线控制逻辑的一个中断的检测结果,它被确定是在适当的级上并对应于一个适当的地址,所以,在它的最广方面上,解耦机制将一台处理器从其关联的硬件上解除连接并将该处理器连接到一个外来实体上与该实体进行高效的数据传输。
耦合逻辑具有一个本地存储器用于对进来的S/370命令进行排队和存储来往于S/370的数据。数据和命令是用耦合逻辑中的多个DMA通道送入本地存储器的。容错应用程序初始化DMAC并服务于来自DMAC的中断,该DMAC用于在一个命令到达时或者在接收或送出一块数据时通知该应用程序。为了完成一个操作,耦合逻辑必须在处理器的计时边之前返回数据选通应答线以保证容错处理器的双方都保持在同步中。
应用程序接收S/370通道型命令诸如启动I/O,测试I/0,等。然后,应用程序将每一条S/370 I/O命令转换成一条容错I/O命令并起动一个正常的容错I/O的命令序列。
这被认为是一种从一个操作系统得到一块数据和将其送至一个应用程序的新方法。这也是一种允许一个应用程序去处理一个中断的方法,而这种处理一般是操作系统所完成的功能。应用程序能够随意将该容错处理器从它的正常处理器功能切换成I/O控制器功能,而这是在一个周期的基础上通过它所选择的虚拟地址完成的。
这样,两个具有不同指令与存储器寻址体系结构的数据处理系统便被紧密地耦合在一起使得一个系统可以高效地访问另一个系统的虚拟存储空间的任何部分而另一系统并不知道前一个系统的存在。另一个系统中的专用应用程序通过硬件将专用的地址放在总线上与前一个系统进行通信。硬件确定该地址是否是一个专用地址。如果是专用地址,将选通封锁,不让另一系统的电路检测到,并重新定向这一选通,使得另一系统的CPU能够控制专用硬件和一个两个系统都能访问的存储器空间。
另一个系统在必要时能够完全控制前一系统,例如为了初始化与配置任务。而前一系统则无论如何不能控制另一个系统,但是能够以下述方式向另一系统提出服务请求:
前一个系统将I/O命令与/或数据以前一个系统的格式放在公共访问存储器空间中并使用专用硬件向另一个系统提出一个专用级别中断以调用该专用应用程序进入工作。
后者(即另一个系统)被导向包含该出台信息的存储器空间并对出台信息进行处理将其格式转换成另一系统熟悉的形式。然后,该应用程序引导另一系统的自身操作系统在经过转换的命令和数据上执行自己熟悉的I/O操作。从而,上述一切对于两个系统的自身操作系统都是完全透明地发生的而且不需要对它们(两个系统的操作系统)作重大的改动。3.对操作系统透明地向一个系统提出中断
大多数当前的程序在两种(或更多)状态之一中执行,一种管理态,另一种是用户态。应用程序在用户态中运行,而诸如中断这样的功能则运行在管理态。
一个应用程序连接一个I/O端口然后打开该端口,以读,写或控制的形式发布一个I/O请求。这时处理器将产生一个任务切换。当操作系统接收到一个表示一个I/O完成的中断时,该操作系统便将这一信息放入一个就绪队到并按系统资源的优先级进行排序。
操作系统保存所有的中断向量供它自己使用,没有一个是能被新特性所利用的,例如来自另一台机器的表示一个I/O请求的一个外部中断。
在较佳实施例的S/88中,多数可利用的中断向量实际上并未使用,而将这些向量设置成导致引导到一个“未初始化的”或“虚假的”中断的共同的错误处理程序。带有这一改进的较佳实施例用指向关于S/370耦合逻辑中断的专用中断处理程序的适当向量来替代这些本来不用的向量的一个子集。然后将经过修改的S/88操作系统在新结合的向量在位的情况下重新连接起来使用。
本较佳实施例的系统/88有8个中断级,除了级4以外各级都使用自动向量(autovector)。本申请的改进使用这些自动向量级中的一个级,级6,它具有仅次于最优先级的级。这一级6一般是系统/88用于A/C电源故障中断的。
将系统/370耦合到系统/88的逻辑以它的中断请求和A/C电源故障的中断进行“或”运算来向级6提出中断。在系统初始化时,指向用于耦合逻辑中断的专用中断处理程序的适当向量编号由一个对S/88操作系统透明的应用程序装入该耦合逻辑中(某些被装入DMAC寄存器中)。
当系统/88接收到任何中断时,它只使用硬件和S/88处理器的内部操作启动一个中断应答(IACK)周期以处理该中断并取出第一条中断处理程序指令。不需要程序指令执行。然而,向量编号也必须是以透明的方式获得与提供的。这在本较佳实施例中是当耦合逻辑提出一个级6中断时通过将S/88处理器从其关联的硬件(包括A/C电源故障的中断提出机构)上脱钩并将该S/88处理器耦合到S/370-S/88耦合逻辑来实现的。
更具体地,S/88处理器在其输出上设置功能码与中断级并且在IACK周期的开始要求地址选通(AS)与数据选通(DS)。如果耦合逻辑的中断提出信号是活跃的,则从S/88硬件,包括A/C电源故障中断机构,上将地址选通封锁;而将AS送往耦合逻辑以读出相应的向量编号,通过数据选通将这一向量编号选通进S/88处理器。由于数据选通在S/88硬件上被封锁,对应于获得耦合逻辑中断向量编号的机器周期(IACK)对于S/88操作系统来说是透明的。
如果在IACK周期开始时,耦合逻辑中断信号并未活跃,则执行一个正常的S/88级6中断。4.在两个或更多执行不同的虚拟存储器操作系统的处理器之间共用一个实存储器。
这一特性将一个容错系统耦合到一台不同的处理器和操作系统,该操作系统没有支持一个容错存储器的代码(程序),即,没有支持通过热插接拆除或插入存储器板,即时检测错误数据以及适当时进行修复等的代码。
这一特性提供了一种方法和装置,借此两个或更多各目执行不同的虚拟存储器操作系统的处理器可以以对两个操作系统都是透明的方式共享一个单一的实存储器,以及其中一个处理器能够访问另一个处理器的存储器空间,从而使这些多个处理器之间能够实现数据传输。
这一特性将两个用户熟悉的操作系统结合在一起而给用户一个单一操作系统的外观。每一个操作系统是一个虚拟存储器操作系统在正常情况下控制各自的全部实存储器空间。这一发明只有两台处理器通过一条公共系统总线共用的一个实存储器空间。既不要实质性地改写操作系统,任何一个操作系统也不知道另一个操作系统的存在或者实存储器是共享的。这一特性使用运行在一台第一处理器上的一个应用程序来从头至尾查找该第一操作系统的存储器分配队列。当查找到能够满足第二操作系统的需求的足够大的一个连续的存储器空间时,使通过操作指针将这一存储器空间从第一操作系统的存储器分配表中去掉。第一操作系统不能再使用(例如,重新分配的能力)这一被去掉的存储器除非应用程序将该存储器返回给第一操作系统。
第二操作系统从I/O观点上使用第一操作系统,而第一操作系统则作为一个I/O控制器响应第二操作系统。第一操作系统是所有系统资源的主人,并且在本较佳实施例中是一个硬件容错操作系统。第一操作系统初始分配与回收存储器(除了为第二操作系统“偷去”的存储器外),并处理所有相关联的硬件的故障与修复。其目的在于不需对操作系统代码作很大的改动而将两个操作系统结合在一起。每一个操作系统必须相信是它在控制所有的系统存储器,因为该存储器是两台处理器所使用的一个单一的资源。
在系统起动时,第一操作系统及其处理器承担系统的控制,并且硬件将第二处理器保持在复位状态。第一操作系统引导该系统并确定存在多大的实存储器。操作系统最终把整个存储器组织成4KB(4096字节)的块并将每一可利用的块列在一个存储器分配队列中。列出在队列中的每一个4KB块指向下一个可利用的4KB块。第一系统所使用的任何存储器或者被从队列的顶部以4KB的块为单位去掉或者以4KB的块为单位加在队列的顶部;同时将块指针作适当的调整。当用户向操作系统请求存储器空间时,从该队列中分配必要数量的4KB块实存储器来满足这些请求。当存储器不再需要时,这些块便返回到队列中。
接着,第一操作系统执行一系列称作模块启动的功能对系统进行配置。模块启动所执行的一个应用程序是一个用于从第一操作系统夺取存储器并将其分配给第二操作系统的一个新的应用程序。这一程序扫描整个存储器分配表并找出一个4KB块存储器的连接串。然后,该应用程序改变对应于该连接块串的队列部分的指针,借此将一个存储器的连接块从第一操作系统的存储器表中去掉。在本较佳实施例中,被去掉的第一个4KB块前面的一个4KB块的指针被改变为指向紧随在被去掉的连接块串后面的那一个4KB块。
这时,第一操作系统失去了对这一实存储器空间的控制或不知道这一实存空间的存在,除非该系统被重新引导或者应用程序返回该存储器指针。这好像是第一操作系统认为一段实存储器分配给在它自己上面运行的一个进程而且由于这些块不只是分配给一个用户而是被从表中去掉了,所以不能再行分配了。
然后,被去掉的地址空间被交给第二操作系统。存在着硬件位移逻辑使得从第一操作系统偷来而交给第二操作系统的地址块在第二操作系统看来是从地址零开始的。然后,第二操作系统控制从第一操作系统偷来的存储器,似乎这是它自己的实存储器一样并通过它自己的虚拟存储器管理程序控制该存储器,即,它将第二系统发布的虚拟地址翻译成在分配给它的实存储器地址空间范围内的实地址。
在第一操作系统上运行的一个应用程序能将I/O数据移入或移出第二处理器的存储器空间,然而,第二处理器却不能在分配给它的空间以外读或写,因为第二操作系统并不知道其它的存储器。如果在第二操作系统中出现了一个操作系统故障,一个硬件陷井将防止第二操作系统无意中写入第一操作系统空间。
分配给第二操作系统的存储器空间大小由用户在模块启动程序中的一张表中给出。如果用户要求第二处理器具有16兆字节则他将其规定在模块启动表中,而应用程序则将从第一操作系统得到这样多的空间。一个专用SVC(服务调用)允许应用程序能够访问第一操作系统的管理程序区以改变这些指针。
为什么希望两个操作系统共享同一个存储器的一个重要理由是该存储器在第一处理器上是容错的,并且允许第二处理器使用来自第一处理器的容错存储器及I/O。第二处理器是以复制某些硬件和比较某些地址,数据及控制线来成为容错的。使用这些技术,虽然第二操作系统并不具备容错能力。然而第二处理器事实上是一台容错机器。一台以上第二类的外来处理器与操作系统可以耦合到第一操作系统上每一台外来处理器都提供有一个独立的实存储器区域。
在本较佳实施例中,第一操作系统是容错的S/88的操作系统而第二操作系统则是S/370的操作系统中的一个,而第一与第二处理器分别为S/88与S/370处理器。这一特性不但使一台在正常情况下非容错的系统能够使用由一台容错系统维护的一个容错存储器并且使得该非容错系统能够(1)共享对容错系统所维护的容错I/O装置的访问以及(2)在没有通道对通道耦合而造成的明显的延迟下以更高效的方式实现系统之间的数据交换。5.单一系统映象
单一系统映象这一名词是用来定义计算机网络的特征的,在这一网络中,用户对远程数据与资源(例如,打印机,硬磁盘等)的访问对用户来说如同对接有用户键盘的本地终端的数据与资源进行访问一样,从而,用户可以简单地使用名字来访问一个数据文件或资源而无须知道目标在网络中的位置。
“衍生的单一系统映象”这一概念在这里作为一个新名词引入,意在应用在网络中的这样的计算机单元,它们缺乏直接连接到一个具有单一系统映象的网络的设施,但利用该网络的硬件和软件资源以一种等效的单一系统映象直接连接到该网络上。
为了这一讨论的目的,为了研讨“衍生的单一系统映象”的效果,一台计算机系统的直接连接可从用该系统与网络部件之间不同程序的耦合来实现。名词“松散耦合”在这里表示通过衍生计算机与“当地的”计算机(它是网络的一部分)的I/O通道所实现的一种耦合。“紧密耦合”这个名词现在用于表示衍生计算机与本地计算机之间的一种关系,这种关系是建立在通过专用硬件允许每台计算机在直接基础上与其它计算机进行通信(即,不使用它们现成的I/O通道)。
现在设想一种称为“透明紧密耦合”的特殊紧密耦合,包括采用耦合硬件使各计算机(衍生与本地的计算机)能够利用另一台计算机的资源,而各计算机的操作系统并不知道这种利用。透明紧密耦合,如刚才定义的,构成达到在耦合网络中的成本与性能优点的一个基础。虽然耦合硬件设计复杂,但是相比对操作系统进行广泛修改所必需花费的钱而言是微不足道的。性能优点来自由于直接耦合得到的快速连接和在耦合接口上减小了带宽干扰。
在本节中所用的“网络”一词比起当前流行的把网络看成是一个较大的国际性远程处理/卫星连接模式且在它上而可以连接各种不同类型的机器只要它们适应某些特定协议这样一种概念来要狭义一些。而“网络”在本节中是用在系统/88处理器的一个连接复合体或者用在其它处理器的具有单一系统映象特征的连接的复合体上。
将使用若干严格地定义的名词来进一步说明一个单一系统映象的概念;并且将用本改进的特定的较佳实施例作为澄清这些概念的基础:a.高速数据互连(HSDI)指的是一个硬件子系统(与电缆)用在独立的硬件单元之间的数据传输。b.链路指的是一个软件结构或客体,它在整体上由指向某些其它软件客体的一个多字段拼成的指针所组成,并且它具有一个别名的许多特征。C.模块指的是一个独立处理单元至少包括下列的每一种部件:壳体,电源,CPU,存储器以及I/O设备。一个模块将多个壳体用螺栓连接在一起以容纳附加的外部设备以便扩充建立成为一个更大的单一模块。某些I/O单元(终端,打印机)可以是外部的并用电缆与壳体相连;它们被认为是该单一模块的部件。一个模块可以只有一个CPU复合体。d. CPU复合体指的是在同一壳体中的一个或多个单或双处理器板,它们在操作系统软件的管理与控制下作为一个单一CPU来操作。不管实际上安装了多少处理器板,任何用户程序或应用程序是这样编写和执行的,即只当存在一个CPU。处理的工作负荷是在可利用的CPU板之间大体上分担的,而且可以并发地执行多个任务,但对每一应用程序所呈现的是一个“单CPU映象”。e.客体指的是存储在系统中可以用一个层次名字唯一地标识的一组数据(包括可执行的程序)。一条链路是一个唯一地命名的指向某一其它客体的指针,所以也认为是客体本身。一个I/O端口是指向一个特定I/O设备(一个数据源或目的地的一个唯一地命名的软件结构,所以也是一个客体。操作系统有效地防止客体名字的相重。
因为“单一系统映象”这一名词在文献中的使用不统一,本改进为了澄清“衍生的单一系统映象”,将对此作较详细的说明。在定义与说明名词”单一系统映象”时,“映象”一词指的是系统与环境的应用程序视图。在这一上下文中,“系统”指的是应用程序员向其发布指令的硬件(CPU复合体)和软件(操作系统及其实用程序)的组合。“环境”指的是所有能被操作系统寻址的从而能被程序员通过向操作系统提出服务请求间接地访问的I/O设备及其它相连的设施。
这样一台真正的单一独立计算机及其操作系统必然对程序员提供一个单一系统映象。只有当我们要把多台系统连接在一起使它们共享I/O设备及分布处理时,用户所见的这一“映象”才开始改变;两台机器通过远程处理线(或者甚至是电缆)用平常的互连办法迫使程序员不得不去了解和学习如何操作该双机环境,才能从扩充的设施中得到好处。
一般,为了访问其它环境中的设施,程序员必须请求他的本地操作系统将他的要求通知该“其它”操作系统,并详细说明这些要求。然后,经过了一个不定长的延迟以后,他必须能够异步地(并以适当的序列)接收他的请求的结果。处理与控制机器之间的多则消息与数据传输在两台机器中都构成可观的处理开销;这对在这样一个双系统环境中的程序员可能是不方便的,低效的和困难的。而随着以传统方式连接的机器数目的增加,程序员所面临的复杂性会急剧增加。
系统/88的原始设计中包括了简化这一处境的装置,并对程序员提供单一系统映象,即,模块之间的HSDI连接,以及各模块操作系统中的HSDI驱动软件。例如,在一个双模块系统中,两个操作系统中每一个都“知道”整个环境,而且不需要“另一”操作系统的主动干预便能跨越HSDI访问设施。通信开销的减少是可观的。
大量不同大小与型号的模块可从通过HSDI互连而建立一个在程序员看来是一个(可扩充)环境的系统复合体。他的产品,即一个应用程序,可以存储在这一系统复合体的一个磁盘上,在复合体的任何一台CPU上执行,从复合体中任何一台终端进行控制和监视,以及向复合体中任何一台I/O设备传送数据或自任何一台I/O设备接收数据,这一切都无须特殊的编程考虑并比老方法有更先进的执行效率。
操作系统及其各种特性与设施是以这样一种方式编写的:好象本来就设定了分布式环境以及在这一环境中操作的用户无须考虑或控制各种实体(实用程序,应用程序,数据,语言处理程序等)究竞在何处。使得这一切成为可能的关键是每一客体必须有一个唯一的名字这一条强制性规定;由于最基本的名字限定词是模块名,所以这一规定很容易地扩展到整个系统复合体,因为模块名本身在复合体中必须是唯一的。所以在整个复合体中定位任何客体同正确地为它命名一样简单。程序员为一个客体命名时由于链路的规定而又一次得以简化,因为链路规定允许用极短的客体代号指针来代替极长而且复杂的名字。
为了在这一互连的S/88模块的复合体中实现一个“衍生的单一系统映象”这一概念,多台S/370处理器以下述方式耦合到S/88处理器上,使之对S/370处理器的用户至少提供S/88单一系统映象特性的某些方面。即使S/370处理器和操作系统并不提供这些特性。
在S/88模块中提供了一台或更多的S/370处理器。一台S/88处理器唯一地耦合到各台S/370处理器上。下面将看到,各S/370处理器都是双份的并在S/88软件控制下进行容错操作。理想地运用上述的解耦与中断功能机构使S/88与S/370处理器直接耦合,使得处理器之间的数据传输对于S/370与S/88操作系统都是透明的。没有一个操作系统知道其它处理器或操作系统的存在。
各S/370处理器使用该容错S/88系统复合体来全面地提供S/370主存储器,及仿真的S/370 I/O通道与I/O设备。S/370没有不属于S/88的主存储器,通道或I/O设备,并且所有这些设施都是设计成容错的。
在系统配置时,各S/370处理器从S/88存储池中得到1至16兆字节的一个专用主存储器连接块;将这一块从S/88的配置表中去掉,从而S/88操作系统即使无意的也不能访问该块。容错硬件寄存器保存各S/370的存储器块指针,使得S/370无法访问分配给它以外的任何主存储器。其结果是,S/370对它的主存储器有一个完全传统的单一系统视图;存储器的容错特征是完全透明的。S/88中的一个应用程序(EXEC370)用实际的S/88设备和S/88操作系统调用来仿真S/370通道与I/O设备。由于它是一个应用程序,所以它具有S/88复合体的单一系统映象视图;从而将这一视图扩展到整个S/370“伪通道”。
从另一方面来来,即从S/370操作系统(并扩展到应用程序序)的观点来看,这有助于看见一个“窗口”(即通道),通过它发生所有的I/O操作。窗口的性质并未改变,不需要改变任何S/370程序,但通过窗口的“视野”得到了开阔以包括该单一系统映象属性。一个小的概念性步骤描绘出一大批S/370高效地共享受S/88管理的一个单一数据基。
这种连接技术的效果是各S/370的相对简单和快速的动态可重新配置性。通道“窗口”是双向的,S/88控制程序EXEC370在它的另一面;EXEC370有全权去停止,复位,重新初始化,重新配置和重新启动S/370 CPU。这样,通过使用具有单一系统映象属性的其它设施(S/88 I/O与操作系统)来透明地仿真S/370 I/O设施,这一属性便扩展到并提供给了S/370。
所以,S/370被赋予了目标单元的独立性。它的用户可以用一个在S/88操作系统目录中赋予的名字来访问一个数据文件或其它资源。用户无须知道该数据文件在S/370-S/88模块复合体中的地点。
在一个模块9中的一个S/370处理单元所发布的S/370I/O命令将被同一模块中紧密耦合于该S/370处理单元的一个相关的S/88处理单元所处理(或者被互连在模块9中和受该S/88虚拟操作系统的相同付本所控制的其它S/88处理单元所处理,该S/88虚拟操作系统是支持多道处理的),从而去访问在同一或其它相连接的模块上的数据文件等。它可以将被访问的文件返回给提出请求的S/370处理单元或者将它们送至其它模块,例如,送去与其它文件合并。6.小结
这样,两个虚拟操作系统(例如,S/370VM,VSE或IX370以及S/88 OS)功能便合并到一个物理系统中。S/88处理器运行S/88 OS并管理该系统的容错特性。同时,一台或多台S/370处理器被插接到该S/88的机柜中,S/88 OS分配给每一台S/370处理器1-16兆字节的连接的存储器。名S/370虚拟操作系统认为它的存储器分配从地址0开始,并且通过正常的S/370动态存储器分配与调页技术管理其存储器。对S/370进行界限检验以防止该S/370访问S/88存储器空间。S/88必须访问该S/370地址空间,因为S/88必须将I/O数据送入该S/370 I/O缓冲区。S/88操作系统是所有系统硬件和I/O设备的主人。对等的处理器对在一个单一系统环境中执行它们各自的操作系统,每个操作系统都不需要重大的改写。导言——原有技术系统/88
本申请的改进将按照一个较佳的型式进行说明,其中IBM系统/370(S/370)处理单元(在诸如VM,VSE,IX370等S/370操作系统的任何一个的控制下执行S/370指令)被紧密耦合到IBM系统/88(S/88)处理单元(在一个容错环境中在一个S/88操作系统的控制下以容错方式执行S/88指令)上,它们是以下述方式耦合的:允许S/370处理单元以系统/88的单一系统映象,热可接插性,即时错误检测,I/O负荷分配以及故障隔离和动态可重新配置性等特性来进行容错操作。
国际商用机器公司出售的IBM系统/88在IBM系统/88文摘,第二版,1986年出版以及其它可利用的S/88用户刊物中得到一般性的描述。包括模块10(图6A)的系统/88计算机系统是一种高利用率系统,它是为满足要求高可靠性在线处理的用户的要求而设计的。系统/88将一个双联的硬件体系统结构与灵巧的操作系统软件相结合以提供一个容错系统。通过系统/88高速数据互连(HSDIs)(图6B)将多个系统/88模块10a,10b,10c连接在一起,通过系统/88网络(图6c)将模块10d-g连接在一起,使系统/88也可横向的增长。
系统/88是设计成为能够检测一个部件故障在何时何地发生,并防止由这种故障所导致的错误和中断引入系统内。由于容错性是系统/88硬件设计的一部分,它不需要应用程序开发人员来编制这一方面的密序。容错性可以在没有软件开销或不降低性能的情况下实现系统/88通过主要部件的倍增来达到容错性,这些主要部件包括处理器,直接访问存储器(DASDs)或磁盘,存储器和控制器。如果一个双重的部件发生故障,其双联伙伴自动接替处理而系统对端点用户仍然可被利用。还提供了双重电源与在短时间电源故障中保持存储器的后备蓄电池。系统/88及其软件产品扩展方便,用户之间共享资源,以及在对端点用户维持一个单一系统映象的同时解决复杂需求。
一个单一系统映象是一个包括许多处理器的分布式处理环境,各有其自己的文件与I/O,通过一个网络或LAN互连,这给用户以他正在一台单一机器上注册的印象。只须改变一个目录操作系统允许用户从一台机器转换到另一台机器。
以适当的计划,在系统/88运行期间,在对端点用户保持一个单一系统映象的同时可以扩充系统/88的处理能力。横向生长是通过使用系统/88 HSDI先将多个处理模块结合成系统,再使用系统/88网络将多个系统结合成一个网络来实现的。
一个系统/88处理模块是一台完整的,独立的计算机,如图6A所示。一个系统/88系统或者是一个单一模块或者是以IBMHSDI连接在一个本地网络中的一群模块,如图6B所示。使用远程传输设施的系统/88网络是用于互连多个系统以向端点用户构成一个单一系统映象的设施。两个或更多系统可以用通信线路互连以构成一个长距离网络。这种连接可以通过一条直接的电缆,一条租用的电话线,或者一个X。25网络。系统/88检测对远程资源的引用并在模块之间和系统之间按确定的路线发送消息,这些都是对用户完全透明的。
热可插接性允许在不中断系统操作的情况下完成多次硬件更换。系统/88将一个故障部件以服务中取出,以其双联的伙伴继续服务,并在故障部件上点亮一个指示灯,这一切都不需要操作员干预。用户或服务人员可以在处理过程中拆除与更换一个出故障的双重板。对用户的利益包括适时的修理和减少了维护费用。
虽然系统/88是一种容错的,连续操作的机器,但有时机器操作也不得不停止。这一情况的一些例子是系统/88操作系统的升级,改变硬件配置(增加主存储器)或者执行某些服务过程。
双重的系统/88部件与系统/88软件帮助维护数据的完整性系统/88在故障点上检测一个故障或瞬时错误而并不将它传播给整个应用程序或数据,从而保护了数据不受损害并维护了系统的完整性各部件包含自身的错误检测逻辑与诊断。错误检测逻辑在每一个周期比较并行操作的结果。
如果系统检测到一个部件故障,该部件便自动地被从服务中去掉。处理工作继续在双联的伙伴上进行而内部诊断则对故障部件进行检验。当处理工作继续在一个故障部件的双联伙伴上进行时,错误检测功能会自动在一个从服务中退出的故障部件上运行诊断程序。如果诊断程序确定某些部件需要更换,系统/88能够自动打电话通知一个支持中心报告这一问题。用户从快速修复和低维护费用中受益。
系统/88基本上是以美国专利4,453,215(名称“用于容错计算的中央处理装置”,1984年6月5日授予劳白脱里德)以及相关的美国专利4,486,826,4,597,0844,654,857,4,750,177与4,816,990中详细描述过的处理器系统为基础的;所述的专利统统在这里提出,作为参考,如同它们是完整地在这里提出的一样。215里德专利中的一部分图示在本申请的图7与8中。
本申请的图7与8中的这一计算机系统具有一台包含一个处理单元12的处理器模块10,一个随机访问存储器单元16,外部设备控制单元20,24,32以及在该模块中的若干单元之间提供所有信息传输用的一个单总线结构30。在各处理器模块内部的总线结构包括双伙伴总线A,B,并且各功能单元12,16,20,24,32都有一个完全相同的伙伴单元。除了随异步的外部设备操作的控制单元以外,各单元通常与其伙伴单元都以同步方式操作。例如,一个处理器模块的两个伙伴存储器单元16,18一般都是完全同步地驱动两条伙伴总线A,B,并一起被总线结构30所驱动。
计算机系统在一个处理器模块内部的各功能单元级上提供故障检测。为达到这一特性,错误检测器监视各单元内的硬件操作并检验单元之间的信息传输。检测到一个错误导致处理器模块将发生该错误的总线或单元隔离开来,不让它们向其它单元传输信息。接下去的操作将使用故障总线或单元的伙伴。在一次信息传输之前检测到一个错误时,接下去的操作如同没出现错误时一样,继续执行这一传输。而在一次信息传输的同时检测到一个错误时,继续进行的操作可以重复这一传输。
计算机系统能很快地采取上述故障检测与校正行动,即,在一个操作周期的一部分中。计算机系统最多只会有一个正确性有问题而为了保证总体数据的正确性而需要重发的单个信息传输。
虽然一台处理器模块具有相当规模的硬件冗余以提供容错操作,但是没有双重单元的一个模块仍然是完全可操作的。
功能单元冗余使得模块能在任何单元中发生故障时继续操作。通常,在没有检测到故障时,一个处理器模块的所有单元都以选择的同步性连续地操作。当在任何一个单元中检测到一个表示错误的故障时该单元便被隔离并置于脱机状态,使它不能向模块中其它单元传输信息。脱机单元的伙伴继续操作,通常基本上不出现中断。
除了在一个模块内的功能单元的双份伙伴提供容错操作以外,一般,在一个处理器模块内的各单元都有参加数据传输的双份硬件。在一个功能单元内设置这种双份硬件的目的是独立于其它单元地在各单元内测试故障。一个模块中各单元内的其它结构包括错误检测结构一般不是双份的。
服务于一个处理器模块中所有单元的公共总线结构很好地利用了上述两级双份的结合并具有三组导线构成一条A总线,一条重复A总线的B总线,及一条X总线。A与B总线各载有一组完全相同的周期定义,地址,数据,奇偶校验以及其它信号,可以将这两组信号进行比较对单元之间的错误信息传输提出警告。X总线的导线不是双份的,它通常用于运载模块范围内的其它操作信号,例如定时,错误状态,及电源。另外提供的一条C总线用于伙伴单元之间的本地通信。
处理器模块用一组技术检测与定位各功能单元中的故障,这些技术中包括对该单元的双工部件的操作进行比较,利用奇偶校验及更有效的错误检验与校正码,以及对操作参数例如电源电压的进行监视。各中央处理单元有两个冗余处理部份并当比较结果不正确时,将该处理单元从向总线结构传输信息中隔离。这也是将该处理器模块的其它功能单元从可能出现问题的处理单元的任何故障信息中隔离。各处理单元也具有用于提供虚拟存储器操作的结构,该结构不是双工的。反之,处理单元使用奇偶校验技术来检测这一结构中的故障。
随机访问存储器单元16装配有两个非冗余的存储器段,每一个段安排为用于存储一个存储器字的不同字节。该单元用一个错误检测码检测各存储器段中的故障以及两个段合成中的故障。同样,错误检测器将阻止存储器单元把潜在的错误信息传输到总线结构并经此传到其它单元中去。
存储器单元16也承担检验双工总线导线的任务,即,A总线与B总线。为了这一目的,该单元具有测试总线结构上的地址信号的奇偶校验器以及测试总线结构上的数据信号的奇偶校验器。此外,一个比较器对A总线上的所有信号与B总线上的所有信号进行比较。当以这一方式确定出某条总线有故障时,该存储器单元取道X总线向该模块的其它单元发出信号通知它们只服从无故障的总线。
一个处理器模块的外部设备控制单元使用一个总线接口部件与公共总线结构相连接,并与称为“驱动”与“检验”的双工控制部件相连,以及与在该控制部件和它外部服务的外部输入/输出设备之间进行通信的一个外部设备接口部件相连接。还有用于与磁盘存储器52a,52b进行操作的磁盘控制单元20,22,用于通过通信面板50与通信设备(包括终端,打印机及调制解调器)进行操作的通信控制单元24,26,以及用于在一个多处理器系统中将一个处理器模块与另一个处理器模块互连的HSDI控制单元32,32。在各种场合中,总线接口部件将来自A总线与/或B总线的输入信号送入驱动与检验控制部件,测试来自总线结构的某些输入信号中的逻辑错误,并测试驱动与检验通道输出的信号的相等性。各外部设备控制单元中的驱动控制部件提供适用于该单元所服务的I/O设备的控制,地址,状态与数据处理功能。一个单元的检验控制部件基本上与检验驱动控制部件的目的相同。各控制单元的外部设备接口部件包括一个奇偶校验与比较器设备的组合,用于测试在控制单元与外部设备之间通过的信号中的错误。
与一台同步I/O设备一起工作的一个外部设备控制单元,例如通信控制单元24,与其伙伴单元步伐一致地同步操作。然而,互为伙伴的磁盘控制单元20,22与不同的非同步磁盘存储器一起工作因而同步性有所限制。互为伙伴的磁盘控制单元20,22并发执行写操作但是由于磁盘存储器各自异步地操作所以磁盘控制单元20,22也不是精确同步的。控制单元32与其伙伴也是以这种有限程度的同步性典型地进行操作的。
一个模块的电源单元使用两个大容量电源,每一个电源只为每对结成伙伴的单元中的一个单元提供操作电源。这样,一个大容量电源供应总线结构的双工部分中的一个,两个成伙伴的中央处理单元中的一个,两个成伙伴存储器单元中的一个,以及各对外部设备控制单元中的一个单元。大容量电源同时为处理器模块的非双工单元提供电力。模块的各单元都有一个电源结构,它接受来自一个大容量电源的操作电力并且本身又产生该单元所要求的操作电压。这一电源结构还监视电源电压。在检测到一个故障电源电压时,这一电源结构生成一个信号将所有从该单元到总线结构的输出线箝位成地电位。这一动作防止了任何单元上的一个电源故障导致向总线结构传输出故障的信息。
处理器模块的某些单元以一个操作周期执行一次信息传输,该周期在实际信息传输前包括一个错误检测定时相位。提供有这一操作的一个单元,例如,一台外部设备的控制单元,从而在启动一次信息传输之前测试故障状态。在检测到一个故障时,该单元禁止该信息的传输。然而,该模块仍能不中断即不延迟地继续操作,并从非禁止的伙伴单元启动该信息传输。
对于操作时间更具重要性的处理器模块中的其他单元,一般至少包括中央处理单元与存储器单元,与该传输所附属的错误检测并发地执行每一次信息传输。在检测到一个故障时,该单元立即生成一个信号向其他处理单元报警,要它们不理紧接在前面的信息传输。处理器模块能从报告故障状态的那个成员的伙伴那里重做这一信息传输。这种操作方式优化了操作速度,因为每次信息传输的执行并不为了错误检测的目的而延迟。只有在相对少的情况下检测到一个故障时延迟才会发生。提供了一个总线仲裁装置,当多个单元同时请求访问时,该装置确定哪一个能访问系统总线。通过HSDI连网的容错S/370模块9
图7在原有技术模块10的上方示出了S/370与S/88双处理器对(互为伙伴单元)21,23的互连,当它们用来代替模块10中的双S/88单元12,14时,建立了一个新的唯一的S/370模块9。当用S/88 HSDI和网络以相似于图6B,6C中所中所示的用于模块10的方式将这些唯一的模块9互连时,它们建立了一个具有S/88的容错特性,单一系统映象,热可插接性,同一模块内的多个S/88处理单元的I/O负荷共享等的S/37370复合体(而不是一个S/88复合体)。
具体地说,在独一无二的模块9中的伙伴单元21,23中的S/370处理器在它们各自的S/370操作系统的控制下执行S/370指令;互连的S/88处理器结合它们各自的S/88存储器和S/88外部设备单元在S/88操作系统与一个S/88应用程序的联合控制下执行所有的S/370 I/O操作。
此外,可以在新模块9中结合进更多的S/370-S/88处理器伙伴单元25,27与29,31,从而在独一无二的模块9中容许建立一个S/370多处理器环境。此外,在伙伴单元21,223和25,27和29,31中的S/370处理器可以以伙伴对为单位各自在不同的S/370操作系统下操作。双处理器伙伴单元21,23的一般性说明
图8示出了在单元21中互连的S/370与S/88处理器的一种较佳形式。在单元21的下方部分包括一个中央处理器12,除了在处理器部件对60,62中每一个都使用一个单一的处理器部件外其它基本上和上述里德(Reid)专利相同。在里德(Reid)专利中,在60处和在62处都提供有双处理器以分别执行用户程序与操作系统代码。
在本申请中,两种功能都由一个单一的微处理器执行,最好是一台MC68020用户手册(第三板(ISBN-0-13-567017-9)Motorola公司出版,板权所有1989,1988)中所描述的Motorola MC68020微处理器。所述刊物包括在本专利中供引用,如同它全部在这里提出一样。
从而,各处理器部件(PE)60与62较佳地包括一台Motorala 68020微处理器。多路转换器61,63以里德专利中所详细描述的方式经由地址/数据控制总线A与B及收发器12e将处理器部件60,62连接到总线结构30上。本地控制64,66与一个虚拟存储器映象12c被提供给部件60,62。一个比较器12f用来比较在控制、数据与地址线上的往来于总线30和处理器部件60,62之间的信号来检验生成错误的故障。信号不匹配导致比较器12f向公共控制电路86送出一个错误信号,而电路86在总线结构30的X总线上送出一个错误信号并禁阻收发器12e中的驱动器(未示出),使处理单元12脱机。箝位电路88,90响应单元12上的一个电源故障将所有从单元12到总线结构30的输出线箝位到地。这些部件在里德专利中更详细地描述过。
图8的上部所示为一对S/370处理部件85、87与S/888总线结构30和与S/88处理部件60、62相连接的一种较理想的形式。处理元件85、87通过多路转接器71、73及收发器13与总线结构相连接,其方式在逻辑上类似于部件60、62与总线结构的耦合。
提供了一个比较电路15(在图32A、B中将更充分地介绍)两个钳位电路77、79和一些通用的控制电路75,它们的工作方式类似于单元12中对应的部件的工作方式。控制电路86与处理元件60、62的中断机构耦合。S/370处理器85、87及其有关的硬件用S/88来处理错误并进行恢复。这样,还用控制电路775通过线路95与通用控制电路86偶合,使后者处理比较电路15检测出的错误。这里的连接线95还可在其中一对处理器出错的情况下,使通用控制电路75和86的各自处理器对85、87和60、62从线路中断开。
单元21中S/370处理部件的较理想形式包括中央处理部件85、87,存储管理部件81、83以及处理到处理器(如S/370至S/88)的接口89、91。存储管理部件81、83通过多路转换器71、73、收发器13和总线结构30使处理部件85、87与S/88的主存储器16连接。
接口89、91分别将S/370处理部件85、87的处理器总线与S/88处理部件62、60的处理器总线连接。
伙伴处理器部件23与处理器部件21相同。根据上还有关描述可知,部件21中的两个处理部件60、62与部件23中的对应的两个部件(未示出)通常都以相互锁步前进的方式工作,从而在同样的S/88操作系统的控制下同时执行同样的指令。
类似地,部件21中的处理元件85、87与部件23中的对应元件(未示出)也相互锁步工作,从而在同一个S/370操作系统控制下同时执行相同的指令。
在部件21或23出错的情况下,出错部件被去掉,另一部件仍可在这种出错情况下继续工作。
尽管一个S/370处理部件的具体执行方法将在下面做出详细说明,这里仍将指出可以采用的其它已知的符合“IBM系统/370操作原理”一书中所述要求的执行方法,该书由IBM公司出版(出版号GA22-7000-10,第11版)并可向IBM公司索取。因而这里可以把所述出版物结合进来作参考,认为与这里构成一个整体。
图9A和9B表示了图8的部件21的S/370和S/88器件实物封装的一种方式。带有成对处理元件85、87的S/370器件安装在一块板101上,带有成对处理元件60、62的S/88器件安装在另一块板102上。两块板101和102被牢固地相互固定在一起构成一对夹板103,并使之可以插入模块9的底板(未示出)的两个插槽。通常的底板连线可按图8所示,使板101与102上的器件互相连接并接总线结构30,如Reid专利中说明的那样。
在详细说明一个S/370处理器与一个S/88处理器的直接连接之前,先提供关于一种机构的简要说明是有益的,该机构可使S/370:(1)使用一部分S/88主存储器;(2)利用某些S/88的虚拟存储空间与S/88交换指令和数据。这些机构将在后面进行更详细的说明。
图10表示通过存储器管理单元105为模块9把S/88的虚存映射为实存16。虚拟地址空间分为S/88操作系统空间107和用户使用的空间108。空间107中有一个区域109(地址是007E0000到007EFFFF)保留给硬件使用其中存放这样的代码,它被用于处理器单元(如21)中各个S/370处理器部件与各个S/88处理器部件间的连接。在系统正常工作过程中,地址空间109对S/88操作系统是透明的。该空间109的用途将在下面进行更详细的说明。
在系统的初始化过程中,存储器管理单元105在S/88主存储器单元16中为四个为一组的S/370处理器单元中的每一个分配一主存贮区,S/370处理器单元是配对的。如21和23为一对。这样,就分别为伙伴单元21、23和25、27以及29、331提供了三个S/370主存储区域162、163和164。伙伴单元中的S/88处理器按Reid专利中所述的方式访问存储单元16的剩余部分。
S/370存储区域162-164的分配,如后面将说明的那样,是以这样的方式进行的:S/88操作系统并不知道这些区域被“偷去”,同时存储器管理单元不再向S/88用户分配这些区域除非它们回到S/88空间。由于S/370系统是虚拟系统,它们通过地址翻译访问其各自的主存储区域。伴随的S/88主存储器单元18要求相同的S/370主存储区域(未示出)。各S/370处理器元件只能访问其各自的S/370主存储区,如果它试图访问S/88主存储空间就会产生错误信号。然而,各S/88处理器元件在S/88处理器元件对它的S/370处理器元件起到I/O控制器的作用时,在S/370 I/O工作过程中,可以访问(或者指示访问)各个S/370的主存储区域。
S/370与S/88处理器元件85、62的耦合(图11、12)
图8所示说明了4个类似85那样的处理器部件(在伙伴单元21、23中各有两个)和4个类似62那样的处理器部件(在单元21、23中各有两个)的构造,这样所有的S/370处理器部件同时执行相同的S/370指令,所有的S/88处理器部件同时执行相同的S/88指令。到现在为止所考虑的程序执行中,所有4个S/370处理器部件只起一个S/370处理单元的作用。类似地,所有4个S/88处理器部件只起一个S/88处理单元的作用。
因此,为了便于说明和解释,下面的图示及说明部分将只表示一个S/370处理器部件85和一个S/88处理器部件62以及与它们有关的硬件和程序码,除非遇到需要进一步说明的地方。
类似地,为了便于说明和解释,在下述说明中,处理器部件通过诸如多路转接器61、63、71、73和收发器12e、11与总线结构的连接也做了很多省略。图32给出了这种连接的简要参考图。
因此,图11表示了处理器元件85经过包括其处理器总线170和一个S/370存储管理单元81的第一段途径与系统总线30和S/88存储器16相连接。如图所示的那样,PE85经过一段包括有处理器接口89的第二路径与PE62的处理器总线161相接。PE85在S/370程序执行过程中和用第一路径从存储器16中指定的S/370主存储区162处提取(或存进)数据和指令。PE通过带有接口89的第二路径为PE85完成S/370的I/O操作。
在一个优选的实施例中,S/370集成块150(图11)包括各分立的集成块:处理器元件85、时针152、高速缓冲寄存器153,它带有一个目录查阅表(CDLAT)341)、一个总线调配器154,一个可选用的浮点协同处理器部件151和一个用于存储一系列支持S/370结构的微码的控制存储器171。这种S/370集成块适合用任何现有的IBM公司推出的S/370操作系统(如VSE/SP、VM/SP、IX/370等等)进行操作。
高速缓冲寄存器控制器153与一个存储控制接口(STCI)155一起构成S/370存储管理单元81。总线调配器154与一个总线控制单元(BCU)156组成PE至PE的接口89。
在这个优选实施例中,每个类似PE85这样的S/370的CPU都是一个32位的微处理器,它带有一个32位的数据流、一个32位的运算/逻辑单元(ALU)、一个三端口数据局部存储器中的32位寄存器、和一个8位S/370指令缓冲区。S/370指令既可以在硬件中执行也可由微指令编译执行。芯片153与有关的存储控制功能件一起为S/370程序的指令和数据提供了高速缓冲寄存器存储。芯片153处理在PE85执行程序指令时发出的所有存储请求。芯片153在传输I/O数据时还处理总线调配器发出的请求。
总线调配器155和BCU156在输入/输出操作过程中提供逻辑判断和控制内部的S/370处理器总线170与S/88处理器总线161之间的直接(或紧密)连接。BCU156是使PE85处理器总线与PE62直接地进行互连的主要机构。它是硬件机构,如后面将要说明的那样,当由于PE62与PE85间的数据和命令的传递而使PE6与有关的系统硬件脱钩时,它与S/88处理器元件62交互作用。
时钟块152(图12)用集中的逻辑产生时钟信号并把适当的时钟信号分别加在其它的芯片85、151、153和154上。而时钟152又由来自系统/88总线30的时钟信号控制,从而与S/370的PE 85和S/88的PE62同步。
合并两个性质不同的S/370和S/88硬件的结合部件,加上处理器连接/断开硬件,构成一种把前面所述的不允许错误的硬件同时加压在允许错误的总线结构30上的装置。在此优选实施例中,这一接口是由STCI逻辑155控制的,它必须在S/370高速缓冲寄存器控制器153与S/88系统总线30之间进行通讯。还有,不允许错误的硬件必须在图8所示的板上复制以产生能够相互锁步运行并与一个伙伴单元也锁步运行的“检查”和“驱动”逻辑。这样,构成板101和102上的系统部件的“单个”CPU必须与它各自的双工伙伴单元锁步运行。在维持最佳工作状态和功能性的同时实现上述要求的工作必然涉及各分立的时钟源的同步化问题。
在优选实施例中,S/88系统时钟38(图7)由与共同的总线结构30相接的所有装置所接收,并且总线30的每个周期定义为两个S/88时钟周期。这种系统时钟38保证了总线上的同步通讯同时可由各处理器/控制器在此系统时钟的基础上用来发展内部时钟频率源。S/370硬件利用了一个输入到S/370时钟芯片152的振荡器,时钟芯片152继而产生一系列唯一的时钟信号送向其它各芯片85、151、153、154、155。这个时钟芯片152会有固有延迟,这种固有延迟会随着各种参数如工作温度、生产条件等的不同而变化。这种延迟的变化对于保持众多的检查与驱动间以锁步方式实现同步和对于保持STCI1155与总线结构30之间充分畅通来说是不能令人接受的。
如图12和19C所示,本优选实施例利用了众多的时钟同步(Sync)逻辑158(以及用于成对的S/370处理器单元的158a(未示出)),在按S/88总线30周期对S/370处理器周期进行同步的同时,使插件101的处理器检查和驱动部分在复位(即开电源复位等)之后以锁步方式运行。从S/88时钟38发出的时钟信号通过总线结构30加到同步逻辑158上和STCI155上,从而使S/88与S/370同步并可通过系统总线30访问主存储器。
这一同步是在时钟同步逻辑158中实现的,首先倍增S/88时钟得到所需的S/370振荡器的输入频率,然后用此频率来激励S/370的时钟芯片152。在这种情况下,S/88和S/370的时钟周期已倍频。其次,线159上代表S/370周期开始的反馈脉冲,根据代表一个寄存器锁存延迟的周期的前沿和后沿的S/88时钟进行脉冲调制,该延迟大于S/370振荡器输入的时钟周期,而S/370振荡器输入的时钟周期等于S/88半波周期另一在复位时,从线159上被取样的S/370时钟反馈脉冲落在取样窗口之外,或者超过S/88时钟的前沿,S/370振荡器的输入被取消一个S/370周期。这一作用是“扩展”了现有的S/370周期,因此,在优选实施例中,下一个S/370时钟反馈脉冲(在线159上)的取样就一定会落在所要求的窗口的范围内。所有的比较器逻辑电路15(图18),在图32(如402a-g)中将有更加详细的表示,在此都省略了以使校验与驱动硬件能够同步。
因而确保了S/370处理器在S/88时钟周期启动的半波期内启动。这样所有总线结构30与S/370高速缓冲寄存器控制器153之间的传递时间差的最坏情况就是这个半波延迟。另外,比较器逻辑15是由按照S/88时钟取样的线路输入的,这就保证了“断”逻辑403与相伴的S/88处理器板102同步。因此,虽然由于在其各自的时钟发生逻辑中会有延迟变化而导致执行检查和驱动的S/370硬件在同步方面略有出入,但双方仍将按与总线结构相同的S/88的时钟锁步运行,而且在S/88时钟周波发生后其出入不会超过半周。同步逻辑158持续监视线路159上的S/370时钟反馈,以保证没有超过半波周期的偏移。在优选实施例中要求有一个最大的总线30周波从而在任何系统复位时使双方同步,然而如果总的延迟超过了复位时所允许的最大范围(这将使一方延伸到S/370的时钟周期)都将导致一块板的“中断”条件,即一次故障。
图12更详细地表示了图11的配置。如图所示,S/370控制存储器171连接PE85。在优选实施例中,控制存储器171由16KB的随机存取存储器构成,用于存储PE85中控制程序指令执行的和I/O操作的微指令。控制存储器171中还包括一个64B的块186(图29),它作为一个缓冲区根据要求用来放置从一个内部目标区(IOA)187(图28)装入的微码,内部目标区是主存储单元16中S/370主存保留区162的一部分。此图中,PE62总线结构161分成其虚拟地址总线161A和数据总线161D。在此,PE62与这样的硬件相接:一个浮点处理器172、一个高速缓冲寄存器73、一个称之为ETIO的用于存储连接微码的微码存储单元。下面将会看到,微码和高速缓存器173中存的应用程序都可用来控制PE62和BCU逻辑156,从而完成PE85的I/O操作。
PE62硬件还包括一个地址编译机构175。一个写入通道176在一个写周期内临时存放数据,该数据在下一周期内用到系统总线30上从而加速S/88的工作过程。Reid专利中所述的那种系统/88总线逻辑177把编译单元175和写入通道176按上面提到的Reid专利中所述的普通方法连接到系统总线30。一个类似的系统/88总线逻辑单元178把存储控制接口155连接到系统总线30。
将一个缓冲器180、一个可编程只读存储器181、一个存储器182、一个寄存器183与PE62相连接用于系统/88和系统370的初始化。PROM 181具有系统检测码和IDCODE,用来顺序断开系统PROM181具有对S/88的同步码。寄存器183具有系统状态和系统控制寄存器。
两个S/370芯片安装在同一块板上,使它们同步,并按锁步方式执行程序,进行板的自检。STC总线157和一个0.1通道的总线受到监视以防止可能的故障,因此S/370处理器不会把一个错误信息传播到另一个可置换字段的单元去。
接口89的BCU 156和调配器154使各个处理器(PE62、PE85)适当地控制另一个处理器,这样任何一个操作系统都不能完全控制这一系统。每个处理器的功能都部分地由接口89以及各处理器中运行的微码控制着。
处理器——处理器接口89
1. I/O适配器
适配器154(图13)通过其输出的0.1通道使S/370处理器85与BCU156对接。通道包括一对不同步的双字节宽数据总线250、251。总线250、251通过一对64位缓冲器259、260连接处理器总线170中同步的四字节宽数据路径。数据从BCU156经总线251传送到适配器154(以及S/370主存162)和从适配器154经总线250传送到BCU156。
适配器154包括下列寄存器:
1.基地址寄存器110包含用于排队和信箱寻址的基地址和队长。
2.读指针(RPNTR)和写指针(WPNTR)寄存器111和112,其中包含基地址向下一个要接收读或写访问的队列入口偏移。当命令/地址要通过总线170传送到高速缓冲存储器控制器153时,这些值和命令一起加到总线发送寄存器(BSR)116中。
3.状态寄存器(IOSR)118包含所有PU-BCU和BCU-PU的请求、入口报文队列状态、和BCU接口状态。
4.如果有一点异常使寄存器(ER)119为1和使对应的IOSR-位为1,则会引起PE85异常。
5.控制字寄存器(CW)120控制着某些IOSR位的量位/复位。
6.地址检查上不界寄存器(ACBR)121保持内部目标区(IOA)187的起始页地址。
7.地址键寄存器(APDR/KEY)122、123通常通过地址/数据总线250和251由BCU装载,以访问存储器162中的位置。这些寄存器可以以检测为目的由PE85装载。
8.命令寄存器(CMD0.1)124、125通常由BCU156装载一个命令和字节计数。该寄存器可以以检测为目的由PE85进行装载。
适配器154是PE85和BCU156之间的接口。逻辑上,适配器154向BCU提供下列服务项目:
—访问S/370主存储器162
—访问S/370存储器112中的一个信箱和一个报文队列,
—PE85与BCU156之间的一个请求/响应机械
BCU156访问整个存储器162,包括其IOA区187(图28)。适配器154完成IOA区187与用户区165之间的地址上下界检查(ACB检查),而键的检查则是在收到来自适配器154、经过处理器总线170的键、命令和存储器162地址数据之后由高速缓冲存储器控制器153来完成的。如果要存的数据的编址行保持在高速缓冲寄存器中,则数据就存在高速缓冲存储器中。否则控制器153把数据传送到主存储器162。对于数据的提取,在高速缓冲存储器控制器中也按同样的方式进行。
PE85与BCU156之间的I/O命令和信息的传递是通过预先定义的存储器162单元(信箱区188和入口报文队列189)来完成的,如图28所示。
BCU156从16字节的信箱区188提取I/O命令。访问信箱区的地址是这样计算的:
基地址+报文队列长度+信箱偏移
前两项由适配器154的基寄存器110提供,后一项由BCU156提供。队列长度由基寄存器110中的两位决定,它可为1、24或8KB(即64-512个项目)。其基地址在寄存器中设定,其限额为缓冲器大小的两倍(即分别为2-16KB)。
入口报文队列189按先后顺序存入所有经BCU154收到的信息。每一项目长为16字节。
BCU156用寄存器111、112中的读指针(RPNTR)和写指针(WPNTR)从队列189中读取和向其写入项目。PE85通过一种判读操作访问读指针。寄存器110中的基地址加WPNTR指向下一个要写的队列项目,基地址加RPNTR指向下一个要读的队列项目。
每一队列操作后这些指针就被修改:
WPNTR+16=一次写入后的WPNTR
RPNTR+16=一次读取后的RPNTR
通过指针比较产生下列条件:
RPNTR=WPNTR   队列空闲
RPNTR=WPNTR+16    队列已满;如果BCU
                   156请求写入队列则通过
                   状态总线向BCU发出缓冲
                   器不能用(BNT)的信息
                   息。
根据下述机构存入信箱区188的数据的有效性从PE85发送BCU156,或者从BCU156发往PE85:
线路256a(图16)上的PU至BCU的请求是由PE85用一条控制微指令进行设置的。它通知BCU156从信箱188取出一条命令并执行这条命令。该命令执行后,该请求由BCU复位。BCU156当在由PE85启动的一条命令执行过程中出现问题时或在其它情况下出现问题时发生一次请求。如果不是有选择地掩蔽起来,就会引起PE85的异常。
适配器154使不同步的适配器通道0.1的传递速度与同步处理器总线170匹配。因此,RCU156就由适配器154中的64字节数据缓冲器259、260支持使数据分别往返于BCU156。该数组有一个4字节通向通道0.1的和通向处理器总线170的端口。
同步寄存器113、114的缓冲器数据在BCU156和缓冲器数组260、259之间传递。总线接收和发送寄存器115和116分别存贮来自和送往处理器总线170的寄存器115和11116的数据。
一个存储器操作(I/O数据存储器、队列操作)是由BCU156启动的,它通过通道1总线向适配器154发出命令/字节计数、保护键和存储地址。命令/字节计数是在命令总线252(图13)上收到的,它被存入命令寄存器125。键与地址数据是通过地址/数据总线251(图13)从BCU156接收到的,并存入键/地址寄存器123。寄存器128中数组写与读的地址指针设置在它们的起始值上。总线251上的数据传递数(每次两个字节)由字节计数决定。就一次存储操作而言,最多可传递64个字节。一个存储操作中任何字节的存储地址不可超过64字节的地址边界。
命令/地址后面来的是总线251上的数据周期。所有数据都收集在64字节缓冲器260中。从BCU156接收到最后一个数据后,适配器154首先完成两个数据缓冲器259、260的内部优先级检查(未示出)然后请求使用处理器总线170的权利(未示出),此时,适配器154具有最高请求优先权。
在两个缓冲器259、260同时请求传输时,内部优先级控制首先把总线170让给缓冲器259,然后无争议地让给缓冲器260,即读比写的优先级高。
当总线占用权利出让时,命令/字节计数、保护键以及起始地址传输到高速缓冲存储器控制器153。命令传输周期后面跟着的是数据传输周期。
高速缓冲存储器控制器153完成保护键检查。键的损坏会以总线170状态方式报告给适配器154。其它由高速缓冲存储器控制器153和主存器162探测到的检查条件都作为ANY-CHECK状态进行汇报。由适配器154探测到的键损坏和状态条件将在一个状态传输周期中送到BCU156。
可以有两种适配器154探测到的状态条件提供给BCU156。这两种检测条件都抑制了对存储器162的访问。
从BCU156接收到的每一个主存地址都要与ACB寄存器中保留的地址比进行比较从而决定是访问IOA187还是访问存储器162的用户区165。与每个命令一道从BCU156接收的“用户”位决定本次主存访问是准对IOA区187的还是准对用户区165的,并检查是否是不适当的访问。
缓冲器不能用(BNA)条件(如下所述)只是在队列操作才可能出现。
读操作(I/O读取、信箱读取)是由BCU156起动的,其方式与存储器操作基本上相同。只要从BCU156一收到命令/字节计数、保护键和地址,就执行适配器154内容优先级检查并请求处理器总线170的占用权。如果得到总线占用权,命令/字节计数、保护键和主存开始地址就被传送到高速缓冲存储器控制器153从而起动读周期。适配器154首先把请求的数据装入其缓冲器259,然后根据总线250的请求送到BCU156。随着每个数据的传输报告状态情况。
存储操作的状态条件和报告机构适用于读操作。
PE85可通过总线170,利用判断(读)和控制(写)操作访问适配器154的大多数寄存器。
对于判断操作,该命令被传输到适配154并锁存于寄存器129中。下一周期,根据该命令选取判定多路转接器126;并把该命令装载到BSR116中,使所期望的数据在后面的总线170周期内变成有效。
如果发现要判断的寄存器上有一个内部奇偶错误,则适配器154把有正确奇偶性的数据送回PE85,但它在键/状态总线上提出一个检查条件。这一功能可以用特定的判定代码指针来检验。
对于控制操作,总线170命令后面跟着数据,该数据在下一周期被装入目标寄存器。
如果在判读和控制操作的命令周期内或在控制操作的数据周期内,在总线170上发现了奇偶错误,则适配器强制进行一次时钟停止。
变址寄存器110含有用于队列和信箱寻址的基地址以及队列长度代码。队列首址为基信箱区+队列长度所得到的基本地址。
RPNTR和WPNTR寄存器111和112含有基地址对下一个要对其进行读或写访问的队列项的偏移。
在判定成功的情况下,读指针与写指针通过适配器154中的判定多路转接器与基地址结合。因此,通过判定操作返回的字就是要访问的下一个队列项的完整地址。
I/O状态寄存器包含下列位(未包括不在此描述的其它位):
任何校验(位0)如果在CISR<0…24>中有任何校验条件及对应的CHER-位为1,则任何校验(位0)置1。任何校验(Any Check)产生ATTN-REQ信号。如果MODE-REQ<1>=1,则Clock-Stop-Diana信号起动。
BNA发送(位6)——当BCU156要把一个收到的信息储存到队列却已满时,即RPNTR等于WPNTR+16时,缓冲器不能用(BNA)位置1。该位只能通过向CW寄存器120的第6位写入一个1才可复位。
队列不空(位7)。如果RPNTR不等于WPNTR则此位是1。当RPNTR=WPNTR,它是0。这是用来通知处理器80收到一条新信息的装置。
BCU对PU的请求(位10和14)——它们是由BCU156通过“BCU对PU的请求”线256c上的信号对通道0和1进行设置的。位10和14是由85复位的,在线256d上产生一条对通道0和1的确认信息。
PU对BCU的请求(位11)——由PE85在线256a上通过对通道0设置CW寄存器120的位11以及通过对通道1设置CW寄存器120的位15进行置位的。
BCU掉电(位B)——当掉电时或出现“电源复位”时,由BCU156使该位置1。如果CW寄存器120的“BCU掉电复位”位被写入1,或BCU不再处于掉电状态时,它复位成0。
允许仲载(位29)——如果适配器模式寄存器的位3不起作用,则该位发出通道总线的“允许仲载”信号。
客户访问位,这是从BCU156收到的命令/地址的一部分,它决定存储器访问是在IOA中进行还是在用户存储区进行。如果客户访问位是0,则存储器访问的页地址只能在IOA区187内。对这些访问将不用进行键校验,因此,适配器硬件令键为零(与所有键项匹配)。
如果客户访问位是“1”,则存储器访问的页地址只能是在用户存储区165内。否则会对此访问产生一次ACB校验条件。
PE85利用消息命令(Message Commands)读(判定)或写(控制)适配器154的寄存器。
这些命令的格式如下:
位0-7CMD=命令型
8-11 SRC=请求总线单元地址
12-15 DST=接收总线单元地址
16-23 MSG=在Cmd周期中要传递数据
24-27 REG1=控制命令的寄存器号
  28-31 REG2=判断命令的寄存器号
关于PU-BCU接口的DST字段是X“8”。适配器154由于不存在关于命令执行的信息将不对SRC和MSG解码。在控制与判定操作过程中,Reg1和Reg2位将分别定义要写入与读出的适配器154中的寄存器。
2. I/O适配器通道0与通道1总线(图16)
适配器通道0和适配器通道1是从I/O适配器154到总线控制单元的高速互连(通道”。
通道0包括:
    地址/数据总线250(位0-16、P0、P1)
    命令/状态总线249(位0-3、P)
    上升标志(BCU对缓冲器)线262a
    下降标志(缓冲器对BCU)线262b
    PU对BCU的请求线256a
    BCU对PU的应答线256b
通道1包括一条地址/数据总线251、一条命令/状态总线2252和上升标志与下降标志线262c和262d。
通道0用于从S/370存储器162(和PE85)到BCU156的数据传输,通道1用于从BCU156到存储器162(和PE85)的数据传输。
通道总线249、250、251和252始于适配器154,适配器154实际上是一对带有控制逻辑电路的各自能够存入64个字节数据的数据缓冲器。总线终止在BCU156中。I/O适配器154的作用是进行全字格式(32位)的S/370内部处理器总线170与半字格式(16位)较慢的总线249-252之间的速度匹配。
每条通道由两部分构成:两个字节宽(半字)的数据总线(250251)和半个字节宽(4位)的命令/状态总线(249、252)。标志信号通过请求/响应和特定信号提供了控制上述操作的机构。
各通道的数据传输总是在两个周期内进行的(在两个字节的总线上传输4个字节)。逻辑上,所有的数据传输都是在S/370主存储器162与包括BCU156的I/O子系统之间进行的。BCU156是主体,即一旦PE85发出需要传输的信号,它就起动所有传输操作。
在一个选择周期内,命令状态总线(249、252)被用来定义传输方向(提取/存入),和传输数据量。在选择周期内,地址/数据总线(250、251)的作用是传输主存储器地址,而在实际传输周期过程中,才用来发送数据。它还被用来指示存储器162中称为“信箱”和“报文队列)的特定区域188、189。这些区域可使PE85与BCU156交换某些信息。
在(从存储器162)作取操作过程中,状态与总线250上的数据的前两个字节一道通过命令/状态总线249进行传输。该状态指示地址校验、键校验等,也可能为零,表示操作成功。
如果在进行一次存入(到存储器162中)操作,在所有数据都被发往主存储器162后,会跟随产生一个状态周期。
图14A和14B分别表示在提取与存储操作的子周期1和子周期2内,总线部分的逻辑用途,其中:
aaa…      数据字段的第一字节(最左侧的)地址。
A:        1=地址校验
B:        1=缓冲器不能用
C:        1表示用户存储器(165)访问,0表示
           微代码访问(IOA187)
ddd…      往返存储器的四字节数据
fff…      以字节为单位的字段长度减1(十进制0…
           63)
kkkk       存储键(十进制0…15)
K          1=键校验
ooooo:    在32字节的信箱区内的偏移。
pp         优先级(0…3,最高是3)
……       无关紧要部分
///:      总线是浮动的(未定义的)
in:       输入(BCU对缓冲器)
sut:      输出(缓冲器对BCU)
下述标志线用于数据的传输操作:
1.从总线适配器154至BCU156的PU对BCU的请求线256a被PE85用来指示对I/O操作的要求。一旦设置后,该信号始终保持有效直至BCU156将它复位。
2.从BCU156到适配器154的上升标志线262用来向适配器154请求输出数据或用来指示总线上的输入数据可以使用。上行标志线262C的功能与上述类似。
3.从适配器154至BCU156的下标志线262b,在BCU暂时缺乏数据的情况下被用来指示暂时缺乏BCU的数据。下行标志的下降沿则可指示总线上的输出数据可以使用。下行标志线262d的功能相同。
4.从BCU156至适配器154的BCU至PU确认线256b被用来使PU至BCU的请求信号复位。当完成了一次I/O信箱操作时进行这种复位。
当PE85在指令流中发现一个起动I/O指令流中发现一个起动I/O指令(SIO)时,它通过启动“PU至BCU请求”线2256a提醒I/O子系统(即BCU156)需要进行一次I/O操作。这一标志引起BCU查看存储器162中的“信箱”188,了解这次操作是取还是存、了解有多少字节要传输等。信箱实际上含有有关I/O操作的通道SIO、CUA、CAW以及命令字(CCW)。
存储器操作一般是由BCU156向PE85发送数据。这种““数据”或者是在选择周期中发生的命令/键/地址,或者是准备存入主存储器162的真正的I/O数据。对于这两种情况,过程是一样的。
图15A-C以一种概括的方式表示出如下所述的适配器154与BCU156中的32位缓冲器/寄存器对数据和状态信息进行选通的方法,其中该信息的较高位(左侧)和较低位(右侧)放在适配器154的18位的通道0.1总线上。
图25和26提供了BCU156与适配器154之间数据传输的一组具体信号。
随着一个存储器操作期间BCU时钟周期的开始,(见图15A),BCU156在第一周期内把数据放到总线251上。如果这是一个主存储器数据操作的选择周期,则将一个命令、一个字节计数一个访问键和主存储器地址的第一个字节分别放在命令/状态总线252和地址/数据总线251上。如果这是一个信箱查找的选择周期,则不用安置主存储器地址,因为该命令指示的信箱位于一个固定的位置。这第一子周期在总线上保持两个子周期的有效时间。
在一个选择周期内把数据放置到总线251之后的一个BCU时钟周期内,BCU156抬高“上行标志”信号线。上行标志线262a使适配器154存入寄存器113左半侧的前面两个字节。随着下一个时钟周期的开始,BCU156在下一个子周期将数据(后面的两个字节)放置到地址/数据总线251上,从而存入适配器的寄存器113的另一半。这一数据或者是主存储器地址的剩余部分,或者是一个偏移量(如果这一步是属于一个信箱查找选择周期期)。BCU156将后面两个字节保持三个BCU时钟周期,然后降下“上行标志”信号。
取操作通常是这样一些操作:即BCU156从主存储器数据空间162、从主存储器162中的微代码区、或从信箱及报文队列索取数据。在任何情况下,一个选择周期指示适配器154的逻辑电路必须执行这一操作,即优先进行这样一种提取操作。选择周期是以类似于存储器操作的方法,用总线252把命令/键/地址放到总线249上来进行工作的,除非在命令/状态总线249上的命令是一条“提取”命令。
随着下一个时钟周期的开始(在完成选择周期以后)BCU156发出“上行标志”信号并保持三个BCU时钟周期(图15B)。上行标志从缓冲器索取数据。如果缓冲器能够发送数据,则在一个周期后将可得到数据。由于该操作是半同步的,BCU156设定数据的前两个字节在总线上有效地保持两个周期,然后有一周期的转换时间,此后数据的后两个字节可以选通到BCU156上。
然而,在有些情况下,适配器154在上行标志出现那一时刻没有可用的数据。这种情况典型地发生在一个“最初的”数据提取过程中,即当从一个新地址提取数据时,要花费一定时间等提取请求先经过高速缓冲存储器153和存储控制器155处理,然后返回适配器154。在主存储器162中再试一次可能会引起暂时延迟。
一旦当适配器154不能发送数据(图15C)时,只要发现““上升标志”就产生“下降标志”。BCU156应当在发生“上行标志”后不迟于五个周期的时间内采集到“下行标志”。
适配器154保持“下升标志”状态直至得到第一个数据字(四个字节)。在这时刻,适配器将前两个字节送到总线250上并降下“下行标志”。“下降标志”信号的下降沿触发BCU的逻辑电路253。
BCU156设定,随着“下行标志”的下降,前面的字节在两个周期内有效。此后可使用后两个字节。根据在选择周期内设定的计数,最多可接收60字节,每次两个字节。
当在选择周期中预定好的所有信箱数据都收到后,BCU156在线256b上对适配器154发出“BCU对PU确认”信号,以使线256a上的PU对BCU的起动上述操作的请求复位。
PE85与BCU156之间多数信息的传输都是用存贮在适配器154的基寄存器110中的基地址和队列长度通过预先定义的存储器单元188、189来完成的。入口端的信息队列189存贮所有由BCU按先后顺序发送来的信息。
3.总线控制单元156——一般描述(图16、17)
总线控制单元(BCU)156是S/370处理器85与被用来执行S/370 I/O操作的S/88处理器62之间的主要连接硬件。
BCU156包括一种与应用程序(EXEC370)和在S/88处理器上运行的微代码(ETIO)相互连接的装置,它对处理器62提供中断、同步地把处理器62与有关硬件断开、把处理器62与BCU156接通、所有这些对S/88操作系统来说都是透明的。这种透明的中断与断开功能被用来使S/370与S/88的处理器直接耦合,从而高效率地从S/370处理器85向S/88处理器62传输S/370的I/O命令和数据,使这种命令和数据转换成一种S/88处理器62可用的形式,完成所要求的S/370I/O操作。
应当明确,EXEC370和ETIO既可以是微代码也可以是应用程序,既可以存放在寄存储器174中也可以存放在高速缓冲存储器173中。
BCU156,如图16,包括总线控制单元接口逻辑电路和寄存器205、一个直接存储器访问控制器(DMAC)209和一个局部存储器210。局部地址与数据总线247、223将存储器210经过驱动器/接收器电路217、218连接到PE62的地址、数据总线161A、161D上,并连接到接口逻辑电路205上。DMAC209通过锁存器233连接地址总线247,并通过驱动器/接收器234连接数据总线223。
优选实施例中的DMAC209是一个68450DMA控制器下面将对该控制器给予更详细的介绍。
DMAC209具有四个通道0-3,它们通过各自的请求和确认路径连接接口逻辑电路205(图17),每条通道实现一种特定功能,通道0把S/370存储器162中的一个信箱区188(图28)中的S/370 I/O命令传输到局部存储器210(MAILBOX READ)。通道1从存储器162向存储器210(S/370 I/O WRITE)传输S/370数据。通道2从存储器210向存储器162(S/370 I/ORead)传输数据。通道3从存储器210向存储器162中的一个信息队列区189(图28)(Q信息WRITE)传输高优先级的S/88信息。
总线适配器154有两个通道0和1。适配器通道0处理DMAC通道0、1的MAILBOX READ和S/370I/O WRITE功能(即从S/370到BCU156的数据流)。适配器通道1处理DMAC通道2、3的S/370 I/OREAD和Q MESSAGEWRITE功能(即从BCU156到S/370的数据流)。
4.直接存储器的访问控制器109
DMAC209最好是用M68000系列的参考手册(FR68K/D,Motorola版权,1988)中所述的那种类型。所述的手册纳入此处的参考材料以保证这里的完整性。DMAC209通过一种快捷、高效率的方式和尽量减少处理器的干与的办法来传送数据块,以此来弥补Motorola的M68000系列微处理器(如本申请中的M68020处理器部件62)的性能和体系结构的能力。DMAC209执行内存至回存、回存至设备、及设备至内存的数据传输。
它包括四个带有可编程优先级的独立DMA通道并使用带有一个24位地址和16位数据的同步M68000总线结构。它可进行隐式寻址和显示寻址。
任何一个系统中类似209这样的一个DMAC的主要用途在于它能极其快地传输数据,通常远远快于软件所能控制的微处理器的速度。直接存储器防问(DMA)这一术语用来称呼一个外部设备以与一个微处理器相同的方式访问一个系统内存的能力。本申请中内存就是局部存储器210。DMA操作可以与系统所需要完成的其它操作同时出现,这样就大大促进了整个系统的性能。
DMAC209以接近局部总线223的极限速度传送数据块。一个数据块由一系列起始于某特定存储地址的字节、字或长字操作数组成,它带有一个由传输计数电路决定的数据块长度。单个通道的操作可以涉及往返于存储器210的数个数据块的传输。
涉及DMAC209的任何操作都将遵循同样的基本步骤:由PE62进行的通道初始化、数据传输、和块结束。在初始化阶段,处理器PE62为DMAC寄存器装入控制信息、地址指针和传输计数,然后起动该通道。在传输阶段,DMAC209接受操作数传输请求并为这次传输进行寻址和提供总线控制。终止阶端出现在操作完成以后,这时DMAC指示出状态寄存器CSR中的操作状态。在一个数据传输操作的所有阶段中,DMAC209将处于三种操作模式之一:
1. IDLE——这是一种当DMAC209由一外部设备复位并等待系统处理器62做初始化工作时或者是有一个外设发来的操作数传输请求时,DMAC209所处的状态。
2. MPU——这是一种当DMAC209被系统的另一个总线的主人(通常是主系统处理器62)选为芯片时,它所进入的状态。在这种模式下,DMAC的内部寄存器被读出或写入,从而控制通道操作或校验块传输的状态。
3. DMA——这是一种当DMAC209作为总线主人完成操作数传输时所进入的状态。
DMAC可进行隐地址或显地址数据传输。显传输把数据从数据源送到一个内部OMAC缓冲寄存器中,然后在下一个总线周期把它从缓冲寄存器送到目的地。隐传输只需要一个总线周期,因为它把数据从数据源直接送到目的地,不需要内部DMAC缓冲。
通道操作有三种类型:1)单块传输,2)连续操作,和3)链接操作。传输单块数据时,用户预置主存地址和设备地址寄存器MAR和DAR,指出传输源和目的地。同时预置主存传输计数寄存器以统计一块中被传输的操作数的个数。
有两种链接方式,数组链接和链数组链接。数组链接方式是根据存贮器210中的一个连续数组来操作的,其中存贮器210由主存地址和传输计数组成。基地址寄存器BAR和基传输计数寄存器BTC经初始化后分别指向数组的初始地址和数组的项数。当每一块传输完成时,从这个数组中取出下一项,基传输计数减少并且基地址增加以指向下一个数组项。当基传输计数为0时,所取到的入口是数组定义的最后一块传输。
链数组链接方式和数组链接方式类似,只是主存数组中的每一项还包含指向数组下一项的链地址。这就允许主存数组是非连续的。最后一项所包含的链地址设置为0。这种方式不需要基传输计数寄存器BTC。基地址寄存器BAR初始化为数组中第一项的地址。在每块传输开始时用链地址修改基地寄存器。这种链接方式不需要重新对数组排序,可以较容易地移动和插入数组项。同时,数组中的项数也不需要向DMAC209说明。在本申请中,DMAC209以将在下面详细描述的方式应用这种寻址方法从链表中存取自由工作队列块(WQB)。
DMAC209将在几个事件(如,DMA操作完毕,或申请使用PCL线路57a-d的设备)发生时中断PE62。DMAC209保存有芯片上的八个向量寄存器中的中断向量供PE62的向量化的中断结构使用。每个通道都可使用两个向量寄存器。一个正常中断向量(NIV)寄存器,另一个是错误中断向量(EIV)寄存器。
每个通道都指定了优先级0,1,2或3,通道0,1,2,3分别指定优先级为0,2,2,1(优先级0为最高)。
或由设备从外部生成请求,或由DMAC209的自动请求机制从内部生成请求。自动请求可以以最大速率(此时通道总是有请求等待)生成,也可以以有限速率生成,这个速率根据DMA活动可以使用的一段总线带宽来确定。外部请求可以是猝发请求,也可以是由与每个通道相联的请求信号生成的局期窃取请求。
对四个通道中的每一个通道,DMAC209都包含17个寄存器(图18)加上一个总控寄存器GCR,所有这些寄存器都在软件控制下。
DMAC包含有关数据传输的信息,如源地址和目的地址以及功能码,传输计数,操作数大小,设备进出口大小,通道优先级,连续地址及传输计数,以外设控制线路的功能。一个寄存器CSR也提供有关通道活动,外设输入,以及DMA传输期间可能发生的各种事件的状态和错误信息。总控寄存器GCR挑选用于有限速率自动请求DMA操作的总线实用因子。
输入和输出信号按如下所述方法在功能上分为几组(参见图19A)。
地址/数据总线(A8-A23,D0-D15)248是16位总线,它在DMA操作方式期间是按时间多路转接的以提供地址输出,并且可用作为一条双向数据总线从外设输入数据(在PE62写或DMAC读期间)或向外设输出数据(在PE62读或DMAC写期间)。这是一个三态总线,利用由多路控制线OWN及DDIR所控制的外部锁存器和缓冲器233,234可以抑制此总线的多路转接。
经过总线247的A7的低地址总线线路A1是双向三态线路,在MPU方式中它们被用来为DMAC内部寄存器寻址,在DMA方式中提供七种低地址输出。
经FC2的功能码线路FC0是三态输出线路,在DMA方式下被用来进一步限定地址总线247上的值以提供分离的地址空间,这些地址空间可能是用户定义的。置于这些线路上的值是从内部功能码寄存器MFC,DFC,BFC中之一获得的,究竟从哪一个功能码寄存器中获得将取决于在DMA总线周期内提供地址的是哪一个寄存器。
异步总线控制线路用下列控制信号控制异步数据传输:选择地址选通信号读/写,高位数据和低位数据选通信号,以及数据传输确认。这些信号在以下各段中描述。
SELECT输入线路296用来在MPU总线周期内选择DMAC209。一旦肯定,A1-A7上的地址和数据选通信号(或A0,在用8位总线对)选择将要涉及传输的内部DMAC寄存器,应当根据带有地址和数据选通信号的地址解码信号的身份来生成SELECSELECT。
线路270b上的ADDRESS STROBE(AS)是一双向信号用作DMA方式下的输出以指出有效的地址在地址总线161上出现。在MPU或IDLE方式下,它被作为输入以确定DMAC何时可以控制总线(如果已请求DMAC并且允许用这条总线)。
READ/WRITE是一个双向信号(没有画出),用来指出在总线周期内数据传输的方向。在MPU方式下,高位表明传输是从DMAC209到数据总线223,低位表明传输是从数据总线到DMAC209。在DMAC方式下,高位表明传输是从寻址存贮器210到数据总线223低位表明传输是从数据总线223到寻址存贮器210。
UPPER AND LOWER DATA STROBE是双向线路(没有画出),它指出总线上的有效数据以及总线的那一部分应卷入传输DB-15或D0-7。
DATA TRANSFER ACKNOWLEDGE (DTACK)双向线路265用来发出一个异步总线周期可以结束的信号。在MPU方式下,这个输出表明DMAC已经从PE62处获得数据或已经把PE62的数据送到总线。在DMA方式下,这个输入265由DMAC监控以确定何时结束总线周期。只要DTACK265为否定,DMAC都要在总线周期中插入等待周期,当DTACK265为肯定时,总线周期将结束(除了PCL257用作就绪信号时,在这种情形里,周期结束前,两种信号都必须为肯定)。
线路OWN和DDIR上的多路控制信号用来控制外部多路/多路分配设备233,234以分离总线248上的地址和数据信息,并且在DMAC总线周期内用来在数据总线223的高位和低位间传输数据。OWN是一个输出,表明DMAC209正在控制总线。它被用作允许信号以打开外部地址驱动器和控制信号缓冲器。
BUS REQUEST(BR)线路269是由DMAC首肯的输出以请求局部总线223,247的控制。
BUS GRANT(BG)线路268是由外部总线仲裁程序16首肯的输入以通知DMAC,一旦当前总线周期结束,它就可以占用总线。
线路258a和258b上的两个中断控制信号IRG和IACK用PE62线经中断逻辑线路212形成中断请求/确认符号交换序列。线路258a上的INTERRUPT REQUEST(IRQ)是一由DMAC209首肯的输出以请求来自PE62的服务。线路258b上的INTERRUPT ACKNOWLEDGE(IACK)由PE62经逻辑线路216首肯以确认已从DMAC209接收到一个中断。为响应IACK的首肯,DMAC将在总线223的D0-D7上放一PE62将要用的向量以获取适当的DMAC中断处理程序的地址。
设备控制线是DMAC209和与四个DMAC通道相联的设备之间的接口。四组三条线为一个DMAC通道以及它的有关外设服务;其余线路为所有通道共享的全局信号。
线路263a-d上的PEQUEST(REQO THROUGHREQ3)输入由逻辑线路253首肯以请求主存贮器162和存贮器210之间的操作数传输。
线路257a-d上的ACKNOWLEDGE(ACKOTHROUGH ACK3)由DMAC209首肯以发出操作数正在传输的信号来响应前面的传输请求。
PERIPHERAL CONTROL LINES(PCLO TROUGHPCL3)257a-d所包含的是接口逻辑线路253与DMAC209之间的双向线路,它们被设置为就绪,取消,重载,状态,中断,或允许时钟输入,或作为开始脉冲输出。
DATA TRANSFER COMPLETE(DTC)线路267是由DMAC209在任何DMAC总线周期内首肯的输出,表示数据已被成功地传输完毕。
DONE(DONE)。这个双向信号由DMAC209或外设在DMA期间内首肯,表示正在传输的数据是一块中的最后一项。DMAC在总线周期内主存传输计数寄存器减为0时首肯这个信号。5.总线速制单元156-详细描还(图19A-C,20)(a)高速数据传输接口寄存器
为了在图19A-C中说明和描述方便,BCU接口逻辑线路已经被分为几个功能单元。因此,逻辑线路205包含许多介于局部数据总线223与适配器通道0,1之间的接口寄存器,以增加适配器154和BCU156之间传输数据的速度和性能。接口205的硬逻辑线路253与DMAC209,地址解码和仲裁逻辑线路216以及地址选通脉冲逻辑线路215一起控制BCU156的操作。
接口寄存器包含通道0的读状态寄存器229和通道1的写状态寄存器230,它们与通道0和1的命令状态总线249,252相联,用来保存适配器154和BCU156之间数据传输的状态。
通道0和1的命令寄存器214,215暂存从BCU156到S/370的适配器154的数据传输命令。
通道0和1的地址/数据寄存器219,227在S/370的I/O数据传输期间为了对适配器154的传输保存着S/370的地址。寄存器227也保存每次地址传输之后对适配器154作数据传输时(每个地址传输可达64字节)的后续I/O数据字(可达4字节)。
通道0的读缓冲器在BCU的邮箱读操作和S/370的I/O写操作期间接收从适配器154传来的I/O数据。
通道0,1的BSM读/写操作选出字节计数器220,222BCM读/写界限计数器221,224保存从BCU156到适配器154的数据传输的字节计数。两种计数器都是为使每个通道避免在数据传输时,越过S/370的六十四字节地址的边界而设的。正如以后将要更详细地说明的,计数器220,222起初存贮I/O操作所要传输的全部字节数(可达4KB),并且可用来把计数值送到寄存器214,225中,局部形成S/370的起始地址(这只用于最后一块(64字节)传输,即最后的命令/数据传输操作)当BCU156发现任何一个命令数据传输操作越界或字节计数大于64字节时,可用边界计数器221,224(部分地)给出S/370的起始地址。
在每次经通道0和1的数据传输后,计数器220,221,222和224将相应地减少。
队列计数器254提供类似的功能,它把信息(可达十六字节)经适配器154送到S/370存贮器。
用于选择上述接口寄存器的地址存放在存贮器210地址空间(图23C)中,按众所周知的方式对总线247的地址译码可选出相应地址。
在PU到BCU的请求线256a上的由适配器154发往逻辑电路253的信号告诉BCU156:S/370邮箱的读请求已经就绪。这个信号在邮箱信息存到局部存贮器210之前都不会被BCU PU确认信号重置。
上行标志和下行标志线路262a-d可用来在适配器通道0,1上选通BCU156与适配器154之间的数据。
在BCU逻辑线路253和DMAC209之间提供了握手信号。BCU逻辑线路在线路263a-d上提出服务请求,对每个DMAC通道都有这样一个。DMAC在线路264a-d上用确认信号作为响应。其它线路,如选择线路270,数据传输确认线路265,外设控制线路257a-d,数据传输完成线路267,已在上述有关DMAC209处描述过。(b)BCU的解耦和中断逻辑215,216(图20,21)。
前面已经提到过,两种性能对获得S/370与S/88处理机的紧密联接至关重要。这些紧密联接是这样获得的,为S/370系统提供许多S/88系统独特的性能,如容错操作和单一系统映象环境。那些在这里被称为一S/88处理器的“解耦特性”指的是S/88处理机与它的相连的硬件脱钩。另一个重要特性是唯一的中断”机制。两种性能以一种对S/88操作系统透明的方式操作。解耦和中断逻辑线路215,216在BCU156中给出。
“解耦”逻辑在每个指令执行周期内为应用于S/88处理机地址的虚拟地址解码。如果发现有一块已分给了BCU156和它的存贮器210的预先选定的S/88虚拟地址,那么来自S/88处理器62的地址选通信号(AS)被选通到BCU156而不是被选通到相连的S/88硬件。这种行为防止S/88操作系统知道已经出现机器周期,即这种行为对S/88是透明的。
但是,S/88处理器62实际上是连接的,它在这个机器周期内控制着BCU156,控制着用来选择和控制BCU156中各种部件以完成一个与S/370 I/O操作有关的功能的预选地址。
S/88处理机62上运行的特殊应用程序(EXEC370)通过把这些预选虚拟地址放到S/88总线161A上来指导BCU156的操作以保障有效通讯来起动与S/370处理机的通信。
BCU156中的DMAC209和其它逻辑线路为S/88提供中断,一旦请求,就以指定的级别(6)来调用这个特殊应用程序。每个中断的提供对S/88操作系统是透明的。
在以后有关S/370 I/O操作的固件综述的例子中将描述这些中断的中断处理程序的功能类型。
现在闻述如何处理经DMACs(如DMAC209)到S/88的S/370的中断的机制和S/88操作系统修改,它们都基于一个相伴单元并且在一个有多个相伴单元的模块中。
可以想到,一个相伴单元是一个相连的夹板,这个夹板由一块修改过的双S/88处理器板和一块双S/370处理器板构成,包含双本地存贮器,DMAs和常规逻辑线路。为了容错,诸如此类的双夹板部件并行地、完全同步地(锁步)操作。
整个夹板一般有一块相同的相伴夹板,其伙伴以锁步方式操作,因而以单个容错实体的面貌出现。把这种双重复制硬件看作单个操作单元(如图21所示)对下面的讨论是有益的。
在优选实施例中,单个模块可包含8个这种单元295到295-8。它们在S/88操作系统的单个付本的控制下,共享主存I/O设备和电源。单元295(和其它每个295-2和295-8)与一对伙伴板(诸图7中的21、23板)相对应。重要的是,在这种多CPU结构里,S/88处理一单元62到62-8作为分担S/88工作负荷的多处理器运行,但S/370单元85到85-8分别独立地运行并且无内部通讯。每个S/370单元在它自己的操作系统控制下运行,并且在这模块中没有任何其它CPU的“知识”(既无S/370或S/88)
由于多处理环境和S/88体系结构,在正常的S/88系统中的中断处理由CPU单元62与62-2到62-8分担。简单地讲,每个中断(来自I/O,定时器,程序陷井等)经公共总线并行地送到所有S/88处理单元。只要一个单元承担为它服务的责任,其它单元就对它忽略不计。不管正在服务的是哪一个CPU单元,在操作系统内对此处理程序有一个向量表,每个向量有一个入口,由操作系统来确定中断的分配并进行处理。
在多一S/370结构中,所有正常的S/88中断如上所述运行;S/88中断处理程序不变。监控硬件变化。允许DMAC209和209-8中断,并且正常S/88中断机制和软件完全透明。
要求DMAC中断只能由附有DMAC,BCU和S/370的S/88处理器62处理,使得多S/370单元85到85-8不能互相干涉。为此目的,DMAC IRQ线路258a直接与S/88处理器62相连接,DMAC209接到S/88处理机上,不在公用S/88总线30上出现,所有正常的S/88中断请求线路都是如此。在S/370支持的从S/88抢时间片期间,给定的S/88处理机62,为直接与它相接的S/370所占用。
在主S/88向量表内预留八个用户向量位置以备DMACs所用,这些向量是加在S/88操作系统中的八个DMAC中断处理程序的硬码地址。所有S/88处理器都可用这八个中断处理程序来处理与S/370处理器相连的所有DMCs提供的中断。
每个诸如209的DMAC都有一个中断请求(IRQ)输出信号和八个内部向量寄存器(每个通道有两个,一个为正常操作,一个为DMAC检测出错误)。初始化时(以后说明),程序设置这些DMAC向量寄存器的值为上述相应的八个预留主向量表的位置。因此当DMAC发出IRQ时,可以调用八个处理程序的一个。这些处理程序存取DMAC,BCU硬件,队列,链表,以及所有的控制参数,这通过提供位于“隐”局部存贮器210的地址域内的虚拟地址来完成。硬件设计保证了每个诸如62的S/88处理器只存取它自己的存贮器(如210)。而不存取其它存贮器,即使多个S/370单元共享一个公用的虚拟地址的不耦合“窗口”也是如此。即一个模块中所有S/88-S/370多处理器都用这个S/88虚拟地址空间007E××××,即使每个相伴单元(如22,23)有它自己的专用S/88物理存贮器(如图10所示)。
在多S/370结构中,考虑到这八个向量寄存器时,所有DMACs209到209-8的编程是一样的,都享用主向量表中的八个预留的向量其及处理程序,不同之处以及解耦操作发生在每次存取诸如210这样的存贮器时。
DMAC IRQ与它自己的S/88处理器62的硬连线的表示连同解耦操作一起保证了S/370处理单元的分离和集成,并且保证了不干涉S/88的正常运行,除了S/88 CPU时间“损失”以外。中断服务对S/88操作系统是透明的。
因此,通过抢占多道处理系统环境的单个处理器设施,隔离和保护了多S/370单元,这种完整的中断设计完成了S/370DMAC中断的间发“专用请求”服务。这种多道处理系统环境使用了不同的中断服务原理,它本质上对多道处理系统的运行无任何影响多道处理操作系统也基本上无须作任何明显改动。
图19A和20给出了更详细的DMAC中断机制的运行说明。当诸如DMAC209那样的能够选择向量的外设向S/88处理器62发出中断请求(IRQ)时,这个设备就启动了单个IRQ线路258a。这个IRQ线路按S/88处理器体系结构说明的方式被连接到编码线路293上,使其能按指定的优先级(6)经输入引线IPL0-IPL2向S/88处理器62发送被编码的中断请求。
处理器62利用保存在内部状态寄存器中的优先级屏蔽位有效地决定它什么时候能处理中断。一旦就绪,处理器62就开始特殊的“中断确认”(IACK)周期。
在由处理器62内部控制的IACK周期内,为了识别正在被服务设备的周期类型和优先级别。地址总线161A提供一种独特的地址结构。这也是一个有效的来自中断设备的对于向量号的请求。所有提出请求的设备都比较自己与正在被服务设备的优先级,具有匹备优先级的设备向数据总线161D提供一字节的向量号供处理器62使用。
一旦获得向量号,处理器62把基本内部状态存于一个管理程序栈中,然后生成所使用的异常向量地址。把设备的向量号内乘以4,所得之积加到内部向量基寄存器的内容上,这样就给出了这个异常向量的主存地址。这个向量是中断处理程序的新程序计数器的值。
在管理状态下,用这个新的程序计数器之值取到第一条指令,正常的指令解码与执行被恢复,并且处理器62状态寄存器设置为当前优先级。
从IACK周期开始到取出第一条中断处理指令的上述各步,均是由硬件和处理器62的内部操作配合完成的,不需要执行程序指令。净效益是先前运行(低优先级)的程序透明地腾出地方以执行较高优先级的中断处理程序。
在优选的实施例中,DMAC209中断的优先级为6,与处理器62的整个体系结构一致。DMAC209可用内部编程的8个向量号,及其八个独立的处理程序。
除提供S/88处理器62的解耦功能以外,在IACK周期内解码和仲裁逻辑线路216(图19A)和AS控制逻辑线路215也控制这个中断功能。
现在参考图20来详细说明上述的硬件功能,图20展示了图19A中逻辑线路215和216的细节。来自PE62的地址选通线路270接到控制逻辑线路215的一条输入线路上。逻辑线路216有一对解码线路280、281。线路280的输出线路281接到逻辑线路215上;线路281的输出线路283也不经过“与”门291接到逻辑线路216和线路287上。正常情况下在执行指令期间,解码线路280,281允许线路270上地址选通信号(AS)经过逻辑线路215到线路270a。这是一个对于与PE62有关的S/88硬件的正常的地址选通信号。
但是,如果S/88处理器62所执行的指令用了地址总线16161A上的虚拟地址,而且该地址的四个高位十六进制数为“007E”(指PE62从S/88的硬件上断开接到BCU156上,以便作一个与S/370 I/O操作有关的功能),则解码逻辑线路280在线路282上发一信号以阻拦线路270a的AS信号,并把在线路270a上的AS信号经线路270b送到BCU156。解码逻辑线路280也可设计为检测线路EC0-2的合适的功能码,但这仅仅是一种设计选择。图22,23和24图示了总线161A上的地址信号与线路270上的地址选通之间的延迟现象,其中线路270可以在AS信号出现以前阻拦线路270a上的AS。将要看到,不用S/88的应用于地址总线的一组特殊虚拟地址而是用其它手段也可以对上述条件进行译码,以便把PE62从与它相连的S/88硬件断开接到BCU156上去。
把线路282上的阻拦信号加到“或”电路284上可在线路190上产生发往仲裁逻辑线路285的PE62局部总线请求信号。逻辑线路285只在DMAC209还没有在线路269上提出请求时答应对PE62的请求。如果没有DMAC请求,PE62总线承认线路191被激活。线路191上的PE62总线的承认信号经逻辑线路253启动ENABLE线路286a、b(图19A)把PE62总线161A、D经驱动器217和驱动器/接收器218连接到局部总线247,223上,以便使PE62与BCU156一起操作。在PE62正在执行的指令控制下把处理器总线161A,D连接到局部总线247,223,与此同时,在PE62和BCU的部件之间可以传输数据和命令。应用程序EXEC370和ETIO固件包含这种指令。
如果在线路269上有DMAC请求,逻辑线路285给与DMAC209的优先级将比线路190上PE62请求的优先级要高;线路268上的DMAC总线承认信号返回到DMAC209;局部总线247,223要么经由高速接口寄存器把局部存贮器210和适配器通道0,1接通,要么使DMAC209和局部存贮器210接通以备DMAC与BCU156一起操作。
因而可以看到,当逻辑线路280译码所得的地址为007××××时,辑辑线路215,216把S/88处理器62从与其相连的硬件(如175,176,177)上断开连接到BCU136上。这种脱钩动作对S/88操作系统是透明的。
与此类似,译码逻辑281(及其相关硬件)封锁来目连线270a的地址选通信号AS,并且在DMAC209中断前往PE62方向的时序期间仲裁逻辑285发出一个局部总线请求。
更具体地说,当DMAC209在连线258a上施加一个中断信号时,该中断信号将经过“或”电路292a和292、再经过S/88中断优先级逻辑293的第6级输入端和连线IPLO-2加到PE62上,PE62则以一个中断确认周期作出响应。预定的逻辑位(其中包括中断级别值)将被放置在输出FCO-2和地址总线161A(A1-3位,A16-19位)上,由逻辑电路281对它们进行译码并在连线283上产生一个输出。这个输出信号和连线258C上的中断信号将使“与”门291向连线287输出一个信号而使逻辑电路215通过连线270b向BCU逻辑253送出AS信号。
连线287上的信号阻止来自连线270a的AS信号,并通过“或”电路284在连线190上向仲裁逻辑285设置一个PE62的总线请求。由于地址选通信号(AS)被禁止前往S/88硬件,因此,这种中断对S/88操作系统来说是透明的。
如上所述,当总线161A和FCO-2上接收到特殊的IACK数据位时,译码逻辑281立即在连线283上产生一个输出信号从而封锁连线270a上的地址选通信号,同时通过“或”电路284和连线190向仲裁逻辑285产生一个PE62的请求信号。如果在连线269上没有DMAC请求,那么在前往“与”门294-1的连线191上就产生一个PE62总线批准信号。“与”门294立即在连到DMAC209的连线258b上产生一个IACK信号。这将提醒DMAC209给出它的中断向量。接着,DMAC将向量放置在本地总线上并在前往逻辑电路253的连线265上产生“DTACK”。逻辑电路253对连线270b上的AS信号作出响应,在连线286a和286b上产生一个ENABLE信号从而使处理器总线161A和D通过电路217、218与局部总线248、223相连,从而从DMAC209中把适当的向量读入PE62中。DMAC209把中断向量从它的数据总线248(图19A)的最低有效字节经过驱动接收器234和局部数据总线223送入S/88处理器数据总线161D的第23-16位中。
S/88处理器62使用DMAC209发出的向量号跳转到S/88接口微码ETIO中八个中断处理程序中的一个。
连线265上的DTACK信号以及逻辑电路253在连线266a、b上激励出DSACK0,1信号,从而通过一对“或”电路288终止PE62周期。连线266a、b与标准的S/88DSACK线266c、d相或而形成最终的、送至PE62的DSACK输入266e、f。
从综合服务设施(图49)通过连线562和563加至“或”电路292a的中断请求将引起一系列与上面对于DMAC中断请求所描述的相类似的操作。一对“与”门294-2和294-3(图20)在连线258d、e上产生IACK信号,从而启动适当的向量号,从BCU156经过图49中的逻辑电路564、565和局部数据总线223转移到S/88处理单元62。
从下面可以看到,在逻辑上稍加改变即可给予S/88的第6级中断请求比DMAC或BCU中断请求(当它们同时产生时)级别更高的优先权。但是目前,把电源故障视为第二中断源更为合适。
(c)BCU地址变换
局部存贮器210(见图41)具有固定的存贮空间,并被变换成S/88PE62的虚拟地址空间。局部存贮器210被划分为用于下面三个不同目的的三个地址区:
1. S/88PE66直接读/写局部数据缓冲器和包括链接表
   (link-list)在内的控制结构,
2. S/88PE66往/从BCU156中读/写指令,读状
   态对来自特定地址的指令进行译码,
3. S/88PE62对DMAC寄存器进行读/写(既用于初
   始化又用于正常操作),对来自特定地址的寄存器号进行译
   码。
该局部存贮器的地址空间包括:
1.数据缓冲器和控制结构(比64K字节少512包括物理存贮
  器210中的链表);
2. BCU命令区(从特定地址译码得到的256字节的命
  令);
3. DMAC存取区(从特定地址译码得到的256字节的寄存
  器号)。
局部总线译码和总线仲裁单元216检测该局部存贮器的存贮空间中的所有地址。与此同时,DMAC209可能正在把一个地址置入上面说过的区域1中。DMAC不可以对区域2或3进行存取,这是由初始微码所保证的。
BCU156监视局部总成上的所有地址,并且把含有位于范围2和3中的地址的操作通过控制标志(Control tag)重新引导至正确的单元(BCU或DMAC)而不是引导至局部存贮器210。因此,在利用上面的区域2和3所表示的局部存贮器210的地址区域时,决不会在这两个区域中进行存贮。
在这个较佳实施例中,局部总线译码和总线仲裁单元215还可处理第四种操作类型:
S/88处理器62对送至S/88PE62的DMAC209中断作出应答,并根据上面描述的MC68020结构完成每个中断。
这个特殊操作通过地址和功能码的各位来检测,这些功能码位由S/88PE62提供,其不同之处是(结构特殊的)译码不属于局部存贮器210范围中的地址。
因此,局部总线仲裁单元216具有一个用于这种情况的特殊译码器和一个通知DMAC送出它的预编程的中断天量的辅助逻辑。除此之外,操作就与S/88处理器62读一个DMAC寄存器时相似。
当高位的数据位被译码成十六进制(H)007E时,地址总线247就被PE62选中。
剩下的4个十六进制数据位提供范围为64KB的局部存贮器地址,其分配如下:
I/O设备(或命令)      地址译码
DMAC寄存器选择       007E0000-007E
                     00FF(区域3以上)
BCU复位              007E0100(区域2以
                     上)
BSM读选择抬高        007E0104(区域2以
                     上)
BSM写选择抬高        007E0108(区域2以
                     上)
读BCU状态            007E010C(区域2以
                     上)
局部存贮器选择       007E0200-007E
                     FFFF(区域1以上)
S/88处理器62把下列的数据放置在局部数据总线223上以便传给选中的DMAC存贮器传输计数寄存器和BCU156在后读的BSM读/写选择命令中使用:31        23        15          7000000&bb  bbbbbbbb  rspp  kkkk  clxx  xxxx
第31-16位(00000&bb bbbb bbbb)将作为字节传输计数值置入DMAC存贮器传输计数器中:26   =高位字节计数位(1表示最大字节计数值(只可能是
   4096))。25-16=低位字节计数位。第26-16位表示实际字节计数值
   的1/4(双字传输)。
BCU156以下面的方式为后续的BSM读/写选择命令捕获数据:31-27=被BCU忽略。26   =高位字节计数位。该数据位只是在作最大字节计数值的
   传输时才等于1。26-14=对寄存器220或222的适配器的传输字节计数位
   (最大为4096)。为了传输4096个字节(上面
   的字节计数位为1),计数值要求为1111 1111
   1111。因此,BCU156在把双字边界位26-
   16顺着字节传移位15-14(以64字节为一块)
   送至总线适配器154之前要使双字边界位26-16
   递减一次。15-14=低位字节计数位。这些数据位表示双字边界的字节偏离
   量减1(因总线适配器的要求)。因为这些数据位只传
   送双字,它们不会被DMAC209或BCU156所
   使用。在送至总线适配器154再送至S/370
   BSM162之前,它们被存在BCU156中。13-12=对寄存器219或227而言的适配器总线通道优先
   权。11-08=对于寄存器219或227的存贮键。07   =对于寄存器219或227的用户/IOA空间位。06   =对于BSM写选择而言S/88处理器会激励该数据位
   以表示需要一次附加的局部存贮器存取。这在起始的局
   部存贮器地址不在字边界内时就会发生。由于所有的
   BCU存取都必须在一个双字边界上开始,因此,第一
   次存取不仅包括指定的起始地址上的字节,还包括在该
   双字地址中的前面的字节。这些前面的字节将被弃掉。05-00=保留位。
下面的数据将由S/88处理器62放置在局部数据总线223上送至DMAC存贮器传输计数寄存器,并由BCU156用于后续的Q选中命令:oooo  oooo  oooo  bbbb  oooo  kkkk  cxxx  xxxx
字节传输计数值(第31-16位)被置入DMAC第3通道的存贮器传输计数寄存器MTC中。
BCU156以下面的方式为后续的Q选中命令捕获数据:31-20=被BCU忽略。19-16=对寄存器220或222的字节计数值(最大为64字
   节)。15-12=被BCU忽略。11-08=对于寄存器227的存贮键。07   =对于寄存器227的用户/IOA空间位。06-00=被BCU忽略。
(d)局部地址和数据总线操作
所有的局部总线操作均由来自S/88处理器或者DMAC209的总线请求所启动。S/88处理器62的局部总线操作包括:
读/写局部存贮器(32位),
读/写DMAC寄存器(8,16,32位),
对DMAC的中断应答周期(8位中断向量读取),
读BCU的状态(32位的BCU读),
被编程的BCU复位。DMAC209的局部总线操作包括:
链表装入(16位),
DMAC操作(32位),
  只提供局部存贮器地址
  提供局部总线请求
中断
  向PE62提供4个通道的正常的中断向量(8位),
  向PE62提供关于非法DMAC操作或者其它DMAC检
    测到的错误时的错误中断向量(8位)。BCU156的局部总线操作包括:
  在DMAC期间提供读/写数据(32位),
向DMAC209发出数据请求,
通过DMAC连线PCLO257a发出读“信箱”(miilb)
  中断请求。
无论如何,只要S/88处理器62用一个有效的局部地址译码(007Exxxx)或者用DMAC直接中断确认周期激励它的地址总线时,BCU156都将执行下列操作:
封锁通往S/88的地址选通线,
向竞争逻辑216输出一个总线请求。
如果局部总线不在使用,那么S/88处理器的地址总线161A和地址总线161D通过驱动接收器217、218与局部总线247、223相连,接着执行读、写或者IACK操作。
DSACK线266a,b在BCU逻辑的激勋下结束下列操作周期:
对于所有局部存贮器和BCU型命令的32位DSACK,
对于所有DMAC寄存器型命令的16位DSACK,
对于IACK周期的16位DSACK。
为了作一次DMAC或装入链表需要激励来自DMAC209的DMAC总线请求(BR)线269。发生这种情况时,BCU156执行下列动作:
如果局部总线不在使用中,则(在DMAC读/写或链表装入期间的)DMAC地址被选通至局部地址总线247。BCU156逻辑对(DMAC写入局部存贮器210中的)数据从DMAC寄存器经门电路送至局部数据总线223。局部存贮器210把它数据(DMAC读或者链表装入)选通至局部总线223。读/写操作就被执行。由BCU逻辑253激励通往DMAC209的DTACK线和结束这个周期。
(e)S/88处理器和DMAC209向/从局部存贮器210寻址
从S/88处理器62至局部存贮器210的地址位分配如下:低阶位0,1(和SIZ0,PE62之一,未示出)确定要传输的字节(1-4)的数量和总线定位。第2-15位之内为存贮空间210的地址位。
在链表方式下,DMAC地址位A2用作局部存贮器210的低阶地址位(双字边界)。由于DMAC209是一个面向字(16位)的装置(A1是它的低位地址位),并且由于局部存贮器210是以双字(32位)为单位进行存取的,某些装置必须装有允许DMAC209把数据从邻接的局部存贮位置读入其内部链表之中的硬件。这是通过使用A2作为低阶地址位在存贮器210中的同一双字位置读两次来实现的。此时,A1位被用来从局部总线中选择高/低字。对局部存贮器210进行的地址移位是在硬件中通过DMAC功能码位来实现的。DMAC209中除7之外的所有功能码都将使地址位A15-A02送给局部存贮器210。这种安排将使得DMAC209的局部存贮器链表数据存贮在存贮器210中的邻接位置上。
在局部存贮器读/写模式中,DMAC位A1被用作输向局部存贮器210的低位地址位。读出的数据从适配器总线通道0的读缓冲器226送到存贮器210中。未自存贮器210的数据被写入适配器总线通道1的写缓冲器228中。由于DMAC是一个16位装置,因地低位地址被用来表示一个字边界。但是,每次DMAC操作对双字进行存取。为了使一个单字存取寻址机构进行双字存取,必须进行地址移位。
对局部存贮器210进行的地址位移位是在硬件中通过DMAC功能码位来实现的。DMAC209的功能码“7”将使地址位A14-A10送给局部存贮器210。为了能进行正确的操作,DMAC中只装入实际字节计数值的1/4(亦即实际字计数值的1/2)。对于DMAC写操作,有这么一条规定:即允许通过控制来自DMAC209的UDS和LDS线(未示出)的方法来进行字写入,虽然一般情况下所有的DMAC操作均为双字存取。UDS和IDS信号将引起对局部存贮器210的高位(D31-D16)和低位(D15-D0)部分进行存取。
就PE62至DMAC209的方式而言,S/88处理器PE62为了给DMAC操作建立内部控制而对四个DMAC通道0-3中的每一个的DMAC寄存器进行写操作。PE62还具有读所有的DMAC寄存器的能力。DMAC209在具有二根连线DSACK0,DSACK1(能使端口容量为8,16,32位)的总线266上返回一个字DSACK(16位)。这将允许DMAC209为正确地执行DMAC取操作而占用任何所需的周期。
S/88处理器SIZ0,SIZ1(未示出)和A0线用来产生DMAC209的UDS(高位数据选通)和LDS(低位数据选通)输入(未示出)。正如上面说过的那些DMAC出版物中详细描述的那样,为了对DMAC209中的字节宽度的寄存器进行存取,就需要这两个输入。IDS由非SIZ0和SIZ1或地址总线161D中的A0三者进行逻辑或而得到。UDS则从A0的逻辑非得到。当对一个字宽寄存器进行存取时(非SIZ0),就用SIZ0线对低位字节进行存取。当通过一个“三字节剩余”这样一个S/88的处理器操作对一个字宽寄存器进行存取时,就使用SIZ1线存取低位字节。这只是在S/88处理器对DMAC在奇字节边界上执行双字(32位)读/写操作时才会发生。A0位被用来在双字节寄存器中选择高位还是低位字节。A0、A1位用来在4字节寄存器中选择字节。PE62地址总线161D中的A6、A7位用来从4个DMAC通道中选出一个。
(f)BCU BSM读/写字节计数器操作
BCU156能从DMAC209(它能沿每根适配器总线250、251转送最多达4KB的数据)接收单条命令。但是,每根总线在一次数据传输操作中处理64字节的数据块。另外为满足约定的要求上述硬件还必须遵循适配器总线的一些限制。下面是实现这个目的的BCU156的详细描述:
BCU156包含二个全字(11位)计数器220,222和用作适配器总线BSM读和BSM写操作的二个边界(4位)计数器221、224。当BCU156在任何单一命令/数据传输操作中检测到64字节边界越界或者字节计算值大于64字节时,边界计数器221、224被用来表示总线适配器的起始地址。对于最后一次除外的所有块传输操作,边界计数器的内容都送到总线适配器154,而全字计数器的内容只在最后一次块传输(最后的命令/数据转移操作)时才送出。
S/88处理器62把字节计数器、键和优先级别位放置在(图45F中的)局部总线223上,以便转送至寄存器222或220。r位(计数位1)表示,字(2字节)边界,而s位(计数位0)表示字节边界。全字计数位代表了ZKB-1双字传输能力。由于所有的传输都是在双字基础上进行的,因此,第2位是低位的递减位。r位和s位由BCU锁存,在进行最后的64字节的传输时送至总线适配器154。
由于下面的对总线适配器的限制以及双字传输只在局部总线223上进行这个事实,有必要对字节和字计数位进行操纵。这将允许把奇字节/字传送给S/370PE85,并将允许使用不在双字边界上的起始地址。送至总线适配器154的字节计数值不能大于64字节,而且这个计数值必须由字节1来表示。任何块传输都不能跨越64字节的边界。当字节计数值等于或小于64字节且没有边界越界,而且起始地址又不在双字边界上时,需要时双字计数值进行一次额外的调整。
当发生64字节边界跨越时,不管计数值如何,都需要至少用两次适配器总线命令/数据传输操作。S/88处理器会根据对前面所述的几个因素的检查情况预先计算双字计数位和r、s和i位以及字节传输的总计数值。r和s位直至进行最后一次命令/数据传输操作时才被送至总线适配器154。
当S/88PE62把计数值放置在局部总线223上(见图45F)时,DMAC209捕获第31-16位,BCU156捕获第26-6位。BCU156把第26-14位存贮在寄存器220或222中。数据位26-16代表双字计数字段。计数器220或222以一个双字边界(第2位)递减。S/88处理器PE62把一个BSM读/写选择命令放置在局部地址总线247上,把BSM起始地址放置在局部数据总线223上。
DMAC209是一个与32位总线相连的16位装置。它被编程为能在DMA操作期间在所有通道上传输字(2个字节),每个内部存贮器地址寄存器MAR在每次传输时递增一个字(2个字节)。但是,由于每次传输的实际上是32位,因此需要进行一次双字(4个字节)的递增运算。为了达到这一目的,S/88处理器PE62总是把MAR初始化为所需的(存贮器210中的)起始地址的一半。接着,BCU156通过在把来自MAR的地址送入局部总线223之前使之加倍的方法进行补偿,从而产生在存贮器210处看到的那些正确的地址序列。
BCU156执行下列操作:
1.在装入BSM地址寄存器228或231的同时,把局部数据总线223的第2-5位上的数据求反后取到边界计数器221或224;
2.使全字计数器220或222在一个双字边界(第2位)上递增;以及
3.使BSM地址寄存器228或231在一个双字边界(第2位)上递增;
当进行数据块传输时仍然超过64字节或者发生边界跨越,则BCU156把读/写命令字节计数值从边界计数器221或224和BSM的地址寄存器231或228中的第1,0位中(求反后)装入命令/状态总线249或者252。接着,执行读/写操作。BCU156将在一个双字边界上使边界计数寄存器221或224和全字计数寄存器220或222递减。此外,它将使BSM地址寄存器231或228接双字边界递增。当BSM地址寄存器231或228的第5-2位=0000(64字节的边界)时,BCU156即停止工作。此时,边界计数器位应该为1111。
当数据块传输期间剩下的数据等于或少于64字节并且没有发生边界跨越时,BCU156就把来自计数器220或222的第5-2位和r、s位的BSM读/写命令字节计数值装入适配器总线命令/状态总线249或252。接下来,BCU156执行读/写操作。在此期间,它使寄存器220或222按双字边界递减,使BSM地址寄存器231或228按双字边界递增,并在寄存器220或222的第12-2位全为1时停止。通过把计数寄存器220或222的第2-5位与它的边界寄存器221或224加以比较,即可检测出是否有边界跨越。如果计数寄存器220、222的值大于边界寄存器221,224的值,那么就检测出一次边界跨越。
(g)握手序列的BCU156/适配器154
图25所示的定时图展示了BCU156和适配器154之间对于读信箱命令和存贮器读命令而言的握手过程,这两条命令均涉及到要把两个32位字传送到局部存贮器210中的工作放到缓冲器。
当总线290(图19A)上发出读信箱区或读存贮器命令时,一对信号“选通左”和“选通右”顺序地把命令的左边部分和右边部分以及寄存器214和219(见图19B)中的地址选通至适配器154,从而从S/370存贮器162中取出合适的数据。在连线262a上,上升特征(Tag Up)命令紧接在周期性的读出数据信号之后产生;而在连线262b上的下降特征命令则在取出的数据存入缓冲器259之后才产生。当下一次周期性的“时钟左”和“时钟右”信号产生时,第一次取出的字的左半部分和右半部分通过总线250选通至缓冲器226。
对于DMAC通道0或1的总线请求在连线263a或b上产生。当逻辑216批准这一请求时,在连线268上产生总线批准信号。DMAC209在连线264a或连线264b上产生确认信号,这个确认信号将使BCU把缓冲器226中的数据选通至局部地址总线223;与此同时,DMAC209还把选中的局部存贮地址放在局部地址总线247上。接着,DMAC209在连线267上发出DTC使逻辑电路253在连线210a上产生存贮选择信号,总线223上的数据则被放入局部存贮器210中适当的缓冲器中。
以后的周期性的上升标志、时钟左和右、和DMAC请求信号把随后的数据字选通入缓冲器226中,这些数据字在DMAC209通过判优逻辑216实现对局部总线247,223的访问并且在发出承认信号和DTC信号时被传输到存贮器210中适当的缓冲器中。
与此类似,图26中也示出了队列选择(Queue selectUp)和写存贮器命令的握手过程。当总线290上发出其中一个命令时,“选通左”和“选通右”信号把事先存贮在寄存器225和227中的命令和地址传送到适配器154中。在连线262a上,上升特征命令紧接在周期性的数据信号之后产生。在连线263c或d上产生DMAC请求信号。DMAC209通过连线269和逻辑电路216对局部总线247,223进行择优。当连线269上的请求被批准之后,DMAC209则在连线264c或d上产生应答信号紧接着在连线267上产生DTC信号,从而把第一个数据字从存贮器210转移至寄存器227。以后的周期性“选通左”和“选通右”信号再把第一个数据字从寄存器227传送至适配器154的缓冲器260。
在DMAC209对局部总线247、223的控制进行仲裁时,后读的连线263c或d上的DMAC请求信号和DMAC的应答及DTC信号再把后读的数据字传送到寄存器227中。后读的“选通左”和“选通右”信号再把每个数据字从寄存器227传送到缓冲器260中。
S/370处理单元PE85
本最佳实施例中的每个处理“单元”(如PE85)都包含用于处理S/370指令的基本设施和下列设施:
基本的32位数据流,
32位算术/逻辑单元(ALU)306,
32位的移位单元307,
48个寄存器(每个32位)数据局部存贮,具有3一端口寻址
  能力的303,
8字节S/370指令缓冲器309,以及
定时设施(CPU定时器、比较器等等)315。
图27中示出了PE85的一种较佳形式的简化数据流。可以理解的是,目前存在着许多本技术领域内众所周知的S/370处理器具体实现。本较佳实施例中的每个处理器单元85的较佳形式是一个能执行系统/370结构中的指令的处理器。该处理器通过处理器总线170从存贮器16中的一个实存贮区域162中读取指令和数据。双向总线170是PE85和S/370的芯片组150之间的通用连接线。PE85起到一个主控的作用,但在系统中具有最低的优先级别。指令由硬件和处于微方式时由处理器执行的微指令来执行。
PE85具有4个主要功能组:
“总线组”由用于存贮操作数和指令的发送寄存器和接收寄存
器300、301以及地址寄存器302组成。
“算术/逻辑组”由数据局部存贮器(DLS)303,A、
B操作数寄存器304、305和ALU306及移位单元
307组成。
“操作译码器组”由控制存贮地址寄存器(CSAR)
308,S/370的指令缓冲器(I-缓冲器)309,操
作码寄存器310和具有陷井和异常控制的循环计数器311
组成
“定时器组”是一个小型的、相对独立的单元315,由间隔
时钟315,实时钟,时钟比较器和CPU定时器组成。
下面的简要描述将概括出这些逻辑单元的使用情况:
I-缓冲器309使译码器尽可能快地得到S/370指令。包含操作码的第一个半字将经过操作码寄存器310送到译码器312从而启动S/370的第I阶段。第二、三个半字(如果有的话)则送至ALU进行地址计算。I-缓冲器309是一双字寄存器,它是在一条S/370指令时序开始之前先通过寄存器313中的一次强制操作(FOP)(诸如IPL、取PSW、PSW交换等)加载的。I-缓冲器309随着指令被送入操作码寄存器310作地址计算时是送入ALU306被逐字逐句地重新填满,在每次成功的分支转移期间被完全重新填满。操作译码器312选择要执行的操作。译码器中被送入操作码及微码操作码寄存器310中的内容。状态位决定由谁来控制译码(在强制操作时没有控制者)。
I-缓冲器309中的内容被送入操作译码寄存器310,并且并行地送入CSAR308中对控制存贮器171中的一张操作码表进行寻址。该表中的每一条输入都起到两个目的:指出微码程序是否存在并且对该程序中的第一条指令进行寻址。微码程序的存在是为了执行复杂的指令(如:可变字段长指令)和所有不能被硬件直接执行的其它指令。微指令中的特殊功能码使支持硬件启动,从而能用差不多都是16位的微指令来控制32位的数据流。
所有的处理都发生在一个如下所述的三级流水线中:
第一级把指令读入操作码寄存器310中,
第二级把数提和/或地址读入A/B寄存器304、305和
总线发送寄存器300中。操作码寄存器310把它的内容传
给控制第三级的操作译码器312中,从而为另一次操作的第
一级释放寄存器310。
第三级根据情况需要执行ALU移位,或者总线操作。DLS
写操作也在第三级中实现。
通过把译码器设置在几个组中(未示出)(如,一个专门用于ALU,另一个用于总线组,等等),有效处理可以进一步加强。位于A/B寄存器输入端和ALU输出端的可选字节多路复用器(未示出)进一步增强了操作。这样就有了只占据流水线的每一级一个周期的S/370RR指令。
强制操作寄存器(SOP)313用于内部控制。它们从陷井和异常状态得到输入,把另一种状态强制置入译码器312中。典型的操作是I-缓冲器装入,过渡到陷井处理级别和启动异常处理程序。
每个过程码寄存器310都有它自身的循环计数器311,而微码循环计数器则被一些强制操作码(FOP)所共享。算术运算和大多数的其它微指令都只需要一个周期。执行处理器总线操作的大多数微指令需要二个周期。
数据局部存贮器303包括可通过三个端口(二个输出,一个输入)进行存取的48个全字(4-字节)寄存器。任何寄存器都可以通过寄存器314进行寻址输入,同一寄存器和两个不同的寄存器一起可以同时进行寻址输出。这种用二重寻址可以允许操作数的读取与处理并行进行。由于有比较器逻辑和数据选通(未示出)功能,在一次写操作中刚刚被寻址过的寄存器也可以在同一周期中用作输入,这将便于进行流水作业。
ALU306最好是能够对真值和反码形式的二个全字操作数执行AND.OR.XOR和ADD操作的一个全字逻辑单元。也支持十进制加法。除了快速进位传送之外,还包括奇偶性判断和产生。保存寄存器320还支持除法运算。状态逻辑321还产生和存贮用于转移判决,符号评价等等的各种条件。
控制存贮寄存器308对控制存贮器171中的微指令和表进行寻址。送至CSAR308的输入要么是来自相应的变址装置322的经刷新的地址,或者是来自成功的转移操作的转移目标地址,或者是进行表查找操作的一个强制地址。在每个S/370指令的开始时以及对某些强制操作(SOP)来说,表寻找操作是必需执行的。CSAR308把得到的操作码模式作为地址对操作码表(见图29)进行存取。这张操作码表中的输出定义了能引导操作码寄存器310的译码输出的执行方式。如果要求的是非直接执行,操作码表的输出则被送回CSAR以便对合适的微程序进行寻址。
存贮器地址寄存器302是按24位地址设计的。一个相关变址器323根据要取出的数据块的大小刷新地址。指令的取出是在I-缓冲器209空出时予先以一个字(4字节)为单位进行的。送到存贮地址寄存器302的输入来自指令操作数地址寄存器324。此外为达到高速度,它是和指令地址寄存器324并行设置的。
CPU数据流允许最大可达3个S/370指令同时重叠执行。S/370指令要么被硬件执行,要么被微指令所译码。本最佳实施例中的基本循环时间为80ns。指令处理在一个或者多个80ns的步骤中执行。高速乘法装置PE151提高了二进制和浮点制乘法运算的速度,来自控制存贮器171中的微指令只用来执行那些光用硬件来执行就会太复杂、太费时的S/370指令。这些微指令如果需要的话能以每条指令60ns的速率提供。微指令集针对S/370指令的解释而被优化。这些微指令具有半字格式,可以对二个操作数进行寻址。
控制存贮器171中包含的微码被保存在IOA区域187中,IOA区域187是S/370存贮器162(见图28、29)中的一个保留区。这些微码中包括用于异常情况的对操作性能影响不大的代码,和不太常用的S/370指令等等。这些指令根据需要读入控制存贮器171的RAM部分中的64B缓冲器186中。不管什么时候只要PE85遇到一个大于控制存贮器171提供的地址,它就向高速缓冲存贮控制器153和存贮控制器接口155发出一个64字节块读取操作。单元153、155从IOA187中取出64字节的数据块,把它送给PE85。PE85再把它存入缓冲器186中。微指令由PE85从缓冲器186中取出,然后执行。所有的微码都在原始微码装入(TML)时间内装入存贮器。本系统提供对TML的支持,以便于把微码从S88装入存贮器中。
S/370指令和用户数据从一个8KB高速缓冲存贮器340(见图31)中取出。数据以一个全字为单位读/写出/入高速缓冲存贮器340中。从/往该高速缓冲器中读/写一个全字所需的时间为120ns。需要时,高速缓冲340可以自动地从存贮器162中再装入64字节的数据块。PE85通过处理器总线命令与高速缓冲器340进行通讯。PE85提供的虚拟地址用来在目录检索表(DLAT)341中查找相应的翻译以前的页地址。
PE85中的数据局部存贮器303中包括16个通用寄存器,4个浮点寄存器和24个工作寄存器。所有的寄存器都可以通过分离的3个可寻址端口独立的进行寻址。这样存贮器303可以在一个80ns的周期中并行地把两个操作数送入ALU306中,同时从ALU306或者高速缓冲340中接收一个全字。由于不象现有的数据局部寄存器那样具有串行性,算术和逻辑运算可以以重叠的方式执行,这样可以为后续的指令作准备。
CPU为S/370指令保留了一个8字节的指令缓冲器(I-缓冲器)309。这种缓冲器被一条成功的S/370转移指令所初始化。PE85从来自高速缓冲340的S/370指令流中取出一个双手数据,并把它装入I-缓冲器309中。当第一个全字被装入I-缓冲器309的时候,PE85又开始了指令执行。从高速缓存340中取出I-缓冲数据与S/370指令的执行是同时进行的。由于每条S/370指令执行时的第一个周期为非-高速缓存周期,CPU就利用这个周期把一个全字从高速缓存340中预先读入I-缓冲器309中。
第二个非-高速缓存周期只是那些在进行有效地址计算中需要变址或者需要由微程序执行的那些S/370指令才可利用。在这些情形下,S/370指令的读取和执行可以完全地重叠在一起。
在本最佳实施例中,S/370的芯片组150是通过一个中断机构进行通讯的、该中段机构要求收到中断的芯片通过使送出芯片的中断锁存器复位的方式作出应答。
不论何时,一旦系统(比方说通过BCU156)设置(激励)适配器154的状态寄存器(STR)中的一个或多个数据位时,系统也必需激励N-ATTN-REQ控制线。当目前的S/370指令执行完以后上述的状态寄存器中的所置的位将在处理器单元85中造成一个异常情况,这样就迫使处理器单元85查看状态寄存器。接着一个异常情况处理器程序检测STR的内容。询问“中段类型”,分配合适的微程序。一旦处理器单元85激励STR中的一个数据位,系统必需因此作出反应。基本上有二种类型的中段请求:
1.系统请求(SYSREQ)是(通过BCU156)送至S/370处理器单元85的要求。系统把中段类型置入STR中以规定它的要求。这将在处理器单元85中产生异常情况,处理器单元85把控制转移给异常情况处理程序,这个异常情况处理程序即调用合适的微程序,这些微程序将向适配器154发出一个PROC总线命令使STR中适当的中段类型复位,执行由该中段类型定义的功能,再执行下一条S/370指令。
2.转移请求既可以被系统,也可以被PE85所调入,它与系统接口上的附加数据传输有关。出于这个目的,STR中设定了两个中断锁存器:一个是处理器通信请求(PCR),另一个是系统通讯请求(SCR)。PCR由PE85设定,由系统复位;而SCR由系统设定,由PE85复位。
对于快速数据传输操作,假定有二个附加的寄存器:由PE85设置被系统读取的BQ寄存器115(图13)和由系统设置被PE85读取的BS寄存器116。
下面是PE85对系统传送请求所作响应的一个例子。PE85把要发送给系统的数据置入寄存器115中,并设定PCR1锁存器。系统从寄存器115中读出数据,并使PCR锁存器复位。
处理器85能检测PCR锁存器,看它是否已被复位。通过重复上还的顺序,PE85可以把其它的数据也传送到系统之中。
系统也可以采用下面所描述的相似方法来传送数据。系统把要送往PE85的数据置入寄存器116中并且设定SCR锁存器。PE85即被中断,检测STR,发现SCR锁存器已被设定。就从寄存器16中读出数据,并使SCR锁存器复位。系统可以询问SCR锁存器是否已经复位。
3.系统可以通过重复以上的顺序的方式向PE85转移更多的数据。
数据也可以通过IOA存贮区187进行交换。对于PE85和适配器154有若干PROCBUS命令允许它们往/从IOA区域187中存/取数据。
PE85有一套分配在IOA区域187中的缓冲器,并把要被系统读取的数据置入其中。因此,系统也有一套分配在IOA区域187中的缓冲器187,并把要被PE85读取的数据置入其中。中断类型IOASYS/IOAPU可以用在SYSREQ中,用来指示对方:数据已置入IOA缓冲器中。
使用系统可以产生一定的机器校验和外部中断条件。系统可以通过发出一个SYSREQ或XFERREQ通信请求的方式向PE发送一个通讯请求。PE85执行下列功能:
a.检测寄存器STR并询问它的内容。
b.调用系统提供的微程序。系统的中断请求处理器执行特定的
  中断处理。在合适的时间点上微程序向适配器154发出一
  个PROCBUS命令从而使相应的SYSREQ或者
  XFEREQ复位。最后,再把控制送回至S/370的微
  码。
c. PE85为适当的S/370中断级别执行PSWSWAP
  并执行NS1功能。
I/O中断请求由系统通过设置STR中的I/O位来产生。每次当目前的S/370指令被完成时,异常惰况处理器被调用。在本程序中,PE85读DTR从而识别出I/O中断请求。PE85使STR位复位,并把其内部的中断请求锁存器设置为PE85。这个锁存器被当前PSW的I/O表征码(mask)所掩蔽。如果表征码为1,且没有更高优先级别的中断请求处于悬而未决状态,异常处理器则把控制转给一个处理I/O中断请求的由系统提供的I/O中断请求处理程序。
处理器总线170(图11和30)和处理器总线命令。
处理器总线170是所有的S/370芯片组部件的公共连线。从逻辑上说,下面列出的所有线均属于这条总线:
1.处理器总线(0-31加上4个奇偶校验位)通常被用于在一个周期内传输一条命令及一个地址;接着在下一周期中传送相应的数据。使用该总线的许可由最好位于总线适配器154中的仲裁器给出。当通过总线批准逻辑PE85给出许可信号时,PE85在下一周期中在适当的总线连线上放置4项数据。对于存贮器存取操作型的命令,它被放置在PROC总线的连线0-7上;地址放在PROC总线连线8-31上,存取键被放置在键状态总线上,同时还产生“N-命令-有效”信号。
2.键/状态总线(0-4加上奇偶校验位)用于两个目的:把存取键送去存贮,并取回状态报告。被传送的是4位S/370PSW存取键加上一个表示PSW控制方式位(BC或EC)和动态地址翻译位相与结果的第5位。
对于一个成功的操作而言,返回的状态应该为零。非零状态在大多数情况下都会在PE85中产生一个陷井。对于在被寻址的总线单元中设置控制锁存器的“消息”类命令而言,不期望有任何状态信息。
3.一旦一个操作不能在启动时的同一周期内完成,“N-总线-忙”连线上就会产生一个忙碌指示信号。对于需要多于1个周期来完成的所有命令,N-总线-忙碌信号由PE85与N-CMD-有效信号同时发出。
如果命令的执行需要两个或更多的周期,被寻址的总线单元有责任把N-总线-忙碌信号的电平拉至有效电平。当被寻址的总线单元在后面的两个周期中不能接受下一条命令时,N-总线-忙碌信号的电平也将被拉至有效电平。但这条规则有一条例外:如果把PE85向BSM阵列主存贮器162发出存贮操作命令,它将在三个周期中激励N-总线-忙碌信号。一般情况下,N-总线-忙碌信号至少在比命令执行所需的周期少一个周期的期间内处于有效电平。
4.存贮器管理单元(MMU)忙碌信号发源于高速缓存控制器153。该信号被用来向PE85指出:所有的需要多于一个周期来执行的存贮器存取型操作要用的状态和数据已经来到。
取操作时原则上是在(开始之后的)下一个周期或更晚的周期中才送出数据。如果在下一周期就送出数据和状态,MMU-忙碌信号保持在无效的低电平(0)上。如果在下一周期不能送出数据和状态,则MMU-忙碌信号上升至1,然后在数据和状态被实际放至总线上的那个周期中回到0。
在存贮操作期间,PE85(在存贮操作开始之后的)下一周期内期待着键状态总线上的状态。如果状态数据在下一周期中被送出,则MMU-忙碌信号保持在无效(0);不然的话就上升至1,并在状态数据实际送出的那个周期中回到0。
5.高速缓存控制器153用MISS IND线上的高速缓存丧失指示向PE85指出DLAT-丢失,键-丢失,和地址违例。这个指示是状态中也要用到的信息的复制。这根线只有在键状态总线上出现状态的那个周期内才有效,但是丢失指示线提早几个毫微秒就被激励。这个丢失指示在下一周期中通过PE85产生一个陷井。
6.在“总线-批准PE85”线上的信号将给PE85以使用该总线的许可。该信号源于仲裁器,PE85在批准信号变成有效。N-总线-忙碌信号为无效的那个周期之后的周期中PE85把预定操作的命令和地址顺次放到总线上。
7.使用:N-ATTN-REQ线上的任意请求信号来源于其他一些总线单元(如总线适配器154),要求PE85执行一次“检测”操作。只要进行中的当前操作(如指令执行)一结束,PE85就执行上述请求。
8.PE85用N-CMD-有效线上的命令有效信号指出:PROC BUS线0-31和键状态总线中第0-4线(包括所有的奇偶校验线)上的位模式有效。这根线可以在“总线-批准-PE85”信号变成有效及“N-总线-忙碌”信号变为无效的那个周期之后的周期中变成有效(低电平)。
9.对于存贮器访问型操作,PE85用地址-递减线对被访问的地址进行从起始地址向下的递减操作(比方说象十进制数处理的数据传输所要求的那样)。这个信号在N-CMD-有效被激励的同一周期中被激励。
10. “CMD-取消”线上的命令取消信号被PE85用来取消已经发出的对存贮器的读取。这种情况发生在这样的一个周期内,即N-CMD-有效信号已变为有效而PE85却发现应禁止直接使用被请求的数据条件。
本最佳实施例中,有五组众所周知类型的PROC BUS命令:
CPU存贮器型,I/O存贮器型,MMU操作型,信息交换型和浮点型。
要求总线171实施控制的总线单元(PE85,适配器154或高速缓存控制器153)把命令放置在总线上。对于CPU-存贮器型和I/O-存贮器型命令,总线单元还把存取键和动态地址翻译位放置在键状态总线上。命令完成之后,通过相同的总线把状态送到发出请求的那个总线单元。
适配器154能发出CPU-存贮器命令和I/O-存贮器型命令,而PE85只发出CPU-存贮器型命令。这些命令组如下所示:
操作          CPU存贮器型命令     I/O-存贮器型命令1.对S/370主存贮器的引用a)读取高速缓存命中    以高速缓存中读取    从高速缓存中读取高速缓存丢矢    用存贮器对高速缓存
              线进行再装入(包括
              丢失),从高速缓存
              中读取b)存贮
高速缓存命中    存入高速缓存中    存入高速缓存中
高速缓存丢失    从存贮器对高速缓  存入存贮器中
                存线进行再装入
                (包括丢失),存
                入高速缓存中2.内部目标区域      某些CPU-存贮(IOA)参考         器命令允许对IOA
                存贮地址进行检验
I/O-存贮器型命令不检验S/370的主存贮器地址便在高速缓存控制器153中被执行。这种检验是在STC1 155中执行的。CPU-存贮器型命令被转到控制器153去执行,此类命令具有1个字节的命令字段和三个字节的实的或虚拟的地址字段。命令字段中的数据位如下:CMD位     意义0-1=10   CPU-存储型命令2=1      取(操作)2=0      存(操作)3=1      超高速缓(冲)存(储器)旁路,无地址检验3=0      超高速缓(冲)存(储器)访问,有地址检验:
      -S/370地址比较
      -ACB检验4=1      不存取DLAT(目录查阅表);即
      -不作键保护检验
      -不做引用和修改位的处理
      存取目录查询表;即
      -键保护检验
      -作引用和改变位的处理5-7=nnn  字节长度计数:
      000=1字节
      001=2字节
      010=3字节
      011=4字节
      100=8字节
      101=64字节
      110=64字节取!从BSM放慢
      111=64字节取!从适配器放慢CPU-存储型命令的例子是:1.取(10111nnn)/存(10011nnn)实N字节,以一实地址从存储器162中取出/存入最多为64字节。2.取(101010nn)/存(100010nn)超高速缓存实N字节,以一实地址从超高速缓存读出/写入最多为4字节。3.取(101011nn)/存(100011nn)高速缓存实N字节,以一实地址从IOA读出/写入最多为4字节。4.取(101000nn)/存(100000nn)高速缓存虚N字节,以一虚地址从高速缓存读出/写入最多为4字节。I/O存储型命令由适配器154启动并指向高速缓存控制器153。它们传送数据串以递升的地址次序,长度从1至64字节。32位的命令格式包括三个低位字节和一个高位字节,低位三字节表示实际的字节地址,而高位字节中的最高位为“0”,次高位定义—存或取的操作,而其余的6位定义数据传送的长度(1-64字节)。数据串按字边界传送,但第一和最后的传送例外,它们可能需要在总线上对准位置。
MMU命令用以控制高速缓存控制器153及其寄存器包括DLAT,ACB,目录之类。
消息命令系用以在连到总线151上的各总线单元之间传送消息。S/370存储管理单元811.高速缓(冲)存(储器)控制器153(图31)
高速缓存控制器,图31,包括高速缓冲存储器340及访问和比较逻辑347,348,取操作的边界对准器,以及为快速地址翻译用的目录查询表(DLAT)341,当通过高速缓存340不能满足要求时控制器153从处理器总线170接收虚地址和存储命令并且通过多路转接器349和STC总线157传送取或存命令到存储控制接口155(图11)。
DLAT341提供从虚页地址到实页地址的快速翻译。它的2×32表项容纳64翻译前的页地址。DLAT341使用二义树联想寻址方案来访问。虚页的大小以4KB为宜。在DLAT丢失的情况下,PE85即被中断而虚地址的翻译就由微程序使用S/370主存162中的表和页表(未示出)以众所周知的方法完成。然后DLAT341被更新以反映从主存中取出而放入高速缓存中的信息的新的虚和实页地址。存储键的拷贝从S/370的键存储器中取出而包含到DLAT的表项中。
8KB高速缓存340及其相关联的高速缓存目录342提供高速度的缓冲以显著地改善处理器的性能。数据和目录阵列划分为4个部分。高速缓存中的每个部分由256×8B(字节)组成。为从高速缓存340中取出数据,虚地址中的字节位移用以同时访问DLAT341,高速缓存目录342和高速缓存340。键控制的保护检验由比较电路345用选定的DLAT表项中的存储键来完成。4×8B数据在高速缓冲340的输出340a上锁定。如果所要的数据在高速缓存340中,则用一个滞后的选择信号把此适当的字节选通到取操作边界对准器343。
对于存储型操作,部分存储是在字节基础上实现的。
在高速缓存丢失的情况下,高速缓存控制器153自动设置一个BSM命令以用实发方式取出所要的64B超高速缓存行。如果由于要由新的超高速缓存行代替的那一超高速缓存行已被装入而改变,就在新的超高速缓存行装入之前启动对存储器162的超高速缓存行的掷出操作。I/O数据永不引起超高速缓存行的掷出和装入操作。要从存储器162中取出的I/O数据将以访问主存162和超高速缓存340的方法在两设备双方中寻找。如果在超高速缓冲中找出,存储操作就取消,而超高速缓存就提供数据。如果I/O数据不在超高速缓存中,则它将从主存中直接取出,但是不取代超高速缓存行。要存入主存的I/O数据将存入超高速缓存340,如果要访问的行已经在超高速缓存中;否则,它即将直接存入主存162。
4KB键存储器344为16MB存储器保存键。键存储器是4K×8组成的阵列。每个字节保存一个存储键。每个DLAT表项保存一个存储键及其相关连的4KB块地址的拷贝。当反复访问一个页面时,这种情况就显著减少访问键存储器的次数。存储键字赋值的改变既影响键存储器也影响在超高速缓冲存储器中的任何拷贝。
超高速缓存控制器153经过接收器线路355从处理器总线170接受来的命令、数据和地址存储在命令的、数据的和地址的寄存器350,351和352中。地址寄存器347为有关的S/370处理部件PE85储存有效地址的范围。比较逻辑348检验收到的地址的有效性。由地址寄存器347及其有关的比较逻辑348所提供的S/370地址比较功能既从PE85也从I/O总线适配器154处理地址。
地址比较边界(ACB)寄存器353的比较功能保证预定给顾客区域的S/370主存访问不访问IOA区域。ACB寄存器353储存在S/370主存162中的保留的IOA区域和非保留的区域之间的分界线(边界)。对S/370主存的每个访问导致比较逻辑354将收到的地址与ACB的值相比较。2. STCI155(图32A,B)(a)导言
存储控制接口(STCI)155将S/370芯片组150经过总线逻辑178和系统总线30(图1)连接到S/88双联的容错存储器16,18。它支持所有的S/370处理器的和I/O存/取的命令,这些命令定义每个命令中从1至64字节的数据传送。所有ECC刷新,存储器初始化和配置,重试等等都由S/88处理器62和存储器16、18处理,STCI155的详细的数据流由图32A,B示出。
在存储管理单元83中的STCI155,它的对偶STCI155a(未示出),和他们在伙伴单元23(图8)中的对应的STCI对偶(未示出)经过诸如在每个STCI中的逻辑408(图32B)的仲裁一起对系统总线结构30实施控制。STCI155不但要象在图7中所见那样对I/O控制器和模块9的其他CPU25,27和29,31仲裁,而且STCI155必须对它的相关联的S/88处理器62(和该处理器在图8的CPU21,23中的对偶和伙伴处理器进行仲裁,因为处理器62可能正为S/370的I/O功能或常规的S/88功能要求控制总线。
但是,仲裁逻辑不象通常类似于Reid专利中所描述的主要基于处理器和I/O板的模块式的底板插槽的位置。现在让我们来描述这一逻辑。在仲裁阶段,处理器模块9的能够成为总线主人并且准备启动总线周期的任何单元对总线结构的使用作出仲裁。上述功能是这样实现的,一方面保持总线周期的请求信号,同时借助于仲裁网络对于具有更高优先权的单元进行检查看看是否有更高优先权的单元也坚持有总线周期请求。在仲裁期间能够成功地获得访问总线结构的单元或伙伴单元的对偶称为总线主人并在下一时钟阶段开动一个传送周期。各个存储单元16,18都永不作主人也不仲裁。
在一周期的定义阶段,已经决定作该周期内的总线主人的单元以产生一组周期定义或功能信号来定义周期的类型。总线主人还维护地址信号并且在地址奇偶线上为此地址和功能信号设置偶校验。处理器模块的所有单元,不论其内部运行状态,总是在携带功能和地址信号的总线导线上接收信号,尽管外围控制单元没有收到奇偶校验信号也能运行。如果此时出现一个总线等待信号被定义的周期就停止。
在响应阶段,系统的任何正在工作的被寻址单元可以保持总线忙碌信号以取消此周期。例如,存储单元工作时或在刷新周期中如果被寻址就可以保持总线忙信号。在响应阶段出现总线差错信号将停止此周期,因为这个错误可能已经混在周期定义阶段给出的地址中。在数据传送阶段,数据既在总线A上也在总线B上传送,既供读周期也供写周期。这样就能够使系统在总线结构上把读周期与写周期以流水线方式混合传送,而不为使用数据线而重新仲裁并且无须为源单元或目的地单元而标记数据。
全字传送伴以既插入UDS也插入LDS(低和高数据选通)信号。半字或字节传送定义为伴随着上述选通信号之一的出现而传送。在循环的早期,总线主人只要不给出任一种选通信号就能把写传送停止正在被读的从单元必须与数据一起插入选通信号。选通信号包含在计算总线数据奇偶性中。
数据传送阶段查出的差错将引起查出此差错的单元在下一定时阶段即第一个数据结束阶段给出上述的总线差错信号之一个或二者。外围控制单元在使用数据以前等着检测是否有差错发生然而在系统的中央处理单元21和主存单元16则只要一接到数据就使用,而在差错错情况下,事实上就退回等待正确的数据。在数据结束阶段插入总线差错信号引起在下一个即传送周期的第六阶段中重复传送阶段。这样就停止了这个周期(如果有的话),它要不能在这个第二个数据滞留阶段即第六阶段就会在总线结构上传送数据。
示例系统的通常的底板操作方式是当所有单元处在服从双方方式时,在此方式中A总线和B总线双方都没有差错。例如,响应在A总线上的差错,所有单元同步地转向服从B方式。模块9借助于运行在S/88中央处理器中的管理程序软件回到服从双方状态。
在服从B和服从A两种操作状态,A总线和B总线二者都由系统单元驱动并且所有单元仍执行全部的差错检验。与服从双方方式的操作仅有的不同在于各单元只是将接着的差错记录到不被服从的总线上而并不要求重复数据和停止任何周期。然而总线差错信号在被服从的总线上是按上述处理并且所有单元转向服从另一总线。(b)系统总线的各阶段
图33示出关于模块9在总线结构30上带有四个管道式的多阶段传送周期的上述操作。波形56a和56b示出时钟38运用于X总线46的S/88主时钟和主同步信号,对21个连续的计时阶段编号为(1)至(21),如图中上部所标示。以波形58a表示的在总线结构上的仲裁信号在每个启动的计时阶段开始时交替,对一个新周期仲裁为周期编号代号#1,#2,#3…#21所注明。图33以波形58b表示周期定义信号。对每个周期的周期定义信号比对该周期的仲裁信号延迟一个时钟阶段发生,如在波形58b上以周期编号所注明。该图还表示了占线、等待,数据,A总线差错和B总线差错等信号。该图底部一行示出系统在其中运行的底板状态并示出在不同状态间的转换。
进一步参看图33,在定时阶段编号(1)期间,模块9对周期#1产生周期仲裁信号。系统在服从双方状态中运行,如图所示。在阶段(1)的周期仲裁期间所决定的总线主单元定义在定时阶段(2)所要执行的周期,如在周期定义信号波形58b上以符号#1所标明。同样,在定时阶段(2)执行对第二个周期即周期#2的仲裁。
在定时阶段(3)在总线结构上没有对周期#1的响应信号,这种情况表示这一周期已准备进行下去着手数据传送,如同发生在定时阶段(4)并在数据波形58e上以符号#1所标明那样。同样,在定时阶段(3)期间,执行对周期#2的周期定义和执行对进一步的周期#3的仲裁。
在定时阶段(4),传送对周期#1的数据和执行对周期#3的定义。同样,在此定时阶段插入总线A差错,如以波形58f所示明。该差错信号停止周期#2并且把在模块内的所有单元转向服从B方式。定时阶段(4)的总线A差错信号表示在前一定时阶段(3)至少有一个系统的单元查出了关于从A总线42来的差错。差错发生于在总线结构上没有数据的时候,如在定时阶段(3)期间在波形58e中没有数据的情况所示,这就没有重复数据传送的需要。
在定时阶段5期间,当系统运行于服从B状态时仲裁第5个周期,定义周期#4的功能并且在总线结构上对周期#3没有响应信号。于是该周期在时间阶段(6)继续进行传送数据。同样,在时间阶段(6)插入总线等待,如在波形58d中所表现;此情况与周期#4相连接,其效果是为另一定时阶段延伸该周期并停止周期#5。
在定时阶段(7)仲裁新周期#7并为周期#6进行定义操作。在时间阶段(8),供周期#4的数据施加于总线结构以供传送。同样,在时间阶段(8)插入占线信号。此信号为对周期#6响应的一部分并停止该周期。
在时间周期(9)中仲裁和定义的操作根据确认的另一总线A的错误遵循相同的模式。系统已经运行于服从B状态于是对此信号的响应仅为记录此差错。
在时间阶段(10)中并继续到时间阶段(11)中插入的总线等待信号,将周期#8延伸两个时间阶段,使得给该周期的数据在时间阶段(13)期间传送,如图所示。在这些阶段期间确认的总线等待信号同样也停止周期#9和#10,如图所示。鉴于周期#8被总线等待信号所延伸,在阶段(10),(11)或(12)期间给出的任何占线信号会停止周期#8。注意伪周期#7的数据传送发生在时间阶段(10)而不依赖在此时间阶段等待和占线导线上的信号。
发生在时间阶段(11),(12)和(14)期间的新的总线A差错信号除了被记录之外对系统同样没有影响,因为系统已经运行在服从B状态。在时间阶段(14)给出的等待信号停止周期#13。同样,它延伸周期#12,不管怎样该周期系被在时间阶段(14)期间所出现的占线信号所停止。伪周期#11的数据在时间阶段(14)期周以正常顺序传送。再者,伪周期#14的数据传送发生在时间阶段(17)。
在时间阶段(19)中,紧接时间阶段(18)的周期#15的数据传送出现了总线B差错。该差错信号停止正在响应阶段的周期#17,并启动伪周期#15数据传送的重复。重复传送发生在周期#20期间。再者,该差错信号将模块转向服从A状态。
注意,总线等待信号只由已经被总线主单元访问的并且没有准备引起数据传送的那些从单元所驱动。由于STCI155永不做从单元并且只访问主存而不访问I/O设备,此线并不被STCI155所利用。
系统总线逻辑178(图19c)提供从STCI155到S/88存储板16,18的连接并且包括仲裁逻辑408(图32B)。逻辑178使用上述为总线30定义的相同的基本传送周期:
1.仲裁阶段——此阶段在每个周期进行以便总线控制器竞争总线控制权。仲裁优先级一般基于仲裁设备的底板槽位标识,对STCI设计的优选形式的仲裁优先级是基于对单个CPU的槽位标识,但是,对每个CPU(PE85及其配偶)使用了FIFO殆满/殆空(AFE)标志和半满标志线409,以便在多CPU实现中根据实际任务请求来分配优先级。
2.周期定义阶段——此阶段跟在前一周期的总线许可的后面。它包含在总线30的总线功能代码A和B上的一个4位功能代码以规定随着27位起为物理地址到存储器16的16,32或64位读/写传送。存储器16对优选的实施例是256MB。所有的存储器访问是在16,32或64位边界上,所以不使用地址位0。相反地字节和字访问是由图14所示的UDS和LDS信号和总线功能代码定义一起指明。
3.周期响应阶段——这个阶段可能包括存储器在总线30上产生的总线差错或总线忙条件,这种条件将强使STCI155重新仲裁和重新发出先前周期定义阶段。
4.数据阶段——一当存储请求被接受,(过去了的周期响应阶段)就发生跟在周期响应阶段后的周期中(在周期定义阶段之后两个周期)的数据传送阶段。16,32,或64位数据可以根据读或写操作在125毫微秒中传送。
5.结束数据阶段——在这一段要对总线错误进行检验,这将在数据初始发送之后的两个周期强使在总线30上重复数据(从或者STCI155或者存储器16)。由于A和B总线两者携带同一的数据,无论A或B的总线差错都会在结束数据阶段时发生。
在S/88处理器62仲裁总线30和STCI155仲裁总线30之间的一个重要区别现在可以描述。通常,S/88处理器62在时间的任何瞬间只在五个阶段之一上运行。但是,由于在STCI155中的流水线式的存取能力(下面描述),STCI能够在同时甚至在所有五个阶段上运行。例如,在64字节读操作期间,如果没有差错并且STCI被许可在五个相继的各个阶段仲裁控制总线30,STCI155能够同时在所有五个阶段上运行。这种情况改进了系统性能,特别是在模块9的单处理器方案中。(c)STCI特性
某些STCI特性描述如下:
1. FIF0400——4个(64×9位)先进先出快速随机存取存储器形成一个缓冲器以允许多达4个64字节存储器命令在单元155占线以前被保存。它还为所有数据携带进来的奇偶性直至输出。S/370的时钟152记录进入FIF0400的命令和数据;而S/88的时钟38记录从FIF0400出来的命令和数据。FIF0400的优选实施例是CY7C409,后者在Cypress半导体公司1988年1月15出版的“产品信息手册”中从5-34页开始有更充分的描述。
除工业标准握手信号之外,还提供了殆满/殆空(AFE)和半满(HF)标志。当FIF0几乎充满或几乎排空时,AFE为高,否则AFE为低。当FIF0为半满时HF为高,否则HF为低。
当输入就绪(IR)控制信号为高时,存储器在移入(SI)输入的控制下在其输入处接受9-位并行字。当输出就绪(OR)控制信号为高时,数据在移出(SO)输入的控制下以和它存入时同样的次序输出。如果FIF0为满(IR低),在SI输入上的脉冲被忽略;如果FIF0为空(OR低)在SO输入上的脉冲被忽略。
对于更宽字的并行扩展是以把个别各FIF0的IR和OR输出(各自地)进行逻辑与运算加在一起来实现的。逻辑与运算保证所有FIF0或者准备好接受更多数据(IR高)或者准备好输出数据(OR高),这样就补偿了各设备间传播延迟时间的变异。
读写操作完全异步,这就允许FIF0可以用来在两个工作时钟频率或时钟相位相差悬殊的数字机器之间作为缓冲器。FIF0包含一个字指针,一个读指针,和生成所谓握手(SI/IR,SO/OR)信息所必要的控制逻辑以及殆满/殆空(AFE)和半空(HF)标志。当FIF0是空的,STCI逻辑将保持SO为高,使得一个字被写入后直接地转向输出。OR信号在一个内部周期内抬高然后再回降低。如果更多的字写入FIF0,它们将在第一个字后面排队并且直到SO变为低之前将不出现。
数据不是物理地传播通过存储器。读和写指针被递增而不是移动数据。递增写指针并把从SI输入的信号传播引空的FIF0的OR输出所需的时间(下行时间)或者递增读指针并且把从SO输入的信号传播到满的FIF0的IR输出所需的时间(上行时间)决定数据能被传递通过FIF0400的速度。
电源接通时,FIF0由总清信号复位,这就引起设备进入空状态,后者是用OR信号低而同时IR信号高来表示的。在这种情况下,数据输出(D00-D08)将是低。AFE标志将是高而HF标志将是低。
一个空单元能否使用由输入就绪(IR)信号的高状态指明。当IR是高时,在移入(SI)针脚上一个低到高的变换将把输入处的数据装入FIF0400。IR输出将变为低,这就指明数据已经取样。SI信号高到低的变换指明IR信号低到高的变换,如果FIF0400是殆满或殆空,则也指明AFE标志低到高的变换。
FIF0400的输出处的数据能否使用由输出就绪(OR)信号的高状态表明。在FIF0复位后所有数据输出(D00-D08)将在低状态。只要FIF0仍是空的,OR信号将是低并且加于它的所有移出(SO)脉冲将忽略不计。在数据移入FIF0之后,OR信号将变为高。
两个标志,即殆满/殆空(AFE)和半满(HF),描述有多少字被存入FIF0。当有8个或少些或者56个或多些个字存在FIF0中,则AFE为高,否则AFE标志为低。当有32个或多些字存在FIF0中则HF为高,否则HF标志为低。标志变换发生在相对于SI和SO的后缘。
2. SBI逻辑——系统/88总线接口(SBI)逻辑178允许S/370处理器85启动对S/88存储器16的读/写。它包括逻辑408,后者为访问总线30启动16,32或64-位传送而仲裁每一个周期。逻辑178接口线和仲裁逻辑408是在李德专利中描述过的优选类型,本文描述没有修改。
3.容错——所有STCI逻辑,包括FIF0缓冲器400,都是成双的以便在S/370处理器板上提供自检。仅有的单份逻辑包括比较电路逻辑402a-g,中断逻辑403和时钟生成逻辑(未示出)。这样,STCI155有一个实质上同一的配对STCI155a(未示出),后者是图8的存储管理单元83的一部分。
比较电路逻辑402a-g形成图8的比较逻辑15而中断逻辑形成图8的普通控制逻辑75的一部分。在优选的实施例中,S/370的比较检验只在配对的STCI155和155a上执行以防止错误的数据通过总线结构30扩散。但是,S/370的机器检验和奇偶错通过总线460提供给逻辑403,某些在BCU总线247和223上的差错由S/88比较线路12f(图8)拾取。
4.地址检验——两个存储器映射的寄存器404,405(MEM基址和MEM大小)用来保证在使用一个基址位移(图10)来生成系统/88存储器16中的一个有效物理S/370用户地址时,每个S/370处理器存储空间的大小(例如162)不被破坏。
5.同步操作——S/370时钟152是通过总线30和同步逻辑158(图19c)从S/88时钟38(图7)的16兆赫输入中导出的,以允许在一个从S/88时钟38开始的一个S/370振荡器的输入时钟周期内的各时钟之间的同步。这样就允许连续的读(例如64-字读命令)能够从存储器162流水线式地传送到S/370芯片组150其间没有等待状态(假定在系统总线30上给予STCI155连续的周期)。
6. STC总线接口——所具标准的S/370存取命令和命令删除一起执行。奇偶错和/或ECC错将不报告给S/370操作系统而宁可当作重做(ECC或总线错)处理或成为打断(内部板奇偶错)。64-字节行边界交叉将导致地址越界。
如图11所示,STCI155通过处理S/370的动态(虚)地址翻译的超高速缓存控制单元153耦合到S/370处理器85上,(此接合)是利用一个8KB指令/数据超高速缓存340以及一个64-表项DLAT(目录查询表)341。这样,所有实/虚的I/O或处理器的传送导致由单元153发出一“实”地址在STC总线157上。典型地,当总线适配器154或S/370处理器85实行“实”存储操作,单元153只是充当从处理器总线170到STC总线157的转换地点,除了超高缓存被命中,它可能导致一个已经发给STC总线的命令157被删除。
现在给出41条STC总线的各连线(图32A和30)的简明描述。STC的数据/地址/命令总线406有32条双向数据总线连线加上每字节的奇检验。这个总线是用来输送在一个周期里的命令和地址的,并且在存储操作的每个相继的周期上可达32位数据,STC有效线由单元153驱动向STCI155发出在同一周期中STC总线上的命令/地址为有效的信号。STC删除线由单元153驱动向STCI155删除一个先前发出的命令。它在STC有效发出后看来可达两个周期。它和PE85命令删除输入一起被进行或运算。STC忙碌线440由STCI155驱动向单元153,在“STC有效”发出之后一个周期,以表示此单元忙而不能接受新的命令。它在单元155能够接受新命令以前一个周期释放。
在线433上的STC数据无效信号可以由STCI155向单元153发出,这与取操作情况下的数据回送处于同一周期,从而使数据传送无效。如果该线被启动,单元153对数据周期忽略不计。当在总线上发生了一快速ECC差错,或者数据在配对的STCI单元155和155a的逻辑之间错误比较,或者在总线30的读周期期间查出不正确的奇偶性,则该线上的信号与数据同步送出。
STC数据传送线441由STCI155驱动向单元153以在后续周期中在STC总线157上发出一个数据传送信号。对于存入,它(该信号)命令单元153提供在后续周期的下一个32-位字。对于取出,它提醒单元153注意次一周期将包含有效数据,除非它在次一周期中被STC数据无效所取代。STCI155的设计是充分考虑了流水线式的工作方式的,以允许在一个S/370CPU中所有上述状态在同一瞬间都是有效的。在这种方式下,假定相邻总线许可且没有总线错,STCI155则对取操作能维持流水线式的数据而不用等待状态,在这种情况下利用64位的读操作(系统总线30的周期是125毫微秒)把数据象流水似的送往32位的62.5毫微秒的总线157上。
系统/88接口410是用来在STCI155中支持访问在BCU局部虚地址空间中的MEM大小/MEM基地寄存器405和404的。同样,“打断”403和“总线中断要求”(IRQ)差错与在S/88处理器板102上的那些中断要求合并起来作为象单一CPU一样以驱动在总线30上的一个低优先级维护中断。
总线IRQ差错在下述意义下与‘打断’型的那些错误不同,这些差错,通常由于在总线30上被同一或伙伴板查出不同的未保护的信号时,并不像“打断”所做那样从总线30切断一块板。当该板处在服从双方状态下这些差错只起作用。
此外,在行411,412,413上的‘服从A’,‘服从B’和‘双份’信号是从S/88处理器板逻辑415驱动的而不是在S/370处理器之中重新制作出来的。服从A/服从B信号分别用来控制检验电路的输入多路切换器71,7-3和驱动端数据输入多路转接器,并且也为了选通总线差错状态。线413上的“双份”信号是用来当板是配成伙伴时发出信号(即,用于总线仲裁逻辑408以保证在相邻插槽中时伙伴双方共同仲裁)。
服从A和B信号被反转以提供+服从A,-服从A,+服从B和-服从B。+服从A和-服从A信号分别施用于寄存器428和429。寄存器428和429各自分别耦合到总线结构30的A和B总线。S/88时钟信号(未示出)对所有三个时钟状态A,B,和双方定时地记录从A和B总线分别到寄存器428和429的数据。当总线处在服从A或服从双方状态下工作而寄存器429只在服从B状态期间对总线435和436开启时寄存器428里的数据被选通出来到总线435和436上。同样,如在图34中所见,SCTI155a的寄存器428a的内容同样地在服从B或服从双方状态期间开启出来。寄存器429a的内容在服从A状态期间开启出来。寄存器428,429和428a,429a的各输出的点或运算执行各自的数据输入多路转接器的功能71,73(图3)。
寄存器405,404的MEM大小/MEM基址的值在S/88处理器62虚地址空间中是以BCU局部地址空间方式映射的。一旦给定的S/370CPU空间162定义了,这些值必须在S/88引导期间设置。它们可以由S/88改变只要在引导过程中没有STCI存/取操作。
寄存器404,405之访问是由图19A的地址解码逻辑216通过一个局部地址(007E01FC)实现的并且包括以下数据:PA位20-23和PA位20-27,它们分别等于S/370存储器162大小(MEM大小)和存储器基底地址(MEM基底),其中:
MEM大小=从S/88存储器16到存储区162分配好的主存的(1到16)兆字节。
MEM基底=从存储器16的物理地址空间中指派给存储区162的位移的兆字节。
PA=S/88已翻译的虚地址(即物理地址)。
当逻辑216对地址007E01FC解码时,就由处理器62通过其总线161D在寄存器405和404中设置大小和基底的地址位。在此操作期间,逻辑216把处理器62从其相关连的硬件中分开,从而寄存器404,405的装入对S/88操作系统是透明的。此外,S/370操作系统并不知道它们的存在或他们在访问S/370存储器162中的使用。
图32A,B和30还示出存储器控制接口155所使用的信号的I/O线。这包括在STC总线157之外所有的为接到S/88系统总线30,S/88处理器62和在S/88CPU板102上的逻辑415上所需要的线。为便于描述,在图32A,B中未示出图8的收发器13。(d)数据存操作
根据从超高速缓存控制器单元153来的存命令,STCI155将在地址/数据总线406(它是STC总线157的一部分)的位0-7上定时地驱动此命令并且把它连同STC有效位存在命令缓冲器416中和缓冲器417中。STC忙信号将由逻辑401在次一周期期间送到线440上以指明单元155占线。同时,总线406上的24-位实地址也记录到A/D寄存器417中。
只要FIF0400不满并且能接受命令(没有F1F0溢出)中规定的整个数据传送长度(高达64字节),STC数据传送将被逻辑401提升并在每个周期仍能活跃直到对此命令的所有STC总线数据传送完成。对于存,STC数据传送命令并不发出(这样该命令就没有移入FIF0)直到它被保证没有发出删除(直到在STC有效之后2个周期)。但是,在此期间逻辑401把24-位地址从寄存器417移到寄存器442并且数据的前四个字节从单元153传送到寄存器417。此外,FIF0HF和AFE标志409就与从命令缓冲器416中解码来的字节传送长度相比较。FIF0标志指明使用中4个缓冲器深度范围之一。如果字节传送长度加上命令字数据的4字节超过FIF064字容量(当加到最坏情况的缓冲器深度时),如同FIF0标志所指明,那么所有STC数据传送激活都被堵塞直到这个溢出状态消失。在足够的字刚刚从FIF0中移出以引起标志状态的改变时,就出现上述情形。
如果没有删除发生和没有FIF0溢出存在,那么从时钟401来的经过多道转接器447与寄存器442的24-位地址串联的命令解码就储存在FIF0400。一旦初始的存命令移入FIF0从A/D寄存器417来自后续的32-位数据块就通过寄存器442在连续的周期中存入FIF0400,对于总线30上的位的传送操作门423是用于把较低16位多路转换到较高16位。
S位是用于从取出区分出存入并且C/A位是用于区别在FIF0400中的命令字和数据令,如在图35中所见。奇偶性通过FIF0保持。
FIF0的输入和输出各不相同地记录。数据用S/370时钟移入FIF0400,而移出则用S/88时钟。当FIF0400是空的时,设置空时以允许在最坏情况的FIF0的下行时间(60毫微秒)。FIF0的命令和数据字在图35中示出,其中
S=(1=存,0=取)
C/A=(1-Cmd/Add,0=数据)
P01=字节0,1偶校验
P23=字节2,3偶校验
LDW=较低数据字选择(较低数据字多路转换到较高字;
     在此情况P01=P23)
64BOVFL=由于奇地址边界16字传送被超过,需要
         额外的32位数据传送周期
32B,16B,8B,4B=加权字节传送计数
TRL1,0=为“曳尾”字中的有效字节解码(最后32
         位数据传送)。
FIF0400的输入/输出端的块401各个空序器跟踪FIF0的传送入/出。输出空序器实际上跟踪总线30上等候当前的取或存命令待处理的数据传送数目,一旦命令字到达FIF0的输出处,C/A=1在逻辑401中解码,而且只要没有先前的命令还在等待完成,从FIF0400来的S/370实际地址就通过逻辑422和423与基址寄存器404相合并,后者于是作为开始的‘物理’地址装入地址缓冲器420而传送计数则装入401中的输出空序器。同样,仲裁逻辑408则置为开始仲裁。
408中的周期控制逻辑将为取和存两种操作追踪所有活跃的STCI155总线30各个阶段。和总线30状态行(即,总线占线,总线差错)一起,这个逻辑用于在STCI155中处理正规总线30的阶段操作以及处理差错条件,差错条件将导致删除周期定义或数据。
物理地址的形成是先在逻辑422中把从FIF0来的S/37024-位实地址的上部4位与寄存器405中的S/370存储器大小的值作比较。如果S/370地址位不超过分配给S/370处理器85的大小区域,上部4位将由逻辑423加到在寄存器404中的S/370存储器基地址值上。并连接到缓冲器420中的较低位19-1以形成一个物理27-位字地址用作进入S/370区域162的开始的S/88地址。否则即报告出一个软程序检验。任何64-字节地址边界交叉将导致返转到开始地址。
地址U/D计数器421用来保持输出的物理地址的位5-2。它与输出定序器同步记录,并且当正常增量时,可能因响应一个周期响应阶段的总线占线或总线差错状态而减量。输出定序器一旦装入,相关的逻辑根据总线仲裁许可通过逻辑408启动存入周期,响应总线差错或总线占线状态。适当的S/88功能代码由逻辑对应于S/88存入命令而产生;当仲裁周期要求被许可,该功能代码即被入寄存器443以备应用于总线结构30的A,B两总线。
输出定序器通常按每次许可减量,对到总线30的32-位传送减1和对64-位减2,直到它达到0,表明对当前命令再无字节要传送。
另一与周期定义阶段(背对背许可)重迭的一个周期响应阶段内总线忙或总线有错,输出定序器将对被删除的32位传送增1和对664位传送增2(只取)。同时,地址U/D计数器421对删除的32位传送减1和对64位传送减2(只取)。
数据输出寄存器425用以缓冲输出的数据。数据输出保持寄存器426在数据由于一个后续的总线差错(A或B总线)必须重新驱动的情况下是需要的。在此情况,后续的数据(到较高地址)可能被接受并存入存储器16,18而较先前周期的数据为早,后者与总线差错相关连因为该数据传送必须在其初始传送之后两个周期才重复。(与存入不同,取出的数据不能被不按顺序接受)。同时,总线仲裁逻辑408对各周期连续地仲裁直到所有传送在总线30上已经启动和接受。对系统总线30和存储16,18的仲裁和数据传送与在(B)节中所描述者相同。
最后注意F1F0的设计允许在占线之前存储高达64字(几乎是4组64-字节存储传送)。对于存入,只要FIF0不满而且能够接受与存储相关的命令和数据的字,FIF0就连续地装入直到完成。因此,STC占线(命令)在每个存储命令执行之后就丢掉,这就释放单元153和允许S/370处理器85继续执行。假定在单元153中有一高的超高速缓存命中率,性能就会显著的改善,这是由于缓冲了的当量几乎有4个64-字节在FIF0里的存储或者32个1-4字节的存储。
假定STCI155是STCI配对155,155a的“驱动”方而STCI155a是其差错“检验”方。所以,只有STCI155驱动信号(控制,地址,数据)到总线结构30上,如图32B所示。其中信号是予定给总线A和B二者,STCI155驱动行示出为耦合于双方总线(通过在图32B中未示出的收发器B)。在STCI155a中,相对应的线并不耦合到总线结构30;只是耦合到比较逻辑402a-g。
比较逻辑402g比较从缓冲器420来的地址位27-6,从地址U/D计数器421来的地址位5-2,修改过的地址1和从奇偶生成器逻辑445来的奇偶检验位,和从寄存器443来的功能代码及其从STCI155a来的对应位。万一比较有错,逻辑402g使用差错信号来打断逻辑403和总线差错A和B线。
逻辑402e比较从数据输出寄存器425来的数据输出位及其从STCI155a来的对应位并施加错比较信号于逻辑403和总线差错A与B线。逻辑402a比较从FIF0逻辑401来的位及其从STCI155a来的对应位。与门446提供一差错信号给逻辑403如果STC有效信号被提升而STC占线信号在线440上活跃的话。(e)数据取操作
取命令按照上面描述的存命令通过寄存器416,417和FIF0400的同一途径。一个区别就是STC数据传送信号并不提升到STC总线逻辑408上直到知道数据从存储器162经过总线30接受在寄存器428或429中。取命令和STC有效信号被接受和存入寄存器416,命令和它的起始存储地址存在寄存器417,401中的STC总线逻辑在下一STC总线周期发出STC占线信号以防止超高速缓存控制器153送出另一命令直到STC占线取消。
这样,当取命令被收到时,STC占线信号由逻辑401维持直到取命令已充分执行,因为超高速缓存控制器153正在等待要接受的所取数据。(当存储周期期间当所有存储数据刚一从控制器153传送到FIF0400STC占线就被消除。)在取命令周期期间,STC占线必须维持直到任何的和所有的FIF0400中的存命令都已执行,然后取命令被执行。只有此时STC占线能被取消以允许传送下一个命令到STCI155。
在跟着把命令存在寄存器416和417后面的各周期中,命令和地址传送到寄存器442然后到FIF0400里。
当S/370取命令在FIF0400的最后阶段被接收(并且输出就绪为高一如上述),C/A和别的命令位就在逻辑401中解码。对应于经过解码的S/370命令位的S/88功能代码就放在寄存器443中以当仲裁周期要求被许可时施加于总线结构30。
紧接一个许可和后续的周期定义阶段和周期响应阶段,假定在周期响应阶段期间没有总线占线和总线差错出现,STCI155将进入数据阶段。前32位和DP,UDS与LDS等位一起从存储器16和伙伴的区域162的适当的存储单元接受到结构30的A,B总线上,并且分别锁进寄存器428,429中,而以S/88时钟开始总线30周期的后一半。假定服从双方状态或服从A状态起作用,在下一个S/88时钟周期(下一个总线30周期的开始)。数据将从寄存器428被开门到缓冲器430上对于64-位传送,后32位锁进寄存器428和429是和先前的数据并行地传送到缓冲器430的。一个奇偶性生成器431把奇检验加到储存在430中的数据字上。这些数据和奇偶检验位和收到的UDS,IDS和DP位一起,经过总线435和436施用于逻辑402c。逻辑402c用配对的STCI155a中产生的对应的各个位与这些位比较。缓冲器430此时将为第一个数据字开门,加上奇偶性,到缓冲器432上,缓冲器432在下一个STC总线周期中经过STC总线157的总线406传送到超高速缓存控制器153而被驱动。缓冲器432以S/370的时钟计时,后者与S/88时钟同步使得STC总线周期的开始发生在S/88时钟启动之后。由于已经为S/88和S/370两时钟定义了同一的62.5毫微秒周期,这允许从总线30到STC总线管道输送连续的读。这样,在优选的实施例中,对每个总线30的125毫微秒周期执行两个STCI155周期。
假定对STCI156连续的许可,第二个数据阶段将遵照上面描述的第一个数据阶段(假定没有总线差错等等)。假定64位传送,此时数据将被记录到寄存器428和429中,这与数据从缓冲器428(或429在服从B状态)中记录到缓冲器430并行进行。缓冲器430数据于是将施用后32位到缓冲器432供传送到超高速缓存控制器153,如上所述。所以可以看到,在优选的实施例中连续64-位传送是如何运用本维护管道传送的数据流。
如果在数据阶段期间发生了快速ECC差错或数据错误比较或奇偶性错误,STC数据无效信号由逻辑402c送到线433上,和在STC地址/数据总线406上的数据并行进行。再者,如果后续的数据在数据已宣布无效的周期之后的周期中到达,总线差错状态将由STCI SBI逻辑强加在跟在后面的数据周期的A和B两总线上。这就保证数据将在两个周期之后重新驱动(即,在报告出总线差错之后的一个周期),因此由按顺序传送取出的数据维护了数据的完整性和在STC总线上的功能性。在A和B两总线上驱动总线差错等价于存储器16报告一个ECC差错状态与一个“真的”总线差错相对,这就不引起在系统总线30上沿着所有控制器的总线服从逻辑中的改变。
同样地,用于比较进入的数据和经过总线435,436检验奇偶性的同一逻辑402c也用于存储操作以检验在402e中的数据输出比较的结果,系由实行一个从系统总线30通过寄存器428或429的“返回”数据比较来检验。这将有助于较快地认定板101上的收发器13的问题并将把板损坏逻辑403置在存储器上,如果在下一个总线周期中没有给出一个错误比较和一个总线差错。此外,所有比较器输出402a-g(它们对取和存操作的有效的错误比较上产生故障情况)将在A,B两总线上生成总线差错信号,这样就保证了在先前的周期中的数据传送重复了,而在先前周期中的任何周期定义阶段防止了。
与存入不同,对取出则先前在FIF0中的所有命令必须被执行,并且在本处理单元面前的当前的取操作能够降下STC忙的那条线440,并接受别的命令。超高速缓存控制器153必须在另一个存储命令能够发出之前为取命令接受数据。
可用的读/写周期类型的定义在图36A-D中示出,其中:
UU=较高字的较高字节
UM=中等字的较高字节
LM=中等字的较低字节
LL=较低字的较低字节
MEM16=16-位存储周期
MEM32=32-位存储周期
MEM64=64-位存储周期
LW=长字(32位)
UDS=较高数据闸门
LDS=较低数据闸门
64位与操作在单元155的优选实施例中是不可用的,由于重点是放在硬件最小化上,64×36FIF0是足够支持从S/370的32位存储传送的。只使用32位写的一个性能限制乃是因为在交叉存取的存储器16中每个S/88存储器板“叶”是72位长(64位加8个ECC位),每个叶,一旦进行了写访问,在三个附加的(125毫微秒)周期内这片叶子一直处于忙状态。这就意味着同一叶在连续写时每5个周期(625毫微秒)只能被访问一次。因为所有S/37032-位写定义为连续地址,这就意味着在此同一个64-位边界内的连续传送不能比每5个周期(625毫微秒)发出得更快,而在不同的64位边界上可以在连续的125毫微秒周期中发出(假定仲裁得胜)。
64位读周期总是得到支持的,在这种情况下只要连续的读操作确实不访问同一个叶,它们能在连续的周期中被执行。不能的话,它们能够每隔两个周期(250毫微秒)执行一次。因为对于64位的读操作,每62.5毫微秒从总线30接受到各个32位,(即,两倍每125毫微秒总线30周期),STC总线和总线30周期时间互相匹配使得数据在收到后能够从系统总线30管道式地传送到STC总线157。两个额外的缓冲级(缓冲器430和432)是用来和寄存器428和429一起支持各周期的正确同步并且允许各个数据字节的奇偶性生成。
各个27位地址和各个4位功能代码在总线30周期定义阶段期间和伴随的奇偶位一起送出。32位数据在总线30数据阶段期间也携带与其相关的奇偶位。总线30上的基本125毫微秒周期允许正规的16和32位传送,以及在125毫微秒窗口内的64位读传送。作为选择项,可以用附加的硬件来支持在STCI155内的连续64位写传送。S/370 I/0支持(图37)
图37图解地说明S/88硬件的观和应用代码,后者是用来支持S/370 I/O功能的。硬件设备601,602,615-619,621和623-625。软件(或固件)子程序为603-614,620,622和626。
这些部件的功能现在加以描述。块606是由块606到块614组成的S/88应用代码的主控制。这一组块称为EXEC370执行与S/370的外部设备,服务,配置,操作员控制台等等的仿真和支持有关的所有应用代码功能。
块603是运行在S/370微处理器上的微代码。它支持S/370的CPU功能。块603和块606之间的设定使它们能够彼此传递关于S/370I/O操作的启动及完成和S/370I/O设备与通道状态信息的要求和响应。它还使块606能够要求块603执行特殊的S/370CPU功能。块605是S/370的存储器,它可以被块603和块606直接访问。块606通过S/88的数据文件块602中所包含的数据提供正常的S/370配置。
块604是一单独的运行的任务,通过S/88终端设备这个任务提供S/370操作只控制面板。该任务能够在任何时候开始和停止而不中断S/370进程的逻辑功能。块607是EXEC370的一部分并在S/370过程和块604之间提供接口仿真功能。
块601是一组S/88数据“补钉文件”,包括为调试S/370及其BCU156的目的而已经专门编写好的S/370目标代码。块604提供一个调试面板。这个块是可选件,并可把它装入到上述“补钉文件”之一的605号块中去。
块608-1由负责仿真S/370通道的代码组成。它执行取出S/370CCW,数据从块605的出入运动,向块603报告S/370I/O中断信息,和正常控制单元代码仿真器的选择。可能有多于一个的S/370通道(例如,608-2),但是使用同一代码。
块609-1是S/370控制单元仿真代码。系统370有许多不同类型的控制单元,即,DASD控制器,磁带控制器,通讯控制器,等等。S/370控制器功能在块609-1和特殊的设备仿真器即块610至614之间划分。块609-1的主要用途是地址分离功能,虽然别的控制单元特定功能可能也归属于块609-1。所以有不止一个这样类型的块(例如,609-2),即,DASD控制器仿真器,通讯控制器仿真器,等等,但是与那些得到支持的S/370控制单元并没有一一对应的关系。
块610表示为仿真一个S/370控制台所必要的代码。块611表示为仿真S/370终端所必要的代码。块612表示为仿真S/370输入机所必要的代码。这是一个虚输入设备,仿照标准的VM输入机。它是为从别的来源通常是磁带或软盘生成的顺序文件的输入而提供的。
块613表示为仿真S/370打印机所必要的代码。可以驱动真正的S/88打印机,或者把S/370数据写入S/88文件供稍后作假机打印。块614表示为仿真S/370磁盘所必要的代码。两种格式:计数、键和数据与固定块由两个不同的代码集支持。
块615表示S/88终端,通常是S/88控制台输出设备。系统/88控制台除了把消息记入磁盘上的日志文件以外,还显示S/88操作员消息和S/370操作员消息。对S/370来说,这个Syslem/88控制台就象它的3278或3279型终端一样。
块616表示S/88终端。块617表示在S/88磁盘上的S/88顺序数据文件。块618表示在S/88打印机或在S/88磁盘上的顺序数据文件。块619表示在S/88磁盘上的S/88数据文件。块620是将要读装在S/88磁带设备上的系统/370磁带的代码,并且把S/88磁带设备格式化为块617,使之看起来就象原装的S/370磁带。块621表示S/88的磁带驱动器,它装有安装好的已经写过的S/370磁带。
框622是一种程序,它将文件从个人计算机读入S/88,并以在S/370系统上产生时的原有形式编入框617。
框623是一个用于向S/88或系统/370发送数据和从S/88及系统/370接收数据的个人计算机。框624是一个S/370系统。框625代表一个S/88假脱机打印机。框626是一个程序,它将S/88文件编入仿真系统370直接存取存储器装置(DASD)。这是S/88单独运行的任务,它将该文件格式化为所要求的能支持S/370直接存取存储器设备(DASD)的任何形式。
S/370I/O操作和固件概述
现提供系统/370I/O的一个简化、通用图。S/370结构提供几类I/O指令,程序可检验的状态码(CC)型式和程序中断机构。从概念上看,I/O指令的目标在于I/O通道,它指导并控制I/O操作和其它CPU处理并行地工作,并且当I/O指令被执行时(通过状态码)和/或当I/O操作完成时(通过程序中断)对CPU报告其状态。
将S/370指令、状态码、中断和I/O装置(DASD、磁带、终端设备等)进行紧密地设计。然而I/O通道的设计可松散些以提供设计宽容度,这里有许多不同的实施方案。
容错系统370改进的广义图是一个S/370CPU(具有定制固件的芯片组)和一个由S/88CPU时间芯片和操作系统(OS)组成的“伪I/O通道,再加上能够对S/370I/O设备进行仿真和对系统复合体实施整体控制的特殊固体和应用级软件(EXEC370)。这个复合体的S/88部分设有容错CPU、OS、I/O装置,电源组、总线和存储器;通过硬制冗余和加入的比较逻辑将S/370做成可容错的。
所需要的定制固件(即微代码)分为两组:
a.在S/88处理器62上运行的S/88总线控制器(BCU)驱动器固件(ETIO)、用于初始化和BCU/DMAC(直接存储器存取控制器)硬件控制的服务程序、DMAD中断服务和状态及错误处理。
b. S/370(处理器85)微代码-I/O指令、I/O中断处理、和一些特殊控制,比如禁止(invocoution)复位、初始程序装入、停止等。
为帮助了解各种固件操作的前后关系,让我们来看一看发生在一个典型I/O操作中的事件的下面简化序列:S/370写一个80字节信息到一个仿真S/370 3278显示终端。
在此例中假设初始化已经完成,S/370和S/88正常地工作着,没有任何其它S/370I/O操作在进行,请参看图43和图19A-C。采用上面参考图20描述的“非耦合”机构来完成在PE62和BCU156的部件之间的每个数据/命令传送。图43的流程图表示这种典型的起动I/O操作。
a.S/370处理器85遇到一个起动I/O(SIO)指令(在该最佳实施方案中将芯片组150中的所有I/O指令都进行了微编码)。
b.调用SIO的定制固件;它传送几个参数到固定的信箱区单元188(在S/370主存器的输入输出转接器(IOA)里),对BCU156发出一个服务请求(PU-BCU请求),并且等待回答。
c. BCU硬件检测该请求,并产生一个指令去从S/370IOA固定单元中读16字节信箱,然后通过经BCU-PUACK复位该请求来回答S/370处理器85(其意义是“请求已被服务过了”)。
d.在S/370处理器85中,将SIO固件释放,以结束该SIO指令,并继续处理下一个程序指令。
e.与事件“d”同时进行,作为“c”的一个结果,S/370硬件将16字节的信箱数据经总线170传送到转接器154中的BCU接口缓存器259。
f.当该数据被缓存时(在4字节的字区中),BCU硬件对DMAC209(通道0)重复地发信号,将该信箱数据(以4字节大小的块为单位)传送到在局部存储器210中的工作队列(WORK QUEUE)块里。
g.当该16字节传送完成时,DMAC209对S/88处理器62提供一个中断〔图43中的通知(NOTIFY)〕,然后通过装入下一个连接表项目自己准备将要的信箱操作。这个中断是处理器62的8个DMAC中断之一,即一个“通常”DMAC通道0中断。
h.当S/88接受该DMAC中断时(由于屏蔽可能有延迟),定制固件服务程序(在ETIO中)执行;它检查DMAC209的状态,通过参考所述连接表找到刚刚接收的工作队列块,使该块排队,以传到EXEC370应用程序。
i. EXEC370检查该工作队列,使该工作队列块离队,建立一个在该工作队列块的数据请求,调用一个固件程序去取得送给3278终端的80个字节的数据。
j.该固件准备并起动DMAC209(通道1),然后对BCU硬件发出一个命令,以便经转接器154、总线170和存储控制器155从一个具体的S/370存储器单元开始读80个字节。
k. BCU硬件156、转接器154和DMAC209传送该80个字节到工作队列块,DMAC209对S/88提供一个中断;这与上述的“f”和“g”中的操作相似。这个中断,属“正常”DMAC通道1中断,是上述的8个DMAC中断之一。
l.固件中断服务程序再次检查DMAC的状态,并使对于EXEC370的工作队列块指针入队。
m. EXEC370做任何必要的数据转换,然后利用S/88OS的服务将该数据写到仿真3278终端。过一些时间,它收到操作结束(正常或错误)的通知,然后它在该工作队列区建立一个适当的S/370中断信息,其中包括状态,并再调动一个固件程序将它写到S/370信息队列。
n.该固件准备并起动DMAC(通道3),然后发一个命令到BCU硬件将16字节写到S/370信息队列中。除了在比例中,在该操作的终了,转接器154在S/370处理器85中产生一个微码级的异常中断之外,其它方面与反向信箱读出是相似的(也经受一个屏蔽延迟)。正如上面在“g”和“k”中一样,DMAC209也中断(见图43中的NOTIFY)S/88处理器62。这个中断,即一个“正常”DMAC通道3中断,是8个DMAC中断之一。
o.在S/370处理器85中,定制固件处理该异常,并且必须检验有延迟可能性的通道屏蔽;如果被屏蔽了,不能把中断提供给运行的程序,将基本数据从该信息队列块189移到悬置中断队列;当下一次中断启动该通道时,另一个定制固件处理器将为之服务。如果没有屏蔽,这个固件立即将S/370的上下文关系转换到该程序的中断子程序。
改进的FT系统的广义视图导出了S/88作为附属I/O处理器角色的概念,它是一个I/O处理器或是S/370的伪通道。然而,在实际上,处理器之间的所有基本通讯都必须从S/88开始(由于设计的原因)。同时,S/88经EXEC370能访问所有的S/370存储器和微码空间。而当该反转不为真时,S/370处理器85绝不能访问S/88存储器,甚至偶然的也不成。于是,比较真实的图象是S/370作为S/88的从属,但具有一个通常单独S/370与S/370I/O一起的内部映象。该S/370并不知道S/88的存在。
但因为S/370程序运行对S/88是异步的,并且必须不被阻止,S/370I/O指令必须能启动一个动作,这种功能是由PU-BCU请求线256a提供的,它具有一个唯一的意思:S/370对于S/88信息等待具有一个高优先权(通常一个I/O指令)。这个服务要求的优先性质正是自动信箱方案和DMAC通道0连接表编程的原因。
DMAC209是BCU硬件设计的整体部分。它基本上是由S/88固件控制和初始化的,且数据传送是由BCU逻辑步进的,BCU逻辑驱动四条请求REQ输入线263a-d,每个通道用一个。此外,当每个信箱传送完成时,外部BCU逻辑启动信道0PCL线257a,使DMAC209对S/88处理器62提供一个中断请求。
在S/370和S/88之间有四种基本的数据传输操作:
1.读信箱2.读数据3.写数据4.写信息Q 大   小16字节1-4096字节1-4096字节16字节  转接器154信道0011   DMAC209通道0123     DMAC操作种类继续连接表起停可抢先起停可抢先起停
DMAC209的初始化和编程完全是标准的,最好与MC68450结构兼容,简而言之:
所有四个通道:16位字传送大小;REQ线控制传送;设备(BCU数据缓存器)地址不计数。
中断开启;不中止的周期偷用;设备带有应答/隐寻址/单寻址型;16位设备端口;PCL二状态输入。
除上面之外还有:
设备到存储器(存储器210)的传送;连接数组链;PCL=带有中断的状态输入。
CH1:设备到存储器(存储器210)传送;无任何链接。
CH2和3:存储器(存储器210)到设备的传送;无链接。
DMAC“认为”设备具有16位数据,但外部逻辑使其做32位传送。在CHO(DMAC209的通道0)中所用的连接的数组链暗指连接表存在,并且通过ETIO初始化程序来建立它。一旦启动了CHO,只有因错误状态或遇到连接表中的最后一个有效项目才停止。在通常操作中,每次发生对S/88的中断,DMAC209完成一个信箱读,而且该固件监视并且实时地补填连接表;所以绝不会达到该表的最后一个有效项目,且CHO继续运行(空闲)。
每个DMAC通道设有两个中断向量寄存器NIV、EIV(图18),一个用于操作的正常结束,介另一个用于检出错误时的强制结束。现在的改进是运用总共8个向量,采用在微码存储器174中的八个独立的ETIO中断程序。此外,通道0的正常中断具有两个可能的意思:PCL引起的“信箱被接收”,和“由于连接表的结束而产生的不太寻常的通道停止”。通过检查DMAC状态位,该中断处理器区分它们。
S/88固件还提供四个服务项目,用于EXEC370应用程序:初始化,上面讨论的三个基本数据传输的启动——数据读、数据写和信息Q写。
通常在加电以后很快调用ETIO一初始化入口,但也能被用作为错误恢复尝试的重新初始化。它复位BCU硬件和DMAC209,然后以结构和控制值把所有四个通道中的DMAC寄存器置初值。它还建立必要的连接表并启动通道0,使DMAC209自动装入第一连接表参数组,然后等待在线263a上来自BCU硬件的请求传输。
调用其它三个服务项目以启动DMAC通道1(数据读),2(数据写),3(信息Q写)。调用程序(EXEC370)对预先置有数据地址的工作队列块提供一个指针,计数等等。这些程序或者立即启动DMAC209和BCU硬件,或者被请求的DMAC信道是忙碌时排队该操作。(图41E中所示的单独的工作未决队列供这三个通道中的每一个使用)。一旦所要求的服务被启动或排队,将控制返回到该调用程序,且该中断处理器继续操作到完成。
第三,虽小但很重要,S/88定制固件的区域是S/88OS(操作系统)的改进,以拦截和定向对定制处理器的8个DMAC中断,但对于S/88OS是透明的。这包含对操作系统中第6级(通常被用作电源故障的自动向量入口)的标准结构的MC68020向量表的修改,且将该定制中断处理程序放到该操作系统中。这是一个最佳实施方案,然而在下面将看到涉及中断的初始化程序的部分中,在BCU156中可设置一个逻辑,以把一个向量放到局部总线223,消除向量修改的需要。
所有该最佳实施方案的S/88固件都是以MC68020汇编语言写的,所以不能称作微编码。它被考虑成固件是由于它的功能特性。
S/370处理器85所要求的定制固件有四类:
1.去到S/88伪通道的微码I/O指令;
2.处理来自S/88的异步信息,包括I/O中断;
3.维护所有(仿真的)S/370I/O设备的结构数据和状态;
4.实现用户手动操作的子集。
将这个特殊固件整个写到S/370微码中,在任何可能之处它可使用预存的功能子程序。
在S/370中有10个I/O类指令,将结合图44A-1的描述进行详细地讨论。
CLRCH-清通道(只有通道OP)
CLRIO-清I/O
  HDV-停止设备
  HIO-停I/O
  RIO-恢复I/O
  SIO-超动I/O
  SIO F-快速起动I/O
STIDC-存储通道ID(只有通道操作)
  TCH-测试通道(只有通道操作)
  TIO-测试I/O
上述每个指令全都是以微码型式执行的,从而经信箱机构将所有重要信息传送给在S/88中的EXEC370,同时又保持了与S/370体系结构的一致性。
在适配器154中的几个不同的硬件状态导致启动“适配器注意”请求,它依次是在S/370处理器85中微码级“强制异常”的几种可能原因之一。通过微码的这种异常的服务在S/370指令之间发生(如果PE85处在等待状态则立即进行),“适配器注意”的多数共同原因是,PE85收到一种信息,该信息从I/O伪通道S/88到S/370主存器的IOA区的固定信息区189。
对于“适配器注意”的情况,修改了现在的S/370微码异常处理程序。该程序(code)检测适配器154的状态,以确定该请求之原因,并且只修改“Q不空”(这意味着接收信息)的处理;其它使之返回到现存的未修改程序处理。
被定义的接收信息的种类是:
0000:       不操作。
0001RESET:  调用现在的S/370程序的复位子程
             序。
0002CLEAR
RESET:      调用现有S/370清除复位子程序。
0003HALT:   停止S/370程序的执行,接通
             ISTEP方式。
0004STEP:   指令单步;执行一个指令,然后停止。
0005RUN:    复位ISTEP方式;恢复程序的执行。
0006LPSW:   执行S/370“装入PSW”功能,
             运用信息中提供的PSW。脱离停机状
             态。
0007SMSG:   状态信息——更新一个或多个所配置的
             I/O设备的在局部(IOA)设备状
             态表中的状态位。
0008IMSG:   中断信息——根据信道屏蔽状态或者排
             队或者立即提供一个S/370I/O
             中断。
上述0001-0006信息类是准对状态控制的S/370的手工操作,它来自于(仿真)S/370系统控制台的用户输入。当错误恢复或同步需要时,通过EXEC370也可直接强制上述信息类型0001~0006。信息类0007用于通知S/370关于I/O设备状态的异步变化,比如掉电,联机/脱机变化,设备检测错误等等。也可将它扩展为用于从S/88到S/370的一般通讯目的。信息类0008是传递设施,用于对S/370报告I/O操作结束状态——或者是正常的或者是因错误的结束状态。它将总是导致最终的程序中断和在S/370中设备状态表的修改。
ETIO和EXEC370的功能、接口、协议和指令流的细节将在下面讨论。
1.引言
图38表示本改进的最佳实施方案的微码设计。在S/370处理单元(每个处理部件如85)中运行的程序保持在控制存储器171中,并在被PE85执行时用来解释S/370指令如图中所示,具体地设计起动I/O、中断处理、操作员功能、机器检查和初始微程序装入/程序装入(IML/IPL)等微码指令,以便与S/88微码相接。该接口包括接口逻辑81的公共硬件设施,例如局部存储210、S/370超高速缓存器340,和对处理器85和62二者的微码具有中断能力的实存空间162。在该S/88程序中,S/370微码驱动程序包括CCW转换、中断处理程序、错误处理程序、IML/IPL和与S/88应用接口(EXEC/370)及S/88OS相接的同步程序。
容错处理器62执行所有的I/O、诊断、故障隔离、IPL/IML,和系统的同步。不能将这个系统看作协处理器系统。因为S/370程序只是来自用户观点执行的程序。该系统的管理者通过S/88容错操作系统可控制该系统属性。S/88OS和应用EXEC/370的基本功能是带有多370通道外部特性的I/O转换。通过S/88OS处理所有的系统错误和恢复功能及动态资源分配功能。原来由S/370OS处理的机器检验和操作多功能,现在交给了S/88OS,所以可以用容错方式处理这些功能。
图39表示一个S/370I/O命令的执行,在此例中是一个起动I/O命令。简要地示出了S/370指令、S/370微码、耦合硬件(PE85-PE62)、耦合微码ETIO(在PE62上执行的)和S/88程序EXEC370所采取的动作,最后的动作是在S/88处理器PE62上执行S/370SIO。
图40是一个简化图,简要地表示了对于EXEC370的改进系统的某些部件和功能,和在SIO执行中所用的微码驱动器,与之一起还有控制流程、数据流、信号和硬件/程序分割。
2. ETIO/EXEC370程序接口——图41A-H,42
在这部分中所用3下列术语
EXEC370——与S/370外部设备、服务、配置、操作员控制台等的仿真和支援有关的在PE62上运行的所有S/88软件,存储在微码存储器174中。可把较少使用的EXEC370程序存储在超高速缓存器173中。
S/370微码——该微码运行在支援S/370处理器操作的S/370处理器85中,存储在存储器171。
ETIO——EXEC370和BCU156硬件之间的微码介面,保持在存储器174中。
S/370PE85微码和EXEC370通过“协议”彼此通讯,如图41A所示。PE85微码对EXEC370发消息请求执行I/O等功能,EXEC370则发出表示I/O功能完成的消息,关于I/O设备和通道状态变化的消息、以及请求PE85微码执行具体的S/370CPU功能的消息。通过硬件将这些消息(以后将详细描述)在PE85微码和EXEC370之间传送,其硬件包括:超高速缓存控制器153、转接器154、BCU和它的DMAC209等。ETIO对EXEC370也可用这种信息传送服务。
现在来描述ETIO和EXEC370之间的界面以及PE85微码和EXEC370之间的协议。
在EXEC370,由S/88执行的S/370外部支撑软件和运行在PE62中的BCU微码驱动器(ETIO)之间的界面,由驻留在存储器210中的一组队列和缓存器,一个事件标识(ID)、一个EXBUSY变量和一个子程序调用序列组成。该子程序的调用界面启动S/88和S/370之间的数据传送操作,并在S/88重新引导时初始化DMAC209和BCU156。事件ID界面(对S/88中断)当把工作加入队列时通知EXEC370。
在存储器210中,有16个4KB块500(图41C)。14个(500-0到500-13)被用作4KB块缓存器。余下的两个分到32个256字节的块501-0到501-31。
将4个块501-0到501-3用作硬件通讯,另一个501-4用作队列(QS),其它变量对EXEC370和ETIO是共同的。其余的27个用作为工作队列缓存器(WQB)501-5到501-31。在等价与块501-0和501-1的地址空间中,BCU156命令(PE62执行的)被指定有256个字节,DMAC寄存器地址被指定有256个字节,供PE62访问,如上面描述的BCU156之操作。27个工作排队缓存器的每个都保存着关于一项具体任务或服务请求的数据。26个WOB被用来服务于PE85微码启动请求。其余的WOB(EXWOB)501-31用于为来自S/88并送到PE85微码去的请求服务;它绝不会出现在图23E的空闲的Q上。通过一个基本地址和一个存储在DMAC209中的偏移值对每个WQB进行寻址。
图41D的每个WQB包括一个16字节邮件块505、一个16字节参数块506、和224字节与设备相关的工作区507。该邮件块505包含在EXEC370和PE85微码间传送的数据。它的内容对整个ETIO界面是透明的。该参数块506包含有在ETIO和EXEC370之间传送的参量。通常是对于局部存储器210和主存器162之间的数据传送。该工作区507是属EXEC370所有。它包括关于被请求操作的进程、现在S/370设备状态、可能的用户数据、S/88设备的种类和对其它EXEC370控制块的指针信息,以及错误发生信息等等。
该邮件块505包括4个字段,该4个字段含有在PE85微码和EXEC370之间传送的S/370I/O信息:
OP-这一字段包括来自EXEC370或PE85微码的请求。
CVA-16位通道单元地址。
CAW-当有关的I/O指令发出时,在S/370存储器
    162中的16进制单元48中的32位S/370通
    道地址字。
CCW-由上述CAW寻址的S/370通道命令字。当
    EXEC370返回一个中断指示时,这个字段含有
    CSW、S/370通道状态字。
当EXEC370请求在存储器210和主存器162之间进行数据传送时,该参量块156包括6个参数。
1. req——ETIO请求字段:
   0.空操作
   1.将PE85消息队列189中的内容写入存储器162
     中,然后对线256a上的PU请求发一个BCU。
   2.从S/370存储器读数据。
   3.将数据写入S/370存储器。
2. ret——由“req”字段所作请求的结果。由EXEC
          370保证该字段的初值为0。如果返回为非零,
          则ETIO指有某种类型的错误。
3. COUNT——被传输的字节的数目。
4. S/370ADDR——在S/370存储器中数据区的开
                始单元。这不一定是CCW地址字
                段值。
5. Key——这个16位字段将包含下面的位模式:
          PPKKKK1000000000
            这里PP(优先权)=00,而KKKK=适当
            的S/370存储器保护键。
Butt Addr——在存储器210中数据区的起始单元。它可以
             在一个4K缓冲器内部或一个WQB。
             EXEC370将确保下面的关系:
(S/370ADDR模4)=(Buff Addr 模4)
EXEC370用排队来保持WQB。该队列通讯区501-4是256个字节长,并保持在存储器210中有400(16进制)偏移。图41E表示在ETIO和EXEC370之间定义的队列,用于保持对WQB的指针入口:
free Q 510    保存对现在没有采用的WQB的指针。
 (空队列)
Work Q 511    保存对正等待EXEC370服务的WQB
(工作队列)    的指针。
S/3701Q512    保存对正等待从EXEC370到PE85
              传送信息的WQB的指针。
S/3702Q513    保存对正等待从超高速缓存控制器153到
              S/88传送数据的WQB的指针。
S/3703Q514    保存对正等待从S/88到超高速缓存控制
              器153传输数据的WQB的指针。
S/88Q515      保存对ETIO服务完成之后的WQB的指
              针。
图41E表示通过该排队的WQB的路径。在S/88重新引导时由EXEC370对所有队列进行初始化。在free Q上保存空WQB。当需要去填充连接表516时ETIO将它们从free Q移出。DMAC209经连链表516将S/370邮箱条目从存储器162的邮箱区188放入空WQB的邮件区。已经填入链表中的WQB通过ETIO移到Work Q 511。当ETIO放置一个(或多个)WQB到Work Q 511上并且EXEC370不处在忙碌状态时,ETIO通知EX370事件识别(ID)。EXEC370在它服务该请求之前从Work Q移出该WQB。
在该请求的处理过程中,数据可能必须在超高速缓存控制器153和缓存器(WQB或区缓存器)之间传送,或者可能不得不向PE85微码程序发送一个消息。ETIO对EXEC370提供这种服务。EXEC370调用ETIO,起动适当的BCU156操作,或者如果硬件资源正在工作着,则将该WQB放到适当的S/370Q上。这三种服务每种(对S/370发送信息,对S/370传送数据和从S/370传输数据)具有它们自己的队列512、513、514。ETIO程序(code)将WQB加到S/370诸队列之一中,同时放到EXEC370执行轨道上。当该I/O服务完成时,ETIO中断程序将该WQB放到S88Q515上;并且如果EXEC370不是在忙着,通知EX370事件ID。
图42表示通过与EXEC370和ETIO之间的界面、界面硬件89和S/370微码一起排队的WQB的运动。当原有的工作请求全部完成时,数据传输完成时,I/O中断(如果有)被送到PE85;且EXEC370将WQB返回到free Q。然后EXEC370通过先检查S88Q515,然后查Work Q 511来获得它的下一项任务。如果二者都是空的,EXEC370将EXBUSY变量置零且等待要被通知的EX370事件。EXEC370当它被通知时在它开始处理之前将EXBUSY置1。
如图41F所示,所有的排列,EX370事件识别和EXBUSY变量保持在存储器210的队列公用区501-4中。如图41G所示,每个队列在性质上是循环的(circnlar),带有两个索引型的指针:填索引517和空索引518。填索引517指出要填的下一个排队入口,而空索引518指示要排空的下一个入口。如果空的等于填的索引,则该队列是空的。所有这6个队列绝不会溢出,因为每一个具有32个入口,而只有27个WQB。
每个队列还包括:
qid      标识这个队列。
QSIZE    在该队列中的表数目数(n)。
Q(i)     地址入口,指向队列中的WQB。
硬件通讯区包括1024个字节。BCU通讯区采用512个字节地址空间。链表516采用480个字节。将32个字节保留作其它硬件通讯之用。DMAC209运用链表516(图41H),从存储器162中的邮箱区188取来邮件块条目。来自free Q510的WQB被用来填充链表516中的条目。每个链表条目包含10个字节,并标识出在存储器210中的WQB的地址,在这里放入数据、被传送的数据的字节计数(16),和该表中下一个连接条目的地址。当DMAC209(通道0)到达链表中下一个连接地址为零的条目时,它就中断S/88。该DMAC209(通道0)在表中的现在位置不论什么时候对于软件都是可得到的。
除了它的中断入口指针之外,ETIO具有两个外部可调用的入口指不:
etio  init
etio  (Wbn)
每当S/88重新引导时,EXEC370调用一项etioinit,与此同时EXEC进行初始化。此时这些队列已被初始化了,且事件识别字段将是有效的。PE85微码还不在操作,然而它可以是处在IML过程中(初始微程序装入)。
当希望从S/370或到S/370传输数据或信息时,EXEC370调用etio(Wbn)。
参数Wbn是一个识别包含服务请求的WQB的两字节整型工作队列缓存器数目。Wbn是一个索引值,范围从0到27。该服务请求用参数区中的req字段进行识别。该req字段值是:1=将这个邮件块的内容写入在存储器162中的S/370消息队列189,然后对PU请求发一个BCU;2=将数据从S/370存储器162中读入规定的存储器210区域;而3=将数据从所规定的存储器210区写入S/370存储器。
如果所请求的I/O功能不能被立即起动,该子程序ETIO将这个WQB在S/3701Q,S/3702Q或S/3703Q上排队。当前面的操作结束时,ETIO中断程序将从适当的S/370Q中下一个WQB出队。
如果req字段包括一个1,在该邮件块条目到达存储器162的S/370消息队列区189中之前将不通知给PE86微码(比如通过中断通知)。
如果S/370消息队列是满的,则在参数块ret字段中的错误将对EXEC370标明出了问题。如果需要,EXEC370能提供后备队列支援。
3. EXEC370、S/370微码协议
EXEC370和S/370微码之间的通讯需要一个设备状态表(DST),对于S/370存储器162中的每个I/O设备有一个项目。EXEC370和S/370微码经过来回传送的16字节消息(见图41D的邮件区505)彼此进行通讯。这里有一个队列。以FIF0的顺序保存信息,用于每一端的接收器。这里还有一个通知机构(PU到BCU和BCU到PU线)。在邮件块505中,16位S/370操作码字段“OP”包括一个来自EXEC370或S/370微码的请求或回答。该16位通道部件地址(CVA)是S/370I/O指令的操作地址。CAW是当I/O指令发出时在S/370存储器162中的16进制单元48中的一个32位内容。通过上述CAW对8字节的CCW寻址。当EXEC370返回一个中断指示时,这个字段包含CSW。当它引起I/O中断时,PE85将该CSW存储在S/370十六进制单元40中。该CUA字段将不改变。
当遇到要由EXEC370部分地或完全地处理的S/370指令时,通过S/370微码将操作信息送给EXEC370。该操作信息包括上述的关于图41D的邮件块505的信息。
送给S/370微码的EXEC370消息包括:
1.复位(RESET)消息(OP=1),请求S/370微码处理S/370复位。
2.清除复位(CLEAR RESET)消息,(OP=2)请求S/370复位和清除存储器。
3.停机(HALT)消息,请求S/370微码停止取S/370指令并等待后面的指令。该停机信息包括OP字段=3。
4.步进消息(OP=4),要求S/370微码取出并执行一个S/370指令,然后进入停机方式。
5.运行(RUN)消息(OP=5),要求S/370微码进入它的取出和执行S/370指令的正常方式。
6.LPSW消息(OP=6)要求S/370微码执行S/370LPSW(装入程序状态字)指令,该指令采用该LPSW消息的地址字段中规定的地址。
7.SMSG消息(OP=7)表示一个或多个配置的S/370I/O设备的状态改变。
8.IOINTR消息(OP=8)指示一个I/O操作的完成。如果该通道没有被屏蔽掉,S/370微码将发出一个I/O中断。如果该通道被屏蔽,S/370微码将CSW保存在设备状态表中,并将该设备状态置为01(存储CSW)。IOINTR信息还包括CUA和NC(放在DSTCUA中)下一个字段。
从S/88到超高速缓存控制器153的两个消息FETCH和STORE是逻辑功能而不是消息。对于CNT和ADDRESS字段允许其为偶数或奇数值是必要的。这些字段是:
BUF——2个字节    存储器210中缓存器地址
CNT——2个字节    字节计数ADDR——4个字节    S/370存储器地址W/Key
S/370微码维护一个内含有关每个可寻址的S/370设备状态的信息。主要的信息是:
设备状态——在一个TIO、SIO等之后,允许立即设置CR(S/370的状态寄存器)。
设备下一个状态——当取得一个I/O中断时,使用该下一个状态。
设备的通道状态字(CSW)——用以标志370I/O中断。
DST(CUA)中的四种不同的设备状态对于370设备是可行的:
00  设备就绪
01  设备未就绪,存贮CSW
10  设备忙
11  设备不能操作
一个S/370设备完成一个I/O操作时,一个CSW由该通道发送给CPU。如果该通道被屏蔽,则CPU不接受这个CSW。
在本申请中,如果该通道被屏蔽,S/370微码保留这个CSW并将DST(CUA)状态置为01。下一个TIO或SIO将这个被保留的CSW得以存贮并将状态码01(CSW被存贮)放在CR内。当S/370微码被初始化时,假定所有的设备都不能操作。S/88将为每个被支持的设备发送一个“在线”(ONLINE)消息。该设备由它的控制单元地址(CUA)识别。
4. S/370微码和EXE370之间的指令流
在PE85执行S/370程序指令串时,它将不时地碰上一个I/O指令,在本申请中这将由S/88处理器62和有关硬件、固件以及软件来执行。图44A~L(以及上面提到的图43)示出了用以执行这些S/370I/O指令的微码程序流。BCU156(和适配器154)是主要的硬件耦合机构,用以促使S/88硬件执行最后的S/370I/O指令。在BCU156内,DMAC209是主要的“交通警察”,用以直接指挥操作和数据流。DMAC209的通道0接收来自S/370的I/O命令,通道1管理来自S/370的数据流,通道2管理去S/370的数据流,通道3向S/370发送中断(和其它)消息。BCU156中的本地存贮器210形成S/370和S/88之间的通信区。
本地总线223/247将S/88处理器62连接到DMAC209和本地存贮器210上,还经过BCU156和适配器154中的加速硬件将DMAC209和存贮器210接到S/370上。
S/370I/O指令被分派到S/370微码例行程序用以在S/370内部进行管理,而S/88应用程序EXEC370(和其有关的S/88ETIO微码一起)影响最后的I/O执行。适配器154和BCU156在S/370和S/88代码之间形成硬件连接。起动I/O微码例行程序有一个表DST,该表始终监视每个设备的状态,例如它当前是否可用、它已发出一个SIO了吗、它忙吗、它已收到一个中断返回吗。这种信息包含在状态码CC中。
这一节描述各种S/370I/O操作所用的指令流,在这一节中所使用的某些特定的过程和术语在这一节的末尾予以规定。这些操作如下所述:
1.清通道(图44A)——这个指令通过在一被寻址的通道上向所有设备发一个系统复位信号,以便在被寻址通道上执行I/O系统复位。S/370微码不知道哪些设备实际在该通道上,因此为该通道上的所有DST入口置CC=3。接着,EXEC370将发送SMSG,以重升定义该通道的配置。
被清通道由该指令地址的16~23位寻址。当S/370微码接收到从调度发来的控制时,它开始检验通道地址。通道地址或是有效,或是无效。如果通道地址无效,则状态寄存器CR置3,将S/370返到下一条顺序指令。由S/370微码支持的通道被看作是有效的通道地址。对于有效通道地址,S/370微码向EXEC370发去一个清通道消息,然后它走过这条通道的所有设备状态表(DST)入口。所有状态码字段被置3,这意味着不能使用。被找到的任何悬挂起来的中断表(PIT)表项都被释放到自由表中的空位上。S/370微码然后将状态寄存器置零,并进到下一条顺序指令。与此同时,当EXEC370接收这个清通道消息时,它对该被寻址通道上的所有设备执行I/O系统复位。然后它弄清哪个设备将是在线的并给S/370微码发去一个状态消息,以重新定义该通道的配置。当S/370微码接收这个状态消息时,它就把用于已寻址的每个设备的设备状态表中的状态码修改为状态消息中的样子。
2.清I/O(图44B)——这条指令可将PE85中处理的S/370指令的执行悬挂起来,直到用于被寻址的CUA的IMSG由EXEC370返回时为止。
当S/370微码接收到从调度来的控制时,它从这条指令的高端地址得到控制单元地址CUA。它利用这个控制单元地址来寻找那个设备用的校正设备状态表DST的入口。它检验状态码CC值。这有三种选择:(1)CC等于0或3,(2)CC等于2或CC等于1和下一状态NC等于2,(3)CC等于2或CC等于1。
对于第一种选择,CC等于0或3,S/370微码只将状态寄存器置为CC值并进入下一条顺序指令。
如果CC等于1,在悬挂中断表(PIT)内有一个悬挂中断,在这种情况下,S/370微码进到该悬挂中断表入口并检验NC值。
对于第二种情况,CC等于2或者是CC等于1以及NC等于2,S/370给EXEC370发送一个清I/O消息,它等待确认,并且清该设备有关的任何悬挂中的中断项目。然后,它等待由EXEC370返回的中断消息。在EXEC370接收该清I/O消息的同时,它执行其被寻址设备的选择性复位,为该设备建立一个控制状态字,将一个中断消息返回到S/370微码。当S/370接收该中断消息时,它根据该消息产生一个PIT表项并填入NC和CSW。于是,该悬置项被连接到该DST表目上。
在这点上,我们来到第三种选择,CC等于2或CC等于1。我们到达这点可通过两条路径中的一条。第一路径是该设备忙或该设备已发出一个悬挂着的中断,但它仍旧忙。这是用于正被发布选择性复位的情况。第二路径是该设备有一悬挂着的中断,但它不再忙。对于这两条路径,CC将等于2或1。这是第三种选择。S/370微码上托这个中断,将该CSW放入S/370存贮器,将状态寄存器置1,并返回到下一条顺序指令。
3.停设备(图44C)——当S/370微码接收到来自调度的用于停设备指令的控制时,它检验被寻址设备状态表表项的状态码。这有三种选择:状态码等于0或2,状态码等于1,状态码等于3。对于第一种选择,状态码等于0或2,S/370微码向EXEC370发出一个停设备消息。然后它使S/370CSW中的16个状态位变零,将状态寄存器置1并返回到下一条顺序指令。在EXEC370接收到这个停设备消息的同时,它在被寻址设备上执行适当的功能,并返回一个正常中断消息。当CC=1,S/370微码上托这个来自PIT表的中断,将CSW放入S/370存贮的适当的存贮单元,将状态寄存器置1,并走到下一条顺序指令。对于第三种选择,CC等于3,S/370微码只将状态寄存器置3,并走到下一条顺序指令。
4.停I/O(图44C)——停I/O的功能与设备的功能说明相同。
5.恢复I/O(图44D)——在S/370系统中,恢复I/O指令(RIO)只检验在接收到该指令之前该通路是否可供使用。就象其它I/O指令一样,S/370微码必须检验用于特定的CUA的CC。对于这个指令,CAW不被引用,并且CCW不被取出。
当S/370微码接收到来自调度的用于恢复I/O指令的控制时,它检验用于被寻址设备状态入口的状态码。这有两种选择:CC等于0或1或2;CC等于3。对于CC等于0、1或2,S/370微码向EXEC370发出一个恢复一个I/O消息,状态码置2,状态寄存器置0,进到第一条顺序指令。在EXEC370接收到这个恢复I/O消息的同时,它查阅该控制。直到寻址和继续先前被悬挂的I/O操作时为止。对于第二种选择,CC等于3,S/370微码只将状态寄存器置3并进到下一条顺序指令。
6.起动I/O(图44)——当S/370微码接收到从调度来的、用于起动I/O指令的控制时,它使用该控制,直到找到该设备状态表表目的地址时为止。然后,它检验该状态码,这里有四种选择:CC等于0;CC等于1;CC等于2;CC等于3。对于CC等于0,表示该设备就绪,S/370微码向EXEC 370发出了一个起动I/O消息,CC置2(意味着“忙”),将状态寄存器置0(意味着“被接收”),返回到下一顺序指令。在EXEC 370接收到一个起动I/O消息时,它使用该控制,直到找到这个具体设备的地址并在那个设备上开始正常I/O操作时为止。对于第二种选择,CC第于1,S/370微码上托该中断,将CSW放入S/370存贮器,将CSW比特置“忙”位,将状态寄存器置为1,返回到下一条顺序指令。对于第三种选择,CC等于2,S/370微码将CSW和S/370存贮器的存贮单元40X全都置0,接通CSW忙位,将状态寄存器置成1,进到下一条顺序指令。对于第四种选择,CC等于3,S/370微码只将状态寄存器置成3(意味着设备不能操作),进到下一顺序指令。
7.起动I/O并迅速释放(图44F)——当S/370微码接收到来自调度的用于起动I/O快速指令的控制时,它检验用于被寻址的DST的表目的状态码。这有两种选择:CC等于0、1或2;CC等于3。对于第一种选择,CC等于0、1或2,S/370微码向EXEC 370发出一个起动I/O快速的消息,将CC置2,将状态寄存器置0,进到下一条顺序指令。在EXEC 370接收到一个起动I/O快速的消息的同时,如果它能够做,则它起动这个I/O操作;否则,当它被S/370微码接收时,它返回一个带有CSW的中断消息,这个CSW包含一个延时的状态码,其起正常中断的作用。对于第二种选择,状态码等于3,S/370微码只将状态寄存器置3,进到下一条顺序指令。
8.测试I/O(图44G)——当S/370微码从调度接收到用于测试I/O指令的控制时,它检验状态码。这里有三种选择:CC等于0或3;CC等于1;或CC等于2。对于CC等于0或3,该微码将状态寄存器置位等于CC值,进到下一条顺序指令。对于第二种选择,CC等于1,该微码上托该中断,并将CSW放入S/370存贮器,将状态寄存器置1,意味着CSW被存贮,然后进到下一条顺序指令。对于第三种选择,CC等于2,该微码将S/370存贮器内的CSW区(40X)清零,将CSW忙位置1,将状态寄存器置1,然后进到下一条顺序指令。
9.存贮通道ID(图44H)——当S/370微码从调度接收到用于存贮通道ID指令的控制时,它检验该通道地址。这有两种选择:通道地址有效和通道地址无效。对于被选择通道的无效,该微码将状态寄存器置成3,然后进到下一条顺序指令。对于被选择通道的有效,该微码将S/370存贮器的存贮单元十六进制A8置为十六进制20000000。它将状态寄存器置0,然后进到下一条顺序指令。
10.测试通道(图44I)——当S/370微码从调度接收到用于测试通道指令的控制时,它检验该通道地址。注意:对于这个流有两种主要选择和三种次要选择。对于第一种主要选择,通道地址无效,该微码将状态寄存器置3,然后进到下一条顺序指令。对于第二种选择,通道地址有效,该微码还检验该通道的所有DST表目。如果该微码发现了一个具有CC等于1(意味着该设备有一个悬挂中的中断)的特定设备的DST表目,则第一种次要的选择就要发生。对于这种情况,该微码将状态寄存器置成1,然后进到下一条顺序指令。当该微码到达用于这个通道的DST入口表的底部时,它还没找到CC等于1的入口,它就要检验是否这里至少有一个CC等于2的入口。如果没有,则这就是第二种次要的选择,对于这种情况,该微码将状态寄存器置成2,然后进到下一顺序指令。否则,发生第三种次要的选择,该微码将状态寄存器置0,然后进到下一条顺序指令。
11.初级和二级中断(图44J、图44K)——初级和二级中断这些术语是S/370的术语。初级中断在由一个I/O操作产生的CSW中至少含有“通道结束(CE)”状态位的中断。二级中断或是一个第二中断,含有用于I/O操作的“设备结束(DE)”,或是一个异步中断,由设备请求服务来起动。
在叙述上,初级中断和次级中断没有差别,因此,现在只描述初级中断。在I/O被屏蔽中断与I/O被允许中断(图44J和图44K)之间的差别是I/O是否被屏蔽。也就是说,S/370处理器将接收来自该通道的中断,还是不接收这个中断。如果一个中断不被S/370处理器所接收,则该通道堆积这个中断。该中断被称为悬挂中断,直到S/370处理器允许它时为止。当一个中断状态发生而EXEC370仿真一个特定设备操作时,EXEC370建立一个CSW并将其存在一个消息里,然后将该消息发送到S/370微码。当该微码接收该中断消息时,它检验S/370屏蔽以弄清I/O是被屏蔽还是被允许。如果这个I/O被屏蔽(图44J),则它堆积该中断。堆积中断过程将在下文描述。如果S/370微码检验该屏蔽,并且I/O被允许(图44K),则用于中断设备的DST表目内的状态码字段被置位等于该中断消息中的下一个状态(NC),来自该消息的CSW被放入S/370存贮器,并且该微码使一个I/O中断被执行。
12. S/370I/O屏蔽事件(图44L)——如果在EXEC370给S/370微码发出一个中断消息时I/O被屏蔽,该中断被堆入悬挂中断表(PIT)表目中。在某一时间的顺序点上,某种S/370事件将会发生,这导致允许I/O中断。这可能是由于装入PSW指令、置位系统屏蔽指令、或者是能使I/O指令执行的任何中断引起的。在任何点上,当PSW系统屏蔽变化以允许先前被屏蔽I/O时,S/370微码必须检验这些通道用的正在悬挂的任何中断。如果一个也找不到,则该微码就进到下一条顺序指令。如果找到一个,则该微码上托该中断离开该表,将该CSW放入S/370存贮器,并执行一个I/O中断。
下面描述上文引用的这些过程:
1.被堆积的中断——“被堆积的中断”一词是结合“在S/370I/O被屏蔽时S/370微码接收的中断消息”而使用的。中断被堆积在被称为“悬挂中断表”(也叫PIT)内的设备状态区内。PIT表项以先进先出的次序链接到DST表项,该入口代表产生该中断的S/370设备。堆积一个中断涉及从该自由表中得到一个PIT表项,将它链接到该DST入口的PIT表的末端,将该CSW放入该PIT入口的状态字段内,将NC值放入该PIT项的NC字段内,并将该DST的CCW字段置1。将CC置1表明这里有该设备用的一个正在悬挂的中断。
2.上托中断——上托一个中断涉及不改变在DST/PIT表的顶部上的PIT表项,将DST状态码置为在PIT表项的NC字段中找到的值,保留含在S/370CSW中的PIT项的状态字段,并将PIT项返回到该自由表中。
3.向EXEC370发送消息——图43以举例方式作为本描述的参考。在选择CC等于0的那个点上,S/370微码已决定它需要向EXEC370发送一个消息。该消息作为一个具体例子是一个起动I/O消息。对于S/370微码发出的这一消息或任何其它类型的消息,过程都是相同的。S/370微码将邮箱入口的数据字段填入具有该消息内容的存贮器162内,然后它发布一个PU/BCU请求,该请求由BCU逻辑253接收。然后S/370微码等待一个确认返回。与此同时,当BCU逻辑接收到一个PU/BCU指示时,BCU逻辑开始一个存贮器存取和一个DMA操作,以将该邮箱的这个数据传输到BCU存贮器210。当DMA完成时,它将一个确认信号返回给S/370微码,然后该微码进到下一条顺序程序指令。同时,DMAC逻辑中断该系统88。这个软件例行程序接收控制,检验该操作的有效性,随后向EXEC370发出一个通知,然后,EXEC370使来自工作队列的这个消息离队。
4.向S/370微码发消息——EXEC370向S/370微码发出的消息有几种不同的类型。S/370I/O屏蔽事件(图44L)是这种中断消息的一个例子。EXEC370调用与BCU逻辑接口的ET10微码。ETIO起动DMA操作,该操作将消息从BCU存贮器210传输到S/370存贮器。当该DMA完成时,将BCU/PU消息发送到S/370微码,并将一个中断发送到系统88,这使该ETIO接口例行程序向EXEC370发送一个通知。
总线控制单元(BCU)156的操作
1.引言
对上文描述的某些系统部件及其功能将进行简单总结。BCU执行S/370芯片组150和I/O子系统之间I/O接口功能。I/O子系统包括S/88PE62及其相关系统和模块10的I/O部件。S/370芯片组150和I/O子系统通过总线适配器154进行通信。在S/88主存贮器16内的S/370存贮区162,这里有时称之为基本存贮器组件(BSM)162。这里有两组适配器总线接口线249、250(通道0)和251、252(通道1)与BCU156和总线适配器154耦合。
BCU156包括:64KB本地存贮器210、直接存贮器存取控制器(DMAC)209、32位的本地地址总线247、32位本地数据总线223、以及接口逻辑205。
如上文详细描述的,DMAC209包括四个数据传输通道:
通道0——邮箱命令从PE85传输到BCU156。从S/370存贮器区162来的消息被读到本地存贮器210。
通道1——S/370PE85写数据。数据从S/370存贮器区162读出,传输到本地存贮器210。
通道2——S/370PE85读数据。数据从本地存贮器21传输到存贮区162。
通道3——从BCU156到S/370的高优先级消息传输。消息从局存210传送到S/370的存贮区162。
DMAC209在总线适配器154和本地存贮器210之间传送双字(32位),在I/O数据传送结束时,它还中断I/O子系统(S/88PE62)。本地存贮器210包括:I/O和消息数据缓冲器WQB和由DMAC209为自动邮箱加载的链表数据。
BCU逻辑205包括本地总线仲裁单元216,其中S/88PE62和DMAC209争夺访问本地总线,亦即数据总线223和地址总线247。每当下列地址(图41C)由地址译码和仲裁单元216检测出时,PE62“总线请求”线190是活动的:
任何本地存贮器地址;任何受BCU控制的命令(其中包括被编程的BCU复位、BSM写选择、BSM读选择、以及读BSM状态);本地总线中断确认周期;以及任何受DMAC控制的读或写寄存器命令。
当DMAC总线请求线269希望得到对本地总线223、247的控制权来实现DMAC时序(读或写本地存贮器210)或链表装入时序(从本地存贮器读出)时,它是活动的。当本地总线的控制由逻辑216给予DMAC209时,总线允许线268被引发,如果控制权给与3PE62,则线191被引发。
BCU逻辑205控制在总线适配器154和I/O子系统之间的DMAC 209传输定时,并将高达4KBI/O传输转换或为在通道0和通道1上用于总线适配器154的64字节块的传输。
BCU逻辑205检测任何块传输用的64字节边界交叉。如果这种情况发生,则将该块被分成两个单独的传输。BCU156将为第一传输计算高达64字节边界的字数。这将与起始地址一起提供给总线适配器154。其余字与一个新地址一起通过一个顺序命令(BSM读/BSM写)提供给总线适配器154。BCU逻辑205还提供一个I/O数据传输(在64字节边界上)的预订功能,作为一个高优先权消息,或者,读邮箱请求发生。一个高优先权消息请求和一个邮箱请求可以同时在BCU156内得到管理。“总线读”和“总线写”操作可以同时在BCU156内得到管理。
BCU156执行以下四种I/O操作:
邮箱读操作:由S/370I/O“指令微码”通过“PU/BCU请求”线256a被起动。邮箱188位于S/370BSM162内。它用来存贮由I/O子系统(起动I/O等)执行的I/O命令。它可以包含I/O子系统从PE85接收的状态或其它信息。当“ PU/BCU选择线210”在适配器总线通道0上被起动时,“邮箱选取(MaiLbox Select Up)”命令由BCU156起动。如果该“PU/BCU请求”由S/370PE85起动时,S/370I/O写操作(适配器总线通道0)将在64字节边界上提前占用。
S/370I/O读和写操作:在S/370存贮器和适配器总线通道0和1上的I/O设备之间提供数据传输(最大为4kB块)。所有的数据传输由I/O子系统(S/85PE62)通过“BSM选择”适配器总线命令来起动。
高优先权消息传输:中断、状态、差错、等、从I/O子系统传到S/370的高优先权性质的消息。所有传输都由BCU156通过“Q SELECT UP”命令起动。如果一个高优先权消息请求发生,则S/370I/O读操作(适配器总线通道1)将在64字节边界上提前被占用。
2. S/370起动I/O时序流概述和详述
“起动I/O指令”SIO、“通道地址字”CAW和第一“通道控制字”CCW都存贮在S/370存贮器162的预定的“邮箱”存贮单元中。这个信息经过BCU接口逻辑205和总线适配器154传送到本地存贮器210。
DMAC通道0寄存器示于图18中,被用于邮箱读操作。它们将由S/88PE62编程,以“链链接的数组链方式”操作。PE62通过在本地存贮器210(图41H)中建立一系列“链表”,以使这种方式初始化。然后,它将第一“顶部链表地址”置入DMAC通道0基地地址寄存器(32位)BAR内。这个地址指向该链表数据存贮器210内的第一存贮单元。
DMAC“PCL”(外部控制线)257a由PE62编程,每当PCL线257a被起动时,使DMAC209起用其IRQ中断输出线258。在完成邮箱数据从主存贮器162经过适配器缓冲器259传送到本地存贮器210之后“PCI”线257a被起用。中断将通知S/88处理器PE62“邮箱加载刚完成”。
链表数据(图41H)包括:数据块的起始存贮地址、存贮器传输计数、以及到下一个表入口的链地址。该表中的最后的链地址为零。
S/88处理器162给DMAC通道0基地址寄存器内的顶部链表地址置位。
S/88处理器PE62通过把“1”写入其“通道0”的通道控制寄存器CCR的第7位(“起动”位)来起动DMAC 209。DMAC209然后将第一链表按如下方式读入其通道0寄存器中:
将存贮器210的数据块WQB的起始地址读入存贮器地址寄存器MAR(32位);
将传送计数(邮箱数据的字节)读入存贮器传送计数寄存器MTC;和
将链地址读入下一个数据块地址寄存器BAR。
尤其是,在指令执行期间,S/370PE85对“起动I/O”指令译码,它把“起动I/O”命令通道地址字、以及第一通道控制字放入后读的“邮箱”的存贮单元中,这些存贮单元包含在S/370存贮器162中。邮箱的起始地址(基地址加队列长度)在初始化时刻被存贮在总线适配器154的基地寄存器中。
S/370PE85通过具有第11位为1的处理器总线发出“LDOSCW”控制操作(OP)。这将总线适配器154的控制字中的“PU对BCU请求”位置1。OSCW位U在适配器总线(通道0)引发、PU对BCU的请求。如果“PU/BCU请求”在I/O数据传输期间发生,则BCU156提前占用64字节边界上的I/O传输,以允许取入邮箱。
然后,BCU156在总线290上产生一个“ReadMailbox Select UP(有选择地读邮箱)”命令,其格式如图45A所示,其中,0、1位是命令位,2-7位是字节计数,并将它存贮在“通道0”命令寄存器214中。邮箱地址位通过总线290以图45B所示格式存贮在寄存器219内,这里位7表明存贮器162中的IOA区,24-26位表明BCU通道号,位27-31表明邮箱位移。
在BCU156通过填入寄存器214和219激励起“命令/状态”总线249和“地址/数据”总线250以后,它在线262a上引发一个“抬高标志”命令,并等待来自总线适配器的数据。它通过对“标志下降”线262b取样来做此事,只要数据没准备好,“标志低”就是活动的。一旦“标志低”被总线适配器154(数据准备好)抹除,邮箱数据的前四个字节就经过两个通道0的子周期被锁存在“通道0”读寄存器226中。
然后,BCU逻辑253在DMAC209的通道0上引发“请求”线263a。接着,DMAC209线269上产生“总线请求”(BR),这个请求被送往本地总线仲裁电路216。如果本地总线未被S/88处理器62使用,则允许总线访问信号通过总线允许(BG)线268到送到DMAC209。随后,DMAC209将WQB本地邮箱的起始地址(在存贮器210内)从MAR传输到地址总线247,并抬高“ACKO”(DMAC“通道0”确认)线264a。“ACKO”信号起动数据传输从缓冲器226经过数据总线223到存贮器210内WQB的本地邮箱部分。“DTACK”线265被起用来通知DMAC209该操作结束。
BCU时钟信号(图25)继续把邮箱数据从缓冲器259传输到寄存器226。BCU156对每个本地存贮器210/DMAC209时序(32位)执行两个适配器总线(“TAGUP”/“TAG DOWN”)时序(每个16位)。
当DMAC周期结束(DTACK活动)时,DMAC209相对于BCU逻辑253抬高“数据传送结束”(DTC)线267,然后,BCU逻辑253在线263a上向DMAC209发出另一个“请求”,以将来自寄存器226的第二个四字节读到WQB邮箱。DMAC周期反复进行,直到整个邮箱数据(16字节)都已被传输时为止(4个本地总线周期)。通向DMAC209的“PCL”线257a再由BCU253起用,这使从DMAC209通向S/88处理器优先权译码器/中断逻辑212的“IRQ”线258被激活。然后,PE62管理该邮箱请求。
当DMAC209完成从链表取入其“通道0”寄存器时,它等待在“通道0”“请求”线263a上来自BCU逻辑253的一个信号,以开始取下一个邮箱。一旦开始,随着S/88处理器62控制该环形链表并保持“请求”线263a不活动以使BCU156悬挂数据传输,DCMA“通道0”处于无限期地活动状态。如果“通道0”由于“表结束”状态而停止,则S/88接收一个终端中断,并在适当的时候重新起动“通道0”。
3. S/370I/O数据传输顺序流的概述
所有的I/O读和写传输经过符合适配器总线结构的“BSMREAD SELECT UP”和“BSM WRITESELECT UP”命令来源于S/88处理器62。S/370CCW命令和起始地址(S/370存贮器162)是从“起动I/O”用的CCW得到的。S/88处理器62使数据在每个I/O设备和本地存贮器210中的本地缓冲器之间流动。
本地存贮器210包括用于I/O写操作的一队存贮器块,该操作由S/88处理器62管理。当该队包括至少一个表项时,分离I/O写操作准备好。在起动写操作之前,这些块中的被选的一块所用的起始地址由S/88处理器62存贮在DMAC209内的DMA“通道1”寄存器中。DMA“通道1”寄存器通过本地存贮器210专供写操作使用(S/370存贮器162到I/O)。适配器总线缓冲器259(64字节)专供邮箱读和S/370I/O写操作(数据从S/370存贮器162传输到本地存贮器210)用。这个缓冲器与“通道0”适配器总线249、250相联。缓冲器260(64字节)专供消息写(到S/370)和S/370I/O读操作(数据从本地存贮器210传输到S/370存贮器162)使用。这个缓冲器与“通道1”适配器总线251、252相联。S/88处理器62使DMAC“通道1”和“通道2”存贮器地址寄存器的高阶字初始化到0。在操作时序期间当这些寄存器被装入时,由于本地存贮器210不需要大于16位的地址,因此这节省了一个额外的总线周期。
(a)I/O写操作:(S/370存贮器162到本地存贮器210)
通过把信息放在DMAC地址和数据总线248上(经过总线161a、驱动器217、总线247和锁存器233),在DMAC“通道1”存贮器地址寄存器MAR内设置本地缓冲器起始地址,如图45C所示,其中,31-08位=007E00=“DMAC寄存器选择”命令,07-00位=DMAC“通道1”存贮器地址寄存器(低)选择。注意,S/88在总线上标识出的最高和最低有效位分别为“31”和“0”,这与S/370协议相反。
如图45D所示的内容(供MAR使用)放在数据总线223上,其中,31-16位=在存贮器210内,用作I/O写数据的本地缓冲器起始地址。高阶数据总线位(31-16)将被装入“通道1”存贮器地址寄存器的低阶(15-00)部分。MAR的高阶位(31-16)在初始化期间被置0。DMAC209用线266a、b上的16位的端口“DSACK”信号,通过BCU逻辑253,响应S/88处理器CPU。S/88处理器62将BCU数据(字节计数、存贮键、适配器总线优先权和用户/IOA空间数据)和DMAC“通道1”存贮器传输计数数据放在本地地址总线247上。图45E示出地址总线上的命令,其中,各位的含义如下:
31-08=007EOO=“DMAC寄存器选择”命令;
07-00=BCU选择和DMAC“通道1”MTC选择。
字节计数、存贮链(从CCW中得出)、适配器总线优先权、以及用户/IOA空间位由S/88处理器62按图45F所示的格式放在数据总线223上,其中,各位含义如下所示:
31-27=留用
26=   高阶字节计数位。只有在最大字节计数(4K字
       节)正在被传送时该位=1。
26-16=被装入DMAC“通道1”MTC寄存器的字节计
       数。
26-14=被装入BCU寄存器220的字节计数(最大
       4096),该计数至少一部分被装入寄存器221
       (这将在下文的字节计数操作中描述)。为了传送
       4096个字节总线适配器154需要计数1111
       1111 1111(字节计数-1)。为了传送
       4096个字节。因此,BCU
          156使双字边界位26-16减1,然后将它
          与字节位移位15-14(在64字节块内)一
          起送到总线适配器154。
15-14=   低阶字节计数位BCU156。
          这些位代表来自双字边界的字节位移减1(为了
          总线适配器的要求)。这些位不被DMAC209
          或BCU156使用,因为它们只传送双字。它
          们被送到总线适配器,以传给S/370BSM
          162。
13-12=   适配器总线通道优先权。
11-08=   存贮键。
07=      用户/IOA空间位。
06=      S/88处理器将起动这个位(1)以指明需要
          一个附加的本地存贮器访问。这发生在起动S/
          370存贮器地址不在双字(32位)边界上。
          由于所有BCU访问必须在双字边界处开始,因
          此第一个访问将含有在指定的起动地址的字节和
          包含在那个双字地址内的前面的字节。再往前的
          字节被抛弃。
05-00=   留用。
DMAC209将把数据总线的高阶字(亦即字节计数)装入通道1MTC寄存器。BCU156将收集数据总线内容如下:
位26-14-  对于BSM读选择字节计数器220;和
位13-06-  对于适配器总线通道0的A/D寄存器219,
          但重新被安排。
对于发生在一个S/88处理器机器周期内的双字传输,地址必须在双字边界上。由于DMAC“通道1”MTC的地址不在双字边界上(位07-00=01001010),以下动作将会发生,以使BCU156和具有一个S/88处理器命令的DMAC209加载。BCU156将地址位1翻转,将它和其它寄存器选择位一起送到DMAC209。这将允许“通道1”的MTC寄存器被适当地选择(地址位07-00=01001010)。这种选择也施加到用于“通道2”I/O读操作的MTC寄存器。DMAC209用线265上的“DTACK”信号响应BCU逻辑253。BCU逻辑253将“DTACK”信号转换为32位的端口“DSACK”在线266a、b上对S/88处理器62的响应。传输字节计数和其余数据总线的数据一起在子时序“BSM读选择”命令期间被送到总线适配器154。BSM读边界计数器221或BSM读选择字节计数器220将被装入通道0读命令寄存器214。
S/88处理器62然后在总线247上产生一个“BSM读选择”命令,其格式和图45G所示,其中,31-00位=007E0108=“BSM读选择”命令。
S/88处理器62还将BSM起始地址放在数据总线223上,其格式如图45H所示,其中,23-0位=存贮器162中的起始地址。
总线223上的BSM起始地址被存贮在A/D寄存器219和“BSM读地址”寄存器231内。然后它被发送到总线适配器154,以提供给S/370存贮器162。接着,BCU156起用通向S/88处理器62的“DSACK”线266a、b。在这点上,S/88处理器被释放,并且再也不涉及这个操作。
BCU156将“BSM SELECT UP”(读)命令经过总线290放到寄存器214内和命令/状态总体249上,其格式如图45I所示,其中,各位含义如下:
0-1=11,“BSM选择”命令(读);和
2-7=字段长度减1(最大64字节)。
该字段长度提前从寄存器220或221传输到寄存器214。寄存器219把地址信息放在总线250上,其格式如图45J所示,其中,各位含义如下:
0-3=  存贮键;
4  =  1;
5-6=  优先权(总线适配器154到处理器总线170);
7  =  1=用户区访问;
       0=微码区访问;
8-31= 存贮器162中的数据字段的第一字节。
然后BCU逻辑253抬高相对于总线适配器154的上升标志线262a以将命令、字段长度数据锁存在适配器命令寄存器124(图13)内,将键地址数据锁存在寄存器122内。如果数据无效,则总线适配器154相对于BCU逻辑253抬高标志下降线的电平。总线适配器154将适配器总线“BSM选择”命令转换为“处理器总线I/O存贮”命令,如图45K和45L所示,其中,处理器地址/数据总线170上的各位表示:
0-0=I/O存贮命令;
1-1=取操作;
2-7=  字段长度;
8-31= 读字节地址;其中,处理器键/状态总线比特表示:
0-3=  存贮键;
4-0=  无动态转换。
当被寻址的数据从S/370存贮器162返回时,它被锁存在总线适配器数据缓冲器259(通道0)内。然后总线适配器154除掉适配器总线“通道0”上的标志下降线262b。这个状态警告总线156将两个字节(16位)数据通过时钟左和时钟右信号跟其后的另两个字节锁存在通道0读缓冲器226(4字节)内。然后,BCU156起用其通向DMAC209的“REQ1”线263b(DMAC“通道1”请求)。DMAC209在线269上向BCU本地总线仲裁逻辑216发出一个“总线请求”,以执行一个本地总线周期。
当线268上的总线允许信号从BCU仲裁逻辑216返回时,DMAC209起动“通道0”读缓冲器259进入本地存贮器210操作。它作这个是通过线264b把ACK1(DMA通道1确认)信号回送到BCU逻辑253,並通过将DMAC“通道1”寄存器MAR内的本地存贮器地址经过总线248、锁存器233、地址总线247和复用器232选通到存贮器210寻址电路(图中未画出)。BCU逻辑253使用线264b上的ACK1信号和线210a上的RAM选择信号,使第一数据(4字节)从缓冲器226选通到数据总线223,以便在MAR寄存器特定的地址上存入存贮器210。当DTACK由BCU逻辑253返回到线265上时,DMAC209在线267上产生DTC(数据传送结束)。
BCU156将使现已保存在寄存器220里的字节计数减1,使通道1MAR加1,使接收来自总线适配器154高达64字节的数据中的每个双字(4字节)用的地址寄存器231减1。以上描述的顺序对于BCU命令的每四个字节(高达64)反复进行。如果传送字节计数大于64,则BCU156将把一个新的起动地址通过寄存器231、219送到总线适配器154,以取下64字节。如上所述,对于每四个字节传送,寄存器231已减1,因此有适当的下一个起动地址。总线适配器154为每个起动地址缓冲64字节,直到该命令请求的整个数据传输(高达4KB)结束时为止。
如果总线适配器缓冲器259是空的,则BCU156将使DMAC209空闲(通过不保请求),直到下一有效数据字被接收到时为止;标志下降状态反映缓冲器259中有效数据的有效性。请求/确认周期持续下去,直到字节计数器为0,此时DMAC209在线258上相对于S/88处理器62抬高IRQ。这将提醒S/88处理器62读本地存贮器缓冲器,其中含有为适当处理从S/370存贮器读出的数据。
(b)I/O读操作:(本地存贮器210到S/370存贮器
   162)
在至少一个入口在存贮器210的I/O读排队中存在时,I/O读操作(在EXEC370的控制下)被断开。如果S/88处理器62未被DMAC209使用,则S/88处理器62得到本地总线的控制。S/88处理器62对DMAC通道2存贮器地址寄存器(MAR)中的本地缓冲器I/O读起始地址置位是通过将图45M所示的信息放在247总线上,上述总线中的各位表示:
31-08=007EOO=“DMAC寄存器选择”命令;
07-00=DMAC“通道2”存贮器地址标记(低)选择;还通过将起始地址(存贮器210内缓冲器的)放在总线223上,如图45N所示,其中,各位表示:
31-16=本地缓冲器I/O读数据的起始地址;
15-00=被留用。
高阶数据总线位31-16将装入通道2存贮器地址寄存器的低阶位(15-00)。MAR的高阶位(31-16)在初始化期间被置0。DMAC209用线265上的DTACK信号(它被转换为线266a、b上的DSACK信号)来响应S/88处理器62。然后,S/88处理器62利用被选择的本地存贮器I/O读缓冲器使数据(高达4KB)从I/O控制器如20或24经过S/88程序控制传送到本地存贮器210。
当数据传输结束时,S/88处理器62把DMAC“通道2”存贮器传输计数选择放到地址总线247上,其格式如图45O所示,其中,各位表示:
31-08=007EOO=DMAC寄存器选择命令;
07-00=BCU和DMAC“通道2”MTC选择。
将字节计数、存贮键(从CCW得出)、适配器总线优先权和用户/IOA空间位由S/88处理器62以图45P所示的格式放到数据总线223上,其中,各位表示:
31-21=被留用;
26=   高阶字节计数。只在最大字节计数正被传送时,
         该位=1;
26-16=  DMAC通道2MTC寄存器的字节计数;
26-14=  装入BCU156(最大4096)的字节计数。
         为了传送4096个字节(字节计数-1),总
         线适配器154需要1111 1111
         1111计数。因此,BCU将使双字边界位
         26-16减1,然后将它与字节位移位15-
         14(在64字节块内)一起送到总线适配器
         154。
15-14=  低阶字节计数位。这些位代表来自双字(32比
         特)边界的字节位移减1(为满足总线适配器的
         需要)。因为这些位只传送双字,因此未被
         DMAC209或BCU156使用。这些位被
         传到总线适配器54,以便传送给S/370
         BSM162;
13-12=  适配器总线通道优先权;
11-08=  存贮键;
07=     用户/IOA空间位;
06-00=  被留用。
DMAC209把数据总线223的字节计数装入“通道2”MTC寄存器。当上述命令在地址总线247上出现时,BCU156将捕捉数据总线内容。26-16位被存贮在BSM写选择字节计数器222中。13-07位被存贮在高阶字节适配器总线通道1A/D寄存器227中。DMAC同线265上的DTACK信号响应BCU逻辑253。逻辑253将DTACK信号转变为线266a、b上的应答S/88处理器62的32位端口的DSACK。在连续BSM写选择命令期间,该传送字节计数与其余的数据总线数据一起被送到总线适配器154。BSM写边界计数器224(除了最后传输以外所有的)或BSM写字节计数器222(最后传输中的计数被装入适配器通道1写命令寄存器225中。
然后,S/88处理器62在本地地址总线247上产生如图45Q所示格式的BSM写选择命令,其中,各位表示:
31-00=007E0104=BSM写选择命令。
S/88处理器还将BSM起始地址以图45R所示格式放在数据总线223上,其中,各位表示:
31-24=被留用;
23-00=BSM起始地址。
数据总线223上的BSM起始地址由低阶字节的“通道1”A/D寄存器227和BSM写地址寄存器228捕捉。接着它将被发送给总线适配器154,以便送到S/370存贮器162。然后BCU156起用通向S/88处理器62的DSACK线266a、b(32比特端口)。在这点上,S/88处理器62被释放,再不涉及这个操作。
BCU逻辑253发出BSM Select Up命令,经过总线290使两位“01”进入高阶位命令寄存器225并将寄存器225的该命令和字段长度以图45S的格式放在总线252上,其中,各位表示:
0-1= BSM选择命令(写);
2-7=  字段长度减1(最大64字节)。
寄存器227的内容以图45T的格式放在地址/数据总线251(两个子周期)上,其中,各位表示:
0-3=  存贮键;
4=    1;
5-6=  优先权(总线适配器到处理处总线);
7=    1=用户区访问;
       0=微码区访问;
8-31= 在数据字段中第一字节的S/370地址。
该命令、字段长度被存贮在适配器154的寄存器125中。键/地址经过SYNC寄存器113存贮在适配器154的寄存器123中。BCU逻辑253起用通向DMAC“通道2”的线263C上的REQ2信号。DMAC209把来自MAR的I/O缓冲器起始地址经过总线248、锁存器233、总线248和复用器232传输到存贮器210,以将来自存贮器210的数据中的双字传输到寄存器227。在线264c上升高ACK2信号(DMA通道2确认)。这就在通往适配器154的线262a上产生一个“标志上升”。
适配器154把来自寄存器227的数据中的双字在两个子周期内经过寄存器113传输到总线适配器缓冲器260。在“标志升高”命令后面的“请求/确认”信号(REQ/ACK)中的写时序反复进行,以传输数据中的每个双字。BCU156使寄存器222、224中的字节计数减1,使寄存器228中的地址减1,使传送给总线适配器154的最多为64字节的每个双字(32字节)所用的DMAC通道2的MTC减1。
如果传输字节计数大于64,如前面关于写操作所描述的,BCU156产生下个64字节要用的所起始地址。总线适配器缓冲用于每个起始地址的64字节数据。这个时序将反复进行,直到寄存器222(最大4KB)的字节计数变成0时为止。
当总线适配器缓冲器260装满时,BCU156将悬挂写时序,直到总线适配器经过“标志下降”线262C给出一个缓冲器可用的指示时为止。
总线适配器154将适配器总线“BSM选择”命令以图45U和45V所示的格式、在处理器总线170和“键/状态”总线上转变为“S/370处理器总线I/O存贮”命令,其中:
处理器总线位含义如下:
0=    0=I/O存贮命令
1=    0=存贮器操作
2-7=  字段长度
8-31= 真字节地址;
“键/状态”总线位:
0-3=  存贮键
4=    0=无动态转换
当所有数据已被传输完毕时(字节计数=0),DMAC209将起用通向S/88处理器优先权编码器212的中断线258a。
(c)S/370高优先权消息传输时序流
所有高优先权消息传输都起源于I/O子系统(S/88处理器62)。DMAC“通道3”要由S/88处理器62来建立,以进行该数据传输(16字节)。BCU156把适配器总线“通道1”用于数据通信(“Q Select Up”命令)。
在S/88处理器PE62执行把DMAC存贮器传输计数装入“通道3”中的寄存器MTC操作时,BCU156检测高优先权消息请求。其结果是,BCU156在“通道1”的适配器总线252上给S/370PE85产生一个“Q选择”命令。如果在该请求被检测出时S/370I/O读传输在进行中,则BCU156等待,直到当前的64字节块传输完毕才接受该请求。
如果在适配器总线“通道1”上没有I/O活动,则该请求将被立即处理。
现在详细描述这种高优先权消息传输。如果PE62未被DMAC209使用,则它得到本地总线223、247的控制。然后,PE62通过程序控制将该消息数据存入本地存贮器210内。PE62通过把信息以图45W所示的格式放在本地地址总线247上对DMAC“通道3”存贮器地址寄存器MAR中的本地缓冲器消息起始地址置位,其中,各位表示:
31-16= 存贮器210中的本地缓冲器消息数据的起始地
        址,
15-00= 保留的。
高阶数据总线(31-16位)要装入DMAC“通道3”存贮器地址寄存器MAR的低阶(位15-0)部分。MAR的高阶位(31-16)在初始化期间被置0。DMAC209用线265上的DTACk信号(该信号通过BCU逻辑253在线266a、b上转变为16位端口的DSACk信号)来响应S/88处理器62。
然后,S/88处理器62把一个命令以图45Y所示的格式放在本地地址总线247上,其中,各位表示:
31-08=  007E00=“DMAC寄存器选择”命令;
07-00=  BCU和DMAC“通道3”选择。
字节计数、存贮键和用户/IOA空间位由S/88处理器62以图45Z所示格式放在数据总线上,其中,各位表示:
31-20=  保留的;
19-16=  传输字节计数位。这些位被装入DMAC209和BCU156。它们把双字计数送给DMAC209和BCU156(最大64字节);
15-12=  0;
11-08=  存贮键;
07=     用户/IOA空间位;
06-00=  保留的。
DMAC209要把数据总线223的高阶字(字节计数)装入通道3存贮器传输计数寄存器MTC中。通过把19-16位存入QSelect Up计数器254和把11-07位存入通道1A/D寄存器227而使这一特定的命令呈现在地址总线247上时,BCU156将捕获该数据总线的内容。
DMAC209用DTACK信号响应逻辑253,该信号由逻辑253转变为在线266a、b上的32位端口的DSACK信号以响应PE62。这个行动提醒BCU156起动从本地存贮器210到S/370BSM162的高优先权消息传输。在BCU产生“Q选择”命令期间这个传输字节位与图45Z所示的附加数据一起被送到总线适配器154。Q选择计数器254被装入到通道1写命令寄存器225的4-7位。BCU156以图45AA所示格式把Q选择命令通过总线290放入寄存器225中;把寄存器225内的数据放在适配器总线252上,其中,各位表示:
0-1=  “Q选择”命令(写)
2-7=  字段长度减1(16字节)。
经过寄存器227被放在地址/数据总线257上的信息示于图45AB,其中,各位表示:
0-3=  存贮键;
4-6=  0
7=    1=用户区访问
       0=微码区访问
8-31= 忽略不管。
总线252和251上的数据分别被传送到适配器寄存器125和123。然后,BCU逻辑起用请求(REQ)线263d(DMA“通道3”请求)。DMAC209把I/O缓冲器起始地址(来自MAR)放在本地总线247上,并提高ACK(DMAC通道3确认)线264d。然后,BCU把来自本地存贮器210内被寻址的I/O缓冲器的前四个字节经过SYNC寄存器113在两个子周期内传输到适配器缓冲器260。其后的四个字节块按照“标志升高”命令所规定的顺序被传输到总线适配器154,并通过“请求/确认”线263d、264d传输到DMAC。BCU156使送到总线适配器154的每个双字(32位)的字节计数减1。
总线适配器154把Q选择命令转变为S/370I/O存贮命令,以把该消息发送到存贮器162的区189。该命令的格式示于图45AC,其中,处理器(PROC)总线各位表示:
0=    0=I/O存贮命令
1=    0=存贮操作
2-7=  字段长度(最大64字节)
8-31= 实字节地址(来自适配器寄存器110、112)
处理器85“键/状态”总线具有如图45AD所示格式的数据,其中,各位表示:
0-3=  存贮键
4=    无动态转换
当所有的消息数据都已被传输到总线适配器154(字节计数=0)时,DMAC209起用通向S/88处理器优先权编码器212的中断线258a。DMAC209把来自其数据总线248的最低有效字节的中断向量通过驱动器接收机234送到S/88处理器数据总线161D的23-16位,和本地数据总线223的23-16位。DMAC把16位的DSACK返回到PE62。
(d)BCU状态命令
读BCU状态命令由S/88处理器62发布,以读BCU156的当前状态。S/88处理器按图45AE所示的格式把该命令放在地址总线247上,其中,各位表示
31-29=  适配器总线“通道0”状态——键检验,地址检
         验
28=     1=最后字节周期
         0=所有其它数据周期
27-26=适配器总线“通道1”状态——键检验、地址检
       验
25=   缓冲器不能用(“Q选择”命令)
24=   1=最后数据周期
       0=所有其它数据周期
23=   适配器总线“通道0”“标志降低”
22=   适配器总线“通道1”“标志降低”
21=   BSM读同步检验
20=  “BSM读选择”请求/悬挂锁存
19=  “BSM写选择”请求/悬挂锁存
18=  “Q选择”请求/悬挂锁存
17=   读邮箱在进行中
16=   BSM读在进行中
15=   BSM写在进行中
14=  “Q选择”在进行中
BCU状态位21(BSM读同步检验)在它由S/88处理器62读出以后被复位。这个位指明:在BSM读操作结束时,总线适配器154和BCU156字节计数不一致;由此一个错误要求重新同步被检测出来。
对于BSM写操作,总线适配器154起动标志下降信号262b,以指明所有数据现已都被接收到。在状态指示器被给出并由BCU捕捉到时,“标志下降信号”262b由总线适配器154予以解除。如果“标志下降信号”在100ms以内未被解除,则BCU156将起用通向总线适配器154的一条停止线(图中未画出)。这将使总线适配器本身从BCU156断开。标志下降信号262b还被总线适配器154用来指明不可能经过命令/状态总线向BCU156报告的任一错误。
(e)被编程的BCU复位命令
由PE62发布的一个被编程BCU复位命令执行与BCU156“接通电源复位”(Power on Reset)一样的功能。它可在任何时间被发布,用以清任何不正常状态的BCU。然而,本地总线周期(007EXXXX)必须由这个命令执行的硬件所辨认。
这个命令由S/88处理器以图45AG所示格式放在本地地址总线247上,其中,各位表示:
31-00=007E0000——复位BCU命令。
BCU156不过问数据总线的内容。BCU156把线266a,b上的DSACk(32位端口)返回到S/88处理器62。
计数、键和数据磁道格式仿真(图46A-K)
S/88上的S/370DASD的仿真用一个例子加以描述,以说明S/370I/O程序可由S/88处理器和I/O设备执行的最佳方式。S/370被称为“客体(objeet)系统”而S/88被称为“目标(target)系统”。用于客体系统的DACD(直接存取存贮器)数据由目标系统以仿真的格式予以维护。在S/370处理器中运行的S/370代码被称为“客体系统软件”。这部分的论述分为以下四部分:
1)客体系统——对于由现有的S/370直接存取存贮器产品所使用的计数、键和数据记录格式的简述。
2)目标系统——描述DASD程序接口模型。
3)仿真格式——描述在所用的仿真格式中客体系统字段的映象。
4)仿真功能——描述在仿真功能中客体系统功能的映象。
1.客体系统
DASD物体媒体被分割为很多柱面,柱面又划分为磁道,这些柱面和磁道数以及它们的容量对于不同的DASD类型和模型是不同的。每个柱面可被程序用两个字节的柱面号(CC)来寻址,在一个柱面内的各个磁道可由单独的读、写磁头来存取,每个磁头都可两字节磁头号(HH)寻址。一个磁道的物理位置由它的柱面号和磁头号给定,因此,可以规定为四字节磁道地址(CCHH)。每个磁道含有一个内部地址、一个磁道描述符(记录0)和一个或多个数据记录。每个记录的大小是可编程的;并且在内部地址和记录大小被写在一个磁道上时,该磁道被叫做“被格式化”。所有磁道可从它们的磁道起始标志到下一个磁道标志被格式化。图46A示出了这样一种磁道。
被记录在该物理媒体上的信息的基本单元是由8比特组成的一个数据字节。一组数据字节构成一个区,该设备用其之间的写空隙分割这些区。每个记录包括两个(计数、数据)或三个(计数、键、数据)区,而内部地址只占一个区。构成一个客体系统记录的三个区是:计数、键(可选)、和数据。
计数区包括以下字段:
标记    1个字节  表示磁道状态、逻辑记录磁道溢
                 出CCFF   磁道地址   2个字节    表示柱面和磁头号,这里磁道
                         被物理定位R      记录号     1个字节    表示在磁道上记录的顺序号KL     键长度     1个字节    表示在键区内的字节数DL     数据长度   2个字节    表示在数据区内的字节数ECC    差错码     2个字节    用于差错检测/校正码
键区包括以下字段:KEY    键         KL字节     用户数据ECC    差错码     2个字节    用于差错检测/校正码
数据区包括以下字段:DATA   数据       DL字节     用户数据ECC    差错码     2个字节    用于差错检测/校正码
每个磁道的第一区是内部地址。它包括以下字段:F      标记       1个字节    表示磁道状态CCHH   磁道地址   2个字节    表示柱面和磁头号,这里磁道
                         被物理定位ECC    差错码     2个字节    用于差错检测/校正码
记录0(磁道描述符)总是跟在内部地址区后面的第一个记录。在优选的编程系统中,如果该磁道已标为次品,则记录0的CCHH字段规定为替换磁道。用于记录0的键长度通常是0。记录0后面跟随一个或多个数据记录。键区是任选的,现在可以容纳1到255个字节。当一个“格式写CCW”命令写计数区、键区和数据区时,记录号就确定了。在记录已被格式化之后,用户区可以(用其它CCW命令)被读和/或写,而不破坏该磁道的相邻记录。如果一个记录重新格式化,在同一磁道上跟在它后面的这些记录都被破坏。
2.目标系统
DASD(图46B)以文件的形式提供给S/88微码,该文件包含4096个字节大小的若干块数据,块号从1按顺序编号。该仿真机构将客体系统的格式和功能的组合。
3.仿真格式
在客体系统中,不同的DASD类型和模型的物理参数是不同的。DASD类型和模型号和各种参数都被保存在目标系统文件(图46C)的第一个数据块INFO内。该文件的对照关系包含被仿真的客体磁道的数据(图46C)。每个磁道的数据被维护在整数个数的多个数据块中。每个磁道所需的目标系统数据块的号数是一个参数,被保存在第一个数据块内。以CCHH=0000起始的、目标系统的每个磁道顺序地被保存在目标系统文件中。如果给定保存在该INFO块中的CCHH和客体盘的大小,其起始块号可以被计算出。
每个被仿真的磁道(图46D)包含该磁道上当前存在的这些记录的一个目录、一个目录头标、以及每个记录用的用户数据(键、数据)。这个目录用来使一个特定的记录所用的数据定位,执行有关记录或键操作的检索、访问在该磁道上的最后记录、以及处理磁道溢出。
在该仿真环境里,客体系统数据按以下三种方式之一来对待:被保存、隐含地被保留、或者不被保留。
所有的空隙都是不需要的并且不被保留。ECC数据既不产生也不被保存,因为数据的完整性目标系统不与保证。由于目标系统所提供的程序模型消除了所有不合格的物理磁表面区,因此在客体系统中的替换磁道是以无缺陷的方式制成的。这意味着表示磁道状态的标志字节(下)这部分不被保存並被废弃,而客体系统软件所写的标志字节被用于正确性。
由客体系统软件传递的CCHH(磁道地址)被用来计算在目标系统DASD文件中的被仿真磁道的位置。它被保存在磁道头标中(下文将描述),但它不被扩散到该仿真磁道的计数区和簇地址区。簇地址不作为显式区域保存。由客体系统软件还传递记录号(R),该记录号也被隐式地保存并且不以显式数据出现。
对于每个记录,用户数据、任选键和数据字段在被仿真的磁道里紧跟在该磁道目录后按顺序被保存(图46D)。
客体系统数据〔F(逻辑记录磁道溢出)、kL、和DL〕的对照表被保持在磁道目录中(图46E)。目录项目含有F、KL、DL、以及一个指针P,该指针指向每个记录的用户数据(键和数据)。R被隐式地保存,作为目录项目号。图46E示出头标、目录、用户数据配置(makeup)以及在目标系统4KB块中被仿真磁道的映象。指针P0-P2指向用户数据记录0-2的起始地址(在4KB块内)。
4.仿真功能
这节用某些客体系统的DASD CCW命令来说明上述仿真格式的应用。图46F-K包含了读和写操作期间由客体系统软件传输的代表数据。
涉及簇地址、F和CCHH值的CCW操作(图46F)被计算和/或被检验,但什么也没被写入被仿真的磁道。
对于涉及记录0的CCW操作(图46G),CCHH和R字节被检验,但什么也没写。KL和DL字段被传输,来自或去往适当的目录项。记录0位于用户数据区中位移为0的地方。读/写记录0总是把磁头定位在该磁道的第一记录上。
涉及计数的CCW操作总是把磁头定位在磁道下一个记录上(图46H)。对于涉及键和数据的CCW操作,用户数据的位置和大小可在目录中找到(图46I)。涉及计数、键以及数据的CCW操作把读/写磁头定位在磁道的下个记录上(图46J)。对于涉及多个的计数、键以及数据的CCW操作,处理是以下一个目录项开始,并且持续到最后的有效目录项(图46K)。
S/88和S/370共享的实存贮器
1.引言
现在参考下列图例来详细描述对于一个或多个S/370处理器如何从实(物理的)存贮器16中“偷”一个或多个区並对它实施管理和映象:
·图10概念性地示出S/88虚存贮器106和实存贮器16以及S/370实存贮器162-164对于S/370处理器21、23和25、27以及29、31的分配;
图47图解地示出从S/88实存贮器16捕捉一个S/370存贮区的方法;和
图48A-K示出已知的例如用于S/88存贮器管理的虚/实软件映象,这种映象被控制以允许捕捉S/370存贮器。
存贮器16被划分为多个4KB大小的页面和多个存贮器映象表目(mme),一个4KB页被容纳在mme阵列内(图48A),该阵列映象出整个存贮器16。对应于与未被分配使用的页面的各个项归结在一个“自由表”内(亦即存贮器分配队列),其中每一项包括(图48B)、包含其在表中的上一项和下一项的实页号(指针)。在S/88操作系统中的软件指针总是指向该自由表的开关。实存贮器页从这个自由表的头上被分配给各个进程,返回到该自由表的页面最好被放在该自由表的开头。上一个和下一个页号和指向该自由表开头的指针适当地被更新。
当系统/88被引导时,这些入口按顺序地址的次序被放入该自由表中,这时只有几页指定使用。因此,存贮器16有大量的邻接区可由该自由表指定使用。这样,在引导时,S/370处理器用的存贮区(即162、163、164)必须被“偷”。随后,根据需要,某些页面从该自由表取出分配,某些页面又返回到该自由表,这样在该表中的大量邻接块变成碎片并且再也不能使用。假如试图建立一个邻接的S/370区,则需要停所有过程和执行复杂的例行程序,以重新分配那些已分配给各种过程的存贮块,直到足够的邻接存贮器变成可以使用时为止。
下文描述的在应用程序EXEC370中的服务例行程序为从S/88操作系统中偷S/370存贮区提供功能。
2. S/88存贮器16映象
首先参阅图48A-K描述一种优选形式的管理/映象S/88主存贮器16。图48A简洁示出由S/88操作系统建立的软件结构,以维护一个进程的虚地址空间。该软件结构包括以下单元:
Pte——进程表表目(代表一个进程)。
Pmb——进程映象块。链接在一起,它们包含指向该进程虚地
        址空间的apte。
pmbp——在pte中指向该链中第一个pmb的指针。
 pmt——过程映象入口(指向apte的指针)包含在pmb中。
 mme——实存贮器映象入口。包含在mme阵内。有一个mme
        用于该系统的实存贮器亦即存贮器16的每个4KB
        页。
apte——活动的页表入口,包含在apt块内,有一个apte用
        于该系统内每个独特的虚页。
 vpm——在进程的虚地址空间内的虚页号。
 pmt——进程管理表。在该pmt中有一个指向该系统各进程
        (pte)的指针。
ptep——指向一个进程的进程表入口指针。
图48A的存贮器映象结构由存贮器管理单元105使用(图10和47)。它包括一个或多个mme阵列(图48C),在本实施例中,每个都含有512个顺序的mme。每个mme代表实存贮器16的一个4KB页,因此,一个mme阵列代表512×4KB=2MB邻接的存贮器。
被标有存贮器映象阵列的方框(图47)概念性地示出按顺序地址次序排列的所有mme阵列。
mme通常扔到以下三个表的一个表内:
1)被用表,mme被分配给一个过程。
2)回收表,mme被返回到自由表。
3)自由表,mme可分配给一个进程,当mme从一个表到另一
          个表移动时,它们的指针适当地被更新。
如果它们不在一张表上,则它们表示固定连线的页或正处于过渡状态中。存储器管理单元105所使用的mme数据结构包括图48B所示的三个表指针,其中:
标志  连线               页是连线的
      I/O正在进行         磁盘I/O现在正进行
      写                 表示对这页面的上一次(或当前)I/O
                         是对磁盘的一次写入
      连接的             页在硬件寄存器中有一个PTW(物理
                         表示)
      修改               最后一次察看的修改位
      未用(2)
      逐出清除           通知岗哨将其清除
      未用(1)
      逐出释放           通知岗哨将此页消除並释放
      页面错误           某些Pf在这一页上等待
      下一mme            指向下一mme的ppn(物理页号)
      前一mme            指向前一mme的ppn
      地址               磁盘地址,但在内存中
      aptep              指向这一页的apte的指针
“下一”与“前一”mme字段用于建立链表(已用,回收,自由表)。
指向下一mme与前一mme的物理页号,当S/88的物理存储器被夺取用作S/370存储器区域时,可以如下文所述进行改变。在本较佳实施例中,每一个mmep数组(图48c)是一张128个指针的表,每一个指针是一个mme数组的一个虚拟地址。前n个指针是所有的mme数组的一张有序的表。剩下的128-n个指针为NULL(空)。这提供了记录128×2MB=256MB实存储器的能力。每一个这种指针包括一个物理地址的16个高位,称作一个物理页号(ppn),並用作指向一个指定的mme的一个指针。ppn的七个高位选择mme数组,而ppn的九个低位则选择数组中的mme。物理地址的12个低位是存储器16中的实(物理)页面中的一个位移量。
一个存储器映象信息(mem map info)结物(图48D)用于记录作映象用的存储器,其中:
mem map infop-1        指向第一个存储器映象信息结构
                       的指针
下一个mem map infop    指向下一个存储器映象信息结构
                       的指针
n页                    这一映象所用的实存储器的4k
                       大小页面的数目(最多16)
每页(16)               本结构的对照表是每页信息一个
                       数组
ppn                    这一页的mme的物理页号
活动页表项(apte)是用于登记虚拟存储器的。系统中的所有虚拟存储器空间中各4KB页虚拟存储器各有一个apte。apte结构(图48E)指明该虚拟空间的所有者,该页的虚拟地址,以及如果页被调出,磁盘地址所在的实存储器地址。
如果多于一个进程正在共享同一虚拟地址空间,则通过一个apte尾来标识所有的进程(图48G),而各虚拟页的apte指向该尾。
apte结构包括:
地址      实4K页面的地址      (标志mem赋值=1)
          如果这一apte        (标志mem赋值=0)
          下一自由apte的
          磁盘地址的地址
标志      每一进程           虚拟页不与其他进程共享
          派生的页           每进程页是派生的
          mem被赋值等待      页有存储器被指定等待这一
                             页
          I/O错误            在页上出现I/O错误
          释放apte           在I/O完成时释放这一
                             APTE
          CPU型修补          在引导时被修补
          坏地址,重新分配   错误强制的新地址
          计数               共享这一页的进程数
Vpage     虚拟页号,Vpn包括一个27位虚拟地址的16
          个高位。
进程指针  每进程的pte        (如果不是共享虚拟存储器)
(process     地址或者apt     (如果是共享的虚拟存储器)
ptr)      尾的地址
每一个apte是12字节长,每一活动页面表(apf)块中包含256个表项(图48F)。apte在一个块中的相对位置没有意义。所有未使用的apte串链在一张自由aptep表上。当需要增加apte而表已空,则在连线的堆中分配一个新的apt块;並将全体256个apte串链在自由表上。
apt尾(图48G)是用于共享程序区域的,它是被分配在连线的系统堆中的,並被一个EITE(可执行映象表表项)或一个apte所指向。每个程序有4个尾(每一区域一个尾)。系统在清除一个页面时通过尾可以找到所有指向该页面的PTW。
apt尾结构包括:
N进程数        使用这一尾的进程数
V基            (区域基Vpn)这一区域的第一虚拟页
n页数          区域中的页数
users          尾用户的位映象
PP信息(O:nnp)  这一结构的对照表是每一进程信息的一个
                 数组
npp             数组的大小
nptws          这一时刻所连接的PTW数
apfep          这一页的指向APTE的指针
进程表的表项(pte)(图48H)包含管理一个进程所必需的信息;包括有关该进程的虚拟地址空间的信息。每一进程表表项包括:
第一pmbptr           指向这一进程pmb表中的第
                     一个pmb的指针
map root tbl phys    物理映象的物理地址
addr
map root ptr phys   物理映象的虚拟地址
map root ptr virt   虚拟映象的象
Pdr ptr             每进程地址区域的地址
进程映象块结构(图48I)是用于将一个进程的虚拟空间映射到实存储器空间,並包括:
nexfp             指向这一进程的下一pmb的指针
base vpn          基虚拟页号,这一pmb的第一虚拟页
                  号(六个最低位为0。)
map addr          映象的物理地址
pme               进程映象表项0-63,这一结构的
                  对照表是一个每页信息的数组。这一
                  数组的下标是Vpn的六个最低位。
标志              已使用   已使用位的付
                  在内存   页在内存储器中
                  未使用(1)
                  篱笆       这一页是一个篱笆页
                  连线       当这一页进入时将其连线
                  写时复制   写入时复制该页
                  修补的     页为被修补的码页
                  Ufence     用户篱笆页
aptep             指向这一页的APTE的指针
进程管理表(图48J)中包含调度程序所用的信息,包括指向系统中所有进程的指针ptep的一张表,系统中可利用的页的数目,以及被提交的页的数目。
图48K的物理表字(ptw)包括:
ac1    ptw访问代码
ppn    所要求的页的物理页号
ac2    ptw访问代码
u      这一ptw已在使用3.启动过程
系统S/88包括一个启动过程,它为系统接通电源並将在一个启动文件上的程序与数据模块引导进来。
在自动启动时,可编程只读存储器(prom)181(图12)在系统/88与系统/370部件上运行诊断与自检程序。完成这些任务时,PROM181读入一个实用程序该程序从一个主磁盘(未示出)上装入S/88操作系统。
模块启动码初始化所有配置的设备与磁盘並从系统日历时钟设定内部时钟。这一文件包含有操作系统所执行的命令,这些命令是启动一个模块用的命令过程的一部分。这一过程包括下述功能:
读入表文件,该文件指定了与该模块相连接的插件板,磁盘和设备的配置;
在系统内部标识该模块;以及
启动各种系统服务进程。
这一模块文件提供给足以把一个新系统引进来的数据並可由用户修改以适应他的要求。为了从S/88主存储器16夺取一个S/370区域162-164,在模块启动码命令文件中插入了某些语句。例如,如果我们在图10的配置中设有三台S/370处理器21,23与25,27与29,31及为所述处理器设定了三个S/370存储器区域162,163与154则在模块启动码命令文件中插入下述语句:
Start S/370 processor  #1VM8megabytes
Start S/370 processor  #2AIZ4megabytes
Start S/370 processor  #3VSE16 megabytes4. S/370服务例程
每一条Start S/370命令导致执行一个软件例程,为各S/370处理器#1,#2或#3从存储器16“偷用”一块实存储器空间。然后适当的S/370操作系统将被IPL(初始程序装入)到“偷用”的实存储器空间中。这一软件例程的功能为从S/88存储器夺取存储器区域並在适当时候“替换”这些存储区域。五个子例程用于执行这些功能;
a)子例程S/370替换存储器从S/88操作系统表中抽取一块物理存储器,该块的基地址将在一个兆字节的界上,而其大小则将是兆字节的整数倍。用法declare S/370 displace_stor entry (binary(15),
                                   binary(15),
                                   binary(15);call S/370 displace stor(n blks,ppn,error code);
参数——nblkn(块数)(输入),所要求的连续的兆字
节数。
ppn(输出)
块中第一个最低或最高的4K页实存储器的物理页号。ppn的八个最低位为零,而该块的基实地址将为4096*ppn。
error_code
自由块不够——没有足够的连续的自由块可利用来替换至少
一兆字节。
提供不足——所替换的兆字节数少于所请求的。
b)子例程S/370退换存储器将一块物理存储器归还给
  S/88操作系统表。用法declare S/370 replace_stor entry(binary(15),
                                 binary(15),
                                 binary(15);
        call S/370 replace_stor(n_blks,
                                  ppn,
参数                              error_code);
 n_blks(块数)(输入)
   归还的连续的兆字节数
ppn(输入)
    块的基的物理页号。ppn的八个最低位必须为零。
 error-code(输出)
(不能自由连接)——在试图将存储器归还VOS之前必须也用
                  S/370 Close Storage)(关
                  闭存储器)。
c)子例程S/370 Open Storage(打开存储器)将一部
              分或全都以前被替换的存储器连接到调用
              者的虚拟地址空间並返回虚拟页号。建立
              每一个适当的apte和pme,以及建立
              虚到实的映射。访问码为“读/写”,且
          该存储器被连线。用法  declare    S/370 open_stor entry (binary(15)
                                    binary(15),
                                    binary(15),
                                    binary(15);
             call S/370 open_stor(n_blks,
                                  ppn,
                                  vpn,
                                  error_code);参数
n_blks(块数)(输入)
 所请求的连接的兆字节数。
ppn(输出)
 该区域中第一个4K页的物理页号。
 ppn的八个最低位将为零。
Vpn(输出)
 该区域中第一个4K页的虚拟页号。
 Vpn的八个最低位将为零,其虚拟地址为4096*Vpn
 error-code(输出)
 返回的错误码。d)   S/370关闭存储器(关闭存储器)子例程S/370
 关闭存储器将以前打开的物理存储器从调用者的虚拟地
 址空间中断开。对应的APTE与PME归还给S/88
 操作系统,並且使虚到实的映射无效。物理存储器归还给
 S/370替换存储器例程。用法declare             S/370 close_stor entry (binary(15)
                                       (binary(15)
                                       (binary(15)
                 call S/370 close_stor (n_blocks
                                       vpn,
                                       error_code);参数n_blks(块数)(输入)归还的连续兆字节数。Vpn(输入)所归还的区域中的第一个4K页的虚拟页号error-code(输出)返回的错误码e)  Gain Freedom(获得自由)是一个被START
370(启动370)程序所调用的子例程。它将
START_370程序置于S/88的管理态中使上述
四个子例程得以执行。一旦START_370处于管理
态中,便可以修改向量指针将存储器块从S/88操作系
统移走並将其重新分配给各S/370处理器。
这一子例程用于变更存储器分配並将S/88处理器中断
级6的手册上说明的向量进行改变。为了系统安全的原因
因,不给用户有关调用这一例程的知识也不允许用户访问
它。用法declare        S/370 gain_freedom entry (binary(15),
                                     binary(15);
          call S/3 70 gain_freedom (give_take,
                                    error_code);参数
give-take(输入)
取值为0时将调用者返回到应用用户态,而任何其它值将调用
者设置为管理态。
error-code(输出)
返回的错误码。上述子例程的操作步骤如下:
S/370替换存储器
1)获得自由,並封锁mme数组的自由表
2)在自由表中寻找最长的邻接自由mme的串。
3)将两头都归整到兆字节边界上並计算nblks,在串中
  的4KB块的数目
4)如果nblks>n_blks,将nblks设置为
  n_blks(所请求的4KB数)並修改基ppn界限
5)从自由表上松脱一个选定的mme串
6)从系统可资利用计数中减去n页
7)解封mme_array(mme数组)自由表,放弃自
  由
8)设置:ppn=基ppn
        rc=error 如果nblks<n_blks
  rc=error   如果nbls<=0
  rc=0       如果无错误S/370退换存储器(归还存储器)1)检验是否所有表项都不连线,若是则设置标志为0,並
将mme适当地链接在一起。如果存在问题则返回错误
码。2)gain-freedom(调用获得自由例程),封锁mme
arrays(mme数组)自由表3)从自由表中寻找链接mme的好位置
  a.第一候选位置是邻接于基ppn的位置
  b.第二候选位置是在表尾的位置4)将整个块链接到自由表上5)在系统可资利用计数上增加n页6)解封mme_arrays(mme数组)自由表,並
放弃自由S/370打开存储器1)找到这一进程的表项並在其虚拟存储器的一个pmb界
上寻找一个足够容纳n_blks(调用时指定的参
数)兆字节的空槽。确准是否有足够供替换的mme来
服务这一请求。如果存在问题则返回错误码。2)在必要时,分配连线空间给pmb与apte3)建立整个结构:
mme被连线与连接
mme,aptep→apte
  pme,aptep→apte
  适当地设置所有的标志
  apte,ptep→pte
4)将新构成的pmb链接到任务的pmb链上
  关闭存储器
1)找到这一进程的表项並找到S$o pen storage所
  构成的pmb。如果找不到则返回。
2)将这些pmb从进程的pmb链上解脱。
3)对于每一个apte,调用setup-ptw(子例程名)
  使实映射故障
4)将pmb与apte的连线空间归还给OS(操作系统)
5)将mme归还给替换存储器例程获得自由
1)得到give-take参数的地址
2)如果是放弃自由则跳转到7)
  下述步骤获得自由:
3)执行一个陷井13使OS返回到在管理态中的调用进程
4)取得用户栈指针并与系统栈指针交换。
5)在用户栈指针中保存系统栈地址
6)在用户栈上返回管理态中的调用进程
  下述步骤放弃自由
7)将保存的系统栈地址取回並交换给系统栈指针
8)替换用户栈指针中的用户栈地址
9)修改栈使陷井处理程序将返回到11
10)返回到陷井处理程序
11)陷井处理程序返回到用户
12)在用户栈上返回用户态的调用进程5.从自由表中脱开选定的mme串
FIRSTMME对应于要脱开的串中第一个mme,並且其ppn中包含它的ppn(物理页号)LASTMME对应于串的最后mme,如果FIRSTMME在自由表的头上(FIRSTMME的前一个mme字段等于0)则将自由表指针设置为等于LAST MME的下一个mme字段;从而LAST MME后面的mme现在处于自由表的头上。否则将FIRST MME前面那个mme的下一个mme字段设置成等于LAST MME的下一个mme字段。如果在LAST MME后面有mme(LAsTMME的mme的前一个mme字段设置为等于FIRST MME的前一个mme字段。6.在STCI中写入存储器基(地址)及大小
从S/88OS“偷用”存储器以后,根据配置文件中所说明的需要量将它划分给所有的S/370处理器,在S/88的核心存储器中建立一个配置数组其中包括各S/370处理器的基ppn及nblks名词nblks指连接的兆字节存储器数。它等于偷用(脱开的)的mme被256除所得的数。当各S/370处理器的EXEC370任务在其各自的S/88处理器中启动时,它使用对应的基ppn与nblks值组成一个STCI字。然后将这一字写入虚拟地址007E01FC(在本地存储器210地址空间中)使得STCI寄存器404与405(图32B)的初始化对S/88操作系统透明。
上面根据图19A,20中所描述的解耦机构216与BCU接口逻辑253被用于初始化寄存器404,405。
然而,在本较佳实施例中,如图32B所示,寄存器404,405是直接与S/88处理器数据总线161D相耦合的(而不是耦合到BCU本地数据总线223上的)。逻辑216的译码逻辑280将上述虚拟地址译码到来自S/88硬件的块AS並将DSACK归还给处理器62。寄存器404,405是通过来自逻辑253的STCI选择线起动的。STCI字的27-24位构成该STCI的“基”地址而23-20构成S/370存储器“大小”值。位19-0为O。
S/370启动的S/88中断的初始化功能
有各种不同的方案可用于将S1370的中断引导到常驻在S188中的S1370中断处理程序微码而不使S188操作系统知道。下面将封论其中的三种方案。
第一种方法包括对S/88操作系统核心进行修改,将S/370中断处理程序代码插入S/88操作系统第一级中断处理程序使其作为目标模块的组成部分进行汇编。中断向量表包括在中断处理程序的汇编源程序中,並且S/370所用的向量在源程序中被修改成指向S370中断处理程序代码。
这一方法与下述S/88体系结构的方法大相经庭:
1)每一个中断设备都必须登录到一个文件中,此文件将此设备、
  该设备的路径名、以及插件地址等标识给S/88操作系统。
2)当第一级中断处理程序接收到该中断时,它建立适当格式的
  栈,保存所有的机器状态与寄存器,检验该中断的合法性,
  並且将该中断传递给一个“第二级”中断处理程序,该第二
  级中断处理程序调用研制人员专门编写的设备中断代码。
3)当中断代码结束时,它将控制返回到操作系统中断处理程
  序,后者负责恢复环境。
上述第一种方法绕过了所有这一切,把S/370中断向量汇编成指向S/370中断例程,利用这种方法我们避免了S/88操作系统所执行的全部正常中断处理,而没有必要通过设备文件标识S/370。这实际上是一种软件解耦,因为改变的是代码而不是硬件。这第一种方法是最快最省钱的方法去达到所想要的中断功能。然而,这一方法在S/88操作系统的以后每一次发布时都需要额外的维护。它至少需要一次与核心的结合;以及,如果中断处理程序已经改变,则必须将S/370中断代码重新插入,而中断处理程序则必须重新汇编。
第二种方法包括在引导系统以后修改操作系统的中断向量;而在描述图20的硬件中断机构时新蕴含的方法便是这一方法。
这第二种方法要求将S/370中断代码放置在S/88操作系统虚拟地址空间中(在本较佳实施例中,在007E0000正下方)以及对操作系统核心中断处理程序中的适当中断向量进行修改。这一工作是在操作系统初始化以后由S/370初始化例程进行的(与S/370初始化例程“偷用”存储器同时)。由于初始化例程是在修改S/88操作系统核心存储器区域,它必须以上文所描述的用于“偷用”存储器的方式“获得自由”。这第二方法不需要对每一个新发布的S/88操作系统核心进行维护修改。然而,S/370中断在S/88操作系统启动和运行以前是不能工作的。
第三种方法包括中断向量内容的硬件表示;而这是一种较佳的选择,因为不需要在S/88操作系统核心中进行修改,即,不改变向量表。
这第三种方法要求将S/370中断例程放置在S/88操作系统虚拟地址空间与/或BCU本地存储器中作为一个已知的只读存储器(ROS)地址。中断例程地址必须对S/370硬件是可利用的,最好在ROS中。下述方案用于展现这一方法:
1)S/370(例如BCU156中的DMAC209)发动
  中断请求。
2)S/88处理单元62激活中断确认,数据选通与地址选
  通。
3)BCU将一个中断向量号(为了容易辨认可以是全O或者
  进入ROS向量空间中的位移量)放置在数据总线223
  並激活数据选通确认。这一向量号除了正确奇偶校验以外
  对处理器62没有任何影响。
4)最终,处理器62将执行一个存储器读周期以获得该4字
  节中断向量,
5)BCU识别这一特定的存储器访问(用该虚拟地址),将
  处理器62从访问存储器中解耦並将其本身的4字节中断
  向量提出(从S/370ROS选通)。S/370
  ROS包含着所需要的所有向量,几个用于DMAC,一
  个用于ROS插件同步等等。
这第三方法为了同步S/370硬件等目的允许在插件同步中解耦。然而,这一方法需要较多的硬件。
不修改S/88操作系统而获得自由
在上文的“启动S/370服务例程”中给出的一种方法描述了应用程序如何能获得自由,即,获得管理态。它包括编写一个专用的OS服务调用“陷井13指令”例程,並将其加入进S/88OS(操作系统)核心中。
这一陷井13中断例程除了在紧随陷井指令之后的位置上调用发布该陷井的程序以外不进行任何其它操作。由于该陷井中断例程是在管理态中,从属的程序将变成管理态。为了重获应用程序态,应用程序修改中断栈返回地址,並从陷井13的“调用”返回到陷井13中断代码,该代码使用修改后的中断栈地址退出中断。这一方法包含在S/88OS(操作系统)中增加一个中断例程。
第二种方法消除了对从属于OS的修改。在BCU控制存储器地址空间中定义了一个专用寄存器(未示出),当应用程序对它进行写入时,它使用上面给出的实现中断的第三种方法产生一个新的BCU中断。应用中断例程是常驻在BCU只读存储器(未示出)中的並同陷井13代码同样地工作。上文所述的获得自由例程除了它不是发布一条陷井13指令而是写入BCU专用寄存器以外,它与陷井13完全相同地工作。
不修改S/88OS(操作系统)而偷用存储器
利用这第二种获得自由的实现,“偷用存储器”不要求对任何S/88源码进行重新汇编或者连接S/88OS的核心。自由表头的地址对于应用程序是可以利用的。
接通电源以及单机和伙伴单元21,23(图49,50)的同步
(S/88处理单元作为S/370处理单元的一种服务处理器)
1.前言
本节中将参照图49与50简要说明用于诸如图7中的21,23的伙伴单元的同步的确定环境的状态,以及控制和设置环境的某些硬件寄存器,锁存器及逻辑电路。
此外还将说明用于完成单机与伙伴单元的初始化,同步,与再同步的某些微码功能。首先把注意力放在系统/88上(本较佳实施例),它在单机与结成伙伴单元的环境中的S/88处理单元的初始化与同步基本上並不改变的情况下进行工作。这种操作方法将只作简要的说明。此外里德(Reid)专利中的某些有关描述将在此复述。
错误检验工作与单元21的各个S/88处理单元60,62(图8)驱动A总线42与B总线44的工作同时进行。这一並发操作不同于处理器模块9中的I/O单元,后者在驱动总线结构之前实现一个错误检验。处理单元21以这种方式操作是因为定时在这里是十分重要的,任何操作上的延迟对于系统吞吐量来说都是不能容忍的。检验逻辑单元正在驱动总线结构时注意到一个错误使该单元在系统时钟的下一个相位向X总线46中发出一个A总线错误信号与一个B总线错误信号。
在同一个时间相位中,出故障的中央处理单元(例如21)向X总线46发出一个1级维护中断,该中断被伙伴中央处理单元(例如23)所接收。在这一时间相位的结尾,出故障的单元脱机,变为除了回答来自伙伴中央处理单元的询问以外不能再向总线结构30发出信号。这一自动脱机操作保证了任何读或写周期都被缩短了,无论是对存储器单元16,18或者是通过一个控制单元对一个外部设备的读/写,只要在该周期中在A总线或B总线上的地址或数据中检测到一个错误,自动脱机操作都能缩其周期。此外,在该同一操作周期中的任何数据传输都只使用伙伴中央处理单元进行重复。
具体地说,比较器12f对处理部分12a从A总线42所接收的输入数据与处理部分12b从B总线44上接收的输入数据进行比较。它也对处理部分12a施加在收发器上的功能、地址与数据信号(包括奇偶校验)与处理部分12b所生成的对应信号进行比较。部分12a的定时与控制信号与来自部分12b的对应信号进行比较。这一对内部控制信号的比较操作检验处理单元60,62的内部操作並加速了故障检测,並且在处理器单元的诊断与维护中有用处。
任何时候只要输入比较器12f的一个或多个输入信号不一致,该比较器便生成一个施加到控制部件86上的Compare Error(比较错误)信号。这一错误可能是一个输入数据错误,一个输出数据错误,一个功能错误或者一个地址错误所造成的后果。它也可能是由于不同的定时或控制信号导致的一个周期错误或者一个控制错误。奇偶校验电路检测到的一个错误生成一个作用在控制部件86上的Parity Error(奇偶校验错误)信号。控制部件86响应该Compare Iuvalid(比较元效)信号与PartyInvalid((奇偶校验无效)信号,在下一个时钟相位(N+1),生成一个Processor Error(处理器错误)信号。这一操作的一个例外出现在当在读操作中由于对输入数据信号的无效比较而造成CompareInvalid(比较无效)信号时,在这一情况下,只有当没有BusError(总线错误)信号在下一定时相位生成时,控制部件86才生成Processor Error(处理器错误)信号。一个Bus Error(总线错误)信号表明总线结构30中的一个故障状态从而说明输入数据的无效比较是总线结构30的A总线部分或B总线部分的一个故障的后果而不是两个处理部分12b中之一的故障。Processor Error(处理器错误)信号的一个功能是阻塞逻辑电路,从而基本上停止单元21的处理部分12中的所有操作。此外,A Bus Error(A总线错误)信号及B Bus Error(B总线错误)信号是作用在X总线46上向模块9中的所有单元发信号,通知它们忽略紧接着前一个相位放置在该总线上的信息,例如忽视CPU总线传输。施加到X总线46一个1级中断信号通知伙伴处理单元23在该模块中的某单元上检测到一个故障生成的错误。
在该相位(N+2)开始时,部件86,仍然在响应该故障信号中,它中止确认了的总线主控状态。这一行动是伴随着总线错误信号的中止而发生的。当处理部分12关掉主控状态时,它阻塞了收发器12e中的所有总线驱动器。每当收发器12e的总线驱动器被阻塞时S/370收发器13驱动器也通过公共控制75被阻塞。同样,在单元21的控制部分75生成一个处理器错误信号的情况下,收发器12e(通过控制部件86)以及收发器13也被阻塞。
从而,只有在主控状态中处理单元21,23才能驱动总线结构,这是因为主控状态是生成作用在驱动器上的总线启动(BusEnable)准号时的必要状态,处理器错误信号迅速地,即在第二个定时相位的结尾,关掉主控状态。在单元21的处理部分12生成一个处理器错误信号的情况下,伙伴单元23的S/88处理部分基本上不中断地继续操作。当在一个写操作中出现处理器错误信号时,伙伴处理单元23重复这一数据传输。当在一个读操作中出现处理错误时时,伙伴单元读入重复数据。该数据是存储器在接下来的定时相位上施加在总线结构上的。
此外,伙伴处理单元23响应1级中断(这是一个低优先级中断)启动一个诊断例程。在处理器错误的原因表现为一种暂时现象的情况下,即,诊断例程并不标识或定位任何故障或错误状态的情况下,处理单元21可以不经维护便恢复操作。在一个较佳实施例中,记录瞬时故障的发生,如果这一故障重复出现了一个任意的予定次数以后,便将处理器从服务或操作中电气地拆除而不再对它进行诊断。
单元21,23的各个处理部分12通常在处理器状态与控制部件86中包括有逻辑电路,这些逻辑电路用于使两个伙伴单元进入步调一致的同步中。部分12与转移到主控状态同时获得步调一致的同步,各部分12必须在主控状态中才能将信号发送到总线结构上,存储在各PROM181中的初始化序列典型地包括用于使结成伙伴的部分进入同步以及保证初始时(即刚接通电源时)没有一个处理部分是在主控状态中的指令。
开始时,在初始化序列中单元21,23的处理部分16並不同步,而是一个单元先于另一单元在一个多相周期中达到主控状态。得到主控状态的一个单元控制另一个单元的进一步初始化操作,以在一个选定的时间将其带进主控状态中。
当单元21的处理部分12被初始化时,它将一个内部ErrorCheck(错误检验)信号求反,从而防止一个奇偶校验无效信号或一个比较无效信号生成一个处理器停顿(Procssor Hold)信号。反之,部分12执行一般存储在PROM181中的一个测试例程,该例程测试所有能生成处理器错误信号的条件。由于各种潜在的故障条件都被建立了,处理部分借此来测试是否对应的故障报告信号是真的生成的。因此错误检验信号的不存在禁止了处理单元得到主控状态,其结果是在这一逻辑测试例程中所生成的故障並不停止该处理单元也不报告给总线结构30。在PROM181中的测试例程认定该错误检验信号並且只有在这一测试例程成功完成时才使处理器承担主控状态。
S/370处理单元有(就本较佳实施例而言)在一般情况下通过一个“后门”存取来做初始化与服务性处理器功能的硬件,“后门”存取是指存取各种部件与各个片子上的逻辑电路。由于这些都是众所周知的,将只对它们作简要说明。
同样,用于自检与初始化的程序例程也是众所周知的而不需要详细说明。本节所要强调的是这样一种机构,借此,典型的S/370自检与初始化是通过S/88完成的而S/370或S/88操作系统都不知这种变化。在本较佳实施例中,S/370的自检与初始化例程(STIR)是与对S/370中结成伙伴的单元中的处理单元实施同步的例程一起放置在PROM181中的(图19C)。所以S/88作为S/370的服务处理器工作。在PROM181中的S/88代码的存储器映射的I/O分配是提供来在执行S/370代码时需要某些S/88状态或其它寄存器内容时使用的。
使这一代码进入同步的方式是指将第一个(主)伙伴处理单元(例如21,在正常操作着的一个)中的寄存器组的存储器映射付本传送给第二(辅)处理单元(例加23,还没有正常操作的一个)中的寄存器组。
在详细说明用于同步机构的S/88至S/370耦合路径以前,先给出图7中模块9的结构与环境的一个简要回顾。S188操作系统的特色例如容错与单一系统映象在S/88与S/370结构中都得到了保留。模块9由一个或多个单机S/370处理单元(例如21)或伙伴S/370处理单元对(例如21,23)组成。S/88单机或伙伴单元例如12或14可以包括在模块中只用于执行S/88程序。
各S/370处理单元包含一对S/370处理器单元例如85,87及一对S/88处理器单元例如62,64,如图7所示;並且这些处理器对步调一致地操作,如同一个单一的逻辑处理单元一般。伙伴单元构成一个互相步调一致地操作冗余以提供完全容错,自检的逻辑处理单元设计。
一对中的每一S/370处理器单元85,87有一部分是用一个S/370芯片组例如150构成的(图11)。S/370芯片组与它们的相关硬件被安装在一个S/88型的插件板上,例如101(图9A),用于与S/88总线结构30耦合;並且它们通过接口逻辑电路89与91(图8)与各自的S/88处理单元耦合。在本节中,一个处理单元(例如21)中的S/370芯片组对与它们相关的硬件而言将称作为一个S/370实体;而它们对应的S/88处理单元(例如60,62)与相关的硬件将被称为一个S/88实体。S/370实体执行S/370应用程序並在必要时调用S/88实体去完成S/370I/O操作,这些I/O操作是使用S/88I/O设备与程序来执行的,而S/88与S/370操作系统互不知道对方的存在。
2.容错硬件同步
S/88-S/370处理单元的较独特与突出的特性之一便是任何处理单元(例如21),根据其当前正在工作的伙伴23来确定自身的同步。各单元的S/88实体具有能力並负责对一个新的或产生了错误的伙伴进行同步。当一个单元的一个S/88实体承担这一贵任时,它被称作“主实体”。它的被同步的伙伴则称作“从属实体”。
S/88硬件/固件结构确定什么时候需要同步和由谁对准进行同步。互连的S/88-S/370硬件/固件使用这一相同智能在同步确定中服从S/88的领导。即,每当S/88确定一个S/88(从属)实体需要与其伙伴(主实体)同步时,这一同步被允许进行到S/88从属实体被“分离”后的一个适当的点上;然后执行被转移到对应的S/370实体上。S1370实体被来自PROM181的S/88PE执行代码所同步以获得S/370主控状态並在两个S/370伙伴上恢复这一状态。
在处理单元的同步中伙伴对中任何一个都可能担当主实体或从属实体的角色,不论这一要求是由一个初始电源接通,一个新伙伴的出现,或者从导致两个存在的伙伴失去同步的一个错误状态中恢复时所提出的(在每一情况中迫使一个维护中断)。在每一情况中,S/88从属实体知道自己的地位,並在同步中依赖S/88主实体。
S/88主实体与从属实体根据维护中断发出时它们各自的状态扮演它们各自的角色。所有处理单元的S/88实体各自认为自己是一个从属实体来检测和处理这一中断直到建立起一个补缺的主实体。这一主实体然后将任何掌握的从实体放进一致的步调中,各实体重新取得主实体的优先占用环境(从中断返回时)
类似地,S/88实体将处理器从其它逻辑中解耦,使用这些处理器仿真S/370SP功能借此在S/370伙伴对中建立一个完全一样的优先占用状态,然后重新建立正常执行环境並允许S/370伙伴对开始以一致的步调执行。
不需要同步的一种情况:
一个单机处理单元被接通电源,即单个的单元例如21;
需要同步的情况是:
双联的处理单元(例如,21,23)被接通电源;
在其伙伴23正常处理中插入一个单元21;以及
一个处理单元例如21在其伙伴23中检测到一个比较故障並企图进行恢复。
S/88实体具有适当的硬件设施用于建立同步。S/370处理部分具有足够的硬件和软件协助使一个从实体能被初始化为与主实体完全相同的状态。这包括这样一些特性如读/写状态寄存器,可读形式寄存器,可清高速缓冲存储器,可停时钟以及环形计数器等。
当单元21中正常操作中的一个S/370实体被要求与其伙伴单元23中的对应S/370实体同步时,必须使伙伴S/370实体进入与正常操作中的实体相同的状态。在本较佳实施例中这一进程被简化为从S/88处理器60,62(在PROM181中的S/370初始化与同步微码的控制下)向S/370处理器85,87送一个Queue Select Up(队列选取)消息。这一消息停止用户应用程序在同步时间内通过操作系统向BCU(例如156)提出更多的服务请求。它同时允许执行完成所有未完成的I/O操作。
这将正常操作中的S1370实体带入一种状态,这种状态被复制到存储器162中供两个S1370实体在“离开”时使用。这时,在S1370处理器,S1370高速缓冲存储器,DLAT,及S1370总线适配器中的所有寄存器,计数器,指针及缓冲区(上下文)被复制到存储器162中的一个有序栈中。当同步进程被启动时,所有4台物理处理器都从这一公共栈中将这些上下文装入所有4台处理器中而恢复该S1370上下文。两台处理器将在它们的寄存器,计数器与缓冲区中装入相同的数据,然后开始步调一致地或者完全同步执行程序。
S/370处理实体提供两种方法来同步地访问各个寄存器和高速缓冲存储器。一种是正常的用户编程读/写方法,它利用了把BCU本地数据总线223耦合到适配器154的通道0,1上的寄存器560和561(图4)。另一种是一个串行“后门”集成支持设施(ISF)/通用支持接口(USI)(540,541)方式。通过模仿S/370芯片组服务处理器的串行接口/协议(ISF/USI),S/88实体的同步机构可访问任何和所有与S/370连结的装置。当需要一个或多个S/370实体同步时,可采用两种方法。正常通路存在时就采用正常通路,否则就采用USI通路。
值得注意的是,此部分的同步和初始化(对于S/370实体而言)相对于S/88操作系统必须是透明的,该操作系统不知道S/370实体的存在或对其的联接。实成这种透明方式大致类似于上述的S/370I/O操作中的情况。就是说,图20中的地址译码逻辑280在每次要进行S/88处理器62与图49的逻辑之间的传输时检测一个地址007EXXXX。当逻辑280对该地址译码时,如前面讲过的一样,它将S/88处理器总线161A,161D通过电路217,218耦合到本地BCU地址和数据总线247,223。寄存器地址译码逻辑562对总线247上的地址的低位译码,来选择逻辑电路549,550或寄存器560,561中的一个,以便对处理器62进行数据传送。
另外,线562,563上的中断信号通过或电路292a送到图20中的S/88中断逻辑212。当逻辑549已经接到S/370芯发出的要传往处理器62的数据时,在线562上开启中断请求信号。线563上的一个中断请求信号通知处理器62从逻辑550至S/370芯片的数据传送已经完成。线562上的一个中断请求信号通知处理器62逻辑549已经从S/370芯片接收到要向处理器62传送的数据。这些中断请求在线258d和258c上分别出现一个IACK信号之前一直保持在线562和563上。当图20中的IACK信号258d和258e分别触发逻辑564和565时,则从中得到这些中断的向量数。处理元件62利用该向量数分别访问中断处理子程序。
图49的S/370集成支持设施(ISF)540给芯片组150的逻辑提供一个“后门”项目。ISF包括一个与线支持总线541,它与芯片85和151-154上集成的单元支持接口(USIS)相连。图49表示了芯片85上的USI542的一部分。
支持总线541代表了一个有下面与线的串行接口:
BIT OUT(到芯片组的数据)线543
BIT IN(来自芯片组的数据)线544
ADDRESSMODE(控制)线545
SHIFT GATE(控制)线546
SET·PULSE(控制)线547
ADDR-MODE线545在BIT OUT/BITIN线543,544上发出串行传输位(高位)或数据位(低位)的信号。线543,544是移位寄存器(例如逻辑549,550中的芯片内的548和外部移位寄存器)之间的联结。施加到移位选通线546上的脉冲数决定了内部寄存器548和外部寄存器549,550之一间的移位数。
SET PULSE用来按照刚移入芯片的地址和数据模式来同步芯片内的操作。在移位结束之后启动SET PULSE,以通知在芯片这一边(如寄存器548中)可以得到信息。这意味着此刻可以按该信息开始动作。
下列说明了该操作。对一特定地址模式指定一个开始功能。该地址被移入寄存器(如每个芯片中的548)。当所有地址位已经传送之后,芯片之一中的地址译码551检测其地址。SET PULSE跟随该地址传送之后出现。地址译码和SET PULSE在门55552的输出输形成一芯片内部启动脉冲。
USI的芯片具体部分包括从具体芯片设计中获得的控制和数据链。为了保持存储元件当前状态不被移位操作影响,在开始任何USI活动之前必须停止功能时钟。需要有时钟停顿条件的USI访问被定义为“静态”。芯片处于操作时所能执行的操作是动态访问或功能。
SET PULSE用来同步芯片内部时序的功能。根据SERDES寄存器中的地址模式和数据模式对功能进行译码,另外由ADDR MODE线(地址或数据方式)选通:
将芯片状态置成SERDES
将模式寄存器置成SERDES
从SERDES装入模式寄存器
置支持传送请求锁存器(SPR)
处理器控制的请求锁存器(PCR)清零
支持单个芯片所需的附加动态功能。
ISF的五线串行总线541(它提供对S/370芯片组150内的各种可编程实体的“后门”访问)耦合到每个芯片的USI,例如芯片85的USI542。USI542提供一个8位地址寄存器566和一个8位并串转换器/串并转换器(SERDES)548。当SERDES548是实际接/收机构时,USI地址寄存器566接收芯片的地址和芯片中目标实体的地址。USI为移入/移出机构提供同步逻辑。
S/370芯片组150内的每个芯片都被指定了一个4位(高位)ISF/USI地址,例如对于PE85,高速缓冲存储器控制器153,时钟152,适配器154,浮点协同处理器151和STCI155各组被指定了十六进制值2,4,6,8和A及B。ISF/USI地址的低4位定义了低4位编址的内部芯片实体(例如寄存器,功能和链)。
通讯模式包括移位链(也称功能链),移位链又包括识别芯片内的命令,源芯片,目的芯片,数据和目标实体的字段。移位链如下:
位0-7   功能/命令
  8-11  源(控制)单元
  12-15    目标(受检/受控)单元
  16-23    信息/数据
  24-27    受控(被写入)寄存器
  28-31    受检(读)寄存器
这些功能链称为移位链是因为ISF/USI的串行持性和链必须从逻辑549,550和SERDES寄存器(例如548)移入移出。
功能链的命令字段可包括写/控制命令(E61)或读/检测命令(F61)。一个功能链的例子如下:
E602XX10=写入处理器85的模式寄存器。
其中E6=命令=写入
0=源地址-PE62,用于检测
2=目标-PE85
XX=信息(数据)
1=受控寄存器(模式寄存器)
0=检测寄存器(由于命令是“写”,所以没有)
建立此处所述的同步的方法利用了存于PROM181中的S/88程序码。该码联系每个上述四种条件作出决定并相应地置标志位。同步子程序使用这些标志控制编码通路,以便执行适当同步和/或初始化操作。几个例子如下:
确定一个特定S/88板上的存储器是否已被一个电源故障所危害并需要其伙伴重新初始化。
确定一个特定S/88板是否应当承担缺席的处理单元(DMPU)的任务。
下面3-6部分说明两个不同的同步机构的执行原理。一个是硬件协助的,并允许快速的“时间—准备好”(time-to-ready)过程。该方式当然需要至少在S/370实体中的附加控制电路,通过把一些S/88控制电路物理地暴露给S/370“接口”还可以扩展其已定义过的能力。这个接口实际上是S/370电路对S/88电路的附加部件。
所定义的另一执行方式只是微码,允许S/88处理器单元模仿一个S/370服务处理器,进行S/370同步处理。当性能和“时间—准备好”并不十分重要时可采用此技术。
3.一个单工处理单元被接至电源(硬件执行)。
下面两种条件皆可引起此情况:
1.开机/引导的结果使此单元联机。
2.电源故障恢复引至该单元联机。
对每种条件,编码通路都一样:
单元21的S/88实体执行其自检和初始化子程序(STIR)的一部分、然后试图确定是否其相关存储器16的内容已经被危害(电源故障)。如果如此,它便回到开机STIR通路。如果不是,它试图确定是否有一个伙伴或协作驻留处理单元(它可以是DMPU)。如果发现了一个,它将承担DMPU的责任并试图同步其他任何处理单元。
单元21的S/370实体仅仅跟随S/88实体。这是由S/88处理器62所保障的,它执行S/88 PROM181中的码,完成正常自检,确定这是一个初始开机或是一个电源故障恢复。如果是一个开机,它继续正常初始化,然后承担DMPU,试图发出一个SYNC信号。该信号由S/370逻辑俘获,它强制S/88处理器进行第6级中断。该中断6将指向S/88 PROM181(图19A)中的S/370同步微码(它被映射在S/88的地址空间)。
同时,从开机/引导开始,S/370PE已经执行其自己的STIR,然后在其同步点暂停其执行。在此时,S/370时钟152也已经对自己初始化。S/88第6级中断服务子程序(ISS)(即S/370同步微码)利用图44的ISF/USI接口模仿S/370服务处理器。该SP仿真器将发出功能串,请求S/370控制存储器171的IML功能,尽管没有实际码传送发生(微码是在S/88 PROM181中)。IML仿真的下一步是把SYNC送到S/370实体(处理器85和87),使处理单元开始执行。ISS的最后一步是中断返回,处理单元以开始执行IPL状态。
作为S/88处理单元“模块开始命令”执行的一部分,一个仿真服务处理器的“IPL按钮按下”功能串将被送到S/370处理单元以执行IPL功能,从盘中装入S/370主存储器。然后IPL的最后步骤是把控制交给由位置0定义的地址。
B.只用微码的实施
单元21的S/88实体执行其自检,初始化子程序(STIR)然后确定这是初始开机(IPO还是电源故障恢复(PFR),如果是IPO,该码确定单元21是单工实体,并开始装入操作系统,执行其“开始”子程序。
如果是PFR,该码确定是否其相关存储器的完整性已受到危害,如果是这样,则把它假定为IPO的情况。如果发现存储器内容完整无损,PFR进行正常重起动任务。
无论上述哪种情况,同步功能开始一种“虚”操作,正像没有相关伙伴要同步一样。
4.双工处理单元21,23开机(硬件实施)
下面任一种条件都可引起该情况:
1.开机/引导使这些单元联机。
2.电源故障恢复导致这些单元联机。
每个处理单元21,23的S/88实体执行其自检的和初始化子程序(STIR)的一部分,然后试图确定是否其相关存储器16的内容受到危害(电源故障状态)。如果是,它将回到正常开机STIR通路。如果不是,它将试图确定它有无一个伙伴或协作留驻的处理单元(可以是DMPU)或确定它是不是DMPU。如果是,它将承担DMPU的责任,试图同步任何其它处理单元。如果不是DMPU,它将进行到同步点并等待SYNC。
每个S/370实体仅仅跟随S/88实体的引导。S/88实体执行PROM181中的码,完成正常自检,然后确定这是一个开机还是一个电源故障恢复。如果是开机,它继续正常初始化,然后进入同步点。如果是电源故障恢复,检查高速缓冲存储器,确定它是否有效。如果是,则在其伙伴的高速缓冲存储器无效时,可能要更新其伙伴的存储器。如果其自身的高速缓冲存储器无效,则要依赖伙伴,用有效高速缓存储器内更新。如果伙伴也不保证有效存储器,作为一对,它们必须继续正常开机和初始化。当处理单元对的S/88实体接近同步时,每个S/88实体确定它是否必须承担DMPU的责任。如果发现它是DMPU,则试图发出SYNC。
S/370逻辑俘获该同步信号并强制给S/88实体一个六级中断。该中断将指向PROM181的S/370同步微码(它映射进S/88地址空间)。同时,根据开机/引导,S/370实体(如处理元件85,87)已经执行它自己的STIR,然后在其同步暂停。如果是一个电源故障恢复,S/370实体通过一个与S/88实体过程类似的过程,判断它回到初始化子程序必须走多远,以便保证存储器完整性和同步。在此期间,S/370时钟153已对自身初始化。
参照图20,49,50,下面将简单说明S/370处理器俘获S/88SYNC脉冲的最佳机构。
图50中,单元23的处理器S/88对之一发出SYNCOUT信号,使S/88处理器完成同步。如果伙伴已经被初始化和自检,并被确定没有BROKEN,它则有一个BROKEN线571上的信号电平,电路572对它反相,通过“与非”门573对SYNC OUT信号选通。
在原系统88(例如模块10)中,通过线577和反相器574,SYNC信号被送到单元14的驱动S/88处理器的SYNC IN线580,通过C总线和反相器576它还被送给单元12的检查S/88处理器的SYNC IN线575,以使锁定步骤中单元12,14的所有四个S/88处理器“启动”。
在改善的S/370-S/88单元(如21,23)中,电路573的输出577与SYNCIN线580及575断开以防止S/88处理器的“启动”,但是它通过线581与图49中伙伴单元21的BCU156中的触发器582相连,对其进行置位,它还对单元21中的成对BCU(未画出)中一个相应触发器置位。下面将仅说明单元21中的一个S/370和相关硬件,但两个S/370实体是以类似方式操作的。
触发器582通过线583、“或”电路292a和292(图20),中断逻辑293和线IPO-2送给S/88处理器62一个六级中断信号。该行为称作S/370“俘获”S/88SYNC信号。
现假定单元21S/370实体已经成功地执行了自检和初始化子程序(STIR),并准备对了“启动”。
正如在图20中对其它DMAC和BCU六级中断所述的一样,S/88处理器62产生一个中断确认周期,以响应线583上的SYNC信号。逻辑281对处理器62来的功能码和优先级信号码,通过译码逻辑281的输出283和门291,线287和“或”电路284在线190上产生一个本地BCU总线请求。
当把一个总线周期授予线191上的处理器62时,它与SYNC线583、AS线270和译码线283上的信号一起启动“与”门294-4,以把一个信号送给IACK线258f。该信号送给图49的向量位逻辑584,通过BCU本地总线223,驱动器接收218和处理器总线161D把适当向量号送给S/88处理器62。线258f上的信号还对触发器582复位。
如果像假设的那样S/370STIR功能已经完成,S/88处理器执行一个读周期去获得向量号,然后利用它访问S/370同步中断例行程序的第一条指令。
同步例行程序的最后一条指令产生把SYNC信号送到线586(图50)的SYNC命令。
该信号送到SYNC线580和575,在锁定步骤中,“启动”伙伴单元21,23的S/88(以及S/370)处理器。
作为执行S/88“模块起动命令”的一部分,一个仿真SP“IML按钮按下”功能串将被送给单元21,23中的S/370实体。与执行DASD访问等等的全部IML功能不同,这个IML将旁路I/O过程并从S/88主存中装入。E×EC370码将已经从DASD取出IPL码,并存于S/88主存之中,等待IPL。IPL的最后步骤是对存储单元“O”指定的地址进行控制。
B.仅用微码的实施
作为初始开机(IPO)的结果或是电源故障恢复(PFR)的结果,PU板被加电。
首先说明IPO的情况:
当IPO确定了S/88电源良好的信号之后,一个维持中断就请求S/88 PROM181码。此码对单元21的S/88实体进行同步,然后调也存于PROM181中的S/370STIR。S/370STIR确定出这是一个IPO还没有装入足够的设施使它能作初始化和同步,这是因为S/370STIR需要S/88的设施和其操作系统来作初始化和同步。结果,S/370STIR不做任何事便回到S/88 PROM181码,该码开始对O/S进行装入。作为O/S初始化的一部分,调用一个“起动”模块,该模块也调用存于PROM181中的S/370STIR。此时,STIR确定需要的设施已可以使用了,并使用它住对初始微码装入本身进行同步。
其次,对于PFR的情况作以下说明:
IPO确定了S/88电源良好的信号之后,一个维持中断请求S/88 PROM181码。此码对单元21的S/88实体进行同步,然后调用也存于PROM181中的S/370STIR。S/370STIR确定这是一个PFR,需要的设施已经可用,并开始对S/370或单元21进行同步和初始化。
5.当其它单元21正常处理时插入一个伙伴23。
A.硬作实施
插入新板时,一个六级中断将送至当前单元21的S/88实体。当新处理单元运行其STIR时,当前处理单元将识别该六级中断。该六级中断将着手对予占(Pre-empted)任务的环境存档,确定新处理单元是否联机。如果是,则从中断返回。作为中断返回功能,这两个单元将进行锁步式的同步,恢复予占任务。
B.仅仅微码实施
作为新板插入的结果,一个维持中断去请求S/88 PROM181码。该码对单元21的S/88实体进行再同步,然后调用亦存子PROM181中的S/370STIR。S/370STIR确定这与一个PFR类似,而且需要的设施可以使用,于是就开始对单元21的S/370的初始化和同步操作。
6.伙伴发现了比较故障
故障的处理单元将强迫进入其STIR,而正常的处理单元将被强制六级中断所中断。该六级中断服务子程序将着手把予占任务环境存档,确定新处理单元是否联机,如果是,则回到中断。作为返回中断功能,两个单元将进入锁步式的同步,恢复予占任务。如果故障处理单元没有正确退出其STIR(例如一次或几次尝试),正常工作的处理单元在一个适当时间之后对故障处理单元的S/88部分和其各个状态报告设施置BROKEN。
B.仅仅微码实施
由于发现了比较故障和板子松脱,一个维持中断便请求S/88PROM181码。该码对单元21的S/88进行再同步,然后调用亦存于PROM181中的S/370STIR。S/370STIR确定这类似于一个PFR,而且需要的设施可以使用,于是对单元21的S/370实体同步和初始化。另外的比较故障将使同样的动作重复。预定次数的重复之后,该板将永久脱机,并报告故障。
替换方案
1.在其它(非S/88)容错系统中的应用
在最佳实施例中,硬件容错至少有三个特征。故障字段可替代单元有瞬时电绝缘,使数据错误不至于送到系统的其它部分。当有必要时或元件故障时提供动态再组合码,以便去掉或加上一些元件。还提供了给子系统或字段可替代单元去掉电源和加上电源的能力而不失掉系统,亦称热插入能力。用户感觉不到丢失功能或性能。
该改进可用于各种容错环境,例如用于缺乏一些上述严格要求的软件容错系统之中。
一个例子是美国专利4356550“微处理机系统”(1982年授予James A.Kafman等)中所述的系统。在该专利的图1中,三个处理子系统互相异步运行,并与重复的总线耦合。如果一个子系统故障,其余的可继续执行程序。所有错误都在检验点确定,而不是像本中请最佳实例中瞬时判定。
处理器(如S/370处理器)不同于该专利的子系统,它可以以类似于本申请与S/88有关的方式附加在所述子系统上。通过类似于本申请中对地址送通线(AS)所述的方式来使用和控制该发明中子系统的选择线,可以断开子系统的处理器,允许它们作为寄生的附加的外部处理器的I/O控制器使用。
2. S/88I/O控制器和S/370主存之间的直接数据传送
在最佳实例中,可以假定高速缓存器340是用于存一些有效I/O数据的排它存储器,而不是存所有有效I/O数据的存储器,这与当今典型S/370高速缓存器系统中情况一样。在图51中的实例中,存储器162要存储全部有效的I/O数据,I/O数据传送可以直接发生在一个S/88I/O装置(例如盘控制器20)和S/370存储器162之间,以便进行更高效的操作。
但是在这个替代方案中,BCU156必须仍然被用于向S/88传送S/370I/O命令。在把命令转换成S/88命令的同时,与命令相关的系统370存储器地址必须被EXES370码变换成S/88的地址。
在从存储器162向I/O装置传送数据时,在执行I/O操作前,首先把与I/O操作有关的高速缓存器中的字节刷新到存储器162中。
在从I/O向存储器162传送数据时,在执行I/O操作前,使与I/O操作有关的那部分高速缓存器无效。
如果需要数据转换,可以通过与S/88处理器62中EXEC370所用的类似的程序在I/O设备控制器中执行该功能。
应用EXEC370调用S/88OS的转换程序(如ASCII-EBCDIC转换)也可以执行数据转换。
3.使直接连接的一对处理机脱钩
图52说明了一个替代方案的数据流,其中两个直接连接的处理器都与它们各自相关的硬件脱开,其方式最好与最佳实例中的S/88处理器62的情况大致相似,以便在相对于操作系统透明的情况下在处理器之间传送命令和/或数据。
两个处理器640,641通过处理器总线642,643,驱动器接收电路644,645和一个普通的本地存储单元646相互连接。640和641可以有同样或不同的体系结构或操作系统。它们都可以有自己的硬件(未画出),包括在各自操作系统控制之下供正常的程序处理用的主存和I/O装置。两个操作系统都不知道与其它操作系统相关的处理器的存在,也不与其相连接。
但是当应用程序控制该替代方案中的处理器640向处理器641送出命令和/或数据时,640最好在处理器地址总线647上放一个预定地址,逻辑648对其进行译码,使电路644把总线642通过本地总线652耦合到本地总线646上,以便从处理机640到存储646传送命令和数据。该地址的译码还使处理器640从其相关硬件脱开,使传送操作对处理器640的操作系统透明。
当处理器641所要接收的I/O命令和/或数据已进入本地存储器646时,脱机控制逻辑649把处理器641中断。处理器641通过它的应用程序的中断处理器)与自己的硬件脱离,並用对其操作系统透明的方式把命令和/或数据从存储器646读入主存(没有示出)。如果需要对命令和/或数据转换,处理器641用存储器650中的仿真微码执行该转换。然后处理器641在其操作系统控制下处理转换后的命令。
在允许每个处理器与其硬件“再耦合”之前,处理器640和641最好允许来往于本地存储器646连续地传送实质段命令和/或数据,这样便可实现快速高效的数据传送。
命令和/或数据可以按类似方式反方向从处理器641向处理器640传送,也可以在需要时由存储器651中的仿真微码对其进行转换。在操作系统的控制下,转换后的命令可以在处理器640中进行处理。
有一个很重要之处本替换方案不同于最佳实例,即:产生数据传送的处理器与其硬件脱开,以便向接收处理器发出数据。这就要求有附加功能对应用程序进行传送控制,这与最佳实例的EXEC370/ETIO中要执行一个I/O功能(向另一处理器传送命令和/或数据)时的情况相类似。
对从一个操作系统到一个应用于程序的一些I/O操作的传送控手段取决于系统的特征。
例如,在最佳实例中,S/370执行一个起始I/O指令,操作系统对其以正常方式进行处理,并不把S/370处理器从相关硬件脱开。
在图52中的替代方案中,当S/370处理器640向处理器641送命令和/或数据时,可能使用一个被选出的无效OPCODE,而不是一个起始I/O指命。硬件或者被选出的无效OPCODE的微码的译码把控制传送给一个特殊应用程序,它使S/370与其硬件脱开,以便通过存储器646与处理器641进行信息传送。
为了防止一个处理器对另一处理器已经传送了数据的存储器646的重写,可以控制处理器640仅仅向存储器646的一个特定部分写入,并使处理器641仅仅从该部分读出。处理器641只能向存储器646的一个第二部分写入,并只允许处理器640从该第二部分读出。640和641都分别不允许向第二和第一部写入。
对于处理器640和641的操作系统而言,脱离和中断机构的操作是透明的,这与最佳实施例中的S/88处理器62的情况一样。
仿真功能可以由应用程序(而不是本地存储器中的微码)按照最佳实例中的EXEC370的方式实现。
也可以不用中断机构而用探询技术进行处理器640,641之间的数据传送,但是这种技术效率不高。
由于处理器640和641都可以为对方执行I/O操作,所以它们每个都可以获得对方的一些I/O环境特征。
另外,不用任何一方处理系统中的操作系统的服务,一个处理器中的应用可以与另一处理器中同样的或类似的应用相通信。
本申请中的术语“应用程序或码”指的就是数据处理技术领域的人所理解的它的通常含义,它与操作系统码的典型区别如下:
1.应用程序位于操作系统的顶部,它必须调用操作系统进行诸如读、写、I/O控制、日期时间等等服务。
2.应用码是用户启动或产生的,并通过操作系统的服务被装入。
3.操作系统控制应用程序在存储器内和外的分页。
4.操作系统给应用程序分配主存储器。但是,这个“应用”码现在被给定了要执行的附加功能。
“外来”(Alien)一词用以定义一个操作系统所不知道的装置(因为它还没在操作系统结构表中定义,因此操作系统还没有该装置的设备驱动口,也不能控制它)。但是操作系统中运行的一个特殊应用程序知道该装置,也可以对其进行某些控制。
“明辩”一词指的是一个操作系统不知道与一个处理器(操作系统在它上面运行)相连的外来装置,或指动作是由处理器所引起,并与操作系统相隔离,以防止操作系统拒绝这些动作。
在说明中,“透明”一词常常和明辨一词同义使用。虽然参照最佳实例具体说明了本发明,但应当指出,在不背离本申请的教导的情况下,本领域的技术人员可以做出上述建议的变化和替代形式以及各种其它形式的和具体的变化。因此,上述说明和附图只是进行描述,而不是限定,所附的权利要求包括了本发明真正构思和范围内全部变化和改进。

Claims (9)

1.建立一种环境的方法,在此环境中使第一处理元及其相关的操作系统具有选定的特性,所述的处理元及其操作系统本来缺乏这些特性,此方法的特征在于下列步骤:
将第一处理元直接与一个第二处理元耦合,该第二处理元形成具有所述特性的系统环境的一部分,并包括I/O设备和相连的一些设施,这些I/O设备和相连设施可由一相关的第二操作系统寻址并可通过向操作系统发请求的办法由程序员间接寻址;
将来自第一处理元的命令和数据通过第二操作系统不易察觉的所述直接耦合传送到第二处理元;
将所述I/O命令和数据转换成可由处理元及其操作系统执行的命令和使用的数据,而且,第一处理元及其操作系统的I/O功能可在第二处理元的控制下在具有所述选定特性的所述系统环境内处理。
2.权利要求1的方法,其特征在于下列步骤:
在所述系统环境内在所述第二操作系统控制下处理所述I/O命令。
3.权利要求2的方法,其特征在于所述传送步骤包括:
从第一处理元送一个中断请求给第二处理元;
访问一个应用程序例行程序来处理这个中断请求;
将第二处理元从其系统环境中解除耦合;
当第二处理元被解除耦合时,将I/O命令和数据传送给它。
4.一种能够提供至少具有某种特性的第一处理元和与它相关的操作系统的机构;该机构具有一第二处理元,包括I/O设备和相连的一些设施,这些I/O设备和相连设施可由相关的第二操作系统寻址并可由程序员通过向第二操作系统发出请求而间接寻址;该机构的特征在于:
将第一处理元与第二处理元件直接耦合的装置;
将I/O命令数据由第一处理元经所述的直接耦合装置以第二操作系统不易察觉的方式传送到第二处理元的装置;
将所述I/O命令和数据转换成可由第二处理元及其操作系统执行的命令和使用的数据,进而,第一处理元及其操作系统的I/O功能可由第二处理元在其操作系统的控制下进行处理。
5.权利要求4的机构,其特征在于:所述第一处理元是一个S/370处理元,所述第二处理元件是S/88处理元,所述第二操作系统是S/88操作系统。
6.权利要求5的机构,其特征在于:在所述S/88操作系统控制下转换I/O命令和数据的装置。
7.权利要求6的机构,其特征在于所述传送装置包括:
在S/370处理元件中向S/88操作系统提中断请求的装置,
包括一个处理中断请求的S/88应用程序例程的装置,
包括一个S/88应用程序的装置,它能有选择地将S/88处理元和其相关的I/O设备及连接的设备去耦,
当去耦合时通过所述的直接耦合装置将S/370 I/O命令和数据传送到S/88处理元的装置。
8.权利要求5的机构,其特征在于:
多个附加S/88处理元与所述第一次提到的S/88处理元耦合,并与所述I/O设备及相连的设施耦合;
所述S/88操作系统能使I/O负载任务在S/88处理元间分担,从而S/370的I/O功能可在任何一个S/88处理元上处理。
9.在一种特定类型的容错数据处理系统中,一种体系结构的第一对容错处理器在一个第一操作系统的控制下同时执行相同的操作,所述那一种体系结构的第二对合作容错处理器在所述第一操作系统控制下同时执行上述的同样操作,处理器成双地与重复的相同系统总线耦合,并通过所述总线与成对的容错I/O设备和成对的容错主存贮单元耦合,以在所述操作系统控制下,在所述成对处理器,I/O设备及主存贮单元中传送相同的数据,由各对处理器加到系统总线上的信号周期性地进行比较,以进行差错检测,当发现有错误时有一机制,将一对引起差错的处理器停止工作,使系统利用剩余的处理器对继续工作,该系统的特征在于:
有一附加的第一对和附加的伙伴对处理器,其体系结构与上述的一个体系结构不同,它与所述的系统总线耦合,并在第二操作系统的控制下相互同时执行同样的操作,附加装置周期性地比较由各附加处理器对加到系统总线上的信号以检测差错;
在第一对和第二合作对中包含有处理器的装置;它将其I/O命令和数据从附加的第一对处理器和附加的合作对处理器中以第一操作系统不易察觉的方式传送到相应的第一对和第二合作对中的相应处理器;
将所述命令和数据转换成可由第一和第二合作对处理一执行和使用的命令和数据的装置,以第一对和第二合作队处理器作为第一附加处理器对和附加合作处理器对的I/O控制器;
与第一处理器对和第二合作处理器对相关的装置,当检测到一对附加处理器或其在第一或第二合作对中的相应处理器加在系统总线上的信号有差错时,有选择地使所述附加处理器对或其在第一或第二合作对中的处理器中的一个停止工作,进而使所述附加处理器对容错。
CN90102592A 1989-05-17 1990-04-29 在数据处理系统提供附加系统特性的方法和装置 Expired - Fee Related CN1040803C (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US07/353,116 US5325517A (en) 1989-05-17 1989-05-17 Fault tolerant data processing system
US07353116 1989-05-17
US07353111 1989-05-17
US07353,116 1989-05-17
US07/353,111 US5283868A (en) 1989-05-17 1989-05-17 Providing additional system characteristics to a data processing system through operations of an application program, transparently to the operating system
US07353,111 1989-05-17

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CNB981084877A Division CN1168004C (zh) 1989-05-17 1990-04-29 在数据处理系统中提供容错环境和体系结构的装置

Publications (2)

Publication Number Publication Date
CN1047407A CN1047407A (zh) 1990-11-28
CN1040803C true CN1040803C (zh) 1998-11-18

Family

ID=26997789

Family Applications (2)

Application Number Title Priority Date Filing Date
CN90102592A Expired - Fee Related CN1040803C (zh) 1989-05-17 1990-04-29 在数据处理系统提供附加系统特性的方法和装置
CNB981084877A Expired - Fee Related CN1168004C (zh) 1989-05-17 1990-04-29 在数据处理系统中提供容错环境和体系结构的装置

Family Applications After (1)

Application Number Title Priority Date Filing Date
CNB981084877A Expired - Fee Related CN1168004C (zh) 1989-05-17 1990-04-29 在数据处理系统中提供容错环境和体系结构的装置

Country Status (3)

Country Link
KR (1) KR920008439B1 (zh)
CN (2) CN1040803C (zh)
AU (1) AU629336B2 (zh)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5539911A (en) * 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
DE69330981T2 (de) * 1992-04-20 2002-06-27 3Com Corp., Santa Clara Vorrichtung zur Netzmittelerweiterung auf entfernte Netzwerke
US7197663B2 (en) * 2003-11-20 2007-03-27 International Business Machines Corporation Concurrent PPRC/FCP and host access to secondary PPRC/FCP device through independent error management
JP5141381B2 (ja) * 2008-06-02 2013-02-13 富士通株式会社 情報処理装置、エラー通知プログラム、エラー通知方法
CN103136060B (zh) * 2011-11-23 2016-10-05 联想(北京)有限公司 运行控制方法和运行控制装置
US8819485B2 (en) * 2012-03-12 2014-08-26 Infineon Technologies Ag Method and system for fault containment
JP6047349B2 (ja) * 2012-09-12 2016-12-21 株式会社日立製作所 論理回路及び該論理回路を用いた制御装置
CN104750510B (zh) 2013-12-30 2019-04-02 深圳市中兴微电子技术有限公司 一种芯片启动方法及多核处理器芯片
CN107567616A (zh) * 2015-06-26 2018-01-09 惠普发展公司,有限责任合伙企业 操作系统管理
GB2543554B (en) * 2015-10-22 2019-01-23 Advanced Risc Mach Ltd Handling exceptional conditions for vector arithmetic instruction
CN106844234B (zh) * 2015-12-04 2020-01-03 成都华为技术有限公司 数据写入方法及装置、双活系统
US10037150B2 (en) * 2016-07-15 2018-07-31 Advanced Micro Devices, Inc. Memory controller with virtual controller mode
CN110297747A (zh) * 2018-03-22 2019-10-01 福建天泉教育科技有限公司 一种测试统计功能的方法及终端
KR102606009B1 (ko) * 2018-08-16 2023-11-27 에스케이하이닉스 주식회사 캐시 버퍼 및 이를 포함하는 반도체 메모리 장치
US11237970B2 (en) * 2018-11-07 2022-02-01 Micron Technology, Inc. Reduce data traffic between cache and memory via data access of variable sizes
JP2020198044A (ja) * 2019-06-05 2020-12-10 富士通株式会社 並列処理装置
CN110850787B (zh) * 2019-12-04 2021-06-29 中国石油化工股份有限公司 一种并行控制系统及方法
CN111400210B (zh) * 2020-03-10 2022-05-06 苏州盛科通信股份有限公司 一种集中式MACsec包处理芯片的中断处理方法及装置
CN111475359B (zh) * 2020-04-13 2023-05-30 腾讯音乐娱乐科技(深圳)有限公司 多消息交互场景下的系统测试方法、装置和存储介质
CN111722142B (zh) * 2020-05-24 2022-05-10 苏州浪潮智能科技有限公司 一种服务器电源信号传输质量检测装置及方法
CN111679792B (zh) * 2020-06-04 2023-04-07 四川九州电子科技股份有限公司 一种嵌入式设备NandFlash I/O数据监测系统及方法
CN112582009B (zh) * 2020-12-11 2022-06-21 武汉新芯集成电路制造有限公司 单调计数器及其计数方法
CN116189896B (zh) * 2023-04-24 2023-08-08 北京快舒尔医疗技术有限公司 一种基于云端的糖尿病健康数据预警方法及系统
CN116612804B (zh) * 2023-07-19 2023-10-10 芯天下技术股份有限公司 一种芯片崩边检测电路及存储芯片

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4004277A (en) * 1974-05-29 1977-01-18 Gavril Bruce D Switching system for non-symmetrical sharing of computer peripheral equipment

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4004277A (en) * 1974-05-29 1977-01-18 Gavril Bruce D Switching system for non-symmetrical sharing of computer peripheral equipment

Also Published As

Publication number Publication date
CN1047407A (zh) 1990-11-28
CN1168004C (zh) 2004-09-22
KR900018829A (ko) 1990-12-22
AU629336B2 (en) 1992-10-01
KR920008439B1 (ko) 1992-09-29
CN1206147A (zh) 1999-01-27
AU5487190A (en) 1990-11-22

Similar Documents

Publication Publication Date Title
CN1060871C (zh) 使cpu与和外面的数据处理装置交互作用的硬件隔离的方法和装置
CN1040803C (zh) 在数据处理系统提供附加系统特性的方法和装置
CN1040480C (zh) 不采用一个或二个操作系统的服务而在不同处理器中运行的应用程序之间直接传送信息的方法及装置
CN1080906C (zh) 一种数据处理系统及其方法
Freiberger et al. Fire in the valley: The making of the personal computer
CN100557570C (zh) 多处理器系统
CN101248405B (zh) 使用并发域的多线程化
CN1182467C (zh) 可扩充的分布企业应用集成系统
TW202038171A (zh) 資源處理系統、資源項目申報的審批方法、裝置及設備
CN86107558A (zh) 具有带式随机存取存储器和地址发生器装置的单指令多数据单元阵列处理机
CN1063168A (zh) 并行处理装置
CN1491394A (zh) 时序不灵敏及无假信号逻辑系统和方法
US20120151431A1 (en) Generation of independent logical and physical hierarchy
CN1449530A (zh) 事务文件系统
CN1993674A (zh) 多芯架构中的资源管理
CN102955792A (zh) 一种实时全文搜索引擎事务处理的实现方法
CN1996271B (zh) 一种数据传输的方法及系统
CN110297955B (zh) 一种信息查询方法、装置、设备及介质
CN102866966A (zh) 一种Linux操作系统的设备驱动控制方法和装置
CN1435036A (zh) 集成的接入设备控制器
US11347746B2 (en) Efficient rolling transactions in a data storage system
CN1308819C (zh) 改值转储随选系统与方法
Haldar et al. Bounded concurrent timestamp systems using vector clocks
CN1942859A (zh) 操作系统
CN1103467C (zh) 宏指令集对称式并行体系结构微处理器

Legal Events

Date Code Title Description
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C06 Publication
PB01 Publication
C14 Grant of patent or utility model
GR01 Patent grant
C15 Extension of patent right duration from 15 to 20 years for appl. with date before 31.12.1992 and still valid on 11.12.2001 (patent law change 1993)
OR01 Other related matters
C19 Lapse of patent right due to non-payment of the annual fee
CF01 Termination of patent right due to non-payment of annual fee