DE3687764T2 - Rechnersystem mit hoher Leistung. - Google Patents

Rechnersystem mit hoher Leistung.

Info

Publication number
DE3687764T2
DE3687764T2 DE86105879T DE3687764T DE3687764T2 DE 3687764 T2 DE3687764 T2 DE 3687764T2 DE 86105879 T DE86105879 T DE 86105879T DE 3687764 T DE3687764 T DE 3687764T DE 3687764 T2 DE3687764 T2 DE 3687764T2
Authority
DE
Germany
Prior art keywords
processor
memory
matrix
bit
register
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 - Lifetime
Application number
DE86105879T
Other languages
English (en)
Other versions
DE3687764D1 (de
Inventor
Stephen Richard Colley
David Walter Jurasek
John Franklin Palmer
William Stanley Richardson
Doran Kenneth Wilde
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.)
NCube Corp
Original Assignee
NCube Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NCube Corp filed Critical NCube Corp
Publication of DE3687764D1 publication Critical patent/DE3687764D1/de
Application granted granted Critical
Publication of DE3687764T2 publication Critical patent/DE3687764T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • G06F15/17343Direct connection machines, e.g. completely connected computers, point to point communication networks wherein the interconnection is dynamically configurable, e.g. having loosely coupled nearest neighbor architecture

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)

Description

  • Die Erfindung betrifft ein paralleles Prozessorsystem gemäß dem Oberbegriff des Anspruchs 1.
  • In der Vergangenheit hatten Datenverarbeitungssysteme, die eine parallele Verarbeitung benutzten, nur einen begrenzten kommerziellen Erfolg. Betrachtet sei beispielsweise der von der Burroughs Corporation konstruierte Illiac IV. Der Illiac IV benutzt eine Matrix aus 64 parallel arbeitenden Prozessoren mit jeweils einem lokalen Speicher, wobei sämtliche Prozessoren den gleichen Befehl ausführen. Dieses System ist als Einzelbefehls- Strom-Mehrfach-Datenstrom(SIMD)-System bekannt. Der Illiac IV ist ein sehr leistungsstarker Computer und wurde zur Lösung schwieriger wissenschaftlicher Probleme, wie z. B. solche Probleme, die das Strömen von Fluiden betreffen, benutzt. Das Illiac IV-System ist aufgrund der SIMD-Architektur schwer programmierbar. Ein bedeutenderer Nachteil ist jedoch, daß es dem System an Zuverlässigkeit mangelt. Die mittlere Ausfallzeit wird in Stunden gemessen.
  • Ein anderes SIMD-System wird von Hillis in EP-A-0 132 926 beschrieben, die einen Matrixprozessor zeigt, der eine Hyperkubustopologie hat, die einen gemeinsamen Takt und eine zentrale Befehlsheranhol/Ausführungseinrichtung verwendet, die allen Knoten der Matrix gemeinsam ist. HILLIS verwendet eine synchrone Kommunikation zwischen Prozessoren/Speichern. Wenn die Berechnung angehalten wird, dann machen dies auch alle Prozessoren/Speicher, die kommunizieren wollen, während eines Leitwegzyklus, der zu diesem Zweck reserviert ist. Die Berechnung wird dann während eines für die Berechnung reservierten Zyklus wieder aufgenommen. Es sind 32 Prozessoren/Speicher auf jedem Chip hergestellt. Eine gemeinsame Kommunikationsschnittstelleneinheit (CIU) ist außerdem auf dem Chip ausgebildet. Die CIU und eine Leitwegschaltung steuern den Fluß von Nachrichtenpaketen zwischen den Prozessoren/Speichern. Ein einziger Befehl wird von einem einzelnen am Computer gespeicherten Befehlsstrom an alle Knoten gleichzeitig ausgegeben. Jeder Knoten empfängt den Befehl und speichert den Befehl in einem Latch-Speicher zwischen. Ein PLA-Decodierer decodiert den Befehl und liest er gemäß seinem Code Daten aus dem lokalen Speicher zur Manipulation durch die ALU. Während eines Ausführungszyklus führen alle Knoten der parallelen Matrix den gleichen Befehl aus, der an den vielen Knoten kopiert wurde, aber jeder Knoten bearbeitet einen anderen Teil der gesamten Daten. Der Befehlsstrom wird von einem gemeinsamen Speicher im Computer empfangen und wird nicht von dem lokalen Knotenspeicher (RAM) empfangen. Der RAM speichert nur Daten, er speichert keine Befehle und es gibt keine Mittel an jedem Knoten zum Heranholen von Befehlen aus entweder dem lokalen Speicher (RAM) oder dem Speicher im Computer.
  • Eine Mehrbefehlsstrom-, Mehrfachdatenstrom(MIMD)-Methode für eine parallele Verarbeitung wird im COSMIC CUBE verwendet, der in den folgenden Veröffentlichungen beschrieben wird: Computer Design, Bd. 2, Nr. 4, April 1985, Seiten 59-60 und Communications of the Association of Computing Machinery, Bd. 28, Nr. 1, Januar 1985.
  • Ein Knoten im COSMIC CUBE wird aus einem Intel8086-Prozessor und einem Intel8087-Koprozessor oder einem Intel80286-Prozessor und einem Intel80287 Koprozessor gebildet. In beiden Fällen ist jeder Intel8086 bzw. 80286-Prozessor auf einem einzigen Chip vorgestellt, der von seinem eigenen internen Taktgeber getrieben wird. Jedes Chip besteht aus einem Prozessor und einem Speicher. Daten werden zwischen den Chips über einen Datenbus in Abhängigkeit von einer Entscheidungssteuerung übertragen. Daten werden zwischen Knoten mit Hilfe von Kommunikationsmitteln geleitet, die, wie HILLIS, einer Synchronisierungssteuerung unterworfen sind, die sich außerhalb der Knoten befindet.
  • Andere parallele Systeme sind für spezielle Anwendungen gebaut worden und wären für allgemeinere, wissenschaftliche Anwendungen nicht zu gebrauchen. Die Hochleistungsdatenverarbeitungssysteme, die erfolgreich waren, fallen in eine von zwei Kategorien. Die erste Kategorie ist die der sehr schnellen Hochgeschwindigkeits-Einprozessoren, die in hohem Maße zeitverschachtelt verarbeiten. Die zweite Kategorie ist die der unaufwendigen Spezialzweck-Matrixprozessoren, die Daten von einem allgemeinen Prozessor zur wissenschaftlichen Verarbeitung entnehmen. Der Cray 1 und Cyber 205 fallen in die erste Kategorie und die Gleitkomma-Systeme AP-120 fallen in die zweite Kategorie.
  • Diese älteren Systeme haben verschiedene Nachteile. Z.B. nähert sich der Cray 1 den von den physikalischen Konstanten aufgelegten Grenzen. Die Drähte müssen kurz gehalten werden und der Prozessor muß abgestimmt werden, um eine volle Leistung zu erreichen. Programme müssen vektorisiert werden, um die Pipelinestruktur auszunutzen. Wenn das nicht getan wird, läuft der Cray 1 viel langsamer als seine Maximalgeschwindigkeit. Schließlich erfordert der Cray 1 aufgrund seiner Größe und Empfindlichkeit eine teure spezielle Handhabung, wie z. B. verstärkte Fußböden, Wasserkühlung, und manuelle Abstimmung.
  • Die zweite Kategorie der bekannten Systeme (Matrixprozessoren) ist ebenfalls den physikalischen Grenzen unterworfen, die von ihnen der Geschwindigkeit des einzelnen oder der kleinen Anzahl der die Matrix bildenden Prozessoren auferlegt werden.
  • Aktuelle Versuche, die Mehrfach-Befehlsstrom-Mehrfach-Datenstrom(MIMD)-Methode zur parallelen Verarbeitung zu benutzen, läuft auf zwei bedeutsame Probleme hinaus. Das erste ist, daß bei Verwendung emittergekoppelter (ECL) Standardsschaltungen die Größe des Systems durch Zuverlässigkeitszwänge begrenzt, ist und folglich ein solches System nicht mit mehreren zehn oder hunderten von Prozessoren arbeiten würde. Als in der Vergangenheit große Matrizen wie z. B. der COSMIC CUBE, ausprobiert wurden, konnten diese aufgrund von Barrieren, die mit Taktverzerrung zu tun haben, nicht zuverlässig zu arbeiten. Taktverzerrungen bewirken Fehler an einem Knoten aufgrund von Datenverlusten während der Übertragung von einem anderen Knoten. Der Grund hierfür ist, daß jeder Knoten von seinem eigenen internen Taktgeber getrieben wird, und diese Taktgeber nicht genau mit der gleichen Frequenz arbeiten, welches die Ursache der Taktverzerrung ist. Das zweite Problem ist, daß gegenwärtige Systeme einen einzigen Speicher benutzen, den sich alle Prozessoren teilen. Das hat den Vorteil, daß einem Programmierer gestattet wird, sämtliche Daten in einem Speicher zu bewahren, aber es hat einen größeren Nachteil, daß die Systemleistung auf die Bandbreite eines einzelnen Computersystems begrenzt wird.
  • Es ist Aufgabe der vorliegenden Erfindung, ein eine parallele Verarbeitung verwendendes neues Datenverarbeitungssystem zu schaffen mit einer Systemleistung, die über dem Niveau der modernen Supercomputer liegt, das aber innerhalb des Preisbereiches eines kleinen Großrechners liegt.
  • Die obige Aufgabe wird erfindungsgemäß von einem parallelen Prozessorsystem erfüllt, das eine Mehrzahl erster Verarbeitungsknoten aufweist, von denen jeder dieser ersten Verarbeitungsknoten einen Prozessor und einen Speicher enthält, wobei in dem Speicher Daten und Befehle gespeichert sind, und wobei jeder der Prozessoren Ausführungsmittel zum Ausführen der Befehle und (mit den Ausführungsmitteln und dem Speicher verbundene Mittel zum Heranholen der Befehle aus dem Speicher enthält, dadurch gekennzeichnet, daß ein Taktgeber allen Verarbeitungsknoten gemeinsam zugeordnet ist, wobei jeder der Verarbeitungsknoten ferner mit den Ausführungsmitteln und dem Speicher verbundene Zwischenknoten-Kommunikationsmittel enthält; und daß mit sämtlichen Zwischenknoten-Kommunkationsmitteln verbundene erste Mittel die ersten Knoten in der Struktur einer ersten Matrix aus Verarbeitungsknoten verbinden, wobei diese erste Matrix eine Hyperkubustopologie hat; und wobei die Zwischenknoten-Kommunikationsmittel einen an den Taktgeber angeschlossenen und von ihm getriebenen I/O-Kanal aufweise.
  • Die Erfindung hat den Vorteil, daß aufgrund der einzigartigen Beziehung zwischen dem gemeinsamen Taktgeber und den I/O- Kanälen an allen Verarbeitungsknoten zur Zwischenknotenkommunikation die Erfindung ein Ergebnis erzielt, das einen bedeutsamen Fortschritt gegenüber dem Stand der Technik darstellt. Durch die Verwendung von I/O-Kanälen zum Verbinden der Knoten ist die Einrichtung in der Lage die Operationsergebnisse zwischen Knoten auszutauschen, ohne auf eine speziellen Taktzyklus warten zu müssen, wie es vom HILLIS gefordert wird.
  • Als in der Vergangenheit große Matrizen, wie z. B. der COS- MIC CUBE, getestet wurden, konnte diese aufgrund von Grenzen, die mit Taktverzerrungen zu tun haben, nicht zuverlässig arbeiten. Taktverzerrungen bewirken Fehler an einem Knoten aufgrund von Datenverlusten die von bei Übertragungen von einem anderen Knoten. Die Verwendung eines I/O-Kanals an den Knoten mit einem gemeinsamen Taktgeber wie als Zwischenknoten-Kommunikationsmechanismus hat die theoretischen Grenzen gesprengt.
  • Indem auf einem einzelnen Chip serielle Kommunikationskanäle, Speicherschnittstellenlogik und sämtliche CPU-Funktionen einschließlich einer Hochgeschwindigkeits-Gleitkomma- Arithmetikmit doppelter Genauigkeit gefertigt werden, wird die Komponentenzahl auf ein Minimum reduziert, wobei die Größe reduziert und die Zuverlässigkeit des Systems erhöht wird.
  • Durch die Verwendung von Matrizen aus Prozessoren mit lokalem Speicher werden einem einzelnen Prozessor oder einem Einzelspeichersystem auferlegte physikalische Grenzen vermieden und die Leistung kann so durch einfaches Hinzufügen von Verarbeitungsknoten gesteigert werden.
  • Ein einzigartiger Vorteil resultiert aus der Verwendung der Hyperkubustopologie, die in der Verbindung aller Ecken eines N- dimensionalen Kubus besteht. Da die Anzahl der Verbindungen je Prozessor mit Log2(N) ansteigt, steigt der Abstand über eine Matrix nur mit Log2(N) an. Die Anzahl der Verbindungen in einer bekannte Matrix steigt mit N. So ist die zufällige Kommunikation zwischen den Knoten in einem Hyperkubus viel schneller als in jeder Matrix, die eine feste Anzahl der Verbindungen je Knoten verwendet.
  • Der Hyperkubus ist eine rekursive Matrix, weil eine (N+ 1)dimensionale Matrix gebildet wird, indem zwei N-dimensionale Matrizen verbunden werden. Das macht es einfach, für ein Multitasking eine große Matrix in kleinere Matrizen aufzuteilen. Ferner kann Software so geschrieben werden, daß sie auf Matrizen beliebiger Größe läuft, da eine kleine Matrix logisch äquivalent zu einer größeren ist. Dies ermöglicht ein sehr effektives Multitasking, ohne Programm-Aufwand für einen Aufgabenbzw. Task-Wechsel. Es werden außerdem Systeme mit einer hohen Zuverlässigkeit erzielt, die sanft herunterschalten, wenn ein Prozessorausfall auftritt.
  • Fast alle Hochleistungssysteme haben den Nachteil, daß sie I/O-begrenzt sind; d. h. sie rechnen so schnell, daß das Bewegen von Daten in das und aus dem System einen Engpaß verursacht. In der vorliegenden Erfindung wird die I/O-Begrenzung vermindert, indem jeder Prozessor einen zusätzlichen seriellen Kanal zur Handhabung der System-I/O's an enthält. Diese Struktur ergibt eine sehr hohe I/O-Bandbreite und eine verbesserte Fehlertoleranz. Da auf jeden Knoten über das I/O-System zugegriffen werden kann, können selbst dann, wenn verschiedene Prozessoren ausfallen, die übrigen Prozessoren zu einer arbeitenden Matrix logisch rekonfiguriert werden.
  • Kurzbeschreibung der Zeichnungen
  • Fig. 1 ist eine Blockdarstellung eines Mehrprozessorsystems, in dem die vorliegende Erfindung ausgeführt ist;
  • Fig. 2a ist eine detaillierte Darstellung der Anordnung der seriellen Kommunikationsverbindungen auf der Trägerplatine des in Fig. 1 gezeigten Mehrprozessorsystems;
  • Fig. 2b ist eine detaillierte Darstellung der Signalsteuerverbindungen auf der Trägerplatine des in Fig. 1 gezeigten Mehrprozessorsystems;
  • Fig. 3 ist eine detaillierte Ausführung der Anordnung der Verarbeitungsknoten und der seriellen Kommunikationsverbindungen auf der in Fig. 1 gezeigten Prozessormatrixplatine;
  • Fig. 4 ist ein detalliertes Blockschaltbild eines einzelnen Verarbeitungsknotens auf der Prozessormatrixplatine gemäß Fig. 3;
  • Fig. 5 ist ein detalliertes Blockschaltbild der in Fig. 4 gezeigten integrierten Ncubetm-Prozessorschaltung;
  • Fig. 6 ist ein detailliertes Blockschaltbild der in Fig. 5 gezeigten Gleitkomma-Einheit;
  • Fig. 7 ist ein detailliertes Blockschaltbild der in Fig. 5 gezeigten Adreßeinheit und Befehlscache;
  • Fig. 8 ist ein detailliertes Blockschaltbild des in Fig. 5 gezeigten Befehlsdecodierer;
  • Fig. 9 ist ein detailliertes Blockschaltbild der in Fig. 5 gezeigten Ganzzahl-Ausführungseinheit;
  • Fig. 10 ist ein detailliertes Blockschaltbild eines der elf in Fig. 5 gezeigten seriellen I/O-Ports;
  • Fig. 11 ist ein detailliertes Blockschaltbild der in Fig. 5 gezeigten Speicherschnittstellenlogik;
  • Fig. 12 ist ein detailliertes Blockschaltbild der in Fig. 1 gezeigten Systemsteuerplatine;
  • Fig. 13 ist ein detailliertes Blockschaltbild der Dual- Port-Verarbeitungsknoten und der seriellen Kommunikationsverbindungen auf der in Fig. 12 gezeigten Systemsteuerplatinen-Matrix-Schnittstelle; und,
  • Fig. 14 ist ein detailliertes Blockschaltbild eines einzelnen Dual-Port-Verarbeitungsknotens der in Fig. 13 gezeigten Systemsteuerplatinen-Schnittstelle.
  • INHALTSVERZEICHNIS
  • Hintergrund der Erfindung
  • Bereich der Erfindung
  • Beschreibung des Standes der Technik
  • Kurze Zusammenfassung der Erfindung
  • Kurze Beschreibung der Zeichnungen
  • Inhaltsverzeichnis
  • Einleitende Erfindungsbeschreibung
  • TEIL I. DATENPROZESSORARCHITEKTUR
  • 1 Referenzen und Begriffsdefinitionen
  • 2 Einleitung
  • 3 Das System
  • 4 Der Prozessor
  • 4.1 Einführung
  • 4. 2 Architekturüberblick
  • 4. 2. 1 Datendarstellung 4.2.2 Register, Interrupt und Kommunikation
  • 4. 3 Datendarstellung
  • 4.3.1 Ganze Zahlen
  • 4.3.2 Reelle Zahlen
  • 4.4 Register
  • 4.4.1 Allgemeine Register
  • 4. 4. 2 Eingabe-/Ausgaberegister
  • 4. 4. 3 Prozessorregister
  • 4.5 Interrupt und Ausnahmezustände
  • 4. 5. 1 Interrupt-Definitionen
  • 4.5.2 Fehler-Flag
  • 4. 6 Kommunikation
  • 4.7 Befehlsformate und Adressierungsmoden
  • 4. 7. 1 Befehlscodeformate
  • 4.7.2 Adreßmoden
  • 4.8 Befehlssatz
  • 4. 8. 1 Befehlssatzeinzelheiten
  • 4.8. 2 Befehlsdefinitionen
  • 4. 9 Prozessorinitialisierung
  • 5 Die Software
  • 5.1 Einleitung
  • 5.2 Der Monitor
  • 5.2.1 Einleitung
  • 5. 2. 2 Monitordiagnosen
  • 5. 2. 3 ROM-Monitorkommandos
  • 5. 2. 4 RAM-Monitorkommandos 5.3 Das Betriebssystem
  • 5.3.1 Überblick
  • 5.3.2 Dateisystem
  • 5.3.3 Editieren
  • 5. 3. 4 Speicherverwaltung
  • 5. 3. 5 Prozeßverwaltung
  • 5. 3. 6 Geräteverwaltung
  • 5. 3. 7 Initialisierung
  • 5.3.8 Befehle des Betriebssystems
  • 5.3.9 Dateiformate und Konventionen
  • 5.4 Knotenkern
  • 5.4.1 Kommunikation und Synchronisation
  • 5. 4. 2 Fehlerbeseitigung (Debugging)
  • 5.4.3 Programmladen und Auflaufsteuerung
  • 5. 4. 4 Kern-Ssystemrufe
  • 6 Systemverwaltung
  • 7 Benutzung des Systems
  • 7.1 Einführung
  • 7. 2 Hyperkubus-Abbildungen
  • 7.3 Rechenbeispiel (Anwendungsprogrammierung)
  • TEIL II. DATENPROZESSORIMPLEMENTIERUNG
  • 8.0 Hauptkomponenten
  • 8. 1 Prozessormatrixplatine
  • 8.2 Trägerplatinenverbindungen
  • 8. 3 Gleitkomma-Einheit
  • 8.4 Adreßeinheit und Befehlscache
  • 8. 5 Befehlsdecodierer
  • 8. 6 Ganzzahl-Ausführungseinheit
  • 8.7 I/O-Ports
  • 8. 8 Speicherschnittstelle
  • 8. 9 Systemsteuerplatine
  • 8. 10 Systemkommunikation
  • 8.11 Systemknoten- und Platinenadressierung
  • 8.12 Variierbare Bedeutungen in den Ansprüchen
  • Ansprüche
  • Zusammenfassung
  • PART I DATENPROZESSORARCHITEKTUR 1 Referenzen und Begriffsdefinitionen
  • Als Hintergrundinformation siehe "The Extension of Object- Oriented Languages to a Homogeneous, Concurrent Architecture", Dissertation von Charles Richard Lang, Jr., Computer Science Department Technical Report Nr. 5014, California Institute of Technology, Pasadena, Kalifornien, 24. Mai 1982.
  • Die Begriffe, Syntaxnotierung usw., die in dieser Patentbeschreibung benutzt werden, entsprechen den IEEE-Standards.
  • Informationen über Ncubetm Produkte, auf die in dieser Patentbeschreibung verwiesen wird, kann man bei der Firma Ncube Corporation, 1815 NW 169th Place, Suite 2030, Beaverton, OR 97006 erhalten.
  • Informationen über Intel-Produkte, auf die in dieser Beschreibung verwiesen wird, kann man bei der Firma an die Intel Corporation, 3065 Bowers Ave., Santa Clara, CA 95051, erhalten.
  • 2 EINLEITUNG
  • Die Systemarchitektur, in welcher die vorliegende Erfindung ausgeführt ist verwendet bis zu 1024 identische Hochgeschwindigkeitsprozessoren (Verarbeitungsknoten), die in einer Matrix verbunden sind, um ein einzelnes Problem zu bearbeiten. Jeder Knoten ist ein Mehrzweck-Prozessor mit 128 Kilobytes lokalem ECC-Speicher. Es gibt acht I/O-Kanäle, die Eingaben zur und Ausgaben von der Prozessormatrix ermöglichen.
  • Wenn ein Prozessorknoten ausfällt, kann das System den Betrieb auf einer Untermatrix mit verminderter Leistung fortsetzen, wobei auf diese Weise zusätzlich zur Zuverlässigkeit eine Fehlertoleranz aufgrund kontrollierten Leistungsrückganges geschaffen wird.
  • Die Matrix ist in einer Hyperkubus (siehe Kapitel 3.2) genannten rekursiven Topologie zusammengeschaltet, die in Untermatrizen von 64, 128, 256 oder 512 Prozessoren aufgeteilt werden kann. Die Software kann sich leicht auf die Anzahl der Prozessoren in dem System einstellen. Ein Job kann auf der gesamten Matrix ablaufen oder verschiedene Jobs können gleichzeitig auf Untermatrizen ablaufen. Diese Raumaufteilung vermeidet den ständigen Auslagerungs-Mehraufwand, der in gewöhnlichen Zeitmultiplexsystemen auftritt.
  • Die Modularität dieser Konstruktion verbessert die Erweiterbarkeit. Die Architektur kann einfach durch erneute Verdrahtung der Trägerplatine eine größere Matrix unterstützen. Auch durch den Zusammenschluß von Systemen mit einem Interprozessorverbindungsglied ist es möglich, Mehrfachsysteme parallel oder als eine sehr leistungsstarke Pipeline zu verwenden.
  • 3 DAS SYSTEM 3. 1 Systemüberblick
  • Ein Ausführungsbeispiel des Systems, in welchem die Prinzipien der vorliegenden Erfindung praktiziert werden, wird ausführlich im Teil II dieser Patentbeschreibung beschrieben. Kurz gesagt, besteht es aus einem wassergekühlten Gehäuse, das eine Trägerplatine mit bis zu 24 Platinen, ein Platten/Band-Subsystem und Stromversorgungen enthält. Die in Fig. 1 gezeigte Trägerplatine (16) verwendet sechzehn Steckplätze, um eine Prozessormatrix aus bis zu 1024 Prozessoren mit jeweils 128 Kilobytes lokalem Speicher zu unterstützen. Die anderen acht Steckplätze werden für I/O benutzt. Jeder I/O-Steckplatz ist in der Matrix mit einer anderen Untermenge aus 128 Prozessoren verbunden.
  • Jeder Verarbeitungsknoten in der Verarbeitungsmatrix besitzt einen 1/2-Megaflop(Gleitkommaoperationen)- oder 2-MIP (Ganzzahloperationen)-Prozessor auf. So hat ein voll geladenes belegtes System mit 1024 Prozessoren ein Leistungspotential von 500 Megaflops oder 2000 MIPS. Jeder I/O-Bus in die Matrix hinein besteht aus zwei unidirektionalen Datenpfaden (ein ankommender, ein abgehender), die unabhängig voneinander und parallel arbeiten. Jeder Pfad kann Daten von bis zu 140 Megabytes/s. übertragen.
  • 3.2 Beschreibung der Matrix des Hyperkubus
  • Die Verarbeitungsmatrix besteht aus Prozessoren mit lokalem Speicher, die in einer Hyperkubus genannten Topologie zusammengeschaltet sind. Ein Weg zur Beschreibung eines Hyperkubus ist der graphische. Hyperkuben niedriger Ordnung können wie unten gezeigt dargestellt werden (Kreise sind Knoten und Linien Kommunikationsverbindungen):
  • ORDNUNG GRAPH DES HYPERKUBUS
  • N = 0 O
  • N = 1 0--------0
  • N=2
  • Ein anderer Weg, den Hyperkubus zu beschreiben, ist durch eine rekursive Definition. Jeder Prozessor hat ein Etikett, das eine binäre Zahl ist. Zwei Prozessoren sind verbunden, wenn sich ihre Etiketten an nur einer Stelle unterscheiden. Die Hyperkuben niedriger Ordnung sind unten aufgelistet: ORDNUNG PROZESSOR-ETIKETTEN
  • Ausgehend von einem Hyperkubus der Ordnung (N-1) ist es sehr einfach, einen Kubus der-Ordnung N zu definieren. Der (N- 1)-Hyperkubus hat Knoten, die wie folgt etikettiert sind:
  • 0xx. . .xx
  • (N-1)
  • Zunächst wird ein anderer (N-1)-Hyperkubus konstruiert der mit:
  • 1xx. . .xx
  • (N-1) bekannte Konten aufweist.
  • Und dann sind alle (N-1) Verbindungen zwischen den zwei (N- 1)-Hyperkuben so ausgebildet, daß jedes Paar von Knotenetiketten, die sich nur in ihrem am höchsten bewerteten Bit unterscheiden, verbunden sind (z. B. 010. . .01 muß verbunden sein mit 110. . .01).
  • Diese Charakterisierung des Hyperkubus zeigt zwei seiner wichtigsten Eigenschaften:
  • 1 Die Anzahl der Querverbindungen je Knoten wächst mit Log&sub2; der Prozessorenanzahl, was mehr direkte Querverbindungen ermöglicht, als die meisten Matrixschemen haben.
  • 2 Ein Hyperkubus der Ordnung N wird aus zwei Hyperkuben der Ordnung (N-1) gebildet.
  • Das ermöglicht verschiedene vorteilhafte Merkmale
  • a) Das System kann modular sein, weil eine große Matrix logisch äquivalent mit einer kleinen ist;
  • b) Software kann für einen allgemeinen Hyperkubus unabhängig von seiner Ordnung geschrieben werden - das Programm wird auf einer größeren Matrix einfach nur schneller laufen;
  • c) ein großes System kann vom Betriebssystem zwischen mehreren Benutzern aufgeteilt werden, so daß jeder einen kleineren Hyperkubus zum Abarbeiten der Benutzersoftware hat.
  • Diese Vorteile sind in einem Verbindungsschema vom üblichen ringförmigen Gittertyp nicht verfügbar. Da zwei- und dreidimensionale Gitter für viele Anwendungen aber sehr nützlich sind, ist es wichtig anzumerken, daß ein Hyperkubus auf jedes der beiden Gitter abgebildet werden kann, indem einfach einige der verfügbaren Kommunikationsverbindungen ignoriert werden.
  • 3. 2. 1 Systemsteuerplatine
  • Wenigstens eine in Fig. 1 gezeigte Systemsteuerplatine (14) muß in jedem System installiert werden und es kann bis zu acht je System geben. Ihre primäre Aufgabe ist es, das in Kapitel 5.3 beschriebene die Crosscompiler, den Assembler und den Verbinder enthaltende Betriebssystem zu betreiben und einen breiten Bereich von peripheren Geräten zu steuern. Sie benutzt einen Intel 80286 mit 4 Megabyte Speicher für die Betriebssoftware. Es gibt außerdem vier Steckplätze für EPROM's, die die in Kapitel 5.2 beschriebene Monitor- und Diagnose-Software enthalten.
  • Zusätzlich zum Haupt-Prozessor Intel 80286, der das Betriebssystem abarbeitet, hat die Systemsteuerplatine acht serielle RS-232 Ports und einen Hochgeschwindigkeits-Druckerport. Sie besitzt die Logik, um bis zu vier SMD-Plattenlaufwerke und drei Intel iSBX-Mehrmodul-Anschlüsse zu steuern. Diese Mehrmodul-Anschlüsse unterstützen Optionen wie z. B. Bandlaufwerk- Steuergeräte, Ethernet-Schnittstellen und Zwischenplatinenbusse (für I/O-Platinen> . Dieser Bus ermöglicht an verschiedene Systemsteuerplatinen angeschlossenen Benutzern, auf ein gemeinsames Dateisystem zuzugreifen, das über verschiedene Plattenlaufwerke verteilt ist, die von unterschiedlichen Steuergeräten gesteuert werden. Ein Blockschaltbild der Systemsteuerplatine zeigt Fig. 12 und wird ausführlich im Kapitel 8.9 beschrieben.
  • Die folgenden Kapitel beschreiben die Architektur des Systemsteuergerätes genauer.
  • 3. 2. 1. 1 Zentralprozessor
  • Der Zentralprozessor des Systemsteuergerätes ist ein Intel 80286. Das ist ein Hochleistungs-16-Bit-Prozessor, der einen Kompatibilitätsmodus mit dem Intel 8086 besitzt. Darüberhinaus kann er 16 Megabyte Speicher adressieren und besitzt auf dem Chip eingebaute Speicherverwaltung und -Schutz. Er ist der Leitprozessor für ein Multitasking/Mehrbenutzer-Betriebssystem. Für weitere Einzelheiten über die Programmierung des Intel 80286 siehe Intel's iAPX 286 Programmer's Reference Manual, welches bei der Intel Corporation, 3065 Bowers Ave., Santa Clara, CA 95051, erhältlich ist.
  • 3.2.1.2 Programmierbarer Nur-Lese-Speicher (PROM) des Systems
  • Das Systemsteuergerät besitzt acht Steckplätze für PROM (72), welche mit Bausteinen wie Intel 2764 bis Intel 27512 bestückt werden können. Der PROM befindet sich im Bereich F80000 bis FFFFFF im Speicherraum des Intel 80286. Weil diese Bausteine Byte-Breite besitzen, sind sie in zwei Bänken mit den folgenden Adressen angeordnet. CHIP BANK 1 (obere) 0
  • Die PROMs enthalten eine in Kapitel 5.2 beschriebenen Monitor programmiert und werden von diesem programiert, wobei der Monitor die folgenden Funktionen umfaßt:
  • 1) einen Anfangslader
  • 2) einen Debugger
  • 3) ein Diagnosepaket
  • 4) eine Offline-System-Sicherungs/Wiederherstellungseinrichtung
  • 3.2.1.3 Globaler Speicher mit wahlfreiem Zugriff (RAM)
  • Es gibt 2 Megabyte eines globalen Dual-Port-Speicher (214) auf der in Fig. 12 gezeigten Systemsteuerplatine. Auf diesen Speicher kann sowohl von dem Intel 80286 (Block 222) als auch dem SMD-Plattensteuergerät (216) direkt zugegriffen werden, und der Speicher befindet sich im Bereich von 0 bis 1FFFFF im Systemspeicherraum.
  • 3.2.1.4 Lokale I/O-Matrix
  • Es gibt auf der Systemsteuerplatine eine lokale Matrixschnittstelle (212) aus sechzehn Verarbeitungsknoten. Jeder Knoten weist einen Prozessor und 128 Kilobytes RAM auf. Dieser Speicher weist drei Ports auf, weil auf ihn vom lokalen Prozessor, dem Intel 80286 und dem SMD-Plattensteuergerät direkt zugegriffen werden kann. Sämtliche Zugriffe des Intel 80286 und des Plattensteuergeräts auf diesen lokalen Speicher sind nur 16-Bitzugriffe. Die Hauptaufgabe dieser Matrix (214) ist es, eine Kommunikation (eine I/O-Bus) mit der Hauptverarbeitungsmatrix zu schaffen. Auf diese Weise sind an jedem Knoten acht der elf Kanäle der Kommunikation zwischen der Verarbeitungsmatrix und dem Systemsteuergerät gewidmet. Die Knoten auf der Systemsteuerplatine sind mit 0,1,. . .,15 numeriert und ihre lokalen Speicher halten sich gemäß der folgenden Tabelle im Adreßraum des Intel 80286 auf.
  • Prozessornummer Adresse
  • 0 200000 bis 21FFFF
  • 1 220000 bis 23FFFF
  • 2 240000 bis 25FFFF
  • 3 260000 bis 27FFFF
  • 4 280000 bis 29FFFF
  • 5 2A0000 bis 2BFFFF
  • 6 2C0000 bis 2DFFFF
  • 7 2E0000 bis 2FFFFF
  • 8 300000 bis 3IFFFF
  • 9 320000 bis 33FFFF 10 340000 bis 35FFFF
  • 11 360000 bis 37FFFF
  • 12 380000 bis 39FFFF
  • 13 3A0000 bis 3BFFFF
  • 14 3C0000 bis 3DFFFF
  • 15 3E0000 bis 3FFFFF
  • Da die lokalen Verarbeitungsknoten auf dem Systemsteuergerät jeweils drei nicht an die I/O vergebene Kommunikationskanäle besitzen, sind sie zu zwei Hyperkuben der Ordnung 3 verbunden. D.h., die Knoten mit den Nummern 0,1,. . .,7 bilden einen Hyperkubus und die Knoten mit den Nummern 8,9,. . . ,1s bilden einen weiteren Hyperkubus. Das ermöglicht den Benutzern, ihre Programme auf den kleinen Hyperkuben der Systemsteuerplatine zu testen, bevor sie sie in die Hauptmatrix geladen werden, und somit die meisten Fehlerbeseitigungsaufgaben zu entlasten. Es mag scheinen, daß es schwierig wäre, Daten von einem Knoten in dem einen Kubus zu einem Knoten in dem anderen Kubus zu transportieren, weil die beiden Hyperkuben nicht direkt verbunden sind. Jedoch geht es einfach und schnell, den Zentralprozessor oder den DMA-Prozessor zum Transport der Daten zu verwenden, weil sich der gesamte Speicher in dem Speicherraum des Intel 80286 befindet.
  • 3. 2. 1 .5 SBX-Steckverbinder
  • Es gibt drei Intel-iSBXTX-Steckverbinder (78) auf der Systemsteuerplatine. Intel und andere Unternehmen stellen eine große Auswahl breiten Bereich kleiner Platinen für den SBX-I/O- Bus her. Es gibt Platinen für mathematische Hochgeschwindigkeitsverarbeitungen, Graphik, Plattenlaufwerkssteuergeräte, Floppy-Disk-Steuergeräte, Netzwerksteuergeräte, usw.. Wenn ein System mehr als eine Systemsteuerung enthält, ist auf jeder Platine eine der SBX-Verbindungsstellen zur Implementierung eines lokalen Busses reserviert, so daß das Betriebssystem, insbesondere das Dateisystem, über die Plattenlaufwerke verteilt werden kann, die von sämtlichen Systemsteuerungen gesteuert werden. So muß sich der Benutzer nicht damit befassen, mit welcher Platine ein Eingabeanschluß verbunden ist.
  • Die Bausteine, die in den SBX-VSteckverbinder eingesteckt werden, erscheinen dem Programmierer als Plätze im 80286-I/O- Raum, aus dem gelesen und in den geschrieben werden kann. Sie gönnen auch vom ADMA (Erweiterter direkter Speicherzugriff-Chip Intel 82258) gesteuert werden. Die Platinen können Interrupts für den Intel 80286 erzeugen (für Details über Interrupts für den siehe Kapitel 3.3.2.1.10). Die gelesenen oder geschriebenen Daten können entweder Bytes oder Halbwörter sein, und jeder SBX-Steckverbinder hat 32 reservierte I/O-Adressen (3 Adreßbits und 2 Chip-Auswahl-Bits), wie im folgenden gezeigt wird.
  • SBX-Steckverbinder I/O-Adresse Interrupt-Vektor
  • 1 A0 bis Af und B0 bis BF #82 bei 148
  • 2 80 bis 8F und 90 bis 9F #81 bis 144
  • 3 60 bis 6F und 70 bis 7F #80 bis 140
  • Es gibt zwei Arten von SBX-Bausteinen, 8-Bit und 16-Bit- Bausteine, aber beide Platinen sind äquivalent bezüglich zweier 8-Bit-Register, die von den Chip-Auswahl-Bits (MCS0, MCS1) aktiviert werden. Die folgende Tabelle enthält die Einzelheiten der Datenübertragung. Die Spaltenbausteine und Daten beziehen sich auf die Bitanzahl im Baustein bzw. in den zu übertragenen Daten. Baustein Daten Register Adressen
  • 3.2.1.6 Drucker(Centronics)-Port
  • Es gibt einen Hochgeschwindigkeits-Drucker-I/O-Port auf der Systemsteuerplatine. Er unterstützt das Centronics-Protokoll mit acht Datenbits und vier Statusbits. Er ist für ein peripheres Hochgeschwindigkeitsgerät, wie z. B. einen Drucker oder Plotter bestimmt. Er befindet sich im I/O-Raum des Intel 80286 an dem Platz 14 und besitzt außerdem DMA-Fähigkeit, da er vom Intel-82258-ADMA-Baustein (80) gesteuert werden kann. Wenn auf diese Adresse zugegriffen wird, führt das System die folgenden Funktionen aus. (Beim Lesen liefern die Bits 12 bis 15 den allgemeinen Systemstatus, nicht den Druckerstatus.)
  • Schreibe I/O-Adresse 14:
  • Bits 0-7: Druckerdaten
  • Bits 8-15: Centronics-Steuersignale
  • Lese I/O-Adresse 14:
  • Bits 0-7: Druckerdaten
  • Bit 8: 1 = Druckerauswahl
  • Bit 9: 1 = Druckerpapierfehler
  • Bit 10: 1 = Druckerfehler
  • Bit 11: 1 = Drucker besetzt
  • Bit 12: 1 = Diagnosemodus, 0 = Normalmodus
  • Bit 13: reserviert
  • Bit 14: reserviert
  • Bit 15: 1 = Hauptstromversorgung (-5) ordnungsgemäß
  • 3.2.1.7 Steuergerät für den direkten Speicherzugriff (DMA)
  • Die Systemsteuerplatine weist einen Intel 82258 ADMA-Bau- Stein (80) auf, der den direkten Speicherzugriff im System steuert. Er ist insbesondere dafür vorgesehen, die drei SBX- Steckverbinder und den parallelen Centronics-Port zu steuern. Jedoch ist er ein sehr leistungsstarker Prozessor und kann andere DMA-Funktionen in dem System einschließlich der Datenblockübertragung im Speicher steuern. Für Einzelheiten wird auf Intels 82258-Handbuch verwiesen.
  • Der Intel 82258 hat vier DMA-Kanäle, von denen jeder einen ihm zugeordneten Registersatz hat. Es gibt außerdem einen Satz globaler Register. Sämtliche Register befinden sich im Intel- 80286-I/O-Adreßraum, wie in der folgenden Tabelle gezeigt wird. Globale Register Bits I/O Adr Befehl Status Modus Übertragungsblock Verzögerung Kanalregister I/O-Adressen Bits DMA Befehlszeiger Quellenzeiger Zielzeier Übersetzungstabelenzeiger Listenzeiger Bytezähler Kanalbefehl Maske Vergleiche Baugruppe Kanalstatus
  • Die Kanalregister können beschrieben werden, indem der Befehlszeiger so gesetzt wird, daß er auf einen Befehlsblock im Speicher zeigt, und danach dem Intel 82258 vom Intel 80286 ein STARTE-KANAL-Befehl gegeben wird. Das Format des Befehlsblocks im Speicher ist im folgenden gezeigt: Typ 1 Befehl Befehlszeiger Quellenzeiger Zielzeiger Befehlsblock Bytezähler Kanalstatus Befehlserweiterung Maske Vergleiche Befehlsblockerweiterung Übersetze Zeiger
  • 3.2.1.8 Serielle Kanäle
  • Die in Fig. 12 gezeigte Systemsteuerplatine hat acht serielle Kanäle, die von vier seriellen Kommunikationssteuergeräten (82) Intel 8530 gesteuert werden, wobei jeder Baustein zwei Kanäle behandelt. Jeder 8530 hat außerdem zwei Baudratengeneratoren und eine Interrupt-Erzeugungslogik. Es gibt einen Satz Steuer(Schreib)-Register und einen Satz Status(Lese)-Register für jeden Kanal. Die Register umfassen jeweils acht Bits und alle Zugriffe erfolgen byteweise. Eine Zusammenfassung der Registerfunktionen ist-im folgenden aufgelistet (wenn nichts anderes angemerkt ist, existieren zwei Kopien von jedem Register, eine für jeden Kanal):
  • LESE-REGISTER-FUNKTIONEN
  • RR0: Sende/Empfangspuffer-Status und externer Status
  • RR1: Spezial-Empfangs-Bedingungs-Status
  • RR2: Interrupt-Vektor gerade Kanäle = unverändert; ungerade Kanäle = verändert
  • RR8: Empfangspuffer (Daten)
  • RR10: Verschiedene Statusanzeigen
  • RR12: unteres Byte der Baudratengeneratorzeitkonstante
  • RR13: oberes Byte der Baudrategeneratorzeitkonstante
  • RR15: Externe/Status-interrup-Informationen
  • SCHREIB-REGISTER-FUNKTONEN
  • WR0: Initialisierungsbefehle für Adressierung, Moden, CRC
  • WR1: Sende/Empfangs-Interrupt und Datenübertragungs-Modus-Definition
  • WR2: Interrupt-Vektor (Zugriff durch einen von beiden Kanälen) nur ein WR2je 8350
  • WR3: Empfangsparameter und Steuerung
  • WR4: verschiedene Sende/Empfangs-Parameter und -Moden
  • WR5: Sende-Parameter und Steuerung
  • WR6: Synchronisationszeichen oder SDLC-Adreßfeld
  • WR7: Synchronisationszeichen oder SDLC-Flag
  • WR8: Sendepuffer (Daten)
  • WR9: Master-Interrupt-Steuerung und Rücksetzen (Zugriff durch einen von beiden Kanälen) nur ein WR9 je 8350
  • WR 10: verschiedene Sender/Empfänger-Steuerbits
  • WR11: Taktmoden-Steuerung
  • WR12: unteres Byte der Baudratengeneratorzeitkonstante
  • WR13: oberes Byte der Baudratengeneratorzeitkonstante
  • WR14: Verschiedene Steuerbits
  • WR15: Externe/Status-Interrupt-Steuerung
  • Die einzigen Register, die im I/O-Raum des Intel 80286 direkt adressiert werden können, sind die zwei Datenregister (RR8 iMd WR8) und RR0 und WR0. Um eines der anderen Register lesen oder beschreiben zu können, sind zwei Schritte erforderlich:
  • (1) Schreiben des geeigneten Codes in WR0, dann (2) Durchführung der Lese- oder Schreib-Operation.
  • Nachdem das getan ist, werden die Bits 0 bis 4 von WR0 automatisch gelöscht, so daß WR0 wieder auf WR0 oder RR0 zeigt. Die I/O-Adressen, die den 8530-Bausteinen und den I/O-Kanälen entsprechen, sind in der folgenden Tabelle aufgelistet. Jeder Kanal kann vier Interrupts erzeugen, um die Zustände anzuzeigen: Tx leer, Statuswechsel, Rx bereit und Spezial Rx. Die Adressen der Interrupt-Vektoren (angenommen, die gegebenen Vektorbasen werden verwendet) sind auch ebenfalls aufgelistet. (Um die Interrupt-Nummer zu erhalten, ist die Vektoradresse durch 4) zu teilen. Baustein SSC Kanäle I/O-Adressen Status Daten Vektoradresse Vektorbasis Tx leer kStatuswechsel Rx bereit Spezial Rx
  • Jedes serielle Kanalsteuergerät (82) hat einen integrierten Baudratengenerator, der vom Einstellen einer Zeitkonstante abhängt, die von einer Echtzeituhr (84) angelegt wird. Die Gleichung und eine Baudratentabelle sind im folgenden gegeben.
  • Taktrate: 1,8432 MHz
  • Gleichung: Zeitkonstante = (57600/Baudrate)-2 Tabelle
  • Baudrate Zeitkonstante
  • 19200 1
  • 9600 4
  • 4800 10
  • 3600 14
  • 2400 22
  • 2000 27
  • 1800 30
  • 1200 46
  • 600 94
  • 300 190
  • 150 382
  • 134,5 426
  • 110 522
  • 75 766
  • 50 1150
  • 3. 2. 1. 9 SMD-Plattensteuergerät
  • Das Systemsteuergerät hat eine SMD-Plattensteuergeräteeinheit (216). Sie ist in der Lage, bis zu vier Standard-SMD-Plattenlaufwerke zu steuern. Auf Daten wird in Blöcken von 1024 Bytes mit einer Rate von 1 Megabyte/s zugegriffen. Die Plattensteuergeräteinheit besteht aus sechs Registern im I/O-Adreßraum, welche im folgenden beschrieben werden. 1) Befehl/Status-Register:
  • I/O-Adresse: 00
  • Schreibe: Befehl Bit 0 Bit 2 Suche- & Lese-Sektor Setze Plattenfehler zurück & rekalibriere Suche & Schreibe Sektor Suche & Formatiere Sektor Lese Sektor & kein Test Suche einen speziellen Sektor reserviert Suche & Formatiere-Sektor vom Speicher Bit 3 Bit 15 unberücksichtigt
  • Lese: Status Bit 0: Befehlsbit 0
  • Bit 1: Befehlsbit 1
  • Bit 2: Befehlsbit 2
  • Bit 3: 1 = Kopfteil-Synchronisationsfehler
  • Bit 4: 1 = Kopfteil-Adreß-fehler
  • Bit 5: 1 = Kopfteil-CRC-Fehler
  • Bit 6: 1 = Datensynchronisationsfehler
  • Bit 7: 1 = Daten-CRC-Fehler
  • Bit 8: 1 = Daten-Überlauf/Unterlauf-Fehler
  • Bit 9: 1 = illegaler Speicherzugriff
  • Bit 10: 1 = Steuergerät bereit
  • Bit 11: 1 = Platte bereit
  • Bit 11: 1 = Platte ausgewählt
  • Bit 13: 1 = Suchfehler
  • Bit 14: 1 = Schreibfehler
  • Bit 15: 1 = Plattenfehler 2) Steuerung
  • I/O-Adresse: 02
  • Lese und Schreibe Bit 0 Bit 1 Auswahl der Einheit:
  • Bit 2: reserviert (muß 0 sein)
  • Bit 3: reserviert (muß 0 sein)
  • Bit 4: 1 = Servo-Offset +
  • Bit 5: 1 = Servo-Offset -
  • Bit 6: 1 = Daten-Strobe früh
  • Bit 7: 1 = Daten-Strobe spät
  • 3) Niedrige Speicheradresse
  • I/O-Adresse: 04
  • Lese und Schreibe (wenn das Steuergerät besetzt ist, kann Lesen ungültig sein) Bit 0 Bit 15 Teil der Speicheradresse mit niedriger Ordnung
  • 4) Hohe Speicheradresse
  • I/O-Adresse: 06
  • Schreibe Bit 0 Bit 7 niederwertiger Teil der Speicheradresse Bit 8 Bit 15 unberücksichtigt
  • Lese Bit 0 Bit 7 höherwertiger Teil der Speicheradresse
  • Bit 8: 0 = Platte 0 verbunden
  • Bit 9: 0 = Platte 1 verbunden
  • Bit 10: 0 = Platte 2 verbunden
  • Bit 11: 0 = Platte 3 verbunden
  • Bit 12: reserviert
  • Bit 13: reserviert
  • Bit 14: reserviert
  • Bit 15: reserviert
  • 5) Kopf/Sektor
  • I/O-Adresse: 08
  • Lese und Schreibe Bit 0 Bit 5 Sektor-Selektor
  • Bit 6: reserviert
  • Bit 7: reserviert Bit 8 Bit 11 Kopf-Selektor
  • Bit 12: reserviert
  • Bit 13: reserviert
  • Bit 14: reserviert
  • Bit 15: reserviert
  • 6) Zylinder
  • I/O-Adresse: 0A
  • Lese und Schreibe Bit 0 Bit 11 Zylinder-Selektor
  • Bit 12: reserviert
  • Bit 13: reserviert
  • Bit 14: reserviert
  • Bit 15: reserviert
  • Zusätzlich zu den oben aufgelisteten Registern gibt es zwei weitere I/O-Adressen und ein dem Plattensteuergerät zugeordnetes Interrupt. Ein Schreiben an die I/O-Adressen veranlaßt das Plattensteuergerät, freigegeben oder gesperrt zu werden. Das Lesen von diesen Adressen liefert ein Systemidentifizierer ID (siehe 3.3.2.1.10). Das Interrupt zeigt an, daß ein Plattenzugriff beendet wurde. Die Adressen und Interrupt-Nummern werden im folgenden angegeben.
  • 1) Schreibe 18: Sperre das Plattensteuergerät
  • 2) Schreibe 1A: gebe das Plattensteuergerät frei
  • 3) Interrupt 83 (Vektoradresse 14C): Plattenzugriff abge schlossen.
  • 3. 2. 1. 10 Systemsteuerung
  • Es gibt einen Satz von I/O-Adressen, der den verschiedenen Aspekten der Systemsteuerung zugeordnet ist. Die Steuerungsaufgaben umfaßt die Stromversorgungsüberwachung und die Ablaufsteuerung, die Fehlererfassung und -signalisierung das Zurücksetzen der und Platinen. Alle Adressen und Steuerungsaufgaben werden im folgenden beschrieben:
  • 1) Matrix-Rücksetzen
  • I/O-Adresse: 10
  • Lese und Schreibe (Schreiben verursacht das Zurücksetzen>
  • Für k = 0,1. . .,15
  • Bit k: setzt Platine k im Steckverbinder Jn zurück, wobei n = 20-k
  • 2) Steuerung
  • I/O-Adresse: 12
  • Lese und Schreibe
  • Bit 0: 0 = Aktiviere System-Speicher-Fehler-Korrektur
  • Bit 1: 0 = SyStemspeicher-Prüfbit-Schreib-Freigabe
  • Bit 2: 1 = Frontabdeckung-Lichtanzeige #1
  • Bit 3: 1 = Frontabdeckung-Lichtanzeige #2
  • Bit 4: 0 = Rücksetzung des reservierten Speicherfehlers (Versuch auf Plätze zwischen PROM und RAM zuzugreifen) - zur Fehler-Latch-Speicherung muß Bit=1 und NMI freigegeben sein
  • Bit 5: 0 = Rückstellung des Frontabdeckung-Interrupts - zur Fehler-Latch-Speicherung muß Bit=1 und NMI freigegeben sein
  • Bit 6: 1 = Aktiviere nicht maskierbares Interrupt (NMI)
  • Bit 7: 1 = Schalte (+5)-Stromversorgungen ab
  • Bit 8: 1 = Schalte (+24)-Stromversorgung ein
  • Bit 9: 1 = Schalte (+12)-Platten-Stromversorgung ein
  • Bit 10: 1 = Schalte (+5)-Plattenversorgung ein
  • Bit 11: 1 = Schalte (+12)-Stromversorgung ein
  • Bit 12: 1 = Schalte (-5) und (-12)Stromversorgungen ein
  • Bit 13: 1 = Schalte (-12) Plattenstromversorgung ein
  • Bit 14: 0 = Setze lokale Hyperkuben zurück
  • Bit 15: 0 = Ventilatoren ein (1 = Ventilatoren aus)
  • 3) Rücksetzung/Status
  • I/O-Adresse: 16
  • Schreibe--Rücksetzen Setze lokalen Matrix-ECC-Fehler zurück (Daten = nicht berücksichtigen) Lese--Status
  • Bit 0: 1 = #1 (+5)-Stromversorgung ordnungsgemäß
  • Bit 1: 1 = #2 (+5)-Stromversorgung ordnungsgemäß
  • Bit 2: 1 = #3 (+5)-Stromversorgung ordnungsgemäß
  • Bit 3: 1 = #4 (+5)-Stromversorgung ordnungsgemäß
  • Bit 4: 1 = Haupt-(+12)-Stromversorgung ordnungsgemäß
  • Bit 5: 1 = Haupt-(-12)-Stromversorgung ordnungsgemäß
  • Bit 6: 1 = Platten-(+24)-Stromversorgung ordnungsgemäß
  • Bit 7: 1 = Platten-(+12)-Stromversorgung ordnungsgemäß
  • Bit 8: 1 = Platten-(+5)-Stromversorgung ordnungsgemäß
  • Bit 9: 1 = Platten-(-12)-Stromversorgung ordnungsgemäß
  • Bits 10-15 nicht maskierbares Interrupt (NMI)
  • Bit 10: 0 = illegaler Speicherzugriff-Interrupt
  • Bit 11: 0 = Systemspeicher-ECC-Interrupt
  • Bit 12: 0 = lokale-Speichermatrix-ECC-Interrupt
  • Bit 13: 0 = Frontabdeckungs-Interrupt
  • Bit 14: 0 = Überwachungszeitgeber-Interrupt
  • Bit 15: 0 = Stromversorgungsausfall-Interrupt
  • 4) Platten-Sperren/System ID
  • I/O-Adresse: 18
  • Schreibe-- Sperren
  • Sperre Plattensteuergerät (Daten = nicht berücksichtigen)
  • Lese--System ID
  • Bits 0 bis 2: I/O-Steckplatznummer
  • Bits 3 bis 15: niederwertiger Teil des System ID
  • 5) Plattenfreigabe/System ID
  • I/O-Adresse: 1A
  • Schreibe--Freigabe
  • Gib Plattensteuergerät frei (Daten = nicht berücksichtigen)
  • Lese--System ID
  • Bits 0 bis 7: höherwertiger Teil des System-ID
  • 6) Rücksetzen/ECC
  • I/O-Adresse: 1C
  • Schreibe--Setze zurück -- Setze Systemspeicher-ECC-Fehler zurück (Daten = nicht berücksichtigen)
  • Lese-ECC
  • ECC-Syndrom--die folgende Tabelle zeigt die Interpretation des Syndroms an. Syndrom-Decodierung 1) Bits 7,6 = Speicher-Bank 2) Bits 5,4,3,2,1,0 = Tabelle Bits
  • N = Kein Fehler
  • CBX = Fehler im Prüfbit X
  • X = Fehler im Bit X
  • D = Doppelbitfehler
  • 3.2.1.11 Temperatursensoren
  • Das System enthält sechzehn temperaturempfindliche Bauelemente, die überall im Gehäuse angeordnet sind. Sie werden verwendet, um einen Systemschaden aufgrund von Überhitzung zu vermeiden. Um einen Sensor zu triggern und eine Messung vorzunehmen, muß Software die folgenden Schritte ausführen:
  • 1) Schreibe an eine der I/O-Adressen 38, 3A, 3C oder 3E
  • Bits 0 bis 3: Auswahl eines der 16 Sensoren
  • Bits 4 bis 15: unberücksichtigt
  • 2) Schreibe wenigstens zwei Mikrosekunden später an dieselbe Adresse mit den gleichen Daten (der Sensor-Multiplexer erfordert eine Einschwingzeit). Nachdem die Temperatur erfaßt wurde, wird ein Interrupt erzeugt: Interrupt #86 (Vektor auf Speicheradresse 158)
  • 3) Lese von derselben Adresse
  • Bits 0 bis 7: gemessene Temperatur
  • Bits 8 bis 15: reserviert
  • 3.2.1.12 Echtzeituhr
  • Die Systemsteuerplatine hat eine Echtzeituhr (84), der durch das Schreiben und Lesen der folgenden I/O-Adressen gesteuert und abgetastet wird.
  • 1) Steuerung/Status
  • I/O-Adresse: 40
  • Schreibe--Steuerung
  • Bit 0: 0 = Interrupt läuft; 1 = Interrupt stoppt
  • Bit 1: 0 = Wähle Uhrsetz-Register -1 = Wähle Interrupt-Register --: Siehe (2)
  • Bit 2: 0 = Uhrläufer; 1 = Uhr stoppt
  • Bit 3: 0 = Normalmodus; 1 = Testmodus
  • Bits 4 bis 15: nicht berücksichtigen
  • Lese-Status
  • Bit 0: Interrupt-Flag (wie beim Schreiben)
  • Bit 1: 0
  • Bit 2: 0
  • Bit 3: Datenwechsel-Flag
  • Bits 4 bis 15: reserviert
  • 2) Setzen/Interrupt
  • I/O-Adresse: 5E
  • Lese und Schreibe
  • Wenn Steuerung/Status (40)-Bit 0 = 0
  • Bit 0: 0 = 12 Stundenmodus; 1 = 24-Stundenmodus
  • Bit 1: 0 = AM; 1 = PM (0 im 24-Stundenmodus) Bit 2 Bit 3 Schaltjahr-Zähler (00=Schaltjahr) Wenn Steuerung/Status (40)-Bit 0=1 Bit 0 bit 1 Bit 2 Bit 3 Interruptdauer (siehe Tabelle unten) 0 = Einzelinterrupt 1 = Wiederholte Interrupt
  • Interruptdauer Bits 2, 1, 0
  • Kein Interrupt 000
  • 0,1 Sekunden 001
  • 0,5 Sekunden 010
  • 1,0 Sekunden 011
  • 5,0 Sekunden 100
  • 10,0 Sekunden 101
  • 30,0 Sekunden 110
  • 60,0 Sekunden 111
  • 3) Zeit-Setzen/Lesen
  • Schreibe (Setzen) und Lese (Erfassen)
  • I/O-Adresse Funktion
  • 42 mehrere 10 Sekunden (nur Lesen)
  • 44 Sekunden
  • 46 mehrere 10 Sekunden
  • 48 Minuten
  • 4A mehrere 10 Minuten
  • 4C Stunden
  • 4E mehrere 10 Stunden
  • 50 Tage
  • 52 mehrere 10 Tage
  • 54 Monate
  • 56 mehrere 10 Monate
  • 58 Jahre
  • 5A mehrere 10 Jahre
  • 5C Wochentage (Modulo 7-Zähler)
  • Das der Echtzeituhr zugeordnete Interrupt ist: Interrupt #72 (Vektor auf Speicheradresse 120)
  • 3.2.1.13 Zeitgeber
  • Zusätzlich zur Echtzeituhr hat die Systemsteuerung zwei Zeitgeber. Sie werden von einem Intel 8254 gebildet, dem vier I/O-Adressen zugeordnet sind. Die zwei Zeitgeber werden der Überwachungszeitgeber und der Zeitplangeber genannt. Sie benutzen beide denselben Vorteiler, aber der Überwachungszeitgeber erzeugt ein nicht maskierbares Interrupt (NMI) während der Zeitplangeber ein Interrupt 32 erzeugt. Ihre Adressen sind unten aufgelistet. Der Zeitgeber wird durch Schreiben an das Steuerregister eingestellt. Die Zeitbasis wird unten ebenfalls angegeben. Einheit I/O-Adresse Interrupt Vorteiler Überwachungszeitgeber Zeitplangeber Steuer ung (nur Schreiben) Zeitbasis
  • 3. 2. 1. 14 Interrupt-Steuergerät
  • Das System sieht Interrupts in vollem Umfang für verschiedene Systemsteuerfunktionen vor. Diese Interrupts werden von fünf Interrupt-Controllen Intel 8259A verarbeitet. Einer dieser Bausteine ist als Master-Steuergerät gekennzeichnet, und er besitzt zwei mit ihm verbundene Slave-Steuergeräte (Slave-Steuergeräte 0 und Slavesteuergeräte 1). Die letztgenannten beiden 8259A werden verwendet, um Fehlerzustände in der Hauptmatrix zu signalisieren, und sind mit dem Slave verbunden. Die Hauptmatrix-Fehler-Steuergeräte müssen im Abrufbetrieb verwendet werden. Die folgende Tabelle listet die Steuergeräte, ihre Adressen auf und definiert die Interrupts, die sie verarbeiten. Kapitel 3.3.2.1.14 listet die Interrupts und Vektoradressen auf, die von diesen Steuergeräten erzeugt werden. Einzelheiten zur Programmierung des 8259A können im Intel-Datenkatalog gefunden werden.
  • 1) Master-Interrupt-Steuergerät
  • I/O-Adressen:
  • CO: ICW1, OCW2, OCW3 (nur Byte-Zugriff)
  • C2: ICW2-4, Masken-Register (nur Byte-Zugriff)
  • Angeschlossene Interrupts:
  • 0: Zeitplanzeitgeber
  • 1: serielles Kanalsteuergerät 0
  • 2: serielles Kanalsteuergerät l 3: serielles Kanalsteuergerät 2
  • 4: serielles Kanalsteuergerät 3
  • 5: Slave-Interrupt-Steuergerät 0
  • 6: Slave-Interrupt-Steuergerät 1
  • 7: reserviert (geerdet)
  • 2) Slave-Interrupt-Steuergerät 0
  • I/O-Adressen:
  • C8: ICW1, OCW2, OCW3 (nur Byte-Zugriff) CA: ICW2-4, Masken-Register (nur Byte-Zugriff)
  • Angeschlossene Interrupts
  • 0: Echtzeituhr
  • 1: Lokaler Matrixfehler
  • 2: Hauptmatrixfehler (siehe 4 unten)
  • 3: DMA-Kanal 0 (Ende des DMA)
  • 4: DMA-Kanal 1 (Ende des DMA)
  • 5: DMA-Kanal 2 (Ende des DMA)
  • 6: DMA-Kanal 3 (Ende des DMA)
  • 7: reserviert (geerdet)
  • 3) Slave-Interrupt-Steuergerät 1
  • I/O-Adressen:
  • CC: ICW1, OCW2, OCW3 (nur Byte-Zugriff)
  • CE: ICW2-4, Masken-Register (nur Byte-Zugriff)
  • Angeschlossene Interrupts
  • 0: SBX 3 Interrupt
  • 1: SBX 2 Interrupt
  • 2: SBX 1 Interrupt
  • 3: Plattensteuergerät-Interrupt
  • 4: Abschalt-Interrupt
  • 5: Drucker-Interrupt
  • 6: Interrupt "Temperaturerfassung fertig"
  • : reserviert (geerdet)
  • 4) Hauptmatrix-Interrupt-Steuergerät
  • I/O-Adressen:
  • C4: ICW1, OCW2, OCW3 (nur 16 Bit-Zugriff)
  • C6: ICW2-4, Masken-Register (nur 16 Bit-Zugriff)
  • Angeschlossene Interrupts
  • Ebene Niedrigwertiges Datenbyte hochwertiges Datenbyte
  • 0 Platine 0 (J20) Platine 8 (J12)
  • 1 Platine 1 (J19) Platine 9 (J11)
  • 2 Platine 2 (J18) Platine 10 (J10)
  • 3 Platine 3 (J17) Platine 11 (J9)
  • 4 Platine 4 (J16) Platine 12 (J8)
  • 5 Platine 5 (J15) Platine 13 (J7)
  • 6 Platine 6 (J14) Platine 14 (J6)
  • 7 Platine 7 (J13) Platine 15 (J5)
  • 3.2.1.15 Interrupts
  • Die Systemsteuerung erzeugt und verarbeitet zur Systemverwaltung einen vollständigen Satz von Interrupts. Die Interrupts
  • sind in der folgenden Tabelle definiert.
  • Vektor Adresse Funktion 0 00 Divisionsfehler
  • 1 04 Einzelschritt
  • 2 08 nicht maskierbares Interrupt (NMI)
  • 3 0C Unterbrechungspunkt
  • 4 10 Überlauf (festgestellt vom INTO-Befehl)
  • 5 14 Bereichsgrenzüberschreitung
  • 6 18 ungültiger Befehlscode
  • 7 1C Prozessorerweiterung nicht verfügbar
  • 8 20 zu kleine Interrupts-Tabelle
  • 9 24 Prozessorerweiterungssegment-Überlauf
  • 10-12 28-30 reserviert
  • 13 34 Segment-Überlauf
  • 14-15 38-3C reserviert
  • 16 40 Prozessorerweiterungsfehler
  • 17-31 44-7C reserviert
  • 32 80 Zeitplangeber (benutzte Vektorbasis 20M)
  • 33-39 84-9C reserviert
  • 40 A0 serieller Kanal 0 Tx leer
  • 41 A4 serieller Kanal 0 Statuswechsel
  • 42 A8 serieller Kanal 0 Rx bereit
  • 43 AC serieller Kanal 0 Spezial Rx
  • 44 B0 serieller Kanal 1 Tx leer
  • 45 B4 serieller Kanal 1 Statuswechsel
  • 46 B8 serieller Kanal 1 Rx bereit
  • 47 BC serieller Kanal 1 Spezial Rx
  • 48 C0 serieller Kanal 2 Tx leer
  • 49 C4 serieller Kanal 2 Statuswechsel
  • 50 C8 serieller Kanal 2 Rx bereit
  • 51 CC serieller Kanal 2 Spezial Rx
  • 52 D0 serieller Kanal 3 Tx leer
  • 53 D4 serieller Kanal 3 Statuswechsel
  • 54 D8 serieller Kanal 3 Rx bereit
  • 55 DC serieller Kanal 3 Spezial Rx
  • 56 E0 serieller Kanal 4 Tx leer
  • 57 E4 serieller Kanal 4 Statuswechsel
  • 58 B8 serieller Kanal 4 Rx bereit
  • 59 EG serieller Kanal 4 Spezial Rx
  • 60 F0 serieller Kanal 5 Tx leer
  • 61 F4 serieller Kanal 5 Statuswechsel
  • 62 F8 serieller Kanal 5 Rx bereit
  • 63 FC serieller Kanal 5 Spezial Rx
  • 64 100 serieller Kanal 6 Tx leer
  • 65 104 serieller Kanal 6 Statuswechsel
  • 66 108 serieller Kanal 6 Rx bereit
  • 67 10C serieller Kanal 6 Spezial Rx
  • 68 110 serieller Kanal 7 Tx leer
  • 69 114 serieller Kanal 7 Statuswechsel
  • 70 118 serieller Kanal 7 Rx bereit
  • 71 11C serieller Kanal 7 Spezial Rx
  • 72 120 Echtzeituhr
  • 73 124 lokaler Matrixfehler
  • 74 128 Hauptmatrixfehler
  • 75 12C DMA-Kanal 0 (Ende des DMA)
  • 76 130 DMA-Kanal 1 (Ende des DMA)
  • 77 134 DMA-Kanal 2 (Ende des DMA)
  • 78 138 DMA-Kanal 3 (Ende des DMA)
  • 79 13C reserviert
  • 80 140 SBX 3-Interrupt
  • 81 144 SBX 2-Interrupt
  • 82 148 SBX 1-Interrupt
  • 83 14C Plattensteuergerät-Interrupt
  • 84 150 Abschait-Interrupt
  • 85 154 Drucker-Interrupt
  • 86 158 Temperaturerfassung fertig
  • 87 15C reserviert
  • 3.2.1.16 Mathematik-Koprozessor Intel 80287
  • Die Systemsteuerplatine unterstützt den Mathematik-Koprozessor (90) Intel 80287 als Zusatzeinrichtung. Die unten aufgelisteten I/O-Adressen werden durch das Aufrufen der Escape-Befehlscodes des Intel 80286 aufgerufen, die vom Intel 80287 verwendet werden. Einzelheiten über den 80287 stehen in Intel's Mikroprozessor-Handbuch.
  • 80287-I/O-Adressen: F8 bis FF
  • 3.2.1.17 Anfangszustand
  • Die Systemsteuerplatine wird beim Systemrücksetzen initialisiert.
  • 3.2.1.18 Systemübersicht
  • Die folgende Tabelle faßt den Speicher und die I/O-Adressenplätze der Systemsteuerung zusammen.
  • Speicherraum
  • Systemspeicher (RAM): 000000 bis 1FFFFF
  • Lokaler Matrixspeicher (RAM): 200000 bis 3FFFFF
  • eserviert (80286): 400000 bis F7FFFF
  • Reserviert (Plattensteuergerät): 400000 bis FFFFFF
  • Nur-Lese-Speicher (EPROM): F80000 bis FFFFFF
  • I/O-Raum
  • Parallele I/O-Sektion: 000 bis 01F
  • Reserviert: 020 bis 037
  • Temperaturerfassung: 038 bis 03F
  • Echtzeituhr: 040 bis 05F
  • SBX 3: 060 bis 07F
  • SBX 2: 080 bis 09F
  • SBX 1: 0A0 bis 0BF
  • Interrupt-Steuergeräte: 0C0 bis 0CF
  • Serielle Kanalsteuergeräte: 0D0 bis 0EF
  • Zeitgeber: 0F0 bis 0F7
  • Mathematik-Koprozessor: 0FB bis 0FF
  • DMA-Steuergerät: ??? bis ???
  • 3. 2. 2 Graphikprozessor
  • Ein Graphikprozessor wird verwendet, um eine Elektronenstrahlröhre-Rasteranzeige zu steuern. Dieses schafft einen sehr effektiven Weg zur Anzeige und Verarbeitung der sehr großen Datenmengen, die von dem System berechnet und ausgegeben werden können.
  • Das Graphiksystem besteht aus bis zu 2 Megabyte RAM, der als ein 768·1024·8Bit-Bildspeicher organisiert ist, aus 16 Verarbeitungsknoten zur lokalen Bildverarbeitung, aus einer farbigen Farbnachschlagetabelle und aus der Logik zur Handhabung der Bildauffrischung und der Bildschwenkung. Die Ausgabedaten des Graphiksystems sind Standard-RS-343-RGB-Videodaten, die an jeden Hochleistungs-(40 MHz)-Farb-CRT-Bildschirm angeschlossen werden können.
  • Die I/O-Kanal-Bandbreite ermöglicht es dem Hauptprozessor, ein neues Einzelbild von Display-Daten häufiger als 60 mal pro Sekunde herauszugeben (schneller als die Bildauffrischungsrate). Aus diesem Grund ist das System ideal für ein breites Spektrum der grafischen Anwendungen.
  • 3. 2. 3 Prozessorverbindung
  • Zwei oder mehr Systeme sind durch einen I/O-Kanal (einen Unterkubus der Ordnung 7) in jedem System verbunden. Das erlaubt die Implementierung von beliebigen Systemgrafen, eingeschlossen dem Pipelining von mehreren Systemen, wobei der Ausgang der einen Maschine den Eingang der nächsten Maschine Speist und das letzte System die Anzeige treibt.
  • 4 DER PROZESSOR 4.1 Einleitung
  • Die Prozessormatrix wird aus 2N-Knoten gebildet, wobei N gleich 6, 7, 8, 9 oder 10 ist. Jeder Verarbeitungsknoten (Fig. 4) besteht aus einem 32Bit-Mehrzweck-Prozessor (einschließlich 32- und 64-Bit-Gleitkomma-Befehlen), 128 KBytes ECC-Speicher und 11 Kommunikationskanälen zur Unterstützung des Hyperkubus- Verbindungsschemas und der 8 System-I/O-Kanäle.
  • 4.2 Architekturüberblick 4.2.1 Datendarstellung
  • Der Prozessor erkennt zwei Datenhauptklassen: ganze Zahlen und reelle Zahlen. Ganze Zahlen werden in Standard-Zweierkomplementform dargestellt und kommen in drei Arten vor: Byte (B-8 Bits> , Halbwort (H-16 Bits) und Wort (W-32 Bits). Es gibt zwei Arten von reellen Zahlen. Das 32-Bit-Format, reelles Format (R) genannt, hat einen Exponenten von 8 Bit und 24 Wertbits. Das "lang-reelle" (L-) Format umfaßt 64 Bits, wovon 11 im Exponenten und 53 im Kennteil sind. Das Lang-reelle Format wird für Berechnungen benutzt, die eine hohe Genauigkeit erfordern und für Zwischenrechnungen mit reellen Variabeln, wenn die Rechnung besonders empfindlich gegenüber Rundungsfehlern ist. Beide Formate entsprechen dem IEEE Binär-Gleitkomma-Standard (P754).
  • Außer den verschiedenen Datenformaten erkennt und manipuliert der Prozessor Adressen. Adressen sind einfach vorzeichenlese 32-Bit-Werte, die auf einzelne Bytes in einem linearen Adreßraum zeigen.
  • 4.2.2 Register, Interrupts und Kommunikation
  • Die Prozessorbefehle bearbeiten Daten im Hauptspeicher (wie oben beschrieben) oder Daten in 32-Bit-Registern. Der Prozessor enthält drei Registerarten: die allgemeinen Register, die Prozessorregister und die Kommunikationssteuerregister. Die sechzehn allgemeinen Register sind 32 Bits lang und werden sowohl für Operanden als auch für Adressen benutzt. Weil sie allgemein sind, können sie austauschbar in allen Bearbeitungs- und Adreßmoden benutzt werden.
  • Die Prozessorregister sind spezielle Register und können nur von Lade-Porozessorregister(LDPR)- und Speichere-Prozessorregister(STPR)-Befehlen beschrieben bzw. gelesen werden. Die genauen Formate und detaillierten Beschreibungen dieser Register werden in Kapitel 4.4.3 angegeben. Die Prozessorregister sind in Fig. 7, 9a und 9b gezeigt und enthalten:
  • 0. Stapelzeiger (SP)--zeigt auf das obere Ende des Stapelspeichers
  • 1. Programmstatus (PS)--enthält Flags, Interrupt-Steuersignale u. a. Statusinformationen
  • 2. Fehlerregister (FR)--die Fehlercodes werden hier gespeichert
  • 3. Konfigurationsregister (CR)--die Modellnummer (nur lesbar) und Speicher-Schnittstellenparameter werden hier gespeichert
  • 4. Prozessoridentifikation (PI)--enthält eine Nummer, die den Platz des Prozessors in der Matrix identifiziert
  • 5. Zeitabschaltung (TO)--enthält einen Zähler, der ungefähr alle 100 Mikrosekunden dekrementiert wird und ein Interrupt erzeugt (falls er aktiviert ist), wenn er Null erreicht.
  • Prozessorregister 6-12 werden verwendet, um "Bereit"- und Fehlerzustände für die I/O-Kanälen zu signalisieren.
  • Die I/O-Ports auf dem Prozessor sind unidirektionale Speicherdirektzugriff(DMA)-Kanäle und jeder Kanal hat zwei 32- Bit Nur-Schreib-Register: ein Adreßregister für den Platz des Pufferspeichers und ein Zählregister, das die Anzahl der zum Senden oder zum Empfangen verbliebenen Bytes anzeigt. Kommunikation wird ausgeführt, indem die Register des gewünschten Kanals auf die entsprechende Adresse und Datenlänge gesetzt werden, und dann der DMA-Kanal übernimmt und eine Nachricht ohne Einmischung des Prozessors übermittelt. Interrupts können verwendet werden, um zu signalisieren, wenn ein Kanal verfügbar ist (z. B. wenn die Zählung Null erreicht, ist der Kanal "Bereit"). Ein Separater Interrupt-Vektor ist vorgesehen, um einem Empfänger anzuzeigen, daß während der Datenübertragung ein Fehler aufgetreten ist.
  • Außer zur Kommunikationssynchronisierung und Fehlermeldung benutzt der Prozessor vektorisierte Interrupts für:
  • 1. Hardwarefehler (z .B. Mehrbitspeicherfehler)
  • 2. Programmausnahmen (z. B. reeller Überlauf)
  • 3. Softwaremöglichkeiten (z. B. Überwachungsprogramm, Zeitabschaltung)
  • Wenn ein Unterbrechung auftritt, werden der aktuelle Programmstatus (PS) und der Befehlszähler (PC) in den Stapelspeicher abgelegt. Dann werden PS und PC mit neuen Werten vom zugehörigen Eintrittspunkt (der von der Interrupt-Nummer angezeigt wird) in der im unteren Speicher befindlichen Interruptvektor- Tabelle geladen.
  • 4.2.3 Befehlsformate und Adressierungsmoden
  • Ein Befehl besteht aus einem Befehlscode, der von Null und einem oder zwei Datenreferenzen gefolgt wird:
  • Befehlscode Referenz 1 Referenz 2
  • niedrige Adresse hohe Adresse
  • Sämtliche Befehlscodes (opcodes) im Prozessor sind ein Byte lang. Die ersten vier Bits zeigen die Operation und die Anzahl der Operanden (z. B. ADD: 2 Operanden, BRANCH: 1 Operand) an, während die anderen vier Bits die Operandengröße und -art angeben (z. B. Halbwort (ganze Zahl), reelle Zahl (Gleitkomma)). Diese Symmetrie macht die Befehlscode-Abbildung leicht lesbar und erleichtert dem Compiler die Codeerzeugung.
  • Für jede Datenart sind sämtliche Standardbefehle verfügbar einschließlich arithmetische, logische, Konvertierungs-, Vergleichs-, Verzweigungs-, Ruf- und Trap-Befehle. Befehlen kann eine REPEAT-Vorsilbe vorangehen, die veranlaßt, daß sie wiederholt ausgeführt werden, bis eine Abbruchbedingung erfüllt ist. Das ist eine sehr leistungsstarke Möglichkeit für Vektor- und Ketten-Operationen. Wiederholungen können außerdem sowohl bei Verzweigungen als auch bei Aufrufen verwendet werden, um einen Codeblock wiederholt auszuführen. (Z.B. entspricht ein REPEAT BRANCH einem Schleifenbefehl.) Und für eine zukünftige Erweiterung hat jede Operandenart einen reservierten "Escape"-Code.
  • Ein paar Befehle haben keine Operanden (z. B. BREAK- POINT/Haltepunkt) und einige haben nur einen (z. B. CALL/Aufruf), aber die meisten haben zwei Adreßfelder. Alle Adreßfelder beginnen mit einem Einbyte-Modusselektor. Bei allen die allgemeinen Register betreffenden Moden zeigen die ersten vier Bits den Modus an und die übrigen vier bestimmen, welches Register benutzt werden soll. Wenn ein Offset angezeigt wird, folgt es dem Modusselektor. Einige der vorgesehenen Moden sind der literale, unmittelbare, der direkte und der indirekte, wobei keine Register betroffen sind; und direkte Register-, der indirekte Register-Modus mit und ohne Offset, Autoinkrementierung und Autodekrementierungs-Modus und Offsetadressierung mit sowohl dem Programmzähler (PC) als auch dem Stapelzeiger (SP). die bei Befehlen wird für das Modusselektorfeld ein reservierter "Escaope"-Code definiert.
  • 4. 3 Datendarstellung
  • Der Prozessor erkennt zwei Datenklassen: ganze Zahlen und reelle Zahlen (Gleitkomma-Zahlen). Es gibt drei Arten ganze Zahlen und zwei Arten reelle Zahlen.
  • 4.3.1 Ganze Zahlen
  • Die drei Ganzzahl-Datenarten werden im Standard-Zweierkomplement dargestellt. Sie werden Byte (B), Halbwort (H) und Wort (W) genannt und sind 8, 16 bzw. 32 Bits lang. Die Bereiche für die drei Formate der ganzen Zahlen sind wie folgt spezifiziert: Byte (B): -128 bis 127
  • Halbwort (H): -32.768 bis 32.767
  • Wort (W): -2.147.483.648 bis 2.147.483.647
  • Die meisten Befehle behandeln ganze Zahlen als vorzeichenbehaftete Zahl, aber die logischen Operationen (z. B. AND, OR) betrachten ihre Operanden als vorzeichenlose Größen. Adressen werden vom Prozessor ebenfalls als vorzeichenlose Werte behandelt. Der Adreßraum ist logisch ein linearer Bytesatz von Adresse 0 bis 2**32-1; somit sind Adressen vorzeichenlose ganze 32-Bit-Zahlen (Worte).
  • 4.3.2 Reelle Zahlen
  • Die Gleitkomma-Implementierung im Prozessor entspricht dem IEEE-Binär-Gleitkomma-Standard (P754). Mit der Gleitkomma- Arithmetik sind nicht nur die gerundeten Ergebnisse so genau wie möglich, sondern es ist auch möglich, garantierte Fehlergrenzen zu berechnen, indem speziell gerichtete Rundungsmoden verwandt werden. Auch aufgrund der hohen Genauigkeit der Berechnungen mit reellen Zahlen (32 Bits) und der Verfügbarkeit von Lang-reellen-Zahlen (64 Bits), um sie an kritischen Punkten sicherzustellen, ist es möglich, viel mehr Programme mit reeller Präzision laufenzulassen, anstatt automatisch überall Langreellen-Zahlen zu verwendet.
  • Die Darstellungen der zwei Gleitkomma-Arten sind im folgenden einschließlich der Formeln für den dargestellten Wert abgebildet. In den Formeln ist "s" das Vorzeichen, "e" der Exponent, "f" der gebrochene Teil und "b" die Vorbelastung des im Exponenten. Reell Lang-reell
  • WERT(V)
  • 1) e = 0 V = (-1)**s*(0,f)*2**(1-b)
  • 2) 0< e< 2*b + 1 V = (-1)**s*(1.f)*2**(e-b)
  • 3) e = 2*b + 1, f = 0 V = (-1)**s*(unendlich)
  • 3) e = 2*b + 1, f #0 V = keine-Zahl (Nan)
  • Die beiden Formate sind eng miteinander verbunden; die unterscheidenden Merkmale sind der Exponentbereich (definiert durch den Parameter b) und die Genauigkeit des gebrochenen Teils. Das reelle Format hat eine Genauigkeit von 24 Bits (ungefähr 7 Digits) mit einem Bereich von ungefähr 10**(-38) bis 10**(38). Das Lang-reelle Format hat einen viel größeren Bereich--ungefähr 10**(-308) bis 10**(308)-- und mit 53 Bits oder ungefähr 15 Digits eine mehr als doppelt so große Genauigkeit wie das reelle Format. Außer daß das Lang-reelle Format für sich ein leistungsstarkes Rechenformat ist, ermöglicht es eine exzellente Unterstützungsmöglichkeit für reelle Berechnungen an Stellen im Programm, an denen die Ergebnisse sehr empfindlich gegenüber Rundungsfehlern sind.
  • Die Implementierung stimmt mit dem IEEE-Gleitkomma-Standard überein, der sorgfältig ausgebildet wurde, um eine genaue und zuverlässige Arithmetik zur Verfügung zu stellen. Die folgenden Eigenschaften sind ein Ergebnis des Standards.
  • 1) Denormalisierte Zahlen (e=0) füllen den Raum zwischen Null und der kleinsten normierten Zahl. Sie stellen eine der üblichen "flush to zero"-Antwort weit überlegene Behandlungsweise der Bereichsunterschreitung zur Verfügung.
  • 2) Das implizite Bit erzielt die größtmögliche Genauigkeit und ist einer der beiden Gründe für die Wahl der Basis 2. Der andere Grund ist die Geschwindigkeit; für eine gegebene Hardware wird die binäre Basis immer der schnellste Weg sein.
  • 3) Der Offset (b) wurde gewählt um sicherzustellen, daß alle normalisierten Zahlen darstellbare Reziproken besitzen.
  • 4) Das Format wurde so organisiert, daß es sehr schnelle vergleiche zuläßt.
  • 5) Unendlich (e=11. . .1, f=0) wurde explizit dargestellt, um die Verarbeitung der Division durch Null und Bereichsüberschreitungsausnahmen zu ermöglichen.
  • 6) Wenn e=11. . .1 und f< > 0 wird die Darstellung als eine Nicht-Zahl (Nan) behandelt und anstatt ein numerisches Ergebnis bei der Benutzung als Operand zu erstellen, erzeugt der Prozessor eine Ausnahme. Nan's wurden vorgesehen, um Softwareerweiterungen einschließlich Laufzeitdiagnosen wie "uninitialisierte Variable" zu ermöglichen und die Fortsetzung vielleicht fehlerhafter Berechnungen wie O/O zuzulassen, um ggf. die Wirkung auf das Endergebnis zu beobachten.
  • 7) Lang-reellumfaßt einen größeren Bereich und eine mehr als doppelt so hohe Genauigkeit als Reell, so daß sie ein genaues Real-Multiplizieren ohne drohende Bereichsüber- oder - unterschreitung zuläßt und allgemein Lanreell-Summierungen für Real-Berechnungen ermöglicht.
  • Die Gleitkomma-Architektur des gemäß den Prinzipien der vorliegenden Erfindung implementierten Prozessors umfaßt viel mehr als die Datendarstellung. Alle IEEE-Standardanforderungen werden entweder in der Hardware erfüllt oder durch die Software ermöglicht. Zu diesen Anforderungen gehört die Vorsehung von Rundungsmoden. Im Programmstatus(PS)-Register sind zwei Bits, die im wesentlichen den Rundungsmodus steuern. Die Moden sind:
  • 00) Runde auf die nächste gerade Zahl: in diesem Modus wird das nächstmögliche Ergebnis zurückgegeben. Wenn es zwei Ergebnisse gibt, wird das gerade erzeugt. Das entfernt die Vorspannung, die bei der üblicheren "Runde auf bei 5''-Rundung existiert.
  • 01) Runde auf: die größere der zwei Zahlen, die das genaue Ergebnis umschließen, wird zurückgegeben.
  • 10) Runde ab: das gibt die kleinere der beiden Möglichkeiten zurück.
  • 11) Runde in Richtung Null: das Ergebnis ist dasjenige, das bezüglich des Betrages kleiner ist.
  • Eine weitere wichtige Möglichkeit in der Gleitkomma-Architektur ist die Ausnahmenverarbeitung. Die folgenden benötigten Fehler werden erkannt:
  • 1) Ungenaues Ergebnis: wenn das Operationsergebnis nicht genau ist, sondern aber gerundet werden muß.
  • 2) Bereichsunterschreitung: das Ergebnis ist ungleich Null, aber vom Betrag kleiner als die kleinste normierte Zahl.
  • 3) Division durch Null: der Nenner ist Null während der Zähler ungleich Null ist.
  • 4) Überlauf: das gerundete Ergebnis ist vom Betrag größer als die größte darstellbare Zahl.
  • 5) Ungültige Operation: diese umfaßt unbestimmte Operationen wie Null durch Null, Null mal Unendlich, usw. und die Verwendung von Nan (Nicht-Zahl) als Operand.
  • Alle diese Ausnahmen haben ein zugeordnetes Flag (und Ungenau hat eine Interrupt-Freigabe) im PS-Register. Wenn eine Ausnahme auftritt und ihr Interrupt freigegeben ist, erzeugt der Prozessor genug Informationen zur Wiederherstellung. Wenn das Interrupt gesperrt ist, wird das Flag gesetzt, und der Prozessor unternimmt die vordefinierte Handlung:
  • 1) Ungenaues Ergebnis: Speichere das gerundete Ergebnis und fahre fort (in dieser Implementierung wird nur die Ausnahme "Ungenaues Ergebnis" gesperrt). Die Ausnahmen und Antworten werden im einzelnen in Kapitel 4.5 definiert.
  • Die Gleitkomma-Architektur stellt außerdem für sämtliche Formate sämtliche Standard-Befehle zur Verfügung: Addieren, Subtrahieren, Multiplizieren, Dividieren, vergleichen und Konvertieren. Aber darüberhinaus gibt es einige ungewöhnliche aber entscheidende Befehle. Die Quadratwurzel wird korrekt gerundet und ihre Berechnung ist genauso schnell wie Dividieren. Die Berechnung des Rests ist eine genaue Operation und ermöglicht bei periodischen Funktionen die Argumentverringerung ohne Rundungsfehler.
  • 4.4 Register
  • Die folgenden Kapitel beschreiben drei Registerarten im Prozessor: die allgemeinen Register, die Eingabe/Ausgabe-Register und die Prozessorregister.
  • 4.4.1 Allgemeine Register
  • Die sechzehn allgemeinen Register (128), die in Fig. 9a gezeigt sind, sind mit R0 bis R15 bezeichnet. Sie sind 32 Bits breit und werden für Daten und Adressen benutzt. Sie sind gleichbleibend symmetrisch ohne spezielle Kennzeichnungen oder Verwendungen für irgendeines der Register. Wenn Ganzzahl-Daten kürzer als 32 Bits zu einem allgemeinen Register bewegt werden, werden sie auf 32 Bits durch das Vorzeichen erweitert. Wenn Daten, die länger als 32 Bits sind in den Registern gespeichert werden, geht der Datenteil mit niedriger Ordnung in das bestimmte Register, Ri, und der höherwertige Teil steht in Ri+1. Die Nummern laufen um, so daß, wenn eine Lang-relle-Zahl nach R15 übertragen wird, der Abschnitt höherer Ordnung in R0 zu finden ist.
  • 4.4.2 Eingabe/Ausgabe-Register
  • In einem Prozessor ist jeder der in Fig. 5 gezeigten Eingabe- und Ausgabeports (48) ein unabhängiger Speicherdirektzugriff(DMA)-Kanal und hat zwei 32-Bit-Register: ein Adreßregister und ein Zählregister. Das Adreßregister enthält einen Zeiger auf das am wenigsten signifikante Byte des nächsten zu übertragenden Halbwortes. Wenn es ein Ausgabeport ist, werden die Daten vom Speicher an den Port übertragen. Wenn es ein Eingabeport ist, werden die Daten, die vom Ausgabeport des sendenden Prozessors empfangen wurden, an den Speicher übertragen. In beiden Fällen wird das Zählregister so gesetzt, daß es die zu Anzahl der zu sendenden oder zu empfangenden Bytes anzeigt. Sobald Daten gesendet oder empfangen werden, werden die dazugehörigen Adreß- und Zählregister um die der übertragene Byteanzahl inkrementiert bzw. dekrementiert. Wenn die Zählung Null erreicht, wird das Fertig-Flag im Eingabe- oder Ausgabestatusregister (siehe unten) gesetzt und, falls ein Interrupt freigegeben wurde, wird ein Interrupt erzeugt.
  • Die DMA-Kanäle arbeiten unabhängig von der Befehlsverarbeitung. Sie beginnen immer dann zu arbeiten, wenn ein Zählregister auf einen Wert ungleich Null gesetzt wird. Sämtliche Ports sind allgemein, nur ein Eingabe- und ein Ausgabeport werden mit "host" (H) bezeichnet und werden normalerweise verwendet, um über den I/O-Bus mit den Systemsteuerplatinen zu kommunizieren.
  • 4.4.3 Prozessorregister
  • Die Prozessorregister sind die dritte Registerart im Prozessor. Alle Prozessorregister sind 32 Bits breit. Sie enthalten alle Spezial- und verschiedene andere Informationen und können nur von den Lade-Prozessorregister(LDPR)- und Speichere- Prozessorregister (STPR)-Befehlen geladen bzw. gespeichert werden. Diese Register sind mit P0 bis P11 bezeichnet, haben aber auch spezielle Namen, die ihren Zweck angeben:
  • 0) Stapelzeiger (PO, SP): Der SP enthält einen Zeiger auf das aktuelle obere Ende des Stapels. Der Stapel wächst in Richtung des unteren niedriger Speichers.
  • 1) Programmstatus (P1, PS):- Dieses Register enthält die Informationen, die den aktuellen Zustand eines Programms definieren. Das Format des PS wird im folgenden gezeigt:
  • Alle Felder sind ein Bit lang außer REP (2 Bits), REP REG (4 Bits), und RC (2 Bits). Die Bedeutungen der Felder werden im folgenden definiert (R heißt "reserviert"):
  • FLAGS
  • C-- Übertrag wird bei Ganzzahloperationen gesetzt, wenn es einen Übertrag aus der am höchsten bewerteten Stelle herausgibt. Es wird auch bei Gleitkomma-Befehlen und Ganzzahlmultiplikation und -division gesetzt, um anzuzeigen, daß das Ergebnis negativ ist. Das ermöglicht die Verwendung von vorzeichenlosen Verzweigungen, um die von dem IEEE-Gleitkomma-Standard geforderten "ungeordneten" Verzweigungen zu implementieren.
  • V-- Ganzzahl-Bereichsüberschreitung wird gesetzt, wenn das Ganzzahlergebnis für das Format zu groß ist.
  • Z-- Das Null-Flag wird gesetzt, wenn das Ganzzahl- oder Gleitkomma-Ergebnis gleich Null ist.
  • N-- Negativ wird gesetzt, wenn das Ganzzahl- oder Gleitkomma-Ergebnis negativ ist. Wenn es eine Ganzzahl-Bereichsüberschreitung gibt, wird das Negativ-Flag nicht mit dem Vorzeichenbit des gespeicherten Ergebnisses übereinstimmen, weil das Negativ-Flag entsprechend dem aktuellen Ergebnis vor dem Feststellen der Bereichsüberschreitung gesetzt wird.
  • U-- das Nicht-vergleichbar-Flag wird gesetzt, wenn Gleitkomma-Werte verglichen werden und einer oder beide Operanden eine Nicht-Zahl (Nan) sind.
  • GLEITKOMMA-AUSNAHMEN - Das angezeigte Flag wird gesetzt, wenn die damit verbundene Ausnahme auftritt und wenn das entsprechende Interrupt erzeugt wird, falls sie nicht gesperrt ist. (Im Ausführungsbeispiel der Erfindung kann nur das Ungenaues-Ergebnis-Interrupt gesperrt werden). Die Ausnahmen werden in Kapitel 4.5 definiert.
  • IX -- Ungenaues Ergebnis
  • UF -- Bereichsunterschreitung
  • FZ -- Gleitkomma-Division durch Null
  • OF -- Bereichsüberschreitung
  • IN -- Ungültige Operation
  • UNTERBRECHUNGSFREIGABE-FLAGS- Wenn ein Flag gesetzt ist und die damit verbundene Ausnahme oder das damit verbundene Ereignis auftritt, wird ein Interrupt erzeugt. Wenn das Bit gleich Null ist, wird das Interrupt solange unterdrückt, bis die Interrupt- Bedingung gelöscht ist oder das Interrupt freigegeben ist. Die Gleitkomma-Interrupt-Bedingungen werden gelöscht, sobald der nachfolgende Befehl die Ausführung beginnt.
  • IIX -- Ungenaues Ergebnis-Freigabe
  • R ---- Reserviert für Bereichsunterschreitung-Freigabe
  • R ---- Reserviert für Division-durch-Null-Freigabe
  • R ---- Reserviert für Bereichsüberschreitung-Freigabe
  • R ---- Reserviert für Ungültige-Operation-Freigabe
  • IV---- Ganzzahl-Bereichsüberschreitung-Freigabe
  • CE --- Korrigierbares ECC (wenn ein Speicherfehler von der ECC-Logik des Prozessors korrigiert wird und dieses Flag gesetzt ist , wird ein Interrupt erzeugt; das ermöglicht die Protokollierung der Anzahl der Speicherfehler).
  • TO --- Zeitablauf-Freigabe (wenn dieses Flag Null ist, wird das Interrupt , das von einem Nullwert im Zeitablaufregister erzeugt würde, unterdrückt).
  • II --- Eingange-Freigabe (wenn dieses Flag Null ist, wird jedes mit dem Eingabekanal verbundene Interrupt unterdrückt).
  • IO --- Ausgabe-Freigabe (wenn dieses Flag Null ist, werden alle Ausgabekanal-Interrupts unterdrückt).
  • IE --- Interrupt-Freigabe (wenn dieses Flag Null ist, werden alle Interrupts, die von anderen Flags gesperrt werden können, gesperrt) T --- Ablaufverfolgung (dieses Flag verursacht, wenn es auf Eins gesetzt ist, ein Interrupt sobald der laufende Befehl beendet ist; dieses wird für "Einzelschritt"-Fehlerbeseitigung benutzt).
  • STEUERFELDER
  • RC --- Rundungssteuerung (dieses Feld steuert den Rundungsmodus für reelle Operationen).
  • 00) Rundet auf die nächste gerade Zahl
  • 01) Rundet auf
  • 10) Rundet ab
  • 11) Rundet in Richtung Null
  • REP -- Wiederholungsmodus (dieses Feld zeigt den für einen Befehl, der einem der Wiederholungsbefehlscodes folgt, geltenden Wiederholungsmodus).
  • 00) Keine Wiederholung
  • 01) Wiederhole während REG ungleich Null ist
  • 10) Wiederhole während REG ungleich Null ist und das Z-Flag Eins ist.
  • 11) Wiederhole während REG ungleich Null ist und das Z-Flag Null ist.
  • REP REG -- Wiederholregister (wenn der Wiederholmodus nicht 00 ist, wird jedesmal, wenn der dem Wiederholungsbefehlscode folgende Befehl ausgeführt wird, der Wert im REG hoch gezählt; REG kann irgendein allgemeines Register sein).
  • 2) Fehlerregister (P2, FR): Wenn der Prozessor aufgrund einer Ausnahme unterbricht, enthält dieses Register Informationen, um die Wiederaufnahme zu fördern. Das Format des Fehlerregisters wird unten gezeigt.
  • RU - Aufrungen (1 bedeutet, Ergebnis aufgerundet)
  • RS - Rundungs- oder Haft-Bit
  • GR - Schutzbit
  • F1 - gebrochener Teil (F1=1 bedeutet gebrochener Teil=0)
  • E1 - Exponent (E1=1 bedeutet Exponent=0)
  • I1 - Ungültig (I1=1 bedeutet Exponent=1 1 . . .1)
  • S1 - Vorzeichen (S1=Vorzeichen des ersten Operanden)
  • erster Operand
  • F2 - gebrochener Teil (F2=1 bedeutet gebrochener Teil=0)
  • E2 - Exponent (E2=1 bedeutet Exponent=0)
  • I2 - Ungültig (I2=1 bedeutet Exponent=1 1 . . .1)
  • S2 - Vorzeichen (S2=Vorzeichen des zweiten Operanden)
  • zweiter Operand
  • Die Schutz-, Rundungs- und Haft-Bits sind die Hardware- Bits, die zur Rundung gemäß der Definition in dem IEEE-Binär-Gleitkomma-Standard bei Gleitkomma-Operationen benutzt werden. Das Bruch-, Exponent-, Ungültigkeits- und Vorzeichen-Bit für jeden Operanden dem Interrupt-Handhabungsprogramm die Bestimmung, ob der Operand keine Zahl, unendlich, anormal, Null oder "gewöhnlich" (gültig, nicht Null) ist, und seines Vorzeichens, ohne den Befehl zu entschlüsseln.
  • 3) Konfigurationsregister (P3, CR): Dieses Register wird verwendt um verschiedene Konfigurationsparameter zu setzen, einschließlich der Modellnummer, die ein Nur-Lese-Feld ist. Das Format des CR ist: MODELL NUMMER RESERVIERT ART CYC REFR
  • REFR -- zeigt die Regenerierungsrate an. Bei einer Prozessorzykluszeit von 10 MHz:
  • Rate = (REFR)*(0,8 us) Die typische Regenerierungsrate beträgt ungefähr 15,625 us, was ein REFR = 19 erfordert. (REFR wird vom Initialisierungsmikroprogramm auf 4 eingestellt).
  • ART -- Das ermöglicht verschiedene Speicherarten
  • 00) 64K RAM (4·16K)
  • 01) 256K RAM (4·64K)
  • 10) Reserviert
  • 11) Reserviert
  • CYC--- Dieses Feld spezifiziert die Speichergeschwindigkeit
  • 00) 300 ns
  • 01) 200 ns
  • 10) Reserviert
  • 11) Reserviert
  • RESERVIERT -- Diese Bits sind für eine zukünftige Verwendung reserviert.
  • MODELLNUMMER -- Dieses Feld wird durch den Herstellungsprozeß gesetzt und kann nur gelesen werden. Es wird verwendet, um verschiedene Prozessorversionen zu unterscheiden.
  • 4) Prozessor-Identifikationsregister (P$, PI): Das PI wird vom Betriebssystem bei der Initialisierung gesetzt und ermöglicht den Prozessoren, sich selbst zu erkennen. Das Bit hoher Ordnung (31) zeigt an, ob sich der Prozessor in der Hyperkubusmatrix (0) oder auf einer Systemsteuerplatine (1) befindet. Die restlichen Bits zeigen die Adresse oder Position des Prozessors in der Matrix oder auf der Schnittstellenplatine an.
  • 5) Zeitablaufregister (P5, TR): Ungefähr alle 100 us wird der vorzeichenlose Wert in diesem Register verringert. So kann es ungefähr 5,1 Tage lang zählen. Wenn das Zeitablaufregister Null ist, wird immer dann ein Interrupt erzeugt, wenn es freigegeben ist. Das Dekrementieren endet, wenn der Wert im Zeitablauf Null erreicht.
  • 6) Ausgabe bereit (P6, OR): Es gibt ein Bereit-Flag für jeden Ausgabekanal. Wenn das Flag auf Eins gesetzt wird, zeigt es an, daß das Zählregister für diesen Kanal Null ist und der Kanal bereit zur Übertragung weiterer Daten ist. Das Format des Registers ist:
  • wobei OH Ausgabe-Host bedeutet, R für eine zukünftige Erweiterung reserviert ist und Oi der Ausgabeport-Nummer i ist. Das OR-Register kann nur gelesen.
  • 7) Eingabe bereit (P7, IR): Für jeden Eingabeport gibt es ein Flag, das, wenn es gesetzt ist, anzeigt, daß das entsprechende Zählregister Null erreicht hat, der Kanal seine DMA-Funktion beendet hat und nun bereit ist, weitere Daten zu empfangen. Das Format des Registers ist das gleiche wie das des Ausgabe-Bereit-Registers mit der Ausnahme, daß O (Ausgabe) durch 1 (Eingabe) ersetzt ist. Das IR-Register ist ein Nur-Lese-Register.
  • 8) Ausgabe-Freigabe (P8, OE): Dieses Register hat das gleiche Format wie das Ausgabe-Bereit-Register, aber die Bedeutung des Flags ist eine andere. Wenn ein Flag auf Eins gesetzt ist, wird ein Interrupt erzeugt, wenn der zugehörige Ausgangskanal zum Senden bereit ist. Das Interrupt wird unterdrückt, wenn das Flag Null ist oder das Ausgabe-Freigabe(01)-Flag in dem Programmstatusregister Null ist.
  • 9) Eingabe-Freigabe (P9, IE): Wenn ein Eingabe-Zählregister Null geworden ist und der Kanal bereit zum Empfang ist, wird ein Interrupt erzeugt, wenn das entsprechende Flag in dem Register auf Eins gesetzt ist. Wenn das Flag Null ist oder das Eingabe-Freigabe (11 )-Flag im Programmstatusregister Null ist, wird das Interrupt unterdrückt.
  • 10) Eingabe anhängig (P10, IP): Wenn das Zählregister eines Eingabeports Null ist, aber ein Halbwort im Port vorliegt, das nicht im Speicher gespeichert wurde, wird das entsprechende Bit in diesem Register auf Eins gesetzt. Das Register ist ein nur-Lese-Register.
  • 11) Eingabe-Paritätsfehler (P11, PE): Jedes empfangene Halbwort wird hinsichtlich der Parität geprüft. Wenn ein Fehler ermittelt wird, wird nach der vollständigen Übertragung (das Zählregister wird Null) anstelle der Erzeugung eine Fertig- Interrupt, das zugehörige Flag in diesem Register gesetzt und ein "Eingabefehler"-Interrupt erzeugt. Dieses Register ist ein Nur-Lese-Register.
  • 12) Eingabe-Datenverlust-Fehler (P12, IO): Wenn ein Halbwort empfangen wird und ein vorangegangenes empfangenes Halbwort überschreibt, bevor dieses im Speicher gespeichert werden kann, wird ein Fehler bemerkt. Nachdem der Zähler Null erreicht hat, wird anstelle des Signalisierens eines "Fertig"- Interrupt, das zugehörige Flag auf Eins gesetzt und eine "Eingabefehler"-Interrupt erzeugt. Dieses Register wird ist ein Nur-Lese-Register.
  • 4.5 Interrupts und Ausnahmen
  • Der Prozessor besitzt eine leistungsstarke vektorisierte Interrupt-Möglichkeit und erzeugt verschiedene Arten der von Interrupts: Programmausnahmen, Softwaremöglichkeiten, I/O-Signale und Hardwarefehler. Die Programmausnahmen schließen Ganzzahl- Bereichsüberschreitung und Division durch Null, die Gleitkomma- Ausnahmen, Stapelüberlauf und Adreß- und reservierte Befehlscodefehler ein. Die durch Software möglichen Interrupts sind Trap, Unterbrechungspunkt und Ablaufverfolgung. Die Eingabe- Fertig-, Ausgabe-Fertig-, Eingabeparitäts- und Eingabe-Datenverlust-Interrupts sind die I/O-Signale. Und die Hardwarefehler sind korrigierte und nicht korrigierbare Speicherfehler und Prozessorselbsttestfehler.
  • Alle Unterbrechungen (einschließlich der TRAP- und Unterbrechungspunkt (BKPT) Befehle) haben die gleichen Konventionen. Es gibt eine vorzeichenlose, dem Interrupt zugeordnete Zahl das Argument der Trap-Befehle), die mit 8 multipliziert wird, um die absolute Platz des Unterbrechungsvektors im unteren Speicher anzugeben. Jeder Vektor besteht aus acht Bytes; die ersten vier Bytes enthalten den Absolutadreßvektor (VA) der Interrupt-Behandlungsroutine und die nächsten vier Bytes sind ein neuer Programmstatus(NPS)-Wert. Wenn ein Interrupt erzeugt wird, sichert der Prozessor den Befehlszähler (PC) und den Programmstatus (PS) in den Stapelspeicher, setzt das Programmstatusregister auf NPS und das Befehlszähler-Register auf VA. Wenn das Interrupt eine Programmausnahme signalisiert (Interrupts 3 bis 12, siehe unten) gibt der Prozessor, anstatt den PC zu sichern, die Adresse des anstößigen Befehls ("vorangegangener PC") in den Stapelspeicher ein, so daß die Ausnahme-Befehlsroutine den Befehl entschlüsseln kann. Ein Grund, weshalb das Decodieren notwendig sein kann, ist die Forderung des IEEE-Gleitkomma-Standards nach der Fähigkeit ein Ergebnis zu konstruieren, es dort zu speichern, wo der Befehl es tun würde, und dann die Berechnung fortsetzen. Wenn die Interrupt-Behandlungsroutine fertig ist, führt sie eine Rückkehr-vom-Interrupt- (REI)Befehl aus, der die alten PS- und PC-Werte aus dem Stapelspeicher herausholt und in ihre entsprechenden Register eingibt. Ein TRAP-Befehl mit der geeigneten Zahl als Argument kann ein beliebigtes Interrupt simulieren (mit der Ausnahme, daß der PC bei TRAP unabhängig von seinem Argument immer in den Stapelspeicher eingegeben wird).
  • Alle Interrupts sind im folgenden definiert. Die Zahl links ist die Nummer der Interrupts.
  • 4.5.1 Interrupt-Definitionen
  • 0) RESERVIERT
  • 1) T: Trace (Ablaufverfolgung) -- am Ende des aktuellen Befehls wird das Interrupt 1 erzeugt, um die Einzelschritt- Fehlerbeseitigung zu ermöglichen.
  • 2) BK: Breakpoint (Unterbrechungspunkt) -- wenn der Einbytebefehl BKPT ausgeführt ist, wird ein Interrupt 2 erzeugt; diese wird zum Unterbrechungspunkt-Fehlerbeseitigung benutzt.
  • 3) IV: Integer-Overflow (Ganzzahl-Bereichsüberschreitung) -wenn das Ergebnis zu groß für das Zielformat ist.
  • Addiere/Subtrahiere: wenn der Übertrag nicht gleich dem Vorzeichenbit ist.
  • Multipliziere: wenn die höherwertige Hälfte des Produkts nicht gleich dem Vorzeichenerweiterung des Ergebnisses ist.
  • Dividiere: wenn die negativste Zahl durch -1 dividiert wird
  • Das Interrupt kann gesperrt werden, aber in jedem Falle ist das im Ziel gespeicherte Ergebnis der Teil des Ergebnisses mit der niedrigen Ordnung (beim Dividieren ist es der Dividend).
  • 4) IZ: Integer Zero Divide (Ganzzahl-Null-Division) -- Wenn der Zähler einer Ganzzahldivision oder der Divisionsrest Null beträgt, wird dieses Interrupt erzeugt und kein Ergebnis wird gespeichert.
  • 5) IX: Inexact Result (ungenaues Ergebnis) -- Wenn ein reelles Ergebnis gerundet werden muß, wird dieses Flag im PS gesetzt und, falls es nicht gesperrt ist, wird das Interrupt erzeugt. In jedem Falle wird das richtig gerundete Ergebnis als erstes im Ziel gespeichert. "Ungenaues" Ergebnis kann gleichzeitig mit entweder "Bereichsüberschreitung" oder mit "Bereichsunterschreitung" auftreten. Wenn dies auftritt, wird das Ungenau-Flag gesetzt, aber das Interrupt jedoch unterdrückt und entweder das Bereichsüberschreitungs- oder das Bereichsunterschreitungs-Interrupt erzeugt.
  • 6) UF: Unterflow (Bereichsunterschreitung) -- Wenn ein reelles Ergebnis ungleich Null ist, aber vom Betrag kleiner als die kleinste normierte Zahl des Formats ist, dann wird im PS das UF-Flag gesetzt und ein Interrupt erzeugt. Jedoch wird zunächst ein kodiertes Ergebnis im Ziel gespeichert (das Offset wird zum Exponenten addiert).
  • 7) FZ: Floating Zero Divide (Gleitkomma-Null-Division) -wenn die Division einer reellen Zahl ungleich Null durch Null versucht wird, wird kein Ergebnis gespeichert, das FZ- Flag im PS gesetzt und ein Interrupt erzeugt.
  • 8) OF: Overflow (Bereichsüberschreitung) -- Wenn ein reelles Ergebnis größer als die größte normierte Zahl ist, wird ein kodierteres Ergebnis (das Offset wird vom Exponenten subtrahiert) gespeichert und ein Interrupt erzeugt.
  • 9) IN: Invalid Operation (ungültige Operation) -- Die Bedingungen, die veranlassen, daß das IN-Flag im PS gesetzt wird und daß das Interrupt 9 erzeugt wird, sind:
  • a) Wenn ein reeller Operand eine Nicht-Zahl ist (ausgenommen der Verzweigung bei vorzeichenlosem Vergleich oder der Verzweigung bei gleich oder ungleich)
  • b) wenn beide Operanden einer Gleitkomma-Division Null sind
  • c) wenn der "Divisor" in einer Gleitkomma-Restoperation Null ist
  • d) wenn der Operand einer Quadratwurzel negativ ist.
  • 10) UC: Unimplemented Opcode (nicht ausgeführter Befehlscode) -- Wenn einer der reservierten Befehlscodes verwendet wird, wird dieses Interrupt erzeugt.
  • 11) AE: Address Error (Adreßfehler) -- Wenn die Adresse größer als 2**17-1 ist, dann wird das Interrupt 11 signalisiert.
  • 12) SO: Stack Overflow (Stapelüberlauf) -- Wenn der Stapelzeiger kleiner als 2048 wird, wird dieses Interrupt erzeugt. Das hält den Stapel davon ab, in den Interrupt-Vektorbereich im unteren Speicher zu wachsen.
  • 13) TO: Time Out (Zeitablauf) -- Wenn das Zeitablaufregister auf Null dekrementiert wird, wird das Interrupt 13 erzeugt.
  • 14) CE: Corrected Memory (ECC) Error (korrigierter Speicherfehler) -- Wenn ein Speicherfehler während einer Befehlsausführung korrigiert wird, wird am Ende des Befehls dieses Interrupt erzeugt. Dies ist nützlich zur Protokollierung von Speicherfehlern.
  • 15) UE: Uncorrectable Memory (ECC) Error (unkorrigierbarer Speicherfehler) -- Wenn ein Speicherfehler auftritt, der nicht korrigiert werden kann, wird dieses Interrupt erzeugt. Da dies an vielen Punkten während einer Befehlsausführung auftreten kann, ist der Zustand der Maschine nach diesem Fehler undefiniert. Wenn dieser Fehler erneut auftritt, bevor der vorangegangene behandelt worden ist, dann wird das interne Fehler-Flag gesetzt und der Fehler-Pin wird auf hoch gesetzt. Dies geschieht, um vor einem potentiellen fatalen Zustand zu warnen.
  • 16) OE: Operand Error (Operandenfehler) -- Wenn ein Literal oder ein Direktoperand als Ziel eines Ergebnisses verwendet wird oder ein anderer Mode als der Registerdirektmode bei einem Wiederholungsbefehl verwendet wird, dann wird das Interrupt 16 erzeugt.
  • 17-31) RESERVIERT
  • 32-42) OR: Output Ready (Ausgabe bereit) -- Wenn das Zählregister eines Ausgabeports auf Null gegangen ist und der Kanal bereit ist, eine weitere Nachricht zu senden, wird das zugehörige Bit im OR-Register gesetzt und ein Interrupt erzeugt, wenn es weder im PS-(program status)Register oder im OE- (Ausgabe-Freigabe) Register unterdrückt wird.
  • 43-62) RESERVIERT
  • 63) ORH: Output Ready Host (Leitrechnerausgabe bereit) -- Dies ist das Interrupt, das im Zusammenhang mit dem Ausgabeport benutzt wird, der normalerweise zur Kommunikation mit dem Leitrechner (z. B. die verschiedenen Schnittstellenplatinen) verwendet wird.
  • 64-74) IR: Input Ready (Eingabe bereit) -- Dieses sind die Interrupts, die zur Signalisierung, daß ein Eingangskanal zum Nachrichtenempfang bereit ist, benutzt werden.
  • 75-94) RESERVIERT
  • 95) IRH: Input Ready Host (Leitrechnereingabe bereit) -- Dieses Interrupt wird im Zusammenhang mit dem Eingangskanal verwendet, der normalerweise zur Kommunikation mit dem Leitrechner verwendet wird.
  • 96-106) IE: Input Error (Eingabefehler) -- Wenn während eines Nachrichtenempfangs entweder ein Paritäts- oder ein Datenverlust-Fehler festgestellt wird, wird nach Beendigung das jeweilige zugehörige dieser Interrupts erzeugt.
  • 107-126) RESERVIERT
  • 127) IEH: Input Error Host (Leitrechnereingabefehler) -wenn ein Fehler auf dem Kanal bestimmt wird, der zur Leitrechnerkommunikation verwendet wird, wird dieses Interrupt erzeugt.
  • 4.5.2 Fehler-Flag
  • Es gibt ein internes Fehler-Flag, das mit dem Fehlerpin verbunden ist, der anzeigt, daß der Prozessor in einem unbekannten, inkonsistenten oder fehlerhaften Zustand ist. Bei der Rücksetzung des Prozessors wird das Fehler-Flag auf Eins initialisiert und wenn die in den Chip eingebaute Initialisierungssequenz und nachfolgende Diagnostiksoftware erfolgreich läuft, kann er von der Software (EROF) gelöscht werden. Es wird auch bei aufeinanderfolgenden unbedienten unkorrigierbaren ECC- Fehlern gesetzt. Das Fehler-Flag und der Fehler-Pin können auch von den ERON- und EROF-Befehlen gesetzt bzw. rückgesetzt werden.
  • 4.6 Kommunikation
  • Es gibt auf jedem Prozessor 22 einseitig gerichtete Speicherdirektzugriffs(DMA)I/O-Kanäle, 11 für den Eingang und 11 für den Ausgang. Die Eingabeports sind mit 0, 1,. . .,9 und 31 numeriert; dagegen sind die Ausgabeportnummern 32, 33, 41 und 63. Die Eingabe- und Ausgabeports werden normalerweise paarweise verwendet, um 11 volle Duplex-I/O-Kanäle zu bilden, wie unten gezeigt wird:
  • {(0,32), (1,33),. . .(9, 41), (31, 63)}
  • Die Ports 31 und 63 werden normalerweise für die Kommunikation mit dem Leitrechner verwendet (auf jeder Systemsteuerplatine). Die Ports 0 bis 9 und 32 bis 41 werden zur Ausbildung des Hyperkubus-Verbindungsnetzwerkes verwendet. Die Nummern 10 bis 30 und 42 bis 62 sind für zukünftige Erweiterungen reserviert.
  • Jeder der I/O-Kanäle hat ein Adreßregister, ein Zählregister, ein "Fertig"-Flag und ein Interrupt-Freigabe-Flag. Ferner hat jeder Eingabekanal einen Paritätsfehler-Flag, einen Datenverlust-Fehler-Flag und einen "DMA anhängig"-Flag. Neben der Freigabe jedes Kanals gibt es zwei globale Freigabeflags in dem Programmstatus (PS)-Register. Das II-Flag sperrt sämtliche Eingabe-Interrupts (einschließlich Fehlern) selbst dann, wenn das zugehörige Kanal-Flag freigegeben ist, und das IO-Flag sperrt sämtliche Ausgabe-Interrupts.
  • Um eine Nachricht von einem Speicherpuffer auf einem gegebenen Ausgabekanal zu senden, prüft man zunächst entweder das Bereit-Flag oder man gibt sein Interrupt frei und wartet auf ein "Bereit"-Interrupt. Sobald der Kanal anzeigt, daß er bereit (frei) ist, wird das Adreßregister durch Ausführung eines LPTR (Load-Pointer)-Befehls so gesetzt, daß es auf das erste (niedrige) Byte der Nachricht zeigt, welche auf einer geraden Grenzen beginnen muß. Der Quelloperand dieses Befehls ist die
  • Adresse des Nachrichtenpuffers und der Zieloperand ist eine ganze Zahl, deren Wert bestimmt, welches der Kanalregister geladen werden soll:
  • 0, 1,. . ., 9, 31 sind Eingabekanäle (10, 11,. . .30 sind reserviert) 32, 33,. . ., 41, 63 sind Ausgabekanäle (42, 43,. . ., 62 sind reserviert).
  • Um die automatische Nachrichtenausgabe zu starten, muß das zugehörige Zählregister auf die Byteanzahl in der Nachricht gesetzt werden. (In dieser Prozessorversion wird das niederwertige Bit sowohl im Adreß- als auch im Zählregister auf Null gezwungen; auf diese Weise muß der Nachrichtenpuffer auf einer geraden Bytegrenze beginnen und eine gerade Byteanzahl lang sein. Es wird kein Fehler angezeigt, wenn ein Programm diese Forderung verletzt.> Dies wird mit der Ausführung eines LCNT(Load-Count)-Befehls getan. Der Zieloperand zeigt, wie oben für den LPTR-Befehl dargelegt wurde, das zu ladende Register an und der Quelloperand ist der Zählwert (eine vorzeichenlose ganze 32-Bit-Zahl). Der LCNT-Befehl setzt auch Paritäts- und Datenverlust-Fehler-Flag zurück, wenn er einen Eingabeport einrichtet. Die Datenübertragung erfolgt automatisch, und sobald Daten gesendet werden, wird das Adreßregister inkrementiert und das Zählregister wird um die Anzahl der übertragenen Bytes dekrementiert. Wenn die Zählung Null erreicht, stoppt die Ausgabe, das Bereit-Flag wird gesetzt und das Bereit-Interrupt wird erzeugt, falls es freigegeben ist.
  • Neben der Möglichkeit der Nachrichtensendung über einen einzigen Kanal hat der Prozessor eine leistungsstarke BROAD- CAST(Runde)-Möglichkeit. Um eine Nachricht gleichzeitig über verschiedene Kanäle zu senden, muß man zunächst sicherstellen, daß die gewünschten Ausgangskanäle bereit sind. Dann wird ein BPTR-("Broadcast Pointer")-Befehl ausgeführt. Sein Quelloperand ist die Adresse der Nachricht wie im LPTR, aber sein Ziel bzw. Bestimmungsoperand ist eine 32-Bit-Maske. Jede Bitposition, die auf Eins gesetzt wird, veranlaßt, daß das zugehörige Ausgabekanal-Adreßregister geladen wird. (Bitposition 0 entspricht dem Ausgabekanal 32, Position 1 dem Kanal 33, usw.) Die Nachrichten-Rundsendung wird gestartet, indem ein BCNT(Broadcast-Count)Befehl ausgeführt wird, dessen Bestimmungsoperand eine wie für den BPTR-Befehl oben erläuterte Maske ist und dessen Quelloperand ein der Byte-Anzahl entsprechende vorzeichenlose 32-Bit- Ganzzahl in der Nachricht ist. Der Hauptvorteil der Rundsendung ist, daß der sendende Prozessor nur einmal auf jedes übertragene Datenelement zugreifen muß, somit also die von der DMA- Einrichtung verwendete Speicherbandbreite reduziert. Der Prozessor kann nur eine Rundsendung gleichzeitig verarbeiten, so daß, wenn eine nachfolgende Rundsendung - selbst auf anderen Kanälen - versucht wird, das Ergebnis undefiniert sein, bevor die aktuelle Rundsendung beendet ist.
  • Damit eine Nachricht richtig übertragen wird, muß der zugehörige Eingabekanal des empfangenden Prozessors zunächst mit einer Adresse in einem Eingangspuffer versehen werden und das gleiche gilt für den Ausgabekanal. Eine Möglichkeit, wie dieses erfüllt werden kann, ist durch Verwendung eines Softwareprotokolls, das immer ein einzelnes Halbwort sendet als Länge der gewünschten Nachricht, und durch Warten, daß der empfangende Prozessor mit einem Halbwortcode antwortet, der anzeigt "bereit zur Nachrichtensendung". Dieses Protokoll funktioniert, weil das letzte Halbwort, das gesendet wird, für DMA verfügbar bleibt, selbst wenn der Eingabekanal des empfangenden Prozessors nicht initialisiert ist (Zählung gleich Null). Das Vorliegen dieser Daten im Eingabekanal wird von dem zugehörigen Bit im gesetzten INPUT DMA PENDING-Register (das mit Software geprüft werden kann) angezeigt. Auf diese Weise wird, sobald das Zählregister auf Eins gesetzt wird, das Halbwort (entweder die Länge oder auf "bereit zu senden") im Speicher gespeichert.
  • Vor dem Versuch, Daten mittels DMA in den Speicher einzugeben, die in einem uninitialisierten Eingabeport sind, müssen die Fehler-Flag (Datenverlust und Parität) zunächst geprüft werden oder sie gehen verloren. Dies geschieht, da der Load- Count-Befehl die Fehler-Flags löscht.
  • Der Prozessor erkennt zwei Fehlerarten in der Kommunikation. Jedes Halbwort wird mit einem Paritätsbit gesendet und beim Empfang wird eine Paritätsprüfung durchgeführt. Auch wenn ein Halbwort im DMA-Kanal empfangen wird, wird bevor das vorangegangene im Speicher gespeichert wird, ein Eingabe-Datenverlust-Fehler festgestellt. (Datenverlust kann auftreten, wenn die Eingabezählung vor der Ausgabezählung auf Null zurückgeht - - ein Softwarefehler, oder wenn gleichzeitig zu viele Nachrichten an den Prozessor gesendet werden.) Wenn einer der beiden Fehlerarten auftritt, wird das zugehörige Flag gesetzt und wenn die Eingabezählung Null erreicht, wird anstatt von "fertig", ein "Eingbefehler"-Interrupt erzeugt (falls II gesetzt ist).
  • Ein Softwarefehler, der nicht vom Prozessor festgestellt wird, tritt auf, wenn die Ausgabezählung kleiner als die Eingabezählung ist. In diesem Fall wird der Eingabekanal einfach blockieren, nachdem die Nachricht gesendet ist. Dieser Zustand kann durch richtige Software oder durch das Setzen von Zeitablaufbedingunger mit Hilfe des Zeitablaufregistern vermieden werden.
  • 4.7 Befehlsformate und Adreßmoden
  • Der Prozessor ist so ausgebildet, daß er so einfach und symmetrisch wie möglich ist. Die meisten Befehle arbeiten bei allen unterstützten Datenarten; die allgemeinen Register sind bei sämtlichen Operationen austauschbar; alle Adreßmoden arbeiten mit allen Befehlen einschließlich Verzweigungen. Ein Befehl besteht aus einem Befehlscode (Opcode), gefolgt von null, einem oder zwei Adreßfeldern. Die Darstellung eines Zwei-Adreßbefehls im Speicher wird unten gezeigt:
  • OPCODE REFERENZ 1 REFERENZ 2
  • niedrige Adresse hohe Adresse
  • In der oben gezeigten physikalischen Darstellung ist REFE- RENZ 2 sowohl einer der Operanden als auch das Ergebnis. Wenn der OPCODE z. B. Subtrahieren anzeigen würde, wäre die ausgeführte Operation:
  • REFERENZ 1 - REFERENZ 2 --> REFERENZ 2
  • Die Operandenordnungskonvention der Assemblersprache ist die gleiche. Wenn eine Subtraktionsoperation geschrieben wird SUBW A, B
  • wird auf diese Weise die Operation ausgeführt (A-B) ---> B
  • Die Ordnung der Adreßauswertung beginnt bei der niedrigen Adresse, so daß die Adresse für A vor der Adresse für B ausgewerten wird.
  • 4. 7. 1 Befehlscode-Formate
  • Alle Befehlscodes sind nur ein Byte lang und jede Gruppe der Operationsarten hat für zukünftige Erweiterungen wenigstens einen reservierten Code. Das Byte ist in zwei Felder aus jeweils vier Bits aufgeteilt. Das erste Feld, TP, gibt die Länge und die Art des Operanden an (z. B. ganze 8-Bit-Zahl, reelle 32- Bit-Zahl) und das zweite Feld, OP, bestimmt die Operation und die Operandenanzahl (z. B. Addiere -- 2 Operanden, Aufruf -- 1 Operand). Jede der Operationen wird ausführlich in Kapitel 4.8 beschrieben, aber die meisten werden aus ihrem Namen erkennbar, der in der folgenden Operationstabelle gezeigt ist. Das erste Feld ist horizontal dargestellt mit den geraden Werten über den ungeraden Werten. Das zweite Feld wird vertikal angezeigt und zweimal wiederholt.
  • Befehlscode: OP TP
  • 7 1 Abbildung der Befehlscodes TP OP TP OP
  • Die Abbildung der Befehlscodes zeigt einige Symmetrien, die in der folgenden Tabelle erklärt werden. OPERATIONEN OPERANDEN SPALTEN Spezial Byte oder Halbwort Verzweigung Wort (Adresse) Konversion Gemischt Byte Halbwort Reserviert für Doppelwort reelle-Zahl Lang-reelle-Zahl Reserviert für "Tempreal"-Zahl Reservie rt (Beliebig)
  • 4.7.2 Adressiermoden
  • Wenn ein Befehl Operanden hat, haben die Adreßfelder immer wenigstens einen Byte. Das erste Byte, genannt der Modus-Spezifizierer, entschlüsselt den Adressiermodus und für die meisten Befehle geben die ersten vier Bits die in der Adreßauswertung zu benutzenden allgemeinen Register an, während die nächsten vier Bits den Modus anzeigen. Das Format entspricht dem unten gezeigten:
  • MODUS-SPEZIFIZIERER: MD REG
  • Die Moden sind mit ihren Codierungen und Mnemonischen Codes unten aufgelistet. Tabelle der Adreßmoden Modusname Codierung mnemonischer Code Literal Register-Direkt Register-Indirekt Selbstdekrementierend Indirekt Automatisch überspringend Offset+Register indirekt Byte-Offset Halbwort-Offset Wort-Offset (Wort-Offset+Register) indirekt RESERVIERT Spezialmoden: Kein allgemeines Register Offset+PC Byte-Offset+PC Halbwort-Offset+PC Wort-Offset+PC (Wort-Offset+PC) indirekt Offset+SP Byte-Offset+SP Halbwort-Offset+SP Wort-Offset+SP (Wort-Offset+SP) indirekt Direkt Eingeben/Herausholen (Push/Pop) Direktdaten (Immediate) RESERVIERT EXCAPE
  • Das Assembler-Programm wählt die kürzestmögliche Referenzform. Die Adressiermoden werden unten ausführlich beschrieben. Zunächst beachte man das folgende:
  • 1) Die Adressen der Mehrwortoperanden beziehen sich auf das niederwertige Byte des Operanden.
  • 2) Offsets werden auf 32 Bits vorzeichenerweitert, bevor sie in der Berechnung der effektiven Adresse verwendet werden.
  • 3) Für Verzweigungs- und Aufrufbefehle im "Literal"- oder "Immediate"-Modus wird der Wert zum PC addiert; im Register- Direkt-Modus wird der Registerinhalt zum PC addiert; in allen anderen Moden ersetzt die Operandenadresse einfach den PC.
  • LITERAL 00xxxxxx (Modus = 0, 1, 2, 3)
  • Da die Codierung im Literalmodus die Moden 0, 1, 2, 3 umfaßt, gibt es sechs Bits zur Definition des Literalwertes. Wenn ein Ganzzahl-Operand erwartet wird, werden die sechs Bits als eine Standard-Zweierkomplement-Ganzzahl zwischen -32 und +31 behandelt. Und wenn der Befehl anzeigt, daß der Literalwert ein reeller Wert ist, wird der Ganzzahlwert implizit konvertiert (ohne Rundungsfehler) auf den entsprechenden Gleitkomma-Wert.
  • Wenn ein Literalwert in einem Verzweigungs-, Aufruf- oder Bewege-Befehl verwendet wird, wird der Literal zum PC addiert (d. h., es ergibt sich ein relativer Verzweigungs- oder Aufrufbefehl). Wenn ein Literal (oder Immediate-Daten) als Ziel verwendet wird, wird ein Operandenfehler angezeigt.
  • Register direkt C Rn
  • In diesem Modus ist der Operand im angezeigten Register enthalten. Der Wert wird gemäß dem Befehl ausgewertet: als reelle Zahl bei Gleitkomma-Befehlen, als ganze Zahl bei Ganzzahloperationen und als Bitkette bei logischen Befehlen. Wenn ein "Long-reeller"-Operand erwartet wird, steht der niederwertige Teil in Rn und der hochwertige Teil in Rn+1. Wenn ein Byte oder Halbwort auf ein Register übertragen wird, wird es vorzeichenerweitert.
  • Register indirekt 4 Rn
  • Das angezeigte Register enthält die Adresse des niederwertigen Bytes des Operanden.
  • Selbstdekrementierend D Rn
  • Das angezeigte Register wird um die Bytelänge des Operanden dekrementiert und danach wird die Operandenadresse zum Inhalt. Dieser Modus kann benutzt werden, um Softwarestapelspeicher zu bilden oder auf aufeinanderfolgende Matrixelemente zuzugreifen.
  • Selbstinkrementierend 6 Rn
  • Auf die vom Rn adressierten Daten wird zunächst zugegriffen und dann wird Rn um die Byteanzahl im Operanden hochgezählt. Dieser Modus wird benutzt, um schrittweise Matrizen abzuarbeiten und zusammen mit dem Selbstdekrementierenden Modus um Softwarestapel zu bilden.
  • Selbstinkrementierend indirekt 7 Rn
  • Das Register Rn zeigt auf einen 32-Bit-Wert, der die Operandenadresse ist. Nachdem auf den Operanden zugegriffen wurde, wird Rn um 4 hochgezählt, da Adressen 4 Bytes lang sind.
  • Automatisch überspringend 5 Rn
  • Nachdem der vom Inhalt des Rn adressierte Operand abgerufen wurde, wird der Wert in Rn+1 zu Rn addiert. (Wenn n = 15, dann ist n+1 = 0.) Dieser Modus ermöglicht das automatische Überspringen in einer Matrix um eine Menge (in Rn+1), die während der Programmausführung berechnet werden kann. Wenn beispielsweise eine Matrix in Spalten gespeichert ist, erlaubt es dieser Modus, automatisch auf aufeinanderfolgende Reihenelemente Bezug zu nehmen.
  • Offset + Register 8, 9, A Rn A=Byte, B=Halbwort, C= Wort
  • Dieser Mode berechnet die Operandenadresse, indem er den Wert in Rn zum Offset addiert, welcher eine ganze Zahl mit Vorzeichen ist, deren Länge vom gesetzten Modus bestimmt wird A=Byte, B= Halbwort, C=Wort). Der Offset folgt sofort dem Modusanzeiger und wird für die wirksame Adreßberechnung vorzeichenerweitert. Diese Moden sind auch für den PC und SP anstatt eines allgemeinen Registers verfügbar (siehe unten):
  • (Offset + Register) indirekt B Rn Wort-Offset
  • Die Inhalte des Rn werden zum Offset addiert (in diesem Modus ist nur der 32-Bit-Offset erlaubt) und der 32-Bit-Wert an dieser Adresse ist die Operandenadresse. Dieser Modus ist auch in Verbindung mit entweder PC oder SP anstelle eines allgemeinen Registers verfügbar (siehe unten):
  • Offset + PC F 0,1, 2 0=Byte, 1=Halbwort, 2= Wort
  • Die Adresse wird berechnet, indem die Befehlsadresse (der Wert des PC vor der Ausführung des aktuellen Befehls) zu dem vorzeichenerweiterten Offsetwert addiert wird, der ein Byte, Halbwort oder Wort sein kann. (Dieser Modus wird verwendet, um auf mit dem PC verbundene Operanden zuzugreifen und mit verzweigungsbefehlen relativ zum PC zu springen.) Das ermöglicht einen von der Kompilierungsposition unabhängigen Code.
  • (Offset + PC) indirekt F 3 Wort-Offset
  • Die Adresse des Befehls (der Inhalt des PC) wird zum Wort- Offset addiert und der 32-Bit-Wert an dieser Adresse ist die Operandenadresse.
  • Offset + SP F 4, 5, 6 4=Byte, 5=Halbwort, 6= Wort
  • Die Adresse wird berechnet, indem der SP und der vorzeichenerweiterte Offset addiert werden. Der Offset kann ein Byte, Halbwort oder Wort sein. Dieser Modus wird oft verwendet, um auf dem Stapel auf lokale Variablen in einem Einschaltdatensatz zuzugreifen.
  • (Offset + SP) indirekt F 7 Wort-Offset
  • Der SP und das Wort-Offset werden zusammen addiert und der 32-Bit-Wert an der Adresse ist die Operandenadresse.
  • Direkt F 8, 9, A 8=Byte, 9=Halbwort, A= Wort
  • Die Adresse ist der vorzeichenlose Wert des Offsets (abhängig vom Modus Byte, Halbwort oder Wort), das auf den Modusspezifizierer folgt.
  • Indirekt F B Wort-Offset
  • Das dem Modusspezifizierer folgende Wort zeigt auf einen 32-Bit-Wert, der die Adresse des Operanden darstellt.
  • Direktdaten F C Wert
  • In diesem Modus folgt der Operand dem Modusspezifizierer. Für arithmetische und logische Operatoren wird die Länge und die Art des Wertes vom Befehl angezeigt. ADDB (Addiere Byte) wird auf diese Weise eine 8-Bit-Ganzzahl mit Vorzeichen voraussetzen, während MULL (Multipliziere Lang-reelle Zahl) erwarten wird, einen 64-Bit-Gleitkomma-Operanden als "Wert" zu finden. Ein Direktoperand, der mit einem Verzweigungs- oder Adreß-Befehl verwendet wird, verursacht einen "ungültiger Operanden"- Fehler. Wenn dieser Modus als Bestimmung benutzt wird (die zweite Adresse in einem Zweiadressenbefehl) wird ein Operandenfehler angezeigt.
  • Push/Pop F D
  • Wenn dieser Modus der erste Spezifizierer ist, nimmt er den obersten Operanden vom Stapel und zählt ("pops") SP um die Länge des Operanden hoch. So wird der Befehl
  • ADDR SP,mem
  • einen reellen 32-Bit-Wert oben vom Stapel als ersten Operanden benutzen, den Stapel abbauen und das Ergebnis im "mem" speichern. In ähnlicher Weise wird ein MOVH SP,mem
  • das Halbwort vom oberen Stapelende in den "mem" übertragen und den Stapel abbauen. Als zweiter Spezifizierer verwendet, kommen der zweite Operand und das Ergebnis vom oberen Ende des Stapels. So verändert sich mit arithmetischen und logischen Befehlen SP nicht. Jedoch dekrementiert MOVR mem,SP
  • SP um vier (die Länge des Operanden) und überträgt den reellen Wert im "mem" auf den Stapel. Wenn dieser Modus in beiden Spezifizierern verwendet wird, dann ergeben sich die klassischen Stapeloperationen: Beide Operanden werden aus dem Stapelspeicher herausgeholt, die Operation wird ausgeführt und das Ergebnis wird wieder in den Stapelspeicher eingegeben. Im Fall der Division und der Subtraktion ist der oberste Operand der Dividend bzw. der Subtrahend. Wenn beide Spezifizierer SP sind, sind bei einem Übertragungsbefehl nur die Flags betroffen.
  • 4.8 Befehlssatz 4.8.1 Einzelheiten des Befehlssatzes
  • Die Befehle sind alphabetisch geordnet (mnemonisch) und sind gemäß der Operation gruppiert (z. B. sind alle ADD-Befehle in einer Gruppe).
  • Das Speicherformat aller Befehle wird unten gezeigt. Die Quell- und Bestimmungsspezifizierer sind wählbar. Während die meisten Befehle zwei Adressen haben, gibt es einige mit keiner oder einer Adresse.
  • BEFEHLSCODE REFERENZ 1 (src) REFERENZ 2 (dsrc, des)
  • niedrige Adresse im Speicher
  • Die Quell(src)-Adresse wird immer zuerst ausgewertet und alle Adreßoperationen (z. B. Automatische-Dekrementierung> werden ausgeführt, bevor die Bestimmungs(dsrc, des)-Adresse ausgewertet wird. (In der obigen Schreibweise bezieht sich "dsrc" auf den Operanden, bevor die Operation ausgeführt wurde, und "des" bezieht sich auf den Inhalt dieser Adresse nach der Operation.) Das wird nicht bei Stapeladreßmoden angewendet, bei denen SP stets zu Beginn des Befehls verwendet wird. Jeder Adreßmodus, der sich auf PC (oder SP) bezieht, verwendet den Wert des PC (oder SP) zu Beginn des Befehls. Der Quell-Operand wird nie verändert, es sei denn, der Stapeladreßmodus wird verwendet. Wenn ein Befehl mit Byte oder Halbwortoperanden auf ein allgemeines Register verweist, wird der höher bewertete Datenteil nicht beachtet, wenn es eine Quelle ist, und wenn es eine Bestimmung ist, wird der höher bewertete Teil vorzeichenerweitert.
  • Die speziellen Ausnahmebedingungen für jeden Befehl sind in der folgenden Information enthalten. Es gibt einen Satz von Ausnahmen, die unabhängig von dem speziellen Befehl sind:
  • 1) Speicherfehler (ECC oder korrigierbarer ECC)
  • 2) Zeitablauf
  • 3) Operandenfehler (reservierter Adressiermodus, Literal oder "Direktdaten" als Bestimmung)
  • 4) Adreßfehler (Adreßwert größer als 2**17-1)
  • 5) Stapelüberlauf
  • Das am Bestimmungsort eines Gleitkomma-Befehls gespeicherte Ergebnis wird unten beschrieben. Das Ergebnis wird gespeichert, bevor die Ausnahme von einem Interrupt angezeigt wird (ausgenommen Division-durch-Null und Ungültig).
  • 1) Ungenau: das richtig gerundete Ergebnis
  • 2) Bereichsunterschreitung: der richtig gerundete Bruch, jedoch mit dem um den Bias erweiterten Exponenten
  • 3) Division durch Null: kein Ergebnis wird gespeichert; der Bestimmungsort wird nicht verändert
  • 4) Bereichsüberschreitung: der richtig gerundete Bruch, jedoch mit einem um den Bias verringerten Exponenten
  • 5) Ungültig: kein Ergebnis wird gespeichert; der Bestimmungsort wird nicht verändert
  • Es ist wichtig, sich daran zu erinnern, daß der Negativ(N)-Flag immer gemäß dem Vorzeichen des richtigen Ergebnisses gesetzt wird. Bei einer Ganzzahl-Bereichsüberschreitung wird auf diese Weise der Bestimmungsort positiv erscheinen, selbst wenn N negativ anzeigt.
  • 4.8.2. Befehlsdefinitonen
  • ADC --- ADDIERE MIT ÜBERTRAG
  • Befehlscodes: 50 ADCB ADd mit Übertrag-Byte
  • 52 ADCH ADd mit Übertrag-Halbwort
  • 54 ADCW ADd mit Übertrag-Wort
  • Assembler
  • Syntax: ADC{B,H,W} scr,des
  • Operation: src + dsrc + Übertrag --> des
  • Flags: C < -- Übertrage vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung
  • U < -- 0
  • Beschreibung: Die Übertrag- und Quellwerte werden zur Bestimmung addiert und das Ergebnis ersetzt die Bestimmung.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung
  • ADCD --- ADDIERE DEZ 1MAL MIT ZEHNER ÜBERTRAG
  • Befehlscodes: 81 ADCD ADd dezimal mit Übertrag
  • Assembler Syntax: ADCD src,des
  • Operation: src + dsrc + Carry --> des
  • Flags: C < -- Übertrage vom hochwertigen Digit
  • N < -- 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Der Übertrag und Quellwert (behandelt als ein zweistelliger Dezimalwert) werden zur Bestimmung addiert (ebenfalls als zweistelliger Dezimalwert betrachtet) und das Ergebnis ersetzt die Bestimmung. Es wird keine Überprüfung hinsichtlich ungültiger BCD-Codierungen durchgeführt.
  • Ausnahmen: keine
  • ADD --- ADDIERE
  • Befehlscodes: 40 ADDB ADD Byte
  • 42 ADDH ADD Halbwort
  • 44 ADDW ADD Wort
  • 48 ADDR ADD reelle Zahl
  • 4A ADDL ADD Lang-reelle Zahl
  • Assembler
  • Syntax: ADD{B,H,W,R,L} src,des
  • Operation: src + dsrc --> des
  • Flags: (Ganzzahl-Operationen: ADDB,ADDH, ADDW)
  • C < -- Übertrage vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung
  • U < -- 0
  • Flags: (Gleitkomma-Operationen: ADDR, ADDL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet
  • UF < -- des Bereich unterschritten FZ < -- 0
  • OF < -- des Bereich überschritten
  • IN < -- dsrc or src = Nan (keine Zahl)
  • Beschreibung: Die Quelle wird zur Bestimmung addiert und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung, Ungenau, Bereichsunterschreitung, Bereichsüberschreitung, Ungültig
  • AND --- UND
  • Befehlscode: 41 ANDB UND-Byte 43 ANDH UND-Halbwort
  • 45 ANDW UND-Wort
  • Assembler
  • Syntax: AND{B,H.W} src, des
  • Operation: src AND dsrc --> des
  • Flags: C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Der Bestimmungsoperand wird mit der Quelle UND-verknüpft und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahme: keine
  • B -- BRANCH (Verzweigung) Befehlscodes unbedingt unbedingter Sprung Verzweigung auf Bereichsüberschreitung Nichtschreitung Gleich Ungleich Größer Größer o. Gleich Kleiner Kleiner o. Gleich Verzweigung bei Vorzeichenlos Größer Größer oder Gleich Vcorzeichenlos Kleiner oder Gleich
  • Assembler
  • Syntax: JMP Src
  • Operation: Wenn Bedingung wahr ist, dann im Literal- oder Immediate-Modus: PC§< --PC+src im Register-Direkt-Modus: PC< --PC+Inhalt
  • (reg)
  • Andere Moden: PC < -- Adresse des (src)
  • Flags: Es werden keine Flags verändert außer dem IN (ungültige Ausnahme). IN wird nur bei BG, BGE, BL, BLE gesetzt, wenn U=1. Der Wiederholungsmodus (REP) wird zurückgesetzt (REP < -- 00), nachdem der Zähler dekrementiert worden ist und der Zustand überprüft wurde (siehe unten).
  • Beschreibung: Die Verzweigungsbefehle sind in den Literal, Immediate und Register-Direkt-Moden relativ und benutzen die Werte des PC zu Beginn des Befehls. In allen anderen Moden ersetzt die Adresse des Quelloperanden den PC. Die ungültige Ausnahme ergibt sich, wenn der Vergleich auf wenigstens eine Nan (keine Zahl) zugreift und mit dem Ergebnis wird eine Verzweigung mit Vorzeichen durchgeführt. Die vorzeichenlosen Verzweigungen sollten für die in den IEEE Gleitkomma-Standards definierten Prädikate benutzt werden, die nicht falsch sein dürfen. Der Wiederholungsmodus wird nach der Dekrementierung des Zählers und dem Test der Abbruchbedingung zurückgesetzt, so daß, wenn ein Wiederholungsbefehl einer Verzweigung vorangeht, sie zusammen wie ein "Schleife"- Befehl wirken.
  • Ausnahmen: Ungültig (BG, BGE, BL, BLE wenn U=1); Illegale Adresse (Immediate-Modus)
  • BCNT --- BROADCAST COUNT (RUNDSENDUNGSZÄHLUNG)
  • Befehlscode: Cr BCNT Rundsendungszählung
  • Assembler
  • Syntax: BCNT src,des
  • Operation: src --> des MASKE (Alle Ausgabezählregister-#'ern)
  • Flags: keine Änderungen
  • Beschreibung: Die Ausgabezählregister, deren Nummern den Bitpositionen in des entsprechen, die auf Eins gesetzt werden, werden mit dem src-Wert geladen. Die Ausgabezählregister sind 32, 33,. . .,41, 63 numeriert, so sind die Bitpositionen in des mit einem Offset von 32 zu verstehen. Sowohl src als auch des sind Wortwerte.
  • Ausnahmen: keine
  • BIT --- BITTEST
  • Befehlscodes: 61 BITB BIT Test-Byte 63 BITH BIT Test-Halbwort
  • 65 BITW BIT Test-Wort
  • Assembler
  • Syntax: BIT{B,H,W} src,dsrc
  • Operation: src UND dsrc
  • Flags: C < -- C
  • N < -- (src UND dsrc) < 0
  • Z < -- (src UND dsrc) = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Das Z-Flag wird auf Null gesetzt, wenn alle Bits des src, die vom dsrc maskiert werden, Null sind. Weder src noch dsrc werden verändert.
  • Ausnahmen: keine
  • BKPT --- BREAKPOINT (Unterbrechungspunkt)
  • Befehlscode: 6B BKPT Unterbrechungspunkt
  • Assembler
  • Syntax: BKPT
  • Operation: Erzeuge Interrupt 2:
  • Stapel < -- PS Stapel < -- PC PC < -- Wort an Platz 16
  • PS < -- Wort an Platz 20
  • Flags: Alle Flags sind gemäß dem neuen PS gesetzt
  • Beschreibung: Dieser Einbytebefehl wird von einem Debugger benutzt, um in einem Anwenderprogramm Unterbrechungspunkte zu setzen.
  • Ausnahmen: keine
  • BPTR --- BROADCAST POINTER (Rundsendungszeiger)
  • Befehlscode: D5 BPTR Rundsendezeiger
  • Assembler
  • Syntax: PBTR src,des
  • Operation: src --> des MASKE (Alle Ausgaberegister-#'ern>
  • Flags: keine Veränderungen
  • Beschreibung: Die Ausgaberegister, deren Nummern den Bitpositionen in des entsprechen, die gesetzt sind, werden mit src geladen. Dieser Befehl baut eine Gruppe von Ausgabezeigerregistern auf, um einen Speicherbereich zu adressieren, der eine rundzusendende Nachricht enthält.
  • Die Zeigerregister sollten aufgebaut werden, bevor die Zählregister (BCNT) geladen werden.
  • Sowohl src als auch des sind Wortwerte.
  • Ausnahmen: keine
  • CALL --- AUFRUF
  • Befehlscode: CF CALL AUFRUF
  • Assembler
  • Syntax: CALL src
  • Operation: Literal- oder Immediate-Modus: Stapel < -- PC PC < -- PC+src Register-Direkt-Modus: Stapel < -- PC
  • PC< --PC+Inhalt (reg) Andere Moden: Stapel < -- PC PC < -- Adresse des (src)
  • Flags: keine Veränderungen außer REP < -- 00 (siehe unten)
  • Beschreibung: Der aktuelle Wert des Befehlszählers (PC) wird in den Stapelspeicher eingegeben und beim Laden des PC mit einem neuen Wert wird eine Verzweigung zu einer Subroutine genommen. Wenn dem CALL-Befehl ein REPEAT-Befehl vorangegangen ist, wird der Zähler herabgezählt und die Abbruchbedingung geprüft. Der Wiederholungsmodus wird zurückgesetzt (REP < - 00) und, wenn der Abbruch nicht erreicht wird, dann zeigt die Rückgabeadresse, die in den Stapelspeicher eingegeben wird, auf den REPEAT-Befehl. Wenn der Abbruch erreicht wird, wird der CALL-Befehl übersprungen. Das ermöglicht dem Prozessor Mehrfachaufrufe auszuführen. Wenn kein vorangegangenes REPEAT vorliegt, dann zeigt die gesicherte Rückgabeadresse auf den Beginn des Befehls, der dem Aufrufbefehl folgt. Wenn der Adressiermodus Literal-, Immediate- oder der Register-Direkt-Modus ist, ist der Aufruf relativ und benutzt den Wert des PC zu Beginn des CALL- Befehls.
  • Ausnahmen: Illegale Adresse (Immediate-Modus)
  • CLC --- CLEAR CARRY (Lösche Übertrag)
  • Befehlscode: 1B CLC CLEAR CARRY (Lösche Übertrag;
  • Assembler
  • Syntax: CLC
  • Operation: C < -- 0
  • Flags: C < -- 0 keine anderen Veränderungen
  • Beschreibung: Das Übertrag-Flag wird auf Null gesetzt.
  • Ausnahmen: keine
  • CMC -- COMPLEMENT CARRY (Bilde Komplement des Übertrags)
  • Befehlscode: 3B CMC Bilde Komplement des Übertrags
  • Assembler
  • Syntax: CMC
  • Operation: C < -- not(C)
  • Flags: C < -- not(C) keine anderen Änderungen
  • Beschreibung: Das Carry-Flag wird umgekehrt.
  • Ausnahmen: keine
  • CMP --- COMPARE (VERGLEICHE)
  • Befehlscodes: 30 CMPB Vergleiche Byte 32 CMPH Vergleiche Halbwort
  • 34 CMPW Vergleiche Wort
  • 38 CMPR Vergleiche reelle Zahl
  • 3A CMPL Vergleiche Lang-reelle Zahl
  • Assembler
  • Syntax: CMP{B,H,W,R,L} src,dsrc
  • Operation: src - dsrc --> tem
  • Flags: (Ganzzahl-Operationen: CMPB, CMPH, CMPW)
  • C < -- src < (vorzeichenlos) dsrc
  • N < -- tem < 0
  • Z < -- tem = 0
  • V < -- 0
  • U < -- 0
  • Flags: (Gleitkomma-Operationen: CMPR, CMPL)
  • C < -- tem < 0
  • N < -- tem < 0
  • Z < -- tem = 0
  • V < -- 0
  • U < -- src oder dsrc = Nan (keine Zahl)
  • IX < -- 0
  • UF < -- 0
  • FZ < -- 0
  • OF < -- 0
  • IN < -- 0
  • Beschreibung: Der Wert src wird mit dsrc verglichen und die zugehörigen Flags werden für spätere bedingte Verzweigung gesetzt. Weder src noch dsrc werden geändert. Das Carry-Flag wird von den Gleitkomma-Vergleichen gesetzt, so daß die vorzeichenlosen Verzweigungen für die ungeordneten in dem IEEE-Gleitkomma-Standards definierten Prädikate benutzt werden können.
  • Auch wenn entweder src oder dsrc keine Zahl ist, wird die zugehörige Ungültig-Ausnahme vom Verzweigungsbefehl angezeigt.
  • Ausnahmen: Keine
  • CV -- CONVERT (Konvertiere) Befehlscodes Konvertiere Byte zu reelle Zahl Halbwort Lang-reelle Zahl Byte zu Lang-reelle Zahl Halbwort Lang-reelle Zahl Wort Lang-reelle Zahl Real Lang-reelle Zahl Byte zu Wort Halbwort zu Wort Wort zu Byte Wort zu Halbwort
  • Assembler
  • Syntax: CV{BW,BR,BL,HW,HR,HL,WL, WB,WH,RL,LR} src,des
  • Operation: CONVERT (src) --> des
  • Flags: (Alle Operationen)
  • C < -- C -wenn des ganzzahlig ist)
  • C < -- des < 0 (wenn des GLEITKOMMA-Wert ist)
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung (wenn des ganzzahlig ist) V < -- 0 (wenn des GLEITKOMMA-Wert ist)
  • U < -- 0
  • IX < -- des gerundet
  • UF < -- des Bereich unterschritten
  • FZ < -- 0
  • OF < -- des Bereich überschritten
  • IN < -- src = Nan
  • Beschreibung: Der Quelloperand wird zur Art und Länge, die vom Bestimmungsspezifizierer angezeigt wird, konvertiert und an der Bestimmungsadresse gespeichert.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung [CVWB, CVWH, CVRW, CVLW], Ungenau [CVLR], Bereichsunterschreitung [CVLR], Bereichsüberschreitung [CVLR], Ungültig [CVRL, CVLR]
  • DI --- DISABLE INTERRUPTS (SPERRE INTERRUPS)
  • Befehlscode: 9B DI Sperre Interrupts
  • Assembler
  • Syntax: DI
  • Operation: 0 --> IE (Flag im Programmstatusregister>
  • Flags: IE < -- 0
  • keine anderen Änderungen
  • Beschreibung: Das Interrup-Freigabe(IE)-Flag in dem Programmstatusregister wird auf Null gesetzt.
  • Das sperrt alle sperrbaren Interrupts.
  • Ausnahmen: keine
  • DIV --- DIVIDE (DIVIDIERE)
  • Befehlscodes: A0 DIVB Dividiere Byte A2 DIVH Dividiere Halbwort
  • A4 DIVW Dividiere Wort
  • A8 DIVR Dividiere Real
  • AA DIVL Dividiere Longreal
  • Assembler
  • Syntax: DIV{B,H,W,R,L} src,des
  • Operation: dsrc/src --> des
  • Flags: (Ganzzahl-Operationen: DIVB,DIVH,DIVW) C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung U < -- 0
  • Flags: (Gleitkomma-Operationen: DIVR,DIVL) C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet UF -- des Bereich unterschritten FZ < -- (src = 0 und des < > 0)
  • OF < -- des Bereich überschritten
  • IN < -- (src oder dsrc = keine Zahl oder (src und dsrc = 0)
  • Beschreibung: Die Bestimmung wird durch die Quelle dividiert und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung (dsrc = größter negativer Wert, src = -1), Ganzzahl-Null- Divison, Ungenau, Bereichsunterschreitung, Gleitkomma-Null-Division, Bereichsüberschreitung, Ungültig
  • DVR --- DIVIDE REVERSE (DIVIDIERE UMGEKEHRT)
  • Befehlscodes: BO DVRB Dividiere umgekehrt - Byte
  • B2 DVRH Dividiere umgekehrt - Halbwort
  • B4 DVRW Dividiere umgekehrt - Wert
  • B8 DVRR Dividiere umgekehrt - reelle Zahl
  • BA DVRL Dividiere umgekehrt - Lang-reelle Zahl
  • Assembler
  • Syntax: DVR{B,H,W,R,L} src,des
  • Operation: src/dsrc --> des
  • Flags: Ganzzahl-Operationen: DVRB , DVRH, DVRW)
  • C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung
  • U < -- 0
  • Flags: (Gleitkomma-Operationen: DVRR, DVRL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet
  • UF < -- des Bereich unterschritten
  • FZ < -- (des = 0 und src < > 0)
  • OF < -- des Bereich überschritten
  • IN < -- (src oder dsrc = keine Zahl) oder (src und dsrc = 0)
  • Beschreibung: Der Quelloperand wird durch den Bestimmungsoperanden geteilt und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung (src = größter negativer Wert, dsrc = -1), Ganzzahl- Null-Division, Ungenau, Bereichsunterschreitung, Gleitkomma-Null-Division, Bereichsüberschreibung, Ungültig
  • EI --- ENABLE INTERRUPTS (GEBE INTERRUPTS FREI)
  • Befehlscode: 8B EI Gebe Interrupts frei
  • Assembler
  • Syntax: EI
  • Operation: 1 --> IE (Interrupt-Freigabe-Flag im Programmstatusregister)
  • Flags. IE < -- 1 keine anderen Veränderungen
  • Beschreibung: Das Interrupt-Freigabes(IE)-Flag im Programmstatusregister wird auf Eins gesetzt. Das gibt alle Interrupts frei, die nicht auf andere Weise gesperrt wurden.
  • Ausnahmen: keine
  • ER --- ERROR (FEHLER)
  • Befehlscodes: 4B ERON Fehler ein
  • 5B EROF Fehler aus
  • Assembler
  • Syntax: ER{ON,OF}
  • Operation: ERROR-Pin < -- 1 (ERON)
  • ERROR-Pin < -- 0 (EROF)
  • Flags: keine Änderungen
  • Beschreibung: Fehler ein und aus werden verwendet, um eine Pin-Pegel zu setzen, um eine mögliche falsche Bedingung anzuzeigen (siehe 4.5).
  • Ausnahmen: keine
  • FF0 --- FIND FIRST ONE (FINDE DIE ERSTE EINS)
  • Befehlscodes: 31 FFOB Finde die ersdte Eins - Byte
  • 33 FFOW Finde die erste Eins - Halbwort
  • 35 FFOW Finde die erste Eins - Wort
  • Assembler
  • Syntax: FFOfB,H,Wi src,des
  • Operation: Ort des ersten (src) --> des
  • Flags: C < -- C
  • N < -- 0
  • Z < -- src = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Wenn die Quelle Null ist, wird die Bestimmung auf 8 (FFOB), 16 (FFOH) oder 32 (FFOW) gesetzt und das Z-Flag auf Eins gesetzt. Sonst ist Z Null und die Bestimmung wird auf die Bitposition des ersten 1-Bits in der Quelle gesetzt, von rechts abgefragt (z. B. wenn das niedrigst bewertete Bit Eins ist, wird die Bestimmung auf Null gesetzt). Die Bestimmung ist ein Byte, selbst wenn die Quelle ein Byte (FFOF), Halbwort (FFOH) oder Wort (FFOW) sein kann.
  • Ausnahmen: keine
  • LCNT --- LOAD COUNT (LADE ZÄHLUNG)
  • Befehlscode: A5 LCNT Lade-Zählung
  • Assembler
  • Syntax: LCNT src,des
  • Operation: src --> I/O-Zählregister #(des)
  • Flags: keine Änderungen
  • Beschreibung: Das I/O-Zählregister, das durch den Inhalt der Bestimmung gekennzeichnet wird, wird mit dem Quelloperanden geladen. Die Eingangsregister sind numeriert 0,1,. . .,9, 31 und die Ausgangsregister sind 32, 33,. . .,41, 63. Das niedrigst bewertete Bit des Zählregisters ist immer Null, aber es wird kein Fehler angezeigt, wenn versucht wird eine ungerade Zahl zu laden. Es wird auch kein Fehler angezeigt, wenn des größer als 63 ist, aber das Ergebnis ist undefiniert. Der Quelloperand ist ein Wort und die Bestimmung ist ein Byte.
  • Ausnahmen: keine
  • LDPR --- LOAD PROZESSOR REGISTERS (LADE PROZESSORREGISTER)
  • Befehlscodes: 85 LDPR Lade-Prozessorregister
  • Assembler
  • Syntax: LDPR src,des
  • Operation: src --> Prozessorregister #(des)
  • Flags: keine Änderungen
  • Beschreibung: Der Quellwert wird in das Prozessorregister geladen, das von der Bestimmung angezeigt wird. Die Prozessorregister sind unten aufgelistet. Es wird keine Operation ausgeführt, wenn ein "Nur-Lese"-Register vom des bestimmt wird. Die Quelle ist ein Wort- und der Bestimmungsoperand ist ein Bytewert, der eines der Prozessorregister anzeigt.
  • P0 SP Stapelzeiger
  • P1 PS Programmstatus
  • P2 FR Fehlerregister
  • P3 CR Konfigurationsregister
  • P4 P1 Prozessor-ID
  • P5 OR Ausgabe bereit (Nur-Lese)
  • P6 IR Eingabe bereit (Nur-Lese)
  • P7 OE Ausgabe-Freigabe
  • P8 IE Eingabe-Freigabe
  • P9 IP Eingabe abhängig (Nur-Lese)
  • P10 PE Paritätsfehler (Nur-Lese)
  • P11 IO Eingabe-Datenverlust (Nur-Lese)
  • Ausnahmen: keine
  • LPTR --- LOAD POINTER (LADE ZEIGER)
  • Befehlscode: B5 LPTR Lade-Zeiger
  • Assembler Syntax: LPTR src,des
  • Operation: src --> I/O-Adreßregister #(des)
  • Flags: keine Änderungen
  • Beschreibung: Das von der Bestimmung bestimmte I/O-Adreßregister wird mit dem Quelloperanden geladen.
  • Die Eingaberegister sind mit 0,1,. . .,9, 31 numeriert und die Ausgaberegsiter mit 32, 33,. . .,41, 63. Das niedrigst bewertete Bit des Adreßregisters ist immer Null, aber es wird kein Fehler angezeigt, wenn versucht wird, eine ungerade Adresse zu laden. Beide Operanden sind Wörter.
  • Ausnahmen: keine
  • MOV --- MOVE (BEWEGE)
  • Befehlscodes: 00 MOVB Bewege Byte
  • 02 MOVH Bewege Halbwort
  • 04 MOVW Bewege Wort
  • 08 MOVR Bewege Real
  • 0A MOVL Bewege Longreal
  • Assembler
  • Syntax: MOV{B,H,W,R,L} src,des
  • Operation: src --> des
  • Flags: keine Änderungen
  • Beschreibung: Der Quellwert wird an die Bestimmungsadresse übertragen
  • Ausnahmen: keine
  • MOVA --- MOVE ADDRESS (BEWEGE ADRESSE)
  • Befehlscodes: E5 MOVA Bewege Adresse
  • Assembler
  • Syntax: MOVA src,des
  • Operation: Literal- oder Immediate-Modus: src + PC --> des Register-Direkt-Modus: Inhalt (reg) + PC --> des Stapelmodus: Inhalt (SP) --> des Andere Moden: von (src) Adresse --> des
  • Flags: keine Änderungen
  • Beschreibung: Der Adreßspezifizierer des Quelloperanden wird ausgewertet und am Bestimmungsort gespeichert. Wenn der Adreßmodus der Quelle Literal, Immediate oder der Register-Direkt-Modus ist, wird der PC zunächst zum Quellwert addiert. Der verwendete Wert des PC ist der zu Beginn des Befehls. Wenn der Quelladreßmodus der Stapelmodus ist, dann wird der Inhalt des Stapelzeigers an die Bestimmung übertragen.
  • Ausnahmen: Illegale Adresse
  • MUL --- MULTIPLY (MULTIPLIZIERE)
  • Befehlscodes:
  • 80 MULB Multipliziere Byte
  • 82 MULH Multipliziere Halbwort
  • 84 MULW Multipliziere Wort
  • 88 MULR Multipliziere Real
  • 8A MULL Multipliziere Longreal
  • Assembler
  • Syntax: MUL{B,H,W,R,L} src,des
  • Operation: src * dsrc --> des
  • Flags: (Ganzzahl-Operationen: MULB,MULH,MULW) C < -- c
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung
  • U < -- 0
  • Flags: (Gleitkomma-Operationen: MULR, MULL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet UF < -- des Bereich unterschritten
  • FZ < -- 0
  • OF < -- des Bereich überschritten
  • IN < -- dsrc oder src = keine Zahl
  • Beschreibung: Die Quelle und die Bestimmung werden multipliziert und das Ergebnis wird an der Bestimmungsadresse gespeichert. Ganz Zahl-Bereichsüberschreitung tritt auf, wenn die Produkthälfte mit hoher Ordnung nicht die Vorzeichenerweiterung der Hälfte mit niedriger Ordnung ist. Das ist selbst dann wahr, wenn die Operanden Bytes oder Halbwörter in den Registern sind.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung, Ungenau, Bereichsunterschreitung, Bereichsüberschreitung, Ungültig
  • NEG --- NEGATE (NEGIERE)
  • Befehlscodes:
  • 10 NEGB Negiere Byte
  • 12 NEGH Negiere Halbwort
  • 14 NEGW Negiere Wort
  • 18 NEGR Negiere Real
  • 1A NEGL Negiere Longreal
  • Assembler
  • Syntax: NEG{B,H,W,R,L} src,des
  • Operation: -(src) --> des
  • Flags: (Ganzzahl-Operationen): NEGB,NEGH,NEGW)
  • C < -- Ausborgen vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung
  • U < -- 0
  • Flags: (Gleitkomma-Operationen): NEGR, NEGL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- 0
  • UF < -- 0
  • FZ < -- 0
  • OF < -- 0
  • IN < -- src = keine Zahl
  • Beschreibung: Der Quelloperand wird negiert und das Ergebnis wird an der Bestimmungsadresse gespeichert. Ganzzahl-Bereichsüberschreitung tritt auf, wenn die Quelle die größte negative Zahl ist.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung, Ungültig
  • NOP --- NO OPERATION (KEINE OPERATION)
  • Befehlscode: OB NOP Keine Operation
  • Assembler
  • Syntax: NOP
  • Operation keine
  • Flags: keine Änderungen
  • Beschreibung: Dieser Befehl tut nichts.
  • Ausnahmen: keine
  • NOT --- NICHT
  • Befehlscodes:
  • 71 NOTB NICHT - Byte
  • 73 NOTH NICHT - Halbwort
  • 75 NOTW NICHT - Wort
  • Assembler
  • Syntax: NOT{B,H,W} src,des
  • Operation: NOT(src) --> des
  • Flags: C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Der Quelloperand wird komplementiert und das Ergebnis wird am Bestimmungsort gespeichert.
  • Ausnahmen: keine
  • OR --- OR (ODER)
  • Befehlscodes:
  • 51 ORB ODER-Byte
  • 53 ORH ODER-Halbwort
  • 55 ORW ODER-Wort
  • Assembler
  • Syntax: OR{B,H,W} src,des
  • Operation: src OR dsrc --> des
  • Flags: C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Die Bestimmung und die Quelle werden durch ODER verknüpft und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahmen: keine
  • REM --- REMAINDER (DIVISIONSREST)
  • Befehlscodes:
  • 90 REMB Rest-Byte
  • 92 REMH Rest-Halbwort
  • 94 REMW Rest-Wort
  • 98 REMR Rest-Real
  • 9A REML Rest-Longreal
  • Assembler
  • Syntax: REM{B,H,W,R,L} src,des
  • Operation: dsrc REM src --> des
  • Flags: (Ganzzahl-Operationen: REMB,REMH,REMW)
  • C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Flags: (Gleitkomma-Operationen: REMR, REML)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- abs(des) < abs(src) V < -- 0
  • U < -- 0
  • IX < -- 0
  • UV < -- des Bereich unterschritten
  • FZ < -- 0
  • OF < -- 0
  • IN < -- (dsrc oder src = keine Zahl) oder
  • (src = 0)
  • Beschreibung: Der Rest der Division der Bestimmung geteilt durch die Quelle ersetzt die Bestimmung. Der Gleitkomma-Befehl wird zur Argumentverkleinerung benutzt und ist stets exakt. Jedoch ist es nur ein unvollständiger Divisionsrest; der Befehl muß wiederholt werden bis Z Eins wird (das ist der Grund für die ungewöhnliche Definition des Z-Flags).
  • Ausnahmen: Ganzzahl-Null-Division, Bereichsunterschreitung, Ungültig
  • REP --- REPEAT (WIEDERHOLE)
  • Befehlscodes:
  • 1E REP- Wiederhole während der Zähler nicht Null ist
  • 2E REPZ Wiederhole während Null-Flag gesetzt ist
  • 3E REPNZ Wiederhole während Null-Flag nicht gesetzt ist
  • Assembler
  • Syntax: REP{Z,NZ} src
  • Operation: REP: PS(30,31) < -- 01; Zählung =
  • REG#(src) REPZ: PS(30, 31) < -- 10; Zählung =
  • REG#(src); Z = 1
  • REPNZ: PS(30,31) < -- 11; Zählung = REG#(src); Z=0
  • für alle: PS(26, 27, 28, 29) < -- Zählung nachdem die Wiederholungsbedingung erfüllt ist (beim REPZ und RPNZ wird das Z- Flag vor der Zählung überprüft) PS(30, 31) < -- 00
  • Flags: keine Änderungen
  • Beschreibung: Ein Wiederholungsbefehl kann jedem anderen Befehl vorangehen. Er veranlaßt die Bits 26- 31 in dem Programmstatusregister wie folgt gesetzt zu werden. Der der Wiederholung folgende Befehl wird wieder ausgeführt und das angezeigte Zählregister (src muß ein allgemeines Registerbestimmungselement sein) wird herabgezählt, bis die Wiederholungsbedingung erfüllt ist. Eine der Bedingungen für alle drei Befehle ist, daß das Zählregister Null wird. Aber wenn das Z-Flag Null wird (REPZ) oder Eins (REPNZ), dann ist die Bedingung auch erfüllt und die Wiederholung wird abgebrochen, indem die Bits 30 und 31 in dem PS- Regiseter auf Null gesetzt werden. Das Z-Flag wird überprüft (für REPZ und RPNZ) bevor das Zählregister dekrementiert wird, so daß es die Anzahl, wie oft der folgende Befehl ausgeführt wird, richtig zählen wird. Wenn der Zähler zu Beginn Null ist, wird der folgende Befehl übersprungen. Wenn eine Wiederholung mit einem Verzweigungsbefehl verwendet wird, hat sie die gleiche Wirkung wie ein Rückgabebefehl. Wenn ein anderer Adreßmodus als der direkte Registermodus verwendet wird, wird ein Adreßfehler angezeigt. Auch wenn das ausgewählte Zählregister im folgenden Befehl, in einem Adreßmodus oder als Operand verwendet wird, sind die Ergebnisse undefiniert.
  • Als Beispiel für den Gebrauch des wiederholten Befehls sei angenommen, daß R4 und R5 auf zwei Vektoren aus reellen Zahlen zeigen, daß R15 die Länge des Vektors enthält und daß R10 Null ist. Dann wird
  • REP R15
  • ADDR (R4)+, R10 die Summe der Vektorelemente, auf die von R4 gezeigt wird, in R10 ansammeln und L: MOVR (R4)+, R9
  • MULR (R5)+, R9
  • ADDR R9, R10
  • REP R15
  • JMP L
  • wird das innere Produkt der zwei Vektoren berechnen.
  • Ausnahmen: Adresse
  • RET --- RETURN (RÜCKSPRUNG)
  • Befehlscode: EB RET Rücksprung
  • Assembler
  • Syntax: RET
  • Operation: PC < -- Stapel
  • Flags: keine Änderungen (der Wiederholungsmodus wird zurückgesetzt)
  • Beschreibung: Der Inhalt oben vom Stapel (es wird angenommen, daß es eine Rücksprungsadresse ist) wird entnommen und in den Befehlszähler eingegeben.
  • Ausnahmen: keine
  • RETI --- RETURN FROM INTERRUPT (KEHRE VOM INTERRUPT ZURÜCK)
  • Befehlscode: CB RETI Kehre vom Interrupt zurück
  • Assembler
  • Syntax: RETI
  • Operation: PC < -- Stapel
  • PS < -- Stapel
  • Flags: Alle Flags werden gemäß dem neuen PS gesetzt.
  • Beschreibung: Das oberste vom Stapel (es wird angenommen, daß es den PC vor dem aktuellen Interrupt enthält) wird entnommen und in das PC-Register eingegeben und dann wird der nächste Wert aus dem Stapelspeicher in das Programmstatus (PS)-Register eingegeben.
  • Ausnahmen: keine
  • RETP --- RETURN AND POP (KEHRE ZURÜCK UND ENTNEHME)
  • Befehlscode: EF RETP Kehre zurück und entnehme
  • Assembler
  • Syntax: RETP src
  • Operation: PC < -- Stapel
  • SP < -- SP + src
  • Flags: keine Änderungen (der Wiederholungsmodus wird zurückgesetzt)
  • Beschreibung: Das oberste vom Stapel wird in den Befehlszähler eingegeben und dann wird der Quell(wort)-Wert zu dem Stapelzeiger addiert, um einen Satz lokaler Variablen aus dem Stapel zu entnehmen.
  • Ausnahmen: keine
  • ROT --- ROTATE (ROTIERE)
  • Befehlscodes:
  • 21 ROTB Rotiere - Byte
  • 23 ROTH Rotiere - Halbwort
  • 25 ROTW Rotiere - Wort
  • Assembler
  • Syntax: ROT{B,H,W} src,des
  • Operation: dsrc ROTATE BY src --> des
  • Flags: C < -- wenn src = 0 dann das niedrigst bewertete Bit von des, sonst das letzte hinausgeschobene Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Wenn die Quelle Null ist, wird die Bestimmung nicht geändert, aber das Übertrag-Flag wird dem niedrigst bewerteten Bit des dsrc gleichgesetzt. Sonst wird dsrc rotiert (links herum, wenn src < 0; rechts herum, wenn src) 0) und das Übertrag-Flag wird auf den Wert des letzten herausgeholten Bits gesetzt. Die Quelle ist immer ein Byte-Operand, selbst wenn die Bestimmung ein Byte (ROTB), Halbwort (ROTH) oder Wort (ROTW) sein kann.
  • Ausnahmen: keine
  • RSET -- RESET (RÜCKSETZUNG)
  • Befehlscode: 7B RSET setze den Prozessor zurück
  • Assembler
  • Syntax: RSET
  • Operation: Der Prozessor wird initialisiert
  • Flags: keine Änderungen
  • Beschreibung: RSET veranlaßt, daß die Ganzzahl- und Gleitkomma-Ausführungseinheiten initialisiert werden und alle anhängigen Interrupts zurückgesetzt werden. Alle I/O-Aktivitäten werden abgebrochen. Die Fertig-Flags des seriellen Kanals werden auf Eins gesetzt (fertig) und alle anderen I/O-Register einschließlich Fehler-Flags werden gelöscht.
  • Ausnahmen: keine
  • SBB --- SUBTRACT WITH BORROW (SUBTRAHIERE MIT BORGEN)
  • Befehlscodes:
  • 70 SBBB Subtrahiere mit Borgen - Byte
  • 72 SBBH Subtrahiere mit Borgen - Halb wort
  • 74 SBBW Subtrahiere mit Borgen - Wort
  • Assembler
  • Syntax: dsrc - src - Übertrag --> des
  • Flags: C < -- Borge vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung U < -- 0
  • Beschreibung: Die Übertrag(Borg)- und Quellwerte werden von der Bestimmung subtrahiert und das Ergebnis ersetzt die Bestimmung.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung
  • SBBD --- SUBTRACT DECIMAL (SUBTRAHIERE DEZIMAL)
  • Befehlscode: 91 SBBD Subtrahiere dezimal mit Borgen
  • Assembler
  • Syntax: SBBD src,des
  • Operation: dsrc - src - Übertrag --> des
  • Flags: C < -- Borge vom höchst bewerteten Bit
  • N < -- 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Der Übertragswert (Borgwert)- und der Quell(Byte-) wert, behandelt als ein, werden von der ähnlich betrachteten Bestimmung subtrahiert. Das Ergebnis ersetzt die Bestimmung. Die Operanden werden nicht auf ein ungültiges BCD-Format überprüft.
  • Ausnahmen: keine
  • SBR --- SUBTRACT REVERSE (SUBTRAHIERE UMGEKEHRT)
  • Befehlscodes:
  • 20 SBRB Subtrahiere umgekehrt - Byte
  • 22 SBRH Subtrahiere umgekehrt - Halbwort
  • 24 SBRW Subtrahiere umgekehrt - Wort
  • 28 SBRR Subtrahiere umgekehrt - Real
  • 2A SBRL Subtrahiere umgekehrt - Longreal
  • Assembler
  • Syntax: SBR{B,H,W,R,L} src,des
  • Operation: src - dscrc --> des
  • Flags: (Ganzzahl-Operationen: SBRB, SBRH, SBRW)
  • C < -- Borge vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung U < -- 0
  • Flags: (Gleitkomma-Operationen: SBRR, SBRL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet
  • UF < -- des Bereich unterschritten
  • FZ < -- 0
  • OF < -- des Bereich überschritten
  • IN < -- src oder dsrc = keine Zahl
  • Beschreibung: Der Bestimmungswert wird von der Quelle subtrahiert und das Ergebnis ersetzt die Bestimmung.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung, Ungenau, Bereichsunterschreitung, Bereichsüberschreitung, Ungültig
  • SFA --- SHIFT ARITHMETIC (VERSCHIEBE ARITHMETISCH)
  • Befehlscodes:
  • 11 SFAB Verschiebe arithmetisch - Byte
  • 13 SFAH Verschiebe arithmetisch -Halb wort 15 SFAW Verschiebe arithmetisch-Wort
  • Assembler
  • Syntax: SFA{B,H,W} src,des
  • Operation: dsrc SHIFT ARITHMETIC BY src ---> des
  • Flags: C < -- wenn src = 0, dann niedrigst bewertetes Bit (dsrc) sonst letztes herausgeholtes Bit
  • Beschreibung: Wenn die Quelle Null ist, wird die Bestimmung nicht verändert und das Übertrag-Flag wird auf den niedrigst bewerteten Bestimmungsbit eingestellt. Sonst wird der Operand an der Bestimmungsadresse um die Anzahl Plätze verschoben, die dem Quellwert entspricht. Wenn der Quellwert positiv ist, wird nach links und wenn er negativ ist, nach rechts verschoben. Linke Verschiebungen veranlassen, daß Null von rechts eingegeben wird und rechte Verschiebungen veranlassen, daß das Vorzeichen von links kopiert wird. In beiden Fällen wird das Übertrag-Flag auf das als letztes herausgeholten Bit gesetzt. Wenn die Verschiebung nach rechts geht, kann Ganzzahl-Bereichsüberschreitung nicht auftreten, aber linke Verschiebungen verursachen Ganzzahl-Bereichsüberschreitung, wenn die herausgeholten Bits nicht alle gleich dem resultierenden Vorzeichenbit sind. Der Quelloperand ist immer ein Byte-Operand, selbst wenn die Bestimmung ein Byte (SFAB), Halbwort (SFAH) oder Wort (SFAW) sein kann.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung
  • SFT --- SHIFT LOGICAL (VERSCHIEBE LOGISCH)
  • Befehlscodes:
  • 01 SFTB Verschiebe logisch - Byte
  • 03 SFTH Verschiebe logisch - Halbwort
  • 05 SFTW Verschiebe logisch - Wort
  • Assembler
  • Syntax: SFT{B,H,W} src,des
  • Operation: dsrc SHIFT LOGICAL BY src --> des
  • Flags: C < -- wenn src = 0 dann niedrigst bewertetes Bit (dsrc) sonst letztes herausgeholtes Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Wenn die Quelle Null ist, wird die Bestimmung nicht geändert und das Übertrag-Flag wird auf das niedrigst bewertete Bestimmungsbit gesetzt. Sonst wird der Operand an der Bestimmungsadresse um die Anzahl der Plätze entsprechend dem Quellwert verschoben. Wenn die Quelle positiv ist, geht die Verschiebung nach links und wenn sie negativ ist, geht sie nach rechts. Linke Verschiebungen veranlassen, daß Null von rechts eingegeben wird und rechte Verschiebungen veranlassen, daß Null von links eingegeben wird. In beiden Fällen wird das Übertrag-Flag auf das zuletzt Bit gesetzt. Der Quelloperand ist immer ein Byte- Operand selbst, wenn die Bestimmung ein Byte (SFTB), Halbwort (SFTH) oder Wort (SFTW) sein kann.
  • Ausnahmen: keine
  • SGN --- SET SIGN (SETZE VORZEICHEN)
  • Befehlscodes:
  • 78 SGNR Setze Vorzeichen - reelle Zahl
  • 7A SGNL Setze Vorzeichen Lang-reelle Zahl
  • Assembler
  • Syntax: SGN{R,L} src,des
  • Operation: SIGN (src) --> SIGN (des)
  • Flags: C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- 0
  • UF < -- 0
  • FZ < -- 0
  • OF < -- 0
  • IN < -- src oder dsrc = keine Zahl
  • Beschreibung: Das Vorzeichen der Bestimmung wird auf das Vorzeichen der Quelle eingestellt.
  • Ausnahmen: Ungültig
  • SQT --- SQUARE ROOT (WURZEL)
  • Befehlscodes:
  • 58 SQTR Wurzel reelle Zahl
  • 5A SQTL Wurzel Lang-reelle Zahl
  • Assembler
  • Syntax: SQT{R,L} src,des
  • Operation: SQUARE ROOT (src --> des)
  • Flags: C < -- 0
  • N < -- 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet UF < -- 0
  • FZ < -- 0
  • OF < -- 0
  • IN < -- (src < 0) oder (src = Nan, keine Zahl)
  • Beschreibung: Die Wurzel der Quelle ersetzt die Bestimmung. Die Wurzel wird richtig gerundet und kann den Bereich nicht über- oder unterschreiten.
  • Ausnahmen: Ungenau, Ungültig
  • STC --- SET CARRY (SETZE ÜBERTRAG)
  • Befehlscode: 2B STC Setze Übertrag
  • Assembler
  • Syntax: STC
  • Operation: 1 --> Übertrag
  • Flags: C< -- 11 keine anderen Änderungen
  • Beschreibung: Das Übertrag-Flag wird auf Eins gesetzt.
  • Ausnahmen: keine
  • STPR --- STORE PROCESSOR REGISTERS (SPEICHERE PROZESSORREGISTER)
  • Befehlscodes: 95 STPR Speichere Prozessorregister
  • Assembler
  • Syntax: STPR src,des
  • Operation: PROCESSOR REGISTER # (src) --> des
  • Flags: C < -- C N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Der Inhalt des Prozessorregisters, dessen Nummer dem Quellwert entspricht, ersetzt die Bestimmung. Die Bestimmung ist ein Wort und die Quelle ist ein Byte-Wert, der ein Prozessorregister bestimmt. Die Prozessorregister sind unten aufgelistet.
  • P0 SP Stapelzeiger
  • P1 PS Programmstatus
  • P2 FR Fehlerregister
  • P3 CR Konfigurationsregister
  • P4 P1 Prozessor-Identifizierer
  • P5 OR Ausgabebereit ("Nur-Lesen")
  • P6 IR Eingabe bereit ("Nur-Lesen")
  • P7 OE Ausgabe Freigeben
  • P8 IE Eingabe Freigeben
  • P9 IP Eingabe anhängig ("Nur-Lesen")
  • P10 PE Paritätsfehler ("Nur-Lesen")
  • P11 IO Eingabe-Datenverlust ("Nur-Lesen")
  • Ausnahme: keine
  • SUB --- SUBTRACT (SUBTRAHIERE)
  • Befehlscodes:
  • 60 SUBB Subtrahiere Byte
  • 62 SUBH Subtrahiere Halbwort
  • 64 SUBW Subtrahiere Wort
  • 68 SUBR Subtrahiere reelle Zahl
  • 6A SUBL Subtrahiere Lang-reelle Zahl
  • Assembler
  • Syntax: SUB{B,H,W,R,L} src,des
  • Operation: dsrc - src --> des
  • Flags: (Ganzzahl Operationen: SUBB, SUBH, SUBW)
  • C < -- Borge vom höchst bewerteten Bit
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- Ganzzahl-Bereichsüberschreitung U < -- 0
  • Flags: (Gleitkomma-Operationen: SUBR, SUBL)
  • C < -- des < 0
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • IX < -- des gerundet
  • UF < -- des Bereich unterschritten
  • FZ < -- 0
  • OF < -- des Bereich überschritten
  • IN < -- src oder dsrc = keine Zahl
  • Beschreibung: Die Quelle wird von der Bestimmung subtrahiert und das Ergebnis wird an der Bestimmungsadresse gespeichert.
  • Ausnahmen: Ganzzahl-Bereichsüberschreitung, Ungenau, Bereichsunterschreitung, Bereichsüberschreitung, Ungültig
  • TRAP --- TRAP
  • Befehlscodes: IE TRAP TRAP
  • Assembler
  • Syntax: TRAP src
  • Operation: erzeuge Interrupt # (src):
  • Stapel < -- PS Stapel < -- PC PC < -- Wort am Ort (8 src)
  • PS < -- Wort am Ort (8 src + 4)
  • Flags: Alle Flags gemäß dem neuen PS-Wert gesetzt
  • Beschreibung: Die aktuellen Werte der PS und PC werden in den Stapelspeicher eingegeben und der Wert am Ort (8*src) ersetzt den PC, während der Wert am Ort (8*src + 4) den PS ersetzt. Der Quell-Operand ist ein vorzeichenloses Byte.
  • Ausnahmen: keine
  • WAIT --- WAIT (WARTE)
  • Befehlscode: DB WAIT Warte
  • Assembler
  • Syntax: WAIT
  • Operation: Warte auf Interrupt
  • Flags: keine Änderungen
  • Beschreibung: Dieser Befehl veranlaßt den Prozessor, untätig zu bleiben,bis er ein Interrupt empfängt.
  • Ausnahmen: keine
  • XOR --- EXCLUSIVE OR (EXKLUSIV-ODER)
  • Befehlscodes:
  • 61 XORB Exclusiv - ODER - Byte
  • 63 XORH Exclusiv - ODER - Halbwort
  • 65 XORW Exclusiv - ODER-Wort
  • Assembler
  • Syntax: XOR{B,H,W} src,des
  • Operation: src XOR dsrc --> des
  • Flags: C < -- C
  • N < -- des < 0
  • Z < -- des = 0
  • V < -- 0
  • U < -- 0
  • Beschreibung: Die Bestimmung wird auf das Ergebnis der Exklusiv-Oder-Verknüpfung der Quelle und des Operanden an dem Bestimmungsort gesetzt.
  • Ausnahmen: keine
  • 4.9 Prozessorinitialisierung
  • Ein Prozessor kann entweder durch das Anlegen des Reset- Pins oder durch das Ausführen eines RSET-Befehls initialisiert werden. Die resultierenden Initialisierungen unterscheiden sich in beiden Fällen deutlich. Sie sind beide unten beschrieben.
  • 4.9.1 Hardware-Initialisierung
  • Hardware-Initialisierung wird durch das Anlegen des Reset-Pins vorgenommen und erfolgt in verschiedenen Stufen:
  • 0) Externe Anforderungen werden ingnoriert.
  • 1) Der FEHLER-Pin wird in dem Bit 31 (das Modus-Flag) des ID-Prozessorregisters latch-gespeichert, welches anzeigt, ob es ein I/O-Prozessor (0) oder ein Matrix-Prozessor (1) ist. Wenn das ERROR-Pin geerdet ist, wird Bit 31 auf l gesetzt, was anzeigt, daß sich der Prozessor auf einer I/O-Platine befindet. Ein Floating-FEHLER/Pin wird Bit 31 veranlassen 0 zu werden, was bedeutet, daß der Prozessor sich auf einer Matrixplatine befindet. Das Modus-Flag wird latch-gespeichert, wenn die Zurücksetz-Signal verschwindet.
  • 2) Der Prozessor führt auf den verschiedenen internen Einheiten Selbsttests durch und setzt die Speicherplätze 4 bis 2048 auf Null. Platz 0 wird auf 1 (Wort) gesetzt, wenn der Prozessor seine Tests bestanden hat und auf -1, wenn er sie nicht bestanden hat.
  • 3) Der Prozessorzustand wird auf Null gesetzt, außer
  • a) Bit 31 im ID-Register (siehe unten),
  • b) Bits 24-31 des Konfigurationsregisters < werden beim Herstellungsprozeß eingestellt),
  • c) der Stapelzeiger (SP) und das Fehlerregister (FR), die undefiniert sind,
  • d) Eingang- und Ausgang-Fertig-Bits werden auf l gesetzt und Interrupts werden entaktiviert.
  • 4) Der "Schattenspeicher"-ROM auf dem Prozessor wird aktiviert und die unten aufgelistete Prozedur wird ausgeführt. Ihre Funktion ist es,
  • a) zu bestimmen, ob es ein I/O- oder ein Matrix-Prozessor ist,
  • b) wenn es ein Matrix-Prozessor ist, dann
  • 1) wartet er darauf, einen Wert (Halbwort) zu empfangen, der der Länge der aktuellen Nachricht (siehe 3) entspricht
  • 2) antwortet er mit einer Statusnachricht, daß er bereit ist, die volle Nachricht zu empfangen
  • 3) empfängt er die Nachricht (die volle Softwareinitialisierungs-Software), lädt sie beginnend an Stelle 0 und springt zur Stelle 1024
  • c) wenn es ein I/O-Prozessor ist, wartet er bis der zentrale Prozessor einen Wert ungleich Null an der Stelle 0 schreibt und springt dann zur Stelle 1024, an der die I/O-Initialisierungssoftware plaziert worden wäre.
  • d) Ein JMP (Sprung) zur Initialisierungssoftware wird ausgeführt (der Sprung entaktiviert den Schattenspeicher- ROM, bis er von einem anderen Rücksetzsignal aktiviert wird). Die von der Initialisierungssoftware ausgeführten Funktionen sollten einen vollen Diagnosesatz enthalten.
  • 4.9.2 Initialisierungsprozedur (Schatten-ROM)
  • Der Code in dem chipeigenen Schatten-ROM ist unten mit Anmerkungen aufgelistet.
  • Während der Schatten-ROM-Ausführung sind sämtliche Interrupts gesperrt einschließlich der Interrupts, die normalerweise nicht maskierbar sind; RSET Die RAM-Chips benötigen 8 Refresh-Zyklen, um sich selbst zu initialisieren. Die Refreshrate beginnt bei einer Erneuerung alle 8 Zyklen, da das Konfigurationsregister beim Rücksetzen auf Null gesetzt ist. Wir bleiben für die erforderlichen 64 Zyklen untätig, indem wir zehnmal an RSET zurückgeben. Jede Schleife dauert 7 Zyklen (3 für RSET und 4 für REP);
  • MOVW #11, R0; REP R0;
  • RSET
  • Die Regenerierungsrate wird auf 40 Zyklen erniedrigt, indem man eine 4 in das Konfigurationsregister schreibt. Das ist ziemlich hoch, aber das Betriebssystem kann es weiter erniedrigen, wenn es die Prozessortaktrate rechtfertigt; LDPR #4,#CONFIG;
  • Der Speicher wird nun mit den richtigen ECC-Bits initialisiert, indem Null auf jeden Platz geschrieben wird. Da das Konfigurationsregister so initialisiert ist, daß es 16kx4-Speicherplätze voraussetzt, wird nur das erste Viertel des Speichers initialisiert, indem 8191 Worte geschrieben werden. Wenn das Betriebssystem die Konfiguration auf 64kx4 ändert, dann sollte es die übrigen 3/4 des Speichers initialisieren;
  • MOVW #8191,RO;
  • MOVW #0, R1;
  • REP R0;
  • MOVW #0,(R1)+
  • Ein Selbsttest gehört hierzu. Das Ergebnis wird codiert und im Speicher am Platz 4 gespeichert. A-1 bedeutet alles ist ordnungsgemäß; MOVH #-1,4;
  • b Wenn der Rücksetz-Pin aktiviert ist, wird Bit 31 des ID-Registers initialisiert mit einer Eins, falls der Prozessor ein I/O-Prozessor ist, oder mit einer Null, falls der Prozessor ein Matrix-Prozessor ist. I/O-Prozessoren werden vom Speicher initialisiert, während Matrix-Prozessoren von den seriellen Ports initialisiert werden;
  • STPR #IDREG, R0;
  • BL IOINIT;
  • Matrix-Prozessor-Initialisierung wartet darauf, daß ein Port eine Nachricht empfängt. Der Code unten setzt voraus, daß nur ein Port versuchen wird, den Prozessor zu initialisieren.
  • Wenn Nachrichten über zwei Ports genau zu der gleichen Zeit empfangen werden, kann der Code nicht arbeiten;
  • PROCINIT: STPR #INPEND,RO; Gibt es unbearbeitete eingehende Nachrichten?; BE PROCINIT; ! Nein, versuche erneut;
  • FFOW R0, R1; ! Ja, R1 bekommt die Port-Nummer;
  • Initialisiere den Port, so wird DMA-Übertragung einer Zwei- Byte-Nachricht an Platz 2 auftreten;
  • LPTR #2, R1;
  • LCNT #2, R1;
  • Berechne für eine Antwort den zugehörigen Ausgabeport in R3;
  • MOVW R1, R3;
  • ADDW #32, R3;
  • Warte auf die Eingangsnachricht-DMA zur Vervollständigung;
  • INWAITI: STPR #INRDY, R2; ! Speicher Eingang-Fertig-Flags in R2; BITW R2, R0; Teste das zugehörige Flag; BE INWAITI; ! Kehre zurück, bis der Port bereit ist;
  • Starte den Ausgabeport-DMA. Die Nachricht wird der Zwei- Byte-Selbstteststatus am Platz 4 sein;
  • LPTR #4, R3;
  • LCNT #2,R3;
  • Initialisiere den gleichen Eingabeport wieder, um den Inhalt des Speichers zu erhalten;
  • LPTR #8,R1; ! Die Nachricht wird am Platz 8 starten;
  • LCNT 2, R1; ! für die Byteanzahl, die von der Nachricht angezeigt wird;
  • INWAIT2: STPR #INRDY,R2; ! Warte auf den Eingangs-DMA zur Erfüllung von; BITW R2, R0; Testen des zugehörigen Fertig-Flag;
  • BE INWAIT2; und kehre zurück bis es fertig (getan) ist;
  • Springe auf einen voreingestellten Platz (1024), um die Ausführung aus dem Speicher heraus zu beginnen. Der JMP setzt das "Schattenspeicher-ROM aktiv"-Flag zurück;
  • JMP 1024;
  • I/O-Prozessor-Initialisierung. Warte, bis der Speicherplatz 0 oder l auf ungleich Null geht. Der externe Prozessor, der das Speicherbild lädt, muß wenigstens xxx-Zyklen nach dem Verschwinden des RESET-Signals, abwarten;
  • IOINIT; BITH #-1,0; Teste das Halbwort am Platz 0; BE IOINIT; ! Springe zurück, bis er ungleich 0 wird;
  • Springe auf einen voreingestellten Platz (1024), um die Ausführung aus dem Speicher heraus zu beginnen. Der JMP setzt
  • b das "Schattenspeicher-ROM aktiv"-Flag zurück;
  • JMP 1024; ! Ende des Schattenspeicher-ROM-Codes; SPEICHER ADRESSE anfängliche Nachrichtenlänge Testergebnisse reserviert DMA (Int 1-Vektor) etc.
  • 5 DIE SOFTWARE 5.1 Einleitung
  • Es gibt zwei Ebenen Betriebssoftware im System: der Monitor (in EPROM) und das Betriebssystem. Der Monitor bzw. das Überwachungsprogramm ist ein einfaches Einbenutzersystem, das wirksam ist, wenn das System eingeschaltet wird. Der Monitor verwendet den Anschluß 0 und sieht erweiterte Diagnose und Verwaltungsfunktionen vor. Das Betriebssystem, IXTM (IX ist ein Warenzeichen der NCUBE Corporation), wird automatisch aufgerufen, wenn sich das System im normalen Modus befindet und die Diagnosetests durchläuft. IXTX ist ein vollständig geschütztes Multiuser-Multitasking-Betriebssystem mit vollständiger Verwaltung der Ressourcen einschließlich Speicher, Hauptatrix, Grafik und Dateisystem. Das Dateisystem hat eine hierarchische Struktur und ist über alle Plattenlaufwerke im System verteilt. Auf diese Weise kann ein Benutzer auf seine Dateien zurückgreifen unabhängig davon, welches Terminal (oder periphere Steuergerät) er benutzt.
  • In vieler Hinsicht ähnelt das Betriebssystem dem UNIXTM (UNIX ist ein Bell-Labor-Warenzeichen), und wird hier deshalb nicht ausführlich beschrieben. Das IXTTm-System hat jedoch zusätzliche Möglichkeiten einschließlich:
  • 1) Systemtemperaturerfassung
  • 2) verteiltes Dateisystem
  • 3) Matrixverwaltung
  • 4) einheitlicher Dateischutz
  • Das IX-System wird in Kapitel 5.3 beschrieben.
  • 5.2 Das Überwachungsprogramm 5.2.1 Einleitung
  • Das Überwachungsprogramm ist im System-EPROM enthalten und wird aufgerufen, wenn das System eingeschaltet ist. Das Überwachungsprogramm kommuniziert immer mit dem Anschluß 0 am Peripherie Steuergerät 0 (der Systemkonsole) zur Anzeige von Nachrichten und zum Empfang von Befehlen. Wenn der Systemmodusschalter im Bedienungsfeld auf der "Normal"-Position steht, durchläuft der Bildschirm die Diagnose und startet das Betriebssystem (wenn die Diagnose erfolgreich läuft). Wenn der Modusschalter auf "Diagnose" eingestellt ist, geht das Überwachungsprogramm in ein Einbenutzersystem über, nachdem die Diagnose erfolgreich gelaufen ist. Das Überwachungssystem sieht einen großen Bereich von Offline-Diagnose und Backup-Möglichkeiten vor.
  • Das Überwachungsprogramm besteht aus zwei Teilen: das ROM- Überwachungsprogramm und das RAM-Überwachungsprogramm. Sie sind beide im System-EPROM, aber das ROM-Überwachungsprogramm benutzt selbst für Stapel-Raum kein RAM, dagegen wird das RAM- Überwachungsprogramm, wenn es aufgerufen wird, in den RAM kopiert und verwendet für Daten RAM benutzt. Das ROM-Überwachungsprogramm startet das System und führt die Diagnose bis zu der Speichertestphase aus. Wenn der Speichertest beendet ist, wird das RAM-Überwachungsprogramm automatisch aufgerufen; aber wenn er fehlerhaft ist, bleibt das System im ROM-Überwachungsprogramm und einige einfache Befehle sind verfügbar (siehe 5.2.3).
  • 5. 2. 2 Überwachungsdiagnose
  • Die Möglichkeiten, die von der Überwachungsdiagnose getestet werden, sind unten der Reihe nach aufgelistet.
  • 1) Die beiden Bedienungsfeld-LEDs werden eingeschaltet und das ROM-Überwachungsprogramm wird gestartet.
  • 2) Der Inhalt des EPROMs wird geprüft (eine Prüfsumme wird berechnet).
  • 3) Alle I/O-Bausteine außer dem Plattensteuergerät werden initialisiert.
  • 4) Der serielle Kanal für den Anschluß 0 wird getestet.
  • 5) Wenn (2) oder (4) fehlschlagen, bleiben die LEDs eingeschaltet und das System hängt sich auf, anzeigend, daß die periphere Steuerplatine 0 funktionsuntüchtig ist.
  • 6) Wenn (2) und (4) ordnungsgemäß durchlaufen werden, dann wird die mit "STATUS 2" bezeichnete LED ausgeschaltet, für das Terminal 0 werden geeignete Charakteristika eingestellt (Baudrate 19200, usw.) und die System-Einschaltnachricht "paralleles Prozessorr-Peripherie-Untersystem" wird angezeigt.
  • 7) Der Systemspeicher (RAM) wird getestet und alle Fehler (einschließlich korrigierte ECC-Fehler) werden angezeigt. Wenn Speicherfehler vorliegen oder der Diagnosemodus eingeschaltet ist, bleibt das System im ROM-Überwachungsprogramm, druckt "Nur-ROM-Diagnose-Überwachungsprogramm gefolgt von einem "> > -Prompt aus und wartet auf Benutzerbefehle. Wenn keine Speicherfehler vorliegen und das System im Normal-Modus ist, wird das RAM-Überwachungsprogramm aufgerufen und die Diagnose wird fortgesetzt.
  • 8) Das Plattensteuergerät wird getestet, wenn irgendwelche Platten angeschlossen sind.
  • 9) Stromversorgungsstatus und Steuersignale werden überprüft.
  • 10) Der Druckerzustand wird überprüft.
  • 11) Der Systemidentifizierer und die Steckplatznummern werden überprüft.
  • 12) Alle Temperatursensoren werden getestet und die Temperatur wird angezeigt. Wenn die Temperatur höher als 38ºC ist, wird das System abgeschaltet,
  • 13) Der Zustand und die Funktion der Echtzeituhr werden überprüft.
  • 14) Alle Interrupt-Steuergeräte werden auf den Zustand und die Antwortbereitschaft überprüft.
  • 15) Die übrigen seriellen Kanäle werden überprüft.
  • 16) Der Zeitgeber (8253) wird überprüft.
  • 17) Der Gleitkomma-Prozessor (80287) wird überprüft.
  • 18) Das DMA-Steuergerät wird überprüft.
  • 19) Alle an das System angeschlossenen SBX-Module (wie von der EPROM-Tabelle angezeigt) werden überprüft.
  • Wenn das System im Normal-Modus ist und eine Platte angeschlossen ist, dann
  • 20) werden die Platten gestartet und das Steuergerät überprüft.
  • 21) werden die Platten überprüft und fixiert, wenn ein Systemabsturz der Grund für den letzten Abschaltvorgang war.
  • 22) Das Betriebssystem wird gestartet. Andernfalls 20) bleibt das System im RAM-Überwachungssystem, ein "> "- Prompt wird angezeigt und das System wartet auf einen Befehl.
  • 5.2.3 ROM-Monitor-Befehle
  • Da das ROM-Überwachungsprogramm keinen RAM verwendet, hat es wenige und einfache Befehle. Sie sind unten aufgelistet und werden aufgerufen, indem der erste Buchstabe des Befehlsnamens geschrieben wird. Ein "return" veranlaßt, daß ein neuer " "- Prompt angezeigt wird. Ein " " kann zu jeder Zeit eingegeben werden, und was auch immer abläuft, wird abgebrochen und ein neuer Prompt angezeigt. Die Operandenspezifikation bei den Befehlen werden wie folgt definiert.
  • ADDR besteht aus zwei 4stelligen Hexadezimalzahlen, die von einem Doppelpunkt getrennt werden. Die erste Zahl ist ein Segmentselektor und die zweite ist das Offset.
  • LENGTH
  • IOADDR } sind 4-stellige Hexadezimalzahlen
  • VALUE
  • SEG MAX ist die Zahl der zu testenden 64-KByte-Segmente des Speichers (beginnend bei der Speicheradresse 0).
  • BEFEHLE
  • continue Startet das Plattenbetriebssystem erneut nach einem "Fehlerbeseitigungs"-Stopp.
  • display < ADDR> , < LENGTH> Ein Speicherabschnitt von ADDR bis ADDR+LENGTH-1 wird im folgenden Format angezeigt:
  • ADDR hhhh hhhh hhhh hhhh hhhh hhhh hhhh hhhh < ascii>
  • wobei ADDR die Anfangsadresse ist, "hhhh" ein 16-Bit-Wort in Hexadezimaldarstellung ist und das ASCII-Äquivalent der 8 Worte ebenfalls angezeigt wird ("·" stellt nichtdruckbare Zeichen dar).
  • goto ram monitor Das RAM-Überwachungsprogramm wird urgeladen.
  • help Die Liste der ROM-Überwachungsprogrammbefehle und Operanden wird angezeigt.
  • input < IOADDR> Der Wert an der I/O-Adresse IOADDR wird angezeigt. Das Schreiben eines "Zeilenvorschub" wiederholt den Befehl mit dem gleichen Operanden und ein "Return" beendet ihn.
  • memory test < SEG MAX> SEG MAX 64KByte-Segmente des Speichers werden getestet, beginnend bei der Speicheradresse 0.
  • output < IOADDR> , < VALUE> Der VALUE wird an die I/O-Adresse IOADDR geschrieben. Ein "Zeilenvorschub" wiederholt den Befehl an der gleichen Adresse, aber erlaubt, daß ein anderer VALUE geschrieben wird und "Return" beendet ihn.
  • power down Das System wird abgeschaltet.
  • set < ADDR> Der Wert im Speicher an der Stelle ADDR wird angezeigt und kann verändert werden, indem ein neuer Wert eingegeben wird. Ein "Zeilenvorschub" geht zum nächsten Wort im Speicher und wiederholt den Befehl. Ein "Return" beendet ihn.
  • 5.2.4 RAM-Überwachungsprogrammbefehle
  • Das RAM-Überwachungsprogramm wird automatisch aufgerufen, wenn die Diagnose den Speichertest durchlaufen hat, oder explizit, indem ein "g" als Antwort auf den ROM-Überwachungsprogramm-Prompt geschrieben wird. Es gibt vier Arten von RAM-Überwachungsprogrammbefehlen: allgemeine, Fehlerbeseitigungs-, Plattensteuer- und Bandsteuer-Befehle. Die allgemeinen Befehle werden durch Eingabe des ersten Buchstabens eines Befehlsnamens aufgerufen. Die Fehlerbeseitigungs-, Plattensteuer- und Bandsteuerbefehle werden aufgerufen, indem zunächst "y", "x" bzw. "t" eingegeben wird, gefolgt vom ersten Buchstaben des speziellen Befehlsnamens. Wenn "Return" das erste eingegebene Zeichen ist, wird ein neuer Überwachungsprogramm-Prompt, "> ", gedruckt und der Befehlsanalysierer wird erneut gestartet. Ein "¬" kann zu jeder Zeit eingegeben werden; unabhängig davon, was abläuft, wird es unterbrochen und ein neuer Prompt wird angezeigt.
  • Die Operandenspezifikationen sind - mit einigen Ergänzungen
  • - die gleichen, wie diejenigen beim ROM-Überwachungsprogramm (siehe 5.2.3).
  • 5.3 Das Betriebssystem 5.3.1 Überblick
  • Das Betriebssystem, IXTM, ist eine Hochleistungsschnittstelle zur Hardware im UNIX-Stil. Es unterstützt mehrere Anwender, einschließlich Paßwort und Abrechnung, sowie Multitasking. Der Editor, NMACS, ist bildschirmorientiert und ähnelt einer vereinfachten Version des EMACS. Das Dateisystem ist das bekannteste Merkmal des Betriebssystems, weil fast jedes Systembetriebsmittel als eine Art Datei behandelt wird. Das Dateisystem ist hierarchisch wie UNIX, hat aber zum Schutz und Teilen von Dateien erweiterte Mechanismen. Das Betriebssystem behandelt den Speicher als eine Sammlung von Segmenten, die belegt und geteilt werden können. Prozesse werden erzeugt und ihr Ablauf vom System gesteuert (Priorität, Reigen) und es sieht einen Teil der Schutzmöglichkeiten vor. Es gibt einen Debugger
  • und einen Bindelader. Eine der speziellen Möglichkeiten des IXTM-Systems ist die Verwaltung der Hauptverarbeitungsmatrix. Sie wird als Gerät verwaltet und jeder Prozeß fordert eine Matrixuntermenge an, die entsprechend der Verfügbarkeit zugewiesen wird. Fehlertoleranz wird vom System unterstützt, da es die Diagnose periodisch auf der Matrix ablaufen läßt, und falls Knoten fehlerhaft sind, werden sie aus den zuweisbaren Ressourcen ausgesondert und der Operator wird über den Ausfall informiert. Es werden nur die oben aufgelisteten Möglichkeiten, die für das Verständnis der vorliegenden Erfindung wesentlich sind, im folgenden ausführlicher beschrieben.
  • 5.3.2 Dateisystem
  • Das Dateisystem ist die einheitliche Schnittstelle des Anwenders zu fast allen Systemressourcen. Die zwei Hauptobjekte in dem Dateisystem sind die Inhaltsverzeichnisse, die für die Struktur sorgen und die Dateien, die die Daten enthalten. Die meisten Ressourcen (z. B. Drucker, Terminals, Verarbeitungsmatrix) werden als Geräte behandelt, die einfach eine Dateiart sind. Eine Datei hat einen Namen, der sie sowohl speziell identifiziert und der ihre Position in der Dateistruktur anzeigt. Dateien besitzen einen definierten Satz von Operationen, die von einem Benutzer ausgeführt werden können, der die erforderlichen Vorrechte besitzt.
  • 5.3.3 Editieren
  • Es gibt drei Editoren im IXTM-System. Einer ist ein Zeileneditor genannt "ed". Er ist mit dem "ed"-Zeileneditor in UNIX kompatibel. Ein weiterer ist ein Stromeditor, der "sed" heißt. "Sed" ist ebenfalls mit dem UNIX-Stromeditor desselben Namens kompatibel. Für ausführliche Informationen siehe die erweiterte Literatur über Standard-UNIX-Systeme (z. B. B.W. Kernighan's Bücher: "A Tutorial Introduction to the ED Text Editor" und "Advanced editing on UNIX").
  • Der dritte Editor ist ein Bildschirmeditor, genannt "nm" (NMACS). Er ähnelt dem weit verbreiteten Bildschirmeditor EMACS.
  • 5.3.4 Speicherverwaltung
  • Das System der vorliegenden Erfindung stellt eine erweiterte virtuelle Speicherumgebung zur Verfügung. Der virtuelle Adreßraum beträgt 230 Bytes. Der Hauptspeicher wird als ein Segmentsatz aus 256 Byte Grenzgebieten betrachtet. Das Betriebssystem sieht Zuweisungs-, Freigabe-, Erweiterungs- (Segmente können bis auf 64 KBytes anwachsen), Kompaktierungs- und Austauschfunktionen vor. Das System baut auf die Intel- 80286-Speicherverwaltungshardware auf. Der Speicher wird belegt und freigegeben mit dem Systemruf "Core".
  • 5. 3. 5 Prozeßverwaltung
  • Prozesse werden vom Betriebssystem als grundlegende Recheneinheiten verwaltet. Sie werden vom System für alle Prozesse in einer globalen Weise erzeugt, geplant, gesendet und vernichtet. Wenn das Betriebssystem zum ersten Mal gestartet wird, wird der Systemprozeß mit der höchsten Priorität, genannt der MCP (Master-Steuer-Programm> abgefertigt. Er initialisiert das System einschließlich der Abfertigung von Hintergrundsystemprozessen (wie einer Druck-Abspul-Einrichtung), die es von einer Systeminitialisierungsdatei bekommt, überwacht Anschlüsse und erzeugt Prozesse. Er erledigt und schaltet das System auch ab, wenn ein Fehler bei der Stromversorgung oder Überhitzung festgestellt wird.
  • Immer wenn sich ein Benutzer für das System anmeldet, überprüft der MCP seinen Namen und sein Kennwort. Wenn er ein autorisierter Benutzer und sein Kennwort richtig ist, erzeugt der MPC einen Prozeß für ihn. Die Parameter des Prozesses werden seiner "Anmelde"-Datei entnommen, die von dem Systemadministrator erzeugt wurde. Diese Parameter umfassen die Priorität, das Anfangsprogramm (normalerweise die Shell), das Vorwort (Benutzer-Wurzelverzeichnis> und Abrechnungsinformation. Die Anmeldedatei für "Benutzerl" wird /sys/acct/userl genannt.
  • Ein Prozeß wird von einer Datenstruktur im Speicher dargestellt. Diese Struktur, genannt ein Prozeßobjekt, hat die folgenden Einträge:
  • state (Zustand): Das ist das Gebiet, in dem Registerwerte einschließlich der Segmentzeiger gesichert werden, wenn der Prozeß nicht ausgeführt wird.
  • condition (Bedingung): Die Bedingungen in denen ein Prozeß sein kann sind ablaufend
  • wartend auf Speicherzuweisung
  • wartend auf Matrixzuweisung
  • wartend auf eine Nachricht
  • wartend auf Fehlerbehandlung usw.
  • code and date (Code und Daten): Diese Einträge zeigen auf den Befehlscode und die Daten für das Prozeßprogramm preface (Vorwort): Das ist der Name des Wurzelverzeichnisses des Prozesses.
  • directory (Verzeichnis): Das ist der Name des momentan arbeitenden Verzeichnisses.
  • priority (Priorität): Eine Zahl zwischen l und 255, die die relative Priorität des Prozesses angibt (255 ist die höchste Priorität).
  • time (Zeit): Die maximale Anzahl an Taktschlägen, die dieser Prozeß ablaufen kann, bevor er erneut geplant werden muß.
  • brights (Rechte): Einem Prozeß können verschiedene Rechte gewährt (1) oder verweigert (0) werden gemäß der Einstellung der unten aufgelisteten Flags:
  • Erzeuge Verbindungen
  • Lösche Verbindungen
  • Erzeuge Prozesse
  • Vernichte Prozesse
  • Superanwender
  • owner (Inhaber): Name des Anwenders, der den Prozeß erzeugt hat.
  • open files (geöffnete Dateien): Das ist eine Tabelle von Deskriptoren für sämtliche geöffneten Dateien des Prozesses. Wenn ein Prozeß erzeugt wird, werden die ersten drei Einträge (Kanalnummern 0, 1 und 2) gemäß dem folgenden initialisiert:
  • 0: Standardeingabedatei
  • 1: Standardausgabedatei
  • 2: Standardfehlerdatei
  • Wenn ein neuer Prozeß erzeugt wird, werden sein Inhaber, seine Priorität und seine Rechte entweder von der Anmeldedatei initialisiert oder werden vom Erzeugungsprozeß geerbt. Die Priorität und die Rechte können reduziert bzw. beschränkt werden, aber nicht ansteigen oder erweitert werden.
  • Alle Prozesse in dem System sind in der Prozeßliste miteinander verbunden. Wenn es Zeit ist, daß ein neuer Prozeß abgefertigt wird, wird die Liste durchsucht beginnend beim Prozeß, der als letztes gelaufen ist. Der Suchvorgang findet den Prozeß im ablaufbereiten Zustand mit der höchsten Priorität und fertigt ihn ab. Wenn es mehr als einen Prozeß gibt, wird der zuletzt gefundene abgefertigt. Der Prozeß läuft, bis eines der drei Ereignisse auftritt:
  • 1) die Prozeß-Zeitscheibe ist abgelaufen
  • 2) der Prozeß muß auf ein Ereignis, wie z. B. eine Nachricht oder Plattenoperation warten
  • 3) ein anderer Prozeß mit höherer Priorität wird ablaufbereit.
  • Auf diese Weise implementiert das Prozeßverwaltungssystem eine preemptive Prioritäts-Reigen-Ablaufsteuerung
  • Es gibt einen Satz von Operationen für die Prozeßverwaltung. Diese Systemrufe sind:
  • Prozeßsystemrufe
  • frun: Abarbeiten einer Datei
  • getpcs: Hole Priorität, Rechte, Zeit, Beschaffenheit, Inhaber, usw.
  • chprot: Ändere Schutz oder Rechte
  • alarm: Stelle den Prozeßalarmtaktgeber ein
  • endpcs: Beende einen Prozeß
  • endump: Beenden und Speicherauszug
  • pause: Setze einen Prozeß aus
  • psend: Sende eine Nachricht oder ein Signal
  • vector: Setze einen Interrupt-Vektor
  • 5.3.6 Geräteverwaltung
  • Das System behandelt fast alle Ressourcen als Geräte, die einfach eine spezielle Dateiart sind. Die Geräte schließen Plattenlaufwerke, Bandlaufwerke, prucker, Grafik-Hardware, Zwischenplatinen-Bus, SBX-Schnittstellen und die Hyperkubusmatrix ein. Geräte werden verwaltet wie andere Dateien mit Öffnungs-, Schließ-, Lese- und Schreibaufrufen. Für spezielle Operationen, die nicht einfach in diese Kategorien fallen, unterstützt das Betriebssystem einen "Spezialoperations"-Aufruf. Diese Spezialoperationen sind Dinge, wie z. B. das Einstellen von Terminalparametern und Druckerschriftarten.
  • 5.3.6.1 Hyperkubusmatrix
  • Das System behandelt die Hyperkubusmatrix als eine Datei vom Gerätetyp. Folgerichtig wird sie mit einem "open"-Befehl zugewiesen und mit "close" freigegeben, und Nachrichten werden mit "write" und "read" gesendet bzw. empfangen. Eines der leistungsstarken Merkmale des Hyperkubus ist es, daß er rekursiv definiert wird und daß so alle Kubusordnungen logisch äquivalent sind. Wenn eine Belegung angefordert wird, spezifiziert der Anwender in dem "open"-Aufruf die Ordnung (N) des Unterkubus, die er benötigt. Wenn ein Unterkubus dieser Ordnung verfügbar ist, wird er initialisiert und die Knoten werden von 0 bis 2N-1 numeriert. Der Unterkubus wird so nah wie möglich an das periphere Steuergerät gelegt, an das das Benutzerterminal angeschlossen ist. Wenn kein Unterkubus dieser Größe verfügbar ist, gibt der "open"-Befehl einen Fehlerzustand zurück. Das ermöglicht dem Benutzer, entweder darauf zu warten, daß ein Unterkubus der Ordnung N verfügbar wird oder einen kleineren anzufordern. Wenn der Benutzer einmal einen Unterkubus belegt hat, besitzt er den Unterkubus, bis der Prozeß abgeschlossen ist oder er ihn ausdrücklich freigibt (schließt). Ein Grad an Fehlertoleranz wird in dem System erreicht, da das Betriebssystem in der Hyperkubusmatrix die Diagnose periodisch ablaufen läßt und ein Knoten aus den belegbaren Betriebsmitteln ausgesondert wird, wenn er fehlerhaft arbeitet. Jedoch bleiben die übrigen Knoten zur Nutzung verfügbar. (Ein fehlerhafter Knoten verursacht auch, daß die mit seiner Matrixplatine verbundene LED ausgeschaltet wird, was einen Wartung erfordernden Zustand anzeigt.)
  • 5.3.6.2 Grafiksystem
  • Die Grafikplatinen werden auch als Gerätedateien behandelt und werden von jedem Benutzer mit Dateisystemaufrufen belegt und verwaltet. Die Spezialoperationen, die für die Grafikgeräte definiert sind, sind die Grafikoperationen, die die Hardware selbst unterstützt, wie z. B. das Linien- und Kreiszeichnen, Ausfüllen, Schwenken, usw..
  • 5.3.6.3 SBX-Schnittstelle
  • Jede Systemsteuerplatine in einem System hat drei SBX-Anschlüsse. Einer wird benutzt für das Bandkasetten-Steuergerät und ein anderer ist für die Versorgung des Platinenbusses (ein Bus zur Übertragung von Daten zwischen peripheren Steuergeräten) vorgesehen. Der letzte SBX-Anschluß ist für gewöhnliche parallele I/O-Anwendungen verfügbar. Es gibt viele mögliche Anwendungen für die SBX-Schnittstelle einschließlich Netzwerkbetrieb, 9-Spur-Bandlaufwerk-Steuergerät, usw.. Unabhängig davon, wofür sie verwendet wird, wird sie vom Betriebssystem als Gerät behandelt. Folgerichtet ist es nur notwendig, den zugehörigen Gerätetreiber zu schreiben, um die Standarddateisystemaufrufe zur Geräteverwaltung verwenden zu können.
  • 5.3.7 Initialisierung
  • Die erste Initialisierungsstufe wird erfüllt, indem das System einfach im Normal-Modus eingeschaltet wird. Wenn das Betriebssystem urgeladen wird, sucht es eine Konfigurationsdatei genannt
  • /sys/startup
  • Wenn die "startup"-Datei existiert, wird eine Shell erzeugt, die sie als Befehlsdatei ablaufen läßt. Ein Beispiel eines Befehls, der sehr wahrscheinlich in der startup-Datei gefunden würde, ist
  • /sys/bin/spool> /sys/spool. log &
  • der den Drucker-Spooler veranlaßt, als ein paralleler Prozessor zu laufen.
  • Darüber hinaus führt der Systemadministrator bestimmte Funktionen aus, wie z. B. das Erzeugen von Anmeldedateien für jeden Benutzer.
  • Zusätzlich zur Initialisierung des Betriebssystems, muß die Hyperkubusmatrix initialisiert werden. Die Initialisierung der einzelnen Prozessoren wird in Kapitel 4.9 erörtert. In diesem Kapitel wird ein Algorithmus für die Systeminitialisierung beschrieben. Dem Algorithmus liegt eine Baumstruktur zugrunde und er ist einfacher darzustellen als zu beschreiben. Das Diagramm unten zeigt die Initialisierungsverantwörtlichkeit für jeden Prozessor, wobei angenommen wird, daß es 16 Prozessoren gibt. Die binären Zahlen sind die Prozessoridentifizierer und die dezimalen Zahlen stellen die Zeitstufe der Initialisierung dar.
  • Das Programm, das diesen Algorithmus implementiert, ist in Assemblersprache unten aufgelistet.
  • MOVW ID, R1 Der Identifizierer (ID) ist der ; Speicherplatz, der den ; Prozessoridentifizierer (ID) enthält
  • LDPR R1, IDREG Der Identifizierer (ID) wird in das ; Identifizierer-(ID)-Prozessorregister ; geladen
  • FF0 R1, R2 R2 = Anzahl der Nullen im Identifizierer
  • SUBB #1, R2
  • JL END keine Nullen am Ende --> dieser Prozessor ; ist in dem Graph ein Blatt < Endpunkt)
  • LOOP: MOVW #1, R3 Berechne den Identifizierer (ID) des ; Nachbarns durch Komplement-Bildung
  • SFTW R2, R3 eine der Nullen am Ende
  • MOVW R1, R4
  • XORW R3, R4 R4 = neuer Identifizierer (ID) {ende die Nachrichtenlänge an Port #(R2)} {empfange Status; benutze Zeitablauf}
  • a. stromlos 8Zeit abgelaufen)
  • b. fehlerhafter Selbsttest
  • c. Paritätsfehler
  • d. aktiv und funktionierend {wenn aktiv MOVW R4, ID; gebe neuen Identifizierer (ID) in den Speicher}
  • {sende Kopie des Codes und neuen Identifizierer (ID) an R2}
  • REPC R2
  • JMP LOOP
  • END:
  • {suche Antworten und EROF}
  • 5.3.8 Befehle des Betriebssystems
  • Dieses Kapitel spezifiziert die Befehle in alphabetischer Reihenfolge, die im Betriebssystem implementiert sind:
  • ADB: Debugger SLEEP: Setze Prozeß außer Kraft AS: Assemblerprogramm (80286) SORT: Sortiere oder mische zusammen ASN: Assemblerprogramm () SPLIT: Teiie eine Datei auf AT: spätere Ausführung STIY: Setze Terminal CAT: Verkette und Drucke TEE: Pipe mit Dateisicherungi CD: Wechsle das Verzeichnis WAIT: Warte Beendigung ab CHMOD: Ändere den Schutz WALL: Schreibe an alle Benutzer CMP: Dateivergleich WHO: Zeige die Systembenutzer an CN: Ändere den Namen WRITE: Sende Text CP: Kopiere DATE: Drucke Daten DC: Tischrechner DF: freier Plattenplatz DIFF: Diff. Dateivergleich DU: Plattenverwendung ECHO WiederholeArgumente ED Zeilen-Editor ET Terminal-Emulation F77 Fortran 77 (80286) F77N Fortran 770 GREP Mustersuche HELP Hilfe HD Hexadezimaler Speicherabzug KILL Vernichte Prozeß LN Verbinde LS Liste Verzeichnis auf MAIL Lokale Post MAN Drucke Handbuch
  • MESG Nachrichten (ja/nein)
  • MORE seitenweise Anzeige
  • MOUNT Montiere Dateisystem
  • NM Bildschirmeditor (NMACS)
  • NSH Shell (siehe SH)
  • PASSW Ändere Paßwort
  • PR Drucke Datei
  • PS Prozefstatus
  • PSTAT Systemstatus
  • PWD Arbeitendes Verzeichnis
  • RM Entferne Datei
  • RMLN Entferne Verbindung
  • ROFF Textformatierer
  • SA Systembuchhaltung
  • SED Strom-Editor
  • SH Shell
  • SHUT Rufe RAM-Überwachungsprogramm auf
  • 5.3.9 Dateiformate und Konventionen
  • bIn diesem Kapitel sind die Datenstrukturen, die im Betriebssystem verwendet werden, spezifiziert. Die meisten Strukturen werden zur Verwaltung von
  • Prozessen
  • procobj
  • Dateien
  • cactab
  • dir
  • file
  • opntab
  • System
  • sysdata
  • sysdev
  • verwendet.
  • Um einige dieser Strukturen vollständig zu verstehen, ist es notwendig, Betriebskenntnisse über den 80286 zu haben (für Details siehe iAPX 286 Programmer's Reference Manual von Intel). Einige der wichtigen Merkmale des 80286 sind:
  • 1) Der Speicher wird als ein Satz von Segmenten variabler Länge (bis 64kByte) behandelt.
  • 2) Jedes Segment hat eine virtuelle Adresse, die aus zwei Teilen besteht (jeder Teil umfaßt zwei Bytes).
  • a) einen Index (Segmentselektor) auf einen der zwei Segmentdeskriptortabellen des: die globale Deskriptortabelle (GDT) und die lokale Deskriptortabelle (LDT).
  • 3) Die Hardware erkennt einige spezielle Segmente und unterstützt schnelles Task-Umschalten. Diese Segmente enthalten das GDT, das LDT und das Task-Zustands-Segment(< TSS).
  • In der Spezifikation unten haben die Abkürzungen die folgenden Bedeutungen: C = Konstante, B = Byte, H = Halbwort, W = Wort, D = Doppelwort. Wenn ein Wort eine Adresse im Speicher ist, dann besteht es aus den zwei oben beschriebenen Teilen. Wenn ein Wort eine Plattenadresse ist, hat es drei Teile, die Zylinder, Kopf und Sektor angeben.
  • CACTAB(5) CACTAB(5)
  • NAME
  • cactab -- Format der Sektorpuffercache-Tabelle
  • BESCHREIBUNG
  • Das Dateisystem hält einen Cache von Puffern für Plattensektoren aufrecht, um den aktuellen Plattenverkehr zu minimalisieren. Die Anzahl der Puffer wird von der Systemvariable "caccnt" gesetzt. Wenn sämtliche Puffer voll sind und ein Sektor gelesen werden muß, der -nicht in einem Puffer ist, wird für den neuen Sektor der am längsten unbenutzte Puffer verwendet. Aus diesem Grund sind die Puffer in einer miteinander verknüpften Liste mit einer Systemvariable "lruptr" angeordnet, die auf den am längsten unbenutzten Puffer zeigt. Die Eingänge in die Sektorpuffercache-Tabelle (welche sich bei "cactab" befindet) werden Sektorpufferdeskriptoren ("secbufdes") genannt und sind unten spezifiziert.
  • secbufdes -- Format eines Sektorpufferdeskriptors H caclruf am längsten unbenutzte Vorwärtsverbindung
  • H caclrup am längsten unbenutzte Rückwärtsverbindung
  • B cacst Pufferstatus (siehe unten)/Zugriffszählung
  • B cacmod Puffer modifiziert
  • H cacchn Sperre Kette für Puffer
  • H cacchne
  • C cacdev Gerätenummer (*2 ) für Puffer
  • W cacadr Plattenadresse des Puffers
  • bufst
  • C unchanged = 0 Puffer nicht gesichert beim Auslagern
  • ????
  • C modified = 1; Puffer modifiziert (gesichert beim Austausch)
  • SIEHE AUSSERDEM
  • sysdata (5)
  • DIR(5) DIR(5)
  • NAME
  • dir -- Format eines Verzeichnisses
  • BESCHREIBUNG
  • Jeder Knoten in der Dateisystemhierarchie ist ein Verzeichnis. Ein Verzeichnis enthält einen Zeiger auf Dateien oder andere Verzeichnisse. Der erste Name in jedem Verzeichnis ist "·" und weist auf das Verzeichnis selbst hin. Namen von Dateien und Verzeichnissen können höchsten 24 Buchstaben aus dem Satz (a-z, 0-9, , -,.> aufweisen. Ein Verzeichnis wird aus einem oder mehreren Verzeichnissektoren ("dirsec") aufgebaut. Ein Verzeichnissektor enthält bis zu 32 Einträge, von denen jeder 32 Bytes enthält. Der erste Eintrag enthält definierende Informationen über das Verzeichnis. Die übrigen Einträge, genannt Verzeichniszeiger ("dirptr"), sind Zeiger auf Dateien oder andere Verzeichnisse. Die Struktur der Verzeichnissektoren und Verzeichniszeiger wird unten spezifiziert.
  • dirsec -- Format eines Verzeichnissektors
  • H dirid; magische Nicht-ASCII-Zahl (F4FI), die bei jedem Verweis zum ;dirsec überprüft wird B level Verzeichnisebene in der Hierarchie
  • W nxtdir Plattenadresse des nächsten dirsec in diesem Knoten
  • W dirdate Erstellungsdatum des Verzeichnisses
  • H dirown Verzeichnisinhabernummer
  • B(18) res reserviert
  • W(8) dirptr erster einer variablen Anzahl (bis 31) von ;Zeigern auf Dateien oder Verzeichnisse
  • dirptr -- Format eines Verzeichniszeigers
  • B(24) name 24-Zeichen-Name einer Datei oder eines Ver-;zeichnisses H rights mit den Namen verbundene Rechte (siehe un-;ten) H ddirdev Gerät für den ddir-Zeiger (falls ungleich ;Null zeigt dirptr auf das Gerät root)
  • W nodptr Plattenadresse des nächsten Knotens oder der nächsten Datei
  • DIR(5) DIR(5)
  • rights -- Rechte (und Art), die mit dem Namen verbunden sind
  • (0=bewilligt, 1=verweigert)
  • Bit 0: --- Art des besagten Objektes (00 = Datei/Gerät,
  • Bit 1: -- 01 = Verbindung, 10 = ddir, 11 = Verzeichnis)
  • Bit 2: Ändere Rechte
  • Bit 3: Reserviert
  • Bit 4: Lösche Datei
  • Bit 5: Führe Datei aus
  • Bit 6: Schreibe Datei
  • Bit 7: Lese Datei
  • Bit 8: Ändere die Namen im Verzeichnis
  • Bit 9: Erzeuge und Andere Verbindungen
  • Bit 10: Verwende Verzeichnis zum Datei-Nachschlagen
  • Bit 11: Lösche Eintrag im Verzeichnis
  • Bit 12: Lösche Verzeichnis
  • Bit 13: Führe vom Verzeichnis aus
  • Bit 14: Erzeuge Datei im Verzeichnis
  • Bit 15: Lese Inhalt des Verzeichnisses
  • SIEHE AUCH
  • file(5)
  • FILE(5) FILE(5)
  • NAME
  • file -- Format einer Datendatei
  • BESCHREIBUNG
  • Eine Datendatei besteht aus einem Dateideskriptorsektor ("fildessec") und aus so vielen Dateizeigersektoren ("filptrsec") wie nötig. Ein Dateideskriptorsektor enthält ein 32-Byte-Kopfteil und bis zu 248 Zeiger auf Daten enthaltende Sektoren. Ein Dateizeigersektor enthält ein 12-Byte-Kopfteil und bis zu 252 Zeiger auf Daten.
  • fildessec -- Format eines Dateideskriptorsektors
  • H fildid Nicht-ASCII-Wert (F9FI), verwendet zur Validisierung B filtyp Dateiart (siehe unten)
  • B subtyp Dateiunterart (nicht vom System interpretiert)
  • W nxtptr Plattenadresse des nächsten Zeigersektors
  • H filver Dateiversionsnummer
  • H filock Dateisperrung (1=lesen, 2=schreiben)
  • W fildate Dateierstellungsdatum
  • W altered Datum der letzten Dateiänderung
  • W acssed Datum des letzten Dateizugriffs
  • W filsiz Dateigröße (0 bis 4294967295 Bytes)
  • H filown Dateiinhabernummer
  • H acccnt Dateizugriffszählung
  • W fdatptr erste bis zu 248 Plattenadressen der Sektoren, ;die Daten enthalten (fdatptr = 0 ist ein ungül;tiger Zeiger) filtyp -- Definitionen der Dateiart (0 bis 15 reserviert für)
  • C nulfil = 0
  • C devfil = 1 eine Datei vom Gerätetyp
  • C sysfil = 2 eine Systemdatei
  • C binfil = 3 eine binäre Datei
  • C relfil = 4 eine Datei vom Typ eines verschiebbaren Objekts C exefil = 5 eine ausführbare Datei
  • C txtfil = 6 eine Text(ASCII)datei
  • FILE(5) FILE(5)
  • filptrsec -- Format eines Dateizeigersektors
  • H filpid Nicht-ASCII-Wert (FAFI) zur Validisierung verwendet
  • H secbas Sektorzählungsbasis (Anzahl der Datensektoren
  • ;in der Datei hinter denen, auf die hier gezeigt wird) W nxtptr Plattenadresse des nächsten Zeigersektors
  • B(8) res reserviert
  • W fdatptr erste der bis zu 252 Plattenadressen von Daten enthaltenden Sektoren SIEHE AUCH
  • ed(1), dir(5), opntab(5)
  • OPNTAB(5) OPNTAB(5)
  • NAME
  • opntab -- Format einer "Tabelle der offenen Dateien"
  • BESCHREIBUNG
  • Immer wenn eine Datei geöffnet wird, wird ein Dateiöffnungsdeskriptor < "opfildes") erzeugt und in die Tabelle der offenen Dateien ("opntab") des Prozesses geschrieben, der den
  • "open file"-Aufruf hervorrief. Der Aufruf gibt den Index, genannt die Kanalnummer oder "fildes", des Deskriptors in der Tabelle der offenen Dateien an. Danach nehmen Dateioperationen auf diese Datei mittels der Dateinummer Bezug. Es können bis zu ??? offene Dateien in einem Prozeß gleichzeitig existieren. Eine Tabelle der offenen Dateien besteht nur aus Deskriptoren offener Dateien, so daß es genügt, das Format der Deskriptoren anzugeben.
  • opfildes -- Format eines Deskriptors einer offenen Datei
  • B opnst Status einer offenen Datei (siehe unten)
  • B opntyp Art der Datei (siehe unten)
  • H opndev Gerätetabellenindex der Datei
  • W opnptr Plattenadresse des ersten Zeigersektors der ;Datei W opncpt Plattenadresse des Zeigersektors des aktuellen Byte-Zeigers
  • W opnpos aktuelle Byteposition in der Datei
  • W opnsec Plattenadresse des Sektors der aktuellen Byte- Position
  • H opnrgt Zugriffsrechte der offenen Datei
  • H opninx Index des aktuellen Sektors im Zeigersektor
  • H opndir Zeiger der Datei auf Verzeichnissektor
  • H opntem temporärer Bereich
  • H opntem2 temporärer Bereich
  • B opnstps Zählung der Anzahl der Verbindungssprünge
  • B opndpt aktuelle Tiefe der Namenssuche
  • opnst -- Definition des Status einer offenen Datei
  • C offen = 0
  • C geändert = 2
  • opntyp -- Definition der Art einer offenen Datei
  • C Datein = 0
  • C Gerät = 1
  • C Pipe = 2
  • SIEHE AUCH
  • file(5), open(2)
  • PROCOBJ(5)
  • NAME
  • procobj -- Format eines Prozeßobjektes
  • BESCHREIBUNG
  • Jeder Prozeß im System wird von einer Datenstruktur, genannt ein Prozeßobjekt, dargestellt. Dieses Prozeßobjekt wird von vier Einträgen in der globalen Deskriptortabelle (GDT) dargestellt. Diese vier Einträge werden zusammen der Prozeßdeskriptor genannt und alle Prozeßdeskriptoren sind miteinander verkettet. Der erste Eintrag ist ein "Ungültig"-Segmentdeskriptor, der Prozeßinformationen enthält: Eine Verbindung zum nächsten Prozeßdeskriptor in der Kette, Prozeßidentifizierer, Priorität und Status. Die anderen drei Einträge sind gültige Segmentdeskriptoren. Der Prozeßdeskriptor und die Prozßobjektformate sind unten definiert.
  • Prozeßdeskriptor H proc link Offset im GDT zum nächsten Prozeßdeskriptor
  • H procid spezieller Identifizierer für den Prozeß
  • B proc priority Schedul-Priorität (1 ist höchste)
  • B proc null =0 für ungültigen Segmentdeskriptor H proc status siehe unten
  • W(2) TSS desc Deskriptor für Task-Zustands-Segment
  • W(2) LDT desc Deskriptor für lokale Deskriptortabelle
  • W(2) procobj desc Deskriptor für Prozeßobjekt proc status
  • C run = 0 Prozeß ist ablaufbereit
  • C newpcs = 1 neuer Prozeß
  • C interr = 2 Prozeß wird von Fehler angehalten
  • C bufwat = 20 wartend auf Speicherpuffer
  • C dacwat = 21 wartend auf Gerätezuweisung
  • C secwat = 22 wartend auf Sektorpuffer
  • C dskwat = 23 wartend auf Plattenoperation
  • C endwat = 24 wartend auf Prozeßbeendigung
  • C trdwat = 25 wartend auf das tty-Lesen
  • C twrwat = 26 wartend auf das tty-Schreiben
  • C mcpwat = 27 MCP untätig
  • C ptrwat = 28 wartend auf Drucker
  • C cacwat = 29 wartend auf Platten-Cache
  • C diverr = 30 Divisions- oder Bereichsüberschreitungs-;Halt
  • C trderr = 31 Spur-Halt
  • C brkerr = 32 Unterbrechungspunkt-Halt
  • C ovrerr = 33 Ganzzahl-Bereichsüberschreitungs-Halt
  • C ptrerr = 34 Schutzfehler-Halt
  • PROCOBJ(5) PROCOBJ(5 Prozeßstatistik Prozeß-Parameter Systemarbeitsbereich im Prozeß Prozeßinterruptvektoren (können vom "Signal"-Systemaufruf gesetzt werden)
  • PROCOBJ(5) PROCOBJ(5)
  • privlg (Privile-Bits des Prozesses: 0=gewährt 1=verweigert) Bit 0:
  • Bit 1:
  • :
  • :
  • Bit 12: Verändere Speichergröße
  • Bit 13: Erzeuge Verzeichnisse
  • Bit 14: Erzeuge Verbindungen
  • Bit 15: "Superuser" (alle Rechte)
  • Die Prozeßstatistik kann zur Abrechnung verwendet werden und auf sie wird mit dem "getpcs"-Systemaufruf zugegriffen. Die Prozeßparameter werden bei der Prozeßerzeugung von der Anmeldedatei erzeugt oder sie werden vom Erzeugungsprozeß geerbt. Die Tabelle der offenen Dateien enthält Deskriptoren der offenen Dateien. Immer wenn eine Datei geöffnet wird, wird für sie ein Deskriptor in die Tabelle eingetragem und sein Index (Kanalnummer) wird zurückgegeben. Immer wenn ein neues Segment für einen Prozeß belegt wird, wird für dieses ein Deskriptor in die LDT eingegeben.
  • Es gibt verschiedene Systemvariablen, die in der Prozeßverwaltung verwendet werden. Diese umfassen Systemzustand letzter Prozeß: ein Zeiger auf den letzten abgefertigten Prozeß; er wird verwendet, um Reigen-Ablaufplanung zu implementieren
  • Prozeßobjekt: der Segmentselektor für das aktuelle Prozeßobjekt
  • Restzeit: die restliche Anzahl der Taktschläge in der Zeitscheibe des aktuellen Prozesses.
  • SIEHE AUCH
  • alarm(2), frun(2), endpcs(2), endump(2), getpcs(2), psend(2), pause(2), vector(2), sysdate(5), files(5)
  • SYSDATA( 5) SYSDATA( 5)
  • NAME
  • sysdata -- Format der Systemdatendatei
  • BESCHREIBUNG
  • Die Systemdaten (ftsysdata(f) definieren die Parameter, Statistik und Variablen des Systems. Die Daten können durch das Aufrufen des Systemaufruf s "getsys" gelesen werden. Das Format der Systemdaten wird unten angegeben. Systemparameter System-Statistiken System-Variablen
  • SYSDEV(5) SYDSDEV(5)
  • BESCHREIBUNG
  • Jedes vom Betriebssystem unterstützte Gerät hat einen Satz von Gerätetreibern zu seiner Unterstützung. Auf diese Routinen wird über Aufruftabellen zugegriffen, die von einer speziellen Nummer für jedes Gerät (siehe unten) indiziert werden. Das Basissystem unterstützt die Platten, 8530er, 8259er, 8254, Matrixschnittstelle, Drucker und eine sbx-Schnittstelle, die an ein 3M-Bandlaufwerk angeschlossen ist. Weitere Treiber können hinzugefügt werden, wenn andere sbx-Schnittstellen im System installiert werden.
  • Die Gerätaufrufe sind für sämtliche Geräte standardisiert. Sie sind: mit (initialisiere), open (öffne), read (lese), write (schreibe), alloc (weise zu), special (Spezial) und seek (suche).
  • Die Geräteindexdefinitionen für das System sind
  • 0: Null-Gerät
  • 1: sbx0 (Bandlaufwerk, falls vorhanden)
  • 2: sbx1 (Zwischenplatinenbus, falls vorhanden)
  • 3: sbx2 (nicht definiert)
  • 4: Plattensteuergerättreiber 0
  • 5: Plattensteuergerättreiber 1
  • 6: Plattensteuergerättreiber 2
  • 7: Plattensteuergerättreiber 3
  • 8: tty0
  • 9: tty1
  • 10: tty2
  • 11: tty3
  • 12: tty4
  • 13: tty5
  • 14: tty6
  • 15: tty7
  • 16: Terminal-Broadcast
  • 17: Drucker
  • 18: Hyperkubus-Matrix
  • 4.3. Knotenkern
  • Es gibt einen kleinen Kern, der in jedem Knoten der Hyperkusmatrix läuft. Die Hauptfunktion des Kernes besteht darin, Kommunikation und Synchronisierungsmöglichkeiten vorzusehen. Jedoch gibt es auch einen einfachen Debugger und einen Programmlader und -Scheduler.
  • 5.4.1 Kommunikation und Synchronisierung
  • Das bei dem System angenommene Rechenmodell, daß der Benutzer ein Programm und Daten explizit in Teile trennen wird, die auf getrennten Prozessoren laufen. Es wird außerdem angenommen, daß jede notwendige Synchronisierung erfüllt wird, indem auf eine Kommunikation gewartet wird. Aus diesem Grunde sind die Schlüsselfunktionen die Kommunikationsroutinen. Kommunikation auf der Benutzerebene wird mit zwei einfachen Systemaufrufen durchgeführt: "send" (sende) und "receive" (empfange). Sie haben beide drei Argumente: einen Knotensatz, eine Nachricht und eine Nachrichtenlänge. Eine Nachricht ist eine Bytekette und der Knotensatz ist das Ziel oder die Quelle der Nachricht. Beide Routinen sind blockierende Funktionen und kehren nicht zurück, bevor die Nachricht gesendet oder empfangen ist. Um Wartezeiten zu vermeiden, wenn die Synchronisierung unnötig ist, gibt es eine "test for message"(Teste auf Nachricht)-Funktion, die sofort ein Flag zurückgibt, das anzeigt, daß eine Nachricht auf ihren Empfang wartet. Es gibt auch zeitgesteuerte
  • Versionen des Sendens und des Empfangens, die einen zusätzlichen "Zeitablauf"-Parameter besitzen. Sie kehren zurück, wenn die Nachricht empfangen (oder gesendet) ist oder wenn der Zeitablauf erreicht ist, je nachdem was zuerst auftritt. Sie geben ein Flag zurück, das anzeigt, welche Bedingung den Rücksprung verursachte.
  • Das Hand-Shaking und Puffermanagement der darunterliegenden Systemebene unterteilt eine Nachricht in kleine Blöcke und sendet (empfängt) jeweils einen Block. Für Nachrichten, die durch mehr als einen Knoten geleitet werden müssen, ist das viel effektiver als der Versuch, dies ganze Nachricht auf einmal zu behandeln. Auch verhindert es eine gegenseitige Blockierung der "wartend auf Puffer"-Art.
  • 5.4.2 Die Fehlerbeseitigung
  • Es gibt einen einfachen Debugger, der in jedem Knoten abläuft. Als Antwort auf Nachrichten von dem peripheren Steuergerät, das den Unterkubus verwaltet, kann ein Knoten Interruptpunkte setzen und Speicher und Register lesen und setzen.
  • 5.4.3 Laden und Ablaufplanung von Programmen
  • Der Knotenkern hat Systemaufrufe, die als Antwort auf Nachrichten vom peripheren Steuergerät, das momentan den Knoten verwaltet, einem Knoten ermöglicht, ein Programm und dessen Daten zu laden und den Programmablauf für die Ausführung zu planen.
  • 5. 4. 4 Kernsystemaufrufe
  • Dieses Kapitel erläutert die Aufrufe, die ein in einem Knoten ablaufendes Programm auf dem Kern ausführen kann. Es zeigt auch, wie ein Programm, das in dem einen Knoten verwaltenden peripheren Steuergerät abläuft durch das Senden und Empfangen von Nachrichten auf einige Systemaufrufe zugreifen kann. Die Liste der Systemaufrufe enthält
  • send (sende)
  • receive (empfange)
  • sendtimeout (sende Zeitablauf)
  • receivetimeout (empfange Zeitablauf)
  • testformessage (Test auf Nachricht)
  • processornumber (Prozessornummer)
  • setbreakpoint (setze Interruptspunkt)
  • readmemory (lese Speicher)
  • readregisters (lese Register)
  • setmemory (setze Speicher)
  • setregisters (setze Register)
  • load (lade)
  • go (gehe)
  • 6. SYSTEMVERWALTUNG
  • In diesem Kapitel wird ein neues Verfahren zur Initialisierung des Systems vorgestellt, insbesondere die Art, wie die Initialisierungssoftware über die Matrix ausgebreitet wird. Es gibt mehr als einen annehmbaren Algorithmus. Derjenige, den wir hier darstellen, ist ein sehr einfacher mit einer hohen Effektivität. Der Algorithmus basiert auf einer Baumstruktur. Das Diagramm unten zeigt die Initialisierungsverantwortlichkeit für jeden Prozessor unter der Annahme, daß es 16 Prozessoren gibt. Die binären Zahlen sind die Prozessoridentifizierer und die dezimalen Zahlen stellen die Stufe (in der Zeit) der Initialisierung dar.
  • Der Assembler-Sprachencode, der diesen Algorithmus implementiert lautet:
  • MOVW ID, R1 Der Identifizierer ist der ;Speicherplatz, der den Prozessor-;identifizierer (ID) enthält
  • LDPR R1, IDREF der Identifizierer wird in das ;ID-Prozessorregister geladen
  • FFO R1, R2 R2 = # der Nullen am Ende im ID
  • SUBB #1, R2
  • JL END keine Nullen am Ende, daraus folgt der ;Prozessor ist am Ende des Graphen LOOP: MOVW #1, R3 berechne Identifizierer des Nachbarn ;durch die Ersetzung einer der Nullen am ;Ende
  • SFTW R2, R3 , MOVW R1, R4;
  • XORW R3, R4 R4 = neuer ID
  • {Sende Nachrichtenlänge an Port #(R2)}
  • {Empfange Status; Benutze Zeitablauf}
  • a. tot (Zeit abgelaufen)
  • b. unzulässiger Selbsttest
  • c. Paritätsfehler
  • d. aktiv und funktionierend
  • {Wenn MOVW R4, ID aktiv; Gebe neuen Identifizierer in Speicher ein}
  • {Sende Kopie des Codes und neuen ID an R2}
  • REPC R2
  • JMP LOOP
  • END: {Suche Antworten und EROF}
  • 7 BENUTZUNG DES SYSTEMS 7.1 Einführung
  • Um das System wirksam zu programmieren, muß sich ein Benutzer ein bestimmtes Problem als ein Satz kleinerer Probleme denken. In einigen Anwendungen, besonders in der physikalischen Wissenschaft, ist das relativ einfach. Die meisten wissenschaftlichen Probleme umfassen das Lösen von Gleichungen in einem zwei- oder dreidimensionalen Raum und man kann diesen Raum einfach in Stücke aufteilen und die Gleichungen in diesen aufgeteilten Stücke lösen, wobei die Lösungen an den Rändern angepaßt werden. Bei anderen Anwendungen kann das Aufteilen des Problems in kleinere Stücke nicht so einfach sein. Jedoch müssen fast alle großen Probleme unterteilt werden, allein damit sie handhabbar werden. Ein großer Anteil der wichtigen Probleme kann auf dem System der vorliegenden Erfindung effektiv gelöst werden.
  • Ein Unterschied zwischen dem System der vorliegenden Erfindung und der traditionelleren "Pipeline"-Lösung für Hochleistungsberechnungen ist, daß man sowohl das Programm als auch die Daten in kleinere Stücke aufteilen muß. Das ist manchmal schwieriger, als mehrere Programme zu haben, die mit einem großen geteilten Speicher arbeiten, aber es modelliert die reale physikalische Welt der lokalen Phänomene genauer, und es ist der einzige Weg, den Speichergeschwindigkeits-Engpaß von Systemen mit geteiltem Speicher zu überwinden.
  • Viele Probleme werden eine Modifikation des Hyperkubus-Verbindungsschemas erfordern. Aus diesem Grund beschreibt das folgende Kapitel, wie der Hyperkubus auf diese verschiedenen Verbindungsmuster abgebildet werden kann.
  • 7. 2 Hyperkubus-Abbildungen
  • Das Hyperkubus-Verbindungssystem wurde aus drei Hauptgründen gewählt:
  • 1) Es ist ein rekursives Schema, so wird es normalerweise einfach sein, Programme zu schreiben, die unabhängig von der Ordnung des Hyperkubus sind. Das erleichtert es dem Betriebssystem, Zeit und Platz zu teilen.
  • 2) Es läßt sich direkt auf die wichtigsten allgemeinen Verbindungsmuster (z .B. 1,2,3,4-dimensionale Gitter, "perfect shuffle" und Bäume) abbilden.
  • 3) Es ist so extensiv verkoppelt, daß es eine gute Nährung der maximalen Verkopplung (jeder Prozessor ist mit allen anderen verbunden) darstellt. Wenn ein Problem keine offensichtliche Verbindungsstruktur hat, wird es normalerweise annehmbar sein, Unterproblemen willkürlich Hyperkubus-Knoten zuzuweisen und die Kommunikationssoftware für das Weiterleiten von Nachrichten sorgen zu lassen.
  • Da viele physikalische Probleme sich auf natürliche Weise auf Gitter aufteilen lassen, werden Algorithmen zur Abbildung der Hyperkuben auf Gitter bis zur 4. Dimension beschrieben.
  • 7.2.1 Gray-Code
  • Alle Hyperkubus-Abbildungen werden am einfachsten beschrieben, indem einige Varianten des Gray-Codes verwendet werden. Ein Gray-Code ist eine Eins-zu-Eins-Abbildung zwischen ganzen Zahlen derart, daß die binären Darstellungen der Abbildungen von jeweils zwei aufeinanderfolgenden ganzen Zahlen sich in genau einer Stelle unterscheiden. Es wird angenommen, daß das Gebiet endlich ist und die größte und kleinste ganze Zahl in dem Gebiet "aufeinanderfolgend" sind. Ein Beispiel eines Gray-Codes für Dreibit-Ganzzahlen ist:
  • 0 000 --> 000 0
  • 1 001 --> 001 1
  • 2 010 --> 011 3
  • 3 011 --> 010 2
  • 4 100 --> 110 6
  • 5 101 --> 111 7
  • 6 110 --> 101 5
  • 7 111 --> 100 4
  • Man kann intuitiv sehen, daß ein Gray-Code wichtig ist, indem man sich vergegenwärtigt, daß sich in einem Hyperkubus, wenn Prozessor x mit Prozessor y verbunden ist, die binären Darstellungen von x und y an genau einer Stelle unterscheiden muß. Es gibt einen einzigen Gray-Code, der mit dem folgenden Algorithmus implementiert wird:
  • 1) lasse x eine nicht-negative binär dargestellte Zahl sein
  • 2) lasse y gleich x nach einer Verschiebung um eine Stelle nach rechts sein 3) dann ist z = x XOR y die Gray-Code-Abbildung von x Das Programm zur Implementierung dieses Algorithmus ist (X darf nicht negativ sein):
  • MOVW X, R0 SFTW #-, R0
  • XORW X, R0
  • MOVW R0, Z
  • Wie unten gezeigt wird, wird die inverse Abbildung ebenfalls benötigt. In anderen Worten, wenn z eine Gray-Code-Abbildung ist, muß es uns möglich sein, den x-Wert zu berechnen, dessen Gray-Code z ist. Die inverse Abbildung für den oben angegebenen Gray-Code-Algorithmus wird im folgenden Programm implementiert:
  • MOVW Z, R0
  • MOVW R0, R1
  • MOVW N, R2 N ist die Anzahl Bits in der Dar-;stellung von Z
  • L: SFTW #-1, R1
  • XORW R1, R0
  • REP R2
  • JMP L Obwohl der obige Gray-Code einzigartig ist, gibt es viele Abbildungen zwischen ganzen Zahlen, die die Eigenschaft besitzen, aufeinanderfolgende ganze Zahlen auf Abbildungen abzubilden, die sich nur in einer Stelle unterscheiden. Jede dieser Abbildungen kann in den unten beschriebenen Algorithmen verwendet werden.
  • 7.2.2 Eindimensionales Gitter
  • Ein eindimensionales Gitter (oder ein Ring) ist einfach eine Kette aus miteinander verbundenen Prozessoren, wie gezeigt wird:
  • Diese Verbindung ist oft hilfreich, wenn das Problem nicht in Echtzeit gelöst werden muß und in Stufen aufgeteilt werden kann, die in einer Pipeline verarbeitet werden können. Das Nichtechtzeitfiltern ist ein Beispiel. Die Abbildung in diesem Fall ist einfach ein beliebiger Gray-Code, wie er in Kapitel 2.1 beschrieben ist. Wenn folglich F der Gray-Code ist und G seine Inverse, dann sind die Nachbarn des Prozessors x:
  • F(G(x)-) und F(G(x)+1).
  • 7.2.3 Zweidimensionales Gitter
  • Stationäre Probleme, die zwei Raumdimensionen betreffen, (z. B. Randwertprobleme) lassen sich naturgemäß auf ein zweidimensionales Gitter abbilden. Um eine zweidimensionale Abbildung zu definieren sei angenommen, daß das Gitter 2**M in der x- Richtung und 2**N in der y-Richtung betrage; dann ist die Prozessornummer an dem Platz (S,y):
  • 2**M*F(y)+F(x).
  • Darüber hinaus sind, wenn eine Prozessornummer k = 2**M*z+w ist, die Nachbarn des Prozessors:
  • 2**M*F(G(z))+F(G(w)-) = 2**M*z+F(G(w)-)
  • 2**M*F(G(z))+F(G(w)+1) = 2**M*z+F(G(w)+1)
  • 2**M*F(G(z)-)+F(G(w)) = 2**M*F(G(z)-)+w
  • 2**M*F(G(z)+1)+F(G(w)) = 2**M*F(G(z)+1)+w
  • Verwendet man ein etwas komplizierteres Schema, indem die Nachbarn durch das Umstellen der Abbildungsbits bestimmt werden, erhält man eine Abbildung, bei der unabhängig von der Größe des Hyperkubus die Nachbarn von k fest sind.
  • 7.2.4 Dreidimensiones Gitter
  • Viele reale physikalische Probleme lassen sich auf dreidimensionale Gitter abbilden. Ein Beispiel ist die Fluidströmung, ob im Flugzeugflügeldesign (turbulente, kompressible Strömung) oder in der Ölreservoirmodellierung (inkompressible Strömung). Eine dreidimensionale Abbildung ist analog dem zweidimensionalen Fall, außer daß die Prozessor-ID-Nummern anstelle von zwei in drei Teile geteilt werden und daß es sechs anstelle von vier Nachbarn gibt.
  • 7.2.5 Vierdimensionales Gitter
  • Wenn ein Problem sowohl die Zeit als auch den Raum enthält, kann es auf ein vierdimensionales Gitter passend abgebildet werden. In diesem Fall wird die Prozessor-ID-Nummer in vier Teile geteilt, und jeder Prozessor hat acht Nachbarn.
  • 7.3 Rechenbeispiel (Benutzerprogrammierung)
  • In diesem Kapitel wird die Programmierung zur Lösung eines charakteristischen Problems vorgestellt.
  • 7.3.1 Lineares Gleichungssystem
  • Probleme linearer Gleichungssysteme werden entsprechend der Struktur das Problem darstellenden Matrix, kategorisiert. Die zwei Hauptarten sind:
  • 1) dicht--wo die Matrix überwiegend Elementen ungleich Null enthält
  • 2) dünn--wo die Matrix überwiegend Nullen enthält. Innerhalb dieser Kategorien werden die Matrizen weiter unterteilt in:
  • 1) allgemeine--wo die Matrixelemente keine wahrnehmbare Struktur aufweisen.
  • 2) symmetrische, positiv definite--wo die Matrixelemente symmetrisch zur Hauptdiagonalen sind und die Determinanten aller Haupt-Untermatrizen positiv sind.
  • Unten wird die Programmierung zur Lösung der dichten Matrix mittels Gauß'scher Eliminierung gezeigt. Das Verfahren enthält die Berechnung von Faktoren einer Matrix, so daß das Problem in zwei Stufen lösbar ist. Zum Beispiel sei angenommen, wir wollen:
  • Ax=b
  • lösen, wobei A die Koeffizientenmatrix, x die Unbekannte und b der bekannte Vektor ist. Beim Faktorenzerlegungsverfahren berechnen wir
  • A = CD
  • wobei C und D eine spezielle Struktur besitzen (orthogonal oder dreieckig). Dann werden die Gleichungen gelöst, indem zunächst y und dann x -wie gezeigt- berechnet wird.
  • Cy = b
  • Dx = y
  • Die Struktur von C und D führt dazu, daß das obige System einfach zu lösen wird.
  • 7. 3. 1. 1 Hyperkubus-Abbildung
  • In dem Algorithmus für dichte Matrizen wird die Matrix in gleich große Rechtecke aufgeteilt (so quadratisch wie möglich). Auch der Hyperkubus wird auf ein zweidimensionales Gitter abgebildet. Im Idealfall, in dem es M**2 Prozessoren gibt und es eine (NxN)-Matrix ist, würden wir folglich Unterblöcke der Größe N/M mal N/M in jeden Prozessor packen. Der Prozeß ist unten abgebildet, wobei die Indizes sich sowohl auf den Unterblock der Matrix als auch auf den Prozessor beziehen. Der Prozessor P&ijlig; enthält den Unterblock A&ijlig; und die Nachbarn von P&ijlig; sind
  • 7.3.1.3 Gauß'sche Eliminierung
  • Die Gauß'sche Eliminierung mit teilweisem Austauschen (Pivoting) ist ein relativ stabiles und schnelles Verfahren zur Lösung eines Satzes dichter linearer Gleichungen, die keine spezielle Struktur aufweisen. Dieses Verfahren berechnet eine Faktorenzerlegung von A genannt LU (d. h. A = LU, wobei L das untere Dreieck und U das obere Dreieck bezeichnen). Die Gauß'- sche Eliminierung kann effizient auf dem System der vorliegenden Erfindung verwendet werden und das Austauschen (Pivoting) verlangsamt dem Algorithmus nicht merklich Das folgende Anwenderprogramm berechnet L und U unter Verwendung des Pivot-Austauschens mit aktuellen Zeilen-Austausch. Die Elemente von L und U ersetzen die Elemente von A.
  • Gegeben:
  • M = Ordnung des Hyperkubus
  • PN = Prozessornummer
  • N = Größe des A&ijlig;-Unterblocks (NxN)
  • A = Unterblock der Koeffizientenmatrix
  • Berechne:
  • 1 = Zeilenkoordinate des Prozessors und Matrixunterblocks
  • J = Spaltenkoordinate des Prozessors und Matrixunterblocks
  • NN = nördlicher Nachbar (-1, wenn kein Nachbar)
  • EN = östlicher Nachbar (-1, wenn kein Nachbar)
  • SN = südlicher Nachbar (-1, wenn kein Nachbar)
  • WN = westlicher Nachbar (-1, wenn kein Nachbar)
  • Belege:
  • RBMAX(N) = Zeilenpuffer-für maximale Zeile
  • RBTEM(N) = Zeilenpuffer zum Austauschen
  • Programm:
  • FOR X = 1 TO MIN(I,J) die kte Zeile und Spalte der ;Prozessoren führt k Stufen der ;Eliminierung aus
  • FOR Y = 1 TO N N-Zeilen müssen zur Eliminierung bei
  • ;jeder Stufe verwendet werden
  • L = 1 der Abschnitt von hier bis dahin, wo es ;unten vermerkt ist, dient der Pivot-;Auswahl und dem Zeilenaustausch
  • IF (I = J) THEN L = y; wenn der Prozessor sich ;auf der Diagonalen befindet und die letzte Stufe ;erreicht ist, müssen die ;Schleifen bei Y beginnen
  • IF (X = J) THEN wir sind in der Pivot-Spalte ;und K wird als Index der Zeile ;mit dem maximalen Pivot berechnet T=0
  • K=1
  • FOR W = L TO N
  • IF (ABS(A(W,Y) ) T) THEN
  • K=W
  • T = ABS(A(W,Y))
  • ELSE RECEIVE(WN,K,1) K wird von den Prozes-;soren rechts der Pivot-;Spalte empfangen
  • SEND(EN,K,1) K wird nach rechts gesendet, ;nachdem es entweder berechnet oder empfangen wurde
  • IF (I = M) THEN wir sind in der letzten Zeile ;und müssen mit der Zeilenaus-;wahl beginnen, indem wir den
  • ;Puffer auf die Kte Zeile ein-;stellen
  • FOR W = 1 TO N
  • RBMAX(W) = A(K,W)
  • ELSE wenn wir eine Zeile über der letzten ;sind, dann empfangen wird die maximale ;Zeile vom Prozessor unter uns, ver-;gleichen sie mit unserer maximalen Zeile, ;führen ggf. notwendig den Austausch durch ;und senden die aktuelle maximale Zeile ;hinauf zu der nächsten Prozessorenzeile
  • REICEIVE( SN,RBMAX,N)
  • IF (X = J) THEN EXCH ist wahr, wenn ein ;Zeilenaustausch notwendig ;ist
  • EXCH = (ABS(RBMAX(Y)> ABS(A(K,Y)) ELSE RECEIVE(WN;EXCH,1)
  • SEND(EN,EXCH,1) wenn wir zum Austausch
  • SEND(SN,EXCH,1) gehen, müssen die Pro-;zessoren zur rechten und ;darunter dies wissen IF (EXCH) THEN
  • FOR W = 1 TO N
  • RBTEM(W = A(K,W)
  • A(K,W) = RBMAX(W)
  • SEND(SN,RBTEM,N) ELSE FOR W = 1 TO N
  • RBMAX(W) = A(K,W) IF (X> < I) THEN wenn wir nicht in der ober-;sten Zeile sind, müssen wir ;den Auswahlprozeß fortset-;zen, indem wir austauschen ;und die maximale Zeile an ;die oberen Prozessoren sen-;den SEND(NN;RBMAX,N)
  • RECEIVE(NN;REPL, 1)
  • IF (REPL) THEN RECEIVE (NN,RBTEM,N)
  • FOR W = 1 TO N
  • A(K,W) = RBTEM(W) IF (X = I) THEN SEND(SN,RBMAX,N) wenn wir in der ;obersten Zeile ;sind, senden wir ;nur eine Zeile, ;aber ELSE sonst senden wir nicht nur sondern ;empfangen auch eine Zeile
  • RECEIVE(NN,RBMAX,N)
  • SEND(SN,RBMAX,N) das beendet den Programm-;abschnitt, der die Pivot-;zeile auswählt und aus-;tauscht
  • FOR Z = L TO N der Rest des Programms führt ;unter Verwendung der oben aus-;gewählten Zeile die Zerlegung durch IF (X = J) THEN
  • PIVOT = - (A(Z,Y)/RBMAX(Y))
  • A(Z,Y) = PIVOT
  • ELSE RECEIVE(WN;PIVOT, 1)
  • SEND(EN,PIVOT, 1)
  • IF (X = J) THEN L = L + 1
  • FOR W = L TO N
  • A(Z,W) = A(Z,W) + RBMAX(W) * PIVOT
  • TEIL II. DATENPROZESSOR-IMPLEMENTIERUNG 8. 0. HAUPTKOMPONENTEN
  • Fig. 1 ist eine Darstellung eines Mehrprozessorsystems, in dem die vorliegende Erfindung ausgeführt ist. Eine Taktgeberplatine (10), eine Anzahl (1 bis k) von Prozessormatrixplatinen (12) und eine Anzahl (1 bis x) von Systemsteuerplatinen (14) werden in die Steckplätze (JI-J24) einer Trägerplatine (16) gesteckt. Die Trägerplatine (gezeigt in den Fig. 2A und 2B) ist auf eine solche Weise verdrahtet, daß sie die k Prozessorplatinen zu einen Hyperkubus der Ordnung P verbindet, wobei jede Prozessorplatine m Prozessorknoten besitzt, die zu einem Hyperkubus der Ordnung n verbunden sind, und wobei K=2j, m=2n, und P=j+n ist.
  • Eine der Prozessormatrixplatinen (12) wird ausführlicher in Fig. 3 gezeigt und wird im Kapitel 8.1 beschrieben. Eine der Systemsteuerplatinen (14) wird in Fig. 12 gezeigt und wird in Kapitel 8.9 beschrieben.
  • 8. 1 Prozessormatrixplatine
  • Betrachte Fig. 3. Jede Prozessormatrixplatine ist 16'' mal 21'' und enthält 64 Verarbeitungsknoten (d. h., m=64), wobei jeder Verarbeitungsknoten 128 KByte lokalen Speicher und 11 I/O- Kanäle aufweist. Die Verarbeitungsknoten sind auf der Platine zu einem Hyperkubus der Ordnung 6 verbunden (d. h. n=6). Diese Verbindung verwendet 6 der 11 der I/O-Kanäle auf jedem Verarbeitungsknoten. Die anderen 5 I/O-Kanäle führen zum Rand der Platine, um auf die Trägerplatine zuzugreifen. 4 dieser 5 Kanäle werden über Trägerplatinenverbindungen zu anderen Matrixplatinen geleitet, um größere Hyperkuben aufzubauen, wie im Kapitel 8.2 unten beschrieben wird.
  • Der eine übrigbleibende Kanal auf jedem Verarbeitungsknoten wird mit einem der 8 I/O-Steckplätze auf der Trägerplatine verbunden, die 8 Systemsteuerplatinen aufnehmen. Auf diese Weise kann jede der 8 Systemsteuerplatinen (14) in den I/O-Steckplätzen der Fig. 1 direkt mit bis zu 128 Verarbeitungsknoten kommunizieren.
  • Einer der 64 Verarbeitungsknoten auf der Prozessormatrixplatine der Fig. 3 ist in Fig. 4 gezeigt. Jeder der 64 Verarbeitungsknoten enthält eine integrierte Schaltung eines NcubeTM- Prozessors (30), einen lokalen Speicher (32), einen seriellen Systemleitrechner-I/O-Kanal (34) und 10 (d. h., p=10) serielle I/O-Kanäle (36). Die Verdrahtung auf der Prozessormatrixplatine (gezeigt in Fig. 3) verbindet die 64 Knoten auf der Platine zu einem Hyperkubus der Ordnung 6 (n), der aus 64 (2n=m) Verarbeitungsknoten besteht. Im gezeigten illustrierenden Ausführungsbeispiel verwendet die Verdrahtung 6 (n) der 10 (P) seriellen Verbindungskanäle, um die Verbindung zwischen den Knoten zu bewirken.
  • Der NcubeTM-Prozessorblock (30) der Fig. 4 ist ausführlich in Fig. 5 gezeigt und weist eine Gleitkomma-Einheit (40), Adreßeinheit und Befehlscache (42), Befehlsdecodierer (44), Ganzzahl-Ausführungseinheit (46), I/O-Ports (48) und eine Speicherschnittstelle (50) auf, die entweder an einen gemeinsamen Adreßbus oder sowohl an den gemeinsamen Adreßbus (52) und einen Datenbus (54) angeschlossen sind. Diese Einheiten werden unten in den Kapiteln 8.3. bis 8.8. beschrieben.
  • 8. 2. Trägerplatinenverbindungen
  • Fig. 2a ist eine detaillierte Darstellung der Anordnung der seriellen Kommunikationsverbindungen auf der Trägerplatine des in Fig. 1 gezeigten Mehrprozessorsystems. Prozessormatrixplatinen werden in einen oder mehrere der 16 Steckplätze 0 bis F eingesetzt, um eine Hyperkubusstruktur gemäß der folgenden Liste zu bilden:
  • 1 Platine = Hyperkubus der Ordnung 6 (64 Knoten)
  • 2 Platinen = Hyperkubus der Ordnung 7 (128 Knoten)
  • 4 Platinen = Hyperkubus der Ordnung 8 (256 Knoten)
  • 8 Platinen = Hyperkubus der Ordnung 9 (512 Knoten)
  • 16 Platinen = Hyperkubus der Ordnung 10 (1024 Knoten).
  • Die Verdrahtung der Trägerplatine führt Signalleitungen, um Platinengruppen miteinander, wie in Fig. 2a gezeigt, zu verbinden. Z.B. wird ein Hyperkubus der Ordnung 7 gebildet, indem zwei Platinen in die Steckplätze 0 und 1 oder 2 und 3 oder 4 und 5 usw. eingefügt werden. Einen Hyperkubus der Ordnung 8 erhält man, indem man 4 Platinen in die Steckplätze 0 bis 3 oder 4 bis 7 usw. einsetzt. Einen Hyperkubus der Ordnung 9 erhält man, indem man 8 Platinen in die Steckplätze 0 bis 7 oder 8 bis 15 einsetzt. Einen Hyperkubus der Ordnung 10 erhält man, indem man 16 Platinen in die Steckplätze 0 bis 15 einsetzt.
  • Die I/O-Verbindungsdrähte sind im unteren Teil der Fig. 2a gezeigt. Jede Linie umfaßt 128 I/O-Kanäle, die von einer Systemsteuerplatine in einem I/O-Steckplatz ausgehen und aufgefächert sind auf bis zu 8 Prozessormatrixplatinen, wobei jeweils 16 Kanäle zu einer der 8 Platinen führen. Jeweils einer der 16 Kanäle führt zum seriellen Leitrechner-Kanal (34), Fig. 4 auf einem Verarbeitungsknoten. Da es insgesamt 64 solcher Knoten auf einer Prozessormatrixplatine gibt, stellen 4 Systemsteuerplatinen in den I/O-Steckplätzen 0 bis 3 gemäß Fig. 2A die 64 Kanäle auf jeder Prozessormatrixplatine in den Matrixplatinensteckplätzen 0 bis 7 zur Verfügung und 4 Systemsteuerplatinen in den I/O-Steckplätzen 4 bis 7 gemäß Fig. 2A stellen die 64 Kanäle auf jeder Prozessormatrixplatine in den Matrixplatinensteckplätzen 8 bis 15 zur Verfügung.
  • Fig. 2b ist eine detaillierte Darstellung der Systemsteuerverbindungen auf der Trägerplatine des in Fig. 1 gezeigten Mehrprozessorsystems. Die Steuerleitungen enthalten Systemrücksetzleitungen, Taktleitungen und Matrixfehlerleitungen. Wie gezeigt wird, ist die Taktgeberplatine (10) gemäß Fig. 1 in einem Steckplatz zwischen den Steckplätzen J12 und J13 eingesetzt.
  • 8. 3 Gleitkomma-Einheit
  • Es wird auf Fig. 6 Bezug genommen. Die in Fig. 5 gezeigte Gleitkomma-Einheit (40) weist vier Eingabeoperandenregister (56) auf, die Daten vom Datenbus (54) empfangen. Der Operandenauswahl MUX (58) wählt aus dem geeigneten Eingabeoperandenregister, das Vorzeichen- und den Exponenten-Abschnitt und den Kennzeichen-Abschnitt aus. Der Vorzeichen- und Exponentenabschnitt wird an die Vorzeichen- und Exponentenlogik (60) geliefert. Der Kennzeichen-Abschnitt wird an die Kennzeichen-Logik (62) geliefert. Die Logikblöcke (60, 62) führen die von der Befehlsdefinition gemäß Kapitel 4.8 spezifizierte Gleitkomma- Arithmetik aus. Die Ausgänge der Vorzeichen- und Exponentenlogik (60) und der Kennzeichen-Logik (62) sind mit dem Operandenregister (64) verbunden, das die Daten an den Datenbus (54) zurückgibt.
  • 8.4 Adreßeinheit und Befehlscache
  • Es wird auf Fig. 7 Bezug genommen, in der ein detailliertes Blockschaltbild der Adreßeinheit und des in Fig. 5 gezeigten Befehlscache (42) dargestellt ist.
  • Das Refresh-Adreßregister (100) enthält einen Zeiger in den Speicher, dessen Wert der Adresse im Speicher entspricht, die als nächstes regeneriert wird. Nach dem Ablauf jedes Refresh- Zyklus wird der Zeiger inkrementiert. Das Stapelzeigerregister (102) enthält einen Zeiger, der oben auf den Stapel zeigt. Das Stapelzeigerregister ist oben in Kapitel 4.2.2 unter allgemeinen Registern beschrieben worden. Das Operandenadreßregister (104) ist ein internes Register, an das berechnete effektive Adressen übertragen werden, bevor ein Speicherzyklus ausgeführt wird. Das Operandenadreßregister ist mit dem Adreßbus verbunden.
  • Der Befehlszähler (106) zeigt auf den nächsten auszuführenden Befehl. Nachdem der Befehl ausgeführt ist, wird er um die geeignete Anzahl Bytes inkrementiert. Er wird auch von Aufruf-, Rückkehr-, und Verzweigungsbefehlen beeinflußt, die den Ausführungsfluß verändern.
  • Der Befehlszähler ist auch an das Befehlsheranholadreßregister (108) angeschlossen, welches ein Zeiger auf den Speicherplatz ist, von dem die Befehle aktuell geholt wurden. Diese Befehle werden in den Befehlscache (114) geladen. Der Befehlscache ermöglicht das Heranholen verschiedener Befehle vor dem Befehl, der ausgeführt wird.
  • Das Schatten-ROM (110) ist in Kapitel 4.9 beschrieben. Es enthält Befehle, die bei der Systeminitialisierung vor der Steuerungsübertragung an den Benutzercode ausgeführt werden. Der Befehlscache schafft einen Puffer für Daten nach dem Heranholen und vor der aktuellen Ausführung des gespeicherten Befehls. Er schafft außerdem ein gewisses Zurückhalten von Daten, nachdem sie ausgeführt wurden. Wenn eine Rückverzweigung zur Wiederausführung eines vorherigen Befehls vorgenommen wird, und wenn dieser vorangegangene Befehl innerhalb 16 Bytes vor dem aktuell ausgeführten Befehls liegt, werden die zu diesem vorangegangenen Befehl gehörigen Daten noch im Cache gespeichert sein. Auf diese Weise muß kein Speicherheranholzyklus stattfinden. Der Befehlscache ist sowohl ein Vorausschau- als auch ein Zurückschaupuffer.
  • Der MUX (112) ist ein Multiplexer, der zwischen Befehlen, die vom Schatten-ROM kommen oder Befehlen, die nach der Initialisierung vom Speicher kommen, auswählt.
  • 8. 5 Befehlsdecodierer
  • Es wird auf Fig. 8. Bezug genommen. Der in Fig. 5 gezeigte Befehlsdecodierer (44) empfängt von dem Befehlscache der Fig. 7 einen Befehlsstrom.
  • Der Befehlsdecodierer enthält eine Befehlscode-PLA (101), der statische Informationen im Zusammenhang mit dem Befehlscode eines Befehls decodiert, wie z. B. Anzahl der Operanden, Art der Operanden, ob die Befehlsausführung einen einzigen Zyklus oder mehrere Zyklen dauern wird, und in welche Einheit der Befehl zur Ausführung geht (die Befehlsausführungseinheit oder die Gleitkomma-Einheit). Diese Information wird im Befehlscode- Latch-Speicher (103) zwischengespeichert. Der Operand selbst wird im Operanden-Latch-Speicher (105) gespeichert. Die Operanden-Folgesteuerung-PLA (107) ist eine Zustandsmaschine, deren Hauptfunktion darin besteht, die Decodierung der Operanden zu überwachen. Die Operandendecodierungs-PLA (109) ist eine Zustandsmaschine, deren Hauptfunktion darin besteht, für jeden der Adreßmoden die effektiven Adressen zu berechnen und die Ausführung der Befehle zu überwachen. Die Ausführungs-PLA (111) ist eine Zustandsmaschine, deren Hauptfunktion darin besteht, den Befehl in Übereinstimmung mit der oben in Kapitel 4.8 gegebenen Definition der Befehle auszuführen.
  • 8. 6 Ganzzahl-Ausführungseinheit
  • Es wird auf die Fig. 9A und 9B Bezug genommen, die zusammen ein detailliertes Blockschaltbild der in Fig. 5 gezeigten Ganzzahl -Ausführungseinheit enthalten. Die genauen Formate und ausführliche Beschreibungen der Register werden in Kapitel 4.4.3 angegeben. Das Prozessorstatusregister (126) enthält Flags, Interruptsteuerungen und andere Statusinformationen. Das Fehlerregister (124) speichert die Fehlercodes. Das Konfigurationsregister (120) speichert die Modellnummer (nur lesbar) und die Speicherschnittstellenparameter. Das Prozessor-Identifikationsregister (122) enthält eine Zahl, die den Platz des Prozessors in der Matrix identifiziert. Das Zeitgeberregister (116) enthält einen Zähler, der ungefähr alle 100 us dekrementiert wird und ein Interrupt erzeugt (falls freigegeben), wenn er Null erreicht.
  • Der Refresh-Zeitgeber (118) ist ein Zeitablaufregister, das verwendet wird, um die Perioden zwischen Refreshs zeitlich abzustimmen. Dieses Register wird von 8 Bits aus dem Konfigurationsregister initialisiert und es dekrementiert diese 8 Bits. Wenn der Zeitgeber auf Null geht, wird ein Refresh angefordert.
  • Die Registerdatei (128) ist oben in Kapitel 4.4.1 beschrieben. Sie enthält 16 adressierbare Register, die von den Befehlsoperanden adressierbar sind.
  • Das temporäre Register (130) ist ein internes Register, das während der Ausführung von Befehlen verwendet wird. Es ist verbunden mit der Ganzzahl-ALU (132), die während der Ausführung von Ganzzahl-Befehlen verwendet wird. Die Vorzeichenerweiterungslogik (134) entnimmt vom ALU-Block das Ergebnis und erweitert entsprechend der Datenart des Ergebnisses mit dem Vorzeichen auf eine volle 32-Bitbreite. Sie überprüft auch hinsichtlich Konversion-Bereichsüberschreitung.
  • Das Trommel-Schieberegister (136), das temporäre Schieberegister (134) und das Schiebe-Zählregister (140) werden zur Ausführung der Schiebe- und Rotorbefehle verwendet. Das Port-Auswahlregister (142) ist ein internes Register, in dem die für die nächste Operation zu wählende Registernummer des seriellen I/O-Ports gespeichert wird.
  • Das Steuerregister-Auswahlregister (144) ist ein internes Register, in dem die Adresse das für die nächste Operation auszuwählenden Steuerregisters gespeichert wird. Das Speicherdatenregister (146) ist ein internes Register, das zur temporären Speicherung von Daten verwenden wird, die dafür bestimmt sind, in den Speicher geschrieben zu werden. Es ist ein Schnittstellenregister zwischen der Befehlsausführungseinheit und der Speicherschnittstelle.
  • 8.7 I/O-Ports
  • Die Fig. 10A und 10B enthalten zusammen ein Blockschaltbild eines einzelnen I/O-Ports selbstvertretend für einen der 11 I/O-Ports (48) auf jedem in Fig. gezeigten Prozessor. Jeder Port weist alle Schaltungen auf, die sowohl zum Senden als auch zum Übertragen serieller Nachrichrichten nötig sind. Das Format der Nachrichten wird oben in Kapitel beschrieben. Daten werden über die serielle Dateneingangsleitung (150) empfangen und werden im Eingangsschieberegister (152) rahmenweise gepuffert. Die Informationen werden dann parallel an den Eingangs-Latch- Speicher (154) übertragen und werden dort gespeichert, bis sie über die Speicherdaten-Eingangsleitungen (156) an den Speicher übertragen werden. Auf ähnliche Weise werden zu übertragende Daten von den Speicherdaten-Ausgangsleitungen (158) eingebracht, im Ausgangs-Latch-Speicher (160) gespeichert und dann an das Ausgangsschieberegister (162) übertragen und seriell über die seriellen Ausgangsleitungen übertragen und mit den Paritätsbits vom Paritätsbiterzeuger (164) kombiniert. Der Eingabeport und der Ausgabeport enthalten beide einen Adreßzeiger und einen Bytezähler. Die Adreßzeiger (166, 170) zeigen auf die Speicherplätze, auf die die Nachricht geschrieben oder von denen die Nachricht gelesen werden wird.
  • Die Eingangs- und Ausgangsbytezähler (168, 172) werden zur Spezifizierung der zu sendenden oder zu empfangenden Nachrichtenlänge verwendet. Alle diese vier Register werden vom zugehörigen Befehl initialisiert: der "Lade Adreßzeiger"-Befehl und der "Lade Bytezähler"-Befehl. Nachdem ein Nachrichtenpaket empfangen worden ist, wird der Eingangsadreßzeiger (166) um zwei Bytes hochgezählt und der Eingangsbytezähler (168) wird um zwei Bytes herabgezählt. Nachdem ein Nachrichtenpaket gesendet worden ist, wird der Ausgangsadreßzeiger (170) um zwei Bytes hochgezählt und der Ausgangsbytezähler (172) wird um zwei Bytes herabgezählt.
  • Der Steuerteil des seriellen Ports wird in Fig. 10A gezeigt. Es gibt ein Eingangssteuergerät (174) und ein Ausgangssteuergerät (178), die die Zeitabstimmung der seriellen Übertragungen steuern. Diese Steuergeräte steuern die Zeitabstimmung davon, wann das Paritätsbit ausgesendet wird und wann das Paritätsbit bei eingehenden Daten überprüft werden muß. Sie steuern auch die verschiedenen Flags. Wenn ein Paritätsfehler bei einer Eingangsnachricht festgestellt wird, wird das Paritätsfehlerflag (180) von dem Eingangssteuergerät gesetzt. Das Voll-Flag (182) wird vom Eingangssteuergerät in den Zeiten gesetzt, in denen der Eingangs-Latch-Speicher (154) eine Nachricht puffert, die noch nicht an den Speicher übertragen wurde. Das Datenverlust-Flag (184) wird vom Eingangssteuergerät gesetzt, wenn der Eingangs-Latch-Speicher eine an den Speicher zu sendende Nachricht enthält und das Eingangsschieberegister (152) das Empfangen einer zweiten Nachricht abschließt, die sich über die erste Nachricht überschreibt, bevor sie an den Speicher übertragen wird. Das Eingabefreigabe-Flag (186) ist ein Flag, das vom Benutzer sowohl gelesen als auch beschrieben werden kann, um Interrupts zu aktivieren, die auftreten, wenn der Eingabeport bereit wird, d. h., wenn die Bytezählung auf Null geht. Auf dem Ausgabeport gibt es einen Ausgabefreigabe- Flag (188), das, falls aktiviert, ein Interrupt erzeugt, wenn die Ausgabeport-Fertig-Leitung wahr wird, d. h., wenn der Bytezähler auf Null geht (wenn die Nachricht vollständig übertragen wurde). Das signalisiert dem Benutzer, daß es nötig ist, den Port mit einer neuen Nachricht zu reinitialisieren. Das Voll- Flag (190) auf dem Ausgabeportsteuergerät ist für die Zeitdauer gesetzt, in der im Ausgangs-Latch-Register Daten vorliegen, die nicht an das Ausgangsschieberegister übertragen wurden. Das Broadcast-Flag (192) wird vom Broadcast-Zählbefehl initialisiert. Wenn dieses Flag gesetzt ist zeigt es an, daß dieser bestimmte Ausgabeport zur aktuellen Broadcast-Gruppe gehört. Wenn ein Ausgabeport zur Broadcast-Gruppe gehört, dann werden alle über den Speicherdatenausgangsbus eingehenden Daten (158) zum Rundsenden aus diesem Port übertragen werden und gleichzeitig aus allen anderen Ports, deren Broadcast-Flags gesetzt sind.
  • Die Portinterrupt-Logik (194) erzeugt, falls aktiviert, Interrupts, wenn die Eingangs- oder Ausgabeports die Übertragung oder den Empfang von Nachrichten beendet haben, wie von der dem zugehörigen auf Null dekrementierten Bytezähler angezeigt wird.
  • Die Port-Speicher-Auswahlentscheidungslogik (196) führt die Funktion der Speicherzuweisungsentscheidung mit all den anderen I/O-Ports aus. Der Gewinner dieser Zuweisungsentscheidung muß erneut mit anderen Einheiten auf dem Chip in der in Kapitel 8.8 beschriebenen Speicherschnittstelleneinheit in den Entscheidungswettbewerb treten. Wenn eine Zuweisungsentscheidung erfolgreich ist und eine Speichergewährung gegeben wird, zeigt die Speichergewährungsleitung an, daß Daten entweder vom Speicherdateneingangsbus entnommen wurden, oder daß die Daten auf dem in Fig. 10B gezeigten Speicherdatenausgangsbus verfügbar sind.
  • 8.8 Speicherschnittstelle
  • Es wird nun auf Fig. 11 Bezug genommen, in der ein Blockschaltbild der in Fig. 5 gezeigten Speicherschnittstellenlogik gezeigt ist. Die Speicherschnittstellenlogik bildet eine Schnittstelle zwischen den verschiedenen internen Einheiten, die auf den Speicher zugreifen können müssen und dem Speicher selbst. Der Speichersteuerblock (200) empfängt die Speicheranforderungsleitungen von den verschiedenen internen Teilen des Chips und chipfremde Speicheranforderungen mittels des Speicheranforderungs-Pins. (Das Speicheranforderungs-Pin ermöglicht dem Intel 20286, einen Speicherzyklus eines Prozessorspeichers anzufordern; in diesem Fall führt die Speicherschnittstellenlogik die Funktion eines Speichersteuergerätes aus, wobei die RAM-Steuerleitungen vom Zeitgeber (202) zur Verfügung gestellt werden, während dem Intel 20286 momentan ermöglicht wird, Daten in den und aus dem Speicher zu übertragen.)
  • Die Speichersteuerung beurteilt die Anforderungen gemäß einem vorgegebenen Prioritätsschema und gibt Speichergewährungen an die einzelnen anfordernden Einheiten zurück, wenn diese Einheit an der Zeile ist, den Speicher zu benutzen. Die Speichersteuerung gibt dem Zeitgeber an, wann der Zugriff beginnen soll. Der Zeitgeber stellt für den speziellen RAM-Chip die präzise Sequenz der RAM-Steuerleitungen gemäß den Speicherspezifikationen zur Verfügung. Die Speichersteuerung spezifiziert auch, wann die Adresse von dem Adreßbus über den Adreß-Latch- Speicher (204) an die Adreßpins des Speicherchips übertragen werden soll. Die Speichersteuerung steuert auch die Informationsübertragung von den Datensammelregistern (206) und von den internen Bussen, an die und von denen Daten intern übertragen werden. Die Datensammelregister, (206) führen zwei Aufgaben aus. Zunächst vereinigen sie viele Stücke einer Datenübertragung, z. B. werden die Register bei einer Doppelwortübertragung die beiden einzelnen Wörter zu einem doppelten Wort zusammensammeln. Zweitens wird das Datensammelregister die Daten hinsichtlich des Speichers so ausrichten, daß wenn Daten auf einen ungeraden Speicherplatz geschrieben werden, das Datensammelregister die Daten so verschieben wird, daß sie zum Speicher ausgerichtet sind.
  • Die ECC-Prüf/Erzeugungslogik (208) wird verwendet, um das ECC während einer Schreiboperation zu erzeugen und während einer Lese-Operation auf Fehler zu überprüfen. Der ECC-Syndromdecodierer (210) arbeitet während einer Leseoperation, um die Bitposition anzuzeigen, die sich, wie von der ECC-Prüflogik festgestellt wurde, im Fehlerzustand befindet. Ein Einzelbitfehler kann vom Fehlerkorrekturcode korrigiert werden und diese Bitposition wird automatisch von der ECC-Syndromdecodierlogik korrigiert werden.
  • 8.9 Systemsteuerplatine
  • Fig. 12 ist ein detailliertes Blockschaltbild der in Fig. 1 gezeigten Systemsteuerplatine (14). Sie umfaßt eine Matrixschnittstelle (212), die in Fig. 13 ausführlicher gezeigt wird, einen 2MB-System-RAM (214), ein SMD-Plattentreiber-Steuergerät (216), eine parallele I/O-Schnittstelle (218), eine System-I/O- Schnittstelle (220), CPU und Steuerung (222), eine Hilfs-I/O- Schnittstelle (224) und SBX und EPROM (226).
  • Die Adreßpuffer (354) und die Datenpuffer (356) sind mittels der Datenleitungen und der Pufferleitungen an den lokalen RAM (352) angeschlossen. Das SMD-Steuergerät (216) ist an den lokalen Speicher (352) angeschlossen und ist außerdem zur Datenübertragung von der Platte an den Speicher an den System-RAM (214) angeschlossen.
  • 8.10 Systemmatrixschnittstelle
  • Fig. 13 ist ein detailliertes Blockschaltbild der Dual- Port-Verarbeitungsknoten und der seriellen Kommunikationsverbindungen auf der in Fig. 12 gezeigten Systemsteuerplatinen-Matrix-Schnittstelle. Die Systemsteuerplatine enthält r (r=16) Dual-Port-Verarbeitungsknoten (300), die -wie in Fig. 13 gezeigt- an die Platine angeschlossen sind.
  • Wie in Fig. 14 gezeigt, weist jeder Dual-Port-Verarbeitungsknoten einen Prozessor (350), einen lokalen Dual-Port- Speicher (352) und s (s=3) I/O-Kanäle auf. Die Kanäle sind so verbunden, daß die s (s=3) Kanäle (351) mit anderen Knoten auf der Systemsteuerplatine über das Verbindungssystem der Ordnung 1, der Ordnung 2 und der Ordnung 3, wie in Fig. 13 gezeigt, kommunizieren, um zwei Hyperkuben der Ordnung 3 zu bilden. Die 16 (r) Dual-Port-Verarbeitungsknoten auf der I/O-Platine sind folglich zu einem Hyperkubus der Ordnung 3 verbunden. Die übrigen v (v=8) seriellen I/O-Kanäle (353) kommunizieren mit Verarbeitungsknoten auf der Matrixplatine über Leitrechnerkanäle in dem in Fig. 2A gezeigten Trägerplatinen-I/O-Verbindungssystem.
  • Fig. 14 ist ein detailliertes Blockschaltbild eines der 16 Dual-Port-Verarbeitungsknoten der in Fig. 13 gezeigten Systemsteuerplatinenschnittstelle. Der Dual-Port-Verarbeitungsknoten verwendet die gleiche Schaltung mit dem integrierten NcubeTM-Prozessor wie der Matrixprozessor gemäß Fig. 4.
  • 8. 11 Systemknoten und Platinenadressierung
  • Die Systemsteuerplatinen (14) gemäß Fig. 1 verwenden die 8 I/O-Steckplätze auf der Trägerplatine. Mittels Trägerplatinenverdrahtung wird es diesen Platinen ermöglicht, auf eine Untermenge der Matrix bis zu 128 Prozessoren zuzugreifen. Jede Systemsteuerplatine (Fig. 13) hat 16 Verarbeitungsknoten (300) und jeder Knoten hat 8 von seinen I/O-Kanälen (0,1,. . .7) der Kommunikation mit der Verarbeitungsmatrix über die Matrixschnittstelle (212) gewidmet.
  • Bezugnehmend auf Fig. 1 sei jeder Prozessorplatinensteckplatz JI-J24 binär numeriert (xxxx). Es sei auch angenommen, daß die Platine in diesem Steckplatz einen Hyperkubus (xxxx:yyyyyy) enthält, wobei yyyyyy eine binäre Zahl ist, die zwischen 0 und 63 liegen kann (d. h. die ID's der Prozessoren auf Platine xxxx sind xxxxyyyyyy, wobei xxxx fest ist.) Dann stellt das folgende Diagramm die Abbildung zwischen den Knoten in der Hauptmatrix und den Knoten auf der Systemsteuerplatine dar. Diese Bits geben die I/O-Steckplatznummer an Diese Bits geben die Knotennummer auf der I/O-Platine an Diese Bits geben die Kanalnummer auf dem Knoten auf der I/O-Platine an (wenn x=1, müssen die Bits ergänzt werden)
  • Bezüglich obiger Darstellung sei folgendes bemerkt:
  • 1) Die I/O-Steckplätze 0,1,2,3 sind mit den Prozessormatrixsteckplätzen 0,1,. . .,7 verbunden und die I/O-Steckplätze 4,5,6,7 sind mit den Prozessormatrixsteckplätzen 8,9,. . ., 15 verbunden.
  • 2) Ein Knoten auf der Systemsteuerplatine ist mit einem Prozessor auf jeder der 8 Prozessormatrixplatinen verbunden, die sich auf seiner Seite der, Trägerplatine befinden. Ferner haben die Matrixknotennummern, an die er angeschlossen ist, den gleichen Wert modulo der Platinennummer. Z.B., ist Knoten 1 auf der I/O-Platine im Steckplatz 3 an Prozessoren mit den Nummern 0xxx000111 angeschlossen; bzw. Prozessor 7 (Knoten 7 auf der Matrixplatine 0), Prozessor 71 hex (Knoten 7 auf der Matrixplatine 1), usw..
  • 3) Eine gegebene Kanalnummer ist bei allen 16 Knoten auf der Systemsteuerplatine mit derselben Matrixplatine verbunden. Z.B., sind alle mit 2 numerierten Kanäle auf der Systemsteuerplatine, wenn die Systemsteuerplatine in den Steckplätzen 0,1,2,3 steckt, mit Prozessoren auf der Matrixplatine 2 verbunden oder, wenn sie in den Steckplätzen 4,5,6,7 steckt, mit Prozessoren auf der Matrixplatine 13. Indem sie mit 128 Verarbeitungsknoten verbunden ist, hat eine Systemsteuerplatine eine potentielle Bandbreite von 280 Megabytes/sec.
  • 8.12 Variablen-Bedeutungen in den Ansprüchen
  • In der folgenden Tabelle sind die Variablen für die Ansprüche in einer allgemeinen Sprache definiert. Die aktuelle Zahl für das in der Beschreibung offenbarte spezielle Ausführungsbeispiel steht in der Tabelle neben der entsprechenden Variablen. Variable Aktueller Wert Variablendefinition Anzahl der Matrixplatinen im System Anzahl der seriellen Kanäle (Leitrechnerkanäle ausgeschlossen) pro Verarbeitungsknoten. Auch Ordnung des Hyperkubus des gesamten Systems. Anzahl der Verarbeitungsknoten je Matrixplatine. Ordnung des Hyperkubus auf einer Matrixplatine Differenz zwischen der Ordnung des Hyperkubus auf einer Matrixplatine und der Ordnung des Hyperkubus des gesamten Systems; auch die Anzahl der Drähte pro Verarbeitungsknoten, die zu der Trägerplatine zu dem Zwecke der Hyperkubusverbindung geführt sind. Anzahl der Systemsteuerplatinen im System Anzahl der Dual-Port-Verarbeitungsknoten je Systemsteuerplatine. Anzahl der seriellen Kanäle pro Dual-Port-Verarbeitungsknoten, auch Ordnung des größten Hyperkubus der Dual-Port-Verarbeitungsknoten Ordnung des hyperkubus auf einer Systemsteuerplatine Differenz zwischen der Ordnung des Hyperkubus auf e iner Systemsteuerplatine und der Ordnung des Hyperkubus der Dual-Port-Verarbeitung im gesamten System; auch Anzahl der Drähte pro Dual-Port-Verarbeitungsknoten, die zur Trägerplatine zum Zwecke der Hyperkubusverbindungen geführt sind. Anzahl der Systemleitrechnerkanäle pro Dual-Port-Verarbeitungsknoten.

Claims (13)

1. Paralleles Prozessorsystem, das eine Mehrzahl erster Verarbeitungsknoten (Fig. 4) aufweist, die jeweils einen Prozessor (30; 100-114) und einen Speicher (32; 116) enthalten, wobei in dem Speicher Daten und Befehle gespeichert sind,
und bei dem jeder der Prozessoren aufweist: Ausführungsmittel (46; ,100, 102) zum Ausführen der Befehle und
mit den Ausführungsmitteln und mit dem Speicher (32; 116) verbundene Mittel (42; 114) zum Heranholen der Befehle aus dem Speicher, dadurch gekennzeichnet, daß ein Taktgeber (10) allen Verarbeitungsknoten gemeinsam zugeordnet ist, wobei jeder der Verarbeitungsknoten ferner Zwischenknoten-Kommunikationsmittel (48; 112) enthält, die mit den Ausführungsmitteln und dem Speicher verbunden sind; und daß erste Mittel mit jedem der Zwischenknoten-Kommunikationsmittel der ersten Knoten verbunden sind, um die ersten Knoten in der Struktur einer ersten Matrix (8) von Verarbeitungsknoten miteinander zu verbinden, wobei die erste Matrix eine Hyperkubus-Topologie hat;
wobei die Zwischenknoten-Kommunikationsmittel einen mit dem Taktgeber (10) verbundenen und von diesem getriebenen I/O-Kanal (Fig. 10A & B) aufweisen.
2. Prozessorsystem nach Anspruch 1, ferner gekennzeichnet durch:
ein Systemsteuergerät (14), mit den Ausführungsmitteln (46; 100, 102) verbundene Systemkommunikationsmittel für eine Systemsteuergerät-zu-Knoten- Kommunikation und
mit jedem der Systemkommunikationsmittel der ersten Knoten verbundene zweite Mittel zum Verbinden der ersten Knoten mit dem Systemsteuergerät.
3. Prozessorsystem nach Anspruch 1 oder 2, gekennzeichnet durch
eine Mehrzahl von Prozessorplatinen (1 bis k); wobei eine erste Prozessorplatine m Verarbeitungsknoten (Fig. 4) aufweist, wobei jeder der m Verarbeitungsknoten einen lokalen Speicher (32) zum Speichern von Daten und Befehlen, Mittel (42, 46) zum Heranholen und Ausführen der Befehle und p I/O-Kanäle enthält und wobei m solcher Knoten auf der ersten Platine sind;
Mittel zum Verbinden der m Knoten auf der ersten Platine zu einem Hyperkubus der Ordnung n, der 2n=m Verarbeitungsknoten aufweist;
wobei die Verbindungsmittel n der p I/O-Kanäle verwenden, um die Verbindungen zwischen den Knoten zu bewirken; und eine Trägerplatine (16);
wobei die Trägerplatine erste Mittel (15. . .I23) zum Aufnehmen der Prozessorplatinen enthält; und wobei die Trägerplatine zweite Mittel zum Verbinden der K Prozessorplatinen zu einem Hyperkubus der Ordnung P enthält, wobei K=2j, m=2n, und P=j+n ist.
4. Prozessorsystem nach Anspruch 3, wobei jeder der m Verarbeitungsknoten (Fig. 4) zusätzlich einen Systemleitrechner- Kanal (34) enthält, wobei der Systemleitrechner-Kanal an der Trägerplatine (16) verfügbar gemacht ist.
5. Prozessorsystem nach Anspruch 3 oder 4, zusätzlich aufweisend:
eine Mehrzahl von Systemsteuerplatinen (1 bis x);
wobei jede (14) der Systemsteuerplatinen r Dual-Port-Verarbeitungsknoten (300) aufweist, und wobei jeder der r Dual-Port- Verarbeitungsknoten einen Prozessor (350), einen lokalen Dual- Port-Speicher (352), eine Mehrzahl (353) von Systemleitrechner- Kanälen (1 bis v) und eine Mehrzahl (351) von I/O-Kanälen (1 bis s) enthält; und
erste Mittel zum Verbinden der r Dual-Port-Verarbeitungsknoten auf der Systemsteuerplatine zu einem Hyperkubus der Ordnung t, der 2t=r Dual-Port-Verarbeitungsknoten auf jeder Systemsteuerplatine aufweist;
wobei die Verbindungsmittel t der s I/O-Kanäle verwenden, um die Verbindungen unter diesen Knoten zu bewirken; wobei die Trägerplatine dritte Mittel (I21. . .I24) zum Aufnehmen der Systemsteuerplatinen (14) enthält;
wobei die Trägerplatine vierte Mittel zum Verbinden der x Systemsteuerplatinen zu einem Hyperkubus der Ordnung s von Dual-Port-Verarbeitungsknoten enthält, wobei x=2u, r=2t und s=t+u ist;
und wobei die v Systemleitrechner-Kanäle zur Verwendung bei der Kommunikation mit den Verarbeitungsknoten auf den Matrix- Platinen (12) an der Trägerplatine verfügbar gemacht werden.
6. Prozessorsystem nach Anspruch 1 oder 2, zusätzlich aufweisend:
eine Mehrzahl von zweiten Verarbeitungsknoten (Fig. 3; ROW 2, AK, AN), wobei jeder zweite Knoten einen Prozessor (30; 100-114) und einen Speicher (32; 116) enthält, wobei jeder der zweiten Verarbeitungsknoten aufweist:
1) Ausführungsmittel (46; 100, 102) zum Ausführen von Befehlen,
2) mit den Ausführungsmitteln und dem Speicher verbundene Logikmittel (114) zum Heranholen der Befehle aus dem Speicher,
3) mit den Ausführungsmitteln und dem Speicher verbundene Zwischenknoten-Kommunikationsmittel; und
zweite Mittel (Fig. 3), die mit jedem der Zwischenknoten- Kommunikationsmittel der zweiten Knoten verbunden sind, zum Verbinden der zweiten Knoten in der Struktur eines zweiten Arrays von Verarbeitungsknoten, wobei die zweite Matrix eine Hyperkubus-Topologie hat;
wobei die erste und die zweite Matrix jeweils von der Ordnung n sind; und
dritte Mittel (3), die mit jedem der ersten und zweiten Knoten verbunden sind, zum Verbinden der ersten Matrix und mit der zweiten Matrix, um eine Matrix der Ordnung n+1 zu bilden, von welcher die erste und die zweite Matrix eine Untermenge sind, und wobei die Matrix der Ordnung n+1 aus der ersten und der zweiten Matrix der Ordnung n gebildet ist, so daß ein paralleles Prozessorsystem strukturiert ist aus einer Anzahl von Prozessoren, die eine Potenz von zwei ist.
7. Prozessorsystem nach Anspruch 6, zusätzlich aufweisend: eine erste Anzahl von mit den Ausführungsmitteln auf jedem der Prozessoren verbundenen unidirektionalen seriellen Ausgabekanälen für einen direkten Speicherzugriff (DMA);
eine zweite Anzahl von mit jedem der Ausführungsmittel auf jedem der Prozessoren verbundenen unidirektionalen seriellen Eingabekanälen für einen direkten Speicherzugriff (DMA);
wobei jeder der DMA-Kanäle zwei Mehrbit-Nur-Schreib-Register enthält, ein Adreßzeigerregister (166, 170) für den Puffer-Ort in dem Speicher und ein Bytezählregister (168, 172), das die zum Senden oder Empfangen übriggebliebene Anzahl von Bytes anzeigt;
wobei eine erste Untermenge (34) der seriellen I/O-Kanäle für die Kommunikation mit einem Leitrechner verwendet wird;
wobei eine zweite Untermenge (36) der seriellen I/O-Kanäle zur Kommunikation innerhalb des Hyperkubus-Verbindungsnetzwerks verwendet wird;
wobei jeder der seriellen I/O-Kanäle ein Adreßzeigerregister, ein Bytezählregister, ein "Fertig"-Flag und Interruptfreigabe-Flag hat;
Mittel zum Senden von Nachrichten in Halbworteinheiten, die ein Startbit, eine Nachrichteneinheit und ein Paritätsbit haben,
wobei die Sendemittel Mittel in den Ausführungsmitteln zum Ausführen eines LPTR(Load Pointer)-Befehls mit einem ersten Operanden und einem zweiten Operanden enthalten,
wobei die LPTR-Befehls-Ausführungsmittel ferner Mittel zum Einstellen des Adreßzeigerregisters auf das niederwertige Byte der ersten Nachrichteneinheit in einem Nachrichtenpuffer in dem Speicher enthalten,
wobei der erste Operand des LPTR-Befehls die Adresse des Nachrichtenpuffers und der zweite Operand des Befehls eine ganze Zahl ist, deren Wert bestimmt, welches der Adreßregister geladen werden soll;
Mittel in den Ausführungsmitteln zum Ausführen eines LCNT(Load Count)-Befehls mit einem ersten Operanden und einem zweiten Operanden,
wobei der erste Operand des LCNT-Befehls eine ganze Zahl (der Zählwert) ist, die gleich der Anzahl der Bytes in der Nachricht ist, und der zweite Operand ein Wert ist, der anzeigt, welches der Bytezählregister geladen werden soll;
Mittel, die bei Senden jeder Halbwortnachricht in der Lage sind, das Adreßregister um zwei zu inkrementieren und das Zählregister um zwei zu dekrementieren; und,
Mittel, die unter der Bedingung, daß das Bytezählregister Null ist, in der Lage sind, die Nachrichtenübertragung zu stoppen und ein Fertig-Flag zu setzen.
8. Prozessorsystem nach Anspruch 7, zusätzlich aufweisend: Mittel zum Sicherstellen, daß die gewünschten Ausgabekanäle bereit sind;
Mittel in den Ausführungsmitteln zum Ausführen eines BPTR(Broadcast Pointer)-Befehls mit einem ersten Operanden und einen zweiten Operanden;
wobei der erste Operand des BPTR-Befehls die Adresse der Nachricht wie in dem LPTR ist,
wobei der zweite Operand dem BPTR-Befehl eine Mehrbit-Maske ist, in welcher jede Bitposition der Maske, die auf Eins gesetzt ist, das entsprechende Ausgabekanal-Adreßzeigerregister zum Laden freigibt; und,
Mittel in dem Prozessor zum Ausführen eines BCNT(Broadcast Count)-Befehls mit einem ersten Operanden und einem zweiten Operanden, wobei der erste Operand des BCNT-Befehls die Anzahl der Bytes in der Nachricht und der zweite Operand des BCNT-Befehls die Mehrbit-Maske ist.
9. Prozessorsystem nach Anspruch 6, wobei der Prozessor Mittel zum Betreiben sämtlicher durch die BPTR- und BCNT-Befehle initialisierter Ausgabeports in synchroner Weise enthält, so daß, wenn ein Ausgabeport ein Halbwort aus dem Speicher liest, alle Ausgabeports das gleiche tun, wobei sich ein einziges Halbwort-Lesen aus dem Speicher für alle Ausgabeports ergibt, um über ihre entsprechenden seriellen I/O-Leitungen auszusenden.
10. Prozessorsystem nach Anspruch 1 oder 2, gekennzeichnet durch
eine Mehrzahl von Prozessormatrix-Platinen (1 bis k) und eine Taktgeberplatine (10) zum Schaffen von Taktleitungen, wobei die Prozessormatrix-Platinen (12) m Verarbeitungsknoten aufweisen, die jeweils einen Prozessor (30), einen lokalen Speicher (32) und p I/O-Kanäle (48) enthalten, wobei es m solcher Knoten auf der Prozessormatrix-Platine gibt; und
Mittel zum Verbinden der m Knoten auf der Prozessormatrix- Platine zu einem Hyperkubus der Ordnung n, der 2n=m Verarbeitungsknoten aufweist;
wobei die Verbindungsmittel n der p Kanäle verwenden, um die Verbindungen unter den Knoten zu bewirken,
wobei eine Trägerplatine (16) aufweist:
erste Mittel (I5-I23) zum Aufnehmen der K Prozessormatrix-Platinen;
zweite Mittel zum Verbinden der K Prozessormatrix- Platinen zu einem Hyperkubus der Ordnung P, wobei n die Ordnung des Hyperkubus auf jeder der Matrix-Platinen ist und wobei K=23 und P=n+j ist;
dritte Mittel zum Aufnehmen der Taktgeberplatine (10); und
vierte Mittel zum Verbinden der Taktleitungen mit den Array-Platinen (12).
11. Prozessorsystem nach Anspruch 10, wobei die Parallelprozessormatrix zusätzlich eine Mehrzahl von Systemsteuerplatinen (1 bis x) enthält, und
wobei die Trägerplatine (16) ferner aufweist: sechste Mittel zum Aufnehmen der x Systemsteuerplatinen; und
siebte Mittel zum Verbinden der x Systemsteuerplatinen zu einem Hyperkubus der Ordnung s, wobei t die Ordnung des Hyperkubus auf jeder der Systemsteuerplatinen ist und wobei x=2u und s=t+u ist.
12. Prozessorsystem nach Anspruch 10 oder 11, wobei die Verarbeitungsknoten auf den Prozessormatrix-Platinen (12) jeweils einen Systemleitrechner-Kanal enthalten, und wobei die Systemsteuerplatinen r Dual-Port-Verarbeitungsknoten aufweisen, wobei jeder der r Dual-Port-Verarbeitungsknoten auf den Systemßteuerplatinen v Systemleitrechner-Kanäle enthält,
wobei die Trägerplatine ferner aufweist: fünfte Mittel zum Verbinden der Systemleitrechner- Kanäle auf den k Matrix-Platinen mit den Systemleitrechner- Kanälen auf den xSystemsteuerplatinen.
13. Prozessorsystem nach Anspruch 1 oder 2, dadurch gekennzeichnet, daß die erste Matrix (8) von der Ordnung n ist;
daß eine zweite Matrix (21) der Ordnung n miteinander in einer Hypuerkubus-Topologie verbundene Knoten (22) hat und mit der ersten Matrix (8) so verbunden ist, daß sie eine Matrix der Ordnung n+1 bildet;
wobei die Matrix der Ordnung n+1 aus der ersten Matrix der Ordnung n und der zweiten Matrix der Ordnung n gebildet ist, so daß ein Parallelprozessorsystem strukturiert ist mit einer Anzahl von Prozessoren, die eine Potenz von zwei ist.
DE86105879T 1985-05-06 1986-04-29 Rechnersystem mit hoher Leistung. Expired - Lifetime DE3687764T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US06/731,170 US5113523A (en) 1985-05-06 1985-05-06 High performance computer system

Publications (2)

Publication Number Publication Date
DE3687764D1 DE3687764D1 (de) 1993-03-25
DE3687764T2 true DE3687764T2 (de) 1993-10-07

Family

ID=24938359

Family Applications (1)

Application Number Title Priority Date Filing Date
DE86105879T Expired - Lifetime DE3687764T2 (de) 1985-05-06 1986-04-29 Rechnersystem mit hoher Leistung.

Country Status (3)

Country Link
US (1) US5113523A (de)
EP (1) EP0201797B1 (de)
DE (1) DE3687764T2 (de)

Families Citing this family (128)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4805091A (en) * 1985-06-04 1989-02-14 Thinking Machines Corporation Method and apparatus for interconnecting processors in a hyper-dimensional array
GB2201817A (en) * 1987-02-27 1988-09-07 Massachusetts Inst Technology Geometry-defining processors
US5050069A (en) * 1987-04-27 1991-09-17 Thinking Machines Corporation Method and apparatus for simulating m-dimension connection networks in and n-dimension network where m is less than n
GB2206428A (en) * 1987-06-15 1989-01-05 Texas Instruments Ltd Computer
WO1989004521A1 (en) * 1987-11-10 1989-05-18 Echelon Systems Multiprocessor intelligent cell for a network which provides sensing, bidirectional communications and control
FR2626091B1 (fr) * 1988-01-15 1994-05-06 Thomson Csf Calculateur de grande puissance et dispositif de calcul comportant une pluralite de calculateurs
NL8801116A (nl) * 1988-04-29 1989-11-16 Oce Nederland Bv Werkwijze en inrichting voor het converteren van omtrekgegevens naar rastergegevens.
US5072371A (en) * 1989-03-01 1991-12-10 The United States Of America As Represented By The United States Department Of Energy Method for simultaneous overlapped communications between neighboring processors in a multiple
EP0427407A3 (en) * 1989-11-03 1993-03-10 Compaq Computer Corporation Parallel port with direct memory access capabilities
US6408346B1 (en) * 1989-11-03 2002-06-18 Compaq Computer Corporation System for communicating with an external device using a parallel port with DMA capabilities and for developing a signal to indicate the availability of data
US5191657A (en) * 1989-11-09 1993-03-02 Ast Research, Inc. Microcomputer architecture utilizing an asynchronous bus between microprocessor and industry standard synchronous bus
US5280474A (en) * 1990-01-05 1994-01-18 Maspar Computer Corporation Scalable processor to processor and processor-to-I/O interconnection network and method for parallel processing arrays
DE69132300T2 (de) * 1990-03-12 2000-11-30 Hewlett-Packard Co., Palo Alto Durch Anwender festgelegter direkter Speicherzugriff mit Anwendung von virtuellen Adressen
US5367642A (en) * 1990-09-28 1994-11-22 Massachusetts Institute Of Technology System of express channels in an interconnection network that automatically bypasses local channel addressable nodes
JP2959104B2 (ja) * 1990-10-31 1999-10-06 日本電気株式会社 信号処理プロセッサ
US5828894A (en) * 1990-11-13 1998-10-27 International Business Machines Corporation Array processor having grouping of SIMD pickets
US5765011A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams
US5809292A (en) * 1990-11-13 1998-09-15 International Business Machines Corporation Floating point for simid array machine
US5815723A (en) * 1990-11-13 1998-09-29 International Business Machines Corporation Picket autonomy on a SIMD machine
US5734921A (en) * 1990-11-13 1998-03-31 International Business Machines Corporation Advanced parallel array processor computer package
US5963746A (en) * 1990-11-13 1999-10-05 International Business Machines Corporation Fully distributed processing memory element
US5588152A (en) * 1990-11-13 1996-12-24 International Business Machines Corporation Advanced parallel processor including advanced support hardware
US5708836A (en) * 1990-11-13 1998-01-13 International Business Machines Corporation SIMD/MIMD inter-processor communication
EP0485690B1 (de) * 1990-11-13 1999-05-26 International Business Machines Corporation Paralleles Assoziativprozessor-System
US5625836A (en) * 1990-11-13 1997-04-29 International Business Machines Corporation SIMD/MIMD processing memory element (PME)
US5765015A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Slide network for an array processor
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US5966528A (en) * 1990-11-13 1999-10-12 International Business Machines Corporation SIMD/MIMD array processor with vector processing
US5765012A (en) * 1990-11-13 1998-06-09 International Business Machines Corporation Controller for a SIMD/MIMD array having an instruction sequencer utilizing a canned routine library
US5963745A (en) * 1990-11-13 1999-10-05 International Business Machines Corporation APAP I/O programmable router
US5794059A (en) * 1990-11-13 1998-08-11 International Business Machines Corporation N-dimensional modified hypercube
US5617577A (en) * 1990-11-13 1997-04-01 International Business Machines Corporation Advanced parallel array processor I/O connection
US5630162A (en) * 1990-11-13 1997-05-13 International Business Machines Corporation Array processor dotted communication network based on H-DOTs
US5369773A (en) * 1991-04-26 1994-11-29 Adaptive Solutions, Inc. Neural network using virtual-zero
US5594918A (en) * 1991-05-13 1997-01-14 International Business Machines Corporation Parallel computer system providing multi-ported intelligent memory
US5224485A (en) * 1991-05-28 1993-07-06 Hewlett-Packard Company Portable data acquisition unit
US5367692A (en) * 1991-05-30 1994-11-22 Thinking Machines Corporation Parallel computer system including efficient arrangement for performing communications among processing node to effect an array transposition operation
DE69232431T2 (de) * 1991-07-12 2002-09-19 Matsushita Electric Industrial Co., Ltd. Vorrichtung zur Lösung von linearen Gleichungssystem
US5361370A (en) * 1991-10-24 1994-11-01 Intel Corporation Single-instruction multiple-data processor having dual-ported local memory architecture for simultaneous data transmission on local memory ports and global port
US5359714A (en) * 1992-01-06 1994-10-25 Nicolas Avaneas Avan computer backplane-a redundant, unidirectional bus architecture
US5452401A (en) * 1992-03-31 1995-09-19 Seiko Epson Corporation Selective power-down for high performance CPU/system
JP2642039B2 (ja) * 1992-05-22 1997-08-20 インターナショナル・ビジネス・マシーンズ・コーポレイション アレイ・プロセッサ
US5428803A (en) * 1992-07-10 1995-06-27 Cray Research, Inc. Method and apparatus for a unified parallel processing architecture
US5579527A (en) * 1992-08-05 1996-11-26 David Sarnoff Research Center Apparatus for alternately activating a multiplier and a match unit
US5581778A (en) * 1992-08-05 1996-12-03 David Sarnoff Researach Center Advanced massively parallel computer using a field of the instruction to selectively enable the profiling counter to increase its value in response to the system clock
KR100327712B1 (ko) * 1992-08-05 2002-09-09 디바 시스템즈 코포레이션 거대병렬컴퓨터장치
US5430887A (en) * 1992-10-19 1995-07-04 General Electric Company Cube-like processor array architecture
US5630173A (en) * 1992-12-21 1997-05-13 Apple Computer, Inc. Methods and apparatus for bus access arbitration of nodes organized into acyclic directed graph by cyclic token passing and alternatively propagating request to root node and grant signal to the child node
JP2875448B2 (ja) * 1993-03-17 1999-03-31 松下電器産業株式会社 データ転送装置及びマルチプロセッサシステム
US5717947A (en) * 1993-03-31 1998-02-10 Motorola, Inc. Data processing system and method thereof
EP0632375B1 (de) * 1993-06-04 1999-02-03 Hitachi, Ltd. Verfahren zu multipler Ausführung multipler-Versionprogramme und Rechnersystem dafür
US5680536A (en) * 1994-03-25 1997-10-21 Tyuluman; Samuel A. Dual motherboard computer system
US5586289A (en) * 1994-04-15 1996-12-17 David Sarnoff Research Center, Inc. Method and apparatus for accessing local storage within a parallel processing computer
US5590356A (en) * 1994-08-23 1996-12-31 Massachusetts Institute Of Technology Mesh parallel computer architecture apparatus and associated methods
US5615127A (en) * 1994-11-30 1997-03-25 International Business Machines Corporation Parallel execution of a complex task partitioned into a plurality of entities
US5664192A (en) * 1994-12-14 1997-09-02 Motorola, Inc. Method and system for accumulating values in a computing device
US5603044A (en) * 1995-02-08 1997-02-11 International Business Machines Corporation Interconnection network for a multi-nodal data processing system which exhibits incremental scalability
JPH08286932A (ja) * 1995-04-11 1996-11-01 Hitachi Ltd ジョブの並列実行制御方法
US5805890A (en) * 1995-05-15 1998-09-08 Sun Microsystems, Inc. Parallel processing system including arrangement for establishing and using sets of processing nodes in debugging environment
US5859981A (en) * 1995-07-12 1999-01-12 Super P.C., L.L.C. Method for deadlock-free message passing in MIMD systems using routers and buffers
US5710938A (en) * 1995-07-19 1998-01-20 Unisys Corporation Data processing array in which sub-arrays are established and run independently
US5675823A (en) * 1995-08-07 1997-10-07 General Electric Company Grain structured processing architecture device and a method for processing three dimensional volume element data
US5802340A (en) * 1995-08-22 1998-09-01 International Business Machines Corporation Method and system of executing speculative store instructions in a parallel processing computer system
US6449730B2 (en) 1995-10-24 2002-09-10 Seachange Technology, Inc. Loosely coupled mass storage computer cluster
US5862312A (en) 1995-10-24 1999-01-19 Seachange Technology, Inc. Loosely coupled mass storage computer cluster
US5940859A (en) * 1995-12-19 1999-08-17 Intel Corporation Emptying packed data state during execution of packed data instructions
US5903771A (en) * 1996-01-16 1999-05-11 Alacron, Inc. Scalable multi-processor architecture for SIMD and MIMD operations
US5717884A (en) * 1996-02-02 1998-02-10 Storage Technology Corporation Method and apparatus for cache management
US5774693A (en) * 1996-02-28 1998-06-30 Kaimei Electronic Corp. Multiprocessor parallel computing device for application to the execution of a numerical simulation software program
US5892941A (en) * 1997-04-29 1999-04-06 Microsoft Corporation Multiple user software debugging system
US6188874B1 (en) * 1997-06-27 2001-02-13 Lockheed Martin Corporation Control and telemetry signal communication system for geostationary satellites
US6275893B1 (en) * 1998-09-14 2001-08-14 Compaq Computer Corporation Method and apparatus for providing seamless hooking and intercepting of selected kernel and HAL exported entry points in an operating system
US6393590B1 (en) * 1998-12-22 2002-05-21 Nortel Networks Limited Method and apparatus for ensuring proper functionality of a shared memory, multiprocessor system
US20080008393A1 (en) * 1999-04-09 2008-01-10 Dave Stuttard Parallel data processing apparatus
AU3829500A (en) 1999-04-09 2000-11-14 Clearspeed Technology Limited Parallel data processing apparatus
US8171263B2 (en) 1999-04-09 2012-05-01 Rambus Inc. Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions
US8762691B2 (en) 1999-04-09 2014-06-24 Rambus Inc. Memory access consolidation for SIMD processing elements using transaction identifiers
US7526630B2 (en) * 1999-04-09 2009-04-28 Clearspeed Technology, Plc Parallel data processing apparatus
US8174530B2 (en) * 1999-04-09 2012-05-08 Rambus Inc. Parallel date processing apparatus
US20070242074A1 (en) * 1999-04-09 2007-10-18 Dave Stuttard Parallel data processing apparatus
US8169440B2 (en) 1999-04-09 2012-05-01 Rambus Inc. Parallel data processing apparatus
US7966475B2 (en) 1999-04-09 2011-06-21 Rambus Inc. Parallel data processing apparatus
US20080162875A1 (en) * 1999-04-09 2008-07-03 Dave Stuttard Parallel Data Processing Apparatus
US7802079B2 (en) 1999-04-09 2010-09-21 Clearspeed Technology Limited Parallel data processing apparatus
US20080162874A1 (en) * 1999-04-09 2008-07-03 Dave Stuttard Parallel data processing apparatus
US6973559B1 (en) * 1999-09-29 2005-12-06 Silicon Graphics, Inc. Scalable hypercube multiprocessor network for massive parallel processing
WO2001028179A2 (en) 1999-10-14 2001-04-19 Bluearc Uk Limited Apparatus and method for hardware implementation or acceleration of operating system functions
US6684343B1 (en) * 2000-04-29 2004-01-27 Hewlett-Packard Development Company, Lp. Managing operations of a computer system having a plurality of partitions
US6725317B1 (en) * 2000-04-29 2004-04-20 Hewlett-Packard Development Company, L.P. System and method for managing a computer system having a plurality of partitions
US6615281B1 (en) 2000-05-05 2003-09-02 International Business Machines Corporation Multi-node synchronization using global timing source and interrupts following anticipatory wait state
US7076633B2 (en) * 2001-03-28 2006-07-11 Swsoft Holdings, Ltd. Hosting service providing platform system and method
US6721943B2 (en) * 2001-03-30 2004-04-13 Intel Corporation Compile-time memory coalescing for dynamic arrays
US20020169941A1 (en) * 2001-05-10 2002-11-14 Eustis Mary Susan Huhn Dynamic processing method
US7356641B2 (en) * 2001-08-28 2008-04-08 International Business Machines Corporation Data management in flash memory
US20030046482A1 (en) * 2001-08-28 2003-03-06 International Business Machines Corporation Data management in flash memory
US8041735B1 (en) 2002-11-01 2011-10-18 Bluearc Uk Limited Distributed file system and method
US7457822B1 (en) 2002-11-01 2008-11-25 Bluearc Uk Limited Apparatus and method for hardware-based file system
US7263598B2 (en) * 2002-12-12 2007-08-28 Jack Robert Ambuel Deterministic real time hierarchical distributed computing system
US7509533B1 (en) * 2003-06-30 2009-03-24 Sun Microsystems, Inc. Methods and apparatus for testing functionality of processing devices by isolation and testing
US7512721B1 (en) 2004-05-25 2009-03-31 Qlogic, Corporation Method and apparatus for efficient determination of status from DMA lists
US7721282B1 (en) * 2004-12-30 2010-05-18 Panta Systems, Inc. Block-level I/O subsystem for distributed application environment management
US8332844B1 (en) 2004-12-30 2012-12-11 Emendable Assets Limited Liability Company Root image caching and indexing for block-level distributed application management
JP2008537268A (ja) * 2005-04-22 2008-09-11 アルトリックス ロジック,インク. 可変精度相互接続を具えたデータ処理エレメントの配列
US7620841B2 (en) * 2006-01-19 2009-11-17 International Business Machines Corporation Re-utilizing partially failed resources as network resources
US7882380B2 (en) * 2006-04-20 2011-02-01 Nvidia Corporation Work based clock management for display sub-system
US7937606B1 (en) 2006-05-18 2011-05-03 Nvidia Corporation Shadow unit for shadowing circuit status
US8694758B2 (en) * 2007-12-27 2014-04-08 Intel Corporation Mixing instructions with different register sizes
US20090182985A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Move Facility and Instructions Therefore
US20090182988A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Compare Relative Long Facility and Instructions Therefore
US9280480B2 (en) 2008-01-11 2016-03-08 International Business Machines Corporation Extract target cache attribute facility and instruction therefor
US7734900B2 (en) 2008-01-11 2010-06-08 International Business Machines Corporation Computer configuration virtual topology discovery and instruction therefore
US7739434B2 (en) 2008-01-11 2010-06-15 International Business Machines Corporation Performing a configuration virtual topology change and instruction therefore
US7895419B2 (en) 2008-01-11 2011-02-22 International Business Machines Corporation Rotate then operate on selected bits facility and instructions therefore
US20090182984A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Execute Relative Long Facility and Instructions Therefore
US20090182992A1 (en) * 2008-01-11 2009-07-16 International Business Machines Corporation Load Relative and Store Relative Facility and Instructions Therefore
US7870339B2 (en) * 2008-01-11 2011-01-11 International Business Machines Corporation Extract cache attribute facility and instruction therefore
TWI397060B (zh) * 2008-11-25 2013-05-21 Ind Tech Res Inst 物件導向儲存裝置之磁碟配置方法
US8804764B2 (en) 2010-12-21 2014-08-12 International Business Machines Corporation Data path for data extraction from streaming data
US8744602B2 (en) 2011-01-18 2014-06-03 Apple Inc. Fabric limiter circuits
US8861386B2 (en) * 2011-01-18 2014-10-14 Apple Inc. Write traffic shaper circuits
US20120198213A1 (en) * 2011-01-31 2012-08-02 International Business Machines Corporation Packet handler including plurality of parallel action machines
US9231892B2 (en) * 2012-07-09 2016-01-05 Vmware, Inc. Distributed virtual switch configuration and state management
US10069674B2 (en) 2013-12-12 2018-09-04 International Business Machines Corporation Monitoring file system operations between a client computer and a file server
US9875127B2 (en) 2014-08-22 2018-01-23 Nicira, Inc. Enabling uniform switch management in virtual infrastructure
US10241706B2 (en) * 2016-05-20 2019-03-26 Renesas Electronics Corporation Semiconductor device and its memory access control method
US10735541B2 (en) 2018-11-30 2020-08-04 Vmware, Inc. Distributed inline proxy
CN111181738B (zh) * 2020-01-20 2021-11-23 深圳市普威技术有限公司 一种poe供电设备和系统
US11182160B1 (en) 2020-11-24 2021-11-23 Nxp Usa, Inc. Generating source and destination addresses for repeated accelerator instruction

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4168469A (en) * 1977-10-04 1979-09-18 Ncr Corporation Digital data communication adapter
US4247892A (en) * 1978-10-12 1981-01-27 Lawrence Patrick N Arrays of machines such as computers
JPS56164464A (en) * 1980-05-21 1981-12-17 Tatsuo Nogi Parallel processing computer
US4533993A (en) * 1981-08-18 1985-08-06 National Research Development Corp. Multiple processing cell digital data processor
US4543642A (en) * 1982-01-26 1985-09-24 Hughes Aircraft Company Data Exchange Subsystem for use in a modular array processor
US4493048A (en) * 1982-02-26 1985-01-08 Carnegie-Mellon University Systolic array apparatuses for matrix computations
US4553203A (en) * 1982-09-28 1985-11-12 Trw Inc. Easily schedulable horizontal computer
US4523273A (en) * 1982-12-23 1985-06-11 Purdue Research Foundation Extra stage cube
US4644496A (en) * 1983-01-11 1987-02-17 Iowa State University Research Foundation, Inc. Apparatus, methods, and systems for computer information transfer
US4814973A (en) * 1983-05-31 1989-03-21 Hillis W Daniel Parallel processor
US4598400A (en) * 1983-05-31 1986-07-01 Thinking Machines Corporation Method and apparatus for routing message packets
US4805091A (en) * 1985-06-04 1989-02-14 Thinking Machines Corporation Method and apparatus for interconnecting processors in a hyper-dimensional array

Also Published As

Publication number Publication date
EP0201797B1 (de) 1993-02-17
US5113523A (en) 1992-05-12
DE3687764D1 (de) 1993-03-25
EP0201797A3 (en) 1988-06-01
EP0201797A2 (de) 1986-11-20

Similar Documents

Publication Publication Date Title
DE3687764T2 (de) Rechnersystem mit hoher Leistung.
DE69032614T2 (de) Verfahren zur Datenverteilung in einer Speicherplattenanordnung
DE69030861T2 (de) Bus-Master-Steuerprotokoll
DE69400871T2 (de) Objektorientiertes betriebssystem
DE69402852T2 (de) Objektorientiertes host-system
DE602004012106T2 (de) Multikanal-DMA mit gemeinsamem FIFO-Puffer
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE3689961T2 (de) Verfahren zur Verarbeitung von Unterbrechungen in einem digitalen Rechnersystem.
Rosing et al. The DINO parallel programming language
DE68913629T2 (de) Satzverriegelungsprozessor für vielfachverarbeitungsdatensystem.
DE3789175T2 (de) Programmverwaltung für mehrere zentrale Verarbeitungseinheiten.
DE69429279T2 (de) Multiprozessor-programmierbares unterbrechungskontrollersystem mit prozessor-integrierten unterbrechungskontrollern
DE69033272T2 (de) Verbundarchitektur für ein hochgradig paralleles skalar/vektor-multiprozessorsystem
US7734877B2 (en) Method and data processing system for processor-to-processor communication in a clustered multi-processor system
DE69127025T2 (de) Fehlererkennung und -beseitigung in einem Datenverarbeitungssystem
Quarterman et al. 4.2 BSD and 4.3 BSD as examples of the UNIX system
Bisiani et al. Multilanguage parallel programming of heterogeneous machines
DE69735575T2 (de) Verfahren und Vorrichtung zur Unterbrechungsverteilung in einem skalierbaren symmetrischen Mehrprozessorsystem ohne die Busbreite oder das Busprotokoll zu verändern
DE69621212T2 (de) Busfehlerverarbeiter in einem Zweifachbussystem
DE102010051476A1 (de) Addierbefehle, um drei Quelloperanden zu addieren
DE68920929T2 (de) Zeitgeberkanal mit mehreren Zeitgeberreferenzmerkmalen.
Jenkins et al. Enabling fast, noncontiguous GPU data movement in hybrid MPI+ GPU environments
US7818364B2 (en) Method and data processing system for microprocessor communication in a cluster-based multi-processor system
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE69412504T2 (de) Hardware-unterstützter zählungsänderungsbefehl

Legal Events

Date Code Title Description
8364 No opposition during term of opposition