[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

DE69032508T2 - Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start - Google Patents

Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start

Info

Publication number
DE69032508T2
DE69032508T2 DE69032508T DE69032508T DE69032508T2 DE 69032508 T2 DE69032508 T2 DE 69032508T2 DE 69032508 T DE69032508 T DE 69032508T DE 69032508 T DE69032508 T DE 69032508T DE 69032508 T2 DE69032508 T2 DE 69032508T2
Authority
DE
Germany
Prior art keywords
memory
cpu
bus
state
shutdown
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
DE69032508T
Other languages
English (en)
Other versions
DE69032508D1 (de
Inventor
Dave Lage Vista Texas 78645 Aldridge
Randall G. Austin Texas 78746 Banton
Tom Austin Texas 78756 Bereiter
Richard W. Jr. Georgetown Texas 78626 Cutts
Kenneth C. Austin Texas 78717 Debacker
Douglas E. Austin Texas 78727 Jewett
Nikhil A. Austin Texas 78752 Mehta
Peter C. Austin Texas 78728 Norwood
Brian Austin Texas 78717 Vetter
Phil Austin Texas 78758 Webster
Donald C. Westbrook, (Deceased)
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.)
Tandem Computers Inc
Original Assignee
Tandem Computers Inc
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/461,250 external-priority patent/US5295258A/en
Application filed by Tandem Computers Inc filed Critical Tandem Computers Inc
Application granted granted Critical
Publication of DE69032508D1 publication Critical patent/DE69032508D1/de
Publication of DE69032508T2 publication Critical patent/DE69032508T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1441Resetting or repowering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/2015Redundant power supplies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Hardware Redundancy (AREA)
  • Power Sources (AREA)
  • Retry When Errors Occur (AREA)

Description

  • Diese Erfindung betrifft Rechnersysteme und spezieller die Erfassung und erneute Integration von fehlerbehafteten Komponenten, eine Abschalt- und Neustartprozedur im Falle eines Energieausfalls und ein Archivierungssystem zum Konfigurieren der Funktionen, jeweils in einem fehlertoleranten Multiprozessorsystem.
  • Durch Vorsehen von Redundanzen erzielt man in verschiedenen Rechnerstrukturen eine hoch zuverlässige digitale Verarbeitung. TMR-Systeme (TMR = triple modular redundancy; dreifache modulare Redundanz) können zum Beispiel drei CPUs, welche den selben Befehlsstrom ausführen, zusammen mit drei getrennten Hauptspeichereinheiten und getrennten Eingabe/Ausgabegeräten, die Funktionen duplizieren, verwenden, so daß dann, wenn jeweils einer jedes Komponententyps ausfällt, das System weiterarbeitet. Ein fehlertolerantes System dieser Art ist in der US-A-4,228,496 von Katzman et al., mit dem Titel "Multiprozessorsystem", gezeigt; die auf die Tandem Computers, Inc. übertragen wurde. Es wurden verschiedene Verfahren dazu verwendet, die Einheiten in redundanten Systemen zu synchronisieren; es wurde zum Beispiel ein Verfahren der "losen" Synchronisierung offenbart, das im Gegensatz zu anderen Systemen steht, die eine Verriegelungssynchronisierung mit einem einzigen Takt verwenden, wie in der US-A-4,453,215 "Central Processing Apparatus for Fault-Tolerant Computing" gezeigt, die auf die Stratus Computer, Inc. übertragen wurde. Eine mit "Synchronisierungs-Mehrheitsauswahl" (synchronization voting) bezeichnete Technik wird von Davies & Wakerly in "Synchronization and Matching in Redundant Systems", IEEE Transactions on Computers, Juni 1978, S. 531-539, offenbart. Ein Verfahren zur Interrupt-Synchronisierung (interrupt synchronization) in redundanten fehlertoleranten Systemen wurde von Yondea et al. in 2180 Proceeding of lSth Annual Symposium on Fault-Tolerant Computing, Juni 1985, S. 246-251, "Implementation of Interrupt Handler for Loosely Synchronized TMR Systems" beschrieben. Die US-A-4,644,498 "Fault-Tolerant Real Time Clock" offenbart eine dreifach modulare redundante Taktkonfiguration zur Verwendung in einem TMR-Rechnersystem. Die US-A-4,733,353 "Frame Synchronization of Multiply Redundant Computers" offenbart ein Synchronisierungsverfahren, das getrennt getaktete CPUs verwendet, die durch Ausführen eines Synchronisierungsblocks periodisch synchronisiert werden.
  • Die EP-A-0 256 815 offenbart eine Vorrichtung zum Verhindern des unbeabsichtigten Verlustes von Daten in einem Rechnersystem als Folge einer elektrischen Energieunterbrechung. Es wird ein Programm dazu eingesetzt, jede Operation, die bereits läuft, zu beenden. Dann führt das Programm eine Übertragung des Betriebszustands des Rechners und aller Anwendungsprogramme und des Betriebssystems von dem RAM des Rechners zu einem nicht flüchtigen Speicher einer Hilfsspeicherschaltung. Wenn die minimale Leistung wiederhergestellt ist, weist das Programm die CPU an, die Anwendungsprogramme und das Betriebssystem wieder in das RAM des Rechners zu laden und den Zustand der CPU wieder auf den gespeicherten Zustand einzustellen.
  • Die GB-A-2 072 381 offenbart eine rechnergesteuerte Vorrichtung, die im Falle eines Energieausfalles arbeitet. Im Falle eines Energieausfalles werden die Daten, welche das gerade laufende Programm identifizieren, für deren Rettung in einen Speicher übertragen. Wenn die Energie wiederhergestellt wird, und wenn die Dauer des Energieausfalles kürzer ist als ein vorgegebener Wert, werden abhängig von einem Befehl von dem Prozessor physische Parameter erfaßt, um die Bedingungen zu ermitteln, unter denen das Programm von der Vorrichtung wiederaufgenommen werden kann, wobei der Parameter Temperatur, Druck, Volumen, Spannung etc. umfassen.
  • Ein wichtiges Merkmal eines fehlertoleranten Rechnersystems, wie die oben angegebenen, ist die Fähigkeit, daß in dem System laufende Prozesse einen Energieausfall ohne Verlust oder Verstümmelung der Daten überleben können. Eine Art, Verluste aufgrund eines Energieausfalls zu verhindern, ist natürlich, den Energieausfall zu verhindern; zu diesem Zweck können redundante Wechselstromversorgungen und Batteriesicherungseinheiten (Backup) vorgesehen werden. Dennoch ist der Zeitspanne, während der von den Batteriesicherungseinheiten Energie geliefert werden kann, wegen der Kosten, der Größe und des Gewichts der Speicherbatterien eine praktische Grenze gesetzt, so daß es vorteilhafter sein kann, beim Ausfall der Wechselstromversorgung ein ordnungsgemäßes Herunterfahren bzw. Abschalten (Shutdown) des Systems vorzusehen.
  • Da heute Hochleistungs-Mikroprozessoreinrichtungen erhältlich sind, welche höhere Taktgeschwindigkeiten verwenden und mehr Fähigkeiten haben, und da andere Elemente der Rechnersysteme, wie Speicher, Plattenlaufwerke und dergleichen, entsprechend billiger und leistungsfähiger geworden sind, mußten die Leistung und Kosten von hochzuverlässigen Prozessoren demselben Trend folgen. Ferner hat die Standardisierung einiger weniger Betriebssysteme in der Rechnerindustrie im allgemeinen die Verfügbarkeit von Anwendungssoftware enorm erhöht, so daß auf dem Gebiet der hochzuverlässigen Systeme ähnliche Anforderungen gestellt werden; d. h., daß ein Standardbetriebssystem verfügbar sein muß.
  • Die fehlertoleranten Computersysteme der in diesen früheren Patenten und Veröffentlichungen gezeigten Art verwendeten kundenspezifische Betriebssysteme und Anwendungssoftware, die speziell für jedes System geschrieben wurden, anstelle der allgemeineren Betriebssysteme, bei denen stark verbreitete Anwendungssoftware verwendet werden könnte. Die Vielfalt der Anwendungssoftware war daher beschränkt, und die Software, die zur Verfügung stand, war teuer. Aus diesem Grund ist beabsichtigt, daß das hier gezeigte System ein Standardbetriebssystem, UNIX verwendet.
  • In einem fehlertoleranten Rechnersystem mit redundanten Modulen kann das System mit einer großen Vielzahl von Konfigurationen weiterarbeiten. CPU-Module, Speichermodule oder Eingabe/Ausgabemodule (I/O-Mudule) können von dem System abgetrennt werden, während die verbleibenden Komponenten weiterarbeiten. Zu jeder gegebenen Zeit muß das System doch über eine präzise Aufzeichnung dessen verfügen, was die Systemkonfiguration ist, d. h. welche Module vorhanden sind und mit ihrer vollen Kapazität arbeiten. Die Untersuchung der Konfiguration eines UNIXTM- Systems stellt jedoch Schwierigkeiten. Üblicherweise wird für diesen Zweck ein /dev-Eintrag verwendet, /dev-Einträge geben jedoch an, was installiert werden könnte, nicht was installiert ist. UNIX-Systeme greifen traditionell auf Hardwarekomponenten und Softwaremodule über eine Reihe spezieller Dateien (die /dev-Einträge) zu. Diese Dateien müssen von einem Systemadministrator verwaltet werden, und sie müssen explizit modifiziert werden, wenn sich die Systemkonfiguration ändert.
  • Es ist daher die Hauptaufgabe dieser Erfindung, ein verbessertes hochzuverlässiges Rechnersystem, insbesondere ein fehlertolerantes Rechnersystem vorzusehen. Es ist weitere Aufgabe, ein verbessertes redundantes, fehlertolerantes Rechensystem vorzusehen, sowie eines, das hohe Leistung bei reduzierten Kosten ermöglicht; insbesondere soll das verbesserte System die Leistungsbelastungen vermeiden, die üblicherweise mit hochredundanten Systemen einhergehen. Eine weitere Aufgabe besteht darin, ein hochzuverlässiges Rechnersystem vorzusehen, dessen Leistung, gemessen in Zuverlässigkeit sowie in Geschwindigkeit und Softwarekompatibilität, verbessert ist, doch bei Kosten, die mit anderen Lösungen geringerer Leistung vergleichbar sind. Eine zusätzliche Aufgabe besteht darin, ein hochzuverlässiges Rechnersystem vorzusehen, das mit einem Betriebssystem arbeiten kann, das eine virtuelle Speicherverwaltung mit Bedarfsseitenadressierung (demand paging) verwendet und einen geschützten (Supervisor - oder "Kern"-) Modus aufweist; insbesondere ein Betriebssystem, das auch die Ausführung mehrerer Prozesse erlaubt - alles auf einem hohem Leistungsniveau. Es ist eine weitere Aufgabe, ein hochzuverlässiges, redundantes Rechnersystem vorzusehen, das fehlerhafte Systemkomponenten erfassen und offline schalten kann und dann reparierte Systemkomponenten erneut integrieren kann, ohne das System herunterzufahren. Eine weitere Aufgabe dieser Erfindung besteht darin, eine verbesserte Energieausfallprozedur in einem hochzuverlässigen Rechnersystem, insbesondere in einem fehlertoleranten Rechnersystem vorzusehen. Es ist eine weitere Aufgabe, einen verbesserten Betrieb eines redundanten, fehlertoleranten Rechensystems bei Ausfall der Energieversorgung vorzusehen, wobei Zuverlässigkeit, hohe Leistung und reduzierte Kosten verwirklicht werden sollten. Eine weitere Aufgabe dieser Erfindung besteht darin, ein verbessertes Verfahren zum Betreiben eines hochzuverlässigen Rechnersystems, insbesondere eines fehlertoleranten Rechnersystems vorzusehen. Eine weitere Aufgabe ist, einen verbesserten Betrieb eines redundanten, fehlertoleranten Rechensystems für solche Fälle vorzusehen, in denen fehlerhafte Hardwarekomponenten aus dem System entfernt und ersetzt werden können, während das System weiter arbeitet, wobei hohe Zuverlässigkeit, Leistung sowie reduzierte Kosten möglich sein sollen.
  • Gemäß einer Ausführungsform der Erfindung, die in den beigefügten Ansprüchen ausgeführt ist, verwendet ein Rechnersystem drei identische CPUs, die üblicherweise denselben Befehlsstrom ausführen, und es hat zwei identische, sich selbst überprüfende Speichermodule, welche Duplikate derselben Daten speichern. Zugriffe auf den Speicher durch die drei CPUs erfolgen über drei getrennte Busse, die mit drei getrennten Anschlüssen jedes der beiden Speichermodule verbunden sind. Um die Leistungsbelastung im fehlertoleranten Betrieb nicht den CPUs selbst aufzubürden, und um ihnen auch nicht die Kosten, Komplexitäts- und Zeitsteuerungsprobleme der fehlertoleranten Takterzeugung aufzubürden, haben die drei CPUs jeweils ihre eigenen getrennten und unabhängigen Takte, sie sind jedoch lose synchronisiert, zum Beispiel durch Erfassen von Ereignissen, wie Speicherzugriffe, und jede CPU, die den anderen voraus ist, wird angehalten, bis alle die Funktion gleichzeitig ausführen; die Interrupts (Unterbrechungen) werden auch mit den CPUs synchronisiert, um sicherzustellen, daß die CPUs den Interrupt an demselben Punkt in ihrem jeweiligen Befehlsstrom ausführen. Die drei asynchronen Speicherzugriffe über die getrennten CPU-Speicherbusse werden durch Mehrheitsauswahl (Voting) an den drei getrennten Anschlüssen jeder der Speichermodule zur Zeit der Speicheraufforderung ausgeführt, die gelesenen Daten werden jedoch nicht durch Mehrheitsauswahl ermittelt, wenn sie an die CPUs zurückgegeben werden.
  • Die beiden Speicher führen alle Schreibaufforderungen aus, die von einer der CPUs oder den I/O-Bussen (I/O = Eingabe/Ausgabe) empfangen werden, so daß sie beide aktualisiert gehalten werden, jedoch nur ein Speichermodul gibt gelesene Daten an die CPUs zurück, wenn eine Leseaufforderung kommt; das eine Speichermodul, das die gelesenen Daten erzeugt, wird als das "primäre" Speichermodul bezeichnet, während das andere das Back- up-Speichermodul ist. Abhängig von I/O-Aufforderungen geben beide Speider gelesene Daten an die I/O-Prozessoren (IOPs) zurück. Die Speicheraufrufe an die beiden Speichermodule werden umgesetzt, während die Mehrheitsauswahl noch stattfindet, so daß die gelesenen Daten den CPUs mit einer kurzen Verzögerung zur Verfügung stehen, nachdem die letzte der CPUs die Anforderung gemacht hat. Selbst die Schreibzyklen können sich weitgehend überlappen, weil die für diese Speichermodule verwendeten DRAMs einen großen Teil des Schreibzugriffs nur dazu nutzen, zu lesen und aufzufrischen (refresh), und wenn während des letzten Teils des Schreibzyklus nicht abgetastet wird, ist der Lesevorgang nicht zerstörend, weshalb ein Schreibzyklus beginnt, sobald die erste CPU eine Anforderung macht, jedoch nicht endet, bis nicht die letzte Anforderung empfangen und durch Mehrheitsauswahl als gut befunden wurde. Diese Merkmale der zurückgegebenen, nicht durch Mehrheitsauswahl bestimmten gelesenen Daten und der überlappenden Zugriffe ermöglichen einen fehlertoleranten Betrieb bei hoher Leistung, jedoch bei einer minimalen Komplexität und minimalen Kosten.
  • I/O-Funktionen werden unter Verwendung zweier identischer I/O- Busse durchgeführt, von denen jeder mit nur einem der Speichermodule getrennt verbunden ist. Mehrere I/O-Prozessoren sind mit beiden I/O-Bussen verbunden, und I/O-Geräte sind mit Paaren der I/O-Prozessoren verbunden, wobei jedoch immer nur einer der I/O-Prozessoren auf einmal auf diese zugreift. Die CPUs können auf die I/O-Prozessoren über die Speichermodule zugreifen (wobei jeder Zugriff durch Mehrheitsauswahl bestimmt 1 wird, genau wie bei den Speicherzugriffen), die I/O-Prozessoren können jedoch nur auf die Speichermodule, nicht auf die CPUs zugreifen; die I/O-Prozessoren können an die CPUs nur Interrupts senden, und diese Interrupts werden in den Speichermodulen gesammelt, bevor sie an die CPUs übergeben werden. Wenn ein I/O-Prozessor ausfällt, kann der andere Prozessor des Paares die Steuerung der I/O-Geräte für diesen I/O- Prozessor mittels der Systemsoftware übernehmen, indem bestimmte Steuerregister verändert werden, die in der CPU, dem Speichermodul und dem verbleibenden I/O-Prozessor sitzen, und indem die Datenstrukturen des Betriebssystems verändert werden. Auf diese Weise wird die Fehlertoleranz erreicht, und ein I/O-Gerät kann ohne Herunterfahren oder Abschalten des Systems reintegriert werden.
  • Das bei der bevorzugten Ausführungsform verwendete Speichersystem ist ein in mehreren Stufen hierarchisches System. Jede CPU hat ihren eigenen Cache-Speicher, der im wesentlichen mit der Taktgeschwindigkeit der CPU arbeitet. Dann hat jede CPU einen lokalen Speicher, auf den die anderen CPUs nicht zugreifen können, und die virtuelle Speicherverwaltung erlaubt es, erfordert es jedoch nicht, daß der Kern (kernel) des Betriebssystems und die Seiten für die momentane Aufgabe in dem lokalen Speicher für alle drei CPUs liegen, auf den mit hoher Geschwindigkeit ohne den Aufwand (overhead) für die Mehrheitsauswahl zugegriffen werden kann. Als nächstes kommt die Speichermodulebene, die als globaler Speicher bezeichnet ist, auf der die Mehrheitsauswahl und die Synchronisierung stattfinden, was eine gewisse Belastung für die Zugriffszeit darstellt; gleichwohl ist die Geschwindigkeit des globalen Speichers wesentlich schneller als Plattenzugriffe, so daß diese Ebene für den Seitenaustausch (page swapping) mit dem lokalen Speicher verwendet wird, um die am häufigsten gebrauchten Daten in dem schnellsten Bereich zu halten, anstatt eine Platte für die erste Ebene der Bedarfsseitenadressierung zu verwenden. Der globale Speicher wird von I/O-Steuereinrichtungen auch als Arena für die DMA-Zugriffe (DMA = Direct Memory Access; Direktspeicherzugriff) verwendet.
  • Eines der Merkmale der offenbarten Ausführungsform dieser Erfindung ist die Fähigkeit, fehlerhafte redundante Einheiten, oder FRUs (Faulty Redundant Unit), wie CPUs, Speichermodule, IOPs, Batteriemodule, I/O-Steuereinrichtungen etc., auszutauschen, ohne das System herunterzufahren. Das System kann somit ununterbrochen weiterverwendet werden, selbst wenn Komponenten ausgefallen sind und ersetzt werden müssen. Zusätzlich bedeutet die Möglichkeit, ein hohes Niveau an Fehlertoleranz mit weniger Systemkomponenten zu erreichen, wobei zum Beispiel keine fehlertolerante Taktsignalerzeugung benötigt wird, nur zwei Speichermodule anstelle von dreien benötigt werden, die Mehrheitsauswahlschaltungen minimiert werden etc., daß weniger Komponenten ausfallen können und somit die Zuverlässigkeit erhöht wird. Das heißt, es gibt weniger Ausfälle, weil es weniger Komponenten gibt, und wenn es Ausfälle gibt, werden die Komponenten isoliert, damit das System weiter laufen kann, während die Komponenten ersetzt werden können, ohne daß das System heruntergefahren wird.
  • Das System sieht bei einer bevorzugten Ausführungsform einen hohen Grad an Fehlertoleranz und Unversehrtheit der Daten für Anwendungen vor, die eine sehr hohe Verfügbarkeit des Systems benötigen. Die Fehlertoleranz wird durch eine Kombination aus redundanten Prozessoren und Speichern zusammen mit duplizierten I/O- und Massenspeicher-Systemen (einschließlich zum Beispiel gespiegelter Plattendatenträger) und redundanten, nichtunterbrechbaren Energieversorgungen mit redundanten Backup- Batterien erreicht. Fehlererfassungsverfahren zum Sperren und Reintegrieren von Modulen erlauben einen fortlaufenden Betrieb ohne Gefährdung der Unversehrtheit der Daten während des Auftretens von Hardwarefehlern.
  • Bevor ein Ersatzmodul neu integriert wird, kann der Zustand des Ersatzes überprüft werden, indem mit diesem Modul ein Einschalt-Selbsttest durchgeführt wird und dann modulabhängige Synchronisierungsfunktionen ausgeführt werden, einschließlich: (1) bei CPUs wird der aktuelle Zustand der beiden guten CPU- Module gespeichert, und alle drei Module werden synchronisiert, so daß sie denselben Befehlsstrom aus dem globalen Speicher auszuführen beginnen, wobei dieser Befehlsstrom eine Kopierroutine ist, welche den Inhalt des lokalen Speichers der beiden guten CPUs in den globalen Speicher ausliest und dann die lokalen Speicherdaten in alle CPUs zurückschreibt; (2) bei Speichermodulen wird ein Ersatzmodul neu integriert, indem der Inhalt des guten Speichers in den lokalen Speicher der CPUs kopiert und dieser Inhalt erneut in beide Speichermodule zu rückkopiert wird, wobei diese Funktion im Blocktransfer und im Zeitanteilsverfahren mit der normalen Systemverarbeitung ausgeführt wird, während alle Schreibvorgänge der CPU oder I/O- Prozessoren, die während der Reintegration auftreten, auch mit beiden Speichermodulen ausgeführt werden; (3) ein I/O-Prozessor wird reintegriert, indem die Register und Schnittstellen des I/O-Prozessors in dem neuen I/O-Prozessor initialisiert werden und dann dem Ersatz-I/O-Prozessor I/O-Steuereinrichtungen neu zugewiesen werden; (4) für die Reintegration von Ersatz-I/O-Steuereinrichtungen muß das System hochgefahren werden, sie müssen einem I/O-Pozessor zugewiesen werden, und ein Host und Datenstrukturen für die Steuereinrichtung müssen neu initialisiert werden; (5) die Reintegration von I/O-Geräten umfaßt gerätespezifische Funktionen, die von den Gerättreibern des Betriebssystems ausgeführt werden, die jeder I/O- Steuereinrichtung zugewiesen sind, mit der das Gerät verbunden ist (und möglicherweise einer Software auf Benutzerebene).
  • Das System kann auch beim Auftreten von mehreren Hardwarefehlern weiterarbeiten, solange die folgende minimale Konfiguration aufrechterhalten wird: (1) zwei der drei CPUs; (2) eines der zwei Speichermodule; (3) einer der zwei I/O-Prozessoren; (4) eines seiner Plattenuntersysteme; und (5) die richtigen Energieuntersysteme zum Unterstützen der obigen Konfiguration.
  • Es kann ein Fehlerüberwachungs- und Erfassungssystem verwendet werden, um beschädigte Daten zu erfassen und die permanente Speicherung beschädigter Daten automatisch zu sperren. In dem System werden eine Vielzahl von Fehlererfassungsmechanismen verwendet, einschließlich: (1) mehrfach vorhandene Operationen (in der CPU und den Speicherbereichen) werden durch Mehrheitsauswahl bestimmt, um die Anzahl der Prüfschaltkreise zu reduzieren, die zum Gewährleisten eines hohen Grades an Datenunversehrtheit notwendig sind; (2) Fehlererfassungscodes können für die Datenspeicherung und -übertragung verwendet werden (einschließlich Parität, Prüfsummen bei Datenblöcken etc.); (3) Überprüfungen der Zeitsteuerung der Datenübertragung zwischen Hardwaremodulen (Dienstanforderungen werden überwacht und zeitlich gesteuert, der Status wird mitgeteilt); (4) es werden Selbsttest-Schaltkreise verwendet; und (5) vorübergehende Fehler (soft error) werden überwacht und mitgeteilt.
  • Gemäß eines Merkmals der Erfindung verwendet ein fehlertolerantes Rechnersystem ein Energieversorgungssystem mit einer Batteriesicherung (Backup), so daß bei einem Ausfall des Wechselstroms das System eine ordnungsgemäße Abschaltprozedur ausführen und den Zustand auf Platte speichern kann. Eine Neustartprozedur stellt den Zustand wieder her, der zur Zeit des Energieausfalls vorlag, wenn die Wechselstromversorgung zu der Zeit, zu der das Abschalten abgeschlossen ist, wiederhergestellt wird.
  • Gemäß eines anderen Merkmals der Erfindung verwendet ein fehlertolerantes Rechnersystem ein Pseudo-Dateisystem, um die Hardwarekomponenten dynamisch zu verwalten. Ein Verzeichnis, das in diesem Dateisystem als ein hierarisches Standardverzeichnis erscheint, enthält eine Datei für jede Komponente; jede Datei enthält eine Abbildung entweder einer Hardwarekomponente oder eines Softwaremoduls. Die Hierarchie des Pseudo- Dateisystems wird während der Systeminitialisierung ermittelt und automatisch aktualisiert, wenn sich die Konfiguration der Software oder Hardware ändert. Die hierarchische Art der Präsentation führt zu einer natürlichen Art der Darstellung der Verbindung zwischen den Komponenten. Eine präzise Abbildung des aktuellen Zustands des Systems kann mit einem Standardwerkzeug zum Auflisten von Dateien betrachtet werden. Das Pseudo-Dateisystem, das hier /config-Dateisystem genannt wird, wird als ein UNIX-Dateisystem in dem UNIX-Dateisystemschalter realisiert. Intern sind die /config-Dateien in einer Gruppe aus Untersystemen zusammengefaßt (z. B. Unterverzeichnisse für Software, CPUs, Speichereinheiten, I/O-Prozessoren etc.). Jede Datei wird durch einen Informationsknoten (Inode) dargestellt, der Information über das Untersystem und die Komponente speichert, welche er darstellt. Wenn eine Anforderung eines Dateisystems zum Lesen, Schreiben oder Modifizieren eines Inode empfangen wird, wird die Anforderung an das entsprechende Untersystem weitergegeben. Der Rücksprungstatus des Untersystems wird als der Status aus der Anforderung des Dateisystems zurückgegeben. Wenn das Betriebssystem eine Veränderung in der Systemkonfiguration (z. B. einen Ausfall einer Komponente) erkennt, werden die entsprechenden Inodes in dem /config- Dateisystem verändert.
  • Die Merkmale, die kennzeichnend für die Erfindung sind, sind in den beigefügten Ansprüchen angegeben. Die Erfindung selbst sowie weitere Merkmale und Vorteile der Erfindung werden jedoch am besten anhand der folgenden ausführlichen Beschreibung einer bestimmten Ausführungsform in Verbindung mit der Zeichnung deutlich werden. In den Figuren zeigt:
  • Fig. 1 ein elektrisches Blockdiagramm eines Rechnersystems gemäß einer Ausführungsform der Erfindung;
  • Fig. 2 zeigt ein elektrisches Blockdiagramm einer der CPUs des Systems der Fig. 1;
  • Fig. 3 zeigt ein elektrisches Blockdiagramm eines der Mikroprozessorchips, die in der CPU der Fig. 2 verwendet werden;
  • Fig. 4 zeigt ein elektrisches Blockdiagramm eines der Speichermodule des Rechnersystems der Fig. 1;
  • Fig. 5 zeigt ein Zeitablaufdiagramm der Ereignisse, die zwischen der CPU und den Speicherbussen in dem System der Fig. 1 stattfinden;
  • Fig. 6 zeigt ein elektrisches Blockdiagramm eines der I/O- Prozessoren des Rechnersystems der Fig. 1;
  • Fig. 7 zeigt ein Zeitablaufdiagramm der Ereignisse für das Übertragungsprotokoll zwischen einem Speichermodul und einem I/O-Prozessor im System der Fig. 1;
  • Fig. 8 zeigt ein elektrisches Blockdiagramm der Interrupt- Synchronisierungsschaltung, die in der CPU der Fig. 2 verwendet wird;
  • Fig. 9 zeigt eine physische Speicherabbildung der Speicher, die in dem System der Fig. 1, 2, 3 und 4 verwendet werden;
  • Fig. 10 zeigt eine virtuelle Speicherabbildung der CPUs, die in dem System der Fig. 1, 2, 3 und 4 verwendet werden;
  • Fig. 11 ist eine Darstellung des Formats der virtuellen Adressen und der TLB-Einträge in den Mikroprozessorchips der CPU gemäß den Fig. 2 oder 3;
  • Fig. 12 ist eine Darstellung privater Speicherstellen in der Speicherabbildung der globalen Speichermodule des Systems der Fig. 1, 2, 3 und 4;
  • Fig. 13 zeigt ein Blockdiagramm des Systems gemäß einer Ausführungsform der Erfindung mit einer fehlertoleranten Energieversorgung;
  • Fig. 14 zeigt ein Ablaufdiagramm des Fehlererfassungsprozesses durch Isolierung des Fehlers bei einem fehlerhaften Modul und durch Abschalten des Moduls;
  • Fig. 15 zeigt ein Ablaufdiagramm des Prozesses zum Wiederherstellen des Systems, wenn ein Ersatzmodul eingebaut wird;
  • Fig. 16 zeigt ein Zeitablaufdiagramm von verschiedenen Ereignissen bei der Ausführung einer Energieausfallprozedur;
  • Fig. 17 zeigt ein Diagramm der Baumstruktur des /config- Dateisystems gemäß eines Merkmals der Erfindung.
  • In Fig. 1 ist eine Ausführungsform eines Rechnersystems gezeigt, welches Merkmale der Erfindung verwendet und drei identische Prozessoren 11, 12 und 13 hat, die als CPU-A, CPU-B und CPU-C bezeichnet sind, und die wie ein logischer Prozessor arbeiten, wobei alle drei üblicherweise denselben Befehlsstrom ausführen; die drei Prozessoren führen nur dann nicht denselben Befehlsstrom aus, wenn solche Operationen wie Einschalt- Selbsttest, Diagnose und dergleichen durchgeführt werden. Die drei Prozessoren sind mit zwei Speichermodulen 14 und 15 gekoppelt, die als Speicher #1 und Speicher #2 bezeichnet sind, wobei jeder Speicher die gleichen Daten in dem gleichen logischen Adreßraum speichert. Bei einer bevorzugten Ausführungsform enthält jeder der Prozessoren 11, 12 und 13 auch seinen eigenen lokalen Speicher 16, auf den nur der Prozessor zugreifen kann, welcher diesen Speicher enthält. Fig. 1 zeigt ein Rechnersystem der Bauart, das Merkmale wie die Reintegration, Energieausfallprozedur und automatischen Neustart gemäß der Erfindung realisieren kann. Selbstverständlich können diese Merkmale auch in Systemen verwendet werden, die weniger spezifisch sind und keine Redundanz oder dergleichen aufweisen, es ist jedoch wahrscheinlicher, daß sie in fehlertoleranten Systemen Verwendung finden werden.
  • Jeder der Prozessoren 11, 12 und 13 sowie jedes der Speichermodule 14 und 15 hat seinen eigenen getrennten Taktoszillator 17; bei dieser Ausführungsform laufen die Prozessoren nicht in "verriegeltem Gleichtakt" (lock step), sondern sie sind vielmehr lose synchronisiert, d. h. es werden Ereignisse, wie externe Speicherzugriffe, dazu verwendet, die CPUs zu synchronisieren. Externe Interrupts (Unterbrechungen) werden zwischen den drei CPUs mittels einer Technik synchronisiert, die einen Satz Busse 18 verwendet, um die Interruptaufforderungen und den Status von jedem der Prozessoren den anderen beiden zuzuführen; jeder der Prozessoren CPU-A, CPU-B und CPU-C reagiert auf die drei Interruptaufforderungen, seine eigene und die zwei von den anderen CPUs empfangenen, um die CPUs an derselben Stelle in dem Ausführungsstrom zu unterbrechen. Die Spei chermodule 14 und 15 entscheiden über die Speicherzugriffe durch Mehrheitsauswahl (vote) und lassen einen Speicherzugriff nur zu, wenn alle drei CPUs dieselbe Anforderung gemacht haben (wobei für Fehler Vorkehrungen getroffen sind). Auf diese Weise werden die Prozessoren bei dem Auftreten externer Ereignisse (Speicherzugriffe) synchronisiert, was dazu führt, daß die Prozessoren üblicherweise denselben Befehlsstrom in derselben Reihenfolge ausführen, wobei jedoch die Taktzyklen in der Zeit zwischen den Synchronisierungsereignissen nicht notwendig vollständig synchron sind. Zusätzlich werden externe Interrupts synchronisiert, so daß sie an derselben Stelle im dem Befehlsstrom der CPU ausgeführt werden.
  • Der Prozessor CPU-A 11 ist über einen Bus 21 mit dem Speichermodul #1 14 und dem speichermodul #2 15 verbunden; ähnlich ist die CPU-B über einen Bus 22 mit den Modulen 14 und 15 verbunden, und die CPU-C ist über einen Bus 23 mit den Speichermodulen verbunden. Diese Busse 21, 22, 23 umfassen jeweils einen Adressen/Daten-Multiplexbus von 32 Bit, einen Befehlsbus und Steuerleitungen für die Adreß- und Daten-Übertragungsauslösung (Strobe). Die CPUs steuern diese Busse 21, 22 und 23, so daß es keine Vermittlung (arbitration) oder Busanforderung und Busgewährung gibt.
  • Jedes der Speichermodule 14 und 15 ist getrennt mit einem zugehörigen I/O-Bus 24 oder 25 verbunden, und jeder dieser Busse ist mit zwei (oder mehr) I/O-Prozessoren 26 und 27 verbunden. Das System kann mehrere I/O-Prozessoren aufweisen, je nachdem, was benötigt wird, um die I/O-Geräte zu versorgen, die bei der speziellen Systemkonfiguration benötigt werden. Jeder der I/O-Prozessoren 26 und 27 ist mit einem Bus 28 verbunden, und jeder Bus 28 ist mit einem oder mehreren Busschnittstellenmodulen 29 für die Verbindung mit einer I/O- Standardsteuereinrichtung 30 verbunden, die eine VMEbusTM- Steuereinrichtung sein kann. Jedes der Busschnittstellenmodule 29 ist mit zwei Bussen 28 verbunden, so daß der Ausfall eines I/O-Prozessors 26 oder 27 oder der Ausfall eines der Buskanäle 28 toleriert werden kann. Die I/O-Prozessoren 26 und 27 können von den CPUs 11, 12 und 13 über die Speichermodule 14 und 15 addressiert werden, und sie können den CPUs über die Speichermodule einen Interrupt anzeigen. Plattenlaufwerke, Terminals mit CRT-Bildschirmen (CRT = cathode ray tube; Kathodenstrahlröhre) und Tastaturen sowie Netzadapter sind übliche Peripheriegeräte, die von den Steuereinrichtungen 30 betrieben werden. Die Steuereinrichtungen 30 machen die DMA-Zugriffe auf die Speichermodule 14 und 15, um Datenblöcke zu übertragen. Jeder der I/O-Prozessoren 26, 27 etc. hat bestimmte einzelne Leitungen, die mit jedem der Speichermodule für die Busanforderung, Busgewährung etc. direkt verbunden sind; diese Punkt- zu-Punkt-Verbindungen werden "Radiale" genannt und sind in einer Gruppe aus Radialleitungen 31 enthalten.
  • Ein Systemstatusbus 32 ist mit jeder der CPUs 11, 12 und 13, mit jedem Speichermodul 14 und 15 und mit jedem der I/O-Prozessoren 26 und 27 einzeln verbunden, um Information über den Status jedes Elements vorzusehen. Dieser Statusbus liefert Information darüber, welche der CPUs, Speichermodule und I/O- Prozessoren sich momentan in dem System befinden und fehlerfrei arbeiten, und diese Information wird gemäß eines Merkmals der Erfindung in dem /config-Dateisystem aufbewahrt.
  • Ein Quittung/Statusbus 33, der die drei CPUs und die zwei Speichermodule verbindet, umfaßt einzelne Leitungen, über welche die Module 14 und 15 Quittungssignale an die CPUs senden, wenn Speicheraufrufe von den CPUs gemacht werden, wobei gleichzeitig ein Statusfeld gesendet wird, um über den Status des Befehls zu berichten sowie darüber, ob er richtig ausgeführt wurde. Die Speichermodule überprüfen nicht nur die Parität der aus dem globalen Speicher gelesenen und in diesen geschriebenen Daten, sondern sie prüfen auch die Parität der Daten, welche durch die Speichermodule zu oder von den I/O- Bussen 24 und 25 gehen, sowie die Gültigkeit der Befehle. Diese Überprüfungen werden über die Statusleitungen im Bus 33, den CPUs 11, 12 und 13 mitgeteilt, so daß dann, wenn Fehler auftreten, eine Fehlerroutine gestartet werden kann, um eine fehlerhafte Komponente zu isolieren.
  • Obwohl beide Speichermodule 14 und 15 dieselben Daten in dem globalen Speicher speichern und so arbeiten, daß jeder Speicherzugriff doppelt ausgeführt wird, ist zu jeder gegebenen Zeit eines dieser Speichermodule als primäres Modul und das andere als Backup-Modul bezeichnet. Speicherschreiboperationen werden mit beiden Speichermodulen ausgeführt, so daß beide aktuell sind, und auch Speicherleseoperationen werden mit beiden ausgeführt, jedoch nur das primäre Modul lädt tatsächlich die gelesenen Daten zurück auf die Busse 21, 22 und 23, und nur das primäre Speichermodul steuert die Vermittlung für die Mehrfachmaster-Busse 24 und 25. Damit das primäre und das Backup-Modul weiter dieselben Operationen ausführen, überträgt ein Bus 34 Steuerinformation vom primären Modul zum Backup-M- odul. Jedes Modul kann beim Hochfahren die Rolle des primären Moduls übernehmen, und die Rolle kann während des Betriebs durch Softwaresteuerung getauscht werden, die Rollen können auch getauscht werden, wenn bestimmte Fehlerbedingungen von den CPUs oder anderen fehlersensitiven Teilen des Systems erfaßt werden.
  • Bestimmte in den CPUs erzeugte Interrupts werden von den Speichermodulen 14 und 15 ebenfalls durch Mehrheitsauswahl gewählt. Wenn die CPUs auf eine solche Interruptbedingung stoßen (und nicht angehalten werden), signalisieren sie den Speichermodulen über einzelne Leitungen in einem Interruptbus 35 eine Interruptanforderung, so daß unter den drei Interruptanforderungen von den drei CPUs durch Mehrheitsauswahl ausgewählt werden kann. Wenn über alle drei Interrupts abgestimmt wurde, senden die Speichermodule jeweils ein gewähltes Interruptsignal an die drei CPUs über den Bus 35. Diese Mehrheitsauswahl der Interrupts dient auch zum Überprüfen des Betriebs der CPUs. Die drei CPUs synchronisieren das gewählte CPU- Interruptsignal über den CPU-Verbindungsbus 18 und legen den Interrupt an die Prozessoren bei der gleichen Stelle in dem Befehlsstrom an. Diese Interruptsynchronisierung wird erreicht, ohne eine der CPUs anzuhalten.
  • CPU-Modul:
  • In Fig. 2 ist einer der Prozessoren 11, 12 oder 13 mit weiteren Einzelheiten gezeigt. Alle drei CPU-Module haben bei einer bevorzugten Ausführungsform den gleichen Aufbau, so daß hier nur die CPU-A beschrieben wird. Um die Kosten wettbewerbsfähig zu halten, und um auf bereits entwickelte Software und Betriebssysteme leicht zurückgreifen zu können, wird vorzugsweise ein im Handel erhältlicher Mikroprozessorchip verwendet, wobei unter einer Reihe von Bauteilen jedes ausgewählt werden kann. Die RISC-Architektur (RISC = reduced instruction set; reduzierter Befehlssatz) hat gewisse Vorteile beim Realisieren der losen Synchronisierung, wie noch beschrieben wird, es können aber auch konventionellere CISC-Mikroprozessoren (CISC = complex instruction set; komplexer Befehlssatz) verwendet werden, wie die Bauteile Motorola 68030 oder Intel 80386 (die mit Geschwindigkeiten von 20 MHz und 25 MHz erhältlich sind). Hochgeschwindigkeits-RISC-Mikroprozessorbauteile mit 32 Bit sind in drei Grundtypen von verschiedenen Quellen erhältlich; Motorola erzeugt ein Bauteil mit der Teilenummer 88000; MIPS Computer Systems, Inc. und andere stellen eine Chipgruppe her, die mit MIPS bezeichnet ist; und Sun Microsystems hat einen sog. SPARCTM (skalierbare Prozessorarchitektur) angekündigt. Cypress Semiconductor aus San Jose, Kalifornien, stellt zum Beispiel einen Mikroprozessor her, der die Teilenummer CY7C601 hat und 20MIPS (Millionen Befehle pro Sekunde) vorsieht, mit 33 MHz getaktet wird und die SPARC-Norm unterstützt; und Fujitsu stellt einen CMOS RISC-Mikroprozessor mit der Teilenummer S-25 her, der ebenfalls die SPARC-Norm unterstützt.
  • Die CPU-Karte oder -Modul verwendet bei dem gezeigten Beispiel einen Mikroprozessorchip 40, der in diesem Fall ein R2000-Bauteil ist, das von MIPS Computer Systems, Inc. entworfen wurde und auch von Integrated Device Technology, Inc. hergestellt wird. Das R2000-Bauteil ist ein 32-Bit-Prozessor mit einer RISC-Architektur, der eine hohe Leistungsfähigkeit, z. B. 12 MIPS bei einer Taktrate von 16,67 MHz. Es können auch andere Versionen dieses Bauteils mit höheren Geschwindigkeiten verwendet werden, wie der 83000, der 20 MIPS bei einer Taktrate von 25 MHz vorsieht. Der Prozessor 40 weist auch einen Coprozessor auf, der für die Speicherverwaltung verwendet wird, einschließlich eines Übersetzungs-Vorgriffpuffers zum Cache- Speichern von Übersetzungen logischer Adressen in physische Adressen. Der Prozessor 40 ist mit einem lokalen Bus gekoppelt, der einen Datenbus 41, einen Adreßbus 42 und einen Steuerbus 43 umfaßt. Getrennte Befehls- und Daten-Cachespeicher 44 und 45 sind mit diesem lokalen Busverbunden. Diese Cachespeicher haben z. B. eine Größe von 64KByte und es wird innerhalb eines einzigen Taktzyklus des Prozessors 40 auf sie zugegriffen. Ein numerischer oder Gleitkomma-Coprozessor 46 ist mit dem lokalen Bus verbunden, wenn eine weitere Leistungserhöhung für diese Art der Berechnung benötigt wird; der numerische Prozessor ist im Handel ebenfalls von MIPS Computer Systems als Teilnummer R2010 erhältlich. Der lokale Bus 41, 42, 43 ist über einen Schreibpuffer 50 und einen Lesepuffer 51 mit einer internen Busstruktur verbunden. Der Schreibpuffer ist ein im Handel erhältliches Bauteil, Teilenummer R2020, und dient dazu, es dem Prozessor 40 zu ermöglichen, die Ausführung von Laufzyklen nach der Speicherung von Daten und Adressen in dem Schreibpuffer 50 für eine Schreiboperation fortzusetzen, anstatt Haltezyklen auszuführen, während die Schreiboperation beendet wird.
  • Zusätzlich zu dem Weg durch den Schreibpuffer 50 ist ein Weg vorgesehen, der es dem Prozessor 40 erlaubt, Schreiboperationen unter Umgehung des Schreibpuffers 50 auszuführen. Dieser Weg ist ein Schreibpuffer-Bypass 52, der es dem Prozessor ermöglicht, gesteuert durch die Software synchrone Schreibvorgänge auszuführen. Wenn der Schreibpuffer-Bypass 52 aktiviert ist (und der Schreibpuffer 50 nicht aktiviert ist) und der Schreibprozessor eine Schreiboperation ausführt, hält der Prozessor an, bis die Schreiboperation beendet ist. Wenn dagegen der Schreibpuffer-Bypass 52 deaktiviert ist und Schreiboperationen ausgeführt werden, hält der Prozessor nicht an, weil die Daten in den Schreibpuffer 50 geschrieben werden (außer wenn der Schreibpuffer voll ist). Wenn der Schreibpuffer 50 aktiviert ist, während der Prozessor 40 eine Schreiboperation ausführt, fängt der Schreibpuffer 50 die Ausgangsdaten von Bus 41 und die Adressen von dem Bus 42 sowie die Steuerbefehle von dem Bus 43 ein. Der Schreibpuffer 50 kann bis zu vier solcher Daten-Adressengruppen halten, während er darauf wartet, die Daten an den Hauptspeicher weiterzugeben. Der Schreibpuffer läuft synchron zu dem Takt 17 des Prozessorchips 40, so daß Prozessor-zu-Puffer-Übertragungen synchron und mit der Maschinenzyklusgeschwindigkeit des Prozessors ablaufen. Der Schreibpuffer 50 signalisiert dem Prozessor, wenn er voll ist und keine Daten annehmen kann. Leseoperationen des Prozessors 40 werden anhand der Adressen überprüft, die in dem vier Stufen tiefen Schreibpuffer 50 enthalten sind, so daß dann, wenn versucht wird, eines der Datenworte zu lesen, die in dem Schreibpuffer darauf warten, in den Speicher 16 oder den globalen Speicher geschrieben zu werden, das Lesen unterbrochen wird, bis das Schreiben beendet ist.
  • Die Schreib- und Lesepuffer 50 und 51 sind mit einer internen Busstruktur gekoppelt, die einen Datenbus 51, einen Adreßbus 54 und einen Steuerbus 55 umfaßt. Dieser interne Bus greift auf den lokalen Speicher 16 zu, und eine Busschnittstelle 56, die mit dem internen Bus verbunden ist, wird zum Zugreifen auf den Systembus 21 (oder den Bus 22 oder 23 für die anderen CPUs) verwendet. Die getrennten Daten- und Adreßbusse 53 und 54 des internen Busses werden (wie für die Busse 41 und 42 des lokalen Busses abgeleitet) in einen Adreß/Daten-Multiplexbus 57 in dem Systembus 21 umgewandelt, und die Befehls- und Steuerleitungen werden entsprechend in Befehlsleitungen 58 und Steuerleitungen 59 in diesem externen Bus umgewandelt.
  • Die Busschnittstelleneinheit 56 empfängt auch die Quittung/- Statusleitungen 33 von den Speichermodulen 14 und 15. Innerhalb dieser Leitungen 33 sind getrennte Statusleitungen 33-1 oder 33-2 mit jedem der Module 14 und 15 gekoppelt, so daß bei einer Übertragung (Lesen oder Schreiben) zwischen den CPUs und dem globalen Speicher die Antworten aus beiden Speichermodulen bewertet werden können, wie noch erläutert wird.
  • Der lokale Speicher 16 umfaßt bei einer Ausführungsform ungefähr 8 MByte RAM, auf das innerhalb von etwa drei oder vier Maschinenzyklen des Prozessors 40 zugegriffen werden kann, wobei dieser Zugriff synchron zu dem Takt 17 dieser CPU abläuft, während die Speicherzugriffszeit beim Zugreifen auf die Module 14 und 15 wesentlich größer ist als beim Zugreifen auf den lokalen Speicher, und während dieser Zugriff auf die Speichermodule 14 und 15 asynchron abläuft und dem Synchronisierungs-Verwaltungsaufwand (Overhead) unterliegt, der dadurch entsteht, daß darauf gewartet wird, daß alle CPUs die Anforderung machen, über die dann abgestimmt wird. Zum Vergleich, der Zugriff auf einen üblichen, im Handel erhältlichen Plattenspeicher über die I/O-Prozessoren 26, 27 und 28 wird in Millisekunden gemessen, d. h. er ist erheblich langsamer als der Zugriff auf die Module 14 und 15. Es gibt also eine Hierarchie für den Speicherzugriff durch den CPU-Chip 40, wobei die Be fehls- und Datencachespeicher 44 und 45 ganz oben angesiedelt sind und eine Trefferrate von vielleicht 95% haben, wenn eine Cachegröße von 64 KByte und ein geeigneter Füll-Algorithmus verwendet werden. Am zweithöchsten ist der lokale Speicher 16 angesiedelt, wobei wiederum bei Verwendung der heutigen virtuellen Speicherverwaltungsalgorithmen eine Trefferrate von vielleicht 95% für Speicherzugriffe erreicht wird, bei denen im Cachespeicher kein Treffer, sondern in dem lokalen Speicher 16 ein Treffer erzielt wird, wobei die Größe des lokalen Speichers z. B. etwa 8 MByte beträgt. Aus Sicht des Prozessorchips 40 ist das Nettoergebnis, daß vielleicht mehr als 99% der Speicherzugriffe (jedoch nicht der I/O-Zugriffe) synchron sind und entweder in demselben Maschinenzyklus oder in drei oder vier Maschinenzyklen erfolgen.
  • Auf den lokalen Speicher 16 wird über den internen Bus von einer Speichersteuereinrichtung 60 zugegriffen, welche die Adressen von dem Adreßbus 54 und die Adreßübertragungsimpulse von dem Steuerbus 55 empfängt und getrennte Zeilen- und Spaltenadressen und z. B. RAS- und CAS-Steuerelemente erzeugt, wenn der lokale Speicher DRAMs mit Multiplexadressierung verwendet, wie es üblicherweise der Fall ist. Daten werden über den Datenbus 53 in den lokalen Speicher geschrieben und aus diesem gelesen. Zusätzlich greift der interne Bus auf verschiedene lokale Register 61 sowie einen nicht flüchtigen Speicher 62, wie ein NVRAN, und auf Hochgeschwindigkeits-PROMS 63 zu, je nachdem, was das Betriebssystem benötigt; ein Teil dieses Teiles des Speichers wird nur beim Einschalten verwendet, ein Teil wird von dem Betriebssystem verwendet und kann sich fast andauernd in dem Cachespeicher 44 befinden, ein anderer Teil kann innerhalb des nicht verborgenen (cached) Teils der Speicherabbildung liegen.
  • Externe Interrupts werden an den Prozessor 40 und einen der Pins des Steuerbusses 43 oder 55 von einer Interruptschaltung 65 in dem CPU-Modul der Fig. 2 angelegt. Über diese Art des Interrupt wird in der Schaltung 65 abgestimmt, so daß vor der Ausführung des Interrupts durch den Prozessor 40 ermittelt wird, ob der Interrupt zu allen drei CPUs geführt werden soll oder nicht; zu diesem Zweck empfängt die Schaltung 65 Eingangssignale 66 von den anderen beiden CPUs 12 und 13, die vermitteln, daß ein Interrupt anhängig ist, und sendet ein Interrupt-Anhängig-Signal über die Leitung 67 an die beiden CPUs, wobei diese Leitung Teil des Busses 18 ist, der die drei CPUs 11, 12 und 13 miteinander verbindet. Auch bei der Mehrheitsauswahl anderer Arten von Interrupts, insbesondere von einer CPU erzeugter Interrupts, kann die Schaltung 65 ein Interrupt-Anforderungssignal von dieser CPU an beide Speichermodule 14 und 15 über eine Leitung 68 in den Bus 35 senden und dann ein getrenntes gewähltes Interrupt-Signal von den Speichermodulen über die Leitungen 69 und 70 empfangen; beide Speichermodule werden den externen Interrupt weitergeben, der bearbeitet werden soll. Ein von einer externen Quelle erzeugter Interrupt, z. B. von einer Tastatur oder einem Plattenlaufwerk auf einem der I/O-Kanäle 28, wird von der Schaltung 65 nicht an den Interruptpin des Chips 40 angelegt, bis nicht jede der CPUs 11, 12 und 13 an derselben Stelle des Befehlsstroms ist, wie noch erläutert wird.
  • Da die Prozessoren 40 von getrennten Taktoszillatoren 17 getaktet werden, muß es einen Mechanismus geben, um die Prozessoren 40 periodisch wieder zu synchronisieren. Obwohl die Taktoszillatoren 17 dieselbe Nennfrequenz haben, z. B. 16,67 MHz, und die Toleranz für diese Einrichtungen ungefähr 25 ppm (promill) beträgt, können die Prozessoren potentiell um viele Zyklen außer Phase geraten, wenn sie nicht periodisch wieder synchronisiert werden. Natürlich werden die CPUs jedes Mal dann, wenn ein externer Interrupt auftritt, in dem Sinne wieder synchronisiert, daß sie an derselben Stelle in ihrem Befehlsstrom unterbrochen werden (wegen des Interrupt-Synchro nisierungsmechanismus), dies hilft jedoch nicht dabei, die Zyklenzahl zu synchronisieren. Der Mechanismus der Mehrheitsauswahl der Speicherzugriffe in den Speichermodulen 14 und 15 synchronisiert die CPUs (in Echtzeit), wie noch erläutert wird. Diese Bedingungen führen jedoch zu langen Perioden, während derer kein Speicherzugriff auftritt, so daß ein zusätzlicher Mechanismus verwendet wird, um Haltezyklen einzubringen, um die Prozessoren 40 wieder zu synchronisieren. Ein Zyklenzähler 71 ist mit dem Takt 17 und den Steuerpins des Prozessors 40 über den Steuerbus 43 verbunden, um Maschinenzyklen zu zählen, welche Laufzyklen (jedoch nicht Haltezyklen) sind. Dieser Zähler 71 umfaßt ein Zählregister mit einem maximalen Zählwert, der so gewählt ist, daß er der Periode entspricht, während derer die maximal zulässige Drift zwischen den CPUs auftreten könnte (unter Berücksichtigung der spezifizierten Toleranz für die Quarzoszillatoren); wenn dieses Zählregister überläuft, werden Maßnahmen getroffen, um die schnelleren Prozessoren anzuhalten, bis der oder die langsamen Prozessor(en) aufholen. Dieser Zähler 71 wird zurücksgesetzt, wenn eine Synchronisierung abgeschlossen ist, indem auf die Speichermodule 14 und 15 zugegriffen wird. Ferner wird ein Auffrischzähler 72 verwendet, um Auffrischzyklen in dem lokalen Speicher 16 durchzuführen, wie noch erläutert wird. Zusätzlich zählt ein Zähler 73 Maschinenzyklen, die Laufzyklen, jedoch keine Haltezyklen sind, wie der Zähler 71, wobei der Zähler 73 jedoch durch einen Speicherzugriff nicht zurückgesetzt wird; der Zähler 73 wird dazu verwendet, die Synchronisierung wie unten erläutert zu unterbrechen, und zu diesem Zweck erzeugt er Ausgangssignale CC-4 und CC-8 für die Interrupt-Synchronisierungsschaltung 65.
  • Der Prozessor 40 weist einen RISC-Befehlssatz auf, der keine Speicher-zu-Speicher-Befehle, sondern nur Speicher-zu-Register- oder Register-zu-Speicher-Befehle (d. h. Laden oder Speicher) unterstützt. Es ist wichtig, die häufig verwendeten Da ten und den momentan laufenden Code im lokalen Speicher zu haben. Es wird daher eine Blockübertragungsfunktion von einer DMA-Ablaufsteuereinrichtung 74 vorgesehen, die mit der Busschnittstelle 56 gekoppelt ist. Der Prozessor 40 schreibt ein Wort in ein Register in der DMA-Schaltung 74, das als ein Befehl dient, und er schreibt die Anfangsadresse und die Blocklänge in Register in dieser Schaltung 74. Bei einer Ausführungsform hält der Mikroprozessor an, während die DMA-Schaltung übernimmt und die Blockübertragung ausführt, wobei sie die notwendigen Adressen, Befehle und Übertragungssignale auf den Bussen 53 bis 55 und 21 erzeugt. Der von dem Prozessor 40 ausgeführte Befehl zum Auslösen dieser Blockübertragung kann das Lesen aus einem Register in der DMA-Schaltung 74 sein. Da die Speicherverwaltung bei dem Betriebssystem UNIX sich auf Bedarfs-Seitenadressierung stützt, werden diese Blockübertragungen meistens Seiten sein, die zwischen dem globalen und dem lokalen Speicher bewegt werden, sowie I/O-Verkehr. Eine Seite umfaßt 4 KBytes. Selbstverständlich unterstützten die Busse 21, 22 und 23 auch das Lesen und Schreiben einzelner Worte zwischen den CPUs und dem globalen Speicher; die beschriebenen Blockübertragungen sind nur zwischen dem lokalen und dem globalen Speicher möglich.
  • Der Prozessor:
  • In Fig. 3 ist ein Mikroprozessor 40 des Typs R2000 oder R3000 für ein Ausführungsbeispiel mit weiteren Einzelheiten gezeigt. Das Bauteil umfaßt eine 32 Bit-Haupt-CPU 75, die 32 32 Bit- Allzweckregister 76, eine 32 Bit-ALU 77, ein Null-auf-64 Bit- Schieberegister 78 und eine 32-mal-32-Multiplizierer/Teilerschaltung 79 umfaßt. Die CPU weist auch einen Programmzähler 80 mit zugehörigem Inkrementierer und Addierer auf. Diese Komponenten sind mit einer Prozessor-Busstruktur 81 gekoppelt, die mit dem lokalen Datenbus 41 und einem Befehlsdekoder 82 mit zugehöriger Steuerlogik gekoppelt ist, um Befehle auszu führen, die über den Datenbus 41 abgerufen werden. Der lokale 32 Bit-Adreßbus 42 wird von einer virtuellen Speicherverwaltungsanordnung angesteuert, die einen Übersetzungs-Vorgriffpuffer (TLB; translation lookaside buffer) 83 innerhalb eines Speicherverwaltungs-Coprozessors auf dem Chip aufweist. Der TLB 83 enthält 64 Einträge, die mit einer virtuellen Adresse verglichen werden, die von dem Mikroprozessorbus 75 über einen virtuellen Adreßbus 84 empfangen werden. Der niederwertige 16 Bit-Teil 85 des Busses 42 wird von dem niederwertigen Teil dieses virtuellen Adreßbusses 84 angesteuert, und der höherwertige Teil wird von dem Bus 84 angesteuert, wenn die virtuelle Adresse als die physische Adresse verwendet wird, oder er ist als der Tag-Eintrag von dem TLB 83 bei dem Ausgang 86, wenn eine virtuelle Adressierung verwendet wird und ein Treffer vorliegt. Die Steuerleitungen 43 des lokalen Busses sind mit einer Pipeline- und Bussteuerschaltung 87 verbunden, die von der internen Busstruktur 81 und der Steuerlogik 82 angesteuert wird.
  • Der Mikroprozessorblock 75 in dem Prozessor 40 ist insofern ein RISC-Typ, als die meisten Befehle in einem Maschinenzyklus ausgeführt werden und der Befehlssatz Register-zu-Register und Lade/Speicher-Befehle anstelle von komplexen Befehlen verwendet, die Speicherzugriffe zusammen mit ALU-Operationen erfordern. Die Haupt-CPU 74 ist stark Pipeline-orientiert, um leichter das Ziel zu erreichen, im Mittel einen Befehl pro Maschinenzyklus auszuführen. Ein einzelner Befehl wird während einer Periode von fünf Maschinenzyklen ausgeführt, während ein Maschinenzyklus gleich eine Taktperiode oder bei einem Takt 17 von 16,67 MHz gleich 60 ns ist. Der Aufbau und der Betrieb des R2000-Prozessors ist offenbart in Kane, "MIPS R2000 RISC Architecture", Prentice Hall, 1987.
  • Speichermodul:
  • In Fig. 4 ist eines der Speichermodule 14 oder 15 mit weiteren Einzelheiten dargestellt. Bei einer bevorzugten Ausführungsform haben beide Speichermodule den gleichen Aufbau, so daß nur das Speichermodul #1 gezeigt ist. Das Speichermodul umfaßt drei Eingangs/Ausgangs-Anschlüsse (Ports) 91, 92 und 93, die mit den drei Bussen 21, 22 und 23 gekoppelt sind, welche von den CPUs 11, 12 bzw. 13 kommen. Die Eingangssignale für diese Ports werden in Registern 94, 95 und 96 zwischengespeichert (latched), von denen jedes getrennte Bereiche zum Speichern von Daten, Adressen, Befehlen und Übertragungsauslösesignalen (Strobes) für einen Schreibvorgang, oder Adressen, Befehle und Übertragungsauslösesignale für einen Lesevorgang aufweist. Der Inhalt dieser drei Register wird von einer Mehrheitsauswahlschaltung 100 durch Mehrheitsauswahl ausgewählt, wobei die Mehrheitsauswahlschaltung Eingänge aufweist, die mit allen Abschnitten aller drei Register verbunden sind. Wenn alle drei CPUs 11, 12 und 13 dieselbe Speicheranforderung (selbe Adresse, selber Befehl) machen, wie es der Fall sein sollte, weil die CPUs üblicherweise denselben Befehlsstrom ausführen, wird die Speicheranforderung zugelassen; sobald jedoch die erste Speicheranforderung auf eines der drei Register 94, 95 oder 96 gegeben wird, wird sie sofort weitergegeben, um mit dem Speicherzugriff zu beginnen. Zu diesem Zweck werden die Adressen, Daten und Ziele an einen internen Bus übergehen, der einen Datenbus 101, einen Adreßbus 102 und einen Steuerbus 103 umfaßt. Über diesen internen Bus greift die Speicherabfrage auf verschiedene Resourcen zu, abhängig von der Adresse und von der Systemkonfiguration.
  • Bei einer Ausführungsform wird von dem internen Bus auf ein großes DRAM 104 zugegriffen, indem eine Speicher-Steuereinrichtung 105 verwendet wird, welche die Adresse von dem Adreßbus 102 und die Speicheranforderung und Übertragungsaus lösesignale von dem Steuerbus 103 annimmt, um eine Zeilen- und Spalten-Multiplexadresse für das DRAM zu erzeugen, so daß Daten über den Datenbus 101 ein/ausgegeben werden. Dieses DRAM 100 wird oft als globaler Speicher bezeichnet, und es hat bei einer Ausführungsform eine Größe von ungefähr 32 MByte. Zusätzlich kann der interne Bus 101 bis 103 auf Steuer- und Statusregister 106, ein nichtflüchtiges RAM 107 und ein Schreibschutz-RAM zugreifen. Der Speicherzugriff durch die CPUs kann auch den Speicher in dem Speichermodul 14 oder 15 umgehen und über eine Busschnittstelle 109 auf die I/O-Busse 24 und 25 zugreifen, wobei die Eingänge der Schnittstelle mit dem internen Bus 101 bis 103 verbunden sind. Wenn das Speichermodul das primäre Speichermodul ist, steuert ein Busvermittler 110 in jedem Speichermodul die Busschnittstelle 109. Wenn das Speichermodul ein Backup-Modul ist, steuert der Bus 34 die Busschnittstelle 109.
  • Ein Speicherzugriff auf das DRAM 104 wird ausgelöst, sobald die erste Anforderung auf eines der Register (Latch) 94, 95 oder 96 geschaltet wird, er darf jedoch nicht abgeschlossen werden, bis die Mehrheitsauswahlschaltung 100 nicht ermittelt hat, daß mehrere Anforderungen gleich sind, wobei Vorkehrungen für Fehler getroffen sind. Die Ankunft der ersten der drei Anforderungen bewirkt, daß der Zugriff auf das DRAM 104 beginnt. Zum Lesen wird das DRAM 104 adressiert, die Vorzeichenverstärker werden abgetastet und das Datenausgangssignal wird an den DRAM-Ausgängen erzeugt, so daß dann, wenn die Mehrheitsauswahl erfolgreich war, nachdem die dritte Anforderung empfangen wurde, die angeforderten Daten bereit sind, unmittelbar zur CPU zurückübertragen zu werden. Auf diese Weise wird die Mehrheitsauswahl dem DRAM-Zugriff überlagert.
  • In Fig. 5 legen die Busse 21, 22 und 23 Speicheranforderungen an die Ports 91, 92 und 93 der Speichermodule 14 und 15 in der gezeigten Form an. Jeder dieser Busse besteht aus 32 bidirek tionalen Adreß/Daten-Multiplexleitungen, 13 unidirektionalen Steuerleitungen und zwei Übertragungsauslöseleitungen (Strobe- Leitungen). Die Befehlsleitungen umfassen ein Feld, das den Typ der Busaktivität spezifiziert, wie Lesen, Schreiben, Blockübertragung, Einzelübertragung, I/O-Lesen oder -Schreiben etc. Ein Feld dient ferner als eine Byte-Aktivierung für die vier Bytes. Die Strobes sind AS, Adreß-Strobe, und DS, Daten- Strobe. Die CPUs 11, 12 und 13 steuern jeweils ihren eigenen Bus 21, 22 bzw. 23; bei dieser Ausführungsform handelt es sich nicht um Mehrfachmaster-Busse; es gibt keine Verkettung oder Vermittlung. Beim Schreiben schickt die CPU die Adressen und Befehle zusammen mit dem Adreß-Strobe AS (aktiv, wenn niedrig) in einem Zyklus auf den Bus, in einem nachfolgenden Zyklus (möglicherweise, jedoch nicht notwendig der nächste Zyklus) schickt sie die Daten gleichzeitig mit einem Daten-Strobe DS auf die Adreß/Daten-Leitungen des Busses. Der Adreß-Strobe AS von jeder CPU bewirkt, daß die Adressen und Befehle, die dann an den Ports 91, 92 oder 93 auftreten, in die Adreß- und Befehlsabschnitte der Register 94, 95 und 96 geschaltet werden, und wenn die Strobes auftreten, bewirkt der Datenstrobe DS, daß die Daten gespeichert werden. Wenn mehrere (bei dieser Ausführungsform zwei der drei) Busse 21, 22 und 23 dieselbe Speicheranforderung in die Register 94, 95 und 96 schicken, gibt die Mehrheitsauswahlschaltung 100 den letztendlichen Befehl an den Bus 103, und der Speicherzugriff wird ausgeführt. Wenn der Befehl ein Schreibbefehl ist, wird ein Quittungssignal ACK über ein Leitung 112 (insbesondere die Leitung 112-1 für den Speicher #1 und die Leitung 112-2 für den Speicher #2) zu jeder CPU zurückgesendet, sobald der Schreibvorgang ausgeführt ist, und gleichzeitig werden Statusbits über den Quittungs/Status-Bus 33 (insbesondere die Leitungen 33-1 für den Speicher #1 und die Leitung 33-2 für den Speicher #2) zu einer Zeit T3 in Fig. 5 an jede CPU geschickt. Die Verzögerung T4 zwischen dem letzten Strobe DS (oder AS, wenn gelesen wird) und dem Signal ACK zu Zeit T3 ist abhängig davon variabel, wieviele Zyklen die Synchronisierung der CPU zur Zeit der Speicheranforderung auseinanderläuft, und abhängig von der Verzögerung der Mehrheitsauswahlschaltung und der Phase des internen unabhängigen Taktes 17 des Speichermoduls 14 oder 15 im Vergleich zu dem CPU-Takt 17. Wenn die von den CPUs ausgehende Speicheranforderung ein Lesebefehl ist, werden das ACK- Signal auf den Leitungen 112-1 und 112-2 und die Statusbits auf den Leitungen 33-1 und 33-2 gleichzeitig mit dem Senden der Daten auf dem Adreß/Daten-Bus während der Zeit T3 gesendet; dadurch wird die Unterbrechung der CPUs gelöst, und mit demselben Befehl werden so die CPU-Chips 40 synchronisiert. Das heißt, die schnellste CPU wird mehr Haltezyklen durchgeführt haben, während sie darauf wartet, daß die langsameren aufholen, dann werden all drei zur selben Zeit freigegeben, obwohl die Takte 17 vermutlich außer Phase sind; der erste Befehl, der von allen drei CPUs ausgeführt wird, nachdem sie aus dem angehaltenen Zustand kommen, wird derselbe Befehl sein.
  • Alle Daten, die von dem Speichermodul 14 oder 15 zu den CPUs 11, 12 und 13 gesendet werden, egal ob die Daten aus dem DRAM 104 oder aus den Speicherstellen 106-108 gelesen werden oder I/O-Daten von den Bussen 24 und 25 sind, gehen durch ein Register 114. Dieses Register wird von dem internen Datenbus 101 geladen, und ein Ausgang 115 dieses Registers wird an die Adreß/Daten-Leitungen für die Busse 21, 22 und 23 bei den Ports 91, 92, und 93 zur Zeit T3 angelegt. Die Parität wird überprüft, wenn die Daten dieses Registers 114 geladen werden. Alle in das DRAM 104 geschriebenen Daten und alle Daten auf den I/O-Bussen haben zugeordnete Parität-Bits, die Parität- Bits werden jedoch nicht auf den Bussen 21, 22 und 23 zu den CPU-Modulen übertragen. Die bei dem Leseregister 114 erfaßten Paritätsfehler werden der CPU über die Statusbusse 33-1 und 33-2 mitgeteilt. Nur das als primär bezeichnete Speichermodul 14 oder 15 schickt die Daten in seinem Register 114 auf die Busse 21, 22 und 23. Das als Backup oder sekundär bezeichnete Speichermodul beendet die Leseoperation bis zu dem Punkt, bei dem das Register 114 geladen und die Parität überprüft wird, und berichtet den Status auf den Bussen 33-1 und 33-2, schickt jedoch keine Daten auf die Busse 21, 22 und 23.
  • Eine Steuereinrichtung 117 in jedem Speichermodul 14 oder 15 dient als eine Ablaufsteuereinrichtung (Zustandsmaschine), die von dem Taktoszillator 17 für dieses Modul getaktet wird und die verschiedenen Befehlsleitungen von dem Bus 103 und den Bussen 21-23 etc. annimmt, um Steuerbits für Laderegister und Busse zu erzeugen, externe Steuersignale zu erzeugen und dergleichen. Diese Steuereinrichtung ist auch mit dem Bus 34 zwischen den Speichermodulen 14 und 15 verbunden, der Status- und Steuerinformationen zwischen den beiden überträgt. Die Steuereinrichtung 117 in dem Modul 14 oder 15, das gerade als primär bezeichnet ist, vermittelt und entscheidet (arbitrate) über die Entscheidungseinrichtung 110 zwischen der I/O-Seite (Schnittstelle 109) und CPU-Seite (Ports 91-93) über den Zugriff auf den gemeinsamen Bus 101 bis 103. Diese von der Steuereinrichtung 117 in dem primären Speichermodul 14 oder 15 getroffene Entscheidung wird an die Steuereinrichtung 117 des anderen Speichermoduls über die Leitung 34 übertragen und zwingt das andere Speichermodul, denselben Zugriff auszuführen.
  • Die Steuereinrichtung 117 in jedem Speichermodul führt auch einen Auffrischzyklus für das DRAM 104 gestützt auf einen Auffrischzähler 118 ein, der Impulse von dem Taktoszillator 17 für dieses Modul empfängt. Das DRAM muß alle 8 Millisekunden 512 Auffrischzyklen empfangen, so daß es im Mittel ungefähr alle 15 Mikrosekunden einen Auffrischzyklus geben muß. Der Zähler 118 erzeugt daher alle 15 Mikrosekunden ein Überlaufsignal, das zur Steuereinrichtung 117 geht, und wenn ein Leerlaufzustand vorliegt (kein CPU-Zugriff oder I/O-Zugriff), der ausgeführt wird, wird ein Auffrischzyklus durch einen Befehl realisiert, der an den Bus 103 angelegt wird. Wenn eine Operation abläuft, wird der Auffrischzyklus ausgeführt, wenn die momentane Operation beendet ist. Bei längeren Operationen, wie Blockübertragungen bei einem Speicherseitenaustausch, können mehrere Auffrischzyklen aufgestaut und in einem Burstmodus ausgeführt werden, nachdem die Übertragung beendet ist; zu diesem Zweck wird die Anzahl der Überläufe des Zählers 118 seit dem letzten Auffrischzyklus in einem Register angesammelt, das dem Zähler 118 zugeordnet ist.
  • Interrupt-Anforderungen für CPU-erzeugte Interrupts werden von jeder CPU 11, 12 und 13 über Leitungen 68 in dem Interruptbus 35 einzeln empfangen; Diese Interruptanforderungen werden zu jedem Speichermodul 14 und 15 gesendet. Die Interruptanforderungsleitungen 38 in dem Bus 35 werden an eine Interrupt-Mehrheitsauswahlschaltung 119 angelegt, welche die drei Anforderungen vergleicht und ein gewähltes Interruptsignal auf einer ausgehenden Leitung 69 des Busses 35 erzeugt. Die CPUs empfangen jeweils ein gewähltes Interruptsignal auf den beiden Leitungen 69 und 70 (eines von jedem Modul 14 und 15) über den Bus 35. Die gewählten Interrupts von jedem Speichermodul 14 und 15 werden ODER-verknüpft und an die Interrupt-Synchronisierschaltung 65 übergeben. Die CPUs entscheiden softwaregesteuert, welche Interrupts bedient werden sollen. Externe Interrupts, die in den I/O-Prozessoren oder I/O-Steuereinrichtungen erzeugt werden, werden den CPUs ebenfalls durch die Speichermodule 14 und 15 über die Leitungen 69 und 70 in dem Bus 35 signalisiert, und ebenso reagieren die CPUs nur auf ein Interrupt von dem primären Modul 14 oder 15.
  • I/O-Prozessor:
  • In Fig. 6 ist einer der I/O-Prozessoren 26 oder 27 mit weiteren Einzelheiten gezeigt. Der I/O-Prozessor hat zwei identi sche Anschlüsse (Ports), einen Port 121 für den I/O-Bus 24 und einen anderen Port 122 für den I/O-Bus 25. Jeder der I/O-Busse 24 und 25 besteht aus: einem bidirektionalen 36 Bit-Adressen/- Daten-Multiplexbus 132 (der 32 Bit plus 4 Paritätsbit umfaßt), einem bidirektionalen Befehlsbus 124, der den Operationstyp definiert, der ausgeführt werden soll, wie Lesen, Schreiben, Blocklesen, Blockschreiben, etc., eine Adreßleitung, die angibt, welche Stelle adressiert wird, entweder innerhalb des I/O-Prozessors oder auf den Bussen 28, und die Byte-Maske angibt, und schließlich Steuerleitungen 125, die Adreß-Strobe, Daten-Strobe, Adreßquittung und Datenquittung umfassen.
  • Die radialen Leitungen in dem Bus 31 umfassen einzelne Leitungen von jedem der I/O-Prozessoren zu jedem Speichermodul: Busanforderung von dem I/O-Prozessor zu den Speichermodulen, Busgewähren von den Speichermodulen zu dem I/O-Prozessor, Interruptanforderungsleitungen von dem I/O-Prozessor zu dem Speichermodul und eine Rücksetzleitung von dem Speicher zu dem I/O-Prozessor. Leitungen die angeben, welches Speichermodul primär ist, sind mit jedem I/O-Prozessor über den Systemstatusbus 32 verbunden. Eine Steuereinrichtung oder Zustandsmaschine 126 in dem I/O-Prozessor der Fig. 6 empfängt die Befehls-, Steuer-, Status- und radialen Leitungen und interne Daten und Befehlsleitungen von den Bussen 28 und definiert den internen Betrieb des I/O-Prozessors einschließlich des Betriebs der Register (Latch) 127 und 128, die den Inhalt der Busse 24 und 25 empfangen und auch Information zur Übertragung auf die Busse enthalten.
  • Die Übertragung auf den Bussen 24 und 25 von dem Speichermodul zu dem I/O-Prozessor verwendet ein Protokoll, das in Fig. 7 gezeigt ist, bei dem die Adressen und Daten getrennt quittiert werden. Die Vermittlungsschaltung 110 in dem Speichermodul, das als primär bezeichnet ist, führt die Verhandlungen über den Zugriff auf die I/O-Busse 24 und 25. Wenn eine Übertragung von den CPUs auf den Eingang/Ausgang benötigt wird, wird die CPU-Anforderung der Vermittlungslogik 110 in dem Speichermodul vorgelegt. Wenn die Vermittlungsschaltung 110 diese Anforderung gewährt, legen die Speichermodule die Adressen und Befehle an die Busse 123 und 124 (beider Busse 24 und 25) zur gleichen Zeit an, zu der der Adreß-Strobe auf dem Bus 125 (beider Busse 24 und 25) zur Zeit T1 in Fig. 7 bestätigt wird. Wenn die Steuereinrichtung 126 bewirkt, daß die Adresse in dem Register 127 oder 128 gehalten wird, wird die Adreßquittierung auf dem Bus 125 bestätigt, dann legen die Speichermodule zur Zeit T2 die Daten (über beide Busse 24 und 25) auf den Bus 123 und einen Daten-Strobe auf die Leitung 125, wobei danach die Steuereinrichtung bewirkt, daß die Daten in beiden Registern 127 und 128 gehalten werden und ein Datenquittungssignal auf die Leitung 125 gebracht wird, so daß bei Empfang des Datenquittungssignals beide Speichermodule den Bus 24, 25 freigeben, indem sie das Adressen-Strobesignal deaktivieren. Der I/O-Prozessor entfernt dann das Adreßquittierungssignal.
  • Für Übertragungen von dem I/O-Prozessor zu dem Speichermodul wird, wenn der I/O-Prozessor den I/O-Bus verwenden muß, eine Busanforderung von einer Leitung in dem radialen Bus 31 für beide Busse 24 und 25 bestätigt, dann wartet der Prozessor auf ein Signal, das den Bus gewährt, von einer Vermittlungsschaltung 110 in dem primären Speichermodul 14 oder 15, wobei die Busgewähr-Leitung auch eine der Radiale ist. Wenn die Gewährung des. Busses bestätigt wurde, wartet die Steuereinrichtung 126, bis die Adressen-Strobes und die Adreß-Quittierungssignale auf den Bussen 125 deaktiviert werden (d. h. falsch werden), was bedeutet, daß die vorherige Übertragung abgeschlossen ist. Zu dieser Zeit bewirkt die Steuereinrichtung 126, daß die Adressen von den Registern 127 und 128 an die Leitung 123 beider Busse 24 und 25 angelegt werden, der Befehl an die Leitungen 124 angelegt werden, und der Adreß-Strobe an den Bus 125 beider Busse 24 und 25 angelegt wird. Wenn die Adressquittung von beiden Bussen 24 und 25 empfangen wurden, werden danach die Daten an die Adreß/Daten-Busse zusammen mit den Daten- Strobes angelegt, und die Übertragung wird mit einem Daten- Quittungssignal von den Speichermodulen an den I/O-Prozessor abgeschlossen.
  • Die Register 127 und 128 sind mit einem internen Bus 129 gekoppelt, der einen Adreßbus 129a, einen Datenbus 129b und einen Steuerbus 129c umfaßt, der interne Status- und Steuerregister 130 adressieren kann, welche zum Einstellen der von der Ablaufsteuereinrichtung 126 auszuführenden Befehle, zum Halten des von dem Bus 32 vermittelten Status etc. verwendet werden. Diese Register 130 sind adressierbar, um mit den CPUs im Adressraum der CPUs zu lesen oder zu schreiben. Eine Busschnittstelle 131 steht mit dem Bus 28 gesteuert durch die Steuereinrichtung 126 in Verbindung. Der Bus 28 umfaßt einen Adreßbus 28a, einen Datenbus 28b, einen Steuerbus 28c und Radiale 28d, wobei alle diese Leitungen mit den I/O-Steuereinrichtungen 30 über die Busschnittstellenmodule 29 in Datenverbindung stehen; das Busschnittstellenmodul (BIM; bus interface module) 29 enthält einen Multiplexer 132, so daß nur eine Gruppe der Busleitungen 28 (von einem I/O-Prozessor zu dem anderen, jedoch nicht beide) die Steuereinrichtung 30 ansteuern kann. Innerhalb der Steuereinrichtung 30 befinden sich Befehls-, Steuer-, Status- und Datenregister 133, die (wie es gängige Praxis für Peripherie-Steuereinrichtungen dieser Art ist) über die CPUs 11, 12 und 13 zum Lesen und Schreiben adressierbar sind, um Operationen der I/O-Geräte auszulösen und zu steuern.
  • Jede der I/O-Steuereinrichtungen 30 auf den Bussen 28 umfaßt Verbindungen über einen Multiplexer 132 in dem BIM 29 zu beiden I/O-Prozessoren 26 und 27 und kann von beiden gesteuert werden, sie ist jedoch durch das in den CPUs laufende Programm an den einen oder den anderen gebunden. Im Falle des Ausfalls eines der I/O-Prozessoren kann eine I/O-Steuereinrichtung dem verbleibenden I/O-Prozessor über den zweiten Port an den BIM 29 neu zugewiesen werden. Eine bestimmte Adresse (oder ein Adressensatz) wird für Steuer- und Datenregister 133 eingerichtet, die jede Steuereinrichtung 30 wiedergeben, und diese Adressen werden in einer I/O-Seitentabelle von dem Betriebssystem aufbewahrt (normalerweise in dem Kerndatenabschnitt des lokalen Speichers). Diese Adressen weisen jede Steuereinrichtung 30 so zu, daß auf sie nur durch einen der I/O-Prozessoren #1 oder #2, jedoch nicht durch beide zugegriffen werden kann. Das heißt, zum Erreichen eines bestimmten Registers 133 über den I/O-Prozessor 26 wird eine andere Adresse verwendet als für den I/O-Prozessor 27. Die Busschnittstelle 131 (und die Steuereinrichtung 126) kann den Multiplexer 132 umschalten, so daß er den Bus 28 von dem einen oder dem anderen annimmt, wobei dies durch Schreiben in die Register 130 des I/O-Prozessors durch die CPU erfolgt. Wenn also der Gerätetreiber aufgerufen wird, um auf diese Steuereinrichtung zuzugreifen, verwendet das Betriebssystem diese Adressen in der Seitentabelle, um dieses zu tun. Der Prozessor 40 greift auf die Steuereinrichtungen 30 über I/O-Schreibvorgänge in die Steuer- und Datenübertragungsregister 133 in diesen Steuereinrichtungen zu, wobei der Schreibpuffer-Bypassweg 50 anstelle des Schreibpuffers 50 verwendet wird, so daß durch die Schaltung 100 ausgewählte synchrone Schreibvorgänge ablaufen, welche von den Speichermodulen an die Busse 24 oder 25 und somit zu dem ausgewählten Bus 28 weitergegeben werden; der Prozessor 40 hält an, bis der Schreibvorgang beendet ist. Die I/O-Prozessorkarte der Fig. 6 ist so konfiguriert, daß sie bestimmte Ausfälle erfaßt, wie falsche Befehle, Zeitabläufe, wenn in diesem Bus 28 keine Antwort empfangen würde, paritätsgeprüfte Daten etc., und wenn einer dieser Fehler erfaßt wird, berichtet der I/O- Prozessor den Fehler an die CPU über beide Speichermodule 14 und 15 und über die Busse 24 und 25. Die CPU beendet die Un terbrechung und setzt die Verarbeitung fort. Dies wird von der Busschnittstelle 26 als ein Busfehler erfaßt, was zur einem Interrupt (der noch erläutert wird) und einem Selbstkorrektorvorgang führt, falls dies möglich ist.
  • Synchronisierung
  • Die bei der gezeigten Ausführungsform verwendeten Prozessoren haben eine Piplinearchitektur mit einer sich überlappenden Befehlsausführung, wie oben erläutert. Eine bei dieser Ausführungsform verwendete Synchronisierungstechnik verläßt sich auf das Zählen der Zyklen, d. h. das Inkrementieren eines Zählers 71 und eines Zählers 73 der Fig. 2 immer dann, wenn ein Befehl ausgeführt wird. Jedes mal, wenn die Pipeline fortschreitet, wird ein Befehl ausgeführt. Eine der beiden Steuerleitungen in Steuerbus 43 führt ein Signal RUN#, das anzeigt, daß die Pipeline unterbrochen ist. Wenn RUN# hoch ist, ist die Pipeline unterbrochen, wenn RUN# niedrig (logisch Null) ist, schreitet die Pipeline mit jedem Maschinenzyklus fort. Dieses Signal RUN# wird in dem numerischen Prozessor 46 dazu verwendet, die Pipeline des Prozessors 40 zu überwachen, damit dieser Coprozessor 46 starr synchronisiert mit seinem zugehörigen Prozessor 40 laufen kann. Das Signal RUN#' auf dem Steuerbus 43 wird zusammen mit dem Takt 17 von den Zählern 72 und 73 dazu verwendet, Laufzyklen zu zählen.
  • Die Größe der Zählerregister 71 wird bei einer bevorzugten Ausführungsform zu 4096, d. h. 2¹², gewählt, und zwar deshalb, weil die Toleranzen der Quarzoszillatoren, die in dem Taktgeber 17 verwendet werden, so groß sind, daß die Drift über etwa Laufzyklen in Mittel zu einer Verschiebung oder Differenz Anzahl der Zyklen, die ein Prozessorchip 40 durchläuft, art, die gerade so groß ist, daß sie für einen ordnungsgemäßen Betrieb der Interruptsynchronisierung vernünftigerweise noch zugelassen werden kann. Ein Synchronisierungsmechanismus besteht darin, einen Vorgang zu erzwingen, damit die CPUs sich immer dann synchronisieren, wenn der Zähler 71 überläuft. Ein solcher Vorgang kann darin bestehen, einen Cache-Speicher- Fehltreffer abhängig von einem Überlaufsignal OVFL von dem Zähler 71 zu erzwingen; dies kann geschehen, indem man einfach ein falsches Fehltreffersignal (z. B. TagValid-Bit nicht gesetzt) auf dem Steuerbus 43 bei dem nächsten I-Cache-Zugriff erzeugt, so daß zwangsläufig eine Cache-Speicher-Fehltreffer- Ausnahmeroutine gestartet wird, und der resultierende Speicherzugriff erzeugt eine Synchronisierung genauso wie jeder andere Speicherzugriff. Ein anderes Verfahren zum Erzwingen der Synchronisierung bei einem Überlauf des Zählers 71 besteht darin, eine Unterbrechung des Prozessors 40 zu erzwingen, was dadurch erfolgen kann, daß das Überlaufsignal OVFL dazu verwendet wird, ein CP-belegt (Coprozessor belegt) Signal auf dem Steuerbus 43 über die Logikschaltung 71a der Fig. 2 zu erzeugen; dieses CP-belegt-Signal führt immer dazu, daß der Prozessor 40 in einen Haltezustand geht, bis CP-belegt wieder deaktiviert wird. Alle drei Prozessoren gehen in diesen Haltezustand, weil sie denselben Code ausführen, und werden in ihrem Zähler 71 dieselben Zyklen zählen, die tatsächliche Zeit, zu der sie in diesen Zustand gehen, wird jedoch variieren; die Logikschaltung 71a empfängt das RUN#-Signal von dem Bus 73 der beiden anderen Prozessoren über den Eingang R#, so daß dann, wenn alle drei angehalten haben, das CP-belegt-Signal aufgelöst wird und die Prozessoren aus ihrem Haltezustand wieder herauskommen und synchronisiert sind.
  • Es wurden also zwei Synchronisierungstechniken beschrieben, wobei die erste in der Synchronisierung besteht, die sich aus der Mehrheitsauswahl für die Speicherzugriffe in den Schaltungen 100 in den Speichermodulen ergibt, und die zweite besteht im Überlauf des Zählers 71, wie gerade erläutert. Zusätzlich werden Interrupts synchronisiert, wie unten beschrieben ist. Es ist jedoch wichtig zu beachten, daß die Prozessoren 40 im wesentlichen frei mit ihrer eigenen Taktgeschwindigkeit laufen und daß sie weitgehend voneinander entkoppelt sind, außer wenn Synchronisierungsereignisse auftreten. Die Tatsache, daß Mikroprozessoren mit Pipelinebetrieb verwendet werden, würde eine Verriegelungssynchronisierung mit einem einzigen Takt schwierig machen und die Leistung verschlechtern; auch die Verwendung des Schreibpuffers 50 dient zum Entkoppeln der Prozessoren und wäre mit einer engen Koppelung der Prozessoren wesentlich weniger effektiv. Ähnlich wäre die hohe Leistung aufgrund der Verwendung von Befehls- und Daten-Cache-Speichern und der virtuellen Speicherverwaltung mit den TLBs 83 wesentlich schwieriger zu realisieren, wenn eine enge Koppelung verwendet würde, und die Leistung würde darunter leiden.
  • Interrupt-Synchronisierung:
  • Die Interrupt Synchronisierungstechnik muß zwischen Realzeit und sogenannter "virtueller Zeit" unterscheiden. Realzeit ist die tatsächliche aktuelle Zeit, d. h. die Uhrzeit, gemessen in Sekunden, oder der Einfachheit halber gemessen in Maschinenzyklen, die bei diesem Beispiel in 60 ns-Intervallen auftreten. Die Takterzeuger 17 erzeugen Taktimpulse selbstverständlich in Realzeit. Die virtuelle Zeit ist die interne Zyklenzählzeit jedes der Prozessorchips, die in jedem der Zyklenzähler 71 und 73 gemessen wird, d. h. die Anzahl der Befehl, die von dem Prozessorchip ausgeführt werden, gemessen in Befehlen ab einem beliebigen Anfangspunkt.
  • Die drei CPUs des Systems der Fig. 1-3 müssen als ein einziger logischer Prozessor arbeiten, so daß sich die CPUs an bestimmte Beschränkungen in bezug auf ihre internen Zustände halten müssen, um sicherzustellen, daß das Programmierungsmodell der drei CPUs das eines einzigen logischen Prozessors ist. Außer im Fehlermodus und bei Diagnosefunktionen müssen die Befehlsströme der drei CPUs identisch sein. Wenn sie nicht identisch sind, wäre die Mehrheitsauswahl beim Zugriff auf den globalen Speicher durch die Mehrheitsauswahlschaltung 100 der Fig. 4 schwierig; die Mehrheitsauswahleinrichtung würde nicht wissen, ob in der CPU ein Fehler aufgetreten ist oder ob sie eine andere Befehlsfolge ausführt. Das Synchronisierungsverfahren ist so aufgebaut, daß dann, wenn der Codestrom für irgendeine CPU von dem Codestrom der anderen CPUs abweicht, angenommen wird, daß ein Fehler aufgetreten ist. Die Interruptsynchronisierung bietet einen von mehreren Mechanismen zum Aufrechterhalten eines einzigen CPU-Bildes.
  • Alle Interrupts müssen synchron zur virtuellen Zeit auftreten, wodurch sichergestellt wird, daß die Befehlsströme zu den drei Prozessoren CPU-A, CPU-B und CPU-C nicht als Folge der Interrupts divergieren (es gibt andere Gründe für divergierende Befehlsströme, wenn z. B. ein Prozessor andere Daten liest als die anderen Prozessoren). Es gibt Szenarien, in denen zur virtuellen Zeit asynchron auftretende Interrupts eine Divergenz des Codestroms bewirken würden. Zum Beispiel ein Interrupt, der eine Programmumschaltung einer CPU bewirkt, bevor ein Prozeß A abgeschlossen ist, jedoch nachdem der Prozeß A auf einer anderen CPU abgeschlossen ist, würde zu einer Situation führen, in der zu einem späteren Zeitpunkt eine CPU mit der Ausführung des Prozesses A fortfährt, die andere CPU den Prozeß A jedoch nicht ausführen kann, weil dieser Prozeß bereits abgeschlossen ist. Wenn in diesem Fall die Interrupts asynchron zur virtuellen Zeit auftreten, würde allein schon die Tatsache, daß die Ausnahmeprogrammzähler unterschiedlich sind, Probleme verursachen. Der Akt des Schreibens der Ausnahmeprogrammzähler in den globalen Speicher würde dazu führen, daß die Mehrheitsauswahleinrichtung unterschiedliche Daten von den drei CPUs erfassen würde und demzufolge einen Abstimmfehler erzeugt.
  • Bestimmte Arten von Ausnahmen in den CPUs sind inhärent synchron zur virtuellen Zeit. Ein Beispiel ist die Programmstopp- Ausnahme, die durch die Ausführung eines Stoppbefehls hervorgerufen wird. Da die Befehlsströme der CPUs identisch sind, tritt die Programmstopp-Ausnahme an derselben Stelle in der virtuellen Zeit aller drei CPUs auf. Ähnlich treten all diese internen Ausnahmen inhärent synchron zur virtuellen Zeit auf. TLB-Ausnahmen sind z. B. interne Ausnahmen, die inhärent synchron sind. TLB-Ausnahmen treten auf, wenn die virtuelle Seitenzahl nicht mit einem der Einträge in dem TLB 83 übereinstimmt. Da der Akt der Übersetzung der Adressen allein eine Funktion des Befehlsstroms ist (genau wie bei der Programmstopp-Ausnahme), ist die Übersetzung inhärent synchron zur virtuellen Zeit. Um sicherzustellen, daß die TLB-Ausnahmen synchron zur virtuellen Zeit sind, muß der Zustand der TLBs 83 in allen drei CPUs 11, 12 und 13 identisch sein, wobei dies sichergestellt ist, weil der TLB 83 nur durch Software modifiziert werden kann. Da alle CPUs denselben Befehlsstrom ausführen, ändert sich der Zustand der TLBs 83 seinerseits immer synchron zur virtuellen Zeit. Als allgemeine Daumenregel gilt also, daß dann, wenn ein Vorgang mittels Software ausgeführt wird, der Vorgang synchron zur virtuellen Zeit ist. Wenn ein Vorgang durch die Hardware ausgeführt wird, die nicht den Zyklenzähler 71 verwendet, ist der Vorgang im allgemeinen synchron zur Realzeit.
  • Externe Ausnahmen sind nicht inhärent synchron zur virtuellen Zeit. I/O-Geräte 26, 27 oder 30 enthalten keine Information über die virtuelle Zeit der drei CPUs 11, 12 und 13. Alle Interrupts, die von diesen I/O-Geräten erzeugt werden, müssen somit zur virtuellen Zeit synchronisiert werden, bevor sie an die CPUs übergeben werden, wie unten erläutert ist. Gleitkomma-Ausnahmen unterscheiden sich von I/O-Geräte-Interrupts, weil der Gleitkomma-Coprozessor 46 mit dem Mikroprozessor 40 in der CPU eng gekoppelt ist.
  • Externe Geräte sehen die drei CPUs als einen logischen Prozessor und besitzen keine Information über die Synchronisierung oder mangelnde Synchronisierung zwischen den CPUs, so daß externe Geräte keine Interrupts erzeugen können, die synchron zu dem einzelnen Befehlsstrom (der virtuellen Zeit) jeder CPU sind. Ohne irgendeine Art der Synchronisierung würden dann, wenn irgend ein externes Gerät zu einem beliebigen Zeitpunkt der Realzeit ein Interrupt vorgibt und der Interrupt direkt an die CPUs angelegt würde, die drei CPUs zu dieser Zeit bei verschiedenen Befehlen einen Ausnahme-Sprung machen, was zu einem nicht annehmbaren Zustand der drei CPUs führen würde. Dies ist ein Beispiel eines Ereignisses (Bestätigung eines Interrupts), das synchron zur Realzeit, jedoch nicht synchron zur virtuellen Zeit ist.
  • In dem System der Fig. 1 bis 3 werden Interrupts zur virtuellen Zeit synchronisiert, indem eine verteilte Mehrheitsauswahl der Interrupts ausgeführt wird und der Interrupt dann bei einem vorgegebenen Taktzählwert an den Prozessor angelegt wird. Fig. 8 zeigt ein detailliertes Blockdiagramm der Interruptsynchronisierungslogik 65 der Fig. 2. Jede CPU enthält eine Verteilereinrichtung 135, die den externen Interrupt von der Leitung 69 oder 70, der von den Modulen 14 oder 15 kommt, erfaßt; diese Fassung erfolgt zu einem vorgegebenen Zyklenzählwert, z. B. beim Zählwert 4, was auf einer Eingangsleitung CC-4 von dem Zähler 71 signalisiert wird. Der erfaßte Interrupt wird über den CPU-Verbindungsbus 18 auf die beiden anderen CPUs verteilt. Diese verteilten Interrupts werden anhängige Interrupts genannt. Es gibt drei anhängige Interrupts, einen von jeder CPU 11, 12 und 13. Eine Mehrheitsauswahlschaltung 136 erfaßt die anhängigen Interrupts und führt eine Mehrheitsauswahl durch, um zu überprüfen, ob alle CPUs die externe Interruptaufforderung empfangen haben. Bei einem vorgegebenen Zyklenzählwert (der von dem Zyklenzähler 71 erhalten wird), in diesem Fall bei dem Zyklus 8, der über die Eingangsleitung CC-8 empfangen wird, gibt die Interrupt-Mehrheitsauswahlschaltung 136 den Interrupt an den Interruptpin ihres entsprechenden Mikroprozessors 40 über die Leitung 137 und den Steuerbus 55 und 43 weiter. Da der Zyklenzählwert, der zum Anlegen des Interrupts verwendet wird, vorgegeben ist, empfangen alle Mikroprozessoren 40 den Interrupt bei demselben Zyklenzählwert, so daß der Interrupt zu der virtuellen Zeit synchronisiert ist.
  • Speicherverwaltung:
  • Der Speicherraum der CPUs 11, 12 und 13 der Fig. 1 bis 3 ist wie in Fig. 9 gezeigt organisiert. Es wird das Beispiel verwendet, daß der lokale Speicher 16 8 MByte hat und der globale Speicher 14 oder 15 hat 32 MByte, wobei man beachte, daß der lokale Speicher 16 Teil derselben kontinuierlichen 0- 40MByte-Abbildung des CPU-Speicherzugriffsraumes und kein getrennter Cachespeicher oder getrennter Speicherbereich ist; man beachte, daß der 0-8MByte-Abschnitt dreifach (in den drei CPU-Modulen) vorgesehen ist, und der 8-40 MByte-Abschnitt ist doppelt vorgesehen, gleichwohl gibt es logisch nur einen einzigen physischen 0-40MByte-Adreßraum. Eine Adresse über 8 MByte auf dem Bus 54 bewirkt, daß die Schnittstelle 56 eine Anfrage an die Speichermodule 14 und 15 richtet, wobei eine Adresse unter 8 MByte auf den lokalen Speicher 16 in dem CPU- Modul selbst zugreift. Die Leistung wird verbessert, indem ein größerer Teil des Speichers, der von den Anwendungsprogrammen genutzt wird, in den lokalen Speicher gelegt wird, und seitdem Speicherchips bei geringeren Kosten und höheren Geschwindigkeiten erhältlich sind, wird zusätzlicher lokaler Speicher sowie zusätzlicher globaler Speicher hinzugefügt. Der lokale Speicher kann z. B. 32 MB umfassen, und der globale Speicher kann 128 MB umfassen. Wenn andererseits ein System mit minimalen Kosten benötigt wird und die Leistung kein besonders entscheidender Faktor ist, kann das System auch ganz ohne lokalen Speicher betrieben werden, wobei der gesamte Hauptspeicher in dem globalen Speicherbereich (in den Speichermodulen 14 und 15) ist, obwohl die Leistungsverschlechterung bei einer solchen Konfiguration hoch ist.
  • Der Inhalt des lokalen Speicherabschnittes 141 der Abbildung der Fig. 9 ist in den drei CPUs 11, 12 und 13 identisch. Ähnlich enthalten die beiden Speichermodule 14 und 15 zu jedem gegebenen Zeitpunkt in ihrem Adreßraum 142 identisch dieselben Daten. Innerhalb des lokalen Speicherabschnittes 141 ist der Kern (Kernel) 143 (Code) für das UNIX-Betriebssystem gespeichert, und dieser Bereich wird auf einen festen Teil des lokalen Speichers 16 jeder CPU physisch abgebildet. Ähnlich wird den Kerndaten ein fester Bereich 144 in jedem lokalen Speicher 16 zugeordnet; abgesehen von dem Boot-Abschnitt, diese Blöcke werden nicht in den globalen Speicher oder die Platte eingelagert oder aus diesen ausgelagert (swapped). Ein anderer Teil 145 des lokalen Speichers 16 wird für Benutzerprogrammseiten (und Datenseiten) verwendet, die gesteuert durch das Betriebssystem in einen Bereich 146 des globalen Speichers 14 und 15 ausgelagert werden. Der globale Speicherbereich 142 wird für Benutzerseiten in dem Bereich 146 als Auftrittsbereich und in einem Bereich 147 als Plattenpuffer verwendet; wenn die CPUs einen Code ausführen, der das Schreiben eines Datenblocks oder eines Codeblocks von dem lokalen Speicher 16 auf die Platte 148 bewirkt, wird immer so vorgegangen, daß stattdessen in einen Plattenpufferbereich 147 geschrieben wird, weil die Zeit zum Kopieren in den Bereich 147 im Vergleich zur Zeit zum direkten Kopieren auf den I/O-Prozessor 26 und 27 und somit über die I/O-Steuereinrichtung 30 auf die Platte 48 vernachlässigbar ist. Während die CPUs mit der Ausführung des weiteren Codes fortfahren, kann dann transparent für die CPUs auf die Platte geschrieben werden, um den Block von dem Bereich 147 auf die Platte 148 zu bewegen. Auf ähnliche Weise wird der globale Speicherbereich 146 abgebildet, so daß er einen I/O- Auftrittsbereich 149 für eine ähnliche Behandlung von I/O-Zugriffen auf andere Einheiten als Platten (z. B. Video) hat.
  • Die physische Speicherabbildung der Fig. 9 wird mit dem virtuellen Speicherverwaltungssystem des Prozessors 40 in jeder CPU korreliert. Fig. 10 zeigt die virtuelle Adreßabbildung des Prozessorchips R2000, der bei diesem Ausführungsbeispiel verwendet wird, obwohl man verstehen wird, daß andere Mikroprozessorchips, die eine virtuelle Speicherverwaltung mit Seitenaustausch und einen Schutzmechanismus unterstützen, entsprechende Merkmale vorsehen würden.
  • In Fig. 10 sind zwei getrennte virtuelle Adreßräume 150 und 151 von 2 GByte gezeigt; der Prozessor arbeitet in einem von zwei Modi; einem Benutzermodus und einem Kernmodus. Der Prozessor kann in dem Benutzermodus nur auf den Bereich 150 zugreifen, oder er kann in dem Kernmodus auf beide Bereiche 150 und 151 zugreifen. Der Kernmodus ist analog zu dem Supervisormodus, der von vielen Geräten vorgesehen wird. Der Prozessor 40 ist so konfiguriert, daß er normalerweise in dem Benutzermodus arbeitet, bis eine Ausnahme erfaßt wird, die ihn in den Kernmodus bringt, wo er bleibt, bis ein RFE-Befehl (RFE = restore from exception; Wiederherstellung nach Ausnahme) ausgeführt wird. Die Art, wie die Speicheradressen übersetzt oder abgebildet werden, hängt von dem Betriebsmodus des Mikroprozessors ab, der von einem Bit in einem Statusregister definiert wird. Wenn er in dem Benutzermodus ist, steht ein einziger, einheitlicher virtueller Adreßraum 150 zur Verfügung, der als "KUSEG" bezeichnet wir und 2 GByte umfaßt. Ferner wird jede virtuelle Adresse mit einem PID-Feld (PID = Prozessoridentifikator) von 6 Bit erweitert, um eindeutige virtuelle Adressen für bis zu 64 Benutzerprozesse zu bilden. Alle Bezugnahmen auf diesen Abschnitt 150 im Benutzermodus werden durch den TLB 83 abgebildet, und die Verwendung der Cachespeicher 144 und 145 wird durch Biteinstellung für jeden Seiteneintrag der TLB-Einträge bestimmt; d. h., einige Seiten können verborgen werden (Cache) oder nicht, was von dem Programmierer spezifiziert wird.
  • Im Kernmodus umfaßt der virtuelle Adreßraum beide Bereiche 150 und 151 der Fig. 10, und dieser Raum umfaßt 4 getrennte Segmente kuseg 150, kseg0 152, kseg1 153 und kseg2 154. Das Segment kuseg 150 ist im Kernmodus 2 GByte groß und entspricht dem "kuseg" des Benutzermodus, so daß der Prozessor im Kernmodus Zugriffe auf diesen Abschnitt genau so wie Zugriffe in dem Benutzermodus behandelt, wodurch der Kernzugriff auf Benutzerdaten effizienter wird. kuseg 150 wird dazu verwendet, Benutzercode und -daten zu speichern, wobei das Betriebssystem jedoch auf eben diesen Code oder die Daten zugreifen muß. Der kseg0-Bereich 152 ist ein physischer Kernadreßraum von 512 MByte, der direkt auf die ersten 512 MByte des physischen Adreßraums abgebildet wird; und er ist verborgen (cache), verwendet den TLB jedoch nicht; dieses Segment für den ausführbaren Kerncode und einige Kerndaten verwendet, und es wird durch den Bereich 143 der Fig. 9 im lokalen Speicher 16 dargestellt; der kseg1-Bereich 153 wird ebenfalls direkt auf die ersten 512 MByte des physischen Adreßraums abgebildet, genau so wie kseg0, er ist nicht verborgen und verwendet keine TLB- Einträge. kseg1 unterscheidet sich von kseg0 nur darin, daß es nicht verborgen ist. Kseg1 wird von dem Betriebssystem für I/O-Register, ROM-Code und Plattenpuffer verwendet und entspricht somit den Bereichen 147 und 149 der physischen Abbildung der Fig. 9. Der kseg2-Bereich 154 ist 1 GByte groß und verwendet, wie kuseg, Einträge des TLB 83, um virtuelle Adressen auf willkürliche physische Adressen verborgen oder unverborgen abzubilden. Dieser kseg2-Bereich unterscheidet sich von dem kuseg-Bereich 150 nur darin, daß er im Benutzermodus nicht, sondern nur im Kernmodus zugänglich ist. Das Betriebssystem verwendet kseg2 für Stapel und zu einem Prozeß gehörende Daten, die bei Programmumschaltungen neu abgebildet werden müssen, für Benutzerseitentabellen (Speicherabbildung) und für einige dynamisch zugewiesene Datenbereiche. kseg2 erlaubt eine selektive Cache-Speicherung und Abbildung pro Seite anstelle einer Alles-oder-Nichts-Lösung.
  • Die in den Registern 76 oder dem Programmzähler 80 des Mikroprozessorchips erzeugten und auf dem Bus 84 ausgegebenen, virtuellen 32 Bit-Adressen sind in Fig. 11 dargestellt, in der man sehen kann, daß die Bits 0 bis 11 den Offset bilden, der bedingungslos als die niederwertigen 12 Bits der Adresse auf dem Bus 42 in der Fig. 3 verwendet werden, während die Bits 12 bis 31 die VPN (virtual page number) oder virtuelle Seitenzahl bilden, wobei die Bits 29 bis 31 zwischen kuseg, kseg0, kseg1 und kseg2 auswählen. Der Prozeßidentifikator PID für den momentan laufenden Prozeß ist in einem Register gespeichert, auf das der TLB auch zugreifen kann. Die 64 Bit umfassenden TLB-Einträge sind in Fig. 11 ebenfalls dargestellt, in der man sehen kann, daß die 20 Bit umfassende VPN von der virtuellen Adresse mit dem 20 Bit umfassenden VPN-Feld verglichen wird, das in den Bits 44 bis 63 des 64 Bit umfassenden Eintrags liegt, während gleichzeitig die PID mit den Bits 38 bis 43 verglichen wird. Wenn in irgendeinem der 64 Bit umfassenden TLB-Einträgen ein Treffer gefunden wird, wird die Seitenrahmenzahl PFN (page frame number) bei den Bits 12 bis 31 des passenden Eintrags als Ausgangssignal der Busse 82 und 42 der Fig. 3 verwendet (unter der Annahme, daß weitere Kriterien erfüllt sind). Andere Ein-Bit-Werte in einem TLB-Eintrag umfassen N, D, V und G. N ist der "nicht verbergbare" Indikator, und wenn er gesetzt ist, ist die Seite nicht verbergbar, und der Prozessor greift direkt auf den lokalen Speicher oder den globalen Speicher und nicht zuerst auf den Cachespeicher 44 oder 45 zu. D ist ein Schreibschutzbit, und wenn es gesetzt ist, bedeutet dies, daß die Stelle "modifizierbar" (dirty) und somit beschreibbar ist, wenn es jedoch Null ist, führt ein Schreibvorgang zu einer Unterbrechung (trap). Das V-Bit bedeu tet gültig, wenn es gesetzt ist, und es erlaubt das Löschen von TLB-Einträgen, indem einfach die V- Bits rückgesetzt werden; das V-Bit wird in der Seitenaustauschanordnung dieses Systems dazu verwendet, anzuzeigen, ob eine Seite im lokalen oder im globalen Speicher ist. Das G-Bit läßt einen globalen Zugriff zu, der das Erfordernis der PID-Anpassung für eine gültige TLB-Übersetzung ignoriert; bei kseg2 darf dann der Kern ohne Beachtung des PID auf alle abgebildeten Daten zugreifen.
  • Die Gerätesteuereinrichtungen 30 können keinen direkten Speicherzugriff auf den lokalen Speicher 16 durchführen, und deshalb wird der globale Speicher als Auftrittsbereich für DMA- artige Blockübertragungen üblicherweise von der Platte 148 oder dergleichen verwendet. Die CPU kann Operationen mit den Steuereinrichtungen 30 direkt vornehmen, um Operationen durch die Steuereinrichtungen (d. h. programmierte I/O-Vorgänge) auszulösen oder tatsächlich zu steuern, die Steuervorrichtungen 30 können jedoch keinen direkten Speicherzugriff ausführen, außer auf den globalen Speicher; die Steuereinrichtungen 30 können zum Busmaster (Bus 28) werden und über den I/O-Prozessor 26 oder 27 oder direkt in den globalen Speicher in den Speichermodulen 14 und 15 schreiben.
  • Der Seitenaustausch zwischen dem globalen und dem lokalen Speicher (und der Platte) wird entweder durch einen Seitenfehler oder durch einen Alterungsprozeß ausgelöst. Ein Seitenfehler tritt auf, wenn ein Prozeß abläuft und versucht, etwas von einer Seite auszuführen oder auf eine Seite zuzugreifen, die im globalen Speicher oder auf der Platte ist; der TLB 83 zeigt einen Fehltreffer, woraus eine Unterbrechung (trap) resultiert, wobei ein Unterbrechungscode der unteren Ebene in dem Kern die Stelle der Seite anzeigt, und eine Programmroutine wird gestartet, um einen Seitenaustausch auszulösen. Wenn die benötigte Seite in dem globalen Speicher ist, wird eine Reihe von Befehlen an die DMA-Steuereinrichtung 74 gesendet, damit diese die am wenigsten weit zurückliegend benutzte Seite aus dem lokalen Speicher in den globalen Speicher schreibt und die benötigte Seite aus dem globalen Speicher in den lokalen Speicher liest. Wenn die Seite auf Platte ist, werden Befehle und Adressen (Sektoren) von der CPU an die Steuereinrichtung 30 übergeben, um auf die Platte zuzugreifen und die Seite abzuholen, wobei der Prozeß, der den Speicheraufruf gemacht hat, ausgesetzt wird. Wenn die Plattensteuereinrichtung die Daten gefunden hat und bereit ist, diese zu senden, wird ein Interrupt angezeigt, der von den Speichermodulen (wobei er die CPUs nicht erreicht) dazu verwendet wird, einen direkten Speicherzugriff der Plattensteuereinrichtung auf den globalen Speicher zu ermöglichen, um die Seite in den globalen Speicher zu schreiben, und nach Beendigung wird die CPU unterbrochen, um eine Blockübertragung gesteuert durch die DMA-Steuereinrichtung 74 auszuführen, um eine am wenigsten verwendete Seite aus dem lokalen in den globalen Speicher auszulagern und die benötigte Seite in den lokalen Speicher einzulagern. Dann wird der ursprüngliche Prozeß wieder zum Laufen gebracht, sein Zustand wird wiederhergestellt, und der ursprüngliche Speicheraufruf tritt nochmals auf, wobei nun die benötigte Seite im lokalen Speicher gefunden wird. Der andere Mechanismus zum Auslösen eines Seitenaustausches ist eine Alterungsroutine, mit der das Betriebssystem periodisch durch die Seiten in dem lokalen Speicher geht und diese dahingehend markiert, ob jede Seite kürzlich verwendet wurde oder nicht, und die Seiten, die nicht kürzlich verwendet wurden, werden aus dem globalen Speicher geschoben. Ein Programmumschalter löst selbst keinen Seitenaustausch aus, sondern die neue Aufgabe ist vielmehr, Seitenfehler zu erzeugen, so daß Seiten nach Bedarf ausgetauscht werden, wobei die Kandidaten für die Auslagerung die Seiten sind, die länger nicht verwendet wurden.
  • Wenn ein Speicherzugriff ausgeführt wird und sich ein TLB- Fehltreffer ergibt, das Nachschlagen in der Seitentabelle aufgrund des TLB-Fehltreffers jedoch zeigt, daß die Seite in dem lokalen Speicher ist, wird ein TLB-Eintrag gemacht, um zu zeigen, daß diese Seite in dem lokalen Speicher ist. Der Prozeß macht also eine Ausnahme, wenn der TLB-Fehltreffer auftritt, geht zu den Seitentabellen (in dem Kerndatenabschnitt), findet den Tabelleneintrag, schreibt ihn in den TLB und kann dann normal fortfahren. Wenn jedoch der Speicherzugriff einen TLB- Fehltreffer ergibt und die Seitentabellen zeigen, daß die entsprechende physische Adresse im globalen Speicher ist (über den physischen 8MByte Adressen), erfolgt der TLB-Eintrag für diese Seite, und wenn der Prozeß wiederaufgenommen wird, findet er den Seitenantrag wie zuvor in dem TLB; noch eine weitere Ausnahme wird gemacht, wenn das gültige Bit Null ist, wodurch angezeigt wird, daß die Seite physisch nicht im lokalen Speicher ist, so daß in diesem Fall eine Routine gestartet wird, um die Seite aus dem globalen Speicher in den lokalen Speicher umzulagern und den TLB-Eintrag gültig zu machen, so daß mit der Programmausführung fortgefahren werden kann. In dem dritten Fall, in dem die Seitentabellen zeigen, daß die Adresse für den Speicherzugriff auf der Platte nicht im lokalen und nicht im globalen Speicher ist, arbeitet das System wie oben angegeben, d. h. der Prozeß wird aus der Lauf-Warteschlange in die Schlaf-Warteschlange versetzt, ein Plattenzugriff wird durchgeführt, und wenn die Platte die Seite zum globalen Speicher übertragen und einen Befehl-erledigt-Interrupt signalisiert hat, wird die Seite aus dem globalen in den lokalen Speicher umgelagert, der TLB wird aktualisiert, und der Prozeß kann weiterlaufen.
  • Privater Speicher:
  • Obwohl die Speichermodule dieselben Daten an denselben Stellen speichern und alle drei CPUs 11, 12 und 13 gleichen Zugang zu diesen Speichermodulen haben, gibt es einen kleinen Speicherbereich, der softwaregesteuert als ein privater Bereich in jedem der Speichermodule zugewiesen ist. Wie z. B. in Fig. 12 gezeigt, ist ein Bereich 155 der Abbildung der Speichermodulstellen als privater Speicherbereich bezeichnet, in den nur geschrieben werden kann, wenn die CPUs einen "privater Speicher schreiben"-Befehl auf den Bus 59 ausgeben. Bei einem Ausführungsbeispiel ist der private Speicherbereich 155 eine 4K- Seite, die bei der Adresse beginnt, die in einem Register 156 in der Busschnittstelle jedes der CPU-Module enthalten ist; diese Anfangsadresse kann softwaregesteuert verändert werden, indem die CPU in das Register 156 schreibt. Der private Speicherbereich 155 ist ferner zwischen den drei CPUs aufgeteilt; nur die CPU-A kann in den Bereich 155a schreiben, die CPU-B in den Bereich 155b und die CPU-C in den Bereich 155c. Eines der Befehlssignale auf dem Bus 57 wird von der Busschnittstelle 56 gesetzt, um die Speichermodule 14 und 15 darüber zu informieren, daß die Operation ein privater Schreibvorgang ist, wobei das Setzen abhängig von der Adresse erfolgt, die von dem Prozessor 40 aus einem Speicherbefehl (Store) erzeugt wird; die Adressenbits (und ein Schreibbefehl; Write) werden von dem Decoder 157 in der Busschnittstelle erfaßt (welche die Busadressen mit dem Inhalt des Registers 156 vergleicht) und dazu verwendet, den "privater Speicher schreiben"-Befehl für den Bus 57 zu erzeugen. Wenn in dem Speichermodul ein Schreibbefehl in den Registern 94, 95 und 96 erfaßt wird, und wenn die Adressen und Befehle von der Mehrheitsauswahlschaltung 100 alle als gut (d. h. übereinstimmend) befunden werden, läßt die Steuerschaltung 100 die Daten von nur einer der CPUs zum Bus 101 hindurch, wobei dies durch die zwei Adreßbits von den CPUs bestimmt wird. Während dieses privaten Schreibmodus haben alle drei CPUs dieselben Adressen auf ihrem Bus 57, jedoch unterschiedliche Daten auf ihrem Bus 58 (die unterschiedlichen Daten stellen z. B. einen Zustand dar, der für die CPU einzigartig ist). Die Speichermodule bestimmen über die Adressen und Befehle durch Mehrheitsauswahl und wählen Daten von nur einer CPU gestützt auf ein Teil des Adressenfeldes aus, das auf dem Adreßbus erscheint. Damit die CPUs über einige Daten abstimmen können, führen in beiden Speichermodulen 14 und 15 alle drei CPUs drei private Schreibvorgänge mit einer Statusinformation aus, die für eine CPU einzigartig ist (es gibt drei Schreibvorgänge auf den Bussen 21, 22 und 23). Während jedes Schreibvorgangs sendet jede CPU eindeutige Daten, wobei jedes Mal jedoch nur Daten von einer CPU angenommen werden. Die von allen drei CPUs ausgeführte Softwaresequenz ist somit: (1) Speichern (an Speicherstelle 155a), (2) Speichern (an Speicherstelle 155b), (3) Speichern (an Speicherstelle 155c). Es werden jedoch jedes Mal Daten von nur einer CPU tatsächlich geschrieben, und die Daten werden nicht durch Mehrheitsauswahl bestimmt (weil sie unterschiedlich sind oder sein könnten und einen Fehler erzeugen könnten, wenn abgestimmt würde). Die CPUs können dann über die Daten abstimmen, indem alle drei CPUs alle drei Speicherstellen 155a, 155b und 155c lesen, und indem diese Daten mittels Software verglichen werden. Diese Betriebsart wird z. B. bei der Diagnose oder bei Interrupts verwendet, um die verursachenden Registerdaten durch Mehrheitsauswahl zu bestimmen.
  • Der private Schreibmechanismus wird bei der Fehlererfassung und der Wiederherstellung verwendet, wenn z. B. die CPUs einen Busfehler nach einer Anforderung zum Lesen aus einem Speicher erfassen, wenn z. B. ein Speichermodul 14 oder 15 auf den Leitungen 33-1 oder 33-2 einen fehlerhaften Zustand zurückgibt. An diesem Punkt weiß die CPU nicht, ob die anderen CPUs von dem Speichermodul denselben Zustand empfangen haben; die CPU könnte fehlerhaft arbeiten, oder ihre Zustandserfassungsschaltung könnte fehlerhaft arbeiten, oder der Speicher könnte, wie angezeigt, fehlerhaft sein. Um den Fehler zu isolieren, führen also beim Starten der oben erwähnten Busfehlerroutine alle drei CPUs einen privaten Schreibvorgang mit der Statusinforma tion durch, die sie gerade von den Speichermodulen bei dem vorhergehenden Leseversuch empfangen haben. Dann lesen alle drei CPUs, was die anderen geschrieben haben, und vergleichen es mit ihrer eigenen Speicherstatusinformation. Wenn sie alle übereinstimmen, wird das Speichermodul offline gesetzt. Wenn nicht, und wenn eine CPU einen fehlerhaften Zustand für ein Speichermodul anzeigt, die anderen beiden jedoch einen fehlerfreien Zustand, wird diese CPU offline genommen.
  • Fehlertolerante Energieversorgung:
  • Das System der vorliegenden Erfindung kann, wie in Fig. 13 gezeigt, ein fehlertolerantes Energie-Untersystem verwenden, das ausgefallene Energieversorgungsmodule sowie CPU-Module, Speichermodule, I/O-Prozessormodule, I/O-Steuereinrichtungen und Plattenmodule, wie oben erörtert, online ersetzen kann. In der Schaltung der Fig. 3 ist eine Wechselstrom-Netzleitung 160 direkt mit einer Energieverteilungseinheit 161 verbunden, die eine Netzleitungsfilterung, eine Vorrichtung zum Unterdrücken von Überschwingungen und einen Schaltungsunterbrecher als Schutz gegen Kurzschlüsse vorsieht. Als Schutz gegen eine Störung der Wechselstromleitung liefern redundante Batteriepakete 162 und 163 ausreichend Energie an das System, um ein ordnungsgemäßes Abschalten des Systems zu gewährleisten; bei einem Ausführungsbeispiel sind z. B. mehrere Minuten (z. B 4,5) Batterieleistung ausreichend. Nur eines der beiden Batteriepakete 162 oder 163 ist notwendig, um das System sicher abzuschalten.
  • Das Energieuntersystem weist zwei identische Gleichrichter- Massenenergieversorgungen 164 und 165 auf, die einen hohen Leistungsfaktor haben und zwei Gleichstrom-Verteilerbusse 166 167 von 36 Volt mit Energie versorgen. Das System bleibt betriebsfähig, wenn nur eine der Massenenergieversorgungen 164 oder 165 arbeitet.
  • Vier getrennte Energieverteilerbusse sind in den Bussen 166 und 167 enthalten. Die Massenversorgung 164 steuert einen Energiebus 166-1, 167-1 an, während die Massenversorgung 165 einen Energiebus 166-2, 167-2 ansteuert. Das Batteriepaket 162 steuert den Bus 166-3, 167-3 an, und wird seinerseits über 166-1 und 166-2 wiederaufgeladen. Das Batteriepaket 163 steuert den Bus 166-3, 167-3 an und wird über die Busse 166-1 und 167-2 wiederaufgeladen. Die drei CPUs 11, 12 und 13 werden mit unterschiedlichen Kombinationen dieser vier Verteilerbusse angesteuert.
  • Mehrere Gleichstromwandler 168, die mit diesen 36 Volt-Bussen 166 und 167 verbunden sind, werden dazu verwendet, die CPU- Module 11, 12 und 13, die Speichermodule 14 und 15, die I/O- Prozessoren 26 und 27 und die I/O-Steuereinrichtungen 30 einzeln mit Energie zu versorgen. Die Massenenergieversorgungen 164 und 165 versorgen auch die drei Systemventilatoren 169 und die Batterieladegeräte für die Batteriepakete 162 und 163. Durch Vorsehen dieser getrennten Gleichstromwandler für jede Systemkomponente führt der Ausfall eines Wandlers nicht zu einem Abschalten des Systems, sondern das System kann mit einem seiner oben erörterten Ausfall/Wiederherstellungsmodi weiterarbeiten, und die ausgefallene Energieversorgungskomponente kann ersetzt werden, während das System arbeitet.
  • Das Energiesystem kann entweder mit einem manuellen Schalter (mit Standby- und Aus-Funktionen) oder softwaregesteuert von einem Wartungs- und Diagnoseprozessor 170 ausgeschaltet werden, der automatisch auf den Einschaltzustand voreinstellt, wenn eine Wartungs- und Diagnose-Energieversorgungsstörung auftritt.
  • Systembus-Fehlerbewertung:
  • Im folgenden werden die Sequenzen beschrieben, die von den CPUs 11, 12 und 13 dazu verwendet werden, die Reaktionen von den Speichermodulen 14 und 15 auf Übertragungen über die Busse 21, 22 und 23 (den System-Bus) zu bewerten. Diese Sequenz wird von der Ablaufsteuereinrichtung in den Busschnittstelleneinheiten 56 und in dem Code, der von den CPUs ausgeführt wird, definiert.
  • Im Fall Nr. 1 wird für eine Lese-Übertragung angenommen, daß die Statusbits auf den Leitungen 33 für den primären Speicher keine Datenfehler anzeigen. Die durch den Speicherzugriff begonnene Unterbrechung wird nicht beendet, bis nicht die anderen (nicht-primären) Speichermodule mit einer Endzustandsbedingung antworten oder der nicht-primäre Speicher den Zeitablauf anzeigt. Die Unterbrechung wird beendet, wenn über den Steuerbus 55 und 43 ein Fertig-Signal quittiert wird. Wenn der nicht-primäre Speicher vor dem Zeitablauf auf der Leitung 112 eine Quittung bestätigt, wird dieser im Endzustand von der Ablaufsteuereinrichtung bewertet. Wenn von beiden Statusfeldern (Leitungen 33-1 oder 33-2) keine Datenfehler angezeigt werden, wird der Speicherzugriff ohne weitere Aktionen beendet.
  • Im Fall Nr. 2 wird für die Lese-Übertragung angenommen, daß von dem primären Speicher auf den Leitungen 33-1 keine Datenfehler angezeigt werden, und daß der nicht-primäre Speicher einen Datenfehler in dem auf den Leitungen 33-2 empfangenen Zustand quittiert und anzeigt. In diesem Fall wird der Speicherzugriff wie im Fall Nr. 1 beendet, und zusätzlich wird der Endzustand in einem Register zwischengespeichert, und ein Interrupt wird in Gang gesetzt. Wenn entweder der primäre Speicher und/oder der nicht-primäre Speicher einen Fehler auf den Leitungen 33 anzeigen, der kein Datenfehler ist, wird der Zugriff beendet, und der Zustand wird zwischengespeichert, wobei ein Interrupt in Gang gesetzt wird. Eine weitere Variante des Falles Nr. 2 ist, daß der nicht-primäre Speicher keine Quit tung bestätigt, bevor der Zeitablauf erfolgt. In diesem Fall wird der Interrupt zusammen mit einer Angabe an die Software in Gang gesetzt, daß ein Zeitablauf während einer Lese-Übertragung bei dem nicht-primären Speicher aufgetreten ist.
  • In Fall Nr. 3 wird für eine Lese-Übertragung angenommen, daß ein Datenfehler auf den Statusleitungen 33 von dem primären Speicher angezeigt wird, oder daß von dem primären Speicher keine Antwort empfangen wurde. Die CPUs warten auf eine Quittierung von dem anderen Speicher, und wenn in den Statusbits des anderen Speichers kein Datenfehler gefunden wird, erzwingt der Schaltkreis der Busschnittstelle 56 eine Änderung des Inhabers (Inhaber des primären Speichers), dann wird ein Neuversuch gestartet, um herauszufinden, ob die Daten von dem neuen Primärspeicher richtig gelesen werden. Wenn von dem neuen Primärspeicher ein ordnungsgemäßer Zustand empfangen wird (keine Datenfehleranzeige), wird die Unterbrechung wie zuvor beendet, und ein Interrupt wird zusammen mit einer Anzeige der veränderten Inhaberschaft in Gang gesetzt, um das System zu aktualisieren (um zu verzeichnen, daß ein Speicher fehlerhaft und anderer Speicher der primäre Speicher geworden ist). Wenn jedoch ein Datenfehler oder ein Zeitablauf bei diesem Versuch, aus dem neuen Primärspeicher zu lesen, auftritt, wird dem Prozessor 40 über den Steuerbus 55 und 43 ein Busfehler angezeigt.
  • Im Fall Nr. 4 wird für eine Lese-Übertragung dann, wenn sowohl der primäre Speicher als auch der nicht-primäre Speicher auf den Statusleitungen 33-1 und 33-2 einen Datenfehler anzeigen, oder wenn von dem primären Speicher keine Antwort empfangen wird und der andere Speicher mit einem Statusfehler auf den Leitungen 33 reagiert, die Unterbrechung beendet und dem Prozessor 40 über den Steuerbus 55 und 43 ein Busfehler angezeigt.
  • Bei Schreib-Übertragungen bedeutet der Fall Nr. 1, wenn der Schreibpuffer 50 umgangen wird, daß auf den Statusleitungen 33-1 und 33-2 von beiden Speichermodulen keine Fehler angezeigt werden. Die Unterbrechung wird beendet, so daß die Ausführung fortgesetzt werden kann.
  • Bei Schreib-Übertragungen, bei denen der Schreibpuffer 50 umgangen wird, bedeutet der Fall Nr. 2, daß das primäre Speichermodul auf den Leitungen 33-1 keine Datenfehler anzeigt, und daß der nicht-primäre Speicher einen Datenfehler in dem auf den Leitungen 33-2 empfangenen Status quittiert und anzeigt. In diesem Fall wird wie im Fall Nr. 1 der Speicherzugriff beendet, zusätzlich wird die Endzustandsbedingung in einem Register zwischengespeichert und ein Interrupt wird in Gang gesetzt. Wenn entweder der primäre Speicher und/oder der nicht-primäre Speicher einen Fehler auf den Leitungen 33 anzeigt, der kein Datenfehler ist, wird der Zugriff beendet, und der Zustand wird zwischengespeichert, wobei ein Interrupt in Gang gesetzt wird. Eine weitere Variante des Falles Nr. 2 ist, daß der nicht-primäre Speicher vor dem Zeitablauf keine Quittierung bestätigt. In diesem Fall wird der Interrupt zusammen mit einer Anzeige an die Software, daß während einer Schreib- Übertragung in dem nicht-primären Speicher ein Zeitablauf aufgetreten ist, in Gang gesetzt.
  • Für Schreib-Übertragungen, bei denen der Schreibpuffer 50 umgangen wird, besteht der Fall Nr. 3 darin, daß ein Datenfehler in dem Zustand des primären Speichers angezeigt oder von dem primären Speicher keine Antwort empfangen wird. Die Schnittstellensteuereinrichtung jeder CPU wartet auf eine Quittung von dem anderen Speichermodul, und wenn in dem Zustand des anderen Speichermoduls keine Datenfehler gefunden werden, wird ein Inhaberwechsel erzwungen, und ein Interrupt wird in Gang gesetzt. Wenn jedoch Datenfehler oder ein Zeitablauf bei dem anderen (neuen primären) Speichermodul auf tritt, wird dem Prozessor 40 ein Busfehler angezeigt.
  • Bei Schreibübertragungen, bei denen der Schreibpuffer 50 umgangen wird, besteht der Fall Nummer vier, darin, daß der primäre Speicher und der nicht-primäre Speicher einen Datenfehler auf den Statusleitungen 33-1 oder 33-2 anzeigen oder daß von dem primären Speicher keine Antwort empfangen wird und der andere Speicher mit einem Statusfehler auf den Leitungen 33 reagiert, wobei dann die Unterbrechnung beendet wird und dem Prozessor 40 über den Steuerbus 55 und 43 ein Busfehler angezeigt wird.
  • Bei Schreibübertragungen, bei denen der Schreibpuffer 50 aktiviert ist, so daß der Prozessor 40 während einer Schreiboperation nicht angehalten wird, besteht der Fall Nr. 1 darin, daß der Status beider Speichermodule keine Fehler anzeigt. Die Übertragung wird beendet, so daß eine neue Busübertragung beginnen kann.
  • Bei Schreibübertragungen, bei denen der Schreibpuffer 50 aktiviert ist, besteht der Fall Nr. 2 darin, daß der primäre Speicher auf den Leitungen 33-1 keine Fehler anzeigt und daß der nicht-primäre Speicher mit dem auf den Leitungen 33-2 empfangenen Status einen Datenfehler quittiert und anzeigt. In diesem Fall wird der Speicherzugriff wie im Fall Nr. 1 beendet, und zusätzlich wird die Endzustandsbedingung in einem Register zwischengespeichert, und ein Interrupt wird in Gang gesetzt. Wenn der primäre Speicher und/oder der nicht-primäre Speicher auf den Leitungen 33 einen Fehler anzeigen, der kein Datenfehler ist, wird der Zugriff beendet, und der Zustand wird zwischengespeichert, wobei ein Interrupt in Gang gesetzt wird. Eine weitere Variation des Falls Nr. 2 ist, daß der nicht-primäre Speicher vor dem Zeitablauf keine Quittung bestätigt. In diesem Fall wird der Interrupt zusammen mit einer Anzeige an die Software, daß während einer Schreibübertragung bei dem nicht-primären Speicher ein Zeitablauf aufgetreten ist, in Gang gesetzt.
  • Bei Schreibübertragungen, bei denen der Schreibpuffer 50 aktiviert ist, besteht der Fall Nr. 3 darin, daß ein Datenfehler in dem Zustand des primären Speichers angezeigt oder von dem primären Speicher keine Antwort empfangen wird. Die Schnittstellensteuereinrichtung jeder CPU wartet auf eine Quittierung von dem anderen Speichermodul, und wenn in dem Status des anderen Speichers keine Datenfehler gefunden werden, wird ein Inhaberwechsel erzwungen, und ein Interrupt wird in Gang gesetzt. Wenn jedoch Datenfehler oder ein Zeitablauf für das andere (neue primäre) Speichermodul auftritt, wird dem Prozessor 40 ein Interrupt angezeigt, und die Übertragung wird beendet.
  • Bei Schreibübertragungen, bei denen der Schreibpuffer 50 aktiviert ist, besteht der Fall Nr. 4 darin, daß sowohl der primäre Speicher als auch der nicht-primäre Speicher einen Datenfehler in dem Zustand auf den Leitungen 33-1 und 33-2 anzeigen, oder wenn von dem primären Speicher keine Antwort empfangen wird und der andere Speicher mit einem Statusfehler auf den Leitungen 33 antwortet, wird die Übertragung beendet, und dem Prozessor 40 wird über den Steuerbus 55 und 43 ein Interrupt angezeigt.
  • Wenn einmal von dem eben beschriebenen Mechanismus ermittelt wurde, daß ein Speichermodul 14 oder 15 fehlerhaft arbeitet, wird der Bedienungsperson (Operator) der Fehlerzustand angezeigt, das System kann jedoch weiterarbeiten. Die Bedienungsperson wird wahrscheinlich die Speicherkarte, welche das fehlerhafte Modul enthält, austauschen wollen, was geschehen kann, während das System eingeschaltet ist und arbeitet. Das System kann dann die neue Speicherkarte reintegrieren, ohne daß es heruntergefahren werden muß. Dieser Mechanismus ist auch dazu geeignet, ein Speichermodul zu reaktivieren, das einen Schreibfehler aufgrund eines Softerrors nicht ausführen konnte, nach dem Prüfen aber als funktionsfähig befunden wurde, so daß er nicht physisch ersetzt werden muß. Die Aufgabe besteht darin, das Speichermodul wieder in einen Zustand zu bringen, in dem die Daten identisch mit denen des anderen Speichermoduls sind. Dieser Reaktivierungsmodus ist ein zweistufiger Prozeß. Zunächst wird angenommen, daß das Speichermodul nicht initialisiert ist und Paritätsfehler enthalten kann, so daß fehlerfreie Daten mit der richtigen Parität in alle Speicherstellen geschrieben werden müssen, wobei bis zu diesem Zeitpunkt dies alles Nullen sein könnten; da jedoch alle Schreibvorgänge mit beiden Speichern durchgeführt werden, kann dieser erste Schritt derart ausgeführt werden, daß eine Speicherstelle in dem fehlerfreien Speichermodul gelesen wird und dann diese Daten an dieselbe Speicherstelle in beiden Speichermodulen 14 und 15 geschrieben werden. Dies geschieht, während die normalen Operationen weiterlaufen, verzahnt mit der Aufgabe, die gerade ausgeführt wird. Die CPUs behandeln einen Speicher im Reaktivierungszustand genauso wie im Online- Zustand, in dieser ersten Stufe werden jedoch Schreibaufträge, die von den I/O-Bussen 24 oder 25 stammen, von der Reaktivierungsroutine ignoriert. Nachdem auf diese Weise in alle Speicherstellen geschrieben wurde, ist der nächste Schritt gleich dem ersten, abgesehen davon, daß auch I/O-Zugriffe geschrieben werden; d. h. I/O-Schreibaufträge von den I/O-Bussen 24 oder 25 werden im Rahmen des normalen Verkehrs bei der Ausführung einer Aufgabe geschrieben, wenn sie auftreten, wobei diese mit dem Lesen jeder Speicherstelle in dem fehlerfreien Speicher und Schreiben der entsprechenden Daten an dieselbe Speicherstelle in beiden Speichermodulen verschränkt wird (Interleaving). Wenn die Speichermodule in diesen zweiten Schritt von null bis zu der maximalen Adresse adressiert wurden, sind die Speicher identisch. Während dieses zweiten Reaktivierungsschrittes führen beide CPUs und I/O-Prozessoren außer dem Speichermodul, das reaktiviert wird, alle Operationen ohne Fehler aus. Die I/O-Prozessoren 26, 27 verwenden während der Daten-Leseübertragungen die Daten, die von dem Speichermodul, das aktiviert wird, geliefert werden, nicht. Nach der Beendigung des Reaktivierungsprozesses kann der reaktivierte Speicher, falls notwendig, als Primärspeicher verwendet werden.
  • Ein ähnlicher Reaktivierungsprozeß ist für die CPU-Module vorgesehen. Wenn eine CPU als fehlerhaft erkannt wird (z. B. durch die Speicher-Mehrheitsauswahlschaltung 100 etc.), können die anderen beiden weiterarbeiten, und die fehlerhafte CPU kann ersetzt werden, ohne daß das System heruntergefahren wird. Wenn die neue CPU-Karte ihre Einschalt-Selbsttestroutine aus dem auf der Karte vorgesehenen ROM 63 ausgeführt hat, signalisiert sie dies den anderen CPUs, und eine Reaktivierungsroutine wird ausgeführt. Zunächst kopieren die beiden fehlerfreien CPUs ihren Zustand in den globalen Speicher, dann führen alle drei CPUs einen "Soft-Reset" durch, wobei die CPUs zurückgesetzt werden und ihre Initialisierungsroutinen in dem ROM auszuführen beginnen, so daß sie zu genau demselben Punkt in ihrem Befehlsstrom kommen und synchronisiert sind, wobei dann der gespeicherte Zustand in alle drei CPUs zurückkopiert wird und die zuvor laufende Aufgabe fortgesetzt wird.
  • Wie oben bemerkt, ermittelt die Mehrheitsauswahlschaltung 100 in jedem Speichermodul, ob alle drei CPUs identische Speicherzugriffe machen oder nicht. Wenn ja, darf der Speicherbetrieb bis zum Ende fortgesetzt werden. Wenn nein, wird ein CPU-Fehlermodus ausgelöst. Die CPU, die einen anderen Speicherzugriff überträgt, was von der Mehrheitsauswahlschaltung 100 erfaßt wird, wird aufgrund des auf dem Bus 33-1 und/oder dem Bus 33-2 zurückgegebenen Status identifiziert. Ein Interrupt wird in Gang gesetzt, und eine Software setzt danach die fehlerhafte CPU offline. Dieser Offline-Zustand wird auf dem Statusbus 32 wiedergegeben. Der Speicherzugriff, bei dem der Fehler erfaßt wurde, darf gestützt auf eine Zwei-aus-Drei-Mehrheitsauswahl beendet werden, danach erwartet die Mehrheitsauswahlschaltung 100 zwei identische Speicherzugriffe von den beiden fehlerfreien CPUs, bevor ein Speicherzugriff fortgesetzt werden darf, bis die fehlerhafte CPU-Karte ersetzt wurde. Das System ist normalerweise so konfiguriert, daß es weiterarbeitet, wenn eine CPU, jedoch nicht zwei offline sind. Wenn jedoch nur mit einer fehlerfreien CPU weitergearbeitet werden soll, steht auch diese Alternative zur Verfügung. Eine CPU wird von der Mehrheitsauswahlschaltung 100 als fehlerhaft erkannt, wenn in ihrer Speicheranforderung andere Daten erfaßt werden oder wenn ein Zeitablauf auftritt; wenn zwei CPUs identische Speicheranforderungen senden, die dritte jedoch während einer ausgewählten Zeitspanne gar keine Signale sendet, wird angenommen, daß diese CPU fehlerhaft ist, und sie wird wie zuvor offline gesetzt.
  • Die I/O-Anordnung des Systems hat einen Mechanismus für die Softwarereintegration im Falle einer Störung. Das heißt, der Kern aus der CPU und den Speichermodulen ist gegen Hardwarefehler geschützt, wie gerade beschrieben, der I/O-Abschnitt des Systems ist jedoch gegen Softwarefehler geschützt. Wenn einer der I/O-Prozessoren 26 oder 27 ausfällt, werden die Steuereinrichtungen 30, die wie oben erläutert über Software diesen I/O-Prozessor zugeordnet sind, mittels Software zu dem anderen I/O-Prozessor umgeschaltet; das Betriebssystem schreibt die Adressen in der I/O-Seitentabelle um, um die neuen Adressen für dieselben Steuereinrichtungen zu verwenden, und ab diesem Zeitpunkt sind die Steuereinrichtungen mit dem anderen der beiden I/O-Prozessoren 26 oder 27 gekoppelt. Der Fehler oder die Störung können aufgrund eines Busfehlers erfaßt werden, der einen Buszyklus auf der Busschnittstelle 56 beendet, wodurch ein Ausnahmezustand erzeugt wird, der über eine Ausnahme-Verarbeitungsroutine an den Kern gesendet wird, die den Grund des Ausnahmezustandes ermittelt und dann (durch Neuschreiben der Adressen in der I/O-Tabelle) alle Steuereinrichtungen 30 von dem ausgefallenen I/O-Prozessor 26 oder 27 zu dem anderen transferiert.
  • Wenn die Busschnittstelle 56, wie zuvor beschrieben einen Busfehler erfaßt, muß der Fehler isoliert werden, bevor ein Reintegrationsprozeß ablaufen kann. Wenn eine CPU einen Schreibvorgang ausführt, entweder zu einem der I/O-Prozessoren 26 oder 27 oder zu einer der I/O-Steuereinrichtungen 30 auf einem der Busse 28 (z. B. zu einem der Steuer- oder Statusregister oder Datenregister in einem der I/O-Elemente) ist dies eine Bypass-Operation in den Speichermodulen, und beide Speichermodule führen die Operation aus, wobei sie sie an die beiden I/O-Busse 24 und 25 weitergeben; die zwei I/O-Prozessoren 26 und 27 überwachen beide die Busse 24 und 25 und überprüfen die Parität und die Befehle auf die richtige Syntax über die Steuereinrichtungen 126. Wenn z. B. die CPUs in ein Register in einem I/O-Prozessor 26 oder 27 schreiben, und wenn eines der Speichermodule eine gültige Adresse, einen gültigen Befehl und gültige Daten vorgibt (was sich daraus ergibt, daß es keine Paritätsfehler und ein fehlerfreies Protokoll gibt), schreibt der adressierte I/O-Prozessor die Daten in die angegebenen Speicherstellen und antwortet dem Speichermodul mit einem Quittungssignal, das anzeigt, daß der Schreibvorgang erfolgreich beendet wurde. Beide Speichermodule 14 und 15 überwachen die Reaktionen der I/O-Prozessoren 26 oder 27 (d. h. die Adressen- und Datenquittierungssignale gemäß Fig. 7 und den zugehörigen Status), und beide Speichermodule antworten den CPUs durch Senden des Betriebszustands auf den Leitungen 33-1 und 33-2. (Wenn gelesen wurde, gibt nur das primäre Speichermodul Daten zurück, beide geben jedoch den Status zurück.) Nun können die CPUs ermitteln, ob beide oder nur eines oder keines den Schreibvorgang richtig ausgeführt hat. Wenn nur eines einen fehlerfreien Zustand zurückgibt, und wenn es sich dabei um das primäre Speichermodul handelt, muß die Inhaberschaft nicht verändert werden, wenn jedoch das Backup-Modul einen fehlerfreien Zustand zurückgegeben hat und das primäre Modul einen fehlerhaften, muß die Inhaberschaft geändert werden, um das Modul, das den Befehl richtig ausgeführt hat, zum primären Modul zu machen. In jedem Fall wird ein Interrupt ausgelöst, um den Fehler zu berichten. An diesem Punkt wissen die CPUs nicht, ob es ein Speichermodul oder ein Element stromabwärts des Speichermoduls ist, das fehlerhaft ist. Daher wird ein ähnlicher Schreibvorgang mit dem anderen I/O-Prozessor versucht, wenn dieser jedoch gelingt, beweist dies nicht notwendig, daß das Speichermodul fehlerhaft ist, weil der ursprünglich adressierte I/O-Prozessor z. B. auf dem Bus 24 oder 25 eine Leitung blockieren und Paritätsfehler verursachen könnte. Der Prozeß kann daher die I/O-Prozessoren selektiv abschalten und die Operation erneut versuchen, um festzustellen, ob beide Speichermodule erfolgreich auf denselben I/O-Prozessor schreiben können. Wenn ja, kann das System weiterarbeiten, wobei der fehlerhafte I/O-Prozessor offline genommen wird, bis er ersetzt und reintegriert ist. Wenn dieser erneute Versuch jedoch noch immer einen fehlerhaften Status von einem Speicher ergibt, kann der Speicher offline genommen werden, oder es können weitere Schritte zum Isolieren des Fehlers vorgenommen werden, um sicherzustellen, daß der Fehler in dem Speicher und nicht in einem anderen Element liegt; das kann das Umschalten aller Steuereinrichtungen 30 auf einen I/O-Prozessor 26 oder 27 umfassen, wobei nachfolgend ein Rücksetzbefehl an den abgeschalteten I/O-Prozessor ausgegeben wird und die Datenübertragung mit dem I/O-Prozessor, der online ist, mit beiden aktivierten Speichermodulen erneut versucht wird - wenn der zurückgesetzte I/O-Prozessor den Bus 24 oder 25 falsch angesteuert hatte, werden dann dessen Bustreiber durch den Reset abgeschaltet worden sein, so daß man dann, wenn der erneute Versuch der Datenübertragung zu dem I/O-Prozessor, der online ist, (über beide Busse 24 und 25) einen fehlerfreien Zustand ergibt, weiß, daß der zurückgesetzte I/O-Prozessor den Fehler verursacht hatte. Wenn beide Speichermodule mit einem Fehlertyp quittieren, der kein Datenfehler ist, wird die I/O-Übertragung beendet, und dem Prozessor wird ein Busfehler angezeigt. Ein Zeitablauf wird auf dieselbe Weise behandelt. Wenn das primäre Modul mit einem Datenfehler reagiert und das Backup-Modul keinen Datenfehler anzeigt, wird versucht, die Inhaberschaft zu ändern. In jedem Fall ist für jeden Busfehler irgendeine Art von Sequenz zum Isolieren des Fehlers realisiert, um herauszufinden, welche Systemkomponente offline genommen werden muß.
  • CPU und Speicherfehler-Wiederherstellung:
  • Die Handhabung von Hardwarefehlern in der CPU und dem Speicheruntersystem der Fig. 1 bis 13 ist ein wichtiges Merkmal. Das Untersystem umfaßt die CPUs 11, 12 und 13 und die Speicherkarten 14 und 15 zusammen mit dem Systembus, d. h. den Bussen 21, 22 und 23. Immer wenn die Hardware ein außergewöhnliches Ereignis erfaßt, sei es ein kleiner Ausrutscher, wie ein Paritätsfehler des Speichers, oder eine schwerwiegende Störung des Untersystems (eine zerstörte Energieversorgung zum Beispiel), besteht die Aufgabe darin, die ausgefallene Komponente zu identifizieren und aus dem System zu entfernen, so daß der normale Betrieb schnell wieder aufgenommen werden kann; an diesem Punkt wird nicht versucht, die ausgefallene Komponente zu diagnostizieren oder zu reintegrieren. Zunächst wird die Fehlerwiederherstellungsanordnung für den "Kern" des Systems erörtert, dann die Fehlerwiederherstellung für die I/O-Busse und I/O-Steuereinrichtungen.
  • Hardwarefehler-Ausnahmezustände: Hardwarefehler-Ausnahmezustände werden durch Interrupts hoher Priorität oder durch Busfehler angezeigt. Im allgemeinen wird ein Interrupt hoher Priorität für einen Fehler erzeugt, der asynchron verarbeitet werden kann, d. h. irgendwann, nachdem der momentane Befehl ausgeführt wurde. Ein paar Beispiele sind (1) eine "Inhaberschaft übernehmen"-Operation, die von einem Hardwarefehler auf der zuvor primären Speicherkarte 14 oder 15 erzwungen wird; (2) Nicht-Datenfehler beim Lesen auf dem Systembus; (3) Lesevorgänge auf dem Systembus mit einem Datenfehler in dem primären Speicher 14 oder 15, die jedoch noch von dem Backup-Speicher 14 oder 15 beendet werden konnten. Bei diesen drei Beispielen wird der Kern über Fehler benachrichtigt, von denen sich die Hardware bereits wieder erholt hat. In einigen Fällen wird der Prozessor jedoch angehalten und wartet auf die Beendigung einer Operation, die niemals beendet werden kann, wie: (1) gestörte "Inhaberschaft übernehmen"-Operationen; (2) Lese- und Schreibvorgänge auf dem Systembus, die von keinem der Speichermodule beendet werden können; (3) Datenfehler beim Schreiben auf dem Systembus, während der Schreibpuffer 52 aktiviert ist. Da Interrupts maskiert werden können, kann man sich nicht darauf verlassen, daß sie einen Haltezustand unterbrechen; diese Funktion leisten Busfehler.
  • Obwohl diese zwei Arten der Hardwarefehler-Ausnahmezustände so unterschieden werden, können sie beide gleichwohl durch eine Ausnahmezustands-Verarbeitungsroutine bedient werden, die sich nicht darum kümmert, welcher Fehlertyp aufgetreten ist. Während des Durchlaufens der Busfehler-Verarbeitungseinrichtung wird ein Busfehler zu dem Hardwarefehlercode umgeleitet (der das Verarbeitungsmittel für Interrupts hoher Priorität ist), wenn nicht erkannt wird, daß der Busfehler durch "keinen Fehler" oder durch Zugriffe auf Teilnehmerdienste oder aufgrund des Anwachsens des Benutzerstapels verursacht wurde. Der Fehlerzustand, der von dem System der Fig. 1 bis 8 gespeichert wird, ist für jede Art von Ausnahme gültig.
  • Die ersten Fehlerregister, die überprüft werden, sind solche, die potentiell asymmetrisch sind, weil sie Fehler bei der Prozessorsynchronisierung berichten.
  • Das Register CPU_ERR enthält mehrere spezifische Bits, die dafür vorgesehen sind, bestimmte Fehlertypen anzuzeigen, wie durch die folgenden Unterabschnitte angegeben wird:
  • CPU_ERR: Interrupt-Synchronisierungsfehler - angezeigt durch: das Bit CPU_ERR IS. Dies zeigt eine CPU-Divergenz oder die Störung eines Signals in einer Interrupt-Synchronisierungslogik der CPU an. Wenn der Soft-Synchronisierungstest keine Divergenz ergab, wird der Fehler in der Synchronisierungshardware gesucht. Reaktion:
  • Wenn die CPUs bezüglich des Zustands von CPU_ERR IS nicht übereinstimmen, die ungerade CPU offline nehmen.
  • Sonst, Soft-Mehrheitsauswahl von CPU_SERR und Reaktion auf Biteinstellungen wie unten beschrieben.
  • CPU_SERR: Interruptabhängige Eingangssignale - angezeigt durch: die Bits
  • CPU_SERR_CPUaHIGH, CPU_SERR_CPUbHIGH, CPU_SERR_CPUcHIGH; CPU_SERR_CPUaLOW, CPU_SERR_CPUbLOW, CPU_SERR_CPUcLOW; CPU_SERR_CPUaTIMO, CPU_SERR_CPUbTIMO, CPU_SERR_CPUcTIMO, CPU_SERR_CPUaTIM1, CPU_SERR_CPUbTIM1, oder CPU_SERR_CPUcTIM1.
  • Diese Bits stellen einen Schnappschuß der Eingangssignale der Interruptsynchronisierungsschaltung 65 jeder CPU zu dem Zeitpunkt dar, zu dem der Fehler angezeigt wurde. Reaktion:
  • Wenn die Version dieser vier Eingangssignale einer CPU einmalig ist, ist ihre Synchronisierungshardware fehlerhaft; offline nehmen.
  • CPU_ERR: Prozessor-Synchronisierungsfehler - angezeigt durch:
  • das Bit CPU_ERR_PS. Dies zeigt eine CPU-Divergenz oder die Störung eines Signals in einer Prozessor-Synchronisierungslogik der CPU an; die Soft-Synchronisierungsoperation ergab keine Divergenz, der Fehler wird daher in der Synchronisierungshardware gesucht. Reaktion:
  • Wenn die CPUs bezüglich des Zustands von CPU_ERR_PS nicht übereinstimmen, die ungerade CPU offline nehmen.
  • Sonst, Soft-Mehrheitsauswahl von CPU_SERR und Reaktion auf Biteinstellungen wie unten beschrieben.
  • CPU_SERR: Prozessor blockiert - angezeigt durch: die Bits CPU_SERR_CPUaSTALL; CPU_SERR_CPUbSTALL, CPU_SERR_CPUcSTALL. Diese Bits stellen einen Schnappschuß der Eingangssignale der Prozessor-Synchronisierungshardware jeder CPU zu dem Zeitpunkt dar, zu dem der Fehler angezeigt wurde. Reaktion:
  • Wenn die Version dieses Signals einer CPU einmalig ist, ist ihre Synchronisierungshardware gestört; offline nehmen.
  • CPU_ERR: Nicht zugewiesene CPU-Raumverletzung - angezeigt durch: das Bit CPU_SERR_USV. Es wurde auf eine nicht vorhandene Adresse in dem CPU-Raum geschrieben. Dies kann aus einer Störung der Kernsoftware oder aus einem Fehler in der Adressendekodierlogik der Hardware der CPU resultieren. Man beachte, daß dies einer der wenigen Fälle ist, in denen es darauf ankommt, ob der Ausnahmezustand ein Busfehler oder ein Interrupt hoher Priorität ist. Bei dem USV wird dann, wenn der Schreibpuffer aktiviert ist, ein Interrupt hoher Priorität erzeugt; anderenfalls ein Busfehler. Wenn der fehlerhafte Schreibvorgang zu dem Schreibpuffer geht, tritt das USV asyn chron auf, so daß der Programmzähler (PC) in dem Ausnahmeblock nicht auf den schuldigen Befehl weist. Die Art des Ausnahmezustands gibt daher Auskunft darüber, ob der Ausnahme- Wert des Programmzählers zuverlässig ist. Reaktion:
  • Wenn alle CPUs einen nicht zugeordneten Raumfehler zeigen, ist der Kern gestört;
  • Lesen der fehlerhaften Adresse aus CPU_ERRADDR;
  • Schreiben von CPU MASK_CUSV, zum Löschen des Fehlers;
  • erforderliche Maßnahme erfragen.
  • Wenn jedoch nur eine CPU den Fehler aufweist, CPU offline nehmen.
  • CPU_ERR: Schreibverletzung im lokalen RAM - angezeigt durch: das Bit CPU_ERR_WPV. Es wurde versucht, auf eine schreibgeschützte Adresse zu schreiben. Dies kann aus einer Störung der Kernsoftware resultieren oder aus einem Fehler in der CPU oder dem Speichermodul/schreibgeschützten RAM. Wie bei der oben beschriebenen nicht zugewiesenen Raumverletzung gibt der Ausnahmezustand Auskunft darüber, ob dem Programmzähler in dem Ausnahme-Stapelblock vertraut werden kann. Reaktion:
  • Wenn alle CPUs eine Schreibschutzverletzung zeigen, ist der Kern gestört;
  • Lesen der fehlerhaften Adresse aus CPU_ERRADDR;
  • Schreiben von CPU MASK CUSV, zum Löschen des Fehlers;
  • erforderliche Maßnahme erfragen.
  • Wenn jedoch nur eine CPU den Fehler aufweist, CPU offline nehmen.
  • CPU_ERR: Zweigleisiger Fehler - angezeigt durch: die Bits CPU_ERR_CPUaDRF, CPU_ERR_CPUbDRF, CPU_ERR_CPUcDRF, CPU_ERR_IOP0DRF, CPU_ERR_IOP1DRF oder CPU_ERR_MPDRF. Der Feh ler kann bei der Signalquelle, auf der Backplane oder bei einer einzelnen CPU liegen. CPU_ERR zweigleisige Fehler (DRF; dual rail fault) von allen Quellen außer dem Speichermodul 14 und 15. Da es zu viele verschiedene zweigleisige Signale gibt, die von dem Speichermodul kommen, um in CPU_ERR zu passen, werden diese Fehlerbits in die Statusregister des Systembusses, CPU_RSBa und CPU_RSBc, gelegt. Reaktion:
  • Wenn alle drei CPUs gleichzeitig zeigen, daß ein bestimmter DRF vorliegt, die Quelle des fehlerhaften Signals deaktivieren.
  • Sonst, die ungerade CPU deaktivieren (da das Signal durch die Erfassung des Fehlers inaktiv gemacht wurde, ist es wahrscheinlich, daß die Signalquelle in der Zukunft deaktiviert ist, selbst wenn der Fehler eine gestörte CPU war).
  • CPU_ERR: Energiesystemzustandsänderungs-Interrupt - angezeigt durch: das Bit CPU_ERR_POWER. Reaktion:
  • Lesen von CPU_POWER und Reaktion auf Biteinstellung wie unten beschrieben.
  • CPU_POWER: Versorgungsregler und Batteriezustand - angezeigt durch: die Bits CPU_POWER_BATTaSTS1, CPU_POWER_BATTaSTS2, CPU_POWER_BATTcSTS1, CPU_POWER_BATTcSTS2, CPU_POWER_BULKaSTS1, CPU_POWER_BULKaSTS2, CPU_POWER_BULKcSTS1, CPU_POWER_BULKcSTS2, CPU_POWER_BATTaMON1, CPU_POWER_BATTaMON2, CPU_POWER_BATTcMON1, CPU_POWER_BATTcMON2, CPU_POWER_BULKaMON1, CPU_POWER_BULKaMON2, CPU_POWER_BULKcMON1, oder CPU_POWER_BULKcMON2. In diesem Register zeigen STS-Bits, die auf eins gesetzt sind, Komponenten an, die physisch vorhanden sind; die MON-Bits sind beschreibbare Masken, die anfänglich auf denselben Zustand gesetzt sind, wie ihre entsprechenden STS-Bits. Ein Interrupt hoher Priorität wird erzeugt, wenn eine MON-Leitung nicht mit ihrer STS-Leitung übereinstimmt. Man beachte, daß diese Doppelleitungssignale keine zweigleisigen Signale sind; alle STS- Leitungen 1 und 2 sollten immer übereinstimmen. Reaktion: Speichern der aktuellen MON-Bits;
  • Lesen der aktuellen STS-Bits und Schreiben dieser Bits an die Stelle der MON-Bits (Maskieren dieses Energiezustandsänderungs-Interrupts);
  • Vergleichen der gespeicherten MON-Bits mit den aktuellen STS-Bits;
  • wenn sich eine STS-Leitung für eine der Batterien oder Versorgungsregler verändert hat,
  • Aufrufen der Energieauswahl-Interruptverarbeitungsroutine.
  • CPU_ERR: Kernmodul zeigt Zustandsänderungsinterrupt - wenigstens eine Komponente aus CPUs, Speichermodulen oder I/O- Prozessoren wurde entfernt oder ersetzt. Durch Vergleichen der aktuellen Modul-vorhanden-Bits in CPU CFG mit ihren vorherigen Zuständen (die im Kern gespeichert sind), kann die fehlende/hinzugefügte Komponente identifiziert werden. Reaktion:
  • Wenn ein Speichermodul oder eine I/O-Prozessorkarte entfernt wurde,
  • zurückgesetzt halten;
  • als fehlend markieren;
  • aus /config entfernen;
  • wenn eine CPU-Karte entfernt wurde,
  • als fehlend markieren,
  • aus /config entfernen.
  • Der Kern speichert den Zustand von CPU CFG, wenn er aus dem Hardware-Ausnahmezustand zurückkehrt. Dies dient als Bezugswert, um Konfigurationsveränderungen (gestörte, herausgezogene, neu eingefügte Karten, wiederaufgeladene Batterien etc.) zu erkennen, indem die aktuelle und die gespeicherte Version von CPU CFG verglichen werden, wenn der nächste Hardware-Ausnahmezustand auftritt.
  • CPU_ERR: "Beide Speichermodule primär"- Fehler - Beide Speichermodule geben an, primäres Modul zu sein. Dies ist vermutlich die Folge einer gestörten Inhaberschaft-Übernehmen- Operation. Wenn erfaßt wird, daß beide Speichermodule primär sind, veranlassen die CPUs, daß die Bits der Systembus-Inhaberschaft, die sich dann ergäbe, so umgeschaltet werden, daß das primäre Modul das Modul ist, das vor der Übernahme der Inhaberschaft primär war. Reaktion:
  • Soft-Reset und Offline nehmen des Backup-Moduls.
  • CPU_ERR: "Speichermodul primär und reaktiviert"-Fehler - Ein Speichermodul 14 oder 15 gibt an, daß es sowohl primär als auch im Reaktivierungsmodus ist, wahrscheinlich aufgrund eines falschen Bits in dem Steuerregister des entsprechenden Speichermoduls; es könnte sich aber auch um einen zweigleisigen Fehler in bezug darauf handeln, welches das primäre Speichermodul ist. Reaktion:
  • Inhaberschaft übernehmen, Backup-Modul über Software zurücksetzen, und offline nehmen.
  • CPU_ERR: TMRC-Zeitablaufbits - angezeigt durch: die Bits CPU_ERR_TMRCaTMOR, CPU_ERR_TMRCcTMOR, CPU_ERR_TMRCaTMOTOS, CPU_ERR_TMRCcTMOTOS, CPU_ERR_TMRCaTMOW, oder CPU_ERR_TMRCcTMOW. Diese Bits, die nicht mit CPU_RSB_TMO verwechselt werden dürfen, das den Zeit ablauf einer oder mehrerer CPUs anzeigt, beschreiben die Gründe, warum der Systembus eines der Speichermodule 14 oder 15 durch Zeitablauf ausgeschieden hat. Dies kann ein Resultat der Selbstprüflogik der Speichermodule sein, welche den Betrieb der Karte unterbrechen, weil ein interner Fehler erfaßt wurde. Es gibt keinen anderen Indikator für interne Fehler der Speichermodule. Reaktion:
  • Software-Reset des Speichermoduls und offline nehmen.
  • CPU_ERR: RSB-Fehler - angezeigt durch: die Bits CPU_ERR_RSBa, CPU_ERR_RSBc. Reaktion:
  • Wenn eines oder beide Bits CPU_ERR_RSBx gesetzt sind, Lesen des entsprechenden Registers CPU_RSBx und Reagieren auf die Biteinstellungen wie unten beschrieben.
  • CPU_RSBx: Daten-Mehrheitsauswahlfehler - angezeigt durch: die Bits CPU_RSB-ANY oder CPU_RSB_CPUx. Die Daten einer CPU stimmen nicht mit den Daten der anderen überein; die Daten könnten Inhaberschaft-übernehmen, Modul vorhanden DRF oder Systembusparitäts-Signale gewesen sein. Reaktion:
  • CPUx offline nehmen.
  • CPU_RSBx: Zeitablauf der CPU - angezeigt durch: die Bits CPU_RSB_ANY, CPU_RSB_TMO oder CPU_RSB/CPUx. Die angegebene CPU war die einzige, die eine Systembusanfrage oder eine Übernahme der Inhaberschaft verpaßt (oder ausgelöst) hat. Reaktion:
  • CPUx offline nehmen.
  • CPU_RSBx: Datenfehler - angezeigt durch: die Bits CPU-RSB_ANY oder CPU_RSB_DATA. Dies kann einer von mehreren Fehlern sein:
  • (1) Zugriff auf einen gültigen jedoch fehlenden (nicht installierten) globalen Speicher; (2) Zugriff auf eine nicht existierende globale Speicheradresse; (3) Schreibschutzverletzung im globalen Speicher; (4) Datenfehler (Paritätsfehler in den Daten von dem Speicher). Reaktion:
  • Lesen von TMRC_ERR;
  • wenn keines von TMRC_ERR_ABSENTRAM, TMRC_ERR_NEXISTRAM oder TMRC_ERR_WPV gesetzt sind, wird der Datenfehler angenommen,
  • Inhaberschaft übernehmen, falls notwendig, wobei das gestörte Speichermodul zum Backup-Modul wird;
  • Soft-Reset des Backup-Moduls;
  • Backup-Modul offline nehmen.
  • TMRC_ERR: Zugriff auf nicht installiertes globales RAM - angezeigt durch: das Bit TMRC_ERR_NEXISTRAM. Reaktion:
  • Analog zu den Vorgängen für Schreibschutzverletzungen des lokalen RAM.
  • TMRC_ERR: Zugriff auf nicht existierendes globales RAM - angezeigt durch: das Bit TMRC_ERR_ABSENTRAM. Reaktion:
  • Analog zu den Vorgängen für Schreibschutzverletzungen des lokalen RAM.
  • TMRC_ERR: Schreibschutzverletzung im globalen RAM - angezeigt durch: die Bits TMRC_ERR_WPV oder TMRC_ERR_CPU. Dieser Fehler kann durch einen CPU-Zugriff verursacht werden oder dadurch, daß ein VME-Master in das globale RAM schreibt; TMRC_ERR_CPU gibt Auskunft über den Schuldigen. Die Adresse des versuchten Schreibvorgangs wird in TMRC_ERR_ADDR zwischengespeichert. Reaktion:
  • Wenn die CPU das Schreiben ausgelöst hat, analoges Vorgehen wie bei Schreibschutzverletzungen im lokalen RAM;
  • sonst,
  • als Masterzugriffsfehler behandeln.
  • CPU_RSBx: Bypassfehler - angezeigt durch: die Bits CPU_RSB_ANY, CPU_RSB_RIOB oder CPU_RSB_DATA. Der I/O-Prozessor hat einen fehlerhaften Zustand zurückgegeben oder das Speichermodul hat einen Paritätsfehler bei den Daten erfaßt, die von dem I/O-Prozessor gelesen wurden. Das Problem könnte durch das Speichermodul oder durch die I/O-Bus-Schnittstellenlogik auf dem I/O-Prozesser verursacht worden sein. Eine andere Möglichkeit ist, daß der andere I/O-Prozessor, der den I/O- Bus auch verwendet, so ausgefallen ist, daß er die Störung von I/O-Busoperationen verursacht. Reaktion:
  • Wenn beide Systembusse die Gruppe RIOB/IOP zeigen,
  • I/O-Prozessor herausnehmen.
  • Sonst,
  • wenn das Speichermodul, das diese Systembus-Statusbits präsentiert, nicht primär ist,
  • Inhaberschaft übergeben;
  • den anderen I/O-Prozessor auswählen;
  • wenn die Bypass-Operation erfolgreich ist, den I/O-Prozessor deaktivieren;
  • sonst,
  • das Speichermodul durch Software zurücksetzen und offline nehmen.
  • CPU_RSBx: Bypass-Zeitablauf - angezeigt durch: die Bits CPU_RSB_ANY, CPU_RSB_RIOB, CPU_RSB_DATA oder CPU_RSB_TMO: Ein I/O-Prozessor 26 oder 27 hat auf eine Bypass-Operation nicht reagiert. Wie oben könnte das Problem seine Ursache in dem Speichermodul oder in der I/O-Bus-Schnittstellenlogik auf dem I/O-Prozessor haben. Reaktion:
  • Wenn beide Systembusse die Hits TIMEOUT zeigen, I/O-Prozessor herausnehmen.
  • Sonst,
  • wenn das Speichermodul, das diese Systembus-Statusbits präsentiert, nicht primär ist,
  • Inhaberschaft übergeben;
  • den anderen I/O-Prozessor auswählen;
  • wenn die Bypass-Operation erfolgreich ist, den I/O-Prozessor deaktivieren;
  • sonst,
  • das Speichermodul durch Software zurücksetzen und offline nehmen.
  • CPU_RSBx: Zeitablauf auf einem RIOB und einer CPU - angezeigt durch: die Bits CPU_RSB_ANY, CPU_RSB_RIOB, CPU_RSB_DATA, CPU_RSB_TMO ODER_CPU_RSB_CPUx. Hier gibt es mehrere Möglichkeiten: (1) ein Bypass-Fehler (siehe oben) begleitet von einem CPU-Zeitablauf; (2) ein Bypass-Zeitablauf (siehe oben) mit einem Mehrheitsauswahlfehler; (3) ein I/O-Prozessor und eine CPU sind getrennt voneinander abgelaufen. Reaktion:
  • CPUx offline nehmen und Operation erneut versuchen; hoffen, einen der einfacheren Fälle zu erzeugen.
  • CPU_RSBx: zweigleisiger Fehler - angezeigt durch: die Bits CPU_RSB PRTDRF, CPU_RSB HIGHDRF, CPU_RSB LOWDRF, CPU_RSB_TIM1DRF, CPU_RSB_TIM0DRF, CPU_RSB_CPUaONLDRF, CPU_RSB_CPUbONLDRF, CPU_RSB_CPUcONLDRF, CPU_RSB_TMRCaONLDRF, CPU_RSB_TMRCcONLDRF, CPU_RSB_REVDRF oder CPU_RSB PRESDRF. Wenn CPU_RSB PRESDRF (der im Modul vorhandenen zweigleisigen Fehler (DRF)) nicht gesetzt ist, wird von dem Speichermodul kein zweigleisiger Fehler bestätigt, weil dies den gesamten Rest qualifiziert. Reaktion:
  • Wenn der andere Systembus die hier gefundenen Doppelschienenfehler bestätigt,
  • Quelle des Signals deaktivieren;
  • sonst,
  • Softwarereset des Speichermoduls und offline nehmen.
  • CPU_ERR: Änderung der Hardwareinhaberschaft - angezeigt durch: das Bit CPU_ERR TOS. Abhängig von einem Systembusfehler wurde von der Hardware eine Übernahme der Inhaberschaft gefordert. Es sollten auch CPU_ERR RSBa oder CPU_ERR RSBc gesetzt sein. Reaktion:
  • Reagieren auf die Statusbits CPU_RSB für das angegebene Bussystem.
  • CPU_ERR: keine Bits gesetzt. Reaktion:
  • Nach Fehlern des Speichermoduls suchen.
  • TRMC_CAUSE: Datenübertragungsfehler zwischen den TMRC - angezeigt durch das zugeordnete Bit. Es wurde ein Fehler bei der Datenübertragung zwischen den TMRCs des primären und des Back- up-Moduls erfaßt. Reaktion:
  • Softwarereset des Backup-TMRC und offline nehmen.
  • TMRC_CAUSE: Zählerüberlauf auffrischen - angezeigt durch das zugewiesene Bit. Das globale RAM wurde nicht innerhalb der Zeitablaufperiode aufgefrischt, die in dem Auffrischzähler implementiert ist.
  • TMRC_CAUSE: CPU-Modul zeigt Doppelschienenfehler - angezeigt durch die zugewiesenen Bits (ein Bit pro CPU). Signal von einer CPU, daß im Modul ein Fehler vorhanden ist. Reaktion: angegebene CPU offline nehmen.
  • TMRC_CAUSE: RIOB-Zeitablauf - angezeigt durch das zugewiesene Bit. Der I/O-Busvermittler gewährte den Bus einem I/O-Prozessor, der dies niemals quittiert hat. Reaktion:
  • angegebenen I/O-Prozessor deaktivieren.
  • Einige der Bits der obigen Unterabschnitte haben die folgenden Bedeutungen:
  • CPU_RSB_ANY: eines oder mehrere der anderen sieben Fehlerbits ist gesetzt; aka "Bit < 6> "
  • CPU_RSB_DATA: entweder wurden ungültige Daten gelesen, oder Daten konnten nicht richtig geschrieben werden; aka "bit < 6> "
  • CPU_RSB_RIOB: ein Fehler in dem IOP oder in der RIOB-Schnittstellenlogik; aka "bit < 4> "
  • CPU_RSB_TMO: eine oder mehrere CPUs erfuhren während einer RSB-Operation einen Zeitablauf, oder während einer Bypass-Operation ist ein RIOB-Fehler aufgetreten; aka "bit < 3> ".
  • CPU_RSB_CPUa bei einem RSB-Fehler wird die CPUa vermutet; aka "bit < 2> ".
  • CPU_RSB_CPUb bei einem RSB-Fehler wird die CPUb vermutet; aka "bit < 1> ".
  • CPU_RSB_CPUc bei einem RSB-Fehler wird die CPUc vermutet; aka "bit < 0> ".
  • I/O-Untersystemfehlererfassung, Fehlerwiederherstellung und Reintegration:
  • Jeder der I/O-Prozessoren 26, 27 ist eine selbstprüfende, schnell auf Fehler reagierende Steuereinrichtung, die dazu dienen soll, die Gefährdung des Kerns des Systems während einer Hardwarestörung zu minimieren. In Kombination mit dem BIM 29 schützt jeder I/O-Prozessor 26, 27 auch die CPU und die Speicheruntersysteme gegen fehlerhafte VME-Steuereinrichtungen 30. Anders als bei Störungen der CPU oder Speicheruntersysteme ist die Software allein für die Wiederherstellung bei einer Störung eines I/O-Prozessors 26, 27 und das Vorsehen der notwendigen Redundanz für die Wiederherstellung nach einem solchen Fehler verantwortlich. Die Wiederherstellungsprozedur für verschiedene bekannte Fehler der I/O-Prozessoren 26, 27 und Steuereinrichtungen 30 ist in den folgenden Abschnitten beschrieben.
  • Der Zweck ist hier, die Handhabung der Fehler innerhalb des I/O-Untersystems und des Systems der Fig. 1 bis 8 zu beschreiben. Wenn in dem I/O-Untersystem ein Fehler auftritt, besteht das Hauptziel darin, die ausgefallene Komponente, d. h. einen I/O-Prozessor 26, 27 oder eine I/O-Steuereinrichtung 30 oder ein I/O-Gerät 148, zu identifizieren und aus der Systemkonfiguration zu entfernen, so daß der normale Betrieb wieder aufgenommen werden kann.
  • In den folgenden Abschnitten werden Kopfzeilen aus zwei Komponenten gebildet: einem Registernamen und einem Fehlerzustand, der von dem Register beschrieben werden kann. Registernamen und ihre Bits leiten sich aus den Kopfdateien (header files) für die CPU- und I/O-Prozessor-Karten 26, 27 des Kerns in der Sprache C ab. Die wesentlichen Bits in dem Register sind unter einem "angezeigt durch:"- Untertitel angegeben. Der Liste der Bits folgt normalerweise eine kurze Erläuterung des Fehlers. Der Abschnitt wird von einer Beschreibung der geeigneten Reaktion oder Prozedur beendet, einschließlich der Angabe, ob sofort Maßnahmen getroffen werden sollen oder ob mehr Information gesammelt werden soll.
  • I/O-Prozessor-Wiederherstellungsstrategien: Wenn ein I/O-Prozessor 26, 27 ausfällt, schaltet der Kern die I/O-Steuereinrichtungen 30 auf den anderen Bus 28 für die andere Steuereinrichtung 26 oder 27 um, bevor die ausgefallene IOP-Steuereinrichtung 26 oder 27 zurückgesetzt wird.
  • Der Prozeß zum Umschalten einer Steuereinrichtung läuft wie folgt ab:
  • a) Übernehmen des Busses 28 des fehlerfreien I/O-Prozessors 26 oder 27;
  • b) Aufrufen einer Identifikationsroutine für jedes Gerät, das mit dem gestörten I/O-Prozessor verbunden ist. Die Identifikationsroutine sollte wenigstens die Steuereinrichtung 30 überprüfen, um herauszufinden, ob sie reagiert;
  • c) Wenn die Identifikationsroutine versagt, Steuereinrichtung offline nehmen. Sie könnte nicht umgeschaltet werden;
  • d) Nach dem Umschalten einer Steuereinrichtung 30, Freigeben des Busses 28;
  • e) Zusammenführen der Register des gestörten I/O-Prozessors mit den Registern des fehlerfreien I/O-Prozessors. Alle I/O-Prozessorregister sind im lokalen Speicher 16 abgebildet, so daß die alten Werte verfügbar sind, wenn der I/O-Prozessor ausfällt;
  • f) Zurücksetzen des gestörten I/O-Prozessors;
  • g) Wenn der Ausnahmezustand ein Busfehler und kein Interrupt hoher Priorität war, und wenn der Befehl, bei dem der Busfehler auftrat, das Schreiben in ein I/O-Prozessorregister zum Ziel hatte,
  • Ändern des Inhalts des Quellregisters, um einen möglicherweise neuen Wert in dem Zielregister des I/O- Prozessors wiederzugeben, und erneutes Starten des letzten Befehls.
  • Wiederherstellungsstrategien für die I/O-Steuereinrichtung: Die Systemarchitektur der Fig. 1 sieht keine Verdoppelung der I/O-Steuereinrichtungen 30 vor. Im Betriebssystem sind Funktionen vorgesehen, wie die Spiegelabbildung der Platte, die es dem System erlauben fortzufahren, wenn eine I/O-Steuereinrichtung 30 ausfällt. Der Kern sieht auch Dienste für die Gerättreiber vor, um Hardwarefehler zu erfassen und zu verarbeiten (z. B. Busfehler, Paritätsfehler und Zugriffsfehler). Zusätzlich sind die Gerätetreiber für die Erfassung von Software- oder Firmwarefehlern verantwortlich, die zu ihren I/O-Steuereinrichtungen 30 gehören. Einige der vorgesehenen Dienste sind:
  • - Iobuscopyin und Iobuscopyout schützen die Gerätetreiber gegen Busfehler, Paritätsfehler und Zeitablauf (andernfalls müßte der Gerätetreiber diese Ereignisse erfassen). Sie vereinfachen auch die Treiberschnittstelle zu der Hardware des Prozessors.
  • - Teilnehmerdienste für zur CPU asynchrone Fehler und für Busfehler, Paritätsfehler und Zeitabläufe, wenn der Gerätetreiber die Funktionen Iobuscopyin und Iobuscopyout umgehen möchte.
  • - Wiederherstellungstechniken zum Verlassen eines Befehlsstroms, wenn eine Steuereinrichtung 30 ausfällt.
  • Wenn eine I/O-Steuereinrichtung 30 ausfällt, verliert das Betriebssystem die Resourcen, welche die Steuereinrichtung vorgesehen hat. Alle Systemaufrufe, welche diese Resourcen verwenden, werden gestört sein, außer wenn die entsprechende Einheit in Form von Software dupliziert ist. Bei einer Ausführungsform sind die Plattenlaufwerke 148 die einzigen in dem System duplizierten Peripheriegeräte. Andere Ausführungsformen können auch Kopien der Internet- oder andere Datenübertra gungseinrichtungen enthalten, so daß eine einzelne ausgefallende I/O-Steuereinrichtung 30 keinen Einfluß auf die Verfügbarkeit des Systems in einem Netz hat.
  • Hardwarefehler-Ausnahmezustände des I/O-Prozessors - angezeigt durch: Interrupts hoher Priorität des I/O-Prozessors oder Busfehler der CPU. Ein Interrupt hoher Priorität wird im allgemeinen immer dann erzeugt, wenn der I/O-Prozessor ermittelt, daß ein Fehler asynchron zu der momentanen Aktivität der CPU auftritt. Einige Beispiele dieser Art von Fehlern sind: (1) ungültiger Zugriff auf die Speicherkarte 14 oder 15 für eine Steuereinrichtung 30; (2) ungültige Parität auf den Bus 28; (3) ungültige Anforderung von einer Steuereinrichtung 30. Bei jedem dieser Beispiele wurde von der Hardware des I/O-Prozessors ein minimaler Wiederherstellungsaufwand geleistet. Es ist Aufgabe des Kerns, die Dienste anzufordern, um nach dem Fehler eine Wiederherstellung zu bewirken oder eine Komponente als fehlerhaft zu bezeichnen.
  • Wenn die CPU auf den I/O-Prozessor 26 oder 27 oder eine I/O- Steuereinrichtung 30 zugreift, kann eine Störung des I/O-Prozessors oder der Steuereinrichtung dazu führen, daß an die CPU-Karte ein fehlerhafter Status zurückgegeben wird. Wenn die CPU 11, 12 und 13 einen fehlerhaften Status empfängt, wird von dem Prozessor eine Busfehlerfalle erzeugt. Einige Beispiele für diese Arten von Fehlern sind: (1) ungültige Parität auf den Bus 28; (2) Steuereinrichtung 30 fehlt oder ist gestört; (3) I/O-Prozessor 26 oder 27 fehlt oder ist gestört.
  • Die Art, wie der Kern die Störung eines I/O-Prozessors oder einer Steuereinrichtung 30 erkennt, bestimmt den Algorithmus für die Wiederherstellung. Wenn ein Interrupt hoher Priorität erfaßt wird, muß der Kern die Art des Fehlers (I/O-Prozessor oder Steuereinrichtung) ermitteln und die fehlerhaften Komponenten offline nehmen. Jede Wiederherstellung, die über diese Aktion hinausgeht, ist fehlerspezifisch. Wenn ein Busfehler auftritt, muß der Kern immer die Zieladresse für einen Speicherbefehl in einem Register eines I/O-Prozessors untersuchen. Die Zieladresse ist die Adresse auf dem Bus, wenn der Busfehler aufgetreten ist. Dies erreicht man durch Zerlegen des Befehls, der ausgeführt wurde, als der Busfehler auftrat. Das Register des I/O-Prozessors kann durch den Wiederherstellungsprozeß modifiziert worden sein, und wenn der Schreibvorgang ohne Modifikation beendet würde, könnte er fehlerhaft einige Bits zerstören.
  • Interrupts hoher Priorität - angezeigt durch: die Bits TMRC_CAUSE_IOP0HIGH oder TMRC_CAUSE_IOP1HIGH. Ein Interrupt hoher Priorität wird erzeugt, wenn der I/O-Prozessor einen Fehler innerhalb seiner eigenen Logik oder einen Fehler in dem Weg zu oder von einer Steuereinrichtung 30 erfaßt. Reaktion:
  • Auswählen des I/O-Prozessors, der das Speichermodul unterbricht, und Aufrufen der Verarbeitungsroutine für den I/O-Prozessor.
  • Lesen des Interrupt-Grundregisters des I/O-Prozessors. Wenn ein Zeitablauf des Speichermoduls gelesen wird,
  • Verlagern aller Steuereinrichtungen, die mit dem I/O-Prozessor arbeiten, zu dem anderen, funktionierenden I/O-Prozessor.
  • Zurücksetzen des I/O-Prozessors.
  • Verlassen der Interrupt-Verarbeitungsroutine.
  • Überprüfen jedes Bits in dem Interrupt-Grundregister, und wenn es aktiv ist, Aufrufen der geeigneten Fehleverarbeitungsroutine.
  • Verlassen der Interrupt-Verarbeitungsroutine.
  • IOP_IICAUSE: Bus-Zeitablauf (Hog) der Steuereinrichtung - angezeigt durch: das Bit IOP_IICAUSE_BUSHOG. Die Steuereinrichtung 30 verfügte sehr lange über den Bus 28, und der von dem I/O-Prozessor 26 oder 27 unterhaltene Zeitgeber ist abgelaufen. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Bus-Hog-Fehler für den angegebenen Schlitz.
  • Wenn es keinen Teilnehmer gibt, oder wenn der Teilnehmer 0 zurückgibt, wird die Steuereinrichtung 30 offline gesetzt.
  • Wenn der Teilnehmer 1 zurückgibt, wird der Interrupt einfach gelöscht.
  • IOP_IICAUSE: Fehler der Ebene 2 - nicht unterstützte Anforderung - angezeigt durch: das Bit IOP_IICAUSE_LEVEL2. Die Steuereinrichtung 30 hat eine Anforderung an den I/O-Prozessor geschickt, die nicht unterstützt wird. Es könnte sich um einen ungültigen Adressmodifikator, einen A16-Masterzugriff oder eine nicht unterstützte A32-Adresse handeln. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Fehler der Ebene 2 für den angegebenen Schlitz.
  • Wenn es keine Teilnehmer gibt, oder wenn der Teilnehmer 0 zurückgibt, wird die Steuereinrichtung 30 offline gesetzt.
  • Wenn der Teilnehmer 1 zurückgibt, wird der Interrupt einfach gelöscht.
  • IOP_IICAUSE: Zugriffsvalidierungsfehler - angezeigt durch: das Bit IOP_IICAUSE AV. Eine Steuereinrichtung 30 hat versucht, auf eine physische Adresse zuzugreifen, welche hierfür von der CPU nicht vorbereitet wurde (die Steuereinrichtung besitzt nicht die richtige Lese/Schreib-Erlaubnis oder die Schlitznummer, die in den Zugriffsvalidierungs-RAM des I/O-Prozessors eingestellt ist). Reaktion:
  • Benachrichtigen aller Teilnehmer über den Zugriffsvali dierungsfehler.
  • Wenn es keine Teilnehmer gibt, oder wenn der Teilnehmer 0 zurückgibt, wird die Steuereinrichtung 30 offline genommen.
  • Wenn der Teilnehmer 1 zurückgibt, wird der Interrupt gelöscht.
  • IOP_IICAUSE: Protokollverletzung - angezeigt durch: das Bit IOP_IICAUSE_PROTO. Die Steuereinrichtung 30 hat eine ungültige Gruppe von Signalen an den I/O-Prozessor ausgegeben. Die Steuereinrichtung 30 kann ausgefallen sein. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Protokollfehler für den angegebenen Schlitz.
  • Wenn es keine Teilnehmer gibt, oder wenn der Teilnehmer 0 zurückgibt,
  • wird die Steuereinrichtung 30 offline genommen.
  • Wenn der Teilnehmer 1 zurückgibt, wird der Interrupt gelöscht.
  • IOP_IICAUSE: Paritätsfehler - Slave-Ablaufsteuereinrichtung - angezeigt durch: das Bit IOP_IICAUSE_VME_S_PAR. Der I/O-Prozessor hat eine fehlerhafte Parität von der Steuereinrichtung 30 erfaßt. In diesem Fall hat die Steuereinrichtung eine Operation ausgeführt, und die Daten-, Adreß- oder Steuerparität war falsch. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Paritätsfehler für den angegebenen Schlitz.
  • Wenn es keinen Teilnehmer gibt, oder wenn der Teilnehmer 0 zurückgibt, wird die Steuereinrichtung 30 offline genommen.
  • Wenn der Teilnehmer 1 zurückgibt, wird der Interrupt gelöscht.
  • IOP_IICAUSE: Falsche Parität auf dem I/O-Bus - angezeigt durch: die Bits IOP_IICAUSE_RIOB0PAR oder IOP_IICAUSE_RIOB1PAR. Der I/O-Prozessor 26 oder 27 erfaßt beim Zugreifen auf den globalen Speicher 14 oder 15 einen Paritätsfehler. Wenn beide I/O-Busse 24 und 25 den Fehler zeigen, ist der I/O-Prozessor gestört. Wenn nur einer der I/O-Busse den Fehler zeigt, kann das Speichermodul 14 oder 15, der I/O-Bus oder I/O-Prozessor gestört sein. Das Speichermodul wird offline gesetzt, weil es fehlerhafte Daten enthalten kann. Die Zeit zum weiteren Isolieren des Fehlers sollte später eingeplant werden. Reaktion:
  • Wenn beide I/O-Busse den Paritätsfehler zeigen, alle Steuereinrichtungen auf den anderen I/O-Prozessor umschalten.
  • Den angegebenen I/O-Prozessor offline nehmen.
  • Wenn nur ein I/O-Bus den Paritätsfehler zeigt, das angegebene Speichermodul offline nehmen.
  • Alle Teilnehmer über den Paritätsfehler des I/O-Busses benachrichtigen.
  • IOP_IICAUSE: Der I/O-Bus zeigte nach einer I/O-Prozessoranfrage einen Zeitablauf an - angezeigt durch: die Bits IOP_ IICAUSE_RIOB0TIME oder IOP_IICAUSE_RIOB1TIME. Ein Speichermodul hat auf eine I/O-Prozessoranforderung nicht reagiert. Wenn beide I/O-Busse den Zeitablauf anzeigen, ist vermutlich der I/O-Prozessor gestört. Wenn nur ein I/O-Bus den Zeitablauf anzeigt, kann das Speichermodul, der I/O-Bus, oder der I/O-Prozessor gestört sein. Das Speichermodul wird offline genommen, weil es fehlerhafte Daten enthalten kann. Die Zeit zum weiteren Isolieren des Fehlers sollte später eingeplant werden. Reaktion:
  • Wenn beide I/O-Busse den Zeitablauf zeigten, alle Steuereinrichtungen auf den anderen I/O-Prozessor umschalten.
  • Den angegebenen I/O-Prozessor offline nehmen.
  • Wenn nur ein I/O-Bus den Zeitablauf anzeigt, das angegebene Speichermodul offline nehmen.
  • Alle Teilnehmer über den Zeitablauf dem I/O-Bus benachrichtigen.
  • IOP_IICAUSE: Falscher Status von dem Speichermodul an den I/O- Prozessor zurückgegeben - angezeigt durch: die Bits IOP_IICAU- SE_MEM0 oder IOP_IICAUSE_MEM1. Ein Zugriff auf einen nicht vorhandenen globalen Speicher, das Schreiben in einen geschützten Speicher, oder eine falsche Parität bei einer Operation mit dem globalen Speicher kann bewirken, daß das Speichermodul einen falschen Zustand erzeugt und an den I/O- Prozessor übergibt. Wenn beide Speichermodule den falschen Zustand zurückgegeben haben, kann die Quelle der Anfrage, eine Steuereinrichtung 30, gestört sein. Wenn nur ein Speichermodul den falschen Zustand zurückgegeben hat, kann das Speichermodul, der I/O-Bus oder der I/O-Prozessor gestört sein. Das Speichermodul wird offline genommen, weil es fehlerhafte Daten enthalten kann. Die Zeit zum weiteren Isolieren des Fehlers sollte später eingeplant werden. Reaktion:
  • Wenn beide Speichermodule den falschen Status zurückgeben,
  • Ermitteln des fehlerhaften Zugriffs der Steuereinrichtung 30 aus dem Fehlerregister des I/O-Prozessors und der Zugriffsvalidierung.
  • Benachrichtigen aller Teilnehmer über den falschen Zustand.
  • Wenn es keine Teilnehmer gibt, oder der Teilnehmer 0 zurückgibt, angegebene Steuereinrichtung 30 offline nehmen.
  • Wenn der Teilnehmer 1 zurückgibt, nur den Interrupt löschen.
  • Wenn nur ein Speichermodul den falschen Zustand zurück gibt, angegebenes Speichermodul offline nehmen.
  • Alle Teilnehmer über falschen Zustand benachrichtigen.
  • IOP_IICAUSE: Zeitablauf bei Gewährung des I/O-Busses - angezeigt durch: das Bit IOP_IICAUSE_RIOBGTIME. Ein I/O-Bus wurde nicht gewährt, bevor das Zeitablaufintervall abgelaufen war. Als der I/O-Prozessor den I/O-Bus angefordert hat, hat das primäre Speichermodul nicht mit dem Gewährungs-Signal reagiert. Das primäre Speichermodul oder der I/O-Bus können gestört sein. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Zeitablauf auf dem I/O-Bus.
  • Backup-Speichermodul zum primären Modul machen.
  • CPU-Busfehler - Wenn die CPU auf Register in dem I/O-Prozessor 26 oder 27 oder Steuereinrichtungen 30 auf dem Bus 28 zugreift, muß der Kern darauf vorbereitet sein, einen Busfehler zu empfangen. Wenn der I/O-Prozessor einen Zeitablauf bei einem Zugriff auf eine Steuereinrichtung 30 erzeugt oder eine andere Fehlerart erfaßt, erzeugt er einen fehlerhaften Status, der an das Speichermodul 14 oder 15 zurückgegeben wird. Die Bits in dem Ursachenregister (Cause-Register) des I/O-Prozessors können dazu verwendet werden, den Fehler zu isolieren. Auch das Speichermodul kann einen Zeitablauf des I/O-Prozessors bewirken, was dazu führt, daß ein fehlerhafter Zustand an die CPU zurückgegeben wird. Um einen Busfehler zu beheben, muß der Kern nach der Änderung der Konfiguration den letzten Befehl nochmals ausführen oder die Ausführung auf irgendeinen bekannten Punkt in dem zuvor ausgeführten Befehlsstrom zurückführen. Der "bekannte Punkt" muß in demselben Strang liegen wie der Fehlerzustand, so daß Stapel- und Benutzerseiten im Neustart richtig abgebildet werden.
  • CPU_RSBx: Paritätsfehler auf dem I/O-Bus - angezeigt durch: die Bits CPU_RSBx_ANY, CPU_RSB_RIOB oder CPU_RSB_DATA. Das Speichermodul hat einen Paritätsfehler beim Lesen von Daten durch den I/O-Prozessor erfaßt. Wenn der Fehler auf beiden I/O-Bus-Schnittstellen aufgetreten ist, ist der I/O-Prozessor gestört. Wenn der Paritätsfehler auf nur einer I/O-Bus- Schnittstelle berichtet wird, ist entweder ein Speichermodul, der I/O-Bus oder einer der I/O-Prozessoren gestört. Wenigstens ein Speichermodul konnte einen richtigen Zustand erhalten, so daß kein Busfehler erzeugt wird. Stattdessen wird der Fehler über ein Interrupt berichtet. Reaktion:
  • Wenn von beiden I/O-Bus-Schnittstellen der Paritätsfehler berichtet wird,
  • alle Teilnehmer über den gestörten IOP benachrichtigen.
  • Angegebenen IOP offline nehmen.
  • Wenn der Paritätsfehler von einer I/O-Bus-Schnittstelle berichtet wird,
  • den anderen I/O-Prozessor überprüfen.
  • Wenn die Überprüfung negativ ist,
  • angegebenes Speichermodul offline nehmen.
  • Wenn die Überprüfung positiv ist,
  • alle Teilnehmer über gestörten IOP benachrichtigen.
  • Angegebenen I/O-Prozessor offline nehmen.
  • CPU_RSBx, IOP_IICAUSE, IOP_STS: Der BIM hat einen Paritätsfehler erfaßt - angezeigt durch: die Bits CPU_RSBx_ANY, CPU_RSB_RIOB, CPU_RSB_DATA, IOP_IICAUSE_XFER und IOP_STS_SYS- FALL. Der BIM 29 hat eine fehlerhafte Parität von dem I/O-Prozessor 26 oder 27 erfaßt und die Steuereinrichtung 30 von dem Bus 28 getrennt. Der tatsächliche Fehler ist ähnlich wie ein Bus-Zeitablauf, abgesehen davon, daß von dem BIM eine zusätzlicher Fehleranzeige bestätigt wird. Die Steuereinrichtung muß auf den anderen I/O-Prozessor umgeschaltet werden, um die Steuereinrichtung wiederherzustellen. Reaktion:
  • Alle Teilnehmer über den Paritätsfehler für den angegebenen Schlitz benachrichtigen.
  • Wenn es keinen Teilnehmer gibt, oder der Teilnehmer 0 zurückgibt,
  • Steuereinrichtung 30 offline nehmen.
  • Wenn der Teilnehmer 1 zurückgibt, Busfehler-Ausnahmezustand verlassen.
  • CPU_RSBx, IOP_IICAUSE: Busparitätsfehler - Master-Ablaufssteuereinrichtung - angezeigt durch: die Bits CPU_RSBx_ANY, CPU_RSB_RIOB, CPU_RSB_DATA und IOP_IICAUSE_M_PAR. Der I/O-Prozessor erfaßte eine fehlerhafte Busparität von der Steuereinrichtung 30. In diesem Fall hat die CPU "gelesen", als der Paritätsfehler auf den Datenleitungen von der Steuereinrichtung 30 erfaßt wurde. Reaktion:
  • Alle Teilnehmer über den Paritätsfehler für den angegebenen Schlitz benachrichtigen.
  • Wenn es keinen Teilnehmer gibt, oder der Teilnehmer 0 zurückgibt, Steuereinrichtung 30 offline nehmen.
  • Wenn der Teilnehmer 1 zurückgibt, Busfehler-Ausnahmezustand verlassen.
  • CPU_RSBx, IOP_IICAUSE: Zeitablauf des VME-Busses - Zeitablauf bei Steuereinrichtungszugriff - angezeigt durch: die Bits CPU_RSBx_ANY, CPU_RSB_RIOB, CPU_RSB_DATA und IOP_IICAUSE_XFER. Der I/O-Prozessor hat bei einer Anforderung einer Steuereinrichtung 30 einen Zeitablauf erfaßt, oder die Steuereinrichtung hat mit einem Busfehler geantwortet. Reaktion:
  • Benachrichtigen aller Teilnehmer über den Busfehler für den angegebenen Schlitz.
  • Wenn es keinen Teilnehmer gibt, oder der Teilnehmer 0 zurückgibt,
  • Steuereinrichtung offline nehmen.
  • Wenn der Teilnehmer 1 zurückgibt, Busfehler-Ausnahmezustand verlassen.
  • CPU_RSBx, IOP_IICAUSE: I/O-Bus-I/O-Prozessor-Auswahlparitätsfehler - angezeigt durch: die Bits CPU_RSBx_ANY, CPU_RSB_RIOB, CPU_RSB_DATA, CPU_RSB_TMO und IOP_IICAUSE_RIOBIOSEL. Der I/O- Prozessor hat eine fehlerhafte Parität in den I/O-Prozessor- Auswahlbits in dem Speichermodul erfaßt, als die CPU eine transparente Umgehungsoperation mit einer VME-Steuereinrichtung 30 versucht hat. Reaktion:
  • Lesen des Ursachenregisters des I/O-Prozessors auf dem anderen I/O-Prozessor.
  • Wenn der andere I/O-Prozessor den Paritätsfehler in den Auswahlbits gesehen hat,
  • Umschalten des primären Speichermoduls auf das Bakkup-Modul.
  • Verlassen des Busfehler-Ausnahmezustands und erneutes Versuchen des letzten Befehls.
  • Wenn der andere I/O-Prozessor den Paritätsfehler in den Auswahlbits nicht gesehen hat,
  • Umschalten der Steuereinrichtung auf den anderen I/O-Prozessor.
  • I/O-Prozessor offline nehmen.
  • Reintegration von Speicher und CPU:
  • Das fehlertolerante Rechnersystem der Fig. 1 bis 13 kann Störungen von Komponenten erfassen und isolieren, ohne daß alle Dienste des Systems verlorengehen. Die Reintegration, der Prozeß des Hinzufügens einer neuen oder gestörten Komponente (Karte) in dem System, während das System läuft, ist für den Betrieb des fehlertoleranten Systems entscheidend. Die Reintegration von CPU-Karten 11, 12 und 13 und Speicher-Karten 14 und 15 in dem System ist im folgenden erläutert, wobei die Beschreibung bei dem Zeitpunkt beginnt, unmittelbar nachdem ein Fehler isoliert wurde, und bis zu der Zeit geht, zu der eine Komponente wieder online gebracht wird.
  • Wenn eine gestörte Komponente erfaßt wird, wird die Komponente zurückgesetzt und offline genommen. Um die Komponente wieder Online zu bringen, ist eine Reintegration dieser Komponente notwendig. Die Reintegration kann automatisch ablaufen, wobei in diesem Fall das Betriebssystem versucht, die gestörte Komponente ohne Eingriff durch den Benutzer zu reintegrieren, oder sie kann manuell erfolgen und von einem Programm auf Benutzerebene angefordert werden.
  • Der Reintegrationsprozeß ist eine Folge von Schritten, die vorgenommen werden, nachdem entschieden worden ist, daß eine Komponente reintegriert werden soll. Der zum Realisieren des Reintegrationsprozesses ausgeführte Code stellt den Systemzustand wieder her, nachdem eine der folgenden Bedingungen diagnostiziert wurde: (1) eine gestörte CPU 11, 12 oder 13; (2) eine gestörte Speicherkarte 14 oder 15; oder (3) eine fehlerhafte Speicherseite. Die Diagnose wird von einem Fehlerinterrupt-Untersystem gestützt auf die Statusinformation ausgeführt, die von den einzelnen Komponenten berichtet wird, wie oben erläutert wurde. Das Fehlerinterrupt-Untersystem trifft die notwendigen Maßnahmen, um das System in einen sicheren Zustand zu bringen - dies bedeutet normalerweise, daß eine gestörte Komponente offline genommen und zurückgesetzt oder abgeschaltet wird.
  • Der Reintegrationsprozeß ist zusammengefaßt eine Folge aus Ereignissen, die auftreten, wenn eine Komponente ausfällt, und läuft im allgemeinen wie folgt ab:
  • Ein Interrupt tritt auf, der den Ausfall einer Komponente anzeigt:
  • gestörte CPU 11, 12 oder 13
  • gestörter Speicher 14 oder 15 (oder fehlerhafte Speicherseite).
  • Wenn eine CPU-Karte 11, 12 oder 13 gestört ist:
  • gestörte CPU offline nehmen und zurücksetzen
  • normalen Betrieb fortsetzen
  • wenn die offline genommene CPU anzeigt, daß sie einen Einschalt-Selbsttest erfolgreich beendet hat:
  • Zuweisen einer Seite im globalen Speicher für die LMR-Routine (LMR = local memory reintegration; Reintegration des lokalen Speichers) und Bit-Abbildung der gültigen Seite
  • Zuweisen einer Seite im globalen Speicher für die LMR-Kopierprozedur
  • Bit-Abbildung der gültigen Seiten aufbauen Zustand speichern
  • Datenstruktur aufbauen, die gemeinsam mit PROM genutzt wird
  • alle CPUs 11, 12 und 13 zurücksetzen
  • (PROM-Code bringt nach Reset Steuerung zurück)
  • Zustand wiederherstellen LMR:
  • für jede Seite in dem lokalen Speicher 16:
  • wenn in der Bit-Abbildung für eine gültige Seite das Gültig-Bit gesetzt ist
  • Seite mittels DMA auf reservierte Seite im globalen Speicher kopieren
  • erwarteten Mehrheitsauswahl-Fehler überprüfen
  • Seite mittels DMA zurück in normalen Speicher kopieren
  • Überprüfen, ob kein Fehler vorhanden Aufräumen erledigt (LMR-Routine und ihre globale Seite freigeben), mit normalem Betrieb fortfahren.
  • Wenn Speicher fehlerhaft:
  • wenn nur eine fehlerhafte Seite,
  • erneutes Abbilden der Seite
  • andernfalls Speicher offline und in Wiederherstellungszustand bringen
  • alle Speicherseite auf sich selbst kopieren wenn keine Fehler auftreten, wieder online nehmen.
  • Fig. 14 zeigt den Prozeß der Überwachung der Module auf Fehler und das Offline-Nehmen der fehlerhaften Module, und Fig. 15 zeigt den Reintegrationsprozeß. In Fig. 14 bewerten die Interrupt-Verarbeitungsroutinen, die durch den Block 171 dargestellt werden, einen Interrupt, um herauszufinden, ob er von einem Hardware-Fehler erzeugt wurde; wenn nein, werden die normalen Interrupt-Verarbeitungssequenzen gestartet, wie durch den Block 172 gezeigt, wenn jedoch ja, wird ein Fehler-Isolations-Code gestartet, wie durch Block 173 angegeben. Der Fehler-Isolations-Code kann gestartet werden, wenn ein Busfehler erfaßt wird. Der Fehler-Isolations-Code bestimmt, welche Komponente heruntergefahren wurde, wie durch die Blöcke 174 gezeigt. Wie in Fig. 15 gezeigt, durchläuft nach dem Einfügen einer neuen Komponente (wie einem Speichermodul 14 oder 15) die Komponente ihre Einschalt-Selbsttestprozedur, wie durch den Block 175 gezeigt; wenn sie nicht besteht, geht die Komponente in den heruntergefahrenen Zustand, der durch den Block 176 angezeigt wird, wenn sie jedoch besteht, geht sie in den Reintegrationszustand, der durch den Block 177 dargestellt wird. Wenn die Reintegration scheitert, geht die Komponente in den heruntergefahrenen Zustand, wenn sie erfolgreich ist, geht die Komponente in den online-Zustand 178.
  • Eine CPU ist normalerweise in dem CPU-Normalzustand, in dem die CPU online ist und denselben Befehlsstrom ausführt wie die anderen CPUs. Wenn eine Nachricht über einen Fehlerzustand einer CPU-Karte ankommt, setzt der Kern die gestörte CPU zurück und bringt die CPU in den Aus-Zustand; eine CPU kommt aus dem Reset in den CPU-Auszustand - der Reset ist entweder das Ergebnis eines Software-Resets durch Mehrheitsentscheidung der beiden verbleibenden CPUs oder eines Hardware-Resets, wenn die Karte eingesteckt wird. Die Mehrheitsauswahl-Schaltungen 100 auf der Speicherkarte 14 oder 15 ignorieren CPUs 11, 12 oder 13, die nicht online sind. Die verbleibenden CPUs setzen den normalen Betrieb fort, während die abgeschaltete CPU versucht, ihren Einschalt-Selbsttest auszuführen. Der andere gezeigte Zustand ist der CPU-reintegrierbar-Zustand, in den die zuvor zurückgesetzte CPU automatisch geht, wenn sie den Einschalt- Selbsttest besteht; diese CPU bleibt in diesem Zustand, bis eine Benutzeranfrage gemacht wird, sie zu reintegrieren.
  • Es gibt zwei Hauptschritte in der Reintegrationsprozedur für die CPU. Der erste besteht darin, alle CPUs 11, 12 und 13 neu zu synchronisieren, so daß die Offline geschaltete CPU wieder online gebracht wird und alle drei denselben Code ausführen. Der zweite Hauptschritt besteht darin, den lokalen Speicher 16 wieder herzustellen, d. h. sicherzustellen, daß der Inhalt des lokalen Speichers 16 der Offline genommenen CPU identisch mit dem Inhalt des lokalen Speichers 16 der anderen CPUs ist. Die für die erneute Synchronisierung der CPUs verwendete Schrittfolge ist:
  • 1. Kern erhebt Interruptpriorität.
  • 2. Kern speichert den gesamten Prozessorzustand in Vorbereitung des Resets.
  • 3. Kern baut Datenstruktur auf, um PROMs den gewünschten Rückgabewert des Programmzählers (PC) mitzuteilen.
  • 4. Kern setzt alle CPUs zurück.
  • 5. PROMs setzen CPU- und Coprozessorregister in einen be kannten Zustand.
  • 6. PROMs überprüfen den zurückgegebenen PC-Wert und springen auf diesen Wert.
  • 7. Kern stellt gesamten CPU-Plattenzustand wieder her.
  • Wenn eine CPU ausfällt, wird sie von dem Interrupt-Untersystem zurückgesetzt. Wenn die ausgefallene CPU ihren Einschalt- Selbsttest besteht, kann sie von den verbleibenden CPUs integriert werden. Bevor die ausgefallene CPU wieder online gebracht werden kann, muß sie mit den anderen CPUs exakt synchron sein und exakt dieselben CPU-Zyklen ausführen. Die Technik, dies zu erreichen, besteht darin, alle CPUs mittels Software zurückzusetzen. Dies gibt alle CPUs an den Rücksetzvektor zurück und ermöglicht es dem Code in den PROMs 63, die CPUs erneut zu synchronisieren, ähnlich wie bei einem Einschaltreset.
  • Die erneute Synchronisierung erfolgt, während das System arbeitet, und ist somit relativ kritisch. Der für diesen Zweck von den PROMs 63 ausgeführte Code muß zwischen einem Einschaltreset und einer neuen Synchronisierung unterscheiden, weil ein Einschaltreset alle Peripheriegeräte zurücksetzt und Speichertests durchführt, die den aktuellen Zustand des Kerns zerstören würden.
  • Der Reintegrationscode, der von den PROMs 63 ausgeführt wird, bewahrt alle Betriebssystem-Abhängigkeiten in dem Kern. Der Datenaustausch mit den PROMs erfolgt über einen Datenblock bei einer festen physischen Speicheradresse:
  • struct kernel restart { ulong kr_magic; /*magische Zahl*/ ulong kr_pc; /*Programmzähler auf Neustart*/ ulong kr_sp; /*Stapelzeiger*/ ulong kr_checksum /*Prüfsumme von oben*/ };
  • Die magische Zahl und die Prüfsumme werden von dem PROM-Code dazu verwendet, zu überprüfen, ob der zurückgegebene PC gültig ist. Die magische Zahl wird nur während einer versuchten Reintegration gesetzt. Vor dem Sprung auf den zurückgegebenen PC, bringt der von den PROMs 63 ausgeführte Code alle CPUs 11, 12 und 13 in identische Zustände, wobei alle Register der CPUs und Coprozessoren 46 genullt werden (andernfalls könnte ein Zufallswert bewirken, daß die drei CPUs während einer Mehrheitsauswahl nicht übereinstimmen).
  • Der lokale Speicher 16 wird mit Hilfe der DMA-Maschine 74 wiederhergestellt, wobei jeder Block des lokalen Speichers 16 in den globalen Speicher 14, 15 und zurückkopiert wird; dieses Zurückkopieren hat die Wirkung, daß der fehlerfreie Speicher in den fehlerhaften kopiert wird. Diese Technik stützt sich auf zwei Merkmale des Systemaufbaus; zunächst wird der Inhalt des lokalen Speichers 16 bei einem Software-Reset der CPU bewahrt, und zweitens läuft die DMA-Maschine 74 immer bis zu Ende - im Falle eines Mehrheitsauswahl-Fehlers wird der Konsenz der Daten verwendet, und am Ende der Übertragung zeigt der Status an, welche CPU die Mehrheitsauswahl nicht bestanden hat.
  • Vor der Ausführung des Schrittes zum erneuten Synchronisieren der CPUs wird die Routine, welche die DMA-Seiten kopiert, selbst in den globalen Speicher kopiert, so daß dann, wenn die CPUs 11, 12 und 13 den Resynchronisierungsschritt verlassen, sie diese Kopierroutine in dem globalen Speicher 14, 15 ausführen. Der Kern und die Datenstrukturen 143, 144 der beiden fehlerfreien CPUs sind noch intakt. Die gestörte CPU hat beliebige falsche Daten (irgendein Testmuster) in ihrem lokalen Speicher 16. Nach dem DMA-Kopieren einer Seite in den globalen Speicher wird in der Mehrheitsauswahlschaltung 100 ein Fehler auf der Statusleitung 33 erwartet, der einen Mehrheitsauswahlfehler durch die fehlerhafte CPU anzeigt und der bedeutet, daß die CPU, die neu synchronisiert wird, wieder Offline genommen werden sollte. Bei dem Kopieren aus dem globalen Speicher zurück in den lokalen Speicher 16 zeigen Fehler jedoch ein Problem an.
  • Bei Ausführungsformen, bei denen der Umfang des lokalen Speichers 16 groß ist, wird die Zeit, die zum Kopieren jeder Seite notwendig ist, unannehmbar lang. Um die Zeit für das Kopieren zu verkürzen, kann die Anzahl der gültigen Seiten reduziert werden, indem Prozesse ausgelagert werden (entweder auf Platte oder in den globalen Speicher). Dies reduziert die Anzahl der Seiten, die kopiert werden müssen, auf Kosten der Ansprechzeit des Systems vor und nach der Reintegration.
  • Wenn während der Neusynchronisierung der CPU Fehler auftreten, werden alle Interrupts von dem PROM-Code maskiert, bevor die Ausführung an den Kern zurückgeht. Wenn der vollständige Kernzustand wieder hergestellt ist, wird die Interruptpriorität gesenkt, und alle anhängigen Fehlerinterrupts werden auf die übliche Weise bedient. Während der Wiederherstellung des lokalen Speichers 16 ist es möglich, nicht maskierbare Interrupts loszuschicken; wobei hierzu die Reintegration abgebrochen wird und die gestörte CPU wieder Offline gesetzt wird.
  • Wenn Fehler des lokalen Speichers auftreten, werden die Unterschiede im Inhalt des lokalen Speichers von der Mehrheitsauswahlschaltung 100 als Abstimmfehler während des Schreibens in den globalen Speicher 14, 15 erfaßt. Wenn der Abstimmfehler auftritt, während die Schreibpuffer 52 aktiviert sind, gibt es keinen zuverlässigen Weg, eine fehlerhafte Adresse zu ermitteln, so daß der Fehler als fatal angesehen wird und die CPU- Karte zurückgesetzt wird. Wenn die fehlerhafte Adresse bekannt ist, wird versucht, nur diese Zelle wiederherzustellen; wenn die Wiederherstellung erfolgreich ist, wird die Karte zurückgesetzt.
  • Um einen Abstimmfehler zu erzwingen, wird eine Paritätsschrubber-Aufgabe verwendet. Der Paritätsschrubber läuft mit einer sehr niedrigen Priorität und schreibt alle Seiten aus dem lokalen Speicher 16 auf eine Dummy-Seite in dem globalen Speicher 14, 15. Wenn einer der drei lokalen Speicher 16 abweichende Daten enthält, wird ein Abstimmfehler erfaßt. Der Paritätsschrubber läuft mit einer Frequenz, die ausreichend ist, um die Wahrscheinlichkeit, daß alle drei CPUs jeweils unterschiedliche Daten enthalten, gegen Null gehen zu lassen. Eine ähnliche Paritätsschrubber-Aufgabe läuft im Hintergrund bei niedriger Priorität, um abweichende Daten im globalen Speicher zu erfassen.
  • Der Prozeß des Erfassens, Isolierens und Offline-Setzens eines Speichermoduls ist in Fig. 15 gezeigt. Es gibt zwei große Arten der Speicherkartenstörungen; seitenspezifische Fehler (z. B. Parität), die anzeigen, daß nur eine bestimmte Seite in dem Speicher fehlerhaft ist, und grundsätzliche Fehler, die anzeigen, daß die gesamte Karte gestört ist. Grundsätzliche Fehler setzen die Speicherkarte zurück, was eine vollständige Neuintegration erfordert, bevor die Karte wieder online gebracht werden kann. Seitenspezifische Fehler werden verarbeitet, ohne daß die Karte offline gesetzt wird.
  • Es ist wünschenswert, die Speicherkarten 14, 15 "fehlerschnell" zu machen. Damit meint man, daß dann, wenn ein Fehler in den in dem globalen Speicher gespeicherten Daten vorhanden ist, er innerhalb kurzer Zeit erfaßt wird, auch wenn während einer längeren Zeitspanne auf diese Daten nicht zugegriffen wird - d. h. latente Fehler werden absichtlich gesucht. Zwei Aufgaben auf Kernebene werden dazu verwendet, die Speicher fehlerschnell zu machen. Eine Primär/Backup-Umlagerungsaufgabe vertauscht periodisch die Rollen des primären und des Backup- Speichers 14 bzw. 15, um sicherzustellen, daß Fehler, die für einen dieser Modi spezifisch sind, erfaßt werden. Eine Pari tätsschrubber-Aufgabe stellt, wie zuvor, sicher, daß alle Seiten in dem globalen Speicher von den CPUs gelesen werden, um latente Paritätsfehler zu erzwingen.
  • Der Speicher-Normalzustand bedeutet, daß die Speicherkarte 14 oder 15 online ist und entweder als Primär- oder als Backup- Speicher arbeiten kann. Der Inhalt des RAM 104 ist identisch mit dem der anderen Speicherkarte. Die Primär/Backup- und Paritätsschrubber-Aufgaben sind aktiv (bei niedriger Priorität). Der Speicher-Offline-Zustand ist der Zustand, in den eine Speicherkarte geht, wenn sie aus einem Reset kommt; dieser Reset ist entweder die Folge eines Software-Resets, wenn die Karte in Betrieb war, oder eines Hardware-Resets, wenn die Karte gerade eingesteckt wurde. Die Primär/Backup- und Paritätsschrubber-Aufgaben werden abgeschaltet, da sie bereits einen Speicher zusammenbrechen haben lassen, und es ist wichtig, daß sie daran gehindert werden, auch den anderen zusammenbrechen zu lassen. Eine Speicherkarte wird in den Reaktivierungszustand gebracht, wenn ein Benutzer den Beginn der Reintegration anfordert. Dieser Reaktivierungszustand ist ein spezieller Nur-Schreib-Limbozustand, indem der Speicher für die Reintegration vorbereitet wird. Die Speicherkarte in dem Reaktivierungszustand nimmt dann an Schreiboperationen teil und führt Schreibfehlerüberprüfungen durch, als ob sie online wäre, sie nimmt jedoch nicht am Lesen teil und führt während des Lesens keine Fehlerprüfung durch.
  • Zu der Zeit, zu der eine Speicherkarte 14 oder 15 in den Reaktivierungszustand gebracht wird, ist ihr RAM 104 überhaupt nicht initalisiert. Bevor sie wieder online gebracht werden kann, muß der aktivierte Speicher genau dieselben Daten enthalten wie die fehlerfreie Speicherkarte. Der Reintegrationsprozeß macht zwei Durchläufe, wobei jeder dieser Durchläufe das Kopieren jeder Seite des Speichers auf sich selbst umfaßt, was den Effekt hat, daß aus dem fehlerfreien Speicher gelesen und auf beide zurückgeschrieben wird, so daß der gesamte Speicher von der fehlerfreien Karte 14 oder 15 auf die reaktivierte Karte kopiert wird. Der einzige Zweck des ersten Durchgangs ist, an jede Stelle in dem Speicher gültige Paritätsbits zu bringen, so daß der zweite Durchgang zuverlässig abläuft. Die Speicherkarte ist für die I/O-Busse 24 und 25 während dieses Schritts nicht sichtbar. Die Speicherkarte 14 oder 15, die reintegriert wird, gibt während dieses ersten Schrittes über die Leitungen 33 immer einen fehlerfreien Zustand an die CPUs zurück. Der zweite Durchgang ist der Reintegrationsschritt, währenddessen die CPUs und I/O-Busse 24 und 25 auf beide Speicherkarten 14 und 15 schreiben; Paritätsfehler geben echte Fehler an.
  • Abhängig von der Größe der globalen Speicher 14 und 15 kann der Umfang der Zeit, der zum Durchlaufen der zwei Reintegrationsdurchgänge notwendig ist, erheblich sein. Der Benutzer kann spezifizieren, wieviel der gesamten CPU-Ressourcen während einer gegebenen Zeitspanne für die Reintegrationsdurchgänge reserviert werden. Die tatsächliche Seitenkopie wird von dem Kern mit hoher Priorität und mit einer exklusiven Inhaberschaft der I/O-Busse 24 und 25 durchgeführt; die Priorität wird erhöht, um zu verhindern, daß eine Interruptroutine die Daten verändert, bevor sie zurückgeschrieben werden können, und der Zugriff auf die I/O-Busse 24 und 25 wird gesperrt, um zu verhindern, daß ein I/O-Prozessor 26, 27 die Daten ändert, bevor sie zurückgeschrieben werden können. Das Schreibschutzbit für eine gegebene Seite muß deaktiviert sein, während diese Seite kopiert wird. Das Kopieren dieser Seite läuft immer dann, wenn das System sonst untätig ist, sowie in Intevallen, die von dem Benutzer spezifiziert werden, wenn er die Grundsätze für die Reintegration der Speicher wählt; die Blockgröße kann gewählt werden, und es werden z. B. 128, 1024 oder 4096 Byte übertragen, bevor die CPU für andere Aufgaben freigegeben wird, und der Abstand zwischen den Blöcken kann gewählt wer den, so daß das Verhältnis der Reintegrationsaufgabe zu anderen Aufgaben definiert ist.
  • Wenn ein seitenspezifischer Fehler auftritt, wird eine bestimmte Anzahl Versuche gemacht, um die Seite wiederherzustellen, indem sie aus dem anderen Speicher neu geschrieben wird (gerade wie bei einer vollständigen Reaktivierung des Speichers). Bei Softwarefehlern behebt dies das Problem. Der Speicher wird zum primären Speicher gemacht, und die Seite wird geprüft, bevor ein Versuch als erfolgreich beurteilt wird. Wenn ein Versuch scheitert, wird die Speicherkarte zurückgesetzt und muß neu integriert werden.
  • Energieausfall/Selbst-Neustart:
  • Gemäß eines weiteren Merkmals dieser Erfindung umfaßt das oben beschriebene System eine Energieausfall- und Selbst-Neustartprozedur, um das System ordnungsgemäß abzuschalten, wenn die Energie ausfällt, und automatisch neuzustarten, wenn die Energie wiederhergestellt wird. Die Energieausfall/Selbst-Neustartprozedur bringt dem System der Fig. 1 eine Transparenzebene in bezug auf den Ausfall der Wechselstromversorgung. Diese Transparenz gilt für das Dateisystem, Anwendungsprozesse und Hardwareeinrichtungen. Der Zweck ist, daß das System nach dem Energieausfall den Betrieb wieder aufnimmt, als ob der Energieausfall nicht aufgetreten wäre. Die Energieausfall/- Selbst-Neustartprozedur bietet einen Mechanismus, mit dessen Hilfe das System elegant stillgelegt und neu gestartet werden kann.
  • Die Energieausfall/Selbst-Neustartprozedur ermöglicht es allen Anwendungen, ihren Zustand zu speichern, der wieder eingenommen werden kann, wenn die Energieversorgung wiederhergestellt ist. Wie oben erwähnt, benötigt die Prozedur die Batteriesicherung (Backup) 162, 163, um Systemenergie so lange vorzuse hen, wie nötig ist, um das System ordnungsgemäß herunterzufahren und den Zustand zu speichern. Gemäß ihrer Voreinstellung erkennen die Anwendungsprogramme den Energieverlust des Systems nicht. Damit die richtigen Zustände gespeichert und später bei der Wiederherstellung der Energie wiedereingenommen werden können, muß die Anwendung so konfiguriert sein, daß sie eine Benachrichtigung von der Energieausfall/Selbst-Neustartprozedur empfängt. So konfigurierte Anwendungen können den Grad der Transparenz bei einem Energieverlust erhöhen und die bereits erörterte Undurchsichtigkeit aufgrund von Zeitverzögerungen beheben.
  • In Fig. 16 ist ein Zeitverlauf einer Abschalt- und Neustartprozedur gezeigt. Die CPUs 11, 12 und 13 führen während einer Zeit 171 im normalen Betrieb einen Befehlsstrom aus, und zu einer Zeit 172 tritt eine Störung der Wechselstromversorgung auf. Diese Störung der Stromversorgung wird den CPUs 11, 12 und 13 von dem Wartungsprozessor 170 als ein Interrupt angezeigt, es wird jedoch nicht sofort mit dem Herunterfahren und Abschalten begonnen; um vorübergehende Schwingungen auszufiltern, wird vielmehr während eines Intervalles 173 eine Zeitverzögerung eingeführt, nach der von den CPUs zur Zeit 174 ein Energieausfallsignal erzeugt wird. Der Abschaltprozeß setzt sich während einer Zeitspanne 175 bis zur Beendigung zur Zeit 176 fort, und wenn während dieser Zeit die Wechselstromversorgung wiederhergestellt wird, beginnt die Neustartprozedur unmittelbar zur Zeit 176. Die Neustartprozedur setzt sich während einer Zeitspanne 177 bis zur Beendigung zur Zeit 178 fort, wie noch beschrieben wird. Während der Zeitspanne 179 wird der normale Betrieb fortgesetzt und der Befehlsstrom wie vor dem Abschalten während der Zeitspanne 171 ausgeführt.
  • Wenn der Wartungsprozessor 170 der Energieversorgungsschaltung der Fig. 8 einen Energieausfall erfaßt, wird von den CPUs 11, 12 und 13 ein Interrupt empfangen, der von dem Betriebssystem verarbeitet wird. Dies geschieht zu der Zeit 172 der "Energieausfallanzeige", und die Abschaltprozedur wird nicht vor der Zeit 174 der "Energieausfallbestätigung" ausgelöst. Um vorübergehende Energiestörungen auszuschließen, wartet die CPU während einer vorgegebenen Zeitspanne 173, bevor mit dem Abschalten fortgefahren wird. Während dieser Warteperiode 173 arbeitet das System normal weiter und führt den Befehlsstrom wie in der Zeitspanne 171 aus. Wenn die Energiestörung sich fortsetzt, bestätigt das Betriebssystem den Energieausfall und fährt mit der Abschaltprozedur fort.
  • Die Abschaltprozedur ist zeitlich begrenzt durch die Energieausfallbestätigung 174 und die Zeit, zu der die Batterien 162 und 163 nicht mehr zuverlässig arbeiten können, was bei dem obigen Beispiel 4,5 Minuten sein kann; d. h. die Abschaltzeit darf nicht länger als 4,5 Minuten sein und sollte wesentlich kürzer sein - die Dauer hängt von der Menge des flüchtigen Speichers ab, der auf den nicht flüchtigen Speicher kopiert werden muß, sowie von der Anzahl der Prozesse, die zu dieser Zeit laufen und deren Zustand gespeichert werden muß. Während dieser Abschaltzeitspanne 175 erhalten die aktiven Prozesse und Gerätetreiber eine Warnung über das bevorstehende Abschalten, so daß sie die notwendigen Vorbereitungen treffen können. Die Prozeßausführung wird dann aufgeschoben, und der Zustand der Geräte-Steuereinrichtungen wird gespeichert. Geräte, die keine Speicherung des Systemzustands erfordern (wie Anzeigen und dergleichen), werden so schnell wie möglich nach der Zeit 174 abgeschaltet, um die Energieaufnahme von den Batterieversorgungen 162 und 163 zu minimieren. Der flüchtige Speicher des Kerns, der Prozesse und Gerätetreiber wird in einem nichtflüchtigen Speicher gespeichert, z. B. auf der Platte 148. Schließlich erhalten die Batterieversorgungen 162 und 163 eine Nachricht, damit sie ausschalten.
  • Wenn die Energie wiederhergestellt wird, z. B. zur Zeit 176, löst das System eine Boot-Sequenz aus, die sich von der normalen unterscheidet. Die normale Boot-Prozedur wird automatisch gestartet und ausgeführt, bis bei einer späteren Stufe das Boot-Ladeprogramm die Energieausfallinformation in dem nichtflüchtigen Speicher überprüft, um zu ermitteln, ob es sich um eine normalen Boot-Vorgang oder um einen Neustart nach einem Energieausfall handelt. Im Falle eines Neustarts nach einem Energieausfall werden die wichtigsten Systemzustände aus dem nicht flüchtigen Speicher wiederhergestellt, anstatt eine neue Kopie des Betriebssystems zu laden. Prozesse und Gerätetreiber dürfen alle Prozeduren ausführen, die notwendig sind, um ihre speziellen Anwendungen oder Operationen neu zu starten.
  • Der "wesentliche Systemzustand" oder das "wesentliche Systembild" (die Begriffe werden austauschbar verwendet) besteht aus dem flüchtigen Zustand des Kerns, der Benutzerprozesse und der Hardwareeinrichtungen. Der wesentliche Systemzustand wird während des Abschaltens bei Energieausfall auf die Platte 148 geschrieben. Genauer gesagt wird ein Teil des wesentlichen Systemzustandes auf die Platte geschrieben. Der Rest des wesentlichen Systemzustandes befindet sich bereits auf der Platte und muß als solcher nicht auf diese übertragen werden. Die Umlagerungsdatei enthält z. B. Teile des ausführbaren Bildes der Prozesse, die ausgelagert wurden; und auch einige Dateipuffer für offene Dateien wurden bereits auf die Platte geräumt.
  • Das Auftreten eines Abschalt/Neustartzyklus ist für viele Anwendungen transparent, für andere jedoch nicht. Wenn z. B. zur Zeit des Abschaltens Datenübertragungssitzungen eingerichtet sind, ist es sehr unwahrscheinlich, daß die Sitzungen den Abschalt/Neustartzyklus überleben. Die Sitzungen werden wahrscheinlich wegen Zeitüberschreitung beendet und müssen neu eingerichtet werden. Die Datenübertragungs-Steuereinrichtung kann eine höhere Softwareebene benötigen, um die Datenübertra gungssitzung wiedereinzurichten. Die Energieausfall/Selbst- Neustartprozedour gibt den höheren Ebenen der Software die Möglichkeit, auch diese Ebene der Wiederherstellung zu erreichen. Datenübertragungsprotokolle haben einen gewissen Grad an Robustheit, um den Verlust von Leitwegen, Paketen etc. zu verarbeiten. Die Anwendung muß diese Robustheit vielleicht noch erhöhen, wenn der Abschalt/Neustartzyklus für ihren Klienten transparent sein soll. Anwendungen, die auf irgendeine Weise über mehrere Prozessoren verteilt sind, müssen diese Energieausfall/Selbst-Neustartprozedur ausnutzen, um die Transparenz für ihre Benutzer vorzusehen.
  • Das Auftreten eines Abschalt/Neustartzyklus kann selbst für eine Einrichtung, die direkt mit der lokalen Maschine verbunden ist, nicht transparent sein. Bandeinheiten, die zurückspulen, können z. B. unterbrochen werden. Der Prozeß, der diese Rückspuloperation gefordert hat, würde dann einen Fehler empfangen, der anzeigt, daß die Operation gestört wurde. Im allgemeinen ist der Abschalt/Neustartzyklus für all die Einrichtungen (oder Prozesse, welche diese Einrichtung verwenden) nicht transparent, die während des Zeitintervalles 175 der Abschaltprozedur nicht eingeschaltet und verfügbar bleiben.
  • Dateisystemzustand:
  • Von dem stark Cachespeicher/Rückkopier-orientierten Dateisystem von UNIX würde man normalerweise erwarten, daß beim Abschalten des Systems aufgrund eines Energieausfalles oder aus anderem Grund die Unversehrtheit der Daten nicht gewährleistet ist. Ein Merkmal der Energieausfall/Selbst-Neustartprozedur besteht darin, diese charakteristische Schwäche zu minimieren, indem die Daten in den Speichern (im lokalen Speicher 16 und im globalen Speicher 14, 15) mit dem entsprechenden Bild auf der Platte 148 synchronisiert werden.
  • Die Energieausfall/Selbst-Neustartprozedur erreicht diese Aufgabe auf zwei Arten. Wenn der Energieausfall zur Zeit 174 bestätigt wird, werden während der Zeit 175 der Energieausfall/ Abschaltprozedur keine weiteren verzögerten Schreibvorgänge zugelassen, und selbstverständlich werden alle dann anhängigen Schreibvorgänge für die normale Betriebsperiode 171 ausgeführt. Ein "verzögerter" Schreibvorgang ist ein Schreibvorgang auf Platte, der von einer Anwendung ausgelöst wird, die während einer unbestimmten Zeitspanne in dem Speicher gehalten wird, um den Anschein eines Dateisystems mit höherer Leistung zu vermitteln, als sie tatsächlich vorhanden ist. Da alle Anwendungs-Schreibvorgänge zwangsweise auf die Platte gehen, bleibt das System synchronisiert.
  • Auch zu der Zeit 174 der Energieausfallbestätigung wird das Dateisystem mit der Platte synchronisiert, indem sofort alle anhängigen verzögerten Schreiboperationen ausgegeben werden. Das Dateisystem bleibt also synchronisiert, während es sanft stillgelegt wird, und die Geräte und Prozesse werden während der Periode 175 benachrichtigt.
  • Die Interaktion zwischen dem Dateisystem und der Energieausfall/Selbst-Neustartprozedur umfaßt die Systempuffer mit modifiziertem (dirty) Dateiinhalt. Die Energieausfall/Selbst- Neustartprozedur gewährleistet die Unversehrtheit des Dateisystems unabhängig von den Einstellungen der Kernparameter, die von dem Systemadministrator gewählt werden.
  • Während der Abschaltprozedur werden die Dateisystempuffer mit dem modifizierten (dirty) Inhalt in das Dateisystem gerettet. Tatsächlich wird zur Zeit der Energieausfallbestätigung 174 eine Routine aufgerufen, um die Dateisystemsynchronisierung zu beginnen. Nach diesem Aufruf werden alle verzögerten Schreibvorgänge als asynchrone Schreibvorgänge durchgeführt. Danach wird die Abschaltprozedur verzögert, um sicherzustellen, daß alle modifizierten (dirty) Blöcke ausgeräumt wurden, bevor das wesentliche Systembild geschrieben wird. Ein "verzögerter Schreibvorgang" ist ein Schreibvorgang, bei dem die Blöcke nicht auf die Platte geschrieben werden, bis das Dateisystem nicht einen leeren Block benötigt und diesen modifizierten Block wählt. Es werden von dem Betriebssystem auch periodische Synchronisierungen des Dateisystems durchgeführt, um alle modifizierten Blöcke auszuräumen. Ein "asynchroner Schreibvorgang" ist einer, bei dem der Schreibbefehl unmittelbar an den Plattentreiber ausgegeben wird. Der Grund für den Begriff "asynchron" ist, daß das Betriebssystem die Aufforderung ausgibt, jedoch nicht auf ihre Beendigung wartet.
  • Die Zeit, die man zum Durchführen dieser Synchronisierung benötigt, könnte länger dauern als durch die Batterien 162 oder 163 unterstützt wird, eine Situation, die vermieden werden sollte. Zu diesem Zweck verwendet der Plattentreiber einen Kopf-Ablaufplanalgorithmus, um sicherzustellen, daß die Suchzeit zwischen den Puffern auf einer gegebenen Platte nicht in die Nähe der mittleren Suchzeit für diese Platte kommt. Dies erreicht man z. B. durch Anordnen der Pufferschreibvorgänge in der Reihenfolge ihrer Position auf der Platte.
  • Prozeßzustand:
  • Die Energieausfall/Selbst-Neustartprozedur benachrichtigt Prozesse über das Auftreten und den Fortschritt des Abschaltens bei Energieausfall über UNIXTM-Signale. Insbesondere wird das Signal SIGPWR für diesen Zweck verwendet. Die Energieausfall/Selbst-Neustartprozedur hat dieses Signalkonzept erweitert, so daß es einen "Code" enthält, der an den Prozeß übergeben wird. Normalerweise empfangen UNIX-Prozesse nur eine Signalnummer, die das spezielle Signal bezeichnet, das übergeben wird.
  • In Fig. 16 können die UNIX-Prozesse, die während der Zeit 171 ablaufen, auf eine von zwei Weisen konfiguriert werden, d. h. als "Abbruch bei Energieausfall" ("kill on powerfail") oder nicht. Jeder Prozeß hat ein "Abbruch bei Energieausfall"-Attribut, das, wenn es gesetzt ist, die Signale modifiziert, die während der Periode 175 des Abschaltprozesses bei Energieausfall gesendet werden. Ein als "Abbruch bei Energieausfall" markierter Prozeß bedient das Abschalten nicht, obwohl ein solcher Prozeß Aufräumoperationen durchführen kann, bevor er endet.
  • Zusätzlich sind Prozesse so konfiguriert, daß sie das Signal SIGPWR "ignorieren". Solche Prozesse werden nicht merken, daß eine Energiestörung aufgetreten ist, außer wenn das Attribut "Abbruch bei Energieausfall" gesetzt ist.
  • Nachdem der Energieausfall zur Zeit 174 bestätigt wurde, wird zur Zeit 181 an alle Prozesse ein Signal gesendet. Die Prozesse, die als "Abbruch bei Energieausfall" markiert sind, empfangen das Signal SIGTERM mit einem Code PFQUIESCE. Andere Prozesse erhalten ein Signal SIGPWR mit einem Code PFQUIESCE. Einige Prozesse könnten diese Signale ignorieren. Man beachte, daß Prozesse, welche diese Signale nicht ignorieren, Aufräumfunktionen ausführen können, die für die spezielle vorliegende Anwendung nötig sein können.
  • Nach einem vom Administrator konfigurierbaren Intervall wird den Prozessen, die als "Abbruch bei Energieausfall" markiert sind, zur Zeit 132 das Signal SIGKILL gesendet, das nicht ignoriert werden kann. Bei allen anderen Prozessen wird die Ausführung unterbrochen.
  • Das Speicherbild aller Prozesse wird nun während einer Zeit 183 in den nicht flüchtigen Speicher gerettet. Bei bestimmten Ausführungsformen der Energieausfall/Selbst-Neustartprozedur ist dieser nicht-flüchtige Speicher die Platte 148. Das Speicherbild in dem lokalen oder globalen Speicher wird also auf die Platte 148 geschrieben. Bei anderen Ausführungsformen können Speicherkarten 14 oder 15 oder Hilfsspeicherkarten, die nicht gezeigt sind, eine Backup-Batterie haben und somit den nicht flüchtigen Speicher bilden.
  • Bei der Wiederherstellung der Energie, nach der Zeit 176 in dem Neustartprozeß, wird das Speicherbild der Prozesse während der Zeitspanne 177 wiederhergestellt. Die Prozesse empfangen ein Signal SIGPWR mit einem Code PFRESTART, der angibt, daß die Wiederherstellung nach dem Energieausfall abgeschlossen ist. Wenn der Prozeß Information neustarten oder wiederherstellen muß, die während der Abschaltprozedur archiviert wurde, kann er dies tun.
  • Ein Prozeß kann also mit der Energieausfall/Selbst-Neustartprozedur selektiv in Wechselwirkung treten. Gemäß Voreinstellung bemerken die Prozesse nicht, daß ein Abschalt/Neustartzyklus aufgetreten ist; ein Prozeß kann sich jedoch bewußt machen, daß abgeschaltet und/oder neugestartet wurde. Wenn hier von Prozessen gesprochen wird, sind im allgemeinen Benutzerprozesse und nicht Systemprozesse gemeint. Systemprozesse erhalten keine spezielle Energieausfall/Selbst-Neustartverarbeitung, mit der Ausnahme von Init, das während des Abschaltens oder des Neustarts das Shellskript /etc/pfshutdown oder /etc/- pfrestart bei Empfang des Signals SIGPWR ausführt. Keine anderen Systemprozesse empfangen Signale.
  • Der Systemadministrator kann bestimmte Prozesse auswählen, die während des Abschaltens abgebrochen werden, unabhängig davon, ob "bei Neustart wiederaufnehmen" oder "bei Neustart neu booten" gewählt wurde. Wenn "bei Neustart neu booten" gewählt wurde, werden gemäß Voreinstellung alle Prozesse als "Abbruch bei Energieausfall" markiert. Die Prozesse gehen während des Abschaltens abhängig von der Einstellung der Eigenschaft "Abbruch bei Energieausfall" durch einen von zwei logischen Wegen. Nachdem der Energieausfall bestätigt wurde, empfangen die Prozesse, die als "Abbruch bei Energieausfall" markiert wurden, das Signal SIGTERM. Die so nicht markierten Prozesse empfangen das Signal SIGPWR. Die Signalverarbeitungseinrichtungen nehmen drei Parameter an: die Signalnummer, einen Code und einen Zeiger auf einer Sig-Kontextstruktur.
  • Die Prozesse, die nicht so markiert sind, daß sie bei Energieausfall abgebrochen werden, werden zuerst berücksichtigt; diese Prozesse empfangen das Signal SIGPWR und werden nicht als "Abbruch bei Energieausfall" markiert. Die Verarbeitungseinrichtung für das Signal SIGPWR sollte an diesem Punkt alle prozeßspezifischen Prozeduren ausführen. Der Code wird auf PFQUIESCE eingestellt, um diese Ausgabe des Signals SIGPWR von der während der Neustartprozedur zu unterscheiden. Wenn der Prozeß eine prozeßspezifische Prozedur beendet hat, sollte die weitere Ausführung unterbrochen werden, indem eine Pause-Funktion aufgerufen wird. Dieser Prozeß kommt aus der Pause zurück und nimmt dann die Ausführung wieder auf, wenn das Signal SIGPWR mit einem Code PFRESTART während der Neustartprozedur ausgegeben wird.
  • Nachdem die SIGPWR-Verarbeitungseinrichtungen ihre Funktionen ausgeführt haben, werden alle Prozesse, die für die Ausführung bereit sind, aufgeschoben, indem sie aus der Warteschlange entfernt werden. (Tatsächlich können die Prozesse in der Warteschlange bleiben, aber die Ablaufplansteuerung setzt keine Prozesse mehr für die weitere Ausführung an). Prozesse, die bereits das Warten auf ein Ereignis aufgeschoben haben, sind nicht mehr im Bereitzustand und werden selbstverständlich auch nicht mehr für die Ausführung berücksichtigt. Zwangsweise aufgeschobene Prozesse erkennen nicht den Mechanismus, der von dem Kern verwendet wird, um ihre Ausführung aufzuschieben oder wiederaufzunehmen, genauso wie Prozesse Taktunterbrechungen nicht erkennen können, die während ihrer Ausführung auftreten.
  • Im folgenden werden Prozesse betrachtet, die als "Abbruch bei Energieausfall" markiert sind, d. h. die Prozesse, die das Signal SIGTERM mit einem Code PFQUIESCE empfangen, die als "Abbruch bei Energieausfall" markiert sind. Der Code PFQUIESCE zeigt dem Prozeß an, daß sich die Signalübertragung auf einen Energieausfall bezieht und nicht auf eine andere Quelle. Das Einfachste, was ein solcher Prozeß tun sollte, ist aufräumen und abschließen. Nachdem die SIGTERM-Verarbeitungseinrichtungen ihre Funktionen ausgeführt haben, wird das Signal SIGKILL an all diese Prozesse ausgegeben.
  • Es werden nun Prozesse während der Neustartprozedur 177 betrachtet, wobei hier nur der Typ "bei Neustart wiederaufnehmen" anwendbar ist. Wenn "bei Neustart neu booten" gewählt war, existieren die Prozesse, die während des Abschaltens vorhanden waren, natürlich nicht mehr, weil das System mit einer neuen Kopie des Betriebssystems neu gebootet wird.
  • Während der Neustartprozedur empfangen auch alle Prozesse das Signal SIGPWR. Das Skript /etc/pfrestart wird während einer durch den Administrator konfigurierbaren Zeitspanne ausgeführt, bevor das Signal SIGPWR an alle Benutzerprozesse ausgegeben wird. Der Mechanismus zum Ausführen des Skripts /etc/- pfrestart ist die Ausgabe von SIGPWR mit einem Code PFRESTART. Die SIGPWR-Verarbeitungsroutine empfängt einen Code PFRESTART, der dazu verwendet werden kann, zwischen dem Signal SIGPWR zu unterscheiden, das beim Abschalten ausgegeben wurde und das beim Neustart ausgegeben wurde. Beim Neustart kann die Verarbeitungseinrichtung Funktionen ausführen, die für die vorliegende Anwendung spezifisch sind. Das kann das Auffrischen des Bildschirms oder das Wiederaufrollen von Datenbanktransaktionen umfassen, die gerade abliefen.
  • Initiatialisierungsprozeß-Verarbeitung:
  • Der UNIX-Prozeß "init" erhält während der Energieausfall- und Abschaltprozeduren eine besondere Verarbeitung. Init ist so konfiguriert, daß er die Datei "/etc/inittab" scannt und POWERFAIL oder POWERWAIT-Funktionen ausführt, wenn er das Signal SIGPWR (unmittelbar vor der Zeit 181) mit den Codes PFQUIESCE und PFRESTART empfängt. Auf diese Weise kann der Administrator Shellskripts konfigurieren, die bei der Zuschneidung des Abschaltens oder Neustartens auf die jeweils vorliegenden Anwendungen helfen.
  • Der Init-Prozeß empfängt das Signal SIGPWR in einem von dem Administrator konfigurierbaren Intervall vor allen anderen Prozessen, sei es während der Abschaltprozedur oder während der Neustartprozedur. Dadurch können die Shellskripts Funktionen ausführen, die durch die zusätzliche Aufräumaktivität, die aufgerufen wird, wenn anderen Prozesse die Signale empfangen, ungünstig beeinflußt werden können.
  • Gerätezustand:
  • Geräte, wie die I/O-Prozessoren 26 und 27, erhalten ebenso wie die Prozesse Gelegenheit, ihren Zustand zu retten und wiederherzustellen. Der Gerätezustand wird ebenso wie der Prozeßzustand in dem flüchtigen Speicher 148 gespeichert, um ihn nach dem Energieausfall während des Neustartens wiederherzustellen. Geräte empfangen jedoch detaillierte Benachrichtigungen über den Fortschritt des Abschaltens oder des Neustarts. Jedes Gerät wird mit einer "Energieausfallroutine" konfiguriert. Diese Routine wird mit verschiedenen Codes aufgerufen, welche die Funktionen angeben, die ausgeführt werden sollen.
  • Zu der Zeit 174 der Energieausfallbestätigung wird die Energieausfallroutine mit einem Code PFCONFIRM der Fig. 16 auf gerufen. Das Gerät führt alle notwendigen Funktionen durch.
  • Nachdem die Prozeßausführung angehalten oder die mit "Abbruch bei Energieausfall" markierten Prozesse abgebrochen sind, werden die Geräte mit einem Code PFHALT zur Zeit 184 aufgerufen. Dieser Code gibt an, daß die Prozeßausführung unterbrochen wurde. Insbesondere können die Plattenlaufwerke angeben, daß keine Lesevorgänge mehr verarbeitet werden müssen. Alle diese Vorgänge, die gerade in Arbeit sind, können in eine Warteschlange gelegt werden, um sie während der Neustartprozedur wiederaufzunehmen.
  • Die Geräte-Energieausfallroutine wird mit einem Code PFQUIESCE zur Zeit 185 aufgerufen. Das Gerät gibt aus diesem Aufruf der Routine die Größe des zu rettenden Zustandes in Byte wieder. Die Energieausfall/Selbst-Neustartprozedur stellt dann sicher, daß in dem nicht flüchtigen Speicher Platz reserviert wird, der der zu speichernden Größe für dieses spezielle Gerät entspricht.
  • Der nächste Aufruf erfolgt mit einem Code PFDUMP und einem Argument, das gleich der Adresse des reservierten Sicherstellungsbereichs ist, der im vorhergehenden Absatz beschrieben wurde. Das Gerät ist dafür verantwortlich, seine Statusinformation in den Sicherstellungsbereich umzukopieren. Die Energieausfall/Selbst-Neustartprozedur stellt dann die Sicherheit dieser Daten sicher.
  • Wenn die Energie wiederhergestellt wird, empfangen die Gerätetreiber die Standardgeräte-Identifikationsaufrufe, wie während der normalen Bootsequenz. Die Energieausfall/Selbst-Neustartprozedur verwendet die von dieser Routine empfangene Information, um zu überprüfen, daß die Hardwaregerätekonfiguration während des Energieausfallintervalles nicht modifiziert wurde.
  • Die Geräte-Energieausfallroutinen werden mit einem Code PFINIT aufgerufen. Dieser Aufruf soll die Plattenlaufwerke informieren, daß sie alle notwendigen Initialisierungen ausführen sollen, um den Teil des wesentlichen Systemzustandes wiederherzustellen, der auf der Platte gespeichert ist.
  • Dann wird sequentiell für jedes Gerät der nicht-flüchtige, gespeicherte Gerätezustand in einen Speicherpuffer gebracht, und die Geräte-Energieausfallroutine wird mit einem Code PFRESTORE und einem Argument aufgerufen, das der Adresse des Speicherpuffers entspricht.
  • Schließlich wird die Geräte-Energieausfallroutine mit einem Argument PFRESTART aufgerufen, das anzeigt, daß das Gerät seinen normalen Betrieb aufnehmen kann.
  • Die Gerätetreiber können also wie die Prozesse Zustände haben, die während des Abschalt/Neustart-Zyklus gerettet werden müssen. Dies ist noch wahrscheinlicher bei intelligenten Steuereinrichtungen. Wie den Prozessen erlaubt die Energieausfall/Selbst-Neustartprozedur jeder Steuereinrichtung, auf die Abschalt/Neustartprozedur selektiv zu reagieren.
  • Die Gerätetreiber, welche die physischen Geräte steuern, müssen eine Energieausfallroutine aufweisen. Die Datenübertragung zwischen dem Kern und den Gerätetreibern in bezug auf das Abschaltenden Neustart erfolgt durch Aufrufen dieser Routine. Um eine optimale Zeitplanung für das Schreiben in den nichtflüchtigen Speicher vorzusehen, werden Anstrengungen unternommen, Gerätetreiber für das Ausräumen des Dateisystem-Pufferpools, Retten des Kernspeichers und Retten der Gerätezustände zu installieren.
  • Zu der Zeit 174 der Bestätigung des Energieausfalls wird die Energieausfallroutine der Treiber jedes der Geräte mit einem Befehlsparameter PFCONFIRM aufgerufen. Dies dient dazu, den Treibern anzuzeigen, daß sie sich auf das Abschalten vorbereiten müssen. Eine intelligente Netzsteuereinrichtung (die einen Code für die Sitzungsschicht enthält) kann diese Anzeige z. B. dazu verwenden, ausstehende Verbindungen abzubrechen oder halb-ordnungsgemäß zu beenden, während neue Verbindungen nicht mehr angenommen werden.
  • Wenn die gesamte Prozeßausführung aufgeschoben ist, wird ein zweiter Aufruf an die Energieausfallroutine des Treibers jedes Gerätes mit einem Befehlsparameter PFHALT zu einer Zeit 184 gerichtet. Der Zweck dieses Aufrufs ist, den Plattentreibern anzuzeigen, daß keine weiteren Lesevorgänge vorgenommen werden. Alle anhängigen Lesevorgänge sollten bis zur Neustartprozedur unterbrochen werden. PFHALT hat nur für die Plattentreiber eine Bedeutung, alle anderen Treiber werden es zwar auch empfangen, müssen dann aber keine Funktionen ausführen.
  • Dann wird zu der Zeit 185 ein dritter Aufruf an die Geräte- Energieausfallroutine mit einem Parameter PFQUIESCE gemacht. Der Zweck dieses Aufrufes ist, anzuzeigen, daß alle Aufräumfunktionen, die von dem Gerät ausgeführt werden, beendet werden sollten und daß keine weiteren derartigen Funktionen versucht werden sollten. Die Geräte sollten insbesondere nicht den Kern/Benutzer-Speicher modifizieren, abgesehen von dem Datenabwurf (Dump), der im nächsten Absatz beschrieben ist. Es sollten z. B. keine Aufrufe an kern malloc oder kern free gerichtet werden, nachdem PFQUIESCE ausgegeben wurde. Der Grund hierfür ist, daß das wesentliche Systembild in PFDEV, ein nicht-flüchtiger Speicherbereich für den wesentlichen Systemstatus, geschrieben wird. Der nach diesem Aufruf zurückgegebene Wert ist eine Angabe der Größe des Sicherstellungsbereichs, der für dieses Gerät zugewiesen werden sollte, um den wesentlichen Systemzustand in PFDEV zu retten. Wenn der zurückgegebene Wert Null ist, bedeutet dies, daß kein Sicherstellungsbereich notwendig ist.
  • Der I/O-Prozessorzustand wird an diesem Punkt gespeichert, so daß der Gerätezustand, der in dem Zugriffsvalidations-RAM (AV- RAM; Access validation ram) dargestellt wird, richtig erfaßt wird. Dieser AVRAM-Zustand wird als ein Teil des wesentlichen Systemzustandes in PFDEV geschrieben.
  • Wenn schließlich von dem Treiber für das Gerät ein Sicherstellungsbereich angefordert wird, wird ein vierter Aufruf an die Energieausfallroutine mit einem Befehlsparameter PFDUMP und einem Argument-Parameter gerichtet, der die Adresse des Sicherstellungsbereichs enthält, in dem der Gerätezustand (gemäß dem PFQUIESCE-Aufruf) abgelegt werden soll. Der Gerätetreiber ist dann dafür verantwortlich, seine Statusinformation in den Sicherstellungsbereich zu kopieren, bevor er aus diesem Aufruf zurückkehrt. Das Format der Information in dem Sicherstellungsbereich ist gerätespezifisch und wird nicht von dem Kern definiert, anders als die Verwaltungsinformation, die von dem Kern verwaltet wird, um diesen Bereich zu identifizieren. Die Gerätetreiber, die keine Energieausfall-Partitionen erhalten, die von PFDEV zugewiesen wurden, sollten ihre Geräte nach der Beendigung des PFDUMP-Aufrufs herunterfahren.
  • Der Plattentreiber wird dazu verwendet, den Gerätezustand in PFDEV abzulegen. Die Gerätetreiber können daher nicht ihren eigenen Zustand übergeben, weil dieser Zustand von der Platte gelesen und wiederhergestellt werden müßte, damit die Platte anfänglich gelesen werden kann. Aufgrund dieser kritischen Rolle müssen die Plattentreiber während des Abschaltens und auch des Neustartens besonders behandelt werden.
  • Bestimmte Geräte können spezielle Fälle für die zwei möglichen Arten der Abschaltprozedur vorsehen wollen, nämlich die Fälle "bei Neustart wiederaufnehmen" oder "bei Neustart neu booten". Wenn die Art des Neustarts "bei Neustart neu booten" ist, werden die ausgelagerten Gerätezustände nicht tatsächlich auf die Platte geschrieben, weil beim Neu-Booten diese Statusinformation nicht notwendig sein wird. Der Gerätetreiber kennt diese Tatsache jedoch nicht. Das heißt, die Wechselwirkung zwischen der Neustartprozedur und dem Gerätetreiber ist bei "bei Neustart neu booten" und bei "bei Neustart wiederaufnehmen" identisch. Ein Gerätetreiber kann die Art des Abschaltens im Lauf der Untersuchung seiner Datenstruktur ermitteln, auf die in dem Adreßraum des Gerätetreibers zugegriffen werden kann. Die Werte der Marken (flags), welche die aktuelle Einstellung der Kern-Energieausfall/Selbst-Neustartprozedur-Schalter angeben, sowie die numerischen Parameter sind in einer Datei "sys/rolex/pwrfail.h" enthalten.
  • Im folgenden werden die Gerätetreiber während des Neustarts betrachtet. Der Gerätezustand wird nur für solche Geräte wiederhergestellt, die mit "bei Neustart wiederaufnehmen" bezeichnet sind. Wenn "bei Neustart neu booten" gewählt wurde, wird der Gerätezustand, der vor dem Abschalten existierte, selbstverständlich nicht wiederhergestellt, weil das System mit einer neuen Kopie des Betriebssystems neu gebootet wird.
  • Zuerst wird der Zustand des I/O-Prozessors wiederhergestellt. Dieser Zustand umfaßt die Information des Zugriffs-Validierungs-RAMs, welche einen Teil des Gerätezustands darstellt. Dann wird die Geräteidentifikationsroutine für jedes Gerät aufgerufen. Dann wird die Energieausfallroutine des Treibers jedes Gerätes mit einem Befehl PFINIT aufgerufen. Dieser Aufruf ist ausschließlich an den Plattentreiber für die Platte 148 gerichtet. Alle anderen Treiber können ihn ignorieren. An diesem Punkt intialisiert der Plattentreiber sich selbst, so daß der Gerätezustand für die anderen Gerätetreiber aus der Energieausfall-Abwurfeinrichtung PFDEV (= powerfail dump device) gelesen werden kann, auf der er bei dem Energieausfall abgelegt wurde. Als nächstes wird die Energieausfallroutine des Treibers für jedes Gerät mit einem Befehl PFRESTORE und einem Argument aufgerufen, das die Adresse des Sicherstellungsbereichs enthält, der während des Abschaltens dem Gerät zugewiesen wurde. Wenn für dieses Gerät von dem Treiber kein Sicherstellungsbereich angefordert wurde, ist das Argument NULL. Dieser Aufruf an die Energieausfallroutine besteht darin, alle Statusinformationen neu zu laden.
  • Es ist wichtig, daß die Gerätetreiber nur den Zustand wieder erfassen, der während des Abschaltens gespeichert wurde, wenn der Befehl PFRESTORE verwendet wird. Der Gerätetreiber darf keine Statusveränderungen über den geretteten Zustand hinaus vornehmen, bis der Befehl PFRESTART ausgegeben wird. Nachfolgende Neustart/Abschalt/Neustart-Zyklen können erfordern, daß der Befehl PFRESTORE mehrmals ausgegeben wird, und diese Operation muß daher mehrmals ausführbar (idempotent) sein. Wenn alle Geräte wiederhergestellt wurden, wird die Energieausfallroutine erneut mit dem Argument PFRESTART aufgerufen. Man beachte, daß die Energieausfallroutine mit dem Befehl PFRESTART und nicht die Init-Routine der Gerätetreiber während dieser Neustartprozedur aufgerufen wird. An diesem Punkt können die Geräte ihren normalen Betrieb wieder aufnehmen und Statusveränderungen über den Zustand hinaus vornehmen, der bei der Abschaltprozedur gespeichert wurde.
  • Bei Geräten, die während des Abschaltens keinen Zustand retten müssen, kann der Aufruf PFRESTORE an die Energieausfallroutine ignoriert werden. Der Aufruf PFRESTORE der Energieausfallroutine kann dazu verwendet werden, die Geräte neu zu initialisieren, damit sie ihren Betrieb wieder aufnehmen. Auf jeden Fall ist es wichtig, daß Geräteoperationen, welche Statusveränderungen auf eine nicht-idempotente Weise verursachen, nach PFRESTART und nicht vor dieser Zeit ausgeführt wer den.
  • Da der Plattentreiber dazu verwendet wird, den geretteten Gerätezustand aus PFDEV zu lesen, kann der Plattentreiber seinen eigenen Zustand nicht retten oder wiederherstellen. Wenn der Aufruf PFRESTORE erfolgt, muß der Plattentreiber eine Initialisierung ausführen, die erforderlich ist, damit PFDEV gelesen und geschrieben werden kann. Dem Plattentreiber zeigt der Aufruf PFRESTORE nur an, daß die Lesevorgänge, die bei PFHALT unterbrochen wurden, nun fortgesetzt werden können.
  • Es ist wichtig zu beachten, daß die Treiber zwei Arten von Neustarts mittels der Energieausfall/Selbst-Neustartprozedur erfahren können. Die erste Art ist, daß das System tatsächlich die Energie verliert. Alle Steuereinrichtungen und Geräte werden zurückgesetzt worden sein, bevor die Neustartprozedur läuft. Die zweite Art erfolgt entweder bei einem zwangsweisen Abschalten oder bei einem vorübergehenden Energieausfall, wenn die Netzspannung während der Abschaltprozedur wiederhergestellt wird. Diese zweite Art wird als "Durchstarten" bezeichnet. In diesem Fall werden die Platten, Energieausfall-Partitionen enthalten, die PFDEV zugewiesen sind, nicht zurückgesetzt. Der Aufruf an die Geräte-Energieausfallroutine mit dem Argument PFINIT kann dazu verwendet werden, die Geräte in Vorbereitung für den Neustart nach Energieausfall richtig zurückzusetzen.
  • Atomizität und Idempotenz:
  • Die Eigenschaften Atomanzahl und Idempotenz betreffen die Funktionen, die ausgeführt werden, wenn mitten beim Abschalten die Energie wiederhergestellt wird, oder wenn während der Neustartprozedur die Energie wieder ausfällt.
  • Die Abschalt- und Neustartprozeduren dauern so lange (zwischen den Zeitspannen 175 und 177 der Fig. 16), daß es möglich ist, daß sie einander überlappen können; die Energie kann z. B. wiederhergestellt sein, bevor die Abschaltprozedur beendet ist, obwohl die Verzögerung 173 eingeführt wird, um kurze vorübergehende Schwingungen bei der Energieversorgung auszuschließen. Wenn die Abschaltprozedur während der Zeitspanne 175 nicht beendet ist, bevor das System wieder Energie empfängt, läuft die Abschaltprozedur bis zum Ende ab. Die Neustartprozedur wird dann sofort zur Zeit 176 unabhängig von irgendwelchen Eingriffen der Bedienungsperon gestartet. Der Benutzer kann abhängig von dem System, das diese Prozedur verwendet, eine längere Verzögerung vorsehen, die komplizierte Prozedur der Bestätigung des Energieausfalls bei 174 bis zur Beendigung 176 ist jedoch ein "atomares Ereignis", das bis zum Ende durchläuft, wenn es einmal ausgelöst wurde.
  • Die Abschaltprozedur ist somit in dem Sinne "atomar", als sie, einmal ausgelöst, bis zum Ende läuft, selbst wenn während der Zeitperiode 175, in der der Abschaltvorgang läuft, die Wechselstromversorgung des Systems wiederhergestellt wird. Am Ende der Abschaltprozedur, zur Zeit 176, wird jedoch sofort eine Neustartprozedur ausgelöst, wenn die Wechselstromversorgung wieder vorhanden ist. Andernfalls schaltet die Energieausfall/Selbst-Neustartprozedur die Batterie aus, und das System benötigt einen Einschaltreset, um über die Boot-ROMs neu zu starten.
  • Ein anderes ähnliches Szenario ist, daß während der Zeit 177 mitten in der Neustartprozedur die Energie ausfallen kann. Auch die Neustartprozedur ist "atomar", jedoch anders als die Abschaltprozedur. Die Neustartprozedur kann "neu abgewickelt" werden und an jedem Punkt, bevor der Zustand des neu gestarteten Systems von dem in dem nicht flüchtigen Speicher gespeicherten, wesentlichen Systembild abweicht, neu gestartet wer den. Das wesentliche Systembild kann ohne Schaden mehrmals in den Speicher geladen werden. Sobald jedoch die Prozeßausführung freigegeben und die Funktionen der Geräte gestartet sind, verändert sich der Systemzustand gegenüber dem gespeicherten wesentlichen Systembild.
  • Die Neustartprozedur ist somit in zwei Teile aufgeteilt. Ein nicht atomarer, idempotenter Teil 187 vor der Ausführung irgend welcher Prozesse oder Statusveränderungen der Gerätesteuereinrichtungen; und ein atomarer Abschnitt 188 nach dem Neustarten der Prozeßausführungen und Gerätefunktionen. Wenn keine Verpflichtung besteht, die Prozeßausführung und Gerätefunktionen wieder aufzunehmen, erfordert das Auftreten einer Energieausfallanzeige keine Abschaltphase 175, sondern lediglich das Warten auf die Wiederherstellung einer stabilen Wechselstromversorgung. Die Energieausfallanzeige 172 und nicht die Bestätigung 174 ist der entscheidende Punkt, weil die Energieausfallanzeige während der nicht-atomare Teil 187 der Neustartprozedur bewirkt, daß weiterhin darauf gewartet wird, daß eine stabile Wechselstromversorgung erkannt wird. Wenn einmal die Verpflichtung besteht, die Prozeßausführung und Gerätefunktionen wieder aufzunehmen, müssen alle Geräte neu gestartet werden, und dann wird die gesamte Prozeßausführung wieder aufgenommen, selbst wenn eine Bestätigung 174 eines Energieausfalls vorliegt. Wenn ein bestätigter Energieausfall auftritt, nachdem die Neustartprozedur den atomaren Teil der Wiederaufnahme der Prozeßausführung und der Gerätefunktionen beendet hat, folgt ein vollständiger Abschaltzyklus.
  • Das Auftreten einer Bestätigung 174 des Energieausfalls während der atomaren Wiederaufnahme der Prozeßausführung und Gerätefunktionen während der Neustartprozedur 177 und die nachfolgende Auslösung einer Abschaltprozedur (erneute Periode 175) können die Gesamtzeit verkürzen, während derer die Batterie Versorgung 162 während der Abschaltprozedur Energie lie fern kann. Es ist wichtig, daß das Prozeß/Gerätetreiber-Neustartintervall so kurz wie möglich ist, damit diese Beschränkung keinen Einfluß auf die unmittelbar danach neu auftretende Abschaltprozedur hat.
  • Während des idempotenten Abschnitts 187 der Neustartprozedur bewirkt ein Energieausfall, daß das System die Energie sofort verliert, so daß ein Einschaltreset nötig ist, wie zuvor erwähnt. Wenn die Wechselstromversorgung also nicht stabil ist, kann der idempotente Abschnitt 187 der Neustartprozedur mehrmals ausgeführt werden, bevor das System tatsächlich neu gestartet wird. Nach einem Energieausfall, nach dem allerdings die Wechselstromversorgung zur Zeit der Beendigung der Abschaltprozedur wiederhergestellt ist, beginnt die Neustartprozedur sofort und wird dann abgeschnitten, wenn ein zweiter Energieausfall während des idempotenten Abschnittes auftritt.
  • Der atomare Abschnitt der Neustartprozedur beginnt nach dem idempotenten Abschnitt bei einem festgeschriebenen Punkt ("commit") 186. Wenn der festgeschriebene Punkt erreicht ist, läuft die Neustartprozedur bis zur Beendigung, selbst wenn die Energie wieder ausfällt. Am Ende der Neustartprozedur wird dann, wenn die Energie noch immer ausgefallen ist, die Abschaltprozedur gestartet.
  • Der festgeschriebene Punkt teilt somit die Neustartprozedur in zwei Hälften, wobei die erste der idempotente Abschnitt 187 ist, und die zweite ist der atomare Abschnitt 188. Der festgeschriebene Punkt 186 tritt auf, nachdem jedes Gerät den Aufruf mit dem Code PFRESTORE empfangen hat. Die Energieausfall/Selbst-Neustartprozedur wartet dann während eines von dem Administrator konfigurierten Zeitintervalls, um zu bestätigen, daß die Wechselstromversorgung stabil ist und legt sich dann darauf fest, den Neustart zu beenden. Man beachte, daß das Intervall für die Bestätigung der Wechselstromversorgung lo gisch innerhalb des idempotenten Abschnitts der Neustartprozedur liegt, so daß ein Energieausfall während dieser Zeit wiederum auf einen Einschaltreset wartet, wie zuvor erwähnt.
  • Systemadministrator:
  • Der Zugriff des Systemadministrators auf die Energieausfall/Selbst-Neustartprozedur umfaßt die Einstellung von Parametern in dem Kern, das zwangsweise Abschalten des Systems bei Bedarf, das Ausführen von Shellskripts beim Abschalten und Neustart, das selektive Einstellen der Eigenschaft "Abbruch bei Energieausfall" für einzelne Prozesse, die Erzeugung einer verknüpften Energieausfall-Abwurfeinrichtung PFDEV und ihrer zugehörigen Energieausfallpartitionen und die Hardwareneukonfiguration während der Dauer eines Energieausfalls.
  • Die Abschalt- und Neustartprozeduren haben bestimmte Kernparameter, welche für den Systemadministrator zugänglich sind. Der Administrator kann z. B. die "bei Neustart wiederaufnehmen"- Option wählen, wobei in diesem Fall der Betrieb des Systems im wesentlichen dort wiederaufgenommen wird, wo er vor dem Abschalten verlassen wurde. Der Administrator kann auch "bei Neustart neu booten" wählen, so daß das Betriebssystem neu gebootet und nicht wieder aufgenommen wird.
  • Andere Kernparameter, welche für den Systemadministrator zugänglich sind, umfassen:
  • (1) das Zeitintervall 173 zwischen der Anzeige und der Bestätigung des Energieausfalls (failtime), (2) einen Maximalwert für die Anzahl der annehmbaren Energieausfall-Interrupts in dem Anzeige/Bestätigungs-Intervall 173 für den Energieausfall (intent), (3) die Zeit, während derer die Batterieversorgung zuverlässig arbeiten kann, wenn sie vollständig ist (upstime), (4) das Zeitintervall zwischen der Bestätigung 174 des Energieausfalls, wenn das Shellskript "/etc/pfshutdown" ausge führt, und der Zeit 181 der Ausgabe von SIGPWR (für Prozesse, welche die Eigenschaft "Abbruch bei Energieausfall" nicht haben) oder SIGTERM (für Prozesse, welche die Eigenschaft "Abbruch bei Energieausfall" aufweisen) an alle Benutzerprozesse; und bei Neustart das Zeitintervall 190 zwischen der Ausführung des Shellskripts "/etc/pfrestart" und der Ausgabe von SIGPWR an alle Benutzerprozesse (pwrtime), (5) das Zeitintervall zwischen der Ausgabe, 181, von SIGPWR (für Prozesse, welche die Eigenschaft "bei Energieausfall abbrechen" nicht aufweisen) oder SIGTERM (für Prozesse, welche die Eigenschaft "Abbruch bei Energieausfall" aufweisen) an alle Benutzerprozesse und der Aussetzung der Prozeßausführung (für alle Prozesse, welche die Eigenschaft "Abbruch bei Energieausfall" nicht aufweisen) oder der Ausgabe von SIGKILL bei 182 (für alle Prozesse, welche die Eigenschaft "bei Energieauswahl abbrechen" aufweisen) an alle Benutzerprozesse (termtime), (6) Maßnahmen, die getroffen werden sollen, wenn die Batterieversorgung 162, 163 die Dauer einer vollständigen Abschaltprozedur nicht zuverlässig unterstützen kann (shutact), (7) die Zeitdauer, während derer die Wechselstromversorgung wiederhergestellt und stabil sein muß, bevor die Neustartprozedur ausgelöst werden darf (acttime), und (7) die Funktionen, die während der Bootprozedur ausgeführt werden, wenn offensichtlich wird, daß die Batterieversorgung die Abschaltprozedur nicht vollständig unterstützen kann, weil die Batterien entleert sind und geladen werden müssen (resact).
  • Der Systemadministrator kann eine Abschaltprozedur erzwingen, ohne daß ein Energieausfall auftritt, um die Batterien zu laden und sicherzustellen, daß sie funktionsfähig sind. Erzwungene Abschaltvorgänge können als Teil der Verwaltungsroutine in regelmäßigen Intervallen vorgenommen werden, um die Zuverlässigkeit der Batterieversorgung sicherzustellen. Es wird ein Systemaufruf vorgesehen, um ein Abschalten zu erzwingen, das ähnlich dem ist, das zur Zeit des Energieausfalls auftritt.
  • Die Unterschiede zwischen einer erzwungenen Abschaltprozedur und einer Abschaltprozedur, die aufgrund einer tatsächlichen Energieausfallbestätigung ausgelöst wird, umfassen das Abschalten der Hauptenergieversorgungen und das Auslösen der Neustartprozedur. Ein erzwungener Abschaltvorgang schaltet die Hauptenergieversorgung ab, um die Fähigkeit der Batterien, Energie zu liefern, zu prüfen. Die Art der Neustartprozedur ist immer "bei Neustart wiederaufnehmen", wenn das Abschalten erzwungen war. Da die Neustartprozedur nicht durch eine Energie-Vorhanden-Anzeige ausgelöst wird, muß die Software für die erzwungene Abschaltprozedur die Neustartprozedur auslösen.
  • In einem der beiden Shellskripts /etc/pfshutdown und /etc/- pfrestart muß anlagen- oder anwendungsspezifische Information enthalten sein. Die Abschaltprozedur führt das Skript /etc/- pfrestart aus. In diesen Skripts kann der Administrator Wartungsaufgaben ausführen, z. B. während der Abschaltprozedur alle Prozesse abbrechen, die zu einem Datenbankverwaltungssystem gehören, und während der Neustartprozedur das Datenbankverwaltungssystem (DBMS) neu starten. Diese Shellskripts sind der Hauptmechanismus für die Zuschneidung der Funktionsweise der Energieausfall/Selbst-Neustartprozedur des Administrators.
  • Plattensystembetrachtungen für das Abschalten und den Neustart:
  • Das Plattensystem 148 enthält Energieausfall-Partitionen, welche gemeinsam den nicht flüchtigen Speicherbereich für das wesentliche Systembild bilden.
  • Das wesentliche Systembild besteht aus allen Prozessen und Kernzuständen, die gerettet werden müssen, damit die Neustartprozedur richtig ablaufen kann. Der Prozeßzustand umfaßt UNIX- Bereichs-, Daten- und Kellerseiten, und möglicherweise weitere Informationen. Der Prozeßtabellenschlitz und weitere Informa tion über die Systemdatenstruktur, die zu dem Prozeß gehört, ist Teil des Kernzustandes. Wenn die Option "bei Neustart neu booten" gewählt ist, beachte man, daß keine wesentlichen Systemzustände gerettet werden.
  • Wenn ein I/O-Fehler auftritt, während das wesentliche Systembild in den PFDEV gerettet wird, stellt das System "bei Neustart neu booten" unabhängig von dem Wert des Kernparameters ein, der "bei Neustart wiederaufnehmen" fordert. Die Abschaltprozedur wird abgebrochen, und alle Geräte- und Prozeßzustände gehen verloren.
  • Wenn beim die Neustart die Option "bei Neustart neu booten" gewählt ist, wird das Plattensystem 148 daran beteiligt, eine neue Kopie des Betriebssystems von der Platte zu holen. Anstatt den Bootvorgang auszuführen, wenn die Wechselstromversorgung wiederhergestellt wird, wird das wesentliche Systembild, das in dem PFDEV enthalten ist, in den Speicher 14, 15 oder 16 geladen. Dieses wesentliche Systembild enthält Gerätestatusinformation, die an ein gegebenes Gerät weitergegeben werden kann, wie zuvor erwähnt, und dann abgegeben wird. Der andere Teil des wesentlichen Systemzustands besteht aus einem tatsächlichen Kernbild, möglicherweise in nicht zusammenhängenden Teilen. Wenn bei der Wiederherstellung des wesentlichen Systemzustandes ein I/O-Fehler auftritt, wird die Steuerung an die anfängliche Bootsequenz zurückgegeben, und eine frische Kopie des Betriebssystems wird unabhängig von dem Wert des Kernparameters geladen, der "bei Neustart wiederaufnehmen" fordert.
  • Batterie-OK-Signale:
  • Jede Batterie, welche die Batterieversorgung 162 und 163 bildet, gibt über den Prozessor 170 ein Signal "Batterie ok" ab, das von den CPUs im Umfragebetrieb oder über den Interrupt er mittelt werden kann, der durch einen Übergang in diesem Signal ausgelöst wird. Die Energieausfall/Selbst-Neustartprozedur interpretiert das Auftreten dieses Batterie-OK-Signals als Signal, daß eine vollständige Abschaltprozedur unterstützt werden kann. Die Dauer eines "vollständigen" Abschaltens wird von dem Systemadministrator definiert. Das Fehlen des Batterie-OK-Signals wird so interpretiert, daß die Batterie keinen vollständigen Abschaltvorgang unterstützen kann, ohne Energie an die Maschine abzugeben, die von dieser Batterie versorgt wird, oder ohne die Batterie durch eine drastische Entladung zu beschädigen. Wenn für ein gegebenes Modul eine einzige Batterie das Batterie-OK-Signal ausgibt, kann das Modul einen vollständigen Abschaltvorgang unterstützen. Es ist nicht notwendig, daß beide Batterien 162 und 163 "Batterie ok" zeigen.
  • Die Energieausfall/Selbst-Neustartprozedur verwendet die Batterie-OK-Signale an verschiedenen Stellen. Die Batterieaufladeverzögerung während eines normalen Bootvorgangs oder einer Energieausfall/Selbst-Neustartprozedur wartet, bis das Batterie-OK-Signal von wenigstens einer Batterie in jedem Modul vorliegt. Während der Energieausfall/Abschaltprozedur kann der Abschaltvorgang abgebrochen werden, wenn das Batterie-OK-Signal nicht von wenigstens einer Batterie vorliegt.
  • Wenn die Wechselstromversorgung wiederhergestellt wird, kann unabhängig davon, ob die Option "bei Neustart neu booten" oder "bei Neustart wiederaufnehmen" gewählt ist, eine Verzögerung eingeführt werden, bevor das Booten/die Wiederaufnahme gestartet wird. Diese Verzögerung erlaubt es den Batterien 162, 163, ausreichend geladen zu werden, so daß ein weiterer Energieausfall unterstützt werden kann. Das heißt, es ist nicht wünschenswert, das System wieder online zu bringen, wenn es keinen weiteren ordnungsgemäßen Abschaltvorgang ausführen kann, weil die Batterien zu wenig Ladung haben. Die Boot-Prozedur wird während eines Zeitintervalles verzögert, das gestützt auf die Länge der Zeit, während derer die Abschaltprozedur die Batterien entladen hat, und auf die Einstellung der Kernparameter. Die Abschaltprozedur erfaßt die Batterieentladezeit seit dem letzten Aufladen und speichert diesen Wert in dem nicht-füchtigen Speicher. Die Verzögerungszeit für eine vollständige Batterieaufladung beträgt z. B. sechzig Mal die Entladezeit.
  • Systemspeicherorganisation:
  • Wenn der Kernbildteil des wesentlichen Systemzustandes in PFDEV geschrieben wird, ist es wichtig, daß jeder Schreibabschnitt so groß wie möglich ist. Vorzugsweise würde dies in einem großen Schreibvorgang ausgeführt, die Systemarchitektur erlaubt diese Möglichkeit jedoch nicht. Es ist daher entscheidend, daß der globale Speicher 14, 15 ein großes "Fenster" umfaßt, welche keine Systemdatenstrukturen 144 enthält, sondern nur Benutzerdaten 145; je größer die Größe dieses "Fensters" in dem globalen Speicher 14, 15 ist, desto schneller ist natürlich die Speicherung des Kernbildes. Die Energieausfall/Selbst-Neustartprozedur kann dann zuerst die Daten, die in diesem "Fenster" aus dem globalen Speicher auf die Platte 148 schreiben. Dann kann der Rest des Systemspeichers (lokal und global) in das "Fenster" in dem globalen Speicher kopiert werden und von dort auf die Platte 148 geschrieben werden. Insbesondere müssen alle Zuweisungsroutinen von der Zuweisung eines Teils des Speichers ausgeschlossen werden, der von dem System irgendwo in diesem "Fenster" genutzt wird, das die Energieausfall/Selbst-Neustartprozedur in dem globalen Speicher verwendet. Der Hauptteil des Codes, der Datenstrukturen in dem globalen Speicher zuweist, bezieht sich auf das I/O- Untersystem für DMA-Übertragungen und dergleichen.
  • Zusammenfassung der Pseudocode-Funktionsweise
  • Das in Tabelle A angegebene Pseudocodelisting zeigt zusammen mit der Zeitlinie der Tabelle B und dem zugehörigen Zeitablaufdiagramm der Fig. 16 die Merkmale einer Ausführungsform der Erfindung, die oben erläutert wurde. Das Beispiel der "Zeitlinie" der Tabelle B ist eine übliche Abschalt- und Neustartprozedur, die einen einzigen Abschalt/Neustart-Zyklus umfaßt. Dabei werden natürlich solche Szenarien umgangen, die sich entwickeln, wenn Neustartversuche abgebrochen und mehrmals durchgeführt werden. Der Ablauf der Funktionen, die durch die Zeitlinie und Fig. 16 dargestellt werden, ist entscheidend. Die Prozeßausführung muß zum Beispiel ausgesetzt werden, bevor die Systempuffer für die modifizierten Dateien ausgeräumt werden, was wiederum vor dem Stillegen und Ablegen des Gerätezustandes geschehen muß. Die auf der Zeitlinie in Minuten und Sekunden dargestellte Zeit dient lediglich als Beispiel.
  • Dateisystem/config:
  • Damit Benutzerprogramme auf die aktuelle Konfiguration des oben beschriebenen Systems zugreifen können, wird ein Pseudodateisystem hinzugefügt, das als Dateisystem /config bezeichnet wird. In /config existiert für jedes Softwareuntersystem und jede Hardwarekomponente in dem System eine Datei. In Fig. 17 ist eine Baumstruktur für dieses Dateisystem /config gezeigt. Eine Auflistung der Verzeichnisse für /config zeigt immer die wahre Konfiguration des Systems, was für ein System wie das oben gezeigte sehr wichtig, bei dem sich die Konfiguration ändern kann, während das System läuft.
  • Der Hardwareunterbaum 180 der Fig. 17 zeigt die aktuelle physische Hardwarekonfiguration des Systems der Fig. 1-12. Nur die tatsächlich in dem System vorhandene Hardware wird als ein Eintrag in dem Dateisystem /config dargestellt. Wenn es z. B. keine Speicherkarte C (Speichermodul 15 der Fig. 1) in dem Schlitz C gibt, erscheint der entsprechende Knoten tmrcC in dem tmrc-Verzeichnis nicht. Wenn Komponenten hinzugefügt oder aus dem System entfernt werden, wird der Hardware-Unterbaum 180 aktualisiert. Innerhalb des Hardware-Unterbaums 180 gibt es einen Unterbaum 181 für die CPUs, und unterhalb dieses Unterbaums gibt es drei mögliche Dateien 182, 183 und 184, welche die CPUs 11, 12 und 13 darstellen, die als Dateien /config/hw/cpu/cpuA, /config/hw/cpu/cpuB, etc. erscheinen. Ähnlich gibt es einen Unterbaum 185 für die Speichermodule 14 und 15, in dem Dateien /config/hw/tmrc/tmrcA und /config/hw/- tmrc/tmrcC erscheinen, wenn beide Speichermodule 14 und 15 vorhanden sind. Ein Unterbaum 186 für die I/O-Prozessoren 26 und 27 weist Unterbäume /config/hw/iop/iop0/ und /config/hw/- iop/iop1/für die Prozessoren 26 und 27 auf, und jeder von diesen weist VME-Steuereinrichtungen 30 auf, die jeweils durch eine Datei dargestellt werden, die mit einer .slot-Datei 187 verknüpft ist, welche dem VME-Schlitz entspricht, den die Steuereinrichtung belegt. Bei SCSI-Steuereinrichtungen gibt es eine einzige Steuereinrichtung, die als ein Link in beiden Verzeichnissen iop und msc auftritt. Mit ls() erscheinen die Links zwischen den Steuereinrichtungen als Hardwarewaredateisystem-Links.
  • Der Software-Unterbaum 190 stellt die aktuelle Softwarekonfiguration des Systems dar, obwohl die Softwaresystemkomponenten verschwommener sind als die analogen Hardwarekomponenten im Hardware-Unterbaum 180. Nicht alle Routinen in dem System werden mit einer bestimmten Softwarekomponente identifiziert, sondern es gibt eine Anzahl von Komponenten, die als ein Softwareuntersystem behandelt werden und zugehörige Start- und Stoproutinen haben. Einige, jedoch nicht alle, können auch Routinen zum Neu-Initialisieren und Neu-Integrieren der Untersysteme aufweisen. Der Unterschied zu dem Hardware-Unterbaum ist, daß der Software-Unterbaum keine vervielfachten Komponenten aufweist.
  • Benutzerschnittstelle für das Dateisystem/config:
  • Das Dateisystem /config ist eine Eingangsstufe für verschiedene Kernmodule, und /config sieht einen Mechanismus zum Identifizieren von Komponenten eines bestimmten Kernmoduls mittels Namen sowie zum Richten von Systemaufrufen an dieses Kernmodul vor. /Config wird während des Bootvorgangs automatisch gestartet, um sicherzustellen, daß es für die Untersuchung durch eines der /etc/rc Start-Programme zur Verfügung steht.
  • Die Knoten in /config können bei UNIX gerade so wie normale Dateien behandelt werden. Alle Dateioperationen können versucht werden, obwohl einige nicht unterstützt werden und Fehler zurückgeben. Die Benutzerschnittstelle zu /config erfolgt über übliche UNIX-Systemaufrufe. Eine Zusammenfassung der Unterstützen von Systemaufrufen ist in Tabelle C angegeben, in der die Spalte auf der linken Seite die üblichen UNIX-Aufrufe wiedergibt. Die Systemaufrufe können innerhalb von kundenspezifischen Programmen oder von Befehlen erfolgen, welche die Systemaufrufe machen (z. B. ls(1)). Die meisten der Operationen werden durch Öffnen der gewünschten Einheit und dann Ausgeben eines Systemaufrufs ioctl(2) ausgeführt; z. B., um an das Reintegrations-Untersystem einen Aufruf zu schicken, damit es die CPU-B (die CPU 12) herunterfährt, wird der folgende Code ausgeführt:
  • fd = open("/config/hardware/cpu/cpuB", O_rdwr);
  • ioctl(fd, CCF DOWN, O);
  • Die Knoten in dem Dateisystem /config unterstützen normale Befehle, insbesondere eine Untergruppe der ioctl-Aufrufe, die in den Kopfteil des /config-Dateisystems cfs.h definiert sind:
  • CF_GETSTATE Zustandscode (Integer) holen
  • CF_PGET Parameterblock holen
  • CF_PSET Parameterblock einstellen
  • CF_INIT Initialisieren
  • CF_DIAG Diagnose ausführen
  • CF_DOWN Einheit herunterfahren
  • CF_REINT Reintegrieren
  • CF_OFFLINE Offline nehmen
  • CF_RESET Zurücksetzen
  • CF_MOVE Bewegen (IOP)
  • CF_FAILED Als ausgefallen markieren
  • CF_CTRLINFO pdev/ldev-Information holen
  • CF_CONFIG config Datei-Anordnung holen
  • Alle Knoten unterstützen CF_GETSTATE:
  • int state;
  • ioctl (fd, CF_GETSTATE, &state);
  • Die Bedeutung des zurückgegebenen Codes (Zustands) variiert von Komponente zu Komponente, abgesehen davon, daß ein Wert von Null den normalen Betriebszustand anzeigt, und ein Wert, der nicht Null ist, zeigt eine Abweichung davon an. Andere Zustandswerte können für bestimmte Komponenten definiert werden.
  • Kernschnittstelle:
  • Das Dateisystem /config soll einfach eine Hülle (Shell) sein, die alle Dateisystemoperationen ausführt, welche notwendig sind, um die Illusion von Dateien zu schaffen, die jedoch keine Kenntnisse über die Einheiten hat, welche es darstellt. Bei der Verwendung von def procs werden Schlüsselsystemaufrufe, wie Lesen (read), Schreiben (write) und IO-Steuerung (ioctl), an andere Kernmodule weitergegeben. Andere Kernmodule werden durch Einträge in der Inode-Tabelle (Inode = Informationskno ten) von /config in den /config-Inode eingebunden.
  • Die /config-Inode-Tabelle ist eine verknüpfte Liste aus Datenstrukturen des Typs cft:
  • Jedes cf t definiert eine bestimmte Datei oder ein Verzeichnis (Datei, wenn S_ FDIR auf cf_mode eingestellt ist). Zusammen bilden sie die Verzeichnisbaumstruktur, die der Benutzer sieht, wie in Fig. 17 gezeigt.
  • Wenn der Benutzer einen Systemaufruf ausgibt, erfüllt /config entweder die Anforderung oder gibt die Anforderung an das zugehörige Kernmodul weiter. Jeder Knoten enthält eine Liste der Prozeduren (cf_procs), die den unterstützten Operationen entsprechen: Öffnen (open), Schließen (close), Lesen (read), Schreiben (write), Attribut (attr) und I/O-Steuerung (ioctl). Das erste Argument, das an eine Prozedur weitergegeben wird, ist der Wert, der in dem cf_id-Feld gespeichert ist. Dieses Feld kann jeden Wert enthalten, üblicherweise speichert es jedoch eine Adresse oder eine Einheitszahl, um die Identifikation des Ziels des Systemaufrufs zu unterstützen. Der Wert muß eindeutig sein.
  • Alle Kernmodule, die /config verwenden, müssen alle Operationen, bei denen etwas hinzugefügt, entfernt oder aktualisiert wird, auch mit dem /config-Baum der Fig. 17 ausführen. Für den Hardware-Unterbaum sind eine Reihe von leicht zu verwendenden Schnittstellenroutinen verfügbar, die in Tabelle D angegeben sind. Diese Routinen sind gemäß dem anwendbaren Hardware-Abschnitt gruppiert. Schnittstellenroutinen für den Software-Unterbaum gehen über den Bereich dieser Anmeldung hinaus.
  • Ein Beispiel eines ls()-Befehls ist in Tabelle E angegeben. Diese Tabelle zeigt ausgewählte Ausgangssignale für einen ls()-Befehl.
  • Ein Programmlisting der Include-Datei für das /config-Dateisystem zum Erzeugen der Unterbäume in Fig. 17 ist in Tabelle F angegeben.
  • Während die Erfindung in bezug auf bestimmte Ausführungsformen beschrieben wurde, soll die Beschreibung in keiner Weise beschränkend verstanden werden. Zahlreiche Modifikationen der offenbarten Ausführungsform sowie andere Ausführungsformen der Erfindung werden sich dem Fachmann auf diesem Gebiet bei Lektüre dieser Beschreibung ergeben. Tabelle A: PSEUDOCODELISTING FÜR ENERGIEAUS- FALL/SELBSTNEUSTARTPROZEDUR ENERGIEAUSFALL-BESTÄTIGUNG ABSCHALTPROZEDUR NEUSTARTPROZEDUR
  • TABELLE B - ZEITLINIEN FÜR ABSCHALTEN UND NEUSTART
  • Beispiel eines Zeitverlaufes beim Abschalten:
  • 0 : 00 Anzeige des Energieausfalls bei 172. Beginn des Zeitintervalls 173 zum Aussortieren von Unterbrechungen durch vorübergehenden Energieausfall.
  • 0 : 05 Bestätigung des Energieausfalls bei 174, die Energieausfall-Bedingung hat angedauert. Geräte senden die Nachricht PFCONFIRM. Das Skript /etc/pfshutdown wird ausgeführt. Beginn des Ausräumens der Systempuffer für modifizierte Dateien; alle weiter verzögerten Schreibvorgänge werden synchronisiert.
  • 0 : 25 Nicht als "Abbruch bei Energieausfall" markierte Prozesse senden bei 182 das Signal SIGPWR mit der Nachricht PFQUIESCE. Prozesse, die als " Abbruch bei Energieausfall" markiert sind, senden das Signal SIGTERM mit PFQUIESCE.
  • 0 : 55 Als "Abbruch bei Energieausfall" markierte Prozesse senden das Signal SIGKILL.
  • 0 : 57 Die Prozeßausführung wird ausgesetzt. Die Geräte senden die Nachricht PFHALT. Verzögern für vollständige Ausräumung des Dateisystems.
  • 1 : 00 Geräte senden die Nachrichten PFQUIESCE/PFDUMP. Zustand des I/O-Prozessors 26 und 27 wird gerettet. Wesentliche Gerätezustände werden zu PFDEV übertragen.
  • 1 : 05 Geräte, die keine Energieausfallpartitionen enthalten, welche mit PFDEV verbunden sind, werden abge schaltet. Es wird begonnen, den wesentlichen Systemzustand nach PFDEV zu retten.
  • 3 : 30 Wesentliche Systemzustände werden in PFDEV gerettet. Gültige Köpfe (Header) werden in PFDEV geschrieben. Das Abschalten des Systems ist beendet. Die verbleibenden Geräte werden abgeschaltet. Die Batterieversorgungen 162, 163 erhalten Nachrichten zum Abschalten.
  • 4 : 30 Der zuverlässige Betrieb der Batterien endet, wenn die Batterien nicht abgeschaltet werden.
  • Beispiel eines Zeitablaufes beim Neustarten:
  • 0 : 00 Wechselstromversorgung wiederhergestellt. Beginn des Zeitintervalles, um sicherzustellen, daß Wechselstromversorgung stabil ist.
  • 1 : 00 Wechselstromversorgung ist stabil. UPS zeigt an, daß Batterien wenigstens minimal geladen sind. System bootet und beginnt, wesentliches Systembild zu laden.
  • 1 : 30 Zustand der IOPs wird wiederhergestellt. Die Geräte werden identifiziert, die Gerätekonfiguration wird überprüft. Gerätetreiber empfangen die Nachricht PFINIT. Gerätetreiber empfangen die Nachricht PFRESTORE. Der wesentliche Gerätezustand wird wiederhergestellt.
  • 1 : 35 Auf Neustart festgelegt. PFDEV-Header werden annuliert. Gerätetreiber empfangen Nachricht PFRESTART. Prozeßausführung wird entfernt. Skript /etc/pfrestart wird ausgeführt.
  • 1 : 55 Prozesse empfangen Signal SIGPWR mit Argument PFRE- START. TABELLE C
  • Man beachte: + Funktion durch Unterbaum-Code definiert
  • * zur Boot-Zeit dynamisch bestimmt
  • Mit (+) markierte Punkte geben an, daß die Funktion von /config nicht ausgeführt wird, sondern übergangen wird.
  • TABELLE D CPU-Routinen
  • cf_cpu_add:
  • cf_tmrc_add (unit) int unit;
  • CPU-Einheit dem Baum hinzufügen.
  • cf_cpu_rm:
  • cf_cpu_rm:
  • int unit;
  • CPU-Einheit aus dem Baum entfernen.
  • TMRC-Routinen
  • cf_tmrc_add:
  • cf_cpu_add(unit) int unit;
  • TMRC-Einheit dem Baum hinzufügen.
  • cf_tmrc_rm:
  • cf_tmrc_rm(unit) int unit;
  • TMRC-Einheit aus dem Baum entfernen.
  • IOP-Routinen
  • cf_iop_add:
  • cf_iop_add(unit) int unit;
  • Neuen IOP in dem Verzeichnis /config/hw/iop erzeugen und die acht .slot-Einträge hinzufügen.
  • cf_iop_rm:
  • cf_cpu_rm(unit) int unit;
  • IOP-Einheit, alle Untereinheiten und alle msc- Links entfernen.
  • cf_iop_state:
  • cf_iop_state(unit, state) int unit, state;
  • Zustand der Einheit verändern. Zustand ist (0) bei Störung, (1) bei Normalbetrieb.
  • Controller-Routinen
  • cf_ctlr_add:
  • cf_ctlr_add (pd)
  • Link zum Knoten erzeugen:
  • /config/hw/iop/iopn/.slotm
  • Alle Information wird der Struktur entnommen, auf die pd (iop/Schlitznummer, ASCII-Name und Einheitsnummer) zeigt.
  • cf_ctrl_rm:
  • cf_ctlr_rm (pd) pdev_t*pd;
  • Den Steuereinrichtungs-Knoten, alle Untergeräte und msc-Links entfernen.
  • cf_ctlr_ ove:
  • cf_ tlr_move (pd) pdev_t*pd;
  • Die Steuereinrichtung und alle lokalen Geräte zu iop^1 bewegen. Die id-Felder der Steuereinrichtung und die 1devs werden aktualisiert, um die neue iop-Nummer darzustellen.
  • cf_ctlr_state:
  • cf_ctlr_state (pd, state) pdev_t*pd;
  • int state;
  • Zustand der Steuereinrichtung einstellen. Zustand ist (0) bei Störung, (1) bei Normalbetrieb.
  • Lokale Geräteroutinen
  • cf_ldev_add:
  • cf_ldev_add(pd, subunit, name, appendunit)
  • pdev_t*pd;
  • int subunit;
  • char *name;
  • int appendunit;
  • Einen Knoten in dem Dateisystem /config in dem Verzeichnis:
  • /config/hw/iop/iopn/controller
  • erzeugen oder umbenennen.
  • Das Argument pd bestimmt den iop/iopn und die Steuereinrichtung. Die Untereinheit ist ein ganzzahliger Index, der angibt, daß die Untereinheit erzeugt wird. Der Name ist ein ASCII-Name, der in /config angezeigt wird. Nur der Zeiger zu dem Namen wird gerettet - der Gerätetreiber muß hierfür Platz zuweisen. Wenn appendunit nicht Null ist, wird die Nummer der Untereinheit an den ASCII-Namen angehängt (praktisch bei Namen wie port0, port1, port2, ...). Wenn der Knoten bereits existiert, wird nur der ASCII-Name verändert.
  • cf_ldev_rm:
  • cf_ldev_rm(pd, subunit) pdev_t*pd;
  • int subunit;
  • Lokales Gerät aus /config entfernen.
  • cf_ldev_state:
  • cf_ldev_state(pd, subunit, state) pdev_t*pd;
  • int subunit, state;
  • Zustand eines lokalen Gerätes einstellen. Zustand ist (0) bei Störung, (1) bei Normalbetrieb.
  • MSC-Routinen
  • cf_msc_add:
  • cf_msc_add(unit) int unit;
  • msc-Einheit und die unabhängigen Busknoten mcb0 und mcb1 hinzufügen.
  • cf_msc_rm:
  • cf_msc_rm(unit)
  • int unit;
  • msc-Einheit und alle Unterknoten entfernen. cf_msc_link:
  • cf_msc_link(unit, pd) int unit;
  • pdev_t*pd;
  • Die durch pd spezifizierte Steuereinheit mit msc-Einheit verbinden.
  • cf_mscenv_add:
  • cf_mscenv_add(unit, component) int unit, component;
  • Der msc-Einheit Umgebungskomponenten hinzufügen. Die Komponente ist ein Code aus cfs.h, der angibt: Ventilatoren, Batterien, Versorgungen.
  • cf_mscenv_rm:
  • cf_mscenv_rm(unit, component) int unit, component;
  • Umgebungskomponente aus msc-Einheit entfernen.
  • cf_mscenv_state:
  • cf_mscenv_state(unit, component, state)
  • int unit, component, state;
  • Zustand einer Umgebungskomponente verändern. Der Zustand ist (0) bei Störung und (1) bei Normalbetrieb.
  • Umgebungsroutinen
  • cf_environ_add:
  • cf_environ_add(component) int unit;
  • Umgebungskomponenten des Hauptgehäuses hinzufügen. Komponente ist ein Code aus cfs.h, der angibt: Ventilatoren, Batterien, Versorgungen.
  • cf_environ_rm:
  • cf_msc_rm(component) int unit;
  • Umgebungskomponenten des Hauptgehäuses entfernen.
  • cf_environ_state:
  • cf_environ_state (component, state)
  • int unit, component, state
  • Verändern des Zustandes einer Umgebungskomponente des Hauptgehäuses. Zustand ist (0) bei Störung, (1) bei Normalbetrieb.
  • Routinen der unterer Ebene
  • Alle der vorhergehenden Schnittstellenroutinen sind unter Verwendung der drei Routinen der unteren Ebene aufgebaut.
  • cf_newcode:
  • cf_t*
  • cf_newcode (parid)
  • cf_id_t parid;
  • Erzeugen eines neuen Knotens unter dem durch parid angegebenen Verzeichnis. Alle Felder in der zurückgegebenen Struktur müssen von Hand gefüllt werden.
  • cf_linknode:
  • cf_t*
  • cf_linknode(parid, srcnode)
  • cf_id_t parid;
  • Erzeugen einer festen Verbindung zu dem Knoten srcnode unter dem durch parid angegebenen Verzeichnis. Alle Felder in der zurückgegebenen Struktur müssen von Hand gefüllt werden.
  • cf_disposenode:
  • cf_disposenode(id)
  • cf_id_t id;
  • Entfernen des durch id bezeichneten Knoten aus dem Baum. Alle Unterknoten und alle Links werden ebenfalls entfernt.
  • Vermischtes:
  • cf_findid:
  • cf_t*
  • cf_findid (id)
  • cf_id_t id;
  • Zurückgeben des Knotens, dessen df_id-Feld zu id paßt. TABELLE E TABELLE F

Claims (14)

1. Verfahren zum Betreiben eines Rechnersystems mit einer zentralen Verarbeitungseinheit (CPU; 11, 12, 13), einem Speicher umfassend einem flüchtigen Speicher (14, 15) und einem nicht flüchtigen Speicher (148), einer Hauptenergieversorgung (164, 165), einer Backup-Energieversorgung (162, 163) und mehreren Einrichtungen, welche eine Peripherie für die CPU (11, 12, 13) darstellen, mit folgenden Verfahrensschritten:
(a) Ausführen von Prozessen in der CPU (11, 12, 13) ausgehend von dem Speicher, während die Hauptenergieversorgung (164, 165) Energie an das Rechnersystem liefert;
(b) Erfassen einer Störung der Hauptenergieversorgung und abhängig davon Liefern von Energie an das Rechnersystem von der Backup-Energieversorgung (162, 163) und Ausführen einer Abschaltprozedur, die eine erste Warnung der Prozesse vor einem bevorstehenden Abschalten des Rechnersystems umfaßt, wobei die Prozesse auf diese Warnung auf eine von dem jeweiligen Prozeß abhängige Weise reagieren, und dann Kopieren der Zustandsinformation des Rechnersystems aus dem flüchtigen Speicher (14, 15) in den nicht flüchtigen Speicher (148), wobei diese Zustandsinformation Zustandsinformation über die Prozesse und die Zustandsinformation über die Einrichtungen umfaßt;
(c) nach der Beendigung der Abschaltprozedur automatisches Auslösen einer Neustartprozedur, wenn die Hauptenergieversorgung (164, 165) wiederhergestellt wurde;
(d) wobei diese Neustartprozedur das Lesen der gespeicherten Zustandsinformation aus dem nicht flüchtigen Speicher (148) und das Neustarten der Prozesse und das Fortsetzen der Ausführung ohne neues Booten umfaßt;
(e) oder automatisches Abschalten der Backup-Leistung und Beenden der Ausführung durch die CPU, wenn die Hauptenergieversorgung (164, 165) nicht innerhalb einer vorgegebenen Zeitspanne nach der Beendigung der Abschaltprozedur wiederhergestellt wurde.
2. Verfahren nach Anspruch 1, bei dem die Abschaltprozedur selbst dann beendet wird, wenn die Leistungsversorgung vor Beendigung der Abschaltprozedur wiederhergestellt wurde; und bei dem bei der Erfassung der Störung der Leistungsversorgung eine Zeitspanne nach dem Empfang einer Anzeige der Störung gewartet wird, um zu ermitteln, ob die Störung lediglich vorübergehend ist, bevor die Abschaltprozedur ausgelöst wird.
3. Verfahren nach Anspruch 1 oder 2, bei dem bei der Ausführung der Prozesse durch die CPU (11, 12, 13) verzögert in den nicht flüchtigen Speicher (148) geschrieben wird und die Abschaltprozedur die Ausführung aller anstehenden verzögerten Schreibvorgänge umfaßt, ohne neue verzögerte Schreibvorgänge auszulösen.
4. Verfahren nach einem der vorangehenden Ansprüche, bei dem eine weitere Störung der Energieversorgung erfaßt wird, die Neustartprozedur endet, wenn diese weitere Störung vor einer ausgewählten Zeitverzögerung auftritt, und die Neustartprozedur bis zum Ende weiterläuft, wenn die weitere Störung nach der ausgewählten Zeitverzögerung auftritt.
5. Verfahren nach einem der vorangehenden Ansprüche, bei dem eine Wechselstrom-Netzleistung (164, 165) als die Energieversorgung vorgesehen wird und eine Batterie (162, 163) als die Backup-Energieversorgung vorgesehen wird; und bei dem ein Plattenspeicher (148) als der nicht flüchtige Speicher vorgesehen wird.
6. Verfahren nach einem der vorangehenden Ansprüche bei dem ein Prozeß ausgeführt wird, der einen Speicher für das verzögerte Schreiben von Dateien nutzt, die üblicherweise auf einer Platte gespeichert werden; und bei dem die Abschaltprozedur das Schreiben aller anhängigen verzögerten Schreibvorgänge auf die Platte (148) und das Ausgeben keiner zusätzlichen verzögerten Schreibvorgänge sowie das Speichern des Zustands dieses Prozeßes auf die Platte umfaßt.
7. Verfahren nach einem der vorangehenden Ansprüche, bei dem die Abschaltprozedur das Schreiben von Zustandsinformation einer CPU (11, 12, 13), der Prozesse und Einrichtungen des Systems an ausgewählte Stellen in dem flüchtigen Speicher (14, 15) umfaßt, wobei diese ausgewählten Stellen dann auf die Platte (148) geschrieben werden.
8. Verfahren nach einem der vorangehenden Ansprüche, mit folgenden Verfahrensschritten:
- Ausführen eines Codes aus einem Speicher durch die CPU im Normalbetrieb, wobei diese Ausführung Aufrufe umfaßt, die an eine Einrichtung gerichtet sind;
- wobei die Abschaltprozedur das Ausgeben einer Folge von Geräteaufrufen an die Einrichtung umfaßt, während die Ausführung der Abschaltprozedur durch die CPU (11, 12, 13) fortgesetzt wird, um den Zustand der Prozesse zu speichern, welche gerade ausgeführt werden, und wobei die Geräteaufrufe folgende Aufrufe umfassen:
i) einen ersten Geräteaufruf, der eine Leistungsstörung anzeigt;
ii) einen zweiten Geräteaufruf, der eine Unterbrechung oder eine andere Geräteoperationen anzeigt;
iii) einen dritten Geräteaufruf, der die Speichermenge angibt, welche von der Einrichtung zum Speichern des Zustandes benötigt wird;
iv) einen vierten Geräteaufruf, der eine Adresse in dem Speicher zum Speichern des Zustands der Einrichtung umfaßt;
- Speichern der von der Einrichtung an die Adresse in dem Speicher geschriebenen Daten auf der Platte (148); und
- Abschalten der Backup-Leistung und Beenden der Ausführung des Codes durch die CPU.
9. Verfahren nach Anspruch 8 mit folgenden Verfahrensschritten:
- Erfassen einer Wiederherstellung der Energieversorgung;
- Auslösen der Ausführung einer Anlaufprozedur durch die CPU, welche das Ausgeben einer anderen Folge von Geräteaufrufen an die Einrichtung umfaßt, einschließlich:
i) einen fünften Geräteaufruf zum Initialisieren der Einrichtung und Zurückbringen der Einrichtungskonfiguration;
ii) einen sechsten Geräteaufruf zum Auslösen eines Ladezustands für die Einrichtung von dem Speicher, wobei dieser Zustand von der Platte in den Speicher gelesen wurde; und
iii) einen siebten Geräteaufruf zum Auslösen des normalen Betriebs der Einrichtung.
10. Verfahren nach einem der vorangehenden Ansprüche mit folgenden Verfahrensschritten:
- Ausführen eines Codes von einem Speicher durch die CPU im normalen Betrieb, wobei diese Ausführung Signale an Prozesse umfaßt;
- Erfassen des Auftretens einer Störung einer Energieversorgung für das System und Fortsetzen der Ausführung des Codes durch die CPU mit einer Backup-Leistung;
- Auslösen der Ausführung einer Abschaltprozedur durch die CPU einschließlich der Ausgabe einer Folge von Signalen an die Prozesse, während die Ausführung der Abschaltprozedur durch die CPU fortgesetzt wird, um den Zustand der Prozesse, welche ausgeführt werden, zu speichern, wobei die Signale an die Prozesse folgende Signale umfassen:
i) SIGPWR mit dem Code PFQUIESCE während des Abschaltens gefolgt von SIGPWR mit dem Code PFRESTART oder
ii) SIGTERM mit dem Code PFQUIESCE gefolgt von SIGKILL;
- Speichern des Zustands auf einer Platte; und
- Abschalten der Backup-Leistung und Beenden der Ausführung des Codes durch die CPU; und
- und Markieren eines Prozesses für den Abbruch bei Leistungsausfall.
11. Rechnersystem mit einer zentralen Verarbeitungseinheit (CPU; 11, 12, 13), einem Speicher umfassend einen flüchtigen Speicher (14, 15) und einen nicht flüchtigen Speicher (148), einer Hauptenergieversorgung (164, 165), einer Backup-Energieversorgung (162, 163) und mehreren Einrichtungen, die eine Peripherie für die CPU (11, 12, 13) darstellen, mit folgenden weiteren Merkmalen; einer Störungserfassungsvorrichtung (168, 170) zum Erfas sen einer Störung der Hauptenergieversorgung (164, 165) und zum Liefern von Energie zu dem Rechnersystem von der Backup-Energieversorgung (162, 163) und zum Auslösen einer Abschaltprozedur in der CPU abhängig davon, wobei die Abschaltprozedur erste Warnprozesse umfaßt, die in der CPU ablaufen und vor einem bevorstehenden Abschalten des Rechnersystems warnen, wobei die Prozesse auf eine von Prozeß zu Prozeß unterschiedliche Weise auf die Warnung reagieren, und zum anschließenden Kopieren der Zustandsinformation des Rechnersystems von dem flüchtigen Speicher (14, 15) in den nicht flüchtigen Speicher (148), wobei die Zustandsinformation Zustandsinformation der Prozesse und Zustandsinformation der Einrichtungen umfaßt;
wobei die Störungserfassungseinrichtung (168, 170) eine Wartungsprozessorvorrichtung (170) aufweist, die automatisch eine Neustartprozedur auslöst, wenn die Hauptenergieversorgung (164, 165) nach Beendigung der Abschaltprozedur wiederhergestellt wurde; wobei die Neustartprozedur folgende Merkmale umfaßt: Lesen der gespeicherten Zustandsinformation aus dem nicht flüchtigen Speicher (148) und Neustarten der Prozesse und Fortsetzen der Ausführung ohne erneutes Booten; oder, wenn die Hauptenergieversorgung (164, 165) innerhalb einer vorgegebenen Zeitspanne nach Beendigung der Abschaltprozedur nicht wiederhergestellt wurde, automatisches Abschalten der Backup-Energieversorgung und Beenden der Ausführung durch die CPU.
12. System nach Anspruch 11, bei dem die Energieversorgung ein Netz-Wechselstrom ist und die Backup-Energieversorgung (162, 163) eine Batterie ist; und bei dem ein nicht flüchtiger Plattenspeicher (148) vorgesehen ist, auf den beim Abschalten der Zustand der Prozesse geschrieben wird, welche von dem Rechnersystem ausgeführt werden.
13. System nach Anspruch 11 oder 12, bei dem die Wartungsprozessorvorrichtung (170) das Rechnersystem während des Neustartprozesses nicht neu bootet sondern den Zustand wiederherstellt, der vor dem Abschaltprozeß existierte.
14. System nach Anspruch 11, 12 oder 13, bei dem die Störungserfassungseinrichtung (168, 170) eine Verzögerungsvorrichtung aufweist, die nach dem Empfang einer Anzeige der Störung eine zeitlang wartet, um zu ermitteln, ob die Störung lediglich vorübergehend ist, bevor sie den Abschaltprozeß auslöst; und bei dem die Zustandsinformation einer CPU (11, 12, 13), von Prozessen und Einrichtungen des Systems bei ausgewählten Stellen in einen flüchtigen Speicher (14, 15) geschrieben sind, wobei dann die ausgewählten Stellen während des Abschaltprozesses in den nicht flüchtigen Speicher (148) geschrieben werden.
DE69032508T 1989-12-22 1990-12-18 Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start Expired - Fee Related DE69032508T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US45506589A 1989-12-22 1989-12-22
US46140290A 1990-01-05 1990-01-05
US07/461,250 US5295258A (en) 1989-12-22 1990-01-05 Fault-tolerant computer system with online recovery and reintegration of redundant components

Publications (2)

Publication Number Publication Date
DE69032508D1 DE69032508D1 (de) 1998-08-27
DE69032508T2 true DE69032508T2 (de) 1999-03-25

Family

ID=27412627

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69032508T Expired - Fee Related DE69032508T2 (de) 1989-12-22 1990-12-18 Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start

Country Status (4)

Country Link
EP (1) EP0683456B1 (de)
JP (2) JP3030658B2 (de)
AT (1) ATE168796T1 (de)
DE (1) DE69032508T2 (de)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ATE274721T1 (de) * 2002-06-13 2004-09-15 Fujitsu Siemens Computers Llc Verfahren um einen computer aus einem cluster zu entfernen
JP2004164072A (ja) * 2002-11-11 2004-06-10 Hitachi Ltd ディスク制御装置およびディスク制御装置の制御方法
JP2004220216A (ja) * 2003-01-14 2004-08-05 Hitachi Ltd San/nas統合型ストレージ装置
US7139629B2 (en) * 2003-04-28 2006-11-21 Palo Alto Research Center Incorporated Planning and scheduling for failure recovery system and method
KR101470712B1 (ko) * 2004-07-20 2014-12-08 마이크로소프트 코포레이션 컴퓨터 애플리케이션에서의 데이터 손실을 최소화하기 위한 방법 및 시스템
US7489923B2 (en) 2005-08-05 2009-02-10 Research In Motion Limited Methods and systems for handling software operations associated with startup and shutdown of handheld devices
KR101321433B1 (ko) 2006-09-19 2013-10-25 삼성전자주식회사 컴퓨터 시스템 및 그 전원제어방법
CN101576860B (zh) * 2009-06-11 2011-06-08 成都市华为赛门铁克科技有限公司 linux或windows操作系统的测试方法及系统
GB2503439A (en) * 2012-06-26 2014-01-01 Ibm Method of restarting a software system that has unintentional shutdown.
EP3113027A4 (de) 2014-02-27 2017-11-01 Mitsubishi Electric Corporation Datenspeichervorrichtung
US9389665B1 (en) * 2015-06-19 2016-07-12 Rockwell Collins, Inc. Power warning monitor system and method
CN110908725B (zh) * 2018-08-27 2024-04-05 京东科技控股股份有限公司 应用程序启动方法、装置、电子设备及可读介质
CN109815071A (zh) * 2019-01-04 2019-05-28 珠海妙存科技有限公司 一种基于Linux系统的存储介质掉电测试方法
CN110490737B (zh) * 2019-07-29 2024-03-19 创新先进技术有限公司 交易渠道控制方法、装置和电子设备
CN111240896B (zh) * 2020-01-06 2024-04-02 深圳市卡数科技有限公司 一种终端数据同步方法、装置、服务器及存储介质
CN117290171B (zh) * 2023-11-27 2024-03-22 深圳市赛弥康电子科技有限公司 一种内存芯片测试设备及方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4228496A (en) 1976-09-07 1980-10-14 Tandem Computers Incorporated Multiprocessor system
GB2072381B (en) * 1980-03-21 1983-12-07 Philips Nv Computer controlled apparatus operated in the case of a power failure
US4453215A (en) 1981-10-01 1984-06-05 Stratus Computer, Inc. Central processing apparatus for fault-tolerant computing
US4644498A (en) 1983-04-04 1987-02-17 General Electric Company Fault-tolerant real time clock
US4733353A (en) 1985-12-13 1988-03-22 General Electric Company Frame synchronization of multiply redundant computers
US4763333A (en) * 1986-08-08 1988-08-09 Universal Vectors Corporation Work-saving system for preventing loss in a computer due to power interruption
JPS6426252A (en) * 1987-07-22 1989-01-27 Fanuc Ltd Data keeping/restoring method

Also Published As

Publication number Publication date
JP3301992B2 (ja) 2002-07-15
JPH06208477A (ja) 1994-07-26
JP3030658B2 (ja) 2000-04-10
EP0683456A1 (de) 1995-11-22
EP0683456B1 (de) 1998-07-22
DE69032508D1 (de) 1998-08-27
ATE168796T1 (de) 1998-08-15
JP2000112584A (ja) 2000-04-21

Similar Documents

Publication Publication Date Title
EP0433979A2 (de) Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start
US5317752A (en) Fault-tolerant computer system with auto-restart after power-fall
DE69126498T2 (de) Wiederherstellungsverfahren und Gerät für eine Pipeline-Verarbeitungseinheit eines Multiprozessor-systems
DE68928360T2 (de) Hochleistungsrechnersystem mit fehlertoleranter Fähigkeit; Verfahren zum Betrieb desselben
DE69032508T2 (de) Fehlertolerantes Rechnersystem mit Online-Wiedereinfügung und Abschaltung/Start
Bernstein Sequoia: A fault-tolerant tightly coupled multiprocessor for transaction processing
US5295258A (en) Fault-tolerant computer system with online recovery and reintegration of redundant components
US20230185681A1 (en) High reliability fault tolerant computer architecture
DE69424565T2 (de) Fehler-betriebssichere/fehler tolerante computerbetriebsmethode
US5220668A (en) Digital data processor with maintenance and diagnostic system
EP1980943B1 (de) Systemüberwachungseinrichtungssteuerverfahrren, programm und computersystem
US5327553A (en) Fault-tolerant computer system with /CONFIG filesystem
US5948112A (en) Method and apparatus for recovering from software faults
Ornstein et al. Pluribus: a reliable multiprocessor
DE69231452T2 (de) Fehlertolerantes Rechnersystem mit Verarbeitungseinheiten die je mindestens drei Rechnereinheiten haben
DE3751600T2 (de) Dreifachredundantes fehlererkennungssystem und entsprechendes anwendungsverfahren.
US7904906B2 (en) Tracking modified pages on a computer system
Kim Highly available systems for database applications
US20050240806A1 (en) Diagnostic memory dump method in a redundant processor
Katsuki et al. Pluribus—An operational fault-tolerant multiprocessor
JPH02202638A (ja) 多重プロセッサを備えたフォールトトレラントなコンピュータシステム
US6594709B1 (en) Methods and apparatus for transferring data using a device driver
WO2024118442A1 (en) Fault tolerant systems and methods using shared memory configurations
EP1398700A1 (de) Verfahren und Schaltungsanordnung zur Synchronisation redundanter Verarbeitungseinheiten
US7917804B2 (en) Systems and methods for CPU repair

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee