-
GEBIET DER VORLIEGENDEN ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich allgemein auf das Gebiet der
Computersysteme, insbesondere auf Systeme mit mehreren Prozessoren.
-
BESCHREIBUNG DES STANDES DER
TECHNIK
-
Computersysteme
mit mehreren Prozessoren nach dem Stand der Technik sind in den
Druckschriften
US
2007/0067533 A1 und
US
5,978,838 A beschrieben.
-
In
modernen Computersystemen werden Prozessoren verwendet, die mehrere
Befehle aufweisen. Der Prozessor liest Befehle und Daten aus einem
Systemspeicher, der mit dem Prozessor verbunden ist, und verändert die
Befehle und/oder Daten entsprechend der Befehle. Der Systemspeicher
kann flüchtige,
aber schnell lesbare Speichervorrichtungen wie z. B. RAMs sowie
langsame, aber nicht flüchtige Speichervorrichtungen
wie z. B. Festplatten umfassen. Außerdem kann der Computer von
Vorrichtungen wie etwa einer Tastatur, einer Maus und/oder einer
Netzwerkverbindung Eingaben empfangen und Ausgaben an Vorrichtungen,
wie beispielsweise einen Monitor, einen oder mehrere Lautsprecher und/oder
einen Drucker ausgeben. In den meisten Computersystemen wird ein
spezielles Computerprogramm, das als „Betriebssystem” bezeichnet
wird, verwendet, um die Verarbeitung verschiedener Programme sowie
die Übertragung
von Daten zwischen den Komponenten des Computersystems zu steuern.
-
1a zeigt
ein schematisches Blockdiagramm eines Computersystems 100 nach
dem Stand der Technik. Das Computersystem 100 umfasst einen
Prozessor 101, einen Systemspeicher 104 und eine
oder mehrere Eingabe-/Ausgabevorrichtungen 103. Pfeile 102 zeigen
schematisch die Übertragung von
Daten zwischen dem Prozessor 101, dem Systemspeicher 104 und
der Eingabe-/Ausgabevorrichtung 103.
-
Der
Prozessor 101 umfasst mehrere Register 102, 103, 104, 105.
Daten können
aus dem Systemspeicher 104 in die Register 102 bis 105 gelesen werden
und Daten in den Registern 102 bis 105 können in
den Systemspeicher 104 geschrieben werden. Der Prozessor 101 kann
Befehle aufweisen, die dafür ausgelegt
sind, den Inhalt der Register 102 bis 105 zu verändern, sowie
Befehle, um Daten zwischen den Registern 102 bis 105 und
dem Systemspeicher 104 und/oder zwischen den Registern 102 bis 105 zu übertragen.
-
Außerdem können Befehle
vorgesehen sein, die eine Kombination solcher Aufgaben ausführen. Üblicherweise
kann der Prozessor 101 auf Daten in den Registern 102 bis 105 wesentlich
schneller zugreifen als auf Daten, die in dem Systemspeicher 104 gespeichert
sind.
-
Um
die Leistungsfähigkeit
des Computersystems 100 zu verbessern, kann es wünschenswert sein,
an Stelle eines einzelnen Prozessors 101 mehrere Prozessoren
bereitzustellen. Damit können mehrere
Verarbeitungsvorgänge
(Tasks) und/oder Threads gleichzeitig ausgeführt werden. Dies kann dabei
helfen, die Arbeitsgeschwindigkeit des Computersystems 100 zu
erhöhen.
-
In
Computersystemen nach dem Stand der Technik kann eine Erhöhung der
Anzahl der Prozessoren jedoch eine Veränderung des Betriebssystems erfordern,
was im Folgenden mit Bezug auf 1b erläutert wird. 1b zeigt
ein schematisches Flussdiagramm eines Verarbeitungsvorgangs 201,
der auf dem Prozessor 101 in dem Computersystem 100 nach
dem Stand der Technik läuft.
Der Verarbeitungsvorgang 201 umfasst mehrere Befehle 210 bis 215,
die durch den Prozessor 101 nacheinander abzuarbeiten sind.
Somit geht der Prozessor 101 vom Befehl 210 zum
Befehl 211 über
und vom Befehl 211 zum Befehl 212.
-
Während der
Verarbeitungsvorgang 201 abgearbeitet wird, kann eine Unterbrechung
oder Ausnahme auftreten, z. B. während
oder nach der Bearbeitung des Befehls 212, was in 1b schematisch durch
einen Pfeil 230 angedeutet wird. Eine Ausnahme kann im
Fall eines Fehlers während
der Verarbeitung des Befehls 212 erzeugt werden, beispielsweise im
Fall einer Teilung durch Null oder im Fall einer Fehlermeldung vom
Systemspeicher 104, wie etwa einem Seitenzugriffsfehler.
Ausnahmen können
auch ordnungsgemäß durch
Befehle des Verarbeitungsvorgangs 201 erzeugt werden, beispielsweise
durch den Befehl 212. Eine typische Anwendung einer Ausnahme,
die durch den Verarbeitungsvorgang 201 erzeugt wird, ist
ein Aufruf des Betriebssystems des Computersystems 100.
Unterbrechungen können durch
Ereignisse erzeugt werden, die von anderen Vorrichtungen als dem
Prozessor 101 stammen, beispielsweise durch eine Eingabe
in die Eingabe-/Ausgabe-vorrichtung 103 oder durch eine
Synchronisationsanforderung des Eingabe-/Ausgabe-geräts 103. Wenn
in dem Computersystem 100 Multitasking durchgeführt wird,
können
Unterbrechungen, die durch einen Zeitschalter erzeugt werden, verwendet werden,
um die verschiedenen Verarbeitungsvorgänge, die Prozesse oder Threads
sein können,
abwechselnd zu aktivieren.
-
Im
Fall einer Unterbrechung oder Ausnahme kann die Ausführung des
Verarbeitungsvorgangs 201 unterbrochen werden und eine
Unterbrechungsroutine 202, die beispielsweise Teil des
Betriebssystems sein kann, wird ausgeführt. Die Unterbrechungsroutine 202 umfasst
mehrere Befehle 220 bis 225. Diese Befehle werden
nacheinander abgearbeitet. Nach der Verarbeitung des letzten Befehls 225 der
Unterbrechungsroutine 202 wird die Ausführung des Verarbeitungsvorgangs 201 an
dem Befehl fortgesetzt, der auf den Befehl 212 folgt, an
dem die Unterbrechung auftrat, d. h., in dem obigen Beispiel, beim
Befehl 213.
-
Die
Unterbrechungsroutine 202 kann den Inhalt der Register 102 bis 105 des
Prozessors 101 verändern.
Um sicherzustellen, dass der Verarbeitungsvorgang 201 trotz
der Unterbrechung oder Ausnahme richtig funktioniert, wird nach
dem Auftreten der Unterbrechung oder Ausnahme der Inhalt der Register 102 bis 105 an
einen Speicherort in dem Systemspeicher 104 kopiert. Bevor
die Ausführung
des Verarbeitungsvorgangs 201 fortgesetzt wird, wird der Inhalt
des Speicherorts zurück
in die Register 102 bis 105 gelesen. Somit können die
Register 102 bis 105 im Wesentlichen dieselben
Daten enthalten, als wenn der Befehl 213 unmittelbar nach
dem Befehl 212 ausgeführt
würde,
wenn die Verarbeitung des Verarbeitungsvorgangs 201 durch
die Ausführung des
Befehls 213 fortgesetzt wird.
-
In
Computersystemen 100 nach dem Stand der Technik wird das
Kopieren des Inhalts der Register an den Speicherort und zurück durch
Befehle bewirkt, die in der Unterbrechungsroutine 202,
die als Teil des Betriebssystems des Computersystems 100 implementiert
ist, bereitgestellt sind. Somit können Veränderungen des Betriebssystems
erforderlich sein, falls in dem Computersystem 100 zusätzliche Prozessoren
bereitgestellt werden, um sicherzustellen, dass der Inhalt der Register
des Prozessors im Fall einer Unterbrechung oder Ausnahme, die in
einem der Prozessoren auftritt, richtig im Systemspeicher abgespeichert
und nach Beendigung der Unterbrechungsroutine zurück in die
Register gelesen wird.
-
Weitere
Veränderungen
des Betriebssystems können
erforderlich sein, um die Verarbeitung von Prozessen und Tasks auf
die einzelnen Prozessoren zu verteilen. In Computersystemen nach
dem Stand der Technik wird die Steuerung der Verarbeitung der Prozesse
und/oder Threads in den Prozessoren und die Verteilung von Programmen
und/oder Threads auf die Prozessoren vom Betriebssystem durchgeführt. Neben
dem Erfordernis, das Betriebssystem an das Vorhandensein mehrerer
Prozessoren anzupassen, kann die Steuerung der Verarbeitung der
Prozesse und/oder Threads einen relativ großen Overhead für die Erzeugung
und/oder Steuerung der Prozesse und/oder Threads erfordern. Insbesondere
kann ein erheblicher Overhead durch das Kopieren des Inhalts der
Register der Prozessoren an einen Speicherort vor dem Aufruf einer
Betriebssystemsroutine und das Zurücklesen des Inhalts des Speicherorts
in die Register nach Beendigung der Betriebssystemsroutine erzeugt
werden.
-
Ein
Nachteil des Computersystems 100 nach dem Stand der Technik
ist, dass zusätzliche
Prozessoren, die in dem Computersystem 100 bereitgestellt werden,
nicht vernünftig
ver wendet werden können, bis
die Hersteller von Betriebssystemen eine Unterstützung der zusätzlichen
Prozessoren oder sonstigen zusätzlichen
Vorrichtungen implementieren.
-
Ein
weiterer Nachteil des Computersystems 100 nach dem Stand
der Technik ist, dass ein relativ großer Overhead für die Erzeugung
und/oder Steuerung von Prozessen und/oder Threads durch das Betriebssystem
die Leistungsfähigkeit
des Computersystems 100 verringern kann, insbesondere falls
relativ feinkörniges
Multitasking und/oder Multithreading verwendet wird.
-
Ferner
kann es sogar in Computersystemen nach dem Stand der Technik, die
mehrere Prozessoren unterstützen,
wünschenswert
sein, zusätzliche Prozessoren
oder Merkmale vor dem Betriebssystem zu verstecken. Dies kann insbesondere
für zusätzliche
Hardware und/oder Prozessoren gelten, die das Betriebssystem nicht
kennt. Somit ist ein weiterer Nachteil der Computersysteme nach
dem Stand der Technik sein, dass es schwierig sein kann, zusätzliche
Ressourcen wie Prozessoren oder Hardware zu verwenden, die für das Betriebssystem
nicht sichtbar sind.
-
Es
ist deshalb eine Aufgabe der vorliegenden Erfindung, ein Computersystem
und ein Verfahren zum Betreiben eines Computersystems bereitzustellen,
die es ermöglichen,
einige oder alle der oben erwähnten
Nachteile zu überwinden
oder zu verringern.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Erfindungsgemäß wird die
Aufgabe durch ein System mit einem Hauptprozessor und mindestens
einem untergeordneten Prozessor gemäß Anspruch 1 gelöst.
-
Weiter
erfindungsgemäß wird die
Aufgabe durch ein Verfahren zum Betreiben eines Systems mit einem
Hauptprozessor und mindestens einem untergeordneten Prozessor gemäß Anspruch
8 gelöst.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Weitere
Vorteile, Aufgaben und Ausführungsformen
der vorliegenden Erfindung sind in den beigefügten Patentansprüchen definiert
und werden anhand der folgenden ausführlichen Beschreibung besser
ersichtlich, wenn diese mit Bezug auf die beigefügten Zeichnungen verwendet
wird. Es zeigen:
-
1a eine
schematische Zeichnung eines Computersystems nach dem Stand der
Technik;
-
1b ein
schematisches Flussdiagramm eines Programms und einer Unterbrechungsroutine, die
auf einem Computersystem nach dem Stand der Technik ablaufen;
-
2a eine
schematische Zeichnung eines Computersystems gemäß einer Ausführungsform der
vorliegenden Erfindung;
-
2b ein
schematisches Flussdiagramm eines Programms, das auf einem Computersystem gemäß einer
Ausführungsform
der vorliegenden Erfindung abläuft;
und
-
2c ein
schematisches Flussdiagramm eines Programms und einer Unterbrechungsroutine, die
auf einem Computersystem gemäß einer
Ausführungsform
der vorliegenden Erfindung ablaufen.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Obwohl
der vorliegende Gegenstand mit Bezug auf die in der folgenden ausführlichen
Beschreibung und in den Zeichnungen dargestellten Ausführungsformen
beschrieben wird, sollte verstanden werden, dass die folgende ausführliche
Beschreibung sowie die Zeichnungen nicht beabsichtigen, den vorliegenden
Gegenstand auf die speziellen veranschauli chenden Ausführungsformen,
die offenbart werden, einzuschränken,
sondern dass vielmehr die beschriebenen veranschaulichenden Ausführungsformen
lediglich Beispiele für
die verschiedenen Aspekte des vorliegenden Gegenstands geben, dessen Umfang
durch die beigefügten
Patentansprüche
definiert ist.
-
Gemäß einer
Ausführungsform
wird ein Computersystem bereitgestellt, das einen Hauptprozessor
und mindestens einen untergeordneten Prozessor umfasst. Während das
Computersystem in manchen Ausführungsformen
einen einzigen untergeordneten Prozessor umfassen kann, können in
anderen Ausführungsformen
mehrere untergeordnete Prozessoren bereitgestellt werden. Das Computersystem
umfasst einen parallelen Betriebsmodus, in dem Daten sowohl vom
Hauptprozessor, als auch von dem mindestens einen untergeordneten
Prozessor verarbeitet werden. In Ausführungsformen, in denen das
Computersystem mehrere untergeordnete Prozessoren aufweist, kann
im parallelen Betriebsmodus jeder der Unterprozessoren oder nur
ein Teil der Unterprozessoren gleichzeitig Befehle verarbeiten.
Somit können
im parallelen Betriebsmodus im Hauptprozessor und den Unterprozessoren
mehrere Verarbeitungsvorgänge
gleichzeitig ausgeführt
werden, um die Leistung des Computersystems zu verbessern. Der serielle
Betriebsmodus kann in manchen Ausführungsformen ein Kompatibilitätsmodus sein,
in dem das Computersystem den Funktionsumfang eines Vorgängermodells
mit nur einem einzigen Prozessor bereitstellt.
-
Ein
Zustand des Hauptprozessors umfasst mehrere Variablen, die für Inhalte
von Registern der Hauptprozessoren repräsentativ sein können. Entsprechend
kann ein Zustand von jedem der untergeordneten Prozessoren mehrere
Variablen die für
Inhalte von Registern des untergeordneten Prozessors repräsentativ
sind und/oder ein Laufstatusbit, das anzeigt, ob der Unterprozessor
gerade Befehle verarbeitet, umfassen. Sowohl im Hauptprozessor als auch
in den untergeordneten Prozessoren kann eine der mehreren Variablen
des jeweiligen Prozessors eine Rücksprungadresse
umfassen, an der der Prozessor in Abwesenheit einer Unterbrechung
oder Ausnahme die Befehlsverarbeitung fortsetzt. Beispielsweise
kann die Rücksprungadresse
in einem der Register des jeweiligen Prozessors bereitgestellt werden.
-
Das
Computersystem kann einen Variablen-Sendebefehl umfassen, der dafür ausgelegt
ist, Werte von einer oder mehreren der mehreren Variablen des Hauptprozessors
in eine oder mehrere der mehreren Variablen von einem der untergeordneten Prozessoren
zu schreiben. Somit können
Parameter eines untergeordneten Prozessors eingestellt werden, bevor
die Verarbeitung eines Threads durch den untergeordneten Prozessor
beginnt. Die Befehlsverarbeitung in jedem der untergeordneten Prozessoren kann
mithilfe eines Verzweigungsbefehls gestartet werden, der eine Identifikationsnummer
des untergeordneten Prozessors, in dem die Befehlsverarbeitung gestartet
werden soll und eine Zieladresse, an der die Befehlsverarbeitung
beginnen soll, als Argumente erhält.
Die Verarbeitung von Threads in den untergeordneten Prozessoren
kann mithilfe eines Verbindungsbefehls der untergeordneten Prozessoren
beendet werden. Wenn in einer Befehlssequenz, die von dem untergeordneten
Prozessor abgearbeitet wird, der Verbindungsbefehl des untergeordneten Prozessors
auftritt, beendet der untergeordnete Prozessor die Befehlsverarbeitung.
Für die
Synchronisation zwischen dem Hauptprozessor und einem der untergeordneten
Prozessoren kann ein Verbindungsbefehl des Hauptprozessors verwendet
werden. Der Verbindungsbefehl des Hauptprozessors wird mit der Identifikationsnummer
des Unterprozessors als Argument aufgerufen. Wenn in einer Befehlssequenz, die
von dem Hauptprozessor abgearbeitet wird, der Verbindungsbefehl
des Hauptprozessors auftritt, wartet der Hauptprozessor, bis die
Befehlsverarbeitung in dem untergeordneten Prozessor, der im Argument
des Verbindungsbefehls des Hauptprozessors angegeben wurde, beendet
ist. Das Computersystem kann ferner einen Variablen-Empfangsbefehl aufweisen,
der dafür
ausgelegt ist, Werte von einer oder mehreren der mehreren Variablen
eines der untergeordneten Prozessoren in eine oder mehrere der mehreren
Variablen des Hauptprozessors zu schreiben. Der Variablen-Empfangsbefehl
kann verwendet werden, um Ergebniswerte oder einen Zeiger auf einen
Speicherpuffer, der Ergebnisse der Ausführung des Verarbeitungsvorgangs
durch den untergeordneten Prozessor enthält, zu empfangen.
-
Somit
können
in dem Computersystem Prozesse und/oder Threads im Hauptprozessor
und in den untergeordneten Prozessoren parallel ausgefüllt werden.
Mit den oben beschriebenen Befehlen kann die Ausführung von
Verarbeitungsvorgängen
in einem oder mehreren der untergeordneten Prozessoren unabhängig von
einem Betriebssystem, das auf dem Computersystem läuft, gestartet
und gestoppt werden.
-
Das
Computersystem kann dafür
ausgelegt sein, im Fall einer Unterbrechung oder Ausnahme, die im
parallelen Betriebsmodus auftritt, mindestens einen Teil der Variablen,
die für
den Zustand des Hauptprozessors und der untergeordneten Prozessoren
repräsentativ
sind, in einem Pufferspeicher abzuspeichern und das System in den
seriellen Betriebsmodus zu schalten. insbesondere können die Variablen
der untergeordneten Prozessoren und Variablen des Hauptprozessors,
wie etwa ein Inhalt von Registern, die in einem Vorgängermodell
des Computersystems nicht vorhanden sind, abgespeichert werden.
Somit muss das Betriebssystem nicht dafür ausgelegt sein, die Variablen
des untergeordneten Prozes sors und die Variablen des Hauptprozessors, die
in einem Computersystem mit einem einzigen Prozessor nicht verwendet
werden, abzuspeichern. Somit kann das Computersystems mit einem
Vorgängermodell,
das einen einzigen Prozessor umfasst, kompatibel sein und ein Betriebssystem,
das an das Vorgängermodell
angepasst ist, kann für
das Computersystem verwendet werden.
-
Falls
die Unterbrechung oder Ausnahme in einem untergeordneten Prozessor
aufgetreten ist, kann mindestens eine der mehreren Variablen des Hauptprozessors
auf einen Wert von mindestens einer der mehreren Variablen des untergeordneten Prozessors,
in dem die Unterbrechung oder Ausnahme aufgetreten ist, gesetzt
werden. Somit können Variablen
des untergeordneten Prozessors an das Betriebssystem übergeben
werden, das Daten, die für
eine vom Betriebssystem ausgeführte
Unterbrechungsroutine relevant, vom Hauptprozessor lesen kann.
-
Das
Computersystem kann ferner einen Lese-Sprungbefehl aufweisen. Der
Lese-Sprungbefehl kann
dafür ausgelegt
sein, diejenigen Variablen der untergeordneten Prozessoren und wahlweise
des Hauptprozessors, die bei der Unterbrechung oder Ausnahme abgespeichert
wurden, aus dem Pufferspeicher zu lesen. Außerdem kann der Lese-Sprungbefehl dafür ausgelegt
sein, das Computersystem aus dem seriellen Betriebsmodus in den
parallelen Betriebsmodus zu schalten. Falls die Unterbrechung oder
Ausnahme in dem untergeordneten Prozessor aufgetreten ist, kann
der Lese-Sprungbefehl diejenigen Variablen des Hauptprozessors,
die auf Werte von Variablen des untergeordneten Prozessors gesetzt
wurden, als die Unterbrechung oder Ausnahme auftrat, in die Variablen
des untergeordneten Prozessors schreiben. Dies kann geschehen, bevor
die eigenen Variablen des Hauptprozessors aus dem Pufferspeicher
gelesen werden.
-
Im
Fall einer Unterbrechung oder Ausnahme kann die Rücksprungadresse
des Hauptprozessors durch eine Adresse des Lese-Sprungbefehls ersetzt werden.
Somit wird der Lese-Sprungbefehl
nach Beendigung der Unterbrechungsroutine automatisch aufgerufen.
Dadurch können
die Variablen des untergeordneten Prozessors und/oder des Hauptprozessors,
die in einem Computersystem mit einem einzigen Prozessor nicht vorhanden
sind, unabhängig vom
Betriebssystem gehandhabt werden. Dadurch wird eine für das Betriebssystem
transparente Verwendung des parallelen Betriebsmodus des Computersystems
ermöglicht.
Somit sind im Wesentlichen keine Anpassungen des Betriebssystems
erforderlich, um die Verwendung des parallelen Betriebsmodus des
Computersystems zu ermöglichen.
-
Weitere
Ausführungsformen
der vorliegenden Erfindung werden mit Bezug auf die 2a bis 2c beschrieben.
-
2a zeigt
eine schematische Zeichnung eines Computersystems 300 gemäß einer
Ausführungsform.
Das Computersystem 300 umfasst einen Hauptprozessor 301 und
untergeordnete Prozessoren 321, 331. Die vorliegende
Erfindung ist jedoch nicht auf Ausführungsformen beschränkt, in
denen, wie in 2a gezeigt, zwei untergeordnete
Prozessoren vorhanden sind. In anderen Ausführungsformen können drei
oder mehr untergeordnete Prozessoren vorhanden sein. In noch weiteren
Ausführungsformen
kann das Computersystem 300 einen einzigen untergeordneten
Prozessor umfassen. Ferner ist die vorliegende Erfindung nicht auf
Ausführungsformen
beschränkt,
in denen die untergeordneten Prozessoren 321, 331 Universalprozessoren sind.
In andern Ausführungsformen
können
die untergeordneten Prozessoren 321, 331 Hardware
zum Bereitstellen spezieller Funktionen (special function hardware)
umfassen.
-
Das
Computersystem 300 kann ferner einen Systemspeicher 304 und
Eingabe/Ausgabevorrichtungen 303 umfassen. Pfeile 314 bezeichnen
schematisch die Übertragung
von Daten zwischen dem Hauptprozessor 301, den untergeordneten
Prozessoren 321, 331, dem Systemspeicher 304 und
den Eingabe/Ausgabevorrichtungen 303.
-
Der
Hauptprozessor 301 umfasst mehrere Register 302–307.
In manchen Ausführungsformen der
vorigen Erfindung können
die mehreren Register 302–307 eine erste Teilmenge,
die beispielsweise die Register 302–305 enthalten kann
und eine zweite Teilmenge, die die Register 306, 307 enthalten
kann, umfassen. Die Register 302–305 der ersten Teilmenge
können
den Registern eines Prozessors in einem Computersystem nach dem
Stand der Technik entsprechen, beispielsweise den Registern 102–105 des
Prozessors 101 in dem oben mit Bezug auf die 1a und 1b beschriebenen
Computersystem 100. Der Hauptprozessor 301 kann
ferner dafür
ausgebildet sein, in einen seriellen Betriebsmodus des Computersystems 300 einen
Befehlsatz bereitzustellen, der den Befehlsatz des Prozessors 101 nach dem
Stand der Technik umfasst. Somit kann das Computersystem 300 im
seriellen Betriebssetmodus Binärcode,
der für
das Computersystem 100 nach dem Stand der Technik erstellt
wurde, ausführen.
-
Die
Register 306, 307 der zweiten Untermenge können dafür verwendet
werden, eine Datenübertragung,
die mit der parallelen Datenverarbeitung im Hauptprozessor 301 und
den untergeordneten Prozessoren 321, 331 im Zusammenhang
steht, handzuhaben, was unten genauer erläutert wird.
-
Ähnlich dem
Hauptprozessor 301 kann der erste untergeordnete Prozessor 321 mehrere
Register 322–325 umfassen
und der zweite untergeordnete Prozessor 331 kann mehrere
Register 332–335 aufweisen.
In manchen Ausführungsformen
können die
Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 der ersten
Teilmenge 302–305 der
Register des Hauptprozessors 301 entsprechen. In jedem
der Register 302–307, 322–325 und 332–335 können Variablen,
die für
den Zustand des Hauptprozessors 302, des ersten untergeordneten Prozessors 321 und
des zweiten untergeordneten Prozessors 331 repräsentativ
sind, gespeichert werden.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung können
sowohl der Hauptprozessor 301 als auch die untergeordneten
Prozessoren 321, 331 dafür ausgelegt sein, den Funktionsumfang eines
Prozessors des den Fachleuten wohl bekannten Typs x86 oder x86-64
bereitzustellen. In anderen Ausführungsformen
können
sowohl der Hauptprozessor 301 als auch die untergeordneten
Prozessoren 321, 331 dafür ausgelegt sein, den Funktionsumfang
eines Prozessors eines anderen Typs bereitzustellen. In noch weiteren
Ausführungsformen
kann der Hauptprozessor 301 dafür ausgelegt sein, den Funktionsumfang
eines anderen Prozessortyps bereitzustellen als die untergeordneten
Prozessoren 321, 331.
-
In
einer Ausführungsform
kann der Hauptprozessor 301 dafür ausgelegt sein, den Funktionsumfang
eines von einem vorhandenen Betriebssystem unterstützten Prozessortyps
bereitzustellen, beispielsweise den Funktionsumfang eines x86- oder x86-64-Prozessors
und die untergeordneten Prozessoren 321, 331 können Prozessoren
eines anderen Typs sein, der vom Betriebssystem nicht unterstützt werden
muss. Beispielsweise können
die untergeordneten Prozessoren 321, 331 eine
vereinfachte Architektur aufweisen, um eine von den untergeordneten
Prozessoren 321, 331 auf einem Chip belegte Fläche zu minimieren.
Dies kann dabei helfen, die Anzahl der untergeordneten Prozessoren 321, 331 des
Computersystems 300 zu vergrößern, um die Leistungsfähigkeit
des Computersystems 300 zu steigern. Außerdem kann eine vereinfachte
Architektur der untergeordneten Prozessoren 321, 331 eine höhere Taktfrequenz
der untergeordneten Prozessoren 321, 331 ermöglichen,
um die Arbeitsgeschwindigkeit jedes einzelnen untergeordneten Prozessors zu
vergrößern.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung können
der Hauptprozessor 301 und einer oder mehrere der untergeordneten
Prozessoren 321, 331 auf einem einzigen Chip bereitgestellt werden.
In anderen Ausführungsformen
können
sich der Hauptprozessor 301 und die untergeordneten Prozessoren 321, 331 auf
verschiedenen Chips befinden.
-
Der
Hauptprozessor 301 kann ein Indikatorbit 308 und
ein Steuerregisterbit 309 aufweisen. Das Indikatorbit 308 kann
ein nichtarchitektonisches (non-architectural) sichtbares Bit sein,
das anzeigt, ob das Computersystem 300 momentan im seriellen Betriebsmodus,
in dem Daten durch den Hauptprozessor 301 verarbeitet werden
können
oder in einem parallelen Betriebsmodus, in dem Daten sowohl durch
den Hauptprozessor 301 als auch durch einen oder mehrere
der untergeordneten Prozessoren 321, 331 verarbeitet
werden können,
arbeitet. Das Steuerregisterbit 309 kann anzeigen, ob der
parallele Betriebsmodus erlaubt ist. Wenn das Steuerregisterbit 309 auf
einen ersten Wert gesetzt ist, beispielsweise auf den Wert „EIN”, können Programme
im parallelen Betriebsmodus des Computersystems 300 laufen. Wenn
jedoch das Steuerregisterbit 309 auf einen zweiten Wert
gesetzt ist, beispielsweise auf den Wert „AUS”, kann das Computersystem 300 nur
im seriellen Betriebsmodus verwendet werden.
-
Ähnlich wie
der Hauptprozessor 301 kann jeder der untergeordneten Prozessoren 321, 331 ein Indikatorbit
und ein Steuerregisterbit aufweisen. In 2a bezeichnen
Bezugszeichen 328, 338 Indikatorbits der untergeordneten
Prozessoren 321, 331 und Bezugszeichen 329, 339 bezeichnen
Steuerregisterbits der untergeordneten Prozessoren 321, 331.
In anderen Ausführungsformen
müssen
die untergeordneten Prozessoren 321, 331 keine
Indikatorbits 328, 329 aufweisen. In solchen Ausführungsformen
kann das Steuerregisterbit 309 des Hauptprozessors 301 verwendet
werden, um anzuzeigen, dass der parallele Betriebsmodus des Computersystems 300 erlaubt
ist und das Indikatorbit 309 des Hauptprozessors 301 kann
verwendet werden, um anzuzeigen, dass sich das Computersystem 300 im parallelen
Betriebsmodus befindet.
-
Der
erste untergeordnete Prozessor 321 kann ferner ein Laufstatusbit 330 aufweisen.
Das Laufstatusbit 330 zeigt an, ob der erste untergeordnete
Prozessor 321 gerade läuft
oder ob der erste untergeordnete Prozessor 321 angehalten
ist. Beispielsweise kann ein Wert „EIN” des Laufstatusbits 330 anzeigen,
dass der erste untergeordnete Prozessor 321 gerade läuft und
ein Wert „AUS” des Laufstatusbits 330 kann
anzeigen, dass der erste untergeordnete Prozessor 321 angehalten
ist. Ähnlich dem
ersten untergeordneten Prozessor 321 kann der zweite untergeordnete
Prozessor 331 ebenfalls ein Laufstatusbit 340 aufweisen.
-
In
dem Systemspeicher 304 kann ein Pufferspeicher 313 bereitgestellt
werden. In dem Pufferspeicher 313 können im Fall einer Unterbrechung oder
Ausnahme, die auftritt, während sich
das Computersystem 300 im parallelen Betriebsmodus befindet,
der Inhalt von einigen oder allen der Register 302 bis 307 des
Hauptprozessors, der Inhalt von allen oder einigen der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und weitere
Informationen wie beispielsweise Werte der Indikatorbits 308, 328, 338,
der Steuerregisterbits 309, 329, 339 und/oder
der Laufstatusbits 330, 340 abgespeichert werden,
was unten genauer erläutert
wird. Falls in dem Computersystem 300 Multitasking durchgeführt wird,
kann für
jeden Prozess ein eigener Pufferspeicher reserviert werden.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann der Pufferspeicher 313 reserviert
werden, indem eine CPU-Treiberroutine von dem Code eines Programms,
in dem der parallele Betriebsmodus des Computersystems 300 verwendet
werden soll, aus aufgerufen wird. Die CPU-Treiberroutine kann dafür ausgelegt
sein, einen Speicherbereich mit einer Größe zu reservieren, die dafür ausreicht,
den Inhalt der Register 302–307, 322–325 und 332–335 und
wahlweise weitere Informationen abzuspeichern, was oben genauer
ausgeführt
wurde. In manchen Ausführungsformen
der vorliegenden Erfindung kann sich der Pufferspeicher 313 in
einem nicht in Seiten eingeteilten Systemspeicherbereich (non-paged pool system
memory) befinden, der durch das Betriebssystem nicht auf ein Massenspeichergerät wie beispielsweise
eine Festplatte ausgelagert wird. In manchen Computersystemen 300 kann
eine Reservierung von Speicher in dem nicht in Seiten eingeteilten
Systemspeicherbereich nur für
CPU-Treiberroutinen erlaubt sein.
-
Vorteilhafterweise
kann das Reservieren des Pufferspeichers 313 in dem nicht
in Seiten eingeteilten Systemspeicherbereich dabei helfen, sicherzustellen,
dass der Pufferspeicher 313 immer im physikalischen Speicher
bleibt und keine Seitenfehler auftreten. Dies kann es erleichtern,
den Inhalt der mehreren zweiten Register 309–312 und
wahlweise weitere Daten mit Hilfe einer unteilbaren Speicheroperation
in den Pufferspeicher 313 zu speichern bzw. aus diesem
zu lesen. Somit können
vorteilhafterweise Fehler vermieden werden, die auftreten könnten, falls eine
Unterbrechung oder Ausnahme aufträte, während Daten in den Pufferspeicher 313 geschrieben werden.
-
Die
CPU-Treiberroutine kann dafür
ausgelegt sein, eine Speicheradresse des Pufferspeichers 313 zurückzugeben.
In manchen Ausführungsformen der
vorliegenden Erfindung kann die Speicheradresse eine virtuelle Adresse
sein. Dies kann dabei helfen, alle Prozesse, die auf dem Computersystem 300 laufen,
voneinander isolieren und kann erfordern, dass für jeden Prozess eine eigene
Speicherseite verwendet wird. Wenn die Reservierung des Pufferspeichers 313 nicht
möglich
ist, beispielsweise falls in dem nicht in Seiten einge teilten Speicherbereich
kein Speicher verfügbar
ist, kann die CPU Treiberroutine einen Fehler anzeigen.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann die CPU-Treiberroutine zum Reservieren
des Pufferspeichers 313 Teil eines CPU-Treibers sein, der
von dem Anbieter des Prozessors bereitgestellt werden kann. Neben
der CPU-Treiberroutine zum Reservieren des Pufferspeichers 313 kann
eine zweite CPU-Treiberroutine zum Freigeben des Pufferspeichers 313 bereitgestellt werden.
Wie die Fachleute wissen, können CPU-Treiberroutinen während des
Hochfahrens des Betriebssystems vom Betriebssystem geladen werden
und Funktionen bereitstellen, die von Programmen, die auf den Computersystem 300 laufen,
ausgeführt
werden können.
Somit kann ein Programm, das den zweiten Betriebsmodus verwendet,
die CPU-Treiberroutinen zum Reservieren und Freigeben des Speicherpuffers 313 aufrufen.
-
Das
Computersystem 300 kann einen Aktivierungsbefehl zum Aktivieren
des parallelen Betriebsmodus des Computersystems 300 umfassen. Der
Aktivierungsbefehl erhält
als Operanden eine Adresse, beispielsweise eine virtuelle Adresse,
des Pufferspeichers 313 und eine Adresse eines Lese-Sprungbefehls.
Der Lese-Sprungbefehl wird von dem Computersystem 300 bereitgestellt.
In manchen Ausführungsformen
kann der Lese-Sprungbefehl vom
Hauptprozessor 301 bereitgestellt werden. Üblicherweise
wird der Lese-Sprungbefehl
verwendet, um den Inhalt von einigen oder allen der Register 302–307, 322–325 und 332–335 nach
Beendigung der Unterbrechungsroutine wiederherzustellen, was unten
genauer erläutert
wird. Der Lese-Sprungbefehl kann sich in einem Programm befinden,
das den parallelen Betriebsmodus verwendet, und die Adresse des
Lese-Sprungbefehls
kann ein Zeiger auf einen Speicherort des im Programm bereitgestellten
Lese-Sprungbefehls sein.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Aktivierungsbefehl aufgerufen wird.
-
Das
Computersystem 300 kann das Steuerregisterbit 309 überprüfen. Wenn
das Steuerregisterbit 309 anzeigt, das der parallele Betriebsmodus nicht
erlaubt ist, erzeugt der Aktivierungsbefehl einen Fehler wegen eines
unzulässigen
Befehls und es werden keine weiteren Schritte ausgeführt. Allenfalls kann
ein erstes der zweiten Teilmenge 306, 307 der Register 302–307 des
Hauptprozessors 301, beispielsweise das Register 306,
auf eine Adresse des Pufferspeichers 313 gesetzt werden
und ein zweites der zweiten Teilmenge 306, 307 der
Register 302–307,
beispielsweise das Register 307, kann auf die Adresse des
Lese- Sprungbefehls
gesetzt werden. In anderen Ausführungsformen
können
andere der Register 301–307 des Hauptprozessors 301 verwendet
werden, um die Adressen des Pufferspeichers 313 und des
Lese-Sprungbefehls zu speichern. Außerdem kann das Computersystem 300 das
Indikatorbit 308 und wahlweise die Indikatorbits 328, 338 der
untergeordneten Prozessoren 321, 331 auf einen
Wert setzen, der anzeigt, dass sich das Computersystem im parallelen
Betriebsmodus befindet. Anschließend kann das Computersystem 300 den
nächsten
Befehl im parallelen Betriebsmodus ausführen.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann der Aktivierungsbefehl ferner dafür ausgelegt
sein, die Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 zu löschen. Dadurch
kann eine Übertragung
von Zustandsinformationen zwischen unterschiedlichen Prozessoren
vermieden werden, was dabei helfen kann, die Sicherheit des Computersystems 300 zu
erhöhen.
-
Das
Computersystem 300 kann ferner einen Variablen-Sendebefehl
aufweisen, der dafür
ausgelegt ist, den Inhalt von einem oder mehreren der Register 302–307 des
Hauptprozessors 301 in eines oder mehrere der Register 322–325, 332–335 von
einem der untergeordneten Prozessoren 321, 331 zu schreiben.
In manchen Ausführungsformen
erhält der
Variablen-Sendebefehl als Operanden eine Identifikationsnummer des
untergeordneten Prozessors 321, 331, in dessen
Register der Inhalt geschrieben werden soll, Daten, die die Register
des Hauptprozessors 301 identifizieren, deren Inhalt an
den untergeordneten Prozessor 321, 331 geschickt
werden soll und Daten, die die Register des untergeordneten Prozessors 321, 331 identifizieren,
dessen Wert gesetzt werden soll. In einer Ausführungsform kann der Variablen-Sendebefehl
dafür ausgelegt
sein, den Inhalt von einem der Register des Hauptprozessors 301 auf
einmal an einen der untergeordneten Prozessen 321, 331 zu
schicken und die Daten, die die Register des Hauptprozessors 301 und
des jeweiligen untergeordneten Prozessors 321, 331 identifizieren, können Identifikationsnummern
der jeweiligen Register des Hauptprozessors 301 und des
untergeordneten Prozessors 321, 331 umfassen.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Variablen-Sendebefehl aufgerufen wird.
-
Das
Computersystem 300 kann das Indikatorbit 308 überprüfen. Wenn
das Indikatorbit 308 anzeigt, dass sich das Computersystem 300 nicht
im parallelen Betriebsmodus befindet, erzeugt der Variablen-Sendebefehl
einen Fehler wegen eines unzulässigen
Befehls und es werden keine weiteren Aktionen durchgeführt. Andernfalls
kann überprüft werden,
ob der Variablen-Sendebefehl vom Hauptprozessor 301 ausgeführt wird.
Wenn der Variablen-Sendebefehl
von einem der untergeordneten Prozessoren 321, 331 ausgeführt wird,
wird ein Fehler wegen eines unzulässigen Befehls erzeugt und keine
weiteren Aktionen werden durchgeführt. Andernfalls wird der Inhalt
des einen oder der mehreren Register 302–307 des
Hauptprozessors 301, die im Operand des Variablen-Sendebefehls
angegeben wurden, an die spezifizierten Register des spezifizierten
untergeordneten Prozessors 321, 331 geschrieben.
Anschließend
kann das Computersystem 300 den nächsten Befehl ausführen.
-
Das
Computersystem 300 kann ferner einen Variablen-Empfangsbefehl
aufweisen, der dafür
ausgelegt ist, den Inhalt von einem oder mehreren der Register 322–325, 332–335 eines
der untergeordneten Prozessoren 321, 331 in eines
oder mehrere der Register 302–307 des Hauptprozessors 301 zu schreiben.
Der Variablen-Sendebefehl kann als Operanden eine Identifikationsnummer
des untergeordneten Prozessors 321, 331, von dem
die Variablen zu empfangen sind, Daten, die die Register des untergeordneten
Prozessors 321, 331, deren Inhalt gelesen werden
soll, identifizieren und Daten, die die Register des Hauptprozessors 301 identifizieren,
deren Wert gesetzt werden soll, erhalten. Ähnlich wie beim Variablen-Sendebefehl
können
die Daten, die die Register identifizieren, eine Identifikationsnummer
eines Registers des untergeordneten Prozessors 321, 331 und
eine Identifikationsnummer eines Registers des Hauptprozessors 301 umfassen.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Variablen-Empfangsbefehl aufgerufen wird.
-
Das
Computersystem 300 kann das Indikatorbit 308 überprüfen. Wenn
das Indikatorbit 308 anzeigt, dass sich das Computersystem 300 nicht
im parallelen Betriebsmodus befindet, erzeugt der Variablen-Empfangsbefehl
einen Fehler wegen eines unzulässigen
Befehls und es werden keine weiteren Aktionen durchgeführt. Andernfalls
wird überprüft, ob der
Variablen-Empfangsbefehl vom Hauptprozessor 301 ausgeführt wird.
Wenn der Variablen-Empfangsbefehl
von einem der untergeordneten Prozessoren 321, 331 ausgeführt wird,
erzeugt der Variablen-Empfangsbefehl einen Fehler wegen eines unzulässigen Befehls
und es werden keine weiteren Aktionen durchgeführt. Andernfalls wird der Inhalt
des angegebenen einen oder der mehreren angegebenen Register des
angegebenen untergeordneten Prozessors 321, 331 in
das angegebene Register des Hauptprozessors 301 geschrieben.
-
Der
Variablen-Sendebefehl und der Variablen-Empfangsbefehl können verwendet
werden, um Informationen zwischen dem Hauptprozessor 301 und
den untergeordneten Prozesso ren 321, 331 auszutauschen.
Insbesondere kann der Variablen-Sendebefehl verwendet werden, um
Parameter der untergeordneten Prozessoren 321, 331 einzustellen, bevor
Threads in den untergeordneten Prozessoren 321, 331 gestartet
werden, und der Variablen-Empfangsbefehl kann verwendet werden,
um einen Ergebniswert oder einen Zeiger auf einen Speicherort, der
einen oder mehrere Ergebniswerte enthält, nach Beendigung der Verarbeitung
eines Threads abzurufen, was unten genauer erläutert wird.
-
Das
Computersystem 300 kann ferner einen Verzweigungsbefehl
aufweisen, der dafür
ausgelegt ist, die Verarbeitung von Befehlen durch einen der untergeordneten
Prozessoren 321, 331 zu starten. Der Verzweigungsbefehl
kann als Operanden eine Identifikationsnummer des untergeordneten
Prozessors 321, 331, auf dem die Befehlsverarbeitung
gestartet werden soll und eine Zieladresse, an der die Befehlsverarbeitung
beginnen soll, erhalten.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Verzweigungsbefehl aufgerufen wird.
-
Das
Computersystem 300 kann das Indikatorbit 308 überprüfen. Wenn
das Indikatorbit 308 anzeigt, dass sich das Computersystem 300 nicht
im parallelen Betriebsmodus befindet, wird ein Fehler wegen eines
unzulässigen
Befehls erzeugt und es werden keine weiteren Aktionen durchgeführt. Andernfalls
wird überprüft, ob der
Verzweigungsbefehl vom Hauptprozessor 301 ausgeführt wird.
Wenn der Verzweigungsbefehl 301 von einem der untergeordneten
Prozessoren 321, 331 ausgeführt wird, wird ein Fehler wegen
eines unzulässigen
Befehls erzeugt und es werden keine weiteren Aktionen durchgeführt. Andernfalls
wird die angegebene Zieladresse an den angegebenen untergeordneten
Prozessor 321, 331 geschickt. Der untergeordnete
Prozessor 321, 331 empfängt die Zieladresse. In dem
untergeordneten Prozessor 321, 331 wird Laufstatusbit 330, 340 auf einen
Wert gesetzt, der anzeigt, dass der untergeordnete Prozessor 321, 331 läuft und
der untergeordnete Prozessor 321, 331 beginnt
mit der Befehlsverarbeitung an der Zieladresse. Anschließend können weitere
Befehle ausgeführt
werden.
-
Wenn
der Variablen-Sendebefehl, der Variablen-Empfangsbefehl und/oder
der Verzweigungsbefehl verwendet werden, während der im Operand des Befehls
jeweils angegebene untergeordnete Prozessor 321, 331 läuft, können in
manchen Ausführungsformen
unvorhersagbare Ergebnisse erzeugt werden. In solchen Ausführungsformen
kann der Code von Programmen, die auf dem Computersystem laufen,
so ausgelegt sein, dass dies nicht passiert. In anderen Ausführungsformen
kann das Computersystem 300 dafür ausgelegt sein, einen Fehler wegen
eines unzulässigen
Befehls zu erzeugen, wenn der Variablen-Sendebefehl, der Variablen-Empfangsbefehl
oder der Verzweigungsbefehl aufgerufen wird, während der im Operand angegebene
untergeordnete Prozessor 321, 331 läuft.
-
Das
Computersystem 300 kann ferner einen Verbindungsbefehl
der untergeordneten Prozessoren (slave join instruction) umfassen,
der dafür
ausgelegt ist, die Befehlsverarbeitung durch einen der untergeordneten
Prozessoren 321, 331 zu beenden. Der Verbindungsbefehl
der untergeordneten Prozessoren kann von einem der untergeordneten
Prozessoren 321, 331 ausgeführt werden, und die Befehlsverarbeitung
kann in demjenigen untergeordneten Prozessor beendet werden, der
den Verbindungsbefehl der untergeordneten Prozessoren ausführt.
-
Genauer
gesagt kann das Computersystem 300 dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Verbindungsbefehl der untergeordneten Prozessoren aufgerufen
wird.
-
Das
Computersystem 300 kann das Indikatorbit 308 überprüfen. Wenn
das Indikatorbit 308 anzeigt, dass sich das Computersystem 300 nicht
im parallelen Betriebsmodus befindet, wird ein Fehler wegen eines
unzulässigen
Befehls erzeugt und es werden keine weiteren Aktionen durchgeführt. Andernfalls
wird überprüft, ob der
Verbindungsbefehl der untergeordneten Prozessoren von einem der
untergeordneten Prozessoren 321, 331 ausgeführt wird.
Wenn der Verbindungsbefehl der untergeordneten Prozessoren nicht
von einem untergeordneten Prozessor 321, 331 ausgeführt wird,
wird ein Fehler wegen eines unzulässigen Befehls erzeugt und
es werden keine weiteren Aktionen durchgeführt. Andernfalls wird das Laufstatusbit 330 auf
einen Wert gesetzt, der anzeigt, dass der untergeordnete Prozessor 321, 331 nicht
läuft und
die Befehlsverarbeitung in dem untergeordneten Prozessor 321, 331 kann
beendet werden.
-
Das
Computersystem 300 kann ferner einen Verbindungsbefehl
des Hauptprozessors (master join instruction) aufweisen, der dafür ausgelegt
ist, den Hauptprozessor 301 warten zu lassen, bis die Befehlsverarbeitung
in einem der untergeordneten Prozessoren 321, 331 beendet
ist. Der Verbindungsbefehl des Hauptprozessors kann als Operanden
eine Identifikationsnummer eines der untergeordneten Prozessoren 321, 331 erhalten,
auf den der Hauptprozessor 301 warten soll.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der Verbindungsbefehl des Hauptprozessors aufgerufen wird.
-
Das
Computersystem 300 kann das Indikatorbit 308 überprüfen. Wenn
das Indikatorbit 308 anzeigt, dass sich das Computersystem 300 nicht
im parallelen Betriebsmodus befindet, wird ein Fehler wegen eines
unzulässigen
Befehls erzeugt und es werden keine weiteren Aktionen durchgeführt. Andernfalls
wird überprüft, ob der
Verbindungsbefehl des Hauptprozessors von dem Hauptprozessor 301 ausgeführt wird.
Wenn der Verbindungsbefehl des Hauptprozessors nicht von dem Hauptprozessor 301 ausgeführt wird,
wird ein Fehler wegen eines unzulässigen Befehls erzeugt und
keine weiteren Aktionen werden durchgeführt. Andernfalls wird überprüft, ob das
Laufstatusbit 330, 340 des im Operanten des Verbindungsbefehls
des Hauptprozessors angegebenen untergeordneten Prozessors 321, 331 anzeigt,
dass der jeweilige untergeordnete Prozessor 321, 331 läuft. Anschließend wartet
der Hauptprozessor 301, bis das Laufstatusbit 330, 340 auf
einen Wert gesetzt wird, der anzeigt, dass der untergeordnete Prozessor 321, 331 nicht
mehr läuft.
Anschließend
kann die Befehlsverarbeitung in dem Hauptprozessor 301 mit
dem Befehl fortgesetzt werden, der auf dem Verbindungsbefehl des
Hauptprozessors folgt.
-
In
anderen Ausführungsformen
kann der Verbindungsbefehl des Hauptprozessors überprüfen, ob der jeweilige untergeordnete
Prozessor 321, 331 noch läuft oder nicht. Anschließend kann
er dieses Ergebnis in ein architektonisches sichtbares Register (architectural
visible register), beispielsweise in eines der Register 302–307 des
Hauptprozessors 307, ausgeben. Ein Programm, das auf dem
Computersystem 300 läuft,
kann anschließend
dessen Zustand verwenden, um seinen weiteren Arbeitsgang zu bestimmen.
Somit kann der Hauptprozessor 301 den Laufzustand des jeweiligen
untergeordneten Prozessors 321, 331 überprüfen und
dann die Abarbeitung des Programms fortsetzen. In solchen Ausführungsformen
können
weitere Merkmale des Verbindungsbefehls des Hauptprozessors ähnlich denen
der anderen, oben beschriebenen, Ausführungsformen sein.
-
Der
Verbindungsbefehl der untergeordneten Prozessoren und der Verbindungsbefehl
des Hauptprozessors können
verwendet werden, Threads, die im Hauptprozessor 301 und
den untergeordneten Prozessoren 321, 331 laufen,
zu synchronisieren. Im Verbindungsbefehl des Hauptprozessors kann
genau einer der untergeordneten Prozessoren 321, 331 angeben
werden. Somit können
Threads, die in verschiedenen untergeordneten Prozessoren ablaufen, während der
Ausführung
des Programms zu unterschiedlichen Zeitpunkten synchronisiert werden, ohne
dass ein Bedarf für
einen gemeinsamen Verbindungspunkt aller Threads besteht. Dadurch
kann ein höherer
Grad an Flexibilität
erzielt werden.
-
Die
vorliegende Erfindung ist nicht auf Ausführungsformen beschränkt, in
denen ein Verbindungsbefehl des Hauptprozessors und ein Verbindungsbefehl
der untergeordneten Prozessoren, die voneinander verschieden sind,
vorhanden sind. In andern Ausführungsformen
kann ein einziger Verbindungsbefehl bereitgestellt werden. Wenn
der Verbindungsbefehl aufgerufen wird, wird überprüft, ob der Verbindungsbefehl
im Hauptprozessor 301 oder in einem der untergeordneten
Prozessoren 321, 331 ausgeführt wird. Wenn der Verbindungsbefehl
in einem der untergeordneten Prozessoren 321, 331 ausgeführt wird,
werden Schritte durchgeführt,
die den oben für
den Verbindungsbefehl der untergeordneten Prozessoren beschriebenen
Schritten entsprechen. Wenn dagegen der Verbindungsbefehl vom Hauptprozessor 301 ausgeführt wird,
können
Schritte durchgeführt
werden, die denen entsprechen, die oben für den Verbindungsbefehl des
Hauptprozessors beschrieben wurden.
-
Wie
oben bereits erwähnt,
kann das Computersystem 300 ferner einen Lese-Sprungbefehl
aufweisen. Der Lese-Sprungbefehl kann verwendet werden, um den Inhalt
von einigen oder allen der Register 302–307 des Hauptprozessors 301 und
der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 nach Beendigung
einer Unterbrechungsroutine wiederherzustellen.
-
Der
Lese-Sprungbefehl kann dafür
ausgelegt sein, die Schritte des Umschaltens des Computersystems 300 in
den parallelen Betriebsmodus und des Lesens von Inhalten der Register 322–325, 332–335 und
einer Rücksprungadresse
des Hauptprozessors 301 aus dem Pufferspeicher 313 auszuführen, wenn
die Unterbrechung im Hauptprozessor 301 stattgefunden hat.
Zusätzlich
können
Inhalte der zweiten Teilmenge 306, 307 der Register 302–307 aus
dem Pufferspeicher gelesen werden.
-
Der
Lese-Sprungbefehl kann ferner dafür ausgelegt sein, die Schritte
des Umschaltens des Computersystems 300 in den parallelen
Betriebsmodus, des Lesens des Inhalts der Register 322–325, 332–335 der
Unterprozessoren 321, 331 aus dem Pufferspeicher,
des Schreibens des Inhalts von einem oder mehreren der Register 302–307 des Hauptprozessors
in Register desjenigen Unterprozessors 321, 331,
in dem die Unterbrechung oder Ausnahme auftrat und des Lesens von
Inhalten der Register 302–307 des Hauptprozessors 301 aus
dem Pufferspeicher auszuführen,
wenn die Unterbrechung oder Ausnahme in einem der untergeordneten Prozessoren 321, 331 aufgetreten
ist.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann das Computersystem 300 dafür ausgelegt
sein, die folgenden Schritte durchzuführen, wenn der Lese-Sprungbefehl aufgerufen wird.
-
Das
Computersystem 300 kann das Steuerregisterbit 309 überprüfen. Wenn
das Steuerregisterbit 309 anzeigt, dass der parallele Betriebsmodus des
Computersystems 300 nicht erlaubt ist, wird ein Fehler
wegen eines unzulässigen
Befehls erzeugt. Andernfalls kann die Adresse des Pufferspeichers 313 aus
einem der Register 302–307 des
Hauptprozessors 301 gelesen werden. In manchen Ausführungsformen
kann die Adresse des Pufferspeichers 313 von einem aus
der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 gelesen werden, beispielsweise aus
dem Register 305.
-
Danach
kann das Computersystem 300 eine Identifikationsnummer
des Prozessors, der die Unterbrechung oder Ausnahme verursacht hat,
aus dem Pufferspeicher 313 lesen. In manchen Ausführungsformen
kann der Hauptprozessor 301 die Identifikationsnummer 0
haben, der erste untergeordnete Prozessor 321 kann die
Identifikationsnummer 1 haben und der zweite untergeordnete Prozessor 331 kann
die Identifikationsnummer 2 haben. In Ausführungsformen, in denen eine
Anzahl untergeordneter Prozessoren ungleich 2 vorhanden ist, kann
jeder der untergeordneten Prozessoren eine Identifikationsnummer
haben, die eine natürliche
Zahl größer als Null
ist und der Hauptprozessor 301 kann die Identifikationsnummer
Null haben. In weiteren Ausführungsformen
kann eine andere Nummerierung der Prozessoren 301, 321, 331 verwendet
werden.
-
Das
Computersystem 300 kann dann aus der Identifikationsnummer
bestimmen, ob die Unterbrechung oder Ausnahme vom Hauptprozessor 301 oder
von einem der untergeordneten Prozessoren 321, 331 verursacht
wurde.
-
Wenn
die Unterbrechung oder Ausnahme von dem Hauptprozessor 301 verursacht
wurde, was durch eine Prozessor-Identifikationsnummer gleich Null
angezeigt werden kann, kann das Computersystem 300 den
Inhalt von jedem der Register 322–325 des ersten untergeordneten
Prozessors 321 und der Register 332–335 des
zweiten untergeordneten Prozessors 331 aus dem Pufferspeicher 313 lesen.
Außerdem
kann der Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 aus dem Pufferspeicher 313 gelesen
werden. Ferner kann eine Rücksprungadresse
des Hauptprozessors 301 aus dem Pufferspeicher gelesen
werden. In manchen Ausführungsformen
der vorliegenden Erfindung kann die Rücksprungadresse des Hauptprozessors
in eines der Register des Hauptprozessors 301 geschrieben
werden, beispielsweise in das Register 302. Ferner können die
Laufstatusbits 330, 340 der untergeordneten Prozessoren 321, 331 von
dem Pufferspeicher 313 gelesen werden. In manchen Ausführungsformen
kann der von dem Pufferspeicher 313 gelesene Inhalt der
Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 Rücksprungadressen
der untergeordneten Prozessoren 321, 331 umfassen.
In anderen Ausführungsformen
können
die Rücksprungadressen
der untergeordneten Prozessoren 321, 331 separat
aus dem Pufferspeicher 313 gelesen werden.
-
Anschließend können der
Inhalt von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301, beispielsweise der Inhalt des Registers 306 und
der Inhalt des Registers, von dem die Adresse des Pufferspeichers
gelesen wurde, beispielsweise der Inhalt des Registers 305,
vertauscht werden. Dadurch wird die Adresse des Pufferspeichers 313 in
das Register 306 geschrieben, das dasjenige Register sein
kann, in dem die Adresse des Pufferspeichers 313 durch
den Aktivierungsbefehl gespeichert wird. Ein weiteres Register aus
der zweiten Teilmenge 306, 307, das aus dem Pufferspeicher 313 gelesen
wurde, beispielsweise das Register 307, kann die Adresse
des Lese-Sprungbefehls
enthalten.
-
Anschließend kann
das Indikatorbit 308 auf einen Wert gesetzt werden, der
anzeigt, dass sich das Computersystem 300 im parallelen
Betriebsmodus befindet, beispielsweise auf dem Wert ”EIN”. Dadurch
kann das Computersystem 300 in den parallelen Betriebsmodus
geschaltet werden und in jedem der untergeordneten Prozessoren 321, 331,
in denen das Laufstatusbit 330, 340 einen aktiven
Zustand des jeweiligen untergeordneten Prozessors 321, 331 anzeigt,
kann die Befehlsverarbeitung gestartet werden. Im Hauptprozessor 301 wird
die Befehlsverarbeitung an der Rücksprungadresse
fortgesetzt, die aus dem Pufferspeicher 301 gelesen wurde.
Somit kann die Verarbeitung eines Programms, das durch die Unterbrechung
oder Ausnahme unterbrochen wurde, im parallelen Betriebsmodus des
Computersystems 300 fortgesetzt werden.
-
Wenn
die Unterbrechung oder Ausnahme von einem der untergeordneten Prozessoren 321, 331 verursacht
wurde, können
der Inhalt der Register 322–325 des ersten untergeordneten
Prozessors 321 und der Register 332–335 des
zweiten untergeordneten Prozessors 331 sowie die Laufstatusbits 330, 340 aus
dem Pufferspeicher 313 gelesen werden. Außerdem kann
der Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 aus dem Pufferspeicher 313 gelesen
werden. Das Register 307 oder, in anderen Ausführungsformen,
ein anderes aus der zweiten Teilmenge 306, 307 der
Register kann die Adresse des Lese-Sprungbefehls enthalten.
-
Daraufhin
kann der Inhalt desjenigen der Register, aus dem die Adresse des
Pufferspeichers gelesen wurde, beispielsweise der Inhalt des Registers 305,
in ein temporäres
Register geschrieben werden, das beispielsweise im Pufferspeicher 313 bereitgestellt
werden kann, und der Inhalt eines entsprechenden Registers des untergeordneten
Prozessors 321, 331, der die Unterbrechung oder
Ausnahme verursacht hat, kann aus dem Pufferspeicher 313 in
das Register 305 gelesen werden. Wenn beispielsweise die
Unterbrechung oder Ausnahme von dem ersten untergeordneten Prozessor 321 verursacht
wurde, kann der gespeicherte Inhalt des Registers 325 des ersten
untergeordneten Prozessors 321 aus dem Pufferspeicher 313 in
das Register 305 gelesen werden. Wenn die Unterbrechung
oder Ausnahme von dem zweiten untergeordneten Prozessor 331 verursacht
wurde, kann der gespeicherte Inhalt des Registers 335 des
zweiten untergeordneten Prozessors 331 aus dem Pufferspeicher 313 in
das Register 305 gelesen werden.
-
Wie
unten genauer erläutert
wird, enthalten die anderen Register 302–304 des
ersten Prozessors 301 nach Beendigung der Unterbrechungsroutine den
Inhalt der Register des untergeordneten Prozessors 321, 331,
in dem die Unterbrechung oder Ausnahme aufgetreten ist, wobei der
Inhalt von manchen der Register durch die Unterbrechungsroutine
verändert
worden sein kann. Somit enthält
die erste Teilmenge 302–305 der Register
des Hauptprozessors 301 nach dem Schreiben des Inhalts
eines entsprechenden Registers des untergeordneten Prozessors, in
dem die Unterbrechung oder Ausnahme aufgetreten ist, in das Register 305 des
Hauptprozessors 301 Daten, die repräsentativ für den Inhalt der entsprechenden
Register des untergeordneten Prozessors, in dem die Unterbrechung
oder Ausnahme aufgetreten ist, sind, wobei der Inhalt von manchen
der Register durch die Unterbrechungsroutine verändert worden sein kann.
-
Der
Inhalt der ersten Teilmenge 302–305 der Register 302–305 des
Hauptprozessors kann nun in die Register des untergeordneten Prozessors 321, 331 geschrieben
werden, in dem die Unterbrechung oder Ausnahme aufgetreten ist.
Wenn beispielsweise die Unterbrechung oder Ausnahme in dem ersten
untergeordneten Prozessor 321 aufgetreten ist, kann der
Inhalt der Register 302–305 in die Register 322–325 des
ersten untergeordneten Prozessors 321 geschrieben werden.
Wenn die Unterbrechung oder Ausnahme in dem zweiten untergeordneten Prozessor 331 aufgetreten
ist, kann der Inhalt der Register 302–305 in die Register 332–335 des
zweiten untergeordneten Prozessors 331 geschrieben werden.
Somit können Änderungen
des Registerinhalts, die durch die Unterbrechungsroutine verursacht
wurden, in die Register des untergeordneten Prozessors 321, 331 geschrieben
werden.
-
Die
vorliegende Erfindung ist nicht auf Ausführungsformen beschränkt, in
denen der Inhalt von jedem aus der ersten Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors in die Register des untergeordneten Prozessors kopiert
wird, der die Unterbrechung oder Ausnahme verursacht hat. In anderen
Ausführungsformen
kann nur der Inhalt von manchen aus der ersten Teilmenge 302–305 der
Register, deren Inhalt durch Unterbrechungsroutinen veränderbar
ist, in den untergeordneten Prozessor kopiert werden. Dadurch kann
die Ausführung
des Lese-Sprungbefehls beschleunigt werden, da nur eine kleinere
Datenmenge aus dem Hauptprozessor 301 in den untergeordneten
Prozessor 321, 331 kopiert werden muss.
-
Nach
dem Schreiben des Inhalts von manchen oder allen aus der ersten
Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301 in die Register des untergeordneten
Prozessors 321, 331, der die Unterbrechung oder
Ausnahme verursacht hat, kann der Inhalt der ersten Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301, der auch eine Rücksprungadresse des Hauptprozessors 301 umfassen
kann, aus dem Pufferspeicher 313 gelesen werden. Ferner
kann die Adresse des Pufferspeichers 313, die in dem temporären Register
abgespeichert wurde, in einen der mehreren zweiten Register des
Hauptprozessors 301 geschrieben werden, beispielsweise
in den Register 306. Somit kann ein Zustand des Hauptprozessors 301 vor der
Unterbrechung oder Ausnahme wiederhergestellt werden.
-
Anschließend können das
Indikatorbit 308 des Hauptprozessors 301 und wahlweise
auch die Indikatorbits 328, 338 der untergeordneten
Prozessoren 321, 331 auf einen Wert gesetzt werden,
der anzeigt, dass das Computersystem 300 im parallelen Betriebsmodus
betrieben wird, und die Befehlsverarbeitung kann in jedem der untergeordneten
Prozessoren 321, 331 ermöglicht werden, in dem das Laufstatusbit 330, 340 anzeigt,
dass der jeweilige untergeordnete Prozessor vor der Unterbrechung
oder Ausnahme gelaufen ist. Ferner kann die Befehlsverarbeitung
im Hauptprozessor 301 an der Rücksprungadresse des Hauptprozessors 301 beginnen.
Somit kann die Ausführung
des Programms im Computersystem 300 fortgesetzt werden.
-
Das
Computersystem 300 kann dafür ausgelegt sein, die oben
beschriebenen Schritte des Lese-Sprungbefehls als unteilbare Speicheroperation auszuführen. Somit
können
Fehler, die von einer Unterbrechung oder Ausnahme herrühren, die
während der
Ausführung
des Lese-Sprungbefehls auftritt, vorteilhafterweise vermieden werden.
-
Das
Computersystem 300 kann ferner einen Endbefehl aufweisen,
der dafür
ausgelegt ist, das Computersystem 300 aus dem parallelen
Betriebsmodus in den seriellen Betriebsmodus zu schalten. Zu diesem
Zweck kann das Computersystem 300 das Indikatorbit 308 und
wahlweise die Indikatorbits 328, 338 der untergeordneten
Prozessoren 321, 331 auf Werte setzen, die anzeigen,
dass das Computersystem 300 im seriellen Betriebsmodus
betrieben wird. In einer Ausführungsform
der vorliegenden Erfindung können
die Indikatorbits 308, 328, 338 auf den
Wert ”AUS” gesetzt
werden.
-
Das
Computersystem 300 kann ferner dafür ausgelegt sein, die Schritte
des Speicherns des Inhalts von mindestens einem Teil der Register 302–307 des
Hauptprozessors 301 und der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und wahlweise
der Werte der Laufstatusbits 330, 340 der untergeordneten
Prozessoren 321, 331 in den Pufferspeicher 313 und
des Umschaltens des Computersystems 300 in den seriellen
Betriebsmodus auszuführen,
falls eine Unterbrechung oder Ausnahme während des parallelen Betriebsmodus
auftritt. Wenn die Unterbrechung oder Ausnahme in einem der untergeordneten
Prozessoren 321, 331 auftritt, kann das Computersystem 300 zusätzlich den Inhalt
von mindestens einem der Register 302–307 auf Inhalt von
mindestens einem der Register des jeweiligen untergeordneten Prozessors
setzen. Somit können
Daten in den Registern der Prozessoren 301, 321, 331 unabhängig vom
Betriebssystem abgespeichert werden. Wenn die Unterbrechung oder
Ausnahme in einem der untergeordneten Prozessoren 321, 331 auftritt,
können
Daten, die für
eine Unterbrechungsroutine des Betriebssystems relevant sind, aus
dem untergeordneten Prozessor 321, 331 in Register
des Hauptprozessors 301 geschrieben werden. Somit können solche
Daten vom Betriebssystem gehandhabt werden, wobei das Betriebssystem das
Vorhandensein der untergeordneten Prozessoren 321, 331 nicht
berücksichtigen
muss. Insbesondere muss das Betriebssystem nicht dafür ausgelegt sein,
Daten, die für
die Ausführung
einer Unterbrechungsroutine relevant sind, von einem der untergeordneten
Prozessoren 321, 331 zu erhalten.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann das Computersystem 300 dafür ausgelegt
sein, die folgenden Schritte auszuführen, wenn eine Unterbrechung
oder Ausnahme auftritt, während
das Indikatorbit 308 auf einen Wert gesetzt ist, der Anzeigt,
dass sich das Computersystem 300 im zweiten Betriebsmodus
befindet. Die Aktionen, die von dem Computersystem 300 durchgeführt werden,
können
davon abhängen,
ob die Unterbrechung oder Ausnahme im Hauptprozessor 301 oder
in einem der untergeordneten Prozessoren 321, 331 auftritt.
-
Wenn
die Unterbrechung oder Ausnahme im Hauptprozessor 301 auftritt,
kann das Computersystem 300 die Befehlsverarbeitung in
den untergeordneten Prozessoren 321, 331 beenden.
Nachdem die Befehlsverarbeitung in jedem der untergeordneten Prozessoren 321, 331 beendet
wurde, kann das Computersystem 300 Inhalte der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 in den Pufferspeicher 313 schreiben,
dessen Adresse von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 306. Diese Register können für jeden der untergeordneten
Prozessoren 321, 331 eine Rücksprungadresse enthalten.
Zusätzlich
können
die Laufstatusbits 330, 340 der untergeordneten
Prozessoren 321, 331 in dem Pufferspeicher 313 gespeichert
werden. Die Laufstatusbits 330, 340 zeigen an,
ob jeder der untergeordneten Prozessoren 321, 331 Befehle
abgearbeitet hat, bevor die Unterbrechung oder Ausnahme aufgetreten
ist. Außerdem
kann eine Identifikationsnummer des Hauptprozessors 301 in
dem Pufferspeicher 313 gespeichert werden. Wie bereits
oben erwähnt,
kann der Hauptprozessor 301 in manchen Ausführungsformen
der vorliegenden Erfindung die Identifikationsnummer Null haben.
In solchen Ausführungsformen
kann die Identifikationsnummer Null im Pufferspeicher 313 gespeichert
werden, wenn die Unterbrechung oder Ausnahme im Hauptprozessor 301 aufgetreten
ist.
-
Anschließend kann
der Inhalt von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301, das die Adresse des Pufferspeichers 313 enthält, und
das in manchen Ausführungsformen
das Register 306 sein kann, mit dem Inhalt von einem aus
der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 vertauscht werden, beispielsweise mit
dem Inhalt des Registers 305. Das Register, dessen Inhalt mit
dem des Registers 306 vertauscht wurde, kann mit dem Register
identisch sein, aus dem der Lese-Sprungbefehl die Adresse des Pufferspeichers 313 liest.
-
Die
erste Teilmenge der Register 302–305 des Hauptprozessors 301 kann
dem Registersatz eines Prozessors nach dem Stand der Technik entsprechen.
Somit kann ein Betriebssystem, das an den Prozessor nach dem Stand
der Technik angepasst ist und das auf dem Computersystem 300 läuft, dafür ausgelegt
sein, den Inhalt der ersten Teilmenge 302–305 der
Register des Hauptprozessors 301 im Fall einer Unterbrechung
oder Ausnahme zu speichern und den Inhalt der ersten Teilmenge 302–305 der
Register nach Beendigung einer Unterbrechungsroutine, die Teil des
Betriebssystems ist, wiederherzustellen. Somit kann ein Vertauschen
der Inhalte des Registers, das die Adresse des Pufferspeichers enthält und des
einen aus der ersten Teilmenge 302–305 der Register
sicherstellen, dass die Adresse des Pufferspeichers nach Beendigung
der Unterbrechungsroutine in einem der Register 302–305 des Hauptprozessors 301 vorhanden
ist und für
den Lese-Sprungbefehl zugänglich
ist. Außerdem
kann im parallelen Betriebsmodus des Computersystems 300 jedes
der Register 302–305 aus
der ersten Teilmenge von einem Programm, das auf dem Computersystem 300 läuft, verwendet
werden, da im parallelen Betriebsmodus die Adresse des Pufferspeichers 313 in einem
aus der zweiten Teilmenge 306, 307 der Register
des Hauptprozessors gespeichert wird. Somit kann eine Kompatibilität des Computersystems 300 mit
dem Computersystem 100 nach dem Stand der Technik verbessert
werden.
-
Anschließend kann
der Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 in dem Pufferspeicher 313 gespeichert
werden. Daraufhin kann eine Rücksprungadresse
des Hauptprozessors 301 abgerufen werden. In manchen Ausführungsformen
kann die Rücksprungadresse
des Hauptprozessors 301 aus einem aus der ersten Teilmenge
der Register gelesen werden, beispielsweise aus dem Register 302.
Nach dem Speichern der Rücksprungadresse
des Hauptprozessors 301 kann die Rücksprungadresse des Hauptprozessors 301 mit
der Adresse des Lese-Sprungbefehls ersetzt werden, die von einem
aus der zweiten Teilmenge 306, 307 der Register 302–307 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 307. Somit wird nach Beendigung der Unterbrechungsroutine des
Betriebssystems der Lese-Sprungbefehl
aufgerufen, um den Inhalt der zweiten Teilmenge 306, 307 der
Register des Hauptprozessors 301, den Inhalt der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und die Laufstatusbits 330, 340 der
untergeordneten Prozessoren 321, 331, die vom
Betriebssystem nicht wiederhergestellt werden, wiederherzustellen.
Die Register der untergeordneten Prozessoren 321, 331 können für jeden
der untergeordneten Prozessoren 321, 331 eine
Rücksprungadresse
enthalten.
-
Wenn
die Unterbrechung oder Ausnahme in einem der untergeordneten Prozessoren 321, 331 auftritt,
kann die Befehlsverarbeitung im Hauptprozessor 301 sowie
in jedem der untergeordneten Prozessoren 321, 331 angehalten
werden. Nachdem die Befehlsverarbeitung in allen Prozessoren 301, 321, 331 angehalten
ist, kann das Computersystem 300 den Inhalt von jedem der
Register 302–307 des Hauptprozessors 301 in
dem Pufferspeicher 313 speichern, dessen Adresse von einem
aus der zweiten Teilmenge 306, 307 der Register 302–307 des Hauptprozessors 301 gelesen
werden kann, beispielsweise aus dem Register 306. Ferner
können der
Inhalt der Register 322–325, 332–335 von
jedem der untergeordneten Prozessoren 321, 331 sowie
die Werte der Laufstatusbits 330, 340 von jedem
der untergeordneten Prozessoren 321, 331 im Pufferspeicher 313 gespeichert
werden. Die Werte der Laufstatusbits 330, 340 zeigen
an, welche der untergeordneten Prozessoren 321, 331 zu
dem Zeitpunkt, an dem die Unterbrechung oder Ausnahme auftrat, betrieben wurden.
-
Danach
kann der Inhalt desjenigen aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301, in dem die Adresse des Pufferspeichers 313 gespeichert
ist, in ein temporäres
Register geschrieben werden, da es sich in manchen Ausführungsformen
im Pufferspeicher 313 befinden kann. Zusätzlich kann
eine Identifikationsnummer des untergeordneten Prozessors 321, 331,
in dem die Unterbrechung oder Ausnahme aufgetreten ist, im Pufferspeicher 313 gespeichert
werden. In manchen Ausführungsformen
kann der erste untergeordnete Prozessor 321 die Identifikationsnummer 1
haben und der zweite untergeordnete Prozessor 331 kann
die Identifikationsnummer 2 haben. In solchen Ausführungsformen
kann die Identifikationsnummer 1 im Pufferspeicher 313 gespeichert
werden, wenn die Unterbrechung oder Ausnahme im ersten untergeordneten
Prozessor 321 aufgetreten ist und die Identifikationsnummer
2 kann im Pufferspeicher 313 gespeichert werden, wenn die
Unterbrechung oder Ausnahme im zweiten untergeordneten Prozessor 331 aufgetreten
ist. Die Register der untergeordneten Prozessoren 321, 331 können Rücksprungadressen
für jeden
der untergeordneten Prozessoren 321, 331 enthalten.
-
Anschließend kann
der Inhalt der Register des untergeordneten Prozessors 321, 331,
in dem die Unterbrechung oder Ausnahme aufgetreten ist, in die erste
Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301 geschrieben werden. Wenn die Unterbrechung
oder Ausnahme im ersten untergeordneten Prozessor 321 aufgetreten
ist, kann der Inhalt der Register 322–325 des ersten untergeordneten
Prozessors 321 in die Register 302–305 des
Hauptprozessors 301 geschrieben werden. Entsprechend kann
der Inhalt der Register 322–325 des zweiten untergeordneten
Prozessors 331 in die Register 302–305 geschrieben
werden, wenn die Unterbrechung oder Ausnahme im zweiten untergeordneten
Prozessor 331 aufgetreten ist. Die vorliegende Erfindung
ist nicht auf Ausführungsformen
beschränkt,
in denen der Inhalt von jedem der Register 322–325 bzw. 332–335 des
ersten untergeordneten Prozessors 321 bzw. des zweiten
untergeordneten Prozessors 331 in die entsprechenden Register
des Hauptprozessors 301 geschrieben wird. In anderen Ausführungsformen
kann nur der Inhalt von manchen Registern des untergeordneten Prozessors,
deren Inhalt durch eine Unterbrechungsroutine des Betriebssystems
verändert
werden kann, in Register des Hauptprozessors 301 geschrieben
werden.
-
In
der Unterbrechungsroutine handhabt das Betriebssystem die Inhalte
der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301, die dem Registersatz eines Prozessors
nach dem Stand der Technik entsprechen können, beispielsweise den Registern 102–105 des
Prozessors 101 nach dem Stand der Technik, der oben mit
Bezug auf die 1a und 1b beschrieben
wurde. Der Inhalt der Register 302–305 kann sämtliche
Informationen über
die Unterbrechung oder Ausnahme enthalten, die für das Betriebssystem relevant
sind, einschließlich
einer Speicheradresse eines Stacks eines untergeordneten Prozessors 321, 331,
der weitere Informationen über
die Unterbrechung oder Ausnahme enthält.
-
Nach
dem Schreiben des Inhalts der Register des untergeordneten Prozessors 321, 331,
in dem die Unterbrechung oder Ausnahme aufgetreten ist, in die Register 302–305 des
Hauptprozessors 301 kann der Zustand des Hauptprozessors 301 einem
Zustand entsprechen, den man erhalten würde, wenn die Unterbrechung
oder Ausnahme im Hauptprozessor 301 aufgetreten wäre. Somit
sieht es für
das Betriebssystem aus, als wenn die Unterbrechung oder Ausnahme
im Hauptprozessor 301 aufgetreten wäre. Deshalb kann das Betriebssystem
die Unterbrechung oder Ausnahme handhaben, und zwar auch in Ausführungsformen,
in denen das Betriebssystem an ein Computersystem mit nur einem
einzigen Prozessor angepasst ist.
-
Anschließend kann
der Inhalt von einem aus der ersten Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301, beispielsweise der Inhalt des Registers 305 (dessen
Inhalt identisch mit dem eines entsprechenden Registers des untergeordneten
Prozessors 321, 331 ist, in dem die Unterbrechung
oder Ausnahme aufgetreten ist) in den Pufferpuffer 313 geschrieben
werden, dessen Adresse aus dem temporären Puffer abgerufen werden
kann, und die Adresse des Pufferspeichers 313 kann in das
Register 305 geschrieben werden. Somit kann sich die Adresse
des Pufferspeichers 313 in einem aus der ersten Teilmenge 302–305 der
Register 302–307 des Hauptprozessors 301 befinden,
das nach Beendigung der Unterbrechungsroutine durch das Betriebssystem
wiederhergestellt werden kann.
-
Anschließend kann
die Rücksprungadresse des
Hauptprozessors 301 im Pufferspeicher 313 gespeichert
werden, und die Rücksprungadresse
des Hauptprozessors 301 kann mit der Adresse des Lese-Sprungbefehls
ersetzt werden, die von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 307. Somit kann der Lese-Sprungbefehl
nach Beendigung der Unterbrechungsroutine ausgeführt werden.
-
Die
oben beschriebenen Schritte, die von dem Computersystem 300 im
Fall einer Unterbrechung oder Ausnahme, die während des parallelen Betriebsmodus
des Computersystems 300 auftritt, ausgeführt werden,
können
als unteilbare Speicheroperation ausgeführt werden. Wie die Fachleute
wissen, kann so das Auftreten einer Unterbrechung oder Ausnahme,
während
das Computersystem 300 die Schritte durchführt, vermieden
werden.
-
Nach
dem Ausführen
der oben beschriebenen Schritte kann das Computersystem 300 unabhängig davon
ob die Unterbrechung oder Ausnahme im Hauptprozessor 301 oder
in einem der untergeordneten Prozessoren 321, 331 aufgetreten
ist, das Indikatorbit 308 des Hauptprozessors 301 auf
einen Wert setzen, der anzeigt, dass sich das Computersystem 300 im
seriellen Betriebsmodus befindet, beispielsweise auf dem Wert ”AUS”. Derart
kann das Computersystem 300 in den seriellen Betriebsmodus geschaltet
werden.
-
Daraufhin
kann eine Unterbrechungsroutine des Betriebssystems ausgeführt werden.
-
Im
Folgenden wird der Betrieb des Computersystems 300 mit
Bezug auf 2b beschrieben, die ein schematisches
Flussdiagramm eines Programms 400 zeigt, das auf dem Computersystem 300 abläuft, und
mit Bezug auf 2c, die schematisches Flussdiagramm
des Programms 400 und einer Unterbrechungsroutine 502 zeigt.
-
Der
Hauptprozessor 301 und die untergeordneten Prozessoren 321, 331 können identifiziert
werden, bevor das Betriebssystem des Computersystems 300 geladen
wird. In manchen Ausführungsformen
kann die Zuordnung eines Prozessors als Hauptprozessor 301 oder
als einer der untergeordneten Prozessoren 321, 331 in
durch die Hardware geschehen. In solchen Ausführungsformen kann die Zuordnung
als der Hauptprozessor 301 oder einer der untergeordneten
Prozessoren 321, 331 während der Lebenszeit des Computersystems 300 konstant bleiben.
In anderen Ausführungsformen
kann die Zuordnung als Hauptprozessor 301 oder als einer
der untergeordneten Prozessoren 321, 331 mit Hilfe
von Software bewirkt werden. Beispielsweise können der Hauptprozessor 301 und
die untergeordneten Prozessen 321, 331 durch eine
basic input/output Software (BIOS) des Computersystems 300 identifiziert werden.
In solchen Ausführungsformen
kann die Zuordnung der Prozessoren durch eine Veränderung von
BIOS Einstellungen des Computersystems 300 geändert werden.
-
Nach
dem Identifizieren des Hauptprozessors 301 und der untergeordneten
Prozessoren 321, 331 kann das Betriebssystem des
Computersystems 300 geladen werden. Wenn das Betriebssystem hochgefahren
ist, kann sich das Computersystem 300 im seriellen Be triebsmodus
befinden. Somit kann der Hauptprozessor 301 den Funktionsumfang
eines Computerprozessors nach dem Stand der Technik bereitstellen,
beispielsweise den Funktionsumfang des Prozessors 101 in
dem oben mit Bezug auf die 1a und 1b beschriebenen
Computersystem 100. Somit kann das Computersystem 300 mit
dem Betriebssystem zusammenarbeiten, das in manchen Ausführungsformen
an das Computersystem 100 nach dem Stand der Technik angepasst
sein kann.
-
Sobald
das Betriebssystem auf dem Computersystem 300 läuft, kann
das Programm 400 gestartet werden.
-
In
einem Schritt 401 des Programms 400 kann der Pufferspeicher 313 durch
Aufrufen einer für diesen
Zweck bereitgestellten CPU-Treiberroutine in dem Systemspeicher 304 reserviert
werden. Daraufhin kann in Schritt 402 der Aktivierungsbefehl
ausgeführt
werden, um den parallelen Betriebsmodus des Computersystems 300 zu
aktivieren und in Schritt 403 kann Stack-Speicher für Threads
des Programms, die von den untergeordneten Prozessoren 321, 331 auszuführen sind,
reserviert werden. Zum Reservieren des Stack-Speichers können den
Fachleuten wohlbekannte Speicherreservierungstechniken verwendet
werden.
-
In
Schritt 404 können
mehrere erste Befehle ausgeführt
werden. Die mehreren ersten Befehle können von dem Hauptprozessor 301 seriell
ausgeführt
werden. Da der Hauptprozessor 301 den Befehlssatz eines
Prozessors nach dem Stand der Technik, beispielsweise des Prozessors 101,
der oben mit Bezug auf die 1a und 1b beschrieben
wurde, bereitstellen kann, können
die mehreren ersten Befehle einen Code umfassen, der auch von dem
Prozessor nach dem Stand der Technik ausgeführt werden kann. Somit können die
mehreren ersten Befehle mit Hilfe eines Compilers erzeugt werden,
der dafür
ausgelegt ist, Code für
den Prozessor 101 nach dem Stand der Technik bereitzustellen.
Somit kann in das Programm 400 Code aus existierenden Bibliotheken
aufgenommen werden.
-
In
Schritt 405 kann der Variablen-Sendebefehl einmal oder
mehrmals aufgerufen werden, um Daten an die Register 322–325 des
ersten untergeordneten Prozessors 321 zu senden. Somit
kann der erste untergeordnete Prozessor 321 für das Ausführen eines
Threads des Programms 400 vorbereitet werden. In Schritt 407 kann
der Variablen-Sendebefehl dafür
verwendet werden, Daten an die Register 332 bis 335 des
zweiten untergeordneten Prozessors 331 zu senden, um den
zweiten untergeordneten Prozessor für die Ausführung eines weiteren Threads des
Programms 400 vorzubereiten. Die vorliegende Erfindung
ist nicht auf Ausführungsformen
beschränkt,
in denen zuerst Daten an die Register 322–325 des
ersten untergeordneten Prozessors gesandt werden und anschließend Daten
an den zweiten untergeordneten Prozessor 331 gesandt werden. In
anderen Ausführungsformen
können
Daten an die Register 332–335 des zweiten untergeordneten
Prozessors 331 gesandt werden, bevor Daten an die Register 322–325 des
ersten untergeordneten Prozessors 321 gesandt werden.
-
In
Schritt 409 kann der Verzweigungsbefehl ausgeführt werden,
um die Befehlsverarbeitung im ersten untergeordneten Prozessor 321 zu
starten. Somit können
in Schritt 410 mehrere zweite Befehle durch den ersten
untergeordneten Prozessor 321 ausgeführt werden. In Schritt 411 kann
der Verzweigungsbefehl verwendet werden, um die Befehlsverarbeitung
im zweiten untergeordneten Prozessor 331 zu starten. Somit
kann der zweite untergeordneten Prozessor 331 in Schritt 412 mehrere
dritte Befehle ausführen.
Daraufhin kann der Hauptprozessor 301 mehrere vierte Befehle
ausführen.
Die mehreren zweiten Befehle, die mehreren dritten Befehle und die
mehreren vierten Befehle können
von dem Computersystem 300 gleichzeitig ausgeführt werden,
wobei die Abarbeitung der mehreren zweiten Befehle, die Abarbeitung
der mehreren dritten Befehle und die Abarbeitung der mehreren vierten
Befehle unterschiedliche Threads des Programms 400 bilden.
Somit kann die Arbeitsgeschwindigkeit des Programms 400 im
Vergleich zu dem Computersystem 100 nach dem Stand der
Technik, das oben mit Bezug auf die 1a und 1b beschrieben
wurde, vergrößert werden.
-
In
Ausführungsformen
der vorliegenden Erfindung, in denen sowohl der Hauptprozessor 301 als auch
die untergeordneten Prozessoren 321, 331 dafür ausgelegt
sind, den Funktionsumfang eines bestimmten Prozessortyps bereitzustellen,
beispielsweise den Funktionsumfang des Prozessors 101 nach
dem Stand der Technik, der oben mit Bezug auf die 1a und 1b beschrieben
wurde, können die
mehreren zweiten Befehle, die mehreren dritten Befehle und die mehreren
vierten Befehle Code umfassen, der für die Ausführung in dem jeweiligen Prozessortyp
geeignet ist. Beispielsweise können
die mehreren zweiten Befehle, die mehreren dritten Befehle und die
mehreren vierten Befehle Code enthalten, der zur Ausführung in
einem Prozessor des Typs x86 oder x86-64 geeignet ist.
-
In
anderen Ausführungsformen,
in denen die untergeordneten Prozessoren 321, 331 Prozessoren eines
anderen Typs als der Hauptprozessor 301 sind, können die
mehreren zweiten Befehle und die mehreren dritten Befehle Code enthalten,
der speziell für die
Ausführung
in den untergeordneten Prozessoren 321, 331 ausgelegt
ist, während
die mehreren vierten Befehle Code enthalten können, der speziell für die Ausführung im
Hauptprozessor 301 ausgelegt ist.
-
Nach
Beendigung des Threads, der die mehreren zweiten Befehle umfasst,
kann der erste untergeordnete Prozessor 321 den Verbindungsbefehl
der untergeordneten Prozessoren ausführen, um die Befehlsverarbeitung
im ersten untergeordneten Prozessor 321 zu beenden (Schritt 415).
Zu diesem Zweck kann der Verbindungsbefehl für die untergeordneten Prozessoren
als letzter Befehl der mehreren zweiten Befehle bereitgestellt werden.
Entsprechend kann der Verbindungsbefehl für die untergeordneten Prozessoren
auch als letzter Befehl der mehreren dritten Befehle bereitgestellt
werden, so dass die Befehlsverarbeitung im zweiten untergeordneten
Prozessor 331 nach der Abarbeitung der mehreren dritten
Befehle beendet wird (Schritt 423).
-
Nach
Beendigung der Abarbeitung der mehreren vierten Befehle kann der
Hauptprozessor 301 in Schritt 414 den Verbindungsbefehl
des Hauptprozessors ausführen,
um zu warten, bis der erste untergeordnete Prozessor 321 mit
der Arbeitung der mehreren zweiten Befehle fertig ist. Anschließend kann der
Verbindungsbefehl des Hauptprozessors in Schritt 416 nochmals
vom Hauptprozessor 301 ausgeführt werden, um solange zu warten,
bis der zweite untergeordnete Prozessor 331 die Abarbeitung
der mehreren dritten Befehle beendet hat.
-
Daraufhin
kann der Hauptprozessor 301 in den Schritten 417, 419 den
Variablen-Empfangsbefehl
ausführen,
um Ergebnisse der Ausführung
der durch die mehreren zweiten Befehle und die mehreren dritten
Befehle bereitgestellten Threads von dem ersten untergeordneten
Prozessor 321 bzw. dem zweiten untergeordneten Prozessor 331 zu
lesen. In 2b wird das Bereitstellen des
Inhalts der Register 322–325 durch den ersten
untergeordneten Prozessor 321 durch das Bezugszeichen 418 bezeichnet
und das Bereitstellen des Inhalts der Register 332–335 durch
den zweiten untergeordneten Prozessor 331 wird durch das
Bezugszeichen 420 bezeichnet.
-
Anschließend kann
der Hauptprozessor 421 mehrere fünfte Befehle seriell abarbeiten
(Schritt 421). Ähnlich
wie die mehreren ersten Befehle, die im Schritt 404 ausgeführt werden,
können
die mehreren fünften
Befehle Code umfassen, der dafür
ausgelegt ist, in einem Prozessor nach dem Stand der Technik wie
etwa dem oben mit Bezug auf die 1a und 1b beschriebenen
Prozessor 101 ausgeführt
zu werden, dessen Funktionsumfang durch den Hauptprozessor 301 bereitgestellt
wird. Somit können
die mehreren fünften
Befehle Code enthalten, der von einem Compiler erzeugt wurde, der
dafür ausgelegt
ist, Code für
den Prozessor 101 nach dem Stand der Technik bereitzustellen.
-
Vor
der Beendigung der Ausführung
des Programms 400 kann der Hauptprozessor 301 in
Schritt 422 den Endbefehl ausführen, um das Computersystem 300 in
den seriellen Betriebsmodus zu schalten. Außerdem kann der Pufferspeicher 313 freigegeben werden,
bevor die Abarbeitung des Programms 400 beendet wird, was
dadurch geschehen kann, dass eine im Computersystem 300 bereitgestellte CPU-Treiberroutine
aufgerufen wird.
-
2c zeigt
ein schematisches Flussdiagramm des Programms 400 und der
Unterbrechungsroutine 502, die im Fall einer Unterbrechung oder
Ausnahme ausgeführt
werden kann, die auftritt, während
die mehreren zweiten Befehle, die mehreren dritten Befehle und die
mehreren vierten Befehle in den untergeordneten Prozessoren 321, 331 bzw. dem
Hauptprozessor 331 ausgeführt werden.
-
In 2c bezeichnen
die Bezugszeichen 510, 511, 512 Befehle
aus den mehreren vierten Befehlen, die von dem Hauptprozessor 301 ausgeführt werden.
Die Bezugszeichen 510', 511', 512' bezeichnen
Befehle aus den mehreren zweiten Befehlen, die von dem ersten untergeordneten
Prozessor 321 ausgeführt
werden und die Bezugszeichen 510'', 511'' und 512'' bezeichnen
Befehle aus den mehreren dritten Befehlen, die von dem zweiten untergeordneten Prozessor 331 verarbeitet
werden.
-
An
einem Zeitpunkt, an dem die Befehle 512, 512', 512'' im Hauptprozessor 301 bzw.
in den untergeordneten Prozessoren 321, 331 ausgeführt werden,
kann eine Unterbrechung oder Ausnahme 460 auftreten. Nach
der Unterbrechung oder Ausnahme 460 kann das System 330 die
Schritte des Speicherns von zumindest einem Teil des Inhalts der
Register 302–307 des
Hauptprozessors 301 und der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 im Pufferspeicher 331 und
des Umschaltens des Computersystems 300 in den seriellen
Betriebsmodus auszuführen.
Wenn die Unterbrechung oder Ausnahme in einem der untergeordneten
Prozessoren 321, 331 aufgetreten ist, kann das
Computersystem 330 ferner den Inhalt von zumindest ein
der Register 322–325 bzw. 332–335 des untergeordneten
Prozessors 321, 331, in dem die Unterbrechung
oder Ausnahme aufgetreten ist, in mindestens einen aus der ersten
Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301 schreiben. In 2c werden
die Aktionen, die von dem Computersystem 300 im Fall einer
Unterbrechung oder Ausnahme durchgeführt werden, durch das Bezugszeichen 540 bezeichnet.
Das Computersystem 300 kann, wie oben mit Bezug auf 2a beschrieben,
im Fall einer Unterbrechung oder Ausnahme, die auftritt, während sich
das Computersystem 300 im parallelen Betriebsmodus befindet,
noch weitere Aktionen durchführen.
-
Anschließend kann
das Computersystem 300 Befehle 520–525 einer
Unterbrechungsroutine 502 ausführen. Die Unterbrechungsroutine 502 kann Teil
eines Betriebssystems sein, das den seriellen Betriebsmodus des
Computersystems 300 unterstützt und das den parallelen
Betriebsmodus nicht unterstützen
muss. Somit kann die Unterbrechungsroutine 502 Befehle
enthalten, die dafür
ausgelegt sind, den Inhalt der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors in dem Systemspeicher 304 abzuspeichern
und den Inhalt der ersten Teilmenge 302–305 der Register
am Ende der Ausführung
der Unterbrechungsroutine 502 aus dem Systemspeicher 304 zu
lesen. Außerdem
kann die Unterbrechungsroutine 502 den Inhalt von einigen oder
allen der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 ändern.
-
Die
Unterbrechungsroutine 502 muss jedoch nicht dafür ausgelegt
sein, den Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301, den Inhalt der Register 322–325 des ersten
untergeordneten Prozessors 321, den Inhalt der Register 332–335 des
zweiten untergeordneten Prozessors 331 und die Werte der
Laufstatusbits 330, 340 der untergeordneten Prozessoren 321, 331 abzuspeichern
und wiederherzustellen. In manchen Ausführungsformen der vorliegenden
Erfindung kann die Unterbrechungsroutine 502 Teil eines
Betriebssystems sein, das Multitasking ermöglicht. Insbesondere kann die
Unterbrechungsroutine 502 dafür ausgelegt sein, ein anderes
Programm auszuführen,
das den parallelen Betriebsmodus des Computersystems 300 benützen und
den Inhalt der Register 306, 307, 322–325, 332–335 und
der Laufstatusbits 330, 340 verändern kann.
Da die Unterbrechungsroutine 502 den Inhalt der Register 306, 307, 322–325, 332–335 und
die Laufstatusbits 330, 340 nach der Ausführung des
letzten Befehls 525 der Unterbrechungsroutine 502 nicht
wiederherstellen muss, kann sich der Inhalt der Register 306, 307, 322–325, 332–335 und
der Laufstatusbits 330, 340 von deren Inhalt nach
der Ausführung
der Befehle 512, 512', 512'' des
Programms 400 unterscheiden.
-
Nach
Beendigung der Unterbrechungsroutine 502 führt das
Computersystem 300 den Lese-Sprungbefehl 550 aus,
da die Rücksprungadresse
des Hauptprozessors 301, auf dem die Unterbrechungsroutine 502 ausgeführt werden
kann, durch die Adresse des Lese-Sprungbefehls 550 ersetzt wurde.
-
Wenn
der Lese-Sprungbefehl 550 ausgeführt wird, kann das Computersystem 300 die
oben mit Bezug auf 2a beschriebenen Schritte ausführen. Nach
der Ausführung
des Lese-Sprungbefehls wird der Inhalt von jedem der Register 302–307, 322–325, 332–335 und
der Laufstatusbits 330, 340 der Prozessoren 301, 321, 331 wiederhergestellt, wobei Ände rungen
von einigen der Register, die von der Unterbrechungsroutine 502 gemacht
wurden, geeignet berücksichtigt
werden können.
-
Somit
wird der Inhalt der Register 302–307, 322–325, 332–335 und
der Laufstatusbits 330, 340 nach der Ausführung der
Unterbrechungsroutine 502 wiederhergestellt, obwohl das
Betriebssystem des Computersystems 300 und insbesondere
die Unterbrechungsroutine 502 nicht dafür ausgelegt sind, den Inhalt
von jedem der Register 302–307, 322–325, 332–335 und
der Laufstatusbits 330, 340 der Prozessoren 301, 321, 331 abzuspeichern
und wiederherzustellen. Außerdem
kann die Unterbrechungsroutine 502 im seriellen Betriebsmodus
des Computersystems 300 ausgeführt werden. Deshalb sind keine Anpassungen
des Betriebssystems an den parallelen Betriebsmodus des Computersystems 300 erforderlich.
Somit stellt das Computersystem 300 gemäß der vorliegenden Erfindung
einen hohen Grad an Kompatibilität
mit Software, die für
ein existierendes Computersystem erstellt wurde, das die Anwesenheit
der untergeordneten Prozessoren 321, 331 nicht
unterstützt,
zur Verfügung.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann das Computersystem 300 ferner
einen ersten Modus-Umschaltbefehl zum Umschalten des Computersystems 300 aus
dem parallelen Betriebsmodus in den seriellen Betriebsmodus umfassen.
Das System kann dafür
ausgelegt sein, die Schritte des Speicherns des Inhalts von zumindest
einem Teil der Register 302–307, 322–325, 332–335 des
Hauptprozessors 302 und der untergeordneten Prozessoren 321, 331 in
den Pufferspeicher 313 und des Umschaltens des Systems
in den seriellen Betriebsmodus auszuführen, wenn der erste Modus-Umschaltbefehl aufgerufen
wird. Wenn der erste Modus-Umschaltbefehl von einem der Hilfsprozessoren 321, 331 ausgeführt wird,
kann das Computersystem 300 ferner dafür ausgelegt sein, den Inhalt
von zumindest einem der Register 322–325 bzw. 332–335 des
untergeordneten Prozessors 321 bzw. des untergeordneten
Prozessors 331, in dem der erste Modus-Umschaltbefehl ausgeführt wird,
in mindestens eines der Register 302–307 des Hauptprozessors 301 zu
schreiben.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann das Computersystem 300 dafür ausgelegt
sein, die folgenden Schritte auszuführen, wenn der erste Modus-Umschaltbefehl ausgeführt wird.
-
Das
Computersystem 300 kann überprüfen, ob das Indikatorbit 308 auf
einen Wert gesetzt ist, der anzeigt, dass sich das Computersystem
im parallelen Betriebsmodus befindet oder nicht. Wenn das Indikatorbit 308 anzeigt,
dass sich das Computersystem 300 im seriellen Betriebsmodus
befindet, wird ein Fehler wegen eines illegalen Befehls erzeugt
und keine weiteren Aktionen werden durchgeführt. Die weiteren Aktionen,
die vom Computersystem 300 durchgeführt werden, können davon
abhängen,
ob der erste Modus-Umschaltbefehl vom Hauptprozessor 301 oder
von einem der untergeordneten Prozessoren 321, 331 ausgeführt wird.
-
Wenn
der erste Modus-Umschaltbefehl vom Hauptprozessor 301 ausgeführt wird,
kann das Computersystem 300 die Befehlsverarbeitung in
den untergeordneten Prozessoren 321, 331 anhalten. Nachdem
die Befehlsverarbeitung in allen untergeordneten Prozessoren 321, 331 angehalten
ist, können
der Inhalt der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und wahlweise die
Laufstatusbits 330, 340 der untergeordneten Prozessoren 321, 331 in
den Pufferspeicher 313 geschrieben werden, dessen Adresse
von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 306. Zusätzlich kann eine Identifikationsnummer
des Hauptprozessors 301, die in manchen Ausführungsformen
die Zahl Null sein kann, in den Pufferspeicher 313 geschrieben
werden.
-
Anschließend kann
der Inhalt von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301, der die Adresse des Pufferspeichers 313 enthält, beispielsweise
der Inhalt des Registers 306, mit dem Inhalt von einem aus
der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 vertauscht werden, beispielsweise mit
dem Inhalt des Registers 305. Wie oben beschrieben kann
das Betriebssystem, das auf dem Computersystem 300 läuft, dafür ausgelegt
sein, die erste Teilmenge 302–305 der Register
des Hauptprozessors 301 im Fall einer Unterbrechung oder
Ausnahme handzuhaben. Somit kann das Vertauschen des Inhalts der
Register 305, 306 dabei helfen, sicherzustellen,
dass die Adresse des Pufferspeichers 313 im Fall einer
Unterbrechung oder Ausnahme vom Betriebssystem gespeichert und wiederhergestellt
wird.
-
Danach
kann das Computersystem den Inhalt der zweiten Teilmenge 306, 307 der
Register des Hauptprozessors 301 in dem Pufferspeicher 313 abspeichern.
Wie oben beschrieben kann eines aus der zweiten Teilmenge 306, 307 der
Register 302–307, beispielsweise
das Register 307, die Adresse des Lese-Sprungbefehls enthalten.
Somit kann die Adresse des Lese-Sprungbefehls in dem Pufferspeicher 313 abgespeichert
werden, wenn der Inhalt der Register 306, 307 gespeichert
wird. Anschließend
kann das Computersystem 300 das Indikatorbit 308 auf
einen Wert setzen, der anzeigt, dass sich das Computersystem im
zweiten Betriebsmodus befindet, beispielsweise auf den Wert ”AUS”.
-
Wenn
der erste Modus-Umschaltbefehl von einem der untergeordneten Prozessoren 321, 331 ausgeführt wird,
kann das Computersystem 300 die Befehlsverarbeitung im
Hauptprozessor 301 sowie in den untergeordneten Prozessoren 321, 331 anhalten.
Nachdem die Befehlsverarbeitung in allen Prozessoren 302, 321, 331 anhalten
ist, kann der Inhalt der Register 302–307 des Hauptprozessors 301 in dem
Pufferspeicher 313 abgespeichert werden, dessen Adresse
von einem aus der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 306. Zusätzlich können der Inhalt der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und wahlweise
die Werte der Laufstatusbits 330, 340 der untergeordneten
Prozessoren 321, 331 in dem Pufferspeicher 313 abgespeichert werden.
-
In
manchen Ausführungsformen
muss der Inhalt des untergeordneten Prozessors 321, 331,
in dem der erste Modus-Umschaltbefehl ausgeführt wird, nicht in dem Pufferspeicher
abgespeichert werden. In solchen Ausführungsformen wird nur der Inhalt
der Register der anderen untergeordneten Prozessoren im Pufferspeicher 313 abgespeichert.
Somit werden nur der Inhalt der Register 332–335 des zweiten
untergeordneten Prozessors und wahlweise der Inhalt der Register
weiterer untergeordneter Prozessoren, die sich neben den untergeordneten
Prozessoren 321, 331 im Computersystem 300 befinden,
im Pufferspeicher 313 abgespeichert, wenn der erste Modus-Umschaltbefehl
vom ersten untergeordneten Prozessor 321 ausgeführt wird.
Wenn dagegen der erste Modus-Umschaltbefehl vom zweiten untergeordneten
Prozessor 331 ausgeführt
wird, kann das System den Inhalt der Register 322–325 des
ersten untergeordneten Prozessors 321 im Pufferspeicher 313 abspeichern.
In solchen Ausführungsformen können jedoch
die Werte von allen Laufstatusbits 330, 340 im
Pufferspeicher 313 abgespeichert werden.
-
Danach
kann der Inhalt desjenigen Registers des Hauptprozessors 301,
das die Adresse des Pufferspeichers enthält, beispielsweise der Inhalt
des Registers 306, in einem temporären Register abgespeichert
werden, das in manchen Ausführungsformen
im Pufferspeicher 313 bereitgestellt werden kann. Außerdem kann
eine Identifikationsnummer des Prozessors, in dem der erste Modus-Umschaltbefehl
ausgeführt
wird, im Pufferspeicher 313 abgespeichert werden. Beispielsweise
kann das Computersystem 300 eine Identifikationsnummer
1 im Pufferspeicher 313 abspeichern, wenn der erste Modus-Umschaltbefehl
durch den ersten untergeordneten Prozessor 321 ausgeführt wird.
Wenn der erste Modus-Umschaltbefehl
durch den zweiten untergeordneten Prozessor 331 ausgeführt wird,
kann das Computersystem 300 eine Identifikationsnummer
2 im Pufferspeicher 313 abspeichern. In anderen Ausführungsformen
können
andere Identifikationsnummern verwendet werden.
-
Anschließend kann
der Inhalt der Register 322–325 bzw. 332–335 des
untergeordneten Prozessors 321 bzw. 331, der den
ersten Modus-Umschaltbefehl ausführt,
in die erste Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 geschrieben werden. In manchen Ausführungsformen kann
der Inhalt von einigen oder allen aus der zweiten Teilmenge 306, 307 der
Register 302–307 des Hauptprozessors 301 überschrieben
werden, während
der Inhalt der Register 322–325 oder 332–335 in die
erste Telmenge 302–305 der
Register geschrieben wird.
-
Anschließend kann
das Computersystem 300 den Inhalt von einem aus der ersten
Teilmenge der Register 302–305 des Hauptprozessors 301 im Pufferspeicher 313 abspeichern,
beispielsweise den Inhalt des Registers 305. Anschließend kann
der Inhalt des temporären
Puffers in den Register 305 geschrieben werden. Somit wird
die Adresse des Pufferspeichers 313 in einem Register abgespeichert, dessen
Inhalt im Fall einer Unterbrechung oder Ausnahme vom Betriebssystem
gehandhabt wird. Danach kann das Indikatorbit 308 auf einen
Wert gesetzt werden, der anzeigt, dass sich das Computersystem 300 im
ersten Betriebsmodus befindet, beispielsweise auf den Wert ”AUS”, um das
Computersystem 300 in den seriellen Betriebsmodus zu schalten.
-
In
manchen Ausführungsformen
der vorliegenden Erfindung kann das Computersystem 300 dafür ausgelegt
sein, die oben beschriebenen Schritte als unteilbare Speicheroperation
auszuführen,
um Probleme, die von einer Unterbrechung oder Ausnahme, die während der
Ausführung
des ersten Modus-Umschaltbefehls auftritt, herrühren können, zu vermeiden.
-
Nach
der Ausführung
des ersten Modus-Umschaltbefehls kann das Computersystem 300 einen oder
mehrere Befehle im seriellen Betriebsmodus ausführen. Das Computersystem 300 kann
im seriellen Betriebsmodus bleiben, bis der oben beschriebene Aktivierungsbefehl
oder der zweite Modus-Umschaltbefehl, der unten genauer erläutert wird,
ausgeführt
wird. Beispielsweise kann das Computersystem 300 einen
Aufruf des Betriebssystems des Computersystems 300 ausführen.
-
Das
Computersystem 300 kann ferner einen zweiten Modus-Umschaltbefehl
aufweisen, der dafür ausgelegt
ist, das Computersystem 300 aus dem seriellen Betriebsmodus
in den parallelen Betriebsmodus zu schalten und den Inhalt von einigen
oder allen der Register 302–307, 322–325, 332–335 der
Prozessoren 301, 321, 331 und wahlweise
Werte der Laufstatusbits 330, 340 der untergeordneten
Prozessoren 321, 331 aus dem Pufferspeicher 313 zu
lesen. Wenn eine vorangehende Ausführung des ersten Modus-Umschaltbefehls
durch einen der untergeordneten Prozessoren 321, 331 durchgeführt wurde, kann
das Computer system 300 ferner den Inhalt von mindestens
einem der Register 302–307 des
Hauptprozessors 301 in denjenigen untergeordneten Prozessor 321, 331 schreiben,
der den ersten Modus-Umschaltbefehl ausgeführt hat.
-
In
manchen Ausführungsformen
kann das Computersystem 300 dafür ausgelegt sein, die folgenden
Schritte auszuführen,
wenn der zweite Modus-Umschaltbefehl ausgeführt wird.
-
Zuerst
kann das Computersystem 300 das Steuerregisterbit 309 überprüfen. Wenn
der Wert des Steuerregisterbits 309 anzeigt, dass der parallele
Betriebsmodus des Computersystems 300 nicht erlaubt ist,
wird ein Fehler wegen eines unzulässigen Befehls erzeugt und
es werden keine weiteren Aktionen ausgeführt. Andernfalls kann das Computersystem 300 eine
Identifikationsnummer, die den Prozessor angibt, der den ersten
Modus-Umschaltbefehl
zuletzt ausgeführt
hat, lesen. Weitere Schritte, die von dem Computersystem 300 ausgeführt werden,
können davon
abhängen,
ob der erste Modus-Umschaltbefehl vom Hauptprozessor 301 oder
von einem der untergeordneten Prozessoren 321, 331 ausgeführt wurde.
-
Wenn
der erste Modus-Umschaltbefehl vom Hauptprozessor 301 ausgeführt wurde,
was in machen Ausführungsformen
durch einen Wert Null der Identifikationsnummer angezeigt werden
kann, kann das Computersystem den Inhalt der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 und wahlweise
Werte der Laufstatusbits 330, 340 aus dem Pufferspeicher 313 lesen.
Außerdem
kann das Computersystem 300 den Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 aus dem Pufferspeicher lesen. Anschließend können der
Inhalt von einem aus der zweiten Teilmenge 302–305 der
Register 302–307 des
Hauptprozessors 301, der die Adresse des Pufferspeichers
enthält
und der Inhalt von einem aus der zweiten Teilmenge 306, 307 der
Register vertauscht werden, um die Adresse des Pufferspeichers 313 in
der zweiten Teilmenge 306, 307 der Register abzuspeichern.
In manchen Ausführungsformen kann
der Inhalt der Register 305, 306 vertauscht werden.
-
Danach
kann das Computersystem 300 das Indikatorbit 308 auf
einen Wert setzen, der anzeigt, dass sich das Computersystem 300 im
parallelen Betriebsmodus befindet. In manchen Ausführungsformen
kann das Indikatorbit 308 auf den Wert ”AUS” gesetzt werden. Anschließend kann
die Befehlsverarbeitung im Hauptprozessor 301 und in jedem
der Hilfsprozessoren 321, 331, in dem der Wert
des Laufstatusbits 330, 340 anzeigt, dass der
jeweilige untergeordnete Prozessor 321, 331 vor
dem ersten Modus-Umschaltbefehl Befehle verarbeitet hat, wieder aufgenommen
werden.
-
Wenn
die letzte Ausführung
des ersten Modus-Umschaltbefehl von einem der untergeordneten Prozessoren
ausgeführt
wurde, was durch einen Wert größer als
Null der Identifikationsnummer angezeigt werden kann, können der
Inhalt der Register 322–325, 332–335 der
untergeordneten Prozessoren 321, 331 sowie die
Werte der Laufstatusbits 330, 340 aus dem Pufferspeicher 313 gelesen
werden, dessen Adresse von einem aus der ersten Teilmenge 302–305 des
Hauptprozessors 301 gelesen werden kann, beispielsweise
aus dem Register 305. In manchen Ausführungsformen kann nur der Inhalt
der Register derjenigen untergeordneten Prozessoren 321, 331,
in denen die vorangehende Ausführung
des ersten Modus-Umschaltbefehls nicht durchgeführt wurde, aus dem Pufferspeicher 313 gelesen
werden. Zusätzlich
kann das Computersystem 300 den Inhalt der zweiten Teilmenge 306, 307 der
Register 302–307 des
Hauptprozessors 301 aus dem Pufferspeicher 313 lesen.
-
Anschließend kann
der Inhalt des Registers, das die Adresse des Pufferspeichers 313 enthält, und das
in manchen Ausführungsformen
das Register 305 sein kann, in ein temporäres Register
geschrieben werden, das im Pufferspeicher 313 bereitgestellt werden
kann, und der Inhalt des Registers 305 kann aus dem Pufferspeicher 313 gelesen
werden. Danach kann der Inhalt der ersten Telmenge 302–305 der
Register 302–307 des
Hauptprozessors 301 in die Register des untergeordneten
Prozessors 321, 331 geschrieben werden, in dem
der erste Modus-Umschaltbefehl zuletzt ausgeführt wurde. Somit können die
Register des untergeordneten Prozessors 321, 331 Änderungen
der Register des Hauptprozessors 301, die vorgenommen wurden,
während das
Computersystem 300 im zweiten Betriebsmodus betrieben wurde,
enthalten. Deshalb kann die Ausführung
eines Threads, der während
des seriellen Betriebsmodus auf dem Hauptprozessor 301 gelaufen
ist, auf dem untergeordneten Prozessor leichter fortgesetzt werden.
Beispielsweise kann die erste Teilmenge 302–305 der
Register 302–307 des Hauptprozessors 301 eine
Ausnahmeinformation (exception information) über eine Unterbrechung oder
Ausnahme enthalten, die aufgetreten ist, während das Computersystem 300 im
seriellen Betriebsmodus betrieben wurde und die von den untergeordneten
Prozessoren 321, 331 berücksichtigt werden kann, wenn
sich das Computersystem 300 im parallelen Betriebsmodus
befindet.
-
Anschließend kann
der Inhalt der ersten Teilmenge 302–305 der Register 302–307 des
Hauptprozessors 301 aus dem Pufferspeicher 313 gelesen werden
und das Indikatorbit 308 kann auf einen Wert gesetzt werden,
der anzeigt, dass sich das Computersystem 300 im parallelen
Betriebsmodus befindet und die Befehlsverarbeitung kann im Hauptprozessor 301 und
in denjenigen untergeordneten Prozessoren 321, 331 wieder
aufgenommen werden, in denen der Wert des jeweiligen Laufstatusbits 330, 340 anzeigt, dass
in dem jeweili gen untergeordneten Prozessor 321, 331 Befehle
abgearbeitet wurden, als der erste Modus-Umschaltbefehl aufgerufen
wurde, um das Computersystem 300 in den seriellen Betriebsmodus zu
schalten.
-
In
manchen Ausführungsformen
kann das Computersystem 300 dafür ausgelegt sein, die oben beschriebenen
Schritte des zweiten Modus-Umschaltbefehls als unteilbare Speicheroperation
auszuführen,
um Nachteile zu vermeiden, die durch eine Unterbrechung oder Ausnahme,
die während
der Ausführung
des zweiten Modus-Umschaltbefehls auftreten könnte, verursacht werden könnten.
-
Der
erste Modus-Umschaltbefehl und der zweite Modus-Umschaltbefehl können verwendet werden,
um ein Programm zu implementieren, dass das Computersystem 300 zwischen
dem parallelen und dem seriellen Betriebsmodus hin- und herschalten
kann. Wenn der erste Modus-Umschaltbefehl ausgeführt wird, kann die weitere
Ausführung
des Programms im seriellen Betriebsmodus durchgeführt werden
bis entweder der Aktivierungsbefehl oder der zweite Modus-Umschaltbefehl
ausgeführt
wird. Ein Programm, das den ersten Modus-Umschaltbefehl und/oder den zweiten
Modus-Umschaltbefehl verwendet, kann ferner Befehle zum Speichern
des Inhalts des Registers 305 oder eines anderen der Register 302–307 des
Hauptprozessors, in dem die Adresse des Pufferspeichers 313 nach
der Ausführung
des ersten Modus-Umschaltbefehls gespeichert wird, im Systemspeicher 304,
und zum Lesen des Inhalts des Registers 305 vor der Ausführung des
zweiten Modus-Umschaltbefehls
aus dem Systemspeicher 304 umfassen. Dies kann mit Hilfe
gewöhnlicher Speicher-
und Lesebefehle des seriellen Betriebsmodus des Computersystems 300 geschehen.
Nach dem Speichern des Inhalts des Registers 305 im Systemspeicher
kann das Programm jeden aus der ersten Teilmenge 302–305 der
Register 302–307 des Hauptprozessors 301 verwenden.
Alternativ kann die Adresse des Pufferspeichers 313 in
eine Variable gespeichert werden, aus der sie vor der Ausführung des ersten
und/oder des zweiten Modus-Umschaltbefehls in das Register 305 geladen
werden kann.
-
Der
oben beschriebene Funktionsumfang und die oben beschriebenen Befehle
des Computersystems 300 können mit Hilfe spezialisierter
Schaltkreise, die sich im Hauptprozessor 301 und den untergeordneten
Prozessoren 321, 331 befinden, bereitgestellt
werden, oder mit Hilfe von Mikrocode, der sich in dem Hauptprozessor 301 und
den untergeordneten Prozessoren 321, 331 befindet.
-
Weitere
Abwandlungen und Varianten der vorliegenden Erfindung werden den
Fachleuten angesichts dieser Beschreibung offensichtlich. Dementsprechend
ist diese Beschreibung als lediglich veranschaulichend auszulegen
und dient dem Zweck, den Fachleuten die allgemeine Art der Ausführung der vorliegenden
Erfindung zu lehren. Es soll verstanden werden, dass die hierin
gezeigten und beschriebenen Formen der Erfindung als die gegenwärtig bevorzugten
Ausführungsformen
angesehen werden sollen.