-
Die
vorliegende Erfindung betrifft ein System und ein Verfahren zur
Vermeidung eines exzeptionellen Zustands eines vorherbestimmten
Typs während
der Ausführung
eines Programms.
-
Insbesondere
betrifft die vorliegende Erfindung ein System und ein Verfahren
zur Vermeidung einer Ausnahme eines vorherbestimmten Typs in einem
digitalen Computersystem. Die Erfindung stellt insbesondere ein
System und ein Verfahren zur effizienten Handhabung von Speicherzugriffsoperationen
bereit, die nicht synchronisierte Speicherreferenzen durch einen
Mikroprozessor umfassen, der die Verwendung eines Ausnahmebehandlers
erfordert, um die nicht synchronisierte Speicherreferenz zu behandeln.
-
STAND DER
TECHNIK
-
Digitale
Computer bearbeiten eine Vielzahl unterschiedlicher Programmtypen,
wobei jedes Programm eine Reihe von Befehlen umfasst, die dem Computer
ermöglichen,
bestimmte Operationen im Zusammenhang mit bestimmten Datenelementen
durchzuführen.
Es steht eine Vielzahl von Prozessortypen zur Verwendung in digitalen
Computersystemen zur Verfügung,
wobei jeder Prozessortyp gemäß einer
Architektur konstruiert ist, die unter anderem Folgendes beschreibt:
den Befehlssatz, den ein Prozessor, der gemäß der Architektur konstruiert
ist, ausführen
soll, das Format oder die Formate der verschiedenen Befehle, die
Datentypen und -formate, die verarbeitet werden können, Definitionen
für unterschiedliche
Register, die während
der Befehlsbearbeitung verwendet werden können, wie auf Informationen
im Speicher des Computers zugegriffen wird und wie ein Prozessor,
der gemäß der Architektur
konstruiert ist, exzeptionelle Zustände behandeln soll, die während der
Befehlsbearbeitung erfasst werden können.
-
Es
ist oft wünschenswert,
einen Prozessortyp als „emulierten
Prozessor" zu aktivieren,
der von einem anderen Prozessortyp, der als „Zentralprozessor" arbeitet, emuliert
werden soll. Ein Zentralprozessor emuliert einen emulierten Prozessor
im Allgemeinen durch die Verarbeitung von Programmen, die für den emulierten Prozessor
geschrieben wurden, um eine Ausgabe zu erzeugen, die effektiv der
Ausgabe entspricht, die von dem emulierten Prozessor erzeugt würde. Im
Allgemeinen wird die Emulation durch Übersetzung eines Programms,
das für
die Ausführung
durch einen emulierten Prozessor erzeugt wird (ein „originales" Programm), in ein
Programm, das von einem Zentralprozessor bearbeitet werden kann
(ein „übersetztes" Programm), erreicht.
Dieser Übersetzungsprozess
kann zum Beispiel umfassen, dass aus Befehlen und anderen Elementen des
originalen Programms Befehle und andere Elemente erzeugt werden,
die auf der Architektur des Zentralprozessors basieren, wodurch
das übersetzte
Programm bereitgestellt wird. Die Übersetzung kann beispielsweise
durch den Zentralprozessor selbst, durch einen anderen Prozessor
im selben Computersystem oder durch ein anderes Computersystem durchgeführt werden
und dem Zentralprozessor, der das Programm bearbeiten soll, verfügbar gemacht
werden, und zwar unter der Steuerung eines Übersetzungsprogramms. Bei der Ausführung der Übersetzung
können
jeder Befehl oder Folgen oder verschiedene Gruppen von Befehlen
im originalen Programm (das heißt,
dem Programm, das auf der Architektur des emulierten Prozessors
basiert) in einen oder in eine Reihe oder Gruppe von Befehlen zur
Verarbeitung durch den Zentralprozessor übersetzt werden. Der Übersetzungsprozess
wird typischerweise für
das gesamte oder für
ausgewählte
Abschnitte eines originalen Programms durchgeführt, wenn der Prozessor mit
der Bearbeitung des originalen Programms beginnt, obwohl darauf
hingewiesen wird, dass ein Befehl oder eine Gruppe von Befehlen
des originalen Programms übersetzt
werden können,
während
die Verarbeitung fortschreitet. Wenn die Datenformate des emulierten
Prozessors für
den Zentralprozessor nicht direkt verwendbar sind, können die
Daten des Weiteren verarbeitet werden, um sie von den Formaten des
emulierten Prozessors in Formate umzuwandeln, die der Zentralprozessor
verwenden kann.
-
Wie
oben erwähnt,
umfasst eine Architekturdefinition eine Beschreibung darüber, wie
ein Prozessor, der gemäß der Architektur
konstruiert ist, auf Informationen im Speicher des Computers zugreift.
Normalerweise werden Daten in einem Speichersubsystem gespeichert,
das eine Reihe von Speicherplätzen
umfasst, von denen jeder die Kapazität aufweist, Daten mit einer
Länge von
einem Acht-Bit-Byte, die einer entsprechenden Reihe von aufeinanderfolgenden
Adresswerten zugeordnet sind, zu speichern. Typischerweise kann
ein Prozessor Datenelemente verarbeiten, die jeweils beispielsweise
ein, zwei, vier, acht usw. Bytes umfassen (im Allgemeinen Mengen
von 2n Bytes, wobei „n" eine Ganzzahl ist), und moderne Prozessorarchitekturen
erfordern typischerweise, dass die Datenelemente in einer „synchronisierten" Weise gespeichert
werden. Das heißt, dass
die Architekturen erfordern, dass Zwei-Byte-Datenelemente in Speicherplätzen gespeichert
werden, auf die mit Adressen zugegriffen wird, die durch zwei teilbar
sind, und dass Vier-Byte- und Acht-Byte-Datenelemente in Speicherplätzen gespeichert
werden, auf die mit Adressen zugegriffen wird, die durch vier teilbar
sind. Wenn ein Datenelement nicht korrekt synchronisiert ist, müsste das
Speichersubsystem oder der Prozessor typischerweise eine Reihe von
Operationen durchführen,
nachdem der Inhalt von einem oder mehreren Speicherplätzen während einer
Abrufoperation abgerufen wurde, um den Inhalt neu zu ordnen und
das gewünschte Datenelement
aus dem abgerufenen Inhalt auszublenden oder das Datenelement während einer
Speicheroperation neu zu ordnen und es in einem oder mehreren Speicherplätzen zu
speichern.
-
Bei
Prozessoren, die gemäß solcher
moderner Architekturen konstruiert sind, würde typischerweise ein Ausnahmebehandler
aufgerufen, um die Operation zu behandeln, wenn ein Speicherzugriff
eine Adresse verwenden würde,
die nicht korrekt synchronisiert ist. Der Ausnahmebehandler kann
den Prozessor so steuern, dass er in einer Speicheroperation eine
Anzahl von Operationen ausführt,
damit der Inhalt einer Anzahl von Speicherplätzen abgerufen werden kann
und das Datenelement aus verschiedenen Abschnitten des abgerufenen
Inhalts während
einer Abrufoperation hergestellt werden kann, oder dass verschiedene
Abschnitte des Datenelements disassembliert und in jeweiligen Speicherplätzen bei
einer Speicheroperation gespeichert werden können. Um den bedeutenden Umfang
an Zusatz zu vermeiden, der beim Aufrufen des Ausnahmebehandlers,
dem Ausführen
der Abhilfeoperationen und der Rückkehr
zum Programm auftreten würde,
kann der Ausnahmebehandler den Prozessor alternativ lediglich befähigen, das
Programm zu beenden, das die nicht synchronisierte Adressreferenz
verwendet hat. Um beides zu vermeiden, sorgen Kompilierer typischerweise dafür, dass
Datenelemente im Speicher ausgelegt werden, um sicherzusteilen,
dass nicht synchronisierte Referenzen vermieden werden.
-
Jedoch
erlaubt eine Anzahl von älteren
Architekturen nicht synchronisierte Referenzen, und zwar zur Veranschaulichung
die Mikroprozessorfamilie x86 der Intel Corporation, die gegenwärtig die
Mikroprozessorpalette 8086, 8088, 80286, 80386, 80486 und „PentiumTM" umfasst.
Jedoch tritt ein Problem auf, wenn gewünscht wird, einen Zentralprozessor
zu aktivieren, der gemäß einer
der modernen Architekturen konstruiert ist, was erfordert, dass
der Speicherzugriff synchronisiert ist, um einen emulierten Prozessor
zu emulieren, der keine solche Synchronisation erfordert, da während einer
solchen Emulation eine nicht synchronisierte Referenz auftreten
könnte.
-
GB-A-2285155 offenbart
ein Computersystem, das eine Ausführungsumgebung zur Ausführung eines Programms
umfasst, wobei das Programm einen Befehlsstrom umfasst, der eine
Reihe von Befehlen umfasst, und die Ausführungsumgebung einen Detektor
zur Erfassung von exzeptionellen Zuständen zur Erfassung eines exzeptionellen
Zustands mindestens eines Typs umfasst, der aus der Ausführung mindestens
eines der Befehle in der Reihe resultiert. Ein bedingter Substitutionsbefehl
wird in einem Befehlssatz bereitgestellt, um Ausnahmen zu korrigieren,
die während
der Ausführungszeit
auftreten. Der bedingte Substitutionsbefehl wird gleichzeitig in
einem Fließband-Computersystem
mit einem potenziellen Ausnahmebefehl oder gleichzeitig in einem
weiträumigen
Computersystem ausgeführt.
Der bedingte Substitutionsbefehl substituiert einen Vorgabewert
für das
Ergebnis des potenziellen Ausnahmebefehls, wenn der potenzielle
Ausnahmebefehl eine oder mehrere spezifizierte Ausnahmen erzeugt.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Die
Erfindung stellt ein neuartiges und verbessertes System und Verfahren
zur Vermeidung eines exzeptionellen Zustands eines vorherbestimmten
Typs in einem digitalen Computersystem bereit, insbesondere zur
effizienten Behandlung von Speicherzugriffsoperationen, die nicht
synchronisierte Speicherreferenzen durch einen Mikroprozessor umfassen,
die die Verwendung eines Ausnahmebehandlers erfordern, um die nicht
synchronisierte Speicherreferenz zu behandeln.
-
Kurz
zusammengefasst umfasst ein System zur Vermeidung von exzeptionellen
Zuständen
während der
Ausführung
eines Programms eine Ausführungsumgebung
zur Ausführung
des Programms und ein Korrekturcode-Erzeugungssubsystem. Das Programm
umfasst einen Befehlsstrom, der eine Reihe von Befehlen umfasst,
und die Ausführungsumgebung
umfasst einen Detektor zur Erfassung von exzeptionellen Zuständen zur
Erfassung mindestens eines vorherbestimmten Typs eines exzeptionellen
Zustands im Zusammenhang mit der Ausführung jedes der Befehle in
dem Befehlsstrom. Ein Korrekturcode-Erzeugungssubsystem reagiert auf eine
Erfassung durch die Ausführungsumgebung
eines exzeptionellen Zustands des vorherbestimmten Typs im Zusammenhang
mit der Ausführung
eines Befehls in dem Befehlsstrom, um einen Korrekturcode zu erzeugen,
wobei der Korrekturcode, wenn er verarbeitet wird, den exzeptionellen
Zustand des vorherbestimmten Typs vermeidet und den Korrekturcode
in dem Befehlsstrom durch den Befehl in dem Befehlsstrom ersetzt, für den der
exzeptionelle Zustand erfasst wurde. Wenn sich der Befehl, der die
Ausnahme ausgelöst
hat, in einer Schleife oder dergleichen befindet, wird als Ergebnis
anstelle des Befehls der Korrekturcode verarbeitet, der den exzeptionellen
Zustand vermeidet.
-
Somit
ermöglicht
das System die Verwendung von Befehlen in einem Befehlsstrom, die
effizient verarbeitet werden können,
die jedoch exzeptionelle Zustände,
wie beispielsweise nicht synchronisierte Speicherreferenzen, auslösen können, und
das System ermöglicht,
diese durch Korrekturcode zu ersetzen, der möglicherweise weniger effizient
ist, jedoch sicherstellt, dass exzeptionelle Zustände vermieden
werden, wenn ein exzeptioneller Zustand bei der Verarbeitung des
ursprünglichen
Befehls erfasst wird. Wenn der Abschnitt des Programms, der den
Befehl enthält,
der den exzeptionellen Zustand ausgelöst hat, mehrere Male verarbeitet wird,
was auftreten kann, wenn er Teil einer Schleife ist, wird somit
der exzeptionelle Zustand nur einmal oder eine vorherbestimmte Anzahl
von Malen angetroffen und danach wird der Ersatzcode verarbeitet,
wodurch sichergestellt wird, dass der exzeptionelle Zustand vermieden
wird.
-
Die
vorliegende Erfindung wird nun beispielhaft ausführlicher und unter Bezugnahme
auf die beigefügten
Zeichnungen beschrieben, in denen:
-
1 ein
Funktionsblockdiagramm ist, das ein digitales Computersystem darstellt,
das gemäß der Erfindung
konstruiert ist;
-
2 und 3 Zeichnungen
sind, die für
das Verständnis
der Erfindung nützlich
sind; und
-
4 ein
Ablaufplan ist, der Operationen zeigt, die von dem digitalen Computersystem
im Zusammenhang mit der Erfindung ausgeführt werden.
-
AUSFÜHRLICHE
BESCHREIBUNG EINER VERANSCHAULICHENDEN AUSFÜHRUNGSFORM
-
1 ist
ein Funktionsblockdiagramm eines digitalen Computersystems 10,
das ein System zur effizienten Behandlung von Speicherzugriffsoperationen
umfasst, die nicht synchronisierte Speicherreferenzen durch einen
Mikroprozessor umfassen und die Verwendung eines Ausnahmebehandlers
erfordern würden,
um die nicht synchronisierte Speicherreferenz zu behandeln. Unter
Bezugnahme auf 1 umfasst das digitale Computersystem 10 einen
Mikroprozessor 11, der über
eine Speicherverwaltungseinheit 14 mit einem Speichersubsystem 12 und
einem oder mehreren Eingabe-/Ausgabesubsystemen, die im Allgemeinen
mit der Bezugsnummer 13 gekennzeichnet sind, kommuniziert.
Das Speichersubsystem 12 umfasst eine Anzahl physikalisch
adressierbarer Speicherplätze,
in denen durch den Mikroprozessor 11 zu verarbeitende Daten
und Befehle (die hierin kollektiv als „Informationen" bezeichnet werden)
gespeichert werden können.
Zusätzlich
kann der Mikroprozessor 11 die verarbeiteten Daten nach
der Verarbeitung der Daten zur Speicherung zum Speichersubsystem 12 übertragen.
-
Das
digitale Computersystem 10 kann eine Anzahl verschiedener
Typen von Eingabe-/Ausgabesubsystemen 13 umfassen,
einschließlich
Massenspeichersubsystemen, Bediener-Eingabe- und -Ausgabesubsystemen 13,
Netzanschlüssen
und dergleichen. Die Massenspeichersubsysteme stellen im Allgemeinen
einen Langzeitspeicher für
Informationen bereit, die von dem Mikroprozessor 11 verarbeitet
werden können.
Die Massenspeichersubsysteme können
Vorrichtungen wie beispielsweise Platten- oder Band- Subsysteme, optische
Plattenspeichervorrichtungen und CD-ROM-Vorrichtungen umfassen,
in denen Informationen gespeichert werden können und/oder aus denen Informationen
ausgelesen werden können.
Ein oder mehrere Massenspeichersubsysteme können entfernbare Speichermedien
verwenden, die von einem Bediener entnommen und installiert werden
können
und die dem Bediener ermöglichen,
Programme und Daten in das digitale Computersystem 10 zu
laden und verarbeitete Daten aus diesem zu erhalten. Unter der Steuerung
von Steuerungsinformationen, die den Massenspeichersubsystemen vom
Mikroprozessor 11 bereitgestellt werden, können Informationen,
die in den Massenspeichersubsystemen gespeichert sind, zur Speicherung
zum Speichersubsystem 12 übertragen werden. Nachdem die
Informationen im Speichersubsystem 12 gespeichert worden
sind, kann der Mikroprozessor 11 sie zur Verarbeitung aus
dem Speichersubsystem 12 abrufen. Nachdem die verarbeiteten
Daten erzeugt wurden, kann der Mikroprozessor 11 ebenfalls
die Massenspeichersubsysteme befähigen,
die verarbeiteten Daten aus dem Speichersubsystem 12 für eine relative
Langzeitspeicherung abzurufen.
-
Die
Bediener-Eingabe- und -Ausgabesubsysteme stellen dem digitalen Computersystem 10 im
Allgemeinen eine Bedienerschnittstelle bereit. Insbesondere können die
Bediener-Eingabesubsysteme
beispielsweise Tastatur- und Mausvorrichtungen umfassen, die ein
Bediener für
die interaktive Eingabe von Informationen zur Verarbeitung in das
digitale Computersystem 10 verwenden kann. Zusätzlich können die
Bediener-Eingabesubsysteme Mechanismen bereitstellen, mit denen
der Bediener das digitale Computersystem 10 steuern kann.
Die Bediener-Ausgabesubsysteme können
Vorrichtungen, wie beispielsweise Video-Anzeigevorrichtungen, umfassen, mit
Hilfe derer das digitale Computersystem 10 unter der Steuerung
des Mikroprozessors 11 dem Bediener Verarbeitungsergebnisse
anzeigt. Zusätzlich
kann ein Drucker vorgesehen sein, um dem Bediener eine Ausdruckausgabe
bereitzustellen.
-
Die
Netzanschlüsse
können
dem digitalen Computersystem 10 ermöglichen, eine Verbindung zu
einer Kommunikationsverknüpfung
herzustellen, wodurch das Computersystem 10 an ein Computernetz
angeschlossen wird. Die Netzanschlüsse ermöglichen dem Computersystem 10,
Informationen (einschließlich
sowohl Programmbefehle als auch Daten) zu anderen Computersystemen
und anderen Vorrichtungen im Netz (nicht gezeigt) zu übertragen
und von diesen zu empfangen. In einem typischen Netz, das beispielsweise
gemäß einem
Client-Server-Paradigma
organisiert ist, sind bestimmte Computersysteme in dem Netz als
Server bestimmt, die Informationen zur Verarbeitung durch andere
Client-Computersysteme speichern und somit den Client-Computersystemen
ermöglichen,
die Informationen in angemessener Weise gemeinsam zu nutzen. Ein Client-Computersystem,
das Zugriff auf Informationen benötigt, die von einem bestimmten
Server verwaltet werden, befähigt
den Server, die Informationen über
das Netz zu ihm zu übertragen.
Nach der Verarbeitung der Daten kann das Client-Computersystem die
verarbeiteten Daten ebenfalls zur Speicherung zum Server zurück übertragen.
Zusätzlich
zu Computersystemen (einschließlich
der oben beschriebenen Server und Clients) kann ein Netz ebenfalls
beispielsweise Drucker und Faxgeräte, digitale Audio- oder Videospeichergeräte und -verteilungsgeräte und dergleichen
umfassen, die von den verschiedenen Computersystemen, die in dem
Netz angeschlossen sind, gemeinsam genutzt werden können. Die
Kommunikationsverknüpfungen,
die die Computersysteme in dem Netz miteinander verbinden, können herkömmlicherweise
jedes angemessene Informationsträgermedium,
einschließlich
Drähte,
Lichtleitfasern oder anderer Medien, zur Übertragung von Signalen zwischen
den Computersystemen umfassen. Computersysteme übertragen Informationen in
dem Netz mittels Nachrichten, die über die Kommunikationsverknüpfungen übertragen
werden, wobei jede Nachricht Informationen und ein Etikett, das
das Gerät
für den
Empfang der Nachricht identifiziert, umfasst.
-
Herkömmlicherweise
umfasst jedes der Eingabe-/Ausgabesubsysteme 13 typischerweise
Register und andere Datenspeicherelemente (nicht gezeigt), die Steuerungs-,
Status- und andere Informationen speichern, die zur Steuerung der
Operationen, die von dem jeweiligen Eingabe-/Ausgabesubsystem 13 durchgeführt werden,
und zur Anzeige von dessen Operationsstatus verwendet werden. Der
Mikroprozessor 11 kann Informationen in den Registern und
anderen Datenspeicherelementen speichern, wodurch er das jeweilige Eingabe-/Ausgabesubsystem 13 in
gleicher Weise steuert, wie er Informationen im Speichersubsystem 12 speichert.
Entsprechend kann der Mikroprozessor 11 die Informationen,
die in dem Eingabe-/Ausgabesubsystem 13 enthalten sind,
in gleicher Weise abrufen, wie er Informationen aus dem Speichersubsystem 12 abruft, um
den Operationsstatus des jeweiligen Eingabe-/Ausgabesubsystems 13 zu
ermitteln.
-
Die
Speicherverwaltungseinheit 14 führt eine Anzahl von Operationen
aus. Insbesondere umfasst die Speicherverwaltungseinheit 14 typischerweise
einen Pufferspeicher, der Informationen, die von dem Mikroprozessor 11 aus
dem Speichersubsystem 12 angefordert werden, puffert. Wenn
der Mikroprozessor 11 Informationen anfordert, die beispielsweise
aus dem Speichersubsystem 12 abgerufen werden sollen, oder
verarbeitete Daten für
die Speicherung beispielsweise im Speichersubsystem 12 bereitstellt,
stellt der Mikroprozessor 11 der Speicherverwaltungseinheit 14 zusätzlich typischerweise
eine Adresse in einem virtuellen Adressraum bereit. Die verschiedenen
Anwendungsprogramme, die von dem Mikroprozessor 11 verarbeitet
werden, können
mit entsprechenden virtuellen Adressräumen versehen werden. Der virtuelle
Adressraum ist in „Seiten" unterteilt, von
denen jede eine ausgewählte
Anzahl von virtuell adressierbaren Speicherplätzen umfasst, wobei jeder virtuell
adressierbare Speicherplatz Informationen speichert. Die Seiten
eines virtuellen Adressraums eines Anwendungsprogramms sind normalerweise
in einem Massenspeichersubsystem gespeichert, und der Mikroprozessor 11 ermöglicht,
dass individuelle Seiten in das Speichersubsystem 12 so
kopiert werden, wie sie während
der Verarbeitung benötigt
werden, und für
die Seiten, die während
der Verarbeitung modifiziert werden, kann der Mikroprozessor 11 ermöglichen,
dass sie zur Langzeitspeicherung in das Massenspeichersubsystem
kopiert werden.
-
Jeweilige
Seiten eines virtuellen Adressraums können in physikalischen Plätzen, die
mit Hilfe von physikalischen Adressen identifiziert werden, in dem
Speichersubsystem 12 kompakt gespeichert werden, und indem
eine Zugriffsoperation im Zusammenhang mit einem bestimmten virtuellen
Adressspeicherplatz (das heißt,
ein Abruf von Informationen aus einem bestimmten physikalischen
Platz oder eine Speicherung von Informationen in einem bestimmten
physikalischen Platz) als Reaktion auf eine Anfrage vom Mikroprozessor 11 durchgeführt wird,
führt die
Speicherverwaltungseinheit 14 eine Übersetzung der virtuellen Adresse
aus, um die physikalische Adresse zur Verwendung bei der Durchführung der
Zugriffsoperation im Zusammenhang mit dem Speichersubsystem 12 zu
erhalten. Zusätzlich kann
die Speicherverwaltungseinheit 14 mehrere Überprüfungsoperationen
durchführen,
einschließlich
der Überprüfung zur
Bestimmung, ob sich die Seite im Speichersubsystem 12 befindet
oder nicht, ob das Anwendungsprogramm Zugriffserlaubnis auf die
Seite hat oder nicht (das heißt,
Daten auszulesen und Daten hineinzuschreiben), und ob die angeforderte
Seite in dem virtuellen Adressraum eine gültige Seite ist oder nicht,
und dergleichen. Wenn die Speicherverwaltungseinheit 14 eine negative
Bestimmung bei der Überprüfungsoperation
durchführt,
das heißt,
wenn sie beispielsweise bestimmt, dass sich die Seite nicht im Speichersubsystem 12 befindet,
dass das Anwendungsprogramm nicht über die geeignete Zugriffserlaubnis
verfügt,
oder wenn sie bestimmt, dass die angeforderte Seite der Seite des
virtuellen Adressraums im virtuellen Adressraum des Anwendungsprogramms
keine gültige
Seite ist, kann sie eine ZUGRIFFSFEHLER-Meldung erzeugen, die der
Mikroprozessor 11 empfangen und bei der Durchführung der ausgewählten Fehlerbehandlungsoperationen
verwenden kann.
-
Bei
einer Ausführungsform
umfasst ein Mikroprozessor 11, der für das System 10 nützlich ist,
einen Mikroprozessor, der gemäß der Architektur
SPARC Version 9 konstruiert ist, die in The SPARC Architecture Manual
Version 9 (Prentice-Hall, 1994) von der SPARC International, Inc
[David L. Weaver und Tom Germond (Hg.)], (im Folgenden als "SPARC Architekturhandbuch,
Version 9" bezeichnet)
beschrieben ist. Der Mikroprozessor 11 umfasst im Allgemeinen
eine Anzahl von Elementen, einschließlich eines Registersatzes 20,
einer oder mehrerer Funktionseinheiten 21, einer Busleitungsschnittstelle 22 und
eines Steuerschaltkreises 23. Der Steuerschaltkreis 23 steuert
die Verarbeitungsoperationen, die von dem Mikroprozessor 11 unter
der Steuerung von Befehlen, die das Programm bereitstellt, durchgeführt werden.
Unter der Steuerung des Steuerschaltkreises 23 ruft die
Busleitungsschnittstelle 22 in Zusammenwirkung mit der
Speicherverwaltungseinheit 14 im Allgemeinen Befehle und
Daten ab, und zwar von dem Speichersubsystem 12 oder von
Datenspeicherelementen, die von bestimmten Eingabe-/Ausgabesubsystemen 13 zur
Verarbeitung verwaltet werden, und lädt die abgerufenen Daten in
Register, die sich in dem Registersatz 20 befinden. Ebenfalls
führen
die Funktionseinheiten 21 unter der Steuerung des Steuerschaltkreises 23 logische,
Ganzzahl- und Fließkomma-Arithmetik- und
andere Verarbeitungsoperationen im Zusammenhang mit Daten durch,
denen der Steuerschaltkreis 23 ermöglicht, vom Registersatz 20 zu
diesen übertragen
zu werden, um verarbeitete Daten zu erzeugen, die zur Speicherung
zum Registersatz 20 übertragen
werden. Der Steuerschaltkreis 23 kann der Busleitungsschnittstelle 22,
die ebenfalls mit der Speicherverwaltungseinheit 14 zusammenwirkt,
ebenfalls ermöglichen,
verarbeitete Daten vom Registersatz 20 zur Speicherung
zum Speichersubsystem 12 oder zu Datenspeicherelementen,
die von bestimmten Eingabe-/Ausgabesubsystemen 13 verwaltet
werden, zu übertragen.
Die Architektur SPARC Version 9 ist eine Klasse von Architekturen,
die als "Laden-Speichern"-Architekturen bezeichnet werden,
bei denen Speicherzugriffsoperationen, bei denen Daten aus beispielsweise
dem Speichersubsystem 12 oder Registern (nicht gezeigt)
in den Eingabe-/Ausgabesubsystemen 13 abgerufen oder in
diesen gespeichert werden, unter Verwendung von jeweils "Laden"- und "Speichern"-Befehlen behandelt werden, die im Allgemeinen
im Singular als "Speicherzugriffsbefehl" und im Plural als "Speicherzugriffsbefehle" bezeichnet werden.
-
Die
Erfindung stellt eine Anordnung bereit, bei der ein Mikroprozessor,
wie beispielsweise der Mikroprozessor 11, der erfordert,
dass sich Speicherreferenzen auf synchronisierten Adressgrenzen
befinden, und bei dem nicht synchronisierte Speicherreferenzen,
das heißt,
Speicherreferenzen, die sich nicht auf synchronisierten Adressgrenzen
befinden, eine Ausnahme auslösen
würden,
befähigt
wird, einen Mikroprozessor, wie beispielsweise einen Mikroprozessor
der Familie Intel x86, der nicht erfordet, dass Speicherreferenzen
derartig synchronisiert sind, effizient zu emulieren. Synchronisierte
und nicht synchronisierte Speicherreferenzen werden im Allgemeinen
im Zusammenhang mit 2 und 3 beschrieben.
Unter anfänglicher
Bezugnahme auf 2 zeigt diese Figur einen Wortspeicherplatz 50,
der beispielsweise ein Platz im Speichersubsystem 12 sein
kann, und ein Register 51, das ein Register im Registersatz 20 umfasst.
Der Speicherplatz 50 umfasst vier Byte-Speicherplätze 50(0) bis 50(3),
von denen jeder mit einer jeweiligen Adresse "0" bis "3" identifiziert ist. Das Register 51 umfasst
Vier-Byte-Speicherplätze
B0 bis B3. Wenn
der Mikroprozessor 11 eine Speicherzugriffsoperation, wie
beispielsweise eine "Wort-Laden"-Operation initiiert,
um ein Datenelement, das die vier Bytes in Speicherplatz 50 umfasst,
abzurufen, wird der Inhalt der Byte-Speicherplätze 50(0) bis 50(3) des
Speicherplatzes 50 zu den entsprechenden Byte-Speicherplätzen B0 bis B3 des Registers 51 übertragen.
Für eine solche
Speicherzugriffsoperation würde
der Mikroprozessor 11 den Wert "0" als
Adresse verwenden, welche die "Basis" des Speicherplatzes 50 ist.
-
Wenn
der Mikroprozessor 11 andererseits eine Speicherzugriffsoperation,
wie beispielsweise eine "Halbwort-Laden"-Operation (wobei
ein "Halbwort" ein zwei-Byte-Datenelement
ist) initiiert, wird der Inhalt der Byte-Speicherplätze 50(i) bis 50(i+1) in
die entsprechenden Byte-Speicherplätze B0 und B1 des Registers 51 übertragen,
wobei der Index "i" der Adresse entspricht,
die der Mikroprozessor 11 für die Operation verwenden würde. Wenn
der Wert "i", das heißt, die
Adresse, die für
die Speicherzugriffsoperation verwendet wird, "0" oder "2" ist, ist die Referenz "synchronisiert". Wenn der Wert "i" andererseits "1" oder "3" ist, ist die Referenz nicht synchronisiert. Ähnliche
Operationen treten im Zusammenhang mit einer "Halbwort-Speichern"-Operation auf, wobei der Inhalt der
Byte-Speicherplätze
B0 und B1 des Registers 51 in
die Byte-Speicherplätze 50(i) und 50(i+1)
des Speicherplatzes 50 übertragen
wird. Bei der Speicherzugriffsoperation, die durch den Pfeil 52 dargestellt
wird, wie in 2 gezeigt, die eine Speicherzugriffsoperation
mit einer nicht synchronisierten Speicherreferenz, bei der die Adresse "1" ist, darstellt, würde das Datenelement während einer
Ladeoperation somit in die Byte-Plätze B0 und
B1 des Registers 51 oder während einer
Speicheroperation von den Byte-Plätzen B0 und
B1 des Registers 51 übertragen.
-
Wenn
der Mikroprozessor eine Speicherzugriffsoperation, wie beispielsweise
eine „Byte-Laden"-Operation initiiert,
wird der Inhalt des Speicherplatzes 50(i) des Weiteren
in den Byte-Speicherplatz B0 des Registers 51 übertragen,
wobei „i" der Adresse entspricht,
die der Mikroprozessor 11 für die Operation verwenden würde. Daher
sind Speicherzugriffsoperationen als solches synchronisiert, ungeachtet
des Wertes „i", der als Adresse
verwendet wird. Ähnliche
Operationen treten im Zusammenhang mit einer „Byte-Speichern"-Operation auf, wobei der Inhalt von
Byte-Speicherplatz B0 des Registers 51 in
den Byte-Speicherplatz 50(i) des Speicherplatzes 50 übertragen
wird.
-
Nicht
synchronisierte Speicherreferenzen können ebenfalls im Zusammenhang
mit einer „Wort-Laden"- oder „Wort-Speichern"-Speicherzugriffsoperation
auftreten, wie im Zusammenhang mit 3 beschrieben
wird. 3 zeigt zwei aufeinanderfolgende Wortspeicherplätze 60 und 61 beispielsweise
im Speichersubsystem 12 und ein Register 62 im
Registersatz 20. Der Wortspeicherplatz 60 umfasst
Vier-Byte-Speicherplätze 60(1) bis 60(3),
die jeweils durch eine Adresse „0" bis „3" gekennzeichnet sind. Ebenso umfasst
der Wortspeicherplatz 61 Vier-Byte-Speicherplätze 61(4) bis 61(7),
die jeweils durch eine Adresse „4" bis „7" gekennzeichnet sind. Das Register 62 umfasst
vier Byte-Speicherplätze
B0 bis B3. Wenn
der Mikroprozessor 11 eine Speicherzugriffsoperation, wie
beispielsweise eine „Wort-Laden"-Operation, initiiert,
wird der Inhalt von vier aufeinanderfolgenden Byte-Speicherplätzen, die
mit dem Byte-Speicherplatz mit der Adresse „i" beginnen, welche der Adresse entspricht,
die der Mikroprozessor 11 für die Operation verwenden würde, in
die Byte-Speicherplätze
B0 bis B3 des Registers 62 übertragen.
Wenn der Wert "i", das heißt, die
Adresse, die für
die Speicherzugriffsoperation verwendet wird, "0" oder "4" ist, ist die Referenz "synchronisiert". Wenn der Wert "i" andererseits einen anderen Wert aufweist,
ist die Referenz nicht synchronisiert. Ähnliche Operationen treten
im Zusammenhang mit einer "Wort-Speichern"-Operation auf, wobei
der Inhalt der Byte-Speicherplätze
B0 bis B3 des Registers 62 in
vier aufeinanderfolgende Byte-Speicherplätze des Speicherplatzes 60 übertragen
wird, welcher mit dem Byte-Speicherplatz beginnt, der mit der Adresse "i" identifiziert ist. Bei der Speicherzugriffsoperation,
die durch den Pfeil 63 dargestellt wird, wie in 3 gezeigt,
die eine Speicherzugriffsoperation mit einer nicht synchronisierten
Speicherreferenz, bei der die Adresse "3" ist,
darstellt, wird das Datenelement während einer Ladeoperation somit
von den Byte-Speicherplätzen 60(3) und 61(1) bis 61(2) in
die Byte-Plätze B0 bis B3 des Registers 51 oder
während
einer Speicheroperation von den Byte-Plätzen B0 bis
B3 des Registers 51 übertragen.
-
Unter
nochmaliger Bezugnahme auf 1 wird der
Mikroprozessor 11, der erfordert, dass Speicherreferenzen
synchronisiert sind, hierin als „Zentral"-Mikroprozessor 11 bezeichnet,
und der Mikroprozessor, der nicht synchronisierte Speicherreferenzen
ermöglicht,
wird hierin als „emulierter" Mikroprozessor bezeichnet. Wenn
der Mikroprozessor 11 während
der Verarbeitung eines Programms einen Speicherzugriffsbefehl antrifft, der
eine nicht synchronisierte Speicherreferenz enthält, würde der Mikroprozessor 11 normalerweise
einen Ausnahmebehandler aufrufen, um die Ausnahme zu behandeln,
und typischerweise benötigt
die Operation des Aufrufens, der Verarbeitung und der Rückkehr von
einem Ausnahmebehandler ein beträchtliches
Ausmaß an
Verarbeitungszeit. Demgemäß kann die
Erfordernis, dass der Mikroprozessor 11 einen Ausnahmebehandler
zur Behandlung von Befehlen aufrufen muss, die nicht synchronisierte
Speicherreferenzen enthalten, eine ineffiziente Emulation des emulierten
Mikroprozessors zur Folge haben. Die Erfindung stellt eine Anordnung bereit,
die die Anzahl von Malen reduzieren kann, die der Mikroprozessor 11 benötigen würde, um
einen Ausnahmebehandler für
solche Befehle aufzurufen, insbesondere wenn solch ein Befehl mehr
als eine ausgewählte
Anzahl von Malen angetroffen wird, was auftreten kann, wenn sich
der Befehl in einer Schleife befindet. Wenn der Mikroprozessor 11 als
Zentralmikroprozessor, der einen emulierten Mikroprozessor emuliert,
gemäß der Erfindung
auf einen Befehl eines Programms, das emuliert wird, trifft, der
eine nicht synchronisierte Speicherreferenz aufweist, wird ein Code-Generator
aktiviert, um zusätzlichen
Code für
das Programm, das emuliert wird, zu erzeugen, der anstelle des Befehls
ausgeführt
wird. Der zusätzliche
Code ermöglicht
dem Mikroprozessor 11, die Operationen auszuführen, die
von dem Ausnahmebehandler bei der Behandlung des Befehls ausgeführt würden. Da
der zusätzliche
Code als Teil der Programmemulation verarbeitet wird, braucht kein
Ausnahmebehandler aufgerufen zu werden, wodurch die Effizienz der
Emulation verbessert werden kann.
-
Insbesondere
stellt die Erfindung eine Anordnung bereit, die dem Zentralmikroprozessor 11 ermöglicht,
Operationen zu emulieren, die von einem emulierten Mikroprozessor
(nicht gezeigt) bei der Verarbeitung eines „originalen" Programms 33 durchgeführt werden,
das für
den emulierten Mikroprozessor geschrieben wurde, während ein „übersetztes" Programm 31,
das von einem Übersetzungsprogramm 32 erzeugt
wird, in einer Ausführungsumgebung 30 verarbeitet
wird, und insbesondere stellt die Erfindung eine Anordnung bereit, die
dem Mikroprozessor 11 ermöglicht, die Art und Weise effizient
zu emulieren, in der der emulierte Mikroprozessor Speicherzugriffsbefehle
behandelt, die nicht synchronisierte Speicherreferenzen verwenden.
Gemäß der Erfindung
ruft der Zentralmikroprozessor 11 zuerst einen Ausnahnebehandler 36 auf,
um die Ausnahme zu behandeln und den Speicherzugriffsbefehl effektiv
zu emulieren, wenn er erstmals auf einen Speicherzugriffsbefehl
in dem übersetzten
Programm 31 trifft, der eine nicht synchronisierte Speicherreferenz
enthält.
-
Wenn
zudem der Ausnahmebehandler 36 zur Behandlung der Ausnahme
erstmalig aufgerufen wird, richtet der Ausnahmebehandler 36 einen
Zähler 37 ein,
der zu dem Speicherzugriffsbefehl gehört, und initialisiert diesen.
Bei jedem nachfolgenden Mal erhöht
der Ausnahmebehandler 36, wenn er (das heißt, der
Ausnahmebehandler) für
denselben Befehl, beispielsweise in einer Schleife, aufgerufen wird,
den Zähler 37 und vergleicht
den Zählwert,
der von dem Zähler 37 bereitgestellt
wird, mit einem vorherbestimmten Grenzwert. Wenn der Zählwert,
der von dem Zähler 37 bereitgestellt
wird, eine vorherbestimmte Übereinstimmung
mit dem Grenzwert aufweist (beispielsweise, wenn der Zählwert gleich
oder größer als
der Grenzwert ist), befähigt der
Ausnahmebehandler 36 einen Code-Generator 35, der ebenfalls
als Teil der Ausführungsumgebung 30 bereitgestellt
ist, zusätzlichen
Code zu erzeugen, der als Teil des übersetzten Programms verarbeitet
wird, um den Speicherzugriffsbefehl effizient zu emulieren und die
nicht synchronisierte Speicherreferenz zu behandeln. Anstatt den
Speicherzugriffsbefehl zu verarbeiten, wird danach der zusätzliche
Code ausgeführt,
wodurch der Speicherzugriffsbefehl ohne die Notwendigkeit des Aufrufens
des Ausnahmebehandlers 36 emuliert wird. Eine Emulation
des Speicherzugriffsbefehls auf diese Weise kann die Verarbeitungseffizienz
verbessern, da nicht der Zusatz des Aufrufens und der Rückkehr vom
Ausnahmebehandler erforderlich ist. Es wird darauf hingewiesen,
dass kein Zähler 37 bereitgestellt
werden muss, wenn der zusätzliche
Code erzeugt werden muss, wenn der Ausnahmebehandler 36 erstmalig
aufgerufen wird.
-
Ein
spezifisches Beispiel hilft beim Verständnis der Operation der Erfindung.
In diesem Beispiel wird angenommen, dass das übersetzte Programm
31 Programmcode
im folgenden Codesegment A enthält: Codesegment
A
wobei die Register r1 und
r2 Register im Registersatz
20 des Mikroprozessors sind.
Der Programmcode, der in Codesegment A mit "misc code" gekennzeichnet ist, entspricht Programmcode,
der sich im Fall von Zeile (
1) vor dem Code in Zeile (
2)
in dem übersetzten
Programm
31 befindet und sich im Fall von Zeile (
3)
hinter dem Code in Zeile (
2) befindet.
-
Der
Befehl in Zeile (2) von Codesegment A initiiert eine Speicherzugriffsoperation,
um ein Halbwortdatenelement aus dem Speicherplatz abzurufen, dessen
Adresse in Register r1 angegeben ist, und es in das Register r2
zu laden. Wenn die Adresse in Register r1 geradzahlig ist, befindet
sich das Datenelement in einem synchronisierten Zustand, wobei die
Speicherzugriffsoperation in diesem Fall fortfahren kann, ohne dass
eine Ausnahme eintritt. Wenn die Adresse in Register r1 jedoch ungeradzahlig
ist, ist das Datenelement nicht synchronisiert. Der Ausnahmebehandler 36 wird
aufgerufen, um den Befehl zu emulieren, wodurch der Mikroprozessor 11 effektiv
befähigt
wird, die Reihe von Befehlen in Codesegment B auszuführen.
-
-
Bei
der Durchführung
der Operationen, die durch die Zeilen (1) und (2)
dargestellt sind, ruft der Mikroprozessor 11 unter der
Steuerung des Ausnahmebehandlers 36 Datenbytes ab, die
einen entsprechenden Abschnitt des Datenelements von dem Byte-Speicherplatz
umfassen, der durch den Adresswert identifiziert ist, der in Register
r1 (Zeile (1)) enthalten ist, und die einen entsprechenden
Abschnitt des Datenelements von dem nächsten Speicherplatz umfassen,
das heißt,
von dem Byte-Speicherplatz, der durch der Adresswert identifiziert
ist, der in Register r1 enthalten und um 1 inkrementiert ist (Zeile
(2)), und der Mikroprozessor 11 lädt die abgerufenen
Bytes in die Register r2 und r3. Jedes Register in dem Registersatz 20 umfasst
eine vorherbestimmte Anzahl von Byte-Datenspeicherplätzen <BN...B0>,
und die Befehle in den Zeilen (1) und (2) ermöglichen
dem entsprechenden abgerufenen Byte, in dem Byte-Speicherplatz B0 niedriger Ordnung gespeichert zu werden.
Darüber
hinaus enthalten die anderen Byte-Datenspeicherplätze <BN...B1>> in jedem Register
r2 und r3 Bits, die jeweils den Binärwert "Null" aufweisen.
-
Bei
der Durchführung
der Operation, die durch Zeile (3) in Codesegment B dargestellt
ist, verschiebt der Mikroprozessor 11 weiterhin unter der
Steuerung des Ausnahmebehandlers 36 das abgerufene Byte
von dem Byte-Speicherplatz B0 niedriger
Ordnung zum nächsten
Byte-Speicherplatz
B1 in dem Register r2 und lädt Bits,
die den jeweiligen Wert "Null" aufweisen, in den
Byte-Speicherplatz B0 niedriger Ordnung.
Bei der Duchführung
der Operation, die in Zeile (4) dargestellt ist, führt der
Mikroprozessor 11 eine "Inklusiv"-ODER-Operation des
Inhalts der Register r2 und r3 durch und speichert das Ergebnis
im Register r2. Diese Operation hat effektiv zur Folge, dass der
Byte-Speicherplatz B0 niedriger Ordnung
von Register r2 den Inhalt des Byte-Speicherplatzes B0 niedriger
Ordnung von Register r3 erhält,
da die anderen Byte-Speicherplätze <BN...B1> alle
den logischen Wert "Null" enthalten, wodurch
die entsprechenden Byte-Speicherplätze <BN...B1> des
Registers r2 durch die "Inklusiv"-ODER-Operation unverändert bleiben.
Demgemäß hat der
Mikroprozessor 11 nach der Durchführung der Operationen, die
im Zusammenhang mit dem Codesegment B beschrieben wurden, das nicht
synchronisierte Halbwortdatenelement (Zwei-Byte-Datenelement) in dem Speicherplatz im
Speichersubsystem 12, das durch die Adresse in Register
r1 identifiziert ist, konstruiert, indem die beiden Abrufoperationen (Zeile
(1) und (2)) durchgeführt wurden, um entsprechende
Abschnitte des Halbworts zu erhalten, und entsprechende Operationen
(Zeile (3) und (4)) durchgeführt wurden, um das Halbwort
aus den entsprechenden Abschnitten effektiv herzustellen.
-
Es
wird darauf hingewiesen, dass entsprechende Operationen, wie oben
im Zusammenhang mit Codesegment B beschrieben, im Zusammenhang mit
einer Speicheroperation durchgeführt
werden können, um
ein nicht synchronisiertes Halbwort in einem Speicherplatz im Speichersubsystem 12 zu
speichern. Das heißt,
dass der Mikroprozessor 11 ein Zwei-Byte-Datenelement in ein Register, wie
beispielsweise das, das in den Byte-Speicherplätzen B1 und
B0 des Registers r2 enthalten ist, in ein
Register, wie beispielsweise das Register r3, kopieren kann, das
nach rechts verschoben ist, so dass der Inhalt des Byte-Speicherplatzes
B0 niedriger Ordnung des Registers r3 dem
Inhalt von Byte-Speicherplatz B1 von Register
r2 entspricht. Danach kann der Mikroprozessor unter Verwendung der
Adresse in Register r1 eine "Byte"-Speichern Speicheroperation durchführen, um
den Inhalt von Byte-Platz B0 von Register
r2 in dem Speicherplatz im Speichersubsystem 12, der durch
das Register r1 identifiziert ist, zu speichern, und der Mikroprozessor
kann unter Verwendung der inkrementierten Adresse in Register r1
eine zweite "Byte"-Speichern Speicheroperation
durchführen,
um den Inhalt von Byte-Platz B0 von Register
r3 in dem Speicherplatz im Speichersubsystem 12, der durch
die inkrementierte Adresse identifiziert ist, zu speichern.
-
Weiterhin
wird darauf hingewiesen, dass der Ausnahmebehandler 36 den
Mikroprozessor 11 befähigen
kann, ähnliche
Operationen im Zusammenhang mit einer Lade- oder Speicheroperation
im Zusammenhang mit einem Datenwort, das ein Vier-Byte-Wort umfasst,
durchzuführen.
Der Ausnahmebehandler 36 könnte den Mikroprozessor 11 befähigen, vier
Speicherzugriffsoperationen durchzuführen, von denen jede entsprechende
Bytes des Worts abruft oder speichert. Für eine Ladeoperation würde der
Ausnahmebehandler 36 den Mikroprozessor 11 befähigen, die
entsprechenden aufgerufenen Bytes in entsprechende Register zu kopieren, Verschiebungsoperationen
durchzuführen,
so dass sich die Bytes in den entsprechenden Byte-Speicherplätzen B3 bis B0 der entsprechenden
Register befinden, und eine ODER-Operation durchzuführen, um
den Inhalt der Register mit Hilfe der ODER-Operation in ein einzelnes Register
zu übertragen,
wobei das einzelne Register das aufgerufene Wort enthält.
-
Unter
Bezugnahme auf 3 kann eine Speicherzugriffsoperation
jedoch im Zusammenhang mit einer nicht synchronisierten Wortspeicherreferenz
effizienter erzeugt werden, wenn zwei synchronisierte Halbwortzugriffe
verwendet werden, beispielsweise falls die Speicherreferenz als
Adresse „2" oder „6" verwendet, oder
wenn ein einzelner Halbwortzugriff und Zwei-Byte-Zugriffe verwendet
werden, beispielsweise falls die Speicherreferenz als Adresse „1", „3", „5" oder „7" verwendet. Wenn
somit die Speicherzugriffsoperation eine Ladeoperation ist, für die die
Speicherreferenz „2" als Adresse verwendet,
kann der Mikroprozessor 11 unter der Steuerung des Ausnahmebehandlers 36 zwei
Halbwortladeoperationen aktivieren, die unter Verwendung der Adressen „2" und „4" durchgeführt werden,
von denen jede eine synchronisierte Referenz ist, wobei die abgerufenen
Halbwörter
in entsprechenden Registern des Registersatzes 20 gespeichert
werden. Danach kann der Ausnahmebehandler 36 ermöglichen,
dass der Inhalt des Registers, das das Halbwort enthält, das unter
Verwendung der Adresse „4" abgerufen wurde,
in die Byte-Speicherplätze
B2 und B3 verschoben
wird und die Inhalte der beiden Register mit Hilfe einer ODER-Operation
zusammen angeordnet werden. Wenn die Speicherzugriffsoperation eine
Speicheroperation ist, für
die die Speicherreferenz „2" als Adresse verwendet, kann
der Ausnahmebehandler 36 entsprechend ermöglichen,
dass der Mikroprozessor den Inhalt des Registers, das das Wort enthält, das
in einem zweiten Register gespeichert werden soll, kopiert, dass
der Mikroprozessor den Inhalt des zweiten Registers verschiebt,
so dass die Bytes, die ursprünglich
in den Byte-Speicherplätzen
B3 und B2 enthalten
waren, sich jeweils in den Byte-Speicherplätzen B1 und
B0 befinden, und dass der Mikroprozessor
Halbwort-Speicheroperationen im Zusammenhang mit dem Inhalt der
beiden Register durchführt,
um die jeweiligen Halbwörter
in einem Speicherplatz zu speichern, der jeweils durch die Adressen „2" und „4" identifiziert ist.
-
Wenn
die Speicherzugriffsoperation eine Ladeoperation ist, für die die
Speicherreferenz „1" als Adresse verwendet,
kann der Ausnahmebehandler dem Mikroprozessor 11 andererseits
ermöglichen,
Folgendes auszuführen:
- (i) eine Byte-Laden-Operation unter Verwendung
von „1" als Adresse, um
das Byte in dem Speicherplatz abzurufen und es in einem ersten Register
zu speichern,
- (ii) eine Halbwort-Laden-Operation unter Verwendung der inkrementierten
Adresse „2" (das heißt, Adresse „1" um „1" inkrementiert, da
die erste Operation (i) für
ein Byte galt, das in einem einzelnen adressierten Speicherplatz
gespeichert war), um das Halbwort, das in diesem Speicherplatz beginnt,
abzurufen und es in einem zweiten Register zu speichern, und
- (iii) eine Byte-Laden-Operation unter Verwendung der weiter
inkrementierten Adresse „4" (das heißt, Adresse „2" um „2" inkrementiert, da
die zweite Operation (ii) für
ein Halbwort galt, das in zwei aufeinanderfolgenden Speicherplätzen gespeichert
ist) und sie in einem dritten Register speichern.
-
Danach
kann der Ausnahmebehandler 36 dem Mikroprozessor ermöglichen,
die Bytes in den entsprechenden Registern in die geeigneten Speicherplätze zu verschieben
und den Inhalt der Register mit Hilfe einer ODER-Operation zusammen
anzuordnen, um das Wort zu erzeugen. Der Ausnahmebehandler 36 kann
dem Mikroprozessor 11 ermöglichen, ähnliche Operationen durchzuführen, wenn
die nicht synchronisierte Speicherreferenz die Adresse „3", „5" oder „7" verwendet. Zusätzlich sind
Fachleuten Operationen ersichtlich, die von dem Ausnahmebehandler 36 im
Zusammenhang mit einer Speicheroperation ermöglicht werden. Des Weiteren
sind Fachleuten ebenfalls Operationen ersichtlich, die von dem Ausnahmebehandler
im Zusammenhang mit Laden- und Speicheroperationen im Zusammenhang
mit größeren Datenelementen
und/oder anderen Adressen ermöglicht
werden.
-
Gemäß der Erfindung
ermöglicht
der Ausnahmebehandler 36 zusätzlich zur Steuerung des Mikroprozessors 11 zur
Durchführung
der oben beschriebenen Operationen im Zusammenhang mit Codesegment
B dem Code-Generator 35 im Allgemeinen ebenfalls, Code
bereitzustellen, der unten im Zusammenhang mit Codesegment C beschrieben
ist (für
einen Halbwortladevorgang mit einer fehlsynchronisierten Speicherreferenz):
-
-
Der
Code, der in Zeile (1) und (3) von Codesegment
C mit „misc
code" gekennzeichnet
ist, entspricht dem originalen übersetzten
Programm 31 für
die entsprechend nummerierten Zeilen in Codesegment A des übersetzten
Programms 31. Der Code, der durch Zeile (4) bis
(7) gekennzeichnet ist, entspricht Codesegment B. Der Code
in Zeile (2), den der Code-Generator 35 gegen den Code
in Zeile (2) von Codesegment A des übersetzten Programms austauscht,
ermöglicht
dem Mikroprozessor 11, zum Befehl mit dem Etikett „Korrektur" abzuzweigen, der
dem ersten Befehl in Codesegment B entspricht, wodurch der Mikroprozessor 11 effektiv befähigt wird,
die Befehle in Codesegment B zu verarbeiten. Der Code in Zeile (7)
von Codesegment C ermöglicht
die letzte Operation, die oben in Zusammenhang mit Codesegment B
beschrieben ist, und der Befehl in Zeile (8) von Codesegment
C befähigt
den Mikroprozessor 11, zum Befehl des übersetzten Programmcodes abzuzweigen,
der mit „wiederaufnehmen" gekennzeichnet ist
und dem ersten Befehl in <misc
code> in Zeile (3)
des originalen übersetzten
Programmcodes 31 entspricht. Somit ersetzt der Code-Generator 35 den
Code in Zeile (2) und (4) bis (8) von
Codesegment C durch den Code in Zeile (2) von Codesegment
A in dem übersetzten
Programm 31.
-
Wenn
der Mikroprozessor 11 Codesegment C verarbeitet, was er
vornehmen kann, wenn das Codesegment A Teil einer Schleife ist,
würde er
(das heißt,
der Mikroprozessor 11) folglich Codesegment C ausführen, das
vom Code-Generator 35 erzeugt wird, was die Emulation des
ersetzten Befehls erleichtern würde, ohne
dass es nötig
ist, den Ausnahmebehandler 36 aufzurufen, anstatt auf einen
Befehl, wie beispielsweise den Befehl in Zeile (2) von
Codesegment A, zu stoßen,
der dazu führen
würde,
dass der Ausnahmebehandler 36 aufgerufen würde. Da
der Mikroprozessor 11 diese Operationen ohne die Notwendigkeit
des Aufrufes des Ausnahmebehandlers 36 durchführt, wird
die Verarbeitungseffizienz des übersetzten
Programms verbessert, da der Mikroprozessor 11 den Verarbeitungszusatz
vermeiden kann, der sonst durch den Aufruf des Ausnahmebehandlers 36 erforderlich
wäre.
-
Der
Code-Generator 35 kann ebenfalls entsprechenden Programmcode
für Speicheroperationen
und für
Wort- und Datenelemente anderer Größe erzeugen, wobei der spezifische
Code dafür
Fachleuten leicht ersichtlich ist.
-
Auf
diesem Hintergrund werden die detaillierten Operationen, die durch
den Ausnahmebehandler 36 und den Code-Generator 35 im
Zusammenhang mit der Erfindung ausgeführt werden, im Ablaufplan,
der in 4 gezeigt ist, beschrieben. Wenn der Mikroprozessor 11 unter
Bezugnahme auf 4 auf einen Speicherzugriffsbefehl
mit einer fehlsynchronisierten Speicherreferenz (Schritt 100)
trifft, während
er das übersetzte Programm 31 in
der Ausführungsumgebung 30 verarbeitet,
ruft er (das heißt,
der Mikroprozessor 11) den Ausnahmebehandler 36 auf,
um die Verarbeitung des Speicherzugriffsbefehls (Schritt 101)
zu steuern. Als Teil des Aufrufs wird der Ausnahmebehandler 36 mit
Parametern versorgt, die Folgendes umfassen: die Speicheradresse
des Speicherzugriffsbefehls in dem übersetzten Programm 31 mit
der nicht synchronisierten Speicherreferenz (die dem aktuellen Wert
des Programmzählers
(nicht gezeigt) des Mikroprozessors entspricht), die Speicheradresse
des nächsten
Befehls in dem übersetzten
Programm, die auf den Speicherzugriffsbefehl folgt (und die normalerweise
dem aktuellen Wert des Programmzählers 24 des
Mikroprozessors entspricht, der um einen vorherbestimmten Wert inkrementiert
ist), und die Speicheradresse des Datenelements, das die fehlsynchronisierte
Speicherreferenz verursacht hat.
-
Nachdem
der Ausnahmebehandler 36 in Schritt 101 aufgerufen
wurde, bestimmt er anfänglich
(genauer ausgedrückt,
befähigt
er den Mikroprozessor 11 zu bestimmen), ob der Speicherzugriffsbefehl
von einem Typ ist, für
den die Erzeugung einer „Korrekturroutine", wie beispielsweise
der, die oben in Zusammenhang mit Codesegment C (Schritt 102)
beschrieben ist, ermöglicht
werden muss. Bei einer Ausführungsform
kann der Ausnahmebehandler 36 im Zusammenhang mit jedem
Speicherzugriffsbefehl verwendet werden, der eine nicht synchronisierte
Speicherreferenz aufweist, und nicht nur für Befehle, die im Zusammenhang
mit dem übersetzten
Programm 31 bereitgestellt werden, und der Ausnahmebehandler 36 ermöglicht die
Erzeugung einer Korrekturroutine für Befehle, die im Zusammenhang
mit dem übersetzten
Programm 31 bereitgestellt werden. Wenn der Ausnahmebehandler 36 in
Schritt 102 bestimmt, dass der Speicherzugriffsbefehl nicht
von einem Typ ist, für
den die Erzeugung einer „Korrekturroutine" ermöglicht werden
muss, geht er zu Schritt 103 über, bei dem er den Mikroprozessor 11 befähigt, eine
vorherbestimmte Ausnahmeverarbeitungsoperation durchzuführen. Die
vorherbestimmte Ausnahmeverarbeitungsoperation hängt von dem jeweiligen Verfahren ab,
das für
die Behandlung von Speicherzugriffsbefehlen mit nicht synchronisierten
Speicherreferenzen ausgewählt
wurde und das beispielsweise Folgendes umfassen kann: Durchführen der
Operationen, die oben im Zusammenhang mit Codesegment B beschrieben
sind, Beenden des Programms, das den Befehl enthielt usw.
-
Wenn
der Ausnahmebehandler 36 unter nochmaliger Bezugnahme auf
Schritt 102 bei diesem Schritt bestimmt, dass der Speicherzugriffsbefehl
von einem Typ ist, für
den die Erzeugung einer Korrekturroutine ermöglicht werden muss, bestimmt
er anfänglich,
ob für
den jeweiligen Speicherzugriffsbefehl ein Ausnahmezähler 37 existiert
(Schritt 110), und falls dies nicht der Fall ist, richtet
er einen Ausnahmezähler 37 dafür ein und
initialisiert diesen (Schritt 111). Wenn der Ausnahmebehandler 36 andererseits
bestimmt, dass ein Ausnahmezähler 37 für den jeweiligen
Speicherzugriffsbefehl existiert, inkrementiert er den Ausnahmezähler (Schritt 112).
Nach den Schritten 111 oder 112 bestimmt der Ausnahmebehandler 36,
ob der Wert, der von dem Ausnahmezähler 37 bereitgestellt
wurde, größer als
ein vorherbestimmter Grenzwert ist (Schritt 113). Wenn der
Ausnahmebehandler 36 in Schritt 113 eine negative
Bestimmung macht, steuert er den Mikroprozessor 11 so,
dass dieser die Operationen durchführt, die oben im Zusammenhang
mit Codesegment B beschrieben wurden, um dem Datenelement zu ermöglichen,
abgerufen und während
einer Ladeoperation konstruiert zu werden oder während einer Speicheroperation
disassembliert und gespeichert zu werden, wodurch der Befehl emuliert
wird (Schritt 114), und der Ausnahmebehandler 36 steuert
den Mikroprozessor 11 so, dass er die Steuerung an das übersetzte
Programm zurückgibt,
und zwar bei dem Befehl, der auf den Befehl folgt, der die Ausnahme
verursacht hat, und unter Verwendung der Speicheradresse des nächsten Befehls
in dem übersetzten
Programm, der auf den Speicherzugriffsbefehl (Schritt 115)
folgt.
-
Wenn
der Ausnahmebehandler 36 andererseits bei Schritt 113 eine
positive Bestimmung macht, befähigt
er den Code-Generator 35, den „Korrekturcode", wie beispielsweise
den, der oben im Zusammenhang mit Codesegment C beschrieben wurde,
zu erzeugen und den erzeugten Code in das übersetzte Programm einzufügen (Schritt 116).
Bei dieser Operation empfängt
der Code-Generator 35 die Speicheradressen der Befehle,
die die Ausnahme verursacht haben, und des nächsten Befehls sowie die Speicheradresse
der nicht synchronisierten Speicherreferenz. Der Code-Generator 35 kann
die Speicheradresse des Befehls verwenden, der die Ausnahme verursacht
hat, um den Typ des Befehls zu bestimmen, das heißt, ob es
sich um einen Ladebefehl oder einen Speicherbefehl handelte und
ob er für
ein Halbwort, ein Wort usw. galt. Zusätzlich kann der Code-Generator
die Speicheradresse der nicht synchronisierten Speicherreferenz
verwenden, um die Art und Weise zu bestimmen, in der die Referenz
nicht synchronisiert war. Aus diesen Informationen kann der Code-Generator 35 leicht
die jeweiligen auszuführenden
Operationen sowie den zu erzeugenden Code zur Durchführung dieser
Operationen bestimmen. Bei einer Ausfühungsform ist der Code-Generator 35 im
Wesentlichen mit einem Satz Vorlagen oder Makros versehen, die den
Programmcode darstellen, der für
jeden Typ von Operation und Datenelement erforderlich ist, und die
die An und Weise darstellen, in der die Referenzadresse fehlsynchronisiert
war, wobei der Code assembliert und zum übersetzten Programm 31 als
Korrekturcode hinzugefügt
werden kann und den erforderlichen Verzweigungsbefehl zum Korrekturcode
und den Rückkehrverzweigungsbefehl
vom Korrekturcode bereitstellt.
-
Nachdem
der Code-Generator 35 die Operationen durchgeführt hat,
die oben im Zusammenhang mit Schritt 116 beschrieben wurden,
gibt er die Steuerung an den Ausnahmebehandler 36 zurück (Schritt 120), wonach
der Ausnahmebehandler 36 die Steuerung dem übersetzten
Programm 31 zurückgeben
kann (Schritt 121). Bei der Rückkehroperation verwendet der
Ausnahmebehandler 36 die Speicheradresse des Speicherzugriffsbefehls,
der verursacht hat, dass der Ausnahmebehandler 36 aufgerufen
wurde, und die dem Ausnahmebehandler 36 bereitgestellt
wurde, als er aufgerufen wurde. Demgemäß gibt der Ausnahmebehandler 36 die
Steuerung an dem Punkt in dem übersetzten
Programm 31 zurück,
an dem der exzeptionelle Zustand erfasst wurde, zur Veranschaulichung
an dem Verzweigungsbefehl in Zeile (3) von Codesegment
C. Wenn der Abschnitt des übersetzten
Programms 31, der zuvor in dem Speicherzugriffsbefehl enthalten
war, der die nicht synchronisierte Speicherreferenzausnahme verursacht
hat, noch einmal verarbeitet wird, was auftreten kann, wenn sich
der Speicherzugriffsbefehl in einer Schleife befindet, wird, nachdem
dem übersetzten
Programm 31 die Steuerung zurückgegeben wurde, der Korrekturcode
in Zeile (4) bis (8) anstelle des Speicherzugriffsbefehls
verarbeitet, wodurch die Notwendigkeit des Aufrufs des Ausnahmebehandlers 36 vermieden
werden kann.
-
Die
Erfindung bietet eine Anzahl von Vorteilen. Insbesondere ermöglicht sie
die Erzeugung von Code zur Behandlung verschiedener Zustandstypen,
die andernfallls den Aufruf eines Ausnahmebehandlers erfordern würden, wodurch
der Zusatz vermieden wird, der durch einen Aufruf des Ausnahmebehandlers 36 angetroffen
würde.
Demgemäß ermöglicht die
Erfindung die Erzeugung eines übersetzten
Programms 31, ausgehend von einem ursprünglichen Programm 33 unter
Verwendung von Code, wie beispielsweise Codesegment A, der im Allgemeinen
effizient ausgeführt
werden kann, es sei denn, ein exzeptioneller Zustand, wie beispielsweise
eine nicht synchronisierte Speicherreferenz, wird angetroffen, der
den Aufruf eines Ausnahmebehandlers erforderlich macht. Nur dann,
wenn ein exzeptioneller Zustand tatsächlich bei der Verarbeitung
des übersetzten
Code 31 angetroffen wird, wird Code, wie beispielsweise
Codesegment C, gegen den Befehl ausgetauscht, der den exzeptionellen
Zustand verursacht hat; der Ersatzcode ist weniger effizient, jedoch
vermeidet er die Notwendigkeit, danach den Ausnahmebehandler für den Befehl
aufzurufen, der den exzeptionellen Zustand verursacht hat.
-
Es
wird darauf hingewiesen, dass eine Anzahl von Modifikationen an
der Erfindung, wie sie oben beschrieben ist, vorgenommen werden
können.
Wenn der Korrekturcode beispielsweise immer erzeugt werden muss,
wenn eine Ausnahme erzeugt wird, können der Ausnahmebehandler 36 und
der Code-Generator 35 im Wesentlichen zu einer einzelnen
Komponente kombiniert werden, die aufgerufen wird, um den Korrekturcode zu
erzeugen, wenn die Ausnahme erzeugt wird. In diesem Fall und unter
Bezugnahme auf 4 können Operationen direkt von
Schritt 101 zu 110 fortfahren, da die Schritte 102 und 103 nicht
ausgeführt
werden müssen.
-
Wenn
der Ausnahmebehandler 36 des Weiteren die Erzeugung von
Korrekturcode ermöglichen
muss, wenn die Ausnahme erstmalig erzeugt wird, wird darauf hingewiesen,
dass der Ausnahmezähler 37 nicht
bereitgestellt zu werden braucht.
-
Zusätzlich kann
die Erfindung im Zusammenhang mit einer Anzahl von Typen von Ausnahme-
oder ungewöhnlichen
Zuständen
verwendet werden, die im Zusammenhang mit der Verarbeitung von Programmen auftreten
können.
Des Weiteren kann die Erfindung zusätzlich zu Programmen, die mit
Emulation im Zusammenhang stehen, im Zusammenhang mit einer Vielzahl
von Programmen und Programmierumgebungen verwendet werden.
-
Es
wird darauf hingewiesen, dass ein System gemäß der Erfindung komplett oder
teilweise aus Spezial-Hardware oder einem Mehrzweck-Computersystem
oder jeder beliebigen Kombination daraus konstruiert werden kann,
wobei jeder Abschnitt davon durch ein geeignetes Programm gesteuert
werden kann. Jedes Programm kann in herkömmlicher Weise komplett oder
teilweise Teil des Systems sein oder es kann in dem System in herkömmlicher
Weise gespeichert werden oder es kann dem System komplett oder teilweise über ein Netz
oder andere Mechanismen zur Übertragung
von Informationen in herkömmlicher
Weise bereitgestellt werden. Es wird darauf hingewiesen, dass das
System zusätzlich
mit Hilfe von Informationen betrieben und/oder in anderer Weise
gesteuert werden kann, die durch einen Bediener unter Verwendung
von Bedienereingabeelementen (nicht gezeigt) bereitgestellt werden,
die mit dem System direkt verbunden sein können oder die die Informationen über ein
Netz oder andere Mechanismen zur Übertragung von Informationen
in herkömmlicher
Weise zu dem System übertragen.
-
Die
vorangehende Beschreibung war auf eine bestimmte Ausführungsform
dieser Erfindung beschränkt.
Es ist jedoch ersichtlich, dass verschiedene Veränderungen und Modifikationen
an der Erfindung vorgenommen werden können, wobei einige oder alle
Vorteile der Erfindung erreicht werden können. Es ist Aufgabe der angehängten Ansprüche, diese
und andere derartige Veränderungen
und Modifikationen abzudecken, die in dem wahren Bereich der Erfindung
liegen.