-
Gebiet der
Erfindung
-
Diese Erfindung betrifft das Gebiet
von Prozessoren und insbesondere Adress- und Operandengrößen in Prozessoren.
-
Beschreibung des Standes
der Technik
-
Die x86 Architektur (auch bekannt
als die IA-32 Architektur) hat eine weitverbreitete Akzeptanz und
Erfolg im Markt genossen. Entsprechend ist es vorteilhaft, Prozessoren
in Übereinstimmung
mit der x86 Architektur zu entwerfen. Derartige Prozessoren können von
der großen
Masse von Software profitieren, die für die x86 Architektur geschrieben
wurde (da derartige Prozessoren die Software ausführen können und
daher Computersysteme, die den Prozessor verwenden, aufgrund des
großen
Betrags an verfügbarer
Software eine erhöhte
Akzeptanz in dem Markt genießen
können).
-
Mit der weiter andauernden Entwicklung
der Computersysteme ist eine 64 Bit Adressgröße (und manchmal Operandengröße) wünschenswert
geworden. Eine größere Adressgröße ermöglicht es
Programmen, die einen größeren Speicherabdruck
haben (der Betrag an Speicher, der von den Befehlen in dem Programm
und den Daten, mit denen das Programm arbeitet, belegt wird), in
dem Speicherraum zu arbeiten. Eine größere Operandengröße erlaubt das
Verarbeiten auf größeren Operanden
oder eine höhere
Präzision
in den Operanden. Mächtigere
Anwendungen und/oder Betriebssysteme können durch die Verwendung von
64 Bit Adress- und/oder Operandengrößen möglich werden.
-
Unvorteilhafterweise ist die x86
Architektur auf ein Maximum von 32 Bit Operandengröße und 32 Bit
Adressgröße begrenzt.
Die Operandengröße bezieht
sich auf die Anzahl der Bits, auf denen durch den Prozessor gearbeitet
wird (zum Beispiel die Anzahl der Bits in einem Quell- oder Zieloperanden). Die
Adressgröße bezieht sich
auf die Anzahl der Bits in einer von dem Prozessor erzeugten Adresse.
Daher können
Prozessoren, welche die x86 Architektur verwenden, nicht den Anforderungen
von Anwendungen dienen, welche von den Vorteilen der 64 Bit Adress-
oder Operandengrößen profitieren
könnten.
-
Bevor die vorliegende Erfindung zusammengefasst
wird, werden zwei Dokumente aus dem Stand der Technik wie folgt
berücksichtigt:
US-A-5
774 686 offenbart einen Prozessor, der ein Steuerregister aufweist,
das zum Speichern eines Erweiterungshinweises konfiguriert ist,
wobei der besagte Prozessor konfiguriert ist, um Konfigurationen für den Befehlssatz
und Systemkonfigurationen in Antwort auf den besagten Erweiterungshinweis
und in Antwort auf ein Befehlssatzflag und auf ein Systemflag zu
erstellen.
-
US-A-6 787 495 offenbart das Speichern
von Selektoren in Segmentregistern.
-
Zusammenfassung der Erfindung
-
Die oben angeführten Probleme werden zu einem
großen
Teil von einem Prozessor gelöst,
wie er hier beschrieben ist. Der Prozessor unterstützt einen ersten
Betriebsmodus, in dem die Adressgröße größer als 32 Bit ist und die
Operandengröße 32 oder
64 Bit sein kann. Die Größe der Adresse
kann nominell als 64 Bit angezeigt sein, obwohl verschiedene Ausführungsbeispiele
des Prozessors jegliche Adressgröße verwenden
können,
die 32 Bit überschreitet, bis
zu und einschließlich
64 Bit reicht, in dem ersten Betriebsmodus. Der erste Betriebsmodus
kann eingerichtet werden durch Platzierung einer Freigabeangabe
in einem Steuerregister in einen frei gegebenen Zustand und durch
Setzen einer ersten Betriebsmodusangabe und einer zweiten Betriebsmodusangabe
in einem Segmentdeskriptor auf vordefinierte Zustände. Weitere
Kombinationen der ersten Betriebsmodusangabe und der zweiten Betriebsmodusangabe
können
verwendet werden, um Kompatibilitätsmodi für die 32 Bit und 16 Bit Verarbeitung
zur Verfügung
zu stellen, die kompatibel mit der x86 Prozessorarchitektur sind
(wobei die Freigabeangabe in dem frei gegebenen Zustand bleibt).
Vorteilhafterweise kann eine 64 Bit Verarbeitung zur Verfügung gestellt
werden, während
Kompatibilität
mit der x86 Prozessorarchitektur zur Verfügung gestellt wird, und daher bestehender
Code unterstützt
wird, der für
die x86 Prozessorarchitektur geschrieben wurde.
-
Des weiteren kann, durch ein zur
Verfügung stellen
der Kompatibilitätsmodi
für die
32 Bit und 16 Bit Verarbeitung, während die Freigabeangabe für den ersten
Betriebsmodus in dem Steuerregister in dem frei gegebenen Zustand
bleibt, die Kompatibilität der
Software vereinfacht werden. Zum Beispiel kann ein Betriebssystem,
das programmiert ist, um Vorteil aus dem ersten Betriebsmodus zu
ziehen, trotzdem Anwendungen starten, die für 32 oder 16 Bit Modi geschrieben
sind. Der Prozessor kann in dem ersten Betriebsmodus arbeiten, während er
Code des Betriebssystems ausführt.
Während
der Ausführung von
Code von Anwendungen kann der Prozessor in dem 32 oder 16 Bit Modus
arbeiten (wie geleitet durch die Angaben zu dem ersten und zweiten
Betriebsmodus in den entsprechenden Segmentdeskriptoren). Jedoch
kann, wenn ein Aufruf an das Betriebssystem ausgeführt wird
oder wenn eine Ausnahme oder ein Interrupt die Ausführung des
Codes des Betriebssystems veranlasst, die Freigabeangabe dem Prozessor
anzeigen, dass der Code des Betriebssystems in dem ersten Betriebsmodus
sein kann und damit dem ersten Betriebsmodus erlauben, an dem Schalter
eingerichtet zu werden (basierend auf den Angaben zu dem ersten
und zweiten Betriebsmodus in dem Segmentdeskriptor, der dem Betriebssystem
entspricht).
-
Des weiteren kann der Prozessor den
16 und den 32 Bit x86 Betriebsmodus unterstützen, falls die Freigabeangabe
in dem Steuerregister in dem gesperrten Zustand ist. Die Angabe
für den
ersten Betriebsmodus muss nicht definiert sein, wenn die Freigabeangabe
gesperrt ist, und die Angabe für
den zweiten Betriebsmodus kann bestimmen, ob der Betriebsmodus des
Prozessors 16 oder 32 Bit ist. Derartige Modi können zum Beispiel verwendet
werden, falls der Prozessor einen Segmentdeskriptor unterstützt, der
die Angabe für
den ersten Betriebsmodus auf eine unterschiedliche Weise definiert.
-
Allgemein betrachtet und in Übereinstimmung
mit einem Aspekt der Erfindung wird ein Prozessor zur Verfügung gestellt,
insbesondere wie in Anspruch 1 definiert. Der Prozessor weist ein
Segmentregister und ein Steuerregister auf. Das Segmentregister
ist konfiguriert zum Speichern eines Segmentselektors, welcher einen
Segmentdeskriptor identifiziert, einschließlich einer Angabe für den ersten Betriebsmodus
und einer Angabe für
den zweiten Betriebsmodus. Das Steuerregister ist konfiguriert, um
eine Freigabeangabe zu speichern. In Antwort auf die Freigabeangabe,
der Angabe für
den ersten Betriebsmodus und der Angabe für den zweiten Betriebsmodus
ist der Prozessor konfiguriert, dass er einen Betriebsmodus einnimmt,
dieser Betriebsmodus gibt eine voreingestellte Operandengröße und eine voreingestellte
Adressgröße für Befehle
an, welche der Prozessor auszuführen
konfiguriert ist.
-
Wie in dem Anspruch 11 definiert
kann der Segmentselektor einen Index für eine Segmentdeskriptortabelle
aufweisen, die in einem Speicher gespeichert ist, mit dem der Prozessor
gekoppelt ist, wobei der Segmentdeskriptor in einem Eintrag in der Segmentdeskriptortabelle
gespeichert ist, der durch den Index angegeben ist, wobei der Prozessor
zum Lesen des Segmentdeskriptors aus der Segmentdeskriptortabelle
in Reaktion auf den Segmentselektor konfiguriert ist, und der Prozessor
derart konfiguriert ist, dass er in Reaktion auf den frei gegebenen
Zustand der Freigabeangabe und den ersten Zustand der Angabe für den Betriebsmodus
in einem Betriebsmodus arbeitet, in dem virtuelle Adressen größer als
32 Bit sind.
-
In Übereinstimmung mit einem weiteren
Aspekt der Erfindung wird ein Verfahren zur Verfügung gestellt, insbesondere
wie in dem Anspruch 17 definiert. Ein Betriebsmodus wird von einem
Prozessor eingenommen in Reaktion auf eine Freigabeangabe in einem
Steuerregister in dem Prozessor, eine Angabe für einen ersten Betriebsmodus
in einem Segmentdeskriptor und eine Angabe für einen zweiten Betriebsmodus
in dem Segmentdeskriptor. Dieser Betriebsmodus gibt eine voreingestellte
Operandengröße und eine
voreingestellte Adressgröße für Befehle
an, welche der Prozessor auszuführen
konfiguriert ist.
-
Kurze Beschreibung
der Zeichnungen
-
Weitere Ziele und Vorteile der Erfindung
werden bei dem Studium der folgenden detaillierten Beschreibung
und bei der Bezugnahme auf die begleitenden Zeichnungen offenbar
werden, in denen:
-
1 ein
Blockdiagramm eines Ausführungsbeispiels
eines Prozessors ist.
-
2 ein
Blockdiagramm eines Ausführungsbeispiels
eines Segmentdeskriptors für
den 32/64 Bit Modus ist.
-
3 ein
Blockdiagramm eines Ausführungsbeispiels
eines Segmentdeskriptors für
den Kompatibilitätsmodus
ist.
-
4 ein
Blockdiagramm des Betriebs in dem Kompatibilitätsmodus und in dem Legacymodus ist,
in Übereinstimmung
mit dem in 1 gezeigten Ausführungsbeispiel
des Prozessors.
-
5 eine
Tabelle ist, die ein Ausführungsbeispiel
der Betriebsmodi als eine Funktion der Werte des Segmentdeskriptors
und des Steuerregisters darstellt.
-
6 eine
Tabelle ist, die ein Ausführungsbeispiel
der Verwendung von Befehlspräfixen
zur Übersteuerung
von voreingestellten Betriebsmodi darstellt.
-
7 ein
Blockdiagramm ist von einem Ausführungsbeispiel
eines Registers ist.
-
8 ein
Diagramm ist, das ein Ausführungsbeispiel
einer globalen Registertabelle und einer lokalen Registertabelle
darstellt.
-
9 ein
Blockdiagramm eines Ausführungsbeispiels
von einem 32/64 Aufruftor Deskriptor.
-
10 ein
Blockdiagramm eines Befehlsformats ist.
-
11 ein
Blockdiagramm eines Ausführungsbeispiels
von einem Computersystem ist, das den in 1 gezeigten Prozessor enthält.
-
12 ein
Blockdiagramm eines weiteren Ausführungsbeispiels von einem Computersystem ist,
das den in 1 gezeigten
Prozessor enthält.
-
Während
die Erfindung verschiedenen Modifikationen und alternativen Ausbildungen
unterworfen werden kann, sind bestimmte Ausführungsbeispiele davon in den
Zeichnungen beispielhaft gezeigt und werden hier detailliert beschrieben.
Es sollte jedoch verstanden werden, dass die Zeichnungen und die
detaillierte Beschreibung dazu nicht beabsichtigt sind, die Erfindung
auf die bestimmte offenbarte Form zu beschränken, sondern dass die Erfindung vielmehr
alle Modifikationen, Äquivalente
und Alternativen umfassen soll, wie sie von den beigefügten Ansprüchen definiert
sind.
-
Detaillierte
Beschreibung der bevorzugten Ausführungsbeispiele
-
Nun 1 zuwendend
ist ein Blockdiagramm gezeigt, das ein Ausführungsbeispiel eines Prozessors 10 darstellt.
Weitere Ausführungsbeispiele
sind möglich
und werden betrachtet. In dem Ausführungsbeispiel aus 1 enthält der Prozessor 10 einen
Befehls-Cachespeicher 12, einen Ausführungskern 14, einen
Daten-Cachespeicher 16, eine externe Schnittstelleneinheit 18,
eine Speicherverwaltungseinheit (MMU) 20 und eine Registerdatei 22. In
dem dargestellten Ausführungsbeispiel
enthält
die MMU 20 einen Satz von Segmentregistern 24,
ein erstes Steuerregister 26, ein zweites Steuerregister 28,
ein Register für
die lokale Deskriptortabelle (LDTR) 30 und ein Register
für die
globale Deskriptortabelle (GDTR) 32. Der Befehls-Cachespeicher 12 ist an
die externe Schnittstelleneinheit 18, den Ausführungskern 14 und
die MMU 20 angeschlossen. Der Ausführungskern 14 ist
des weiteren an die MMU 20, die Registerdatei 22 und
den Daten-Cachespeicher 16 angeschlossen.
Der Daten-Cachespeicher 16 ist des weiteren an die MMU 20 und
die externe Schnittstelleneinheit 18 angeschlossen. Die
externe Schnittstelleneinheit 18 ist ferner an die MMU 20 und
die externe Schnittstelle angeschlossen.
-
Im Allgemeinen verwendet der Prozessor 10 eine
Prozessorarchitektur, die mit der x86 Architektur kompatibel ist,
und enthält
zusätzliche
architekturale Eigenschaften, um die 64 Bit Verarbeitung zu unterstützen. Der
Prozessor 10 ist konfiguriert, um einen Betriebsmodus in
Reaktion auf Information einzurichten, die in einem Codesegmentdeskriptor
entsprechend dem derzeitigen Ausführungscode gespeichert ist,
und ferner in Antwort auf eine oder mehrere Freigabeangaben, die
in einem oder mehreren Steuerregistern gespeichert sind. Wie hier
verwendet, gibt ein "Betriebsmodus" voreingestellte
Werte für
zahlreiche, von einem Programm auswählbare Merkmale des Prozessors
an. Zum Beispiel kann der Betriebsmodus eine voreingestellte Operandengröße und eine
voreingestellte Adressgröße angeben.
Die voreingestellte Operandengröße gibt
die Anzahl von Bits in einem Operanden eines Befehls an, es sei
denn eine Kodierung eines Befehls übersteuert die Voreinstellung.
Die voreingestellte Adressgröße gibt
die Anzahl von Bits in einer Adresse eines Speicheroperanden eines
Befehls an, es sei denn ein Kodierung eines Befehls übersteuert
die Voreinstellung. Die voreingestellte Adressgröße gibt die Größe von zumindest
der virtuellen Adresse von Speicheroperanden an, und kann auch die
Größe der physikalischen Adresse
angeben. Alternativ kann die Größe der physikalischen
Adresse unabhängig
von der voreingestellten Adressgröße sein und kann stattdessen
von dem unten beschriebenen LME Bit (zum Beispiel kann die physikalische
Adresse 32 Bit sein, falls das LME Bit nicht gesetzt ist, und kann
eine von der Implementierung abhängige
Größe von mehr
als 32 Bit und weniger als 64 Bit sein, wenn das LME Bit gesetzt
ist) oder von einem anderen Steuerbit (zum Beispiel dem Erweiterungsbit
für die
physikalische Adresse oder PAE Bit in einem anderen Steuerregister)
abhängig
sein. Wie hier verwendet ist eine "virtuelle Adresse" eine Adresse, die vor der Übersetzung durch
einen Mechanismus zur Adressübersetzung (zum
Beispiel Abbildungsmechanismus) in eine "physikalische" Adresse, welche die Adresse ist, die
tatsächlich
zum Zugriff auf einen Speicherverwendet wird, erzeugt wird. Des
weiteren ist ein "Segmentdeskriptor", wie hier verwendet,
eine von Software geschaffene Datenstruktur und wird von dem Prozessor verwendet,
um die Steuerung und den Zustand des Zugriffs für ein Segment des Speichers
zu definieren. Eine "Segmentdeskriptortabelle" ist eine Tabelle
im Speicher mit mehreren Einträgen,
wobei jeder Eintrag fähig
ist zur Speicherung eines Segmentdeskriptors.
-
In dem dargestellten Ausführungsbeispiel
erzeugt die MMU 20 einen Betriebsmodus und befördert den
Betriebsmodus zu dem Ausführungskern 14.
Der Ausführungskern 14 führt Befehle
unter Verwendung des Betriebsmodus aus. Genauer gesagt holt der
Ausführungskern 14 Operanden,
welche die voreingestellte Operandengröße haben, von der Registerdatei 22 oder
dem Speicher (durch den Daten-Cachespeicher 16, wenn die
Speicheroperanden zwischen gespeichert werden können und dort treffen, oder
durch die externe Schnittstelleneinheit 18, wenn die Speicheroperanden
nicht zwischen gespeichert werden können oder den Daten-Cachespeicher 16 fehl
treffen), wenn nicht eine bestimmte Kodierung des Befehls die voreingestellte
Operandengröße übersteuert,
in welchem Fall die übersteuernde Adressgröße verwendet
wird. In weiteren Ausführungsbeispielen
kann die Information, die zur Erzeugung des Betriebsmodus verwendet
wird, lokal in Bereichen des Prozessors 10 angebildet werden,
die den Betriebsmodus verwenden (zum Beispiel der Ausführungskern 14),
und der Betriebsmodus kann von den lokalen Abbildungskopien bestimmt
werden.
-
Wie zuvor erwähnt erzeugt die MMU 20 den Betriebsmodus
in Antwort auf einen Codesegmentdeskriptor, der dem auszuführenden
Code entspricht, und ferner in Antwort auf einen oder mehrere Werte in
den Steuerregistern. Information von dem Codesegmentdeskriptor wird
in einem der Segmentregister 24 gespeichert (ein Register,
auf das als CS oder Codesegment Bezug genommen wird). Zusätzlich speichert
das Steuerregister 26 eine Freigabeangabe (LME), die verwendet
wird, um einen Betriebsmodus, in dem die voreingestellte Adressgröße größer als
32 Bit ist ("32/64
Modus"), und auch
gewisse Kompatibilitätsmodi
für die
32 Bit und 16 Bit Betriebsmodi freizugeben. Die voreingestellte
Operandengröße kann
32 Bit in dem 32/64 Modus sein, aber Befehle können die voreingestellte 32
Bit Operandengröße mit einer
64 Bit Operandengröße übersteuern,
falls dies gewünscht
ist. Falls die LME Angabe in einem frei gegebenen Zustand ist, kann
dann der 32/64 Modus zusätzlich
zu den 32 Bit und 64 Bit Modi verwendet werden. Falls die LME Angabe
in einem nicht frei gegebenen Zustand ist, dann ist der 32/64 Bit
Modus verhindert. In einem Ausführungsbeispiel
kann die voreingestellte Adressgröße in dem 32/64, Bit Modus abhängig von
der Implementierung sein, aber kann jeder Wert bis zu und einschließlich 64
Bit sein. Des weiteren kann die Größe der virtuellen Adresse in
einer gegebenen Implementierung sich von der Größe der physikalischen Adresse
in dieser Implementierung unterscheiden.
-
Es ist zu bemerken, dass die Freigabeangaben
hier als Bits mit dem frei gegebenen Zustand in dem gesetzten Zustand
des Bits und dem nicht frei gegebenen Zustand in dem freien Zustand
des Bits beschrieben werden können.
Jedoch sind auch andere Kodierungen möglich, einschließlich Kodierungen,
in denen mehrere Bits verwendet werden, und Kodierungen, in denen
der frei gegebene Zustand der freie Zustand ist und der nicht frei
gegebene Zustand der gesetzte Zustand ist. Entsprechend kann der
Rest dieser Beschreibung auf die LME Angabe in dem Steuerregister 26 als
das LME Bit verweisen, wobei der frei gegebene Zustand gesetzt sei
und der nicht frei gegebene Zustand frei sei. Jedoch werden andere
Kodierungen der LME Angabe betrachtet, wie weiter ausgeführt ist.
-
Die Segmentregister 24 speichern
Information von den Segmentdeskriptoren, die derzeit von dem Code
verwendet werden, der von dem Prozessor 10 ausgeführt wird.
Wie zuvor erwähnt,
ist CS eines der Segmentregister 24 und gibt das Codesegment
des Speichers an. Das Codesegment speichert den Code, der ausgeführt wird.
Weitere Segmentregister können
verschiedene Datensegmente definieren (zum Beispiel ein Stapeldatensegment,
definiert durch das SS Segmentregister und bis zu vier Datensegmente,
definiert durch die DS, ES, FS und GS Segmentregister). 1 stellt die Inhalte eines
beispielhaften Segmentregisters 24A einschließlich eines
Selektorfeldes 24AA und Deskriptorfeldes 24AB dar.
Das Selektorfeld 24AA wird mit einem Segmentselektor geladen,
um ein bestimmtes Segment in Reaktion auf gewisse von dem Ausführungskern 14 ausgeführte Segment-Ladebefehle
zu aktivieren. Der Segmentselektor identifiziert den Segmentdeskriptor in
einer Segmentdeskriptortabelle in dem Speicher. Genauer gesagt kann
der Prozessor 10 zwei Segmentdeskriptortabellen verwenden:
eine lokale Deskriptortabelle und eine globale Deskriptortabelle.
Die Basisadresse der lokalen Deskriptortabelle ist in dem LDTR 30 gespeichert.
Auf ähnliche
Weise ist die Basisadresse der globalen Deskriptortabelle in dem GDTR 32 gespeichert.
Ein Bit in dem Segmentselektor (das Tabellenindikatorbit) wählt die
Deskriptortabelle aus und der Rest des Segmentselektors wird als
ein Index in die ausgewählte
Tabelle verwendet. Wenn ein Befehl einen Segmentselektor in eines
der Segmentregister 24 lädt, liest die MMU 20 den
entsprechenden Segmentdeskriptor aus der ausgewählten Segmentdeskriptortabelle
aus und speichert Information von dem Segmentdeskriptor in das Segmentdeskriptorfeld
(zum Beispiel Segmentdeskriptorfeld 24AB für das Segmentregister 24A).
Die in dem Segmentdeskriptorfeld gespeicherte Information kann jeden
geeigneten Untersatz des Segmentdeskriptors einschließlich aller
der Segmentdeskriptoren enthalten, falls gewünscht. Zusätzlich kann weitere Information,
die von dem Segmentdeskriptor oder anderen Quellen abgeleitet ist,
in dem Feld des Segmentdeskriptors gespeichert werden. Zum Beispiel
kann ein Ausführungsbeispiel
die Angaben zu dem Betriebsmodus von dem Codesegmentdeskriptor dekodieren
und den dekodierten Wert statt der ursprünglichen Werte der Angaben
zu dem Betriebsmodus speichern. Falls ein Befehl ein Laden von CS mit
einem Segmentselektor veranlasst, kann sich das Codesegment ändern und
damit kann sich der Betriebsmodus des Prozessors 10 ändern. Die
Segmentdeskriptortabellen werden folgend detaillierter beschrieben.
-
In einem Ausführungsbeispiel wird lediglich das
CS Segmentregister in dem 32/64 Modus verwendet. Die Datensegmentregister
werden nicht berücksichtigt.
In den 16 und 32 Bit Modi können
das Codesegment und die Datensegmente aktiv sein. Des weiteren kann
eine zweite Freigabeangabe (PE) in dem Steuerregister 28 den
Betrieb der MMU 20 beeinflussen. Die PE Freigabeangabe
kann verwendet werden, um den Protected Mode frei zu geben, in dem
Mechanismen zur Segmentierung und/oder zur abbildenden Übersetzung
von Adressen verwendet werden. Falls die PE Freigabeangabe in dem
nicht frei gegebenen Zustand ist werden die Mechanismen zur Segmentierung
und zur Abbildung verhindert und der Prozessor 10 ist in
dem "Real Mode" (in dem von dem
Ausführungskern 14 erzeugte
Adressen physikalische Adressen sind). Ähnlich zu der LME Angabe kann
die PE Angabe ein Bit sein, in dem der frei gegebene Zustand ist,
wenn das Bit gesetzt ist, und der nicht frei gegebene Zustand ist,
wenn das Bit nicht gesetzt ist. Jedoch werden weitere Ausführungsbeispiele
betrachtet, wie oben beschrieben ist.
-
Es ist zu bemerken, dass die MMU 20 zusätzliche
Hardwaremechanismen verwenden kann, falls gewünscht. Zum Beispiel kann die
MMU 20 eine Abbildungshardware enthalten, um eine abbildende Adressübersetzung
von virtuellen Adressen in physikalische Adressen zu implementieren.
Die Abbildungshardware kann einen Übersetzungsseitenblickpuffer
(TLB) zum Speichern von abbildenden Übersetzungen enthalten.
-
Es ist zu bemerken, dass die Steuerregister 26 und 28 als
architekturisierte Steuerregister implementiert sein können (zum
Beispiel kann das Steuerregister 26 CR4 sein und das Steuerregister 28 kann CR0
sein). Alternativ kann eines oder beide der Steuerregister als Modell
spezifisches Register implementiert sein, um andere Verwendungen
der architekturisierten Steuerregister ohne Beeinflussung des 32/64
Modus zu erlauben.
-
Im Allgemeinen ist der Befehls-Cachespeicher 12 ein
Cachespeicher mit hoher Geschwindigkeit zum Speichern von Befehlsbytes.
Der Ausführungskern 14 holt
Befehle von dem Befehls-Cachespeicher 12 zur Ausführung. Der
Befehls-Cachespeicher 12 kann
jede geeignete Organisation des Cachespeichers verwenden, einschließlich direkt
abbildender, Satz assoziativer und vollständig assoziativer Konfigurationen.
Falls ein Holen eines Befehls in dem Befehls-Cachespeicher 12 nicht
trifft, kann der Befehls-Cachespeicher 12 mit der externen
Schnittstelleneinheit 18 kommunizieren, um die fehlende Zeile
des Cachespeichers in den Befehls-Cachespeicher 12 einzufügen. Des
weiteren kann der Befehls-Cachespeicher 12 mit
der MMU 20 kommunizieren, um physikalische Adressübersetzungen
für virtuelle
Adressen zu empfangen, die von dem Befehls-Cachespeicher 12 geholt wurden.
-
Der Ausführungskern 14 führt die
aus dem Befehls-Cachespeicher 12 geholten Befehle aus.
Der Ausführungskern 14 holt
Registeroperanden aus der Registerdatei 22 und aktualisiert
die Zielregister in der Registerdatei 22. Die Größe der Registeroperanden
wird von dem Betriebsmodus und beliebigen Übersteuerungen des Betriebsmodus
für einen
bestimmten Befehl gesteuert. Auf ähnliche Weise holt der Ausführungskern 14 Speicheroperanden
aus dem Daten-Cachespeicher 16 und aktualisiert Zielspeicherstellen
in dem Daten-Cachespeicher 16, abhängig von der Möglichkeit,
die Speicheroperanden zwischen zu speichern, und dem Treffen in
dem Daten-Cachespeicher 16. Die Größe der Speicheroperanden wird ähnlich von
dem Betriebsmodus und beliebigen Übersteuerungen des Betriebsmodus
für einen
bestimmten Befehl gesteuert. Des weiteren wird die Größe der Adressen
der Speicheroperanden, die von dem Ausführungskern 14 erzeugt
wurden, von dem Betriebsmodus und beliebigen Übersteuerungen des Betriebsmodus
für einen
bestimmten Befehl gesteuert.
-
Der Ausführungskern 14 kann
jegliche geeignete Konstruktion verwenden. Zum Beispiel kann der
Ausführungskern 14 ein
Kern mit Superpipeline, ein superskalarer Kern oder eine Kombination
davon sein. Der Ausführungskern 14 kann
eine außer
der Reihe spekulative Ausführung
oder eine Ausführung in
Reihenfolge verwenden, in Übereinstimmung
mit der Wahl des Entwicklers.
-
Die Registerdatei 22 kann
64 Bit Register enthalten, auf welche als 64 Bit, 32 Bit, 16 Bit
oder 8 Bit Register zugegriffen werden kann, wie von dem Betriebsmodus
des Prozessors 10 und jeglichen Übersteuerungen für einen
bestimmten Befehl angegeben ist. Das Format des Registers ist für ein Ausführungsbeispiel
im Hinblick auf 7 beschrieben. Die
in der Registerdatei 22 enthaltenen Register können die
LEAX, LEBX, LECX, LEDX, LEDI, LESI, LESP und LEBP Register enthalten.
Die Registerdatei 22 kann des weiteren die LEIP Register
enthalten. Alternativ kann der Ausführungskern 14 eine
Form der Registerumbenennung verwenden, bei der jedes Register in
der Registerdatei 22 auf ein architekturisiertes Register
abgebildet werden kann. Die Anzahl der Register in der Registerdatei 22 kann
für ein
derartiges Ausführungsbeispiel
abhängig
von der Implementierung sein.
-
Der Daten-Cachespeicher 16 ist
ein Cachespeicher mit hoher Geschwindigkeit, der zum Speichern von
Daten konfiguriert ist. Der Daten-Cachespeicher 16 kann
jegliche geeignete Organisation für den Cachespeicher verwenden,
einschließlich
direkt abgebildeter, Satz assoziativer und vollständig assoziativer
Konfigurationen. Falls ein Abrufvorgang von Daten oder eine Aktualisierung
in dem Daten-Cachespeicher 16 nicht
trifft, kann der Daten-Cachespeicher 16 mit der externen
Schnittstelleneinheit 18 kommunizieren, um die fehlende
Zeile des Cachespeichers in den Daten-Cachespeicher 16 zu
laden. Des weiteren verwendet der Daten-Cachespeicher 16 eine
Rückschreibstrategie
für den
Cachespeicher, aktualisierte Zeilen des Cachespeichers, die aus dem
Daten-Cachespeicher 16 ausgeworfen werden, können der
externe Schnittstelleneinheit 18 mitgeteilt werden, um
in den Speicher zurückgeschrieben
zu werden. Der Daten-Cachespeicher 16 kann mit der MMU 20 kommunizieren,
um die physikalischen Adressübersetzungen
für die
virtuellen Adressen zu empfangen, die de, Daten-Cachespeicher 16 präsentiert
werden.
-
Die externe Schnittstelleneinheit 18 kommuniziert
mit Teilen des Systems, das extern zu dem Prozessor 10 ist.
Die externe Schnittstelleneinheit 18 kann Zeilen des Cachespeichers
wie oben beschrieben für
den Befehls-Cachespeicher 12 und den Daten-Cachespeicher 16 kommunizieren
und kann auch mit der MMU 20 kommunizieren. Zum Beispiel kann
die externe Schnittstelleneinheit 18 auf die Segmentdeskriptortabellen
und/oder die Abbildungstabellen im Namen der MMU 20 zugreifen.
-
Es ist zu bemerken, dass der Prozessor 10 einen
integrierten Level 2 (L2) Cachespeicher enthalten kann,
falls gewünscht.
Des weiteren kann die externe Schnittstelleneinheit 18 konfiguriert
sein, um mit einem Rückseiten
Cachespeicher zu kommunizieren, zusätzlich zu der Kommunikation
mit dem System.
-
Nun Bezug nehmend auf 2 ist ein Blockdiagramm
von einem Ausführungsbeispiel
eines Codesegmentdeskriptors 40 für den 32/64 Modus gezeigt.
Weitere Ausführungsbeispiele
sind möglich und
werden betrachtet. In dem Ausführungsbeispiel von 2 weist der Codesegmentdeskriptor 40 8 Byte
auf, wobei die höchstwertigen
4 Bytes über
den niedrigwertigsten 4 Bytes dargestellt sind. Die höchstwertigen
vier Bytes werden an einer numerisch größeren Adresse gespeichert als
die niedrigwertigsten vier Bytes. Das höchstwertige Bit von jeder Gruppe
von vier Byte ist in 2 (und 3 unten) als Bit 31 dargestellt
und das niedrigstwertige Bit ist als Bit 0 dargestellt.
Kurze vertikale Linien innerhalb der vier Byte trennen jedes Bit
voneinander und die langen vertikalen Linien trennen ein Bit, aber auch
ein Feld voneinander (sowohl in 2 als
auch in 3).
-
Anders als die in 3 unten dargestellten 32 Bit und 16 Bit
Codesegmentdeskriptoren enthält der
Codesegmentdeskriptor 40 keine Basisadresse oder Grenze.
Der Prozessor 10 verwendet einen flachen virtuellen Adressraum
für den
32/64 Modus (anstatt des segmentierten linearen Adressraums, der
in den 32 Bit und 16 Bit Modi verwendet wird). Entsprechend sind
die Bereiche des Codesegmentdeskriptors 40, welche anderenfalls
die Basisadresse und -grenze speichern würden, in dem Segmentdeskriptor 40 reserviert.
Es ist zu bemerken, dass eine durch Segmentierung zur Verfügung gestellte
virtuelle Adresse hier auch als eine "lineare Adresse" bezeichnet werden kann. Der Ausdruck "lineare Adresse" umfasst jegliche
Adresse, die mittels eines Übersetzungsmechanismus
in eine physikalische Adresse übersetzt
wird, die tatsächlich
verwendet wird, um Speicher zu adressieren, einschließlich linearer Adressen
und anderen virtuellen Adressen, die in nicht segmentierten Architekturen
erzeugt werden.
-
Der Segmentdeskriptor 40 enthält ein D
Bit 42, ein L Bit 44 (für ein 32/64 Modus Codesegment auf
Eins gesetzt), ein Verfügbar
Bit (AVL) 46, eine Vorhanden (P) Bit 48, ein Deskriptor
Privilegierungsstufe (DPL) 50 und ein Typ Feld 52.
Das D Bit 42 und das L Bit 44 werden verwendet,
um die Betriebsmodus des Prozessors 10 zu bestimmen, wie
in 5 unten dargestellt.
Das AVL Bit 46 steht zur Benutzung durch Systemsoftware
zur Verfügung
(zum Beispiel das Betriebssystem). Das P Bit 48 wird verwendet,
um anzuzeigen, ob das Segment in dem Speicher vorhanden ist oder
nicht. Falls das P Bit 48 gesetzt ist, ist das Segment
vorhanden und der Code kann aus dem Segment geholt werden. Falls
das P Bit 48 frei ist, ist das Segment nicht vorhanden
und eine Ausnahme wird erzeugt, um das Segment in den Speicher zu
laden (zum Beispiel von einem Plattenspeicher oder über eine
Netzwerkverbindung). Die DPL zeigt die Privilegierungsstufe des
Segments an. Der Prozessor 10 verwendet vier Privilegierungsstufen
(kodiert als 0 bis 3 in dem DPL Feld, wobei die Stufe 0 die
am höchsten
privilegierte Stufe ist). Gewisse Befehle und Ressourcen des Prozessors
(zum Beispiel Konfigurations- und Steuerregister) sind nur ausführbar oder
auf sie kann nur in den privilegierteren Stufen zugegriffen werden
und Versuche, in den unteren Privilegierungsstufen diese Befehle
auszuführen
oder auf diese Ressourcen zuzugreifen führen zu einer Ausnahme. Wenn
Information von dem Segmentdeskriptor 40 in das CS Segmentregister
geladen wird, wird die DPL die aktuelle Privilegierungsstufe (CPL)
des Prozessors 10. Das Typ Feld 52 kodiert den
Typ des Segments. Für
Codesegmente können
die beiden höchstwertigen
Bits des Typ Felds 52 gesetzt sein (das höchstwertige
Bit unterscheidet ein Code- oder Datensegment von einem Systemsegment
und das zweitwertigste Bit unterscheidet ein Codesegment von einem
Datensegment) und die verbleibenden Bits können zusätzliche Information über den
Typ des Segments kodieren (zum Beispiel nur Ausführung, Ausführung und Lesen oder Ausführung und
nur Lesen, Anpassung und ob auf das Codesegment zugegriffen worden
ist oder nicht).
-
Es ist zu bemerken, dass während zahlreiche
Angaben in dem Codesegmentdeskriptor als Bits beschrieben wurden,
wobei gesetzte und freie Werte definierte Bedeutungen haben, andere
Ausführungsbeispiele
die entgegengesetzten Kodierungen verwenden können und falls gewünscht mehrere
Bits verwenden können.
Daher können
zum Beispiel das D Bit 42 und das L Bit 44 jeweils
ein Beispiel ei ner Angabe für
den Betriebsmodus sein, die, wie gewünscht, ein oder mehrere Bits
sein können, ähnlich zu
der Diskussion der Freigabeangaben oben.
-
Nun Bezug nehmend auf 3 ist ein Blockdiagramm
eines Ausführungsbeispiels
eines Codesegmentdeskriptors 54 für den 32 und den 16 Bit Kompatibilitätsmodus
gezeigt. Weitere Ausführungsbeispiele
sind möglich
und werden betrachtet. Wie bei dem Ausführungsbeispiel aus 2 weist der Codesegmentdeskriptor 54 8
Byte auf, wobei die höchstwertigen
4 Bytes über
den niedrigstwertigen 4 Bytes dargestellt sind.
-
Der Codesegmentdeskriptor 54 enthält ein D Bit 42,
ein L Bit 44, ein AVL Bit 46, ein P Bit 48,
ein DPL 50 und ein Typ Feld 52 ähnlich zu
der obigen Beschreibung des Codesegmentdeskriptors 40.
Zusätzlich
enthält
der Codesegmentdeskriptor 54 ein Basisadress Feld (Bezugszeichen 56A, 56B und 56C),
ein Grenzfeld (Bezugszeichen 57A und 57B) und
ein G Bit 58. Das Basisadress Feld speichert eine Basisadresse,
welche zu der logischen Abrufadresse (gespeichert in dem LEIP Register)
addiert wird, um die lineare Adresse eines Befehls zu bilden, die
dann optional mittels eines Abbildungsübersetzungsmechanismus in eine
physikalische Adresse übersetzt
werden kann. Das Grenzfeld speichert eine Segmentgrenze, welche
die Größe des Segments
definiert. Versuche auf ein Byte an einer logischen Adresse zuzugreifen,
die größer ist
als die Segmentgrenze, sind nicht erlaubt und verursachen eine Ausnahme.
Das G Bit 58 bestimmt die Skalierung des Segmentgrenzenfeldes.
Falls das G Bit 58 gesetzt ist, ist die Grenze auf 4K Byte
Seiten skaliert (zum Beispiel 12 niedrigstwertige Nullen
werden der Grenze in dem Grenzfeld hinzugefügt). Falls das G Bit 58 frei
ist, wird die Grenze verwendet wie sie ist.
-
Es ist zu bemerken, dass die Codesegmentdeskriptoren
für die
32 und 16 Bit Modi, wenn der 32/64 Modus nicht über das LME Bit in dem Steuerregister 26 frei
gegeben ist, ähnlich
zu dem Codesegmentdeskriptor 54 sein können, außer dass das L Bit reserviert
ist und definiert ist, Null zu sein. Es ist ferner zu bemerken,
dass in den 32 und 16 Bit Modi (sowohl Kompatibilitätsmodus
mit dem LME Bit gesetzt als auch Modi mit dem LME Bit frei) in Übereinstimmung
mit einem Ausführungsbeispiel
die Datensegmente ebenfalls benutzt werden. Die Deskriptoren für die Datensegmente
können ähnlich sein
zu dem Codesegmentdeskriptor 54, mit der Ausnahme, dass das
D Bit 42 definiert ist, die obere Grenze des Segments anzuzeigen
oder die voreingestellte Stapelgröße (für Stapelsegmente) zu definieren.
-
Nun Bezug nehmend auf 4 ist ein Diagramm gezeigt,
das beispielhafte Verwendungen des LME Bits in dem Steuerregister 26 und
der Kompatibilitätsmodi
darstellt, um einen hohen Grad an Flexibilität bei der Implementierung des
32/64 Modus und der 32 und 16 Bit Modi zu erlauben. Ein Kasten 60 stellt
den beispielhaften Betrieb dar, wenn das LME Bit gesetzt ist, und
ein Kasten 62 stellt den beispielhaften Betrieb dar, wenn
das LME Bit frei ist.
-
Wie in dem Kasten 60 dargestellt,
können
die unterstützten
Kompatibilitätsmodi,
wenn das LME Bit gesetzt ist, ein 64 Bit Betriebssystem (das heißt ein Betriebssystem,
das entworfen wurde, um Vorteile aus den virtuellen und physikalischen
Adressräumen über 32 Bit
hinaus und/oder Datenoperanden von 64 Bit zu ziehen) erlauben, um
mit einem 32 Bit Anwendungsprogramm (das heißt einem Anwendungsprogramm
zu arbeiten, das unter Verwendung von 32 Bit Operanden und Adressgrößen geschrieben
wurde). Das Codesegment für
das Betriebssystem kann von dem in 2 dargestellten
32/64 Modus Codesegmentdeskriptor 40 definiert sein, und
daher kann das L Bit gesetzt sein. Entsprechend kann das Betriebssystem
Vorteil aus dem erweiterten virtuellen Adressraum und dem physikalischen
Adressraum für
den Code des Betriebssystems und den von dem Betriebssystem unterhaltenen
Datenstrukturen (einschließlich
zum Beispiel der Segmentdeskriptortabellen und der Abbildungsübersetzungstabellen)
ziehen. Das Betriebssystem kann auch den 64 Bit Datentyp, der in
dem 32/64 Modus definiert ist, unter Verwendung von Befehlskodierungen
verwenden, welche die voreingestellte 32 Bit Operandengröße übersteuern.
Des weiteren kann das Betriebssystem ein 32 Bit Anwendungsprogramm
starten durch Einrichten eines oder mehrerer 32 Bit Kompatibilitätsmodus
Segmentdeskriptoren (L Bit frei, D Bit gesetzt, zum Beispiel der
in 2 gezeigte Segmentdeskriptor 54)
in der Segmentdeskriptortabelle und Verzweigen in eines der Kompatibilitätsmodus
Segmente. Auf ähnliche
Weise kann das Betriebssystem ein 16 Bit Anwendungsprogramm starten
durch Einrichten eines oder mehrerer 16 Bit Kompatibilitätsmodus Segmentdeskriptoren
(L Bit frei, D Bit frei, zum Beispiel der in 2 gezeigte Segmentdeskriptor 54)
in der Segmentdeskriptortabelle und Verzweigen in eines der Kompatibilitätsmodus
Segmente. Entsprechend kann ein 64 Bit Betriebssystem die Fähigkeit behalten,
existierende 32 Bit und 16 Bit Anwendungsprogramme in dem Kompatibilitätsmodus
auszuführen.
Ein bestimmtes Anwendungsprogramm kann in den 32/64 Modus geleitet
werden, wenn die erweiterten Fähigkeiten
für dieses
Programm gewünscht
sind, oder kann bei 32 Bit oder 16 Bit verbleiben.
-
Während
der Prozessor 10 das 32 Bit Anwendungsprogramm ausführt, ist
der Betriebsmodus des Prozessors 10 32 Bit. Daher kann
das Anwendungsprogramm im Allgemeinen auf die gleiche Weise ausführen wie
es dies in einem 32 Bit Modus mit nicht gesetztem LME Bit tut (zum
Beispiel wenn das Betriebssystem auch ein 32 Bit Betriebssystem
ist). Jedoch kann das Anwendungsprogramm einen Dienst des Betriebssystems
aufrufen, eine Ausnahme erfahren oder abschließen. In jedem dieser Fälle kann
der Prozessor 10 zu der Ausführung von Code des Betriebssystems
zurückkehren
(wie in 4 durch den
Pfeil 64 dargestellt). Da der Code des Betriebssystems
in dem 32/64 Modus arbeitet, kann die Adresse der Dienstroutine
des Betriebssystems, der Ausnahmebehandler, usw. 32 Bit überschreiten.
Daher kann der Prozessor 10 genötigt sein, eine Adresse größer als
32 Bit zu erzeugen, bevor er zu dem Code des Betriebssystems zurückkehrt.
Das LME Bit stellt dem Prozessor 10 eine Angabe zur Verfügung, dass
das Betriebssystem in dem 32/64 Bit Modus arbeiten könnte, sogar
obwohl der derzeitige Betriebsmodus 32 Bit ist, und daher der Prozessor 10 den größeren Adressraum
für Aufrufe
und Ausnahmen des Betriebssystems zur Verfügung stellen kann.
-
In einem Ausführungsbeispiel werden Ausnahmen
behandelt unter Verwendung von Interrupt Segmentdeskriptoren, die
in einer Interrupt Segmentdeskriptortabelle gespeichert sind. Falls
das LME Bit gesetzt ist, können
die Interrupt Segmentdeskriptoren 16 Byte Einträge sein, welche eine 64 Bit
Adresse der Routine des Betriebssystems, welche die Ausnahme behandelt,
enthält.
Falls das LME Bit nicht gesetzt ist, können die Interrupt Segmentdeskriptoren acht
Byte Einträge
sein, welche eine 32 Bit Adresse enthalten. Entsprechend greift
der Prozessor 10 auf die Interrupt Segmentdeskriptortabelle
in Reaktion auf die LME Angabe zu (das heißt Lesen eines 16 Byte Eintrags,
falls das LME Bit gesetzt ist, und Lesen eines acht Byte Eintrags,
wenn das LME Bit frei ist). Daher können Ausnahmen von dem 64 Bit
Betriebssystem behandelt werden, sogar obwohl das Anwen dungsprogramm
in dem 32 Bit Kompatibilitätsmodus
ausführt.
Des weiteren unterstützt
der Prozessor 10 ein 32 Bit (oder 16 Bit) Betriebssystem, wenn
das LME Bit nicht gesetzt ist.
-
Auf ähnliche Weise kann der Mechanismus zum
Aufrufen in dem Prozessor 10 auf verschiedene Weisen basierend
auf dem Zustand des LME Bits arbeiten. Da das Betriebssystem typischerweise
auf einer höheren
Privilegierungsstufe als das Anwendungsprogramm arbeitet, werden
Transfers von dem Anwendungsprogramm zu dem Betriebssystem sorgfältig kontrolliert,
um sicher zu stellen, dass das Anwendungsprogramm nur erlaubte Routinen
des Betriebssystems ausführen
kann. Allgemeiner gesagt werden Wechsel in der Privilegierungsstufe sorgfältig kontrolliert.
In einem Ausführungsbeispiel kann
der Prozessor 10 zumindest zwei Mechanismen zum Durchführen von
Aufrufen des Betriebssystems unterstützen. Ein Verfahren kann durch
ein Aufruftor in den Segmentdeskriptortabellen sein (detaillierter
unten beschrieben). Ein weiteres Verfahren kann der von dem Prozessor
unterstützte
SYSCALL Befehl sein, der ein für
das Modell spezifische Register als die Quelle der Adresse der Routine
des Betriebssystems verwendet. Die Aktualisierung der für das Modell
spezifischen Register ist eine privilegierte Operation und daher
kann nur Code, der auf einer höheren
Privilegierungsstufe ausführt
(zum Beispiel Code des Betriebssystems), die Adresse in dem für das Modell
spezifischen Register einrichten, das von der SYSCALL Funktion verwendet
wird. Für
das SYSCALL Verfahren kann ein zweites für das Modell spezifisches Register
definiert sein, um die höchstwertigen
32 Bit der Adresse der Routine des Betriebssystems zu speichern.
Daher kann, wenn das LME Bit gesetzt ist, die Adresse aus den zwei
für das Modell
spezifischen Registern gelesen werden. Falls das LME Bit nicht gesetzt
ist, kann die Adresse aus dem für
das Modell spezifischen Register gelesen werden, das die niedrigstwertigen
32 Bit enthält.
Alternativ kann das von dem SYSCALL Befehl verwendete für das Modell
spezifische Register auf 64 Bit erweitert werden und die Adresse
kann 32 Bit sein (die niedrigstwertigen 32 Bit des für das Modell
spezifischen Registers) oder 64 Bit basierend auf dem Zustand des
LME Bits.
-
Wie oben dargestellt kann das gesetzte
LME Bit dem Prozessor 10 erlauben, in einem System zu arbeiten,
in dem das Betriebssystem 64 Bit ist und ein oder mehr Anwendungsprogramme
nicht 64 Bit sind (zum Beispiel 32 Bit wie gezeigt oder 16 Bit,
was auf eine ähnliche
Weise arbeitet wie die obige Beschreibung). Des weiteren, wie in
dem Kasten 62 dargestellt, kann das nicht gesetzte LME
Bit dem Prozessor 10 erlauben, in dem 32 Bit oder 16 Bit
Modus zu arbeiten, der mit der x86 Architektur kompatibel ist. Wie
oben beschrieben sind die Mechanismen zum Behandeln von Ausnahmen
und Aufrufen des Betriebssystems entworfen, um das LME als gesetzt oder
frei zu behandeln, und daher können
die 32 Bit und 16 Bit Modi unverändert
arbeiten, sogar obwohl der Prozessor 10 fähig ist,
in dem 32/64 Modus zu arbeiten. Des weiteren kann, durch zur Verfügung stellen
der x86 kompatiblen 16 und 32 Bit Modi, wenn das LME Bit nicht gesetzt
ist, (und Ignorieren des L Bits, das in diesen Modi reserviert ist)
der Prozessor 10 in einem System arbeiten, in dem das L
Bit für
einige andere Zwecke als für
den 32/64 Modus reserviert ist, und kann immer noch den 32/64 Modus
unterstützen,
falls das LME Bit gesetzt ist. Entsprechend kann ein System, das
ein 32 Bit Betriebssystem und 32 Bit oder 16 Bit Anwendungsprogramme verwendet,
den Prozessor 10 verwenden. Nachfolgend könnte das
System auf ein 64 Bit Betriebssystem aufgerüstet werden, ohne dass der
Prozessor 10 geändert
werden muss.
-
Nicht dargestellt ist in der 4 ein 64 Bit Betriebssystem
und ein 64 Bit Anwendungsprogramm, die mit gesetztem LME Bit arbeiten.
Der Mechanismus zum Aufrufen von Routinen des Betriebssystems, der
zuvor für
das 64 Bit Betriebssystem und das 32 Bit Anwendungsprogramm beschrieben
wurde, kann ebenfalls auf das 64 Anwendungsprogramm angewendet werden.
Des weiteren werden Aufruftore, welche 64 Bit an Verschiebung unterstützen, unterstützt (wie
unten detaillierter beschrieben werden wird).
-
Nun Bezug nehmend auf 5 ist eine Tabelle 70 gezeigt,
welche die Zustände
des LME Bits, des L Bits in dem Codesegmentdeskriptor und des D Bits
in dem Codesegmentdeskriptor und des entsprechenden Betriebsmodus
des Prozessors 10 in Übereinstimmung
mit einem Ausführungsbeispiel
des Prozessors 10 darstellt. Wie die Tabelle 70 darstellt, ist,
falls das LME Bit frei ist, das L Bit dann reserviert (und als Null
definiert). Jedoch kann der Prozessor 10 das L Bit als
ein don't care behandeln,
wenn das LME Bit nicht gesetzt ist. Daher können die x86 kompatiblen 16
Bit und 32 Bit Modi von dem Prozessor 10 zur Verfügung gestellt
werden, wenn das LME Bit frei ist. Falls das LME Bit gesetzt ist
und das L Bit in dem Codesegment frei ist, dann wird von dem Prozessor 10 ein
Kompätibilitäts-Betriebsmodus eingerichtet und
das D Bit wählt
den 16 Bit oder den 32 Bit Modus aus. Falls das LME Bit und das
L Bit gesetzt sind und das D Bit Frei ist, wird der 32/64 Modus
für den
Prozessor 10 ausgewählt.
Schließlich
wird der Modus reserviert, der ausgewählt werden würde, wenn
sowohl das LME, das L und auch das D Bit gesetzt sind.
-
Wie zuvor erwähnt und unten in 6 dargestellt, umfasst der
32/64 Bit Betriebsmodus eine voreingestellte Adressgröße, die über 32 Bit
hinausgeht (abhängig
von der Implementierung, aber bis zu 64 Bit), und eine voreingestellte
Operandengröße von 32
Bit. Die voreingestellte Operandengröße von 32 Bit kann auf 64 Bit übersteuert
werden über
eine bestimmte Kodierung eines Befehls. Die voreingestellte Operandengröße von 32
Bit ist gewählt,
um die durchschnittliche Länge
der Befehle für
Programme zu minimieren (da die Übersteuerung
auf 64 Bit die Einbindung eines Befehlspräfixes in der Kodierung des
Befehls umfasst, was die Länge
des Befehls erhöhen
kann), in denen 32 Bit für
viele der von dem Programm ausgeführten Manipulationen von Daten ausreichend
sind. Für
derartige Programme (welche eine erhebliche Anzahl der derzeit existierenden
Programme sein können)
kann die Bewegung zu einer 64 Bit Operandengröße die von dem Programm erzielte
Leistungsfähigkeit
der Ausführung
tatsächlich verringern
(das heißt
eine erhöhte
Ausführungszeit). Teilweise
kann diese Verringerung der Verdoppelung der Größe in dem Speicher der von
dem Programm benutzten Datenstrukturen zugerechnet werden, wenn
64 Bit Werte gespeichert werden. Falls 32 Bit ausreichend sind,
würden
diese Datenstrukturen 32 Bit speichern. Daher steigt die Anzahl
von zugegriffenen Bytes an, wenn die auf die Datenstruktur zugegriffen
wird, falls 64 Bit Werte verwendet werden, wo 32 Bit Werte ausreichen
würden,
und die erhöhte Speicherbandbreite
(und erhöhter
Platz des Cachespeichers, der von jedem Wert belegt wird) kann eine erhöhte Ausführungszeit
verursachen. Entsprechend werden 32 Bit als die voreingestellte
Operandengröße ausgewählt sein
und die Vorgabe kann über
die Kodierung eines bestimmten Befehls übersteuert werden.
-
Nun Bezug nehmend auf 6 ist eine Tabelle 72 gezeigt,
die ein Ausführungsbeispiel
der Verwendung von Befehlspräfixen
zur Übersteuerung
des Betriebsmodus für
einen bestimmten Befehl darstellt. Weitere Ausführungsbeispiel sind möglich und
werden betrachtet. Der Ausführungskern 14 bestimmt die
Adressgröße und die
Operandengröße für einen bestimmten
Befehl in Übereinstimmung
mit der Tabelle 72. Insbesondere für das in der 6 dargestellte Ausführungsbeispiel kann ein Präfix Byte
des Befehls (das Präfix
Byte zur Übersteuerung
der Adressgröße) verwendet
werden, um die voreingestellte Adressgröße zu übersteuern, und ein weiteres Präfix Byte
des Befehls (das Präfix
Byte zur Übersteuerung
der Operandengröße) kann
zur Übersteuerung
der voreingestellten Operandengröße verwendet
werden. Das Präfix
Byte zur Übersteuerung
der Adressgröße ist als
67 (hexadezimal) kodiert und das Präfix Byte zur Übersteuerung
der Operandengröße ist als
66 (hexadezimal) kodiert. Die Anzahl der Präfixe zum Übersteuern in dem bestimmten
Befehl bildet die Spalten der Tabelle. Die Zeilen der Tabelle zeigen
die Operandengröße und die
Adressgröße des bestimmten
Befehls an, basierend auf dem Betriebsmodus und der Anzahl der Präfixe zum Übersteuern
in der entsprechenden Spalte. Die Anzahl der Präfixe zum Übersteuern bezieht sich auf
die Anzahl der Präfixe
zum Übersteuern
des entsprechenden Typs (zum Beispiel sind die Adressgrößenzeilen die
Adressgrößen basierend
auf der Anzahl der Präfixe
zum Übersteuern
der Adressgröße und die
Operandengrößenzeilen
sind die Operandengrößen basierend
auf der Anzahl der Präfixe
zum Übersteuern der
Operandengröße).
-
Die mit "0" bezeichnete Spalte für die Anzahl der
Präfixe
zum Übersteuern
stellt die voreingestellte Operandengröße und Adressgröße für jeden
Betriebsmodus dar. Es ist zu bemerken, dass die 32 Bit und die 16
Bit Zeilen sich sowohl auf die Kompatibilitätsmodi (LME gesetzt) als auch
auf die Standard Modi (LME frei) beziehen. Des weiteren kann, während die
voreingestellte Adressgröße 64 Bit
in dem 32/64 Modus ist, die tatsächliche
Anzahl der Adressbits von der Implementierung abhängen, wie
zuvor diskutiert.
-
Die Einbeziehung von einem Präfix zum Übersteuern
der Adressgröße in dem
32/64 Bit Modus ändert
die Adressgröße von 64
Bit (was für
eine bestimmte Implementierung weniger als 64 Bit sein kann, aber
größer als
32 Bit ist) auf 32 Bit, wie in der Tabelle 72 gezeigt.
Des weiteren ändert
die Einbeziehung eines Präfix
zum Übersteuern
der Operandengröße in dem
32/64 Bit Modus die Operandengröße von 32
Bit auf 64 Bit. Es kann wünschenswert
sein, auch einen 16 Bit Operanden zur Verfügung zu stellen (zum Beispiel
um den kurzen Integer Datentyp in der "C" Programmiersprache
zu unterstützen).
Entspreched wählt
die Einbeziehung von zwei Präfixen zum Übersteuern
der Operandengröße in dem
32/64 Bit Modus eine Operandengröße von 16
Bit aus. Die Einbeziehung von mehr als zwei Präfixen zum Übersteuern der Operandengröße führt zu der
gleichen Operandengröße wie die
Einbeziehung von zwei Präfixen
zum Übersteuern
der Operandengröße. Auf ähnliche
Weise führt
die Einbeziehung von mehr als einem Präfix zum Übersteuern der Adressgröße zu der
gleichen Adressgröße wie die
Einbeziehung von einem Präfix
zum Übersteuern
der Adressgröße.
-
Für
die 32 Bit Modi schaltet die Einbeziehung von einem Präfix zum Übersteuern
die voreingestellte 32 Bit Größe auf 16
Bit um und die Einbeziehung von mehr als einem Präfix zum Übersteuern
hat die gleiche Auswirkung wie die Einbeziehung von einem Präfix zum Übersteuern. Ähnlich für 16 Bit
Modi schaltet die Einbeziehung von einem Präfix zum Übersteuern die voreingestellte
16 Bit Größe auf 32 Bit
um und die Einbeziehung von mehr als einem Präfix zum Übersteuern hat die gleiche
Auswirkung wie die Einbeziehung von einem Präfix zum Übersteuern.
-
Nun Bezug nehmend auf 7 ist ein Diagramm gezeigt,
das ein Ausführungsbeispiel
des LEAX Registers 74 darstellt. Weitere Register in der Registerdatei 22 können ähnlich sein.
Weitere Ausführungsbeispiel
sind möglich
und werden betrachtet. In dem Ausführungsbeispiel von 7 enthält das Register 74 64
Bit, wobei das höchstwertige
Bit als Bit 63 bezeichnet ist und das niedrigstwertige
Bit als Bit 0 bezeichnet ist. Die 7 stellt die zugegriffenen Bereiche des
LEAX Registers dar, basierend auf der Operandengröße eines
Befehls (falls das A Register als ein Operand ausgewählt wird).
Genauer gesagt wird auf die Gesamtheit des Registers 74 zugegriffen,
wenn die Operandengröße 64 Bit
ist (wie durch die mit "LEAX" bezeichnete Klammer
in der 7 dargestellt).
Falls die Operandengröße 32 Bit ist,
wird auf die Bits 31:0 des Registers 74 zugegriffen (wie
durch die mit "EAX" bezeichnete Klammer
in der 7 dargestellt).
Falls die Operandengröße 16 Bit ist,
wird auf die Bits 16:0 des Registers 74 zugegriffen (wie
durch die mit "AX" bezeichnete Klammer
in der 7 dargestellt).
Die obigen Operandengrößen können ausgewählt werden
basierend auf dem Betriebsmodus und der Einbeziehung von jeglicher
Präfixes
zum Übersteuern.
Jedoch sind Opcodes von gewissen Befehlen definiert, welche auf
ein acht Bit Register (AH oder AL in der 7) zugreifen.
-
Nun Bezug nehmend auf 8 ist ein Blockdiagramm
gezeigt, das ein Ausführungsbeispiel
einer globalen Deskriptortabelle 80 und einer lokalen Deskriptortabelle 82 darstellt.
Weitere Ausführungsbeispiele
sind möglich
und werden betrachtet. Wie in der 8 dargestellt
und zuvor erwähnt
wird die Basisadresse der globalen Deskriptortabelle 80 von
dem GDTR 32 zur Verfügung
gestellt und die Basisadresse der lokalen Deskriptortabelle 82 wird
von dem LDTR 30 zur Verfügung gestellt. Entsprechend
können,
um die beliebige Platzierung der globalen Deskriptortabelle 80 und
der lokalen Deskriptortabelle 82 in dem virtuellen Adressraum
zu unterstützen,
das GDTR 32 und das LDTR 30 64 Bit Basisadressen speichern.
Falls das LME Bit frei ist, können
die niedrigstwertigen 32 Bit der Basisadresse verwendet werden,
um die Deskriptortabellen zu lokalisieren.
-
Sowohl die globale Deskriptortabelle 80 als auch
die lokale Deskriptortabelle 82 sind konfiguriert, um Segmentdeskriptoren
verschiedener Typen zu speichern. Zum Beispiel sind die Codesegmentdeskriptoren 84, 86 und 90 für den 32/64
Modus und die Codesegmentdeskriptoren 92 und 94 für den Kompatibilitätsmodus
in der 8 dargestellt.
Jeder der Deskriptoren 84 – 94 belegt einen
Eintrag in der entsprechenden Deskriptortabelle, wo ein Eintrag
fähig ist zum
Speichern eines Segmentdeskriptors (zum Beispiel 8 Byte für die in
den 2 und 3 dargestellten Ausführungsbeispiele).
Ein weiterer Typ eines Deskriptors in der globalen Deskriptortabelle 80 ist
ein Deskriptor 96 der lokalen Deskriptortabelle, der ein Systemsegment
für die
lokale Deskriptortabelle 82 definiert und die in dem LDTR 30 gespeicherte
Basisadresse zur Verfügung
stellt. Das LDTR 30 wird unter Verwendung eines LDT Befehls
initialisiert, der als Operanden den einen Segmentselektor lokalisierenden
Deskriptor 96 in der globalen Deskriptortabelle 80 hat.
Die globale Deskriptortabelle 80 kann mehrere LDT Deskriptoren
speichern, die falls gewünscht verschiedene
lokale Deskriptortabellen lokalisieren. Da der LDT Deskriptor 96 eine
64 Bit Verschiebung speichern kann, falls das LME Bit gesetzt ist,
kann der LDT Deskriptor 96 zwei Einträge in der globalen Deskriptortabelle 80 belegen.
Falls das LME Bit frei ist, kann der LDT Deskriptor 96 einen
einzelnen Eintrag in der globalen Deskriptortabelle 80 belegen.
Auf ähnliche
Weise kann jede Aufgabe einen Aufgabezustandsegment (TSS) Deskriptor
in einer der Deskriptortabellen 80 und 82 haben,
um gewisse auf die Aufgabe bezogene Information zu speichern. Entsprechend
kann der TSS Deskriptor zwei Einträge be legen, um es der TSS Information
zu erlauben, irgendwo indem 64 Bit Adressraum zu speichern.
-
Die lokale und die globale Deskriptortabelle können auch
einen Aufruftor Deskriptor speichern. Zum Beispiel stellt 8 Aufruftor Deskriptoren 100, 102 und 104 dar.
Die Aufruftor Deskriptoren unterstützen ebenfalls eine 64 Bit
Verschiebung und können
daher auch zwei Einträge
in der entsprechenden Deskriptortabelle belegen. Ein beispielhafter
32/64 Aufruftor Deskriptor ist unten in 9 dargestellt.
-
Durch Halten der Segmentdeskriptortabellen 80 und 82 bei
8 Byte und Verwendung von zwei Einträge für Deskriptoren, die eine Verschiebung
von 64 Bit enthalten, können
Deskriptoren für
die 16 und 32 Bit Modi in den gleichen Tabellen gespeichert werden wie
die Deskriptoren, die eine Verschiebung von 64 Bit enthalten. Daher
können
Anwendungen, die in den Kompatibilitätsmodi arbeiten, geeignete
Deskriptoren in den gleichen Segmentdeskriptortabellen haben wie
die 64 Bit Betriebssysteme.
-
Im Allgemeinen werden Aufruftore
verwendet, um den Übergang
zwischen einem Codesegment, das eine niedrigere Privilegierungsstufe
hat, und einem Codesegment, das eine höhere Privilegierungsstufe hat,
zu verwalten (zum Beispiel ein Anwendungsprogramm, das eine Routine
des Betriebssystems aufruft). Der weniger privilegierte Code enthält einen
Aufruf- oder einen anderen Verzweigungsbefehl, der als ein Ziel
einen Segmentselektor angibt (und eine Verschiebung in das Segment,
die in diesem Fall ignoriert wird). Der Segmentselektor identifiziert
einen Aufruftor Deskriptor innerhalb der Deskriptortabellen, welcher
eine minimale Privilegierungsstufe enthält, der erforderlich ist, um
den Code mit höherer
Privilegierungsstufe auszuführen.
Wenn der Prozessor 10 den Aufruf- oder einen anderen Verzweigungsbefehl
ausführt,
indiziert der Prozessor 10 die Deskriptortabellen mit dem
Segmentselektor und lokalisiert das Aufruftor. Falls die derzeitige
Privilegierungsstufe des Prozessors 10 und die Privilegierungsstufe
des Anfragenden (die Teil des Segmentselektors ist und verwendet
werden kann, um die derzeitige Privilegierungsstufe für Zwecke
der Überprüfung der
Privilegierung zu senken) beide ausreichende Privilegierung zum
Ausdruck bringen (zum Beispiel sind die Privilegierungsstufe numerisch
kleiner oder gleich der minimalen Privilegierungsstufe in dem Aufruftor
Deskriptor), kann dann der Aufruf fort fahren. Der Aufruftor Deskriptor
enthält
einen Segmentselektor für
das Zielsegment (das Codesegment mit der höheren Privilegierungsstufe)
und die Verschiebung innerhalb des Zielsegments, an dem das Aufrufen
des Codes anzufangen hat. Der Prozessor 10 extrahiert den
Segmentselektor und die Verschiebung aus dem Aufruftor Deskriptor
und liest den Zielsegmentdeskriptor, um das Abrufen des Codes zu beginnen,
der die höhere
Privilegierungsstufe hat. Auf der anderen Hand, falls entweder die
derzeitige Privilegierungsstufe oder die Privilegierungsstufe des Anfragenden
eine niedrigere Privilegierungsstufe hat als die minimale Privilegierungsstufe
in dem Aufruftor Deskriptor (zum Beispiel ist entweder die derzeitige oder
die Privilegierungsstufe des Anfragenden numerisch größer als
die minimale Privilegierungsstufe), signalisiert der Prozessor 10 eine
Ausnahme nach dem Zugreifen auf den Aufruftor Deskriptor und ohne
ein Zugreifen auf den Zieldeskriptor. Daher wird ein Zugriff auf
Code, der auf höheren
Privilegierungsstufen ausgeführt
wird, sorgfältig
kontrolliert.
-
Wie zuvor erwähnt enthält der Aufruftor Deskriptor
einen Zielsegmentselektor und die Verschiebung innerhalb des Segments.
Die Bezugnahme auf den Zielsegmentselektor ist in 8 als ein Pfeil von einem Aufruftor Deskriptor
zu einem anderen Deskriptor dargestellt. Zum Beispiel verweist der
Aufruftor Deskriptor 100 auf den Modus Deskriptor 90;
der Aufruftor Deskriptor 102 verweist auf den 32/64 Modus
Deskriptor 86 und der Aufruftor Deskriptor 104 verweist
auf den 32/64 Modus Deskriptor 84. Wie 8 darstellt, kann ein Aufruftor Deskriptor
in jeder Deskriptortabelle gespeichert werden und kann auf einen
Deskriptor in der anderen Tabelle oder in der gleichen Tabelle verweisen.
Des weiteren kann ein Aufruftor Deskriptor entweder auf einen 32/64
Modus Deskriptor oder auf einen Kompatibilitätsmodus Deskriptor verweisen.
-
Im Allgemeinen, wenn der Prozessor 10 einen
Deskriptor von einer der Deskriptortabellen unter Verwendung eines
Segmentselektors liest, wird ein Eintrag der Deskriptortabelle gelesen.
Falls jedoch das LME Bit gesetzt ist und der Prozessor 10 detektiert,
dass der Eintrag ein Aufruftor Deskriptor, ein LDT Deskriptor oder
ein TSS Deskriptor ist, liest der Prozessor 10 den nächsten darauf
folgenden Eintrag in der Tabelle, um den Rest des Deskriptors zu
erhalten. Entsprechend können
Aufruftor Deskriptoren, LDT Deskriptoren und TSS Deskriptoren in
einer Ta belle zusammen mit Kompatibilitätsmodus Deskriptoren (oder
Standardmodus Deskriptoren) existieren, die von einer anderen Größe sind,
ohne die Größe der Einträge in der
Tabelle umzudefinieren oder ohne die Tabelle für Deskriptoren, die einen Eintrag
belegen, zu verwalten. Des weiteren wird, da auf den zweiten Teil
des Aufruftor Deskriptors, des LDT Deskriptors und des TSS Deskriptors
als ein Segmentdeskriptor zugegriffen werden kann, der Teil des
Deskriptors, der das Typ Feld eines Deskriptors in dem zweiten Teil
sein würde,
auf einen ungültigen
Typ gesetzt, wenn der Deskriptor in der in der Deskriptortabelle
gespeichert wird, wie unten in 9 gezeigt
ist. Alternativ kann der Prozessor 10 jedes Mal zwei aufeinander
folgende Einträge
aus einer Deskriptortabelle lesen, wenn ein Lesevorgang auf eine
Deskriptortabelle durchgeführt
wird, und der zweite Eintrag kann verwendet werden, falls der erste
Eintrag ein Aufruftor, ein LDT Deskriptor Typ oder ein TSS Deskriptor
Typ ist.
-
Es ist zu bemerken, dass Code, der
in jeglichem Betriebsmodus (32/64 Modus, 32 Bit Kompatibilitätsmodus
oder 16 Bit Kompatibilitätsmodus)
arbeitet, auf einen Aufruftor Deskriptor verweisen kann, wenn das
LME Bit gesetzt ist. Daher kann eine 32 oder 16 Bit Anwendung unter
Verwendung des Aufruftor Mechanismus eine Routine des Betriebssystems
aufrufen, sogar wenn die Adresse der Routine außerhalb des 32 Bit oder 16
Bit Adressraums ist. Des weiteren kann ein Aufruftor Deskriptor
auf ein Codesegment verweisen, das einen beliebigen Betriebsmodus
hat. Das Betriebssystem kann sicher stellen, dass die höchstwertigen
32 Bits der Verschiebung in dem Aufruftor Null sind (für ein 32
Bit Zielsegment) oder die höchstwertigen
48 Bits der Verschiebung in dem Aufruftor Null sind (für ein 16
Bit Zielsegment).
-
Nun Bezug nehmend auf 9 ist ein Blockdiagramm
eines Ausführungsbeispiels
eines Aufruftor Deskriptors 120 gezeigt. Weitere Ausführungsbeispiele
sind möglich
und werden betrachtet. Ähnlich zu
den 2 und 3 sind die höchstwertigen
Bits über den
niedrigstwertigen Bits dargestellt. Das höchstwertige Bit jeder Gruppe
von vier Bytes ist als Bit 31 dargestellt und das niedrigstwertige
Bit ist als Bit 0 dargestellt. Kurze vertikale Linien innerhalb
der vier Bytes begrenzen jedes Bit und die langen vertikalen Linien
begrenzen ein Bit, aber begrenzen auch ein Feld. Wie zuvor erwähnt, belegt
ein Aufruftor Deskriptor zwei Einträge in einer Deskriptortabelle.
Die horizontale, gestrichelte Linie in 9 trennt den Aufruftor Deskriptor 120 in
einen oberen Teil (über der
Linie) und einen unteren Teil (unterhalb der Linie). Der untere
Teil ist in dem Eintrag gespeichert, der von dem Segmentselektor
des Aufruftors indiziert wird, und der obere Teil ist in dem nächsten darauf
folgenden Eintrag gespeichert.
-
Der Aufruftor Deskriptor 120 enthält einen Zielsegmentselektor
(Feld 122), eine Verschiebung (Felder 124A, 124B und 124C),
ein Vorhanden (P) Bit 126, eine Deskriptor Privilegierungsstufe
(DPL) 128, ein Typ Feld 130 und ein Pseudo-Typ
Feld 132. Das P Bit ist ähnlich zu dem oben beschriebenen
P Bit 48. Die Zielsegmentselektor identifiziert einen Eintrag
innerhalb einer der Deskriptortabellen, in dem der Zielsegmentdeskriptor
(mit der höheren
Privilegierungsstufe) gespeichert ist. Die Verschiebung identifiziert die
Adresse, an der das Abrufen des Codes zu starten hat. In dem 32/64
Modus ist die Verschiebung die Adresse, an der das Abrufen des Codes
startet, weil das Codesegment keine Basisadresse hat und die flache
lineare Adressierung verwendet wird. In anderen Modi wird die Verschiebung
zu der von dem Zielsegmentselektor definierten Basisadresse addiert, um
die Adresse zu erzeugen, an der Abrufen des Codes startet. Wie zuvor
erwähnt
kann die Verschiebung in dem vorliegenden Ausführungsbeispiel 64 Bit aufweisen.
-
Die DPL 128 speichert die
minimale Privilegierungsstufe, den die aufrufende Routine haben muss
(sowohl in der derzeitigen Privilegierungsstufe als auch in der
angeforderten Privilegierungsstufe), welche erfolgreich durch das
Aufruftor gelangen könnte
und die aufgerufene Routine in der Privilegierungsstufe ausführt, die
in dem Zielsegmentdeskriptor angegeben ist.
-
Das Typ Feld 130 ist auf
einen Typ des Aufruftor Deskriptors kodiert. In einem Ausführungsbeispiel
ist dieser Typ als der in der x86 Architektur definierte 32 Bit
Aufruftor Typ kodiert. Alternativ können andere Kodierungen verwendet
werden. Schließlich ist
das Pseudo-Typ Feld 132 auf einen ungültigen Typ (zum Beispiel Null)
kodiert, um sicher zu stellen, dass, falls ein Segmentselektor präsentiert
wird, der den Eintrag in der Segmenttabelle identifiziert, der die
obere Hälfte
des Aufruftor Deskriptors 120 speichert, dann eine Ausnahme
von dem Prozessor 10 signalisiert wird.
-
Es ist zu bemerken, dass die untere
Hälfte des
LDT Deskriptors 96 gleich sein kann wie der 32 Bit LDT
Deskriptor 96 und die obere Hälfte des LDT Deskriptors 96 gleich
sein kann zu der oberen Hälfte des
Aufruftor Deskriptors 120.
-
Nun Bezug nehmend auf 10 ist ein Blockdiagramm
eines Befehlsformats 140 für Befehle gezeigt, die von
dem Prozessor 10 ausgeführt
werden. Weitere Ausführungsbeispiel
sind möglich
und werden betrachtet. In dem Ausführungsbeispiel von 10 enthält das Befehlsformat 140 ein
Präfixfeld 142,
ein Opcode Feld 144, ein mod R/M (Register/Speicher) Feld 146,
ein SIB (Skalierung Indexbasis) Feld 148, ein Versetzungsfeld 150 und
ein Unmittelbar Feld 152. Jedes der Felder außer dem
Opcode Feld 144 sind optional. Daher kann das Befehlsformat 140 einen
Befehl variabler Länge
definieren.
-
Das Präfixfeld 142 wird für jegliche
Befehlspräfixe
für den
Befehl verwendet. Wie oben beschrieben können ein Präfix zum Übersteuern der Operandengröße und ein
Präfix
zum Übersteuern der
Adressgröße in einem
Befehl kodiert sein, um den Betriebsmodus des Prozessors 10 zu übersteuern.
Wie zuvor erwähnt
kann der Präfix
zum Übersteuern
der Operandengröße und der
Präfix
zum Übersteuern
der Adressgröße jeweils
byteweise in dem Präfixfeld 142 enthalten
sein.
-
Das Opcode Feld 144 enthält den Opcode
eines Befehls (das heißt
welcher Befehl in dem Befehlssatz ausgeführt wird). Für einige
Befehle können Operanden
in dem Opcode Feld 144 angegeben sein. Für andere
Befehle kann ein Teil des Opcodes in dem mod R/M Feld 146 enthalten
sein. Des weiteren können
gewisse Opcodes ein acht Bit oder ein 16 Bit Register als Operanden
angeben. Daher können Kodierungen
des Opcodes dazu dienen, auch die von dem Betriebsmodus des Prozessors 10 angegebenen
Voreinstellungen zu übersteuern.
-
Das mod R/M Feld 146 und
das SIB Feld 148 geben die Operanden des Befehls an. Das
Versetzungsfeld 150 umfasst jegliche Versetzungsinformation
und das Unmittelbar Feld 152 enthält einen unmittelbaren Operanden.
-
Computersystem
-
Es wird nun auf 25 Bezug
genommen, in der ein Blockdiagramm gezeigt ist, das ein Ausführungsbeispiel
eines Computersystems 200 einschließlich des Prozessors 10 darstellt,
der über
eine Busbrücke 202 mit
einer Vielzahl von Systemkomponenten verbunden ist. Weitere Ausführungsbeispiele sind
möglich
und werden betrachtet. In dem dargestellten System ist ein Hauptspeicher 204 über einen Speicherbus 206 mit
der Busbrücke 202 verbunden und
eine Grafiksteuerung 208 ist über einen AGP Bus 210 mit
der Busbrücke 202 verbunden.
Schließlich
ist eine Vielzahl von PCI Geräten 212A – 212B über einen
PCI Bus 214 mit der Busbrücke 202 verbunden.
Eine zweite Busbrücke 216 kann
ferner vorgesehen sein, um einem oder mehreren EISA oder ISA Geräten 218 über einen
EISA/ISA Bus 220 eine elektrische Schnittstelle zu bieten.
Der Prozessor 10 ist über
einen CPU Bus 224 mit der Busbrücke 202 und mit einem
optionalen L2 Cachespeicher 228 verbunden. Zusammen können der
CPU Bus 224 und die Schnittstelle zu dem L2 Cachespeicher 228 eine externe
Schnittstelle aufweisen, an welche die externe Schnittstelleneinheit 18 anschließen kann.
-
Die Busbrücke 202 stellt eine
Schnittstelle zwischen dem Prozessor 10, dem Hauptspeicher 204,
der Grafiksteuerung 208 und an den PCI Bus 214 angebrachten
Geräten
zur Verfügung.
Wenn eine Operation von einem der an die Busbrücke 202 angeschlossenen
Geräte
empfangen wird, identifiziert die Busbrücke 202 das Ziel der
Operation (zum Beispiel ein bestimmtes Gerät oder in dem Fall des PCI
Busses 214, dass das Ziel auf dem PCI Bus 214 ist).
Die Busbrücke 202 führt die
Operation zu dem angezielten Gerät.
Die Busbrücke 202 übersetzt
im Allgemeinen eine Operation von dem Protokoll, das von dem Quellgerät oder -bus
benutzt wird, in das Protokoll, das von dem Zielgerät oder -bus
benutzt wird.
-
Zusätzlich zur Bereitstellung einer
Schnittstelle zu einem ISA/EISA Bus für den PCI Bus 214 kann
die zweite Busbrücke 216 wie
gewünscht
weitere Funktionalität
enthalten. Eine Eingangs/Ausgangssteuerung (nicht gezeigt), entweder
außerhalb von
der oder in die zweite Busbrücke 216 integriert, kann
auch in dem Computersystem 200 enthalten sein, um operationelle
Unterstützung
für eine
Tastatur und Maus 222 und für verschiedene serielle und parallele
Anschlüsse
wie gewünscht
zur Verfügung zu
stellen. Eine externe Cachespeichereinheit (nicht gezeigt) kann
ferner an den CPU Bus 224 zwischen dem Prozessor 10 und
der Busbrücke 202 in
anderen Ausführungsbeispielen
angeschlossen sein. Alter nativ kann der externe Cachespeicher an
die Busbrücke 202angeschlossen
sein und die Cachespeichersteuerlogik für den externen Cachespeicher
kann in der Busbrücke 202 integriert
sein. Ein L2 Cachespeicher 228 ist des weiteren in einer
hinter dem Prozessor 10 angeordneten Konfiguration gezeigt.
Es ist zu bemerken, dass der L2 Cachespeicher 228 getrennt
von dem Prozessor 10, in einem Einsatz (zum Beispiel Slot
1 oder Slot A) für
den Prozessor 10 integriert oder sogar integriert auf einem
Halbleitersubstrat in dem Prozessor 10 sein kann.
-
Der Hauptspeicher 204 ist
ein Speicher, in dem Anwendungsprogramme gespeichert werden und
von dem der Prozessor 10 hauptsächlich ausführt. Ein geeigneter Hauptspeicher 204 weist
DRAM (dynamischen wahlfreien Zugriffsspeicher) auf. Zum Beispiel
kann eine Vielzahl von Bänken
an SDRAM (Synchrones DRAM) oder an Rambus DRAM (RDRAM) geeignet
sein.
-
Die PCI Geräte 212A – 212B sind
beispielhaft für
eine Vielzahl von peripheren Geräten,
wie zum Beispiel Netzwerkschnittstellenkarten, Videobeschleunigern,
Audiokarten, Festplatten oder Diskettenlaufwerken oder Laufwerkssteuerungen,
SCSI (kleine Computer Systemschnittstelle) Adaptern oder Telefoniekarten.
Auf ähnliche
Weise ist das ISA Gerät 218 beispielhaft
für verschiedene
Typen von peripheren Geräten,
wie einem Modem, einer Soundkarte und einer Vielzahl von Daten sammelnden
Karten, wie GPIB oder Feldbus Schnittstellenkarten.
-
Die Grafiksteuerung 208 ist
vorgesehen, um Text und Bilder auf einer Anzeige 256 sichtbar
zu machen. Die Grafiksteuerung 208 kann einen typischen Grafikbeschleuniger
verwenden, der allgemein im Stand der Technik bekannt ist, um dreidimensionale Datenstrukturen
sichtbar zu machen, die effektiv aus und in den Hauptspeicher 204 geschoben
werden können.
Die Grafiksteuerung 208 kann daher ein Master von dem AGP
Bus 210 sein, so dass es Zugriff auf eine Zielschnittstelle
innerhalb der Busbrücke 202 anfordern
und empfangen kann, um dadurch Zugriff auf den Hauptspeicher 204 zu
bekommen. Ein fest zugeordneter Grafikbus erlaubt eine schnelle
Erlangung von Daten aus dem Hauptspeicher 204. Für gewisse
Operationen kann die Grafiksteuerung 208 des weiteren konfiguriert
sein, um auf dem AGP Bus Transaktionen nach dem PCI Protokoll zu
erzeugen. Die AGP Schnittstelle der Busbrücke 202 kann daher Funktionalitäten enthalten,
um sowohl Transaktionen nach dem AGP Protokoll als auch Ziel- und Urhebertransaktionen
nach dem PCI Protokoll zu unterstützen. Die Anzeige 226 ist
jegliche elektronische Anzeige, auf der ein Bild oder ein Text dargestellt
werden kann. Eine geeignete Anzeige umfasst eine Kathodenstrahlröhre („CRT"), ein Flüssigkristalldisplay („LCD") usw.
-
Es ist zu bemerken, dass, während die
AGP, PCI und ISA oder EISA Busse in der obigen Beschreibung als
Beispiele benutzt worden sind, jede Busarchitektur wie gewünscht ersetzt
werden kann. Es ist weiter zu bemerken, dass das Computersystem 200 ein
Mehrfachprozessorsystem sein kann, das zusätzliche Prozessoren enthält (zum
Beispiel Prozessor 10a, der als optionale Komponente des Computersystems 200 gezeigt
ist). Der Prozessor 10a kann ähnlich zu dem Prozessor 10 sein.
Genauer gesagt kann der Prozessor 10a eine identische Kopie
des Prozessors 10 sein. Der Prozessor 10a kann über einen
unabhängigen
Bus (wie in 11 gezeigt)
mit der Busbrücke 202 verbunden
sein oder kann den CPU Bus 224 mit dem Prozessor 10 teilen. Des
weiteren kann der Prozessor 10a mit einem optionalen L2
Cachespeicher 228a verbunden sein, der dem L2 Cachespeicher 228 ähnlich ist.
-
Es wird nun auf 12 Bezug genommen, in der ein weiteres
Ausführungsbeispiel
eines Computersystems 300 gezeigt ist. Weitere Ausführungsbeispiele
sind möglich
und werden betrachtet. In dem Ausführungsbeispiel von 12 enthält das Computersystem 300 mehrere
Verarbeitungsknoten 321A, 312B, 312C und 312D.
Jeder Verarbeitungsknoten ist mit einem entsprechenden Speicher 314A – 314D über eine
Speichersteuerung 316A – 316D verbunden,
die in jedem entsprechenden Verarbeitungsknoten 312A – 312D enthalten
ist. Des weiteren enthalten die Verarbeitungsknoten 312A – 312D eine
Interfacelogik, die zur Kommunikation zwischen den Verarbeitungsknoten 312A – 312D verwendet
wird. Zum Beispiel enthält
der Verarbeitungsknoten 312A eine Interfacelogik 318A zum
Kommunizieren mit dem Verarbeitungsknoten 312B, eine Interfacelogik 318B zum
Kommunizieren mit dem Verarbeitungsknoten 312C und eine
dritte Interfacelogik 318C zum Kommunizieren mit noch einem
weiteren Verarbeitungsknoten (nicht gezeigt). Auf ähnliche
Weise enthält
der Verarbeitungsknoten 312B die Interfacelogiken 318D, 318E und 318F;
der Verarbeitungsknoten 312C enthält die Interfacelogiken 318G, 318N und 318I und
der Verarbeitungsknoten 312D enthält die Interfacelogiken 318J, 318K und 318L.
Der Verarbeitungskno ten 312D ist angeschlossen, um mit
einer Vielzahl von Eingangs/Ausgangs Geräten (zum Beispiel Geräte 320A – 320B in
verketteter Konfiguration) über
die Interfacelogik 318L zu kommunizieren. Weitere Verarbeitungsknoten
können
mit anderen I/O Geräten
in ähnlicher
Weise kommunizieren.
-
Die Verarbeitungsknoten 312A – 312D implementieren
eine paketbasierte Verbindung für
die Kommunikation zwischen den Verarbeitungsknoten. In dem vorliegenden
Ausführungsbeispiel
ist die Verbindung als Sätze
von unidirektionalen Leitungen verwirklicht (zum Beispiel werden
Leitungen 324A verwendet, um Pakete von dem Verarbeitungsknoten 312A zu
dem Verarbeitungsknoten 312B zu übermitteln und Leitungen 324B werden
verwendet, um Pakete von dem Verarbeitungsknoten 312B zu
dem Verarbeitungsknoten 312A zu übermitteln). Weitere Sätze von
Leitungen 324C – 324N werden
wie in 12 dargestellt
verwendet, um Pakete zwischen den anderen Verarbeitungsknoten zu übermitteln.
Im Allgemeinen kann jeder Satz von Leitungen 324 eine oder
mehrere Datenleitungen, eine oder mehrere den Datenleitungen entsprechende
Taktleitungen und eine oder mehrere Steuerleitungen zur Anzeige des
Typs des beförderten
Pakets aufweisen. Die Verbindung kann für die Kommunikation zwischen
den Verarbeitungsknoten auf eine mit einem Cachespeicher kohärente Weise
betrieben werden oder für
die Kommunikation zwischen einem Verarbeitungsknoten und einem I/O
Gerät (oder
einer Busbrücke
zu einem I/O Bus von konventioneller Konstruktion, wie einem PCI
Bus oder einem ISA Bus) auf nicht kohärente Weise betrieben werden.
Des weiteren kann die Verbindung unter Benutzung einer verketteten
Struktur zwischen den I/O Geräten,
wie gezeigt, auf nicht kohärente
Weise betrieben werden. Es ist zu bemerken, dass ein Paket, das
von einem Verarbeitungsknoten zu einem Anderen übermittelt wird, einen oder mehrere
andere in der Mitte liegende Knoten passieren kann. Zum Beispiel
kann ein von dem Verarbeitungsknoten 312A an den Verarbeitungsknoten 312D übermitteltes
Paket entweder durch den Verarbeitungsknoten 312B oder
den Verarbeitungsknoten 312C wie in 12 gezeigt gelangen. Jeder geeignete
Algorithmus zur Dirigierung kann verwendet werden. Weitere Ausführungsbeispiele
des Computersystems 300 können mehr oder weniger Verarbeitungsknoten
als in dem in 12 gezeigten
Ausführungsbeispiel
enthalten.
-
Im Allgemeinen können die Pakete mit einer oder
mehr Bitzeiten auf den Leitungen 324 zwischen den Knoten übermittelt
werden. Eine Bitzeit kann die steigende oder fallende Flanke des
Taktsignals auf den entsprechenden Taktleitungen sein. Die Pakete können Anweisungspakete
zum Einleiten von Transaktionen, Sondierungspakete zur Beibehaltung
der Kohärenz
des Cachespeichers und Antwortpakete sein, die auf Sondierungen
und Anweisungen antworten.
-
Die Verarbeitungsknoten 312A – 312D können, zusätzlich zu
einer Speichersteuerung und einer Interfacelogik, einen oder mehrere
Prozessoren enthalten. Allgemein gesagt weist ein Verarbeitungsknoten
mindestens einen Prozessor auf und kann optional eine Speichersteuerung
zur Kommunikation mit einem Speicher und weitere Logik wie gewünscht enthalten.
Insbesondere kann ein Verarbeitungsknoten 312A – 312D einen
Prozessor 10 aufweisen. Die externe Interfaceeinheit 18 kann
die Interfacelogik 318 innerhalb des Knotens enthalten,
ebenso wie die Speichersteuerung 316.
-
Die Speicher 314A – 314D können alle
geeigneten Speichergeräte
aufweisen. Zum Beispiel kann ein Speicher 314A – 314D einen
oder mehrere RAMBUS DRAMs (RDRAMs), synchrone DRAMs (SDRAMs), statische
RAMs usw. aufweisen. Der Adressraum des Computersystems 300 ist
zwischen den Speichern 314A – 314D aufgeteilt.
Jeder Verarbeitungsknoten 312A – 312D kann eine Speicherabbildung
enthalten, die verwendet wird, um festzustellen, welche Adressen
auf welche Speicher 314A – 314D abgebildet
sind, und damit, an welchen Verarbeitungsknoten 312A – 312D eine
Speicheranforderung für
eine bestimmte Adresse dirigiert werden soll. In einem Ausführungsbeispiel
ist der Kohärenzpunkt für eine Adresse
in dem Computersystem 300 die Speichersteuerung 316A – 316D,
die mit dem Speicher verbunden ist und den Adressen entsprechende Bytes
speichert. Anders gesagt ist die Speichersteuerung 316A – 316D verantwortlich
fürdie
Sicherstellung, dass jeder Speicherzugriff auf den entsprechenden
Speicher 314A – 314D auf
eine mit dem Cachespeicher kohärente
Weise geschieht. Die Speichersteuerungen 316A – 316D können eine
Steuerschaltung aufweisen, um eine Schnittstelle zu dem Speicher 314A – 314D zu
bilden. Des weiteren können
die Speichersteuerungen 316A – 316D Anforderungswarteschlangen
für die
Auf- reihung von Speicheranforderungen enthalten.
-
Im Allgemeinen kann die Interfacelogik 318A – 318L eine
Vielzahl von Pufern zum Empfangen von Paketen von der Verbindung
und zum Puffern von auf der Verbindung zu übermittelnden Paketen aufweisen.
Das Computersystem 300 kann jeden geeigneten Mechanismus
zur Flusssteuerung für
die Übermittelung
von Paketen verwenden. Zum Beispiel speichert in einem Ausführungsbeispiel
die Interfacelogik 318 einen Zählwert der Anzahl von jedem
Typ des Puffers in dem Empfänger
an der anderen Seite der Verbindung, mit dem diese Interfacelogik
verbunden ist. Die Interfacelogik übermittelt kein Paket, es sei
denn die empfangene Interfacelogik hat einen freien Puffer, um das
Paket zu speichern. Wenn ein empfangender Puffer durch die Weiterleitung
eines Pakets frei wird, übermittelt
die empfangende Logik eine Nachricht zu der sendenden Interfacelogik,
um anzuzeigen, dass der Puffer leer gemacht worden ist. Ein derartiger
Mechanismus kann als ein „Coupon basiertes" System bezeichnet
werden.
-
Die I/O Geräte 320A – 320B können alle
geeigneten I/O Geräte
sein. Zum Beispiel können
die I/O Geräte 320A – 320B Netzwerk-Schnittstellenkarten,
Videobeschleuniger, Audiokarten, Festplatten oder Diskettenlaufwerke
oder Laufwerkcontroller, SCSI (Kleincomputer-Systemschnittstelle)
Adapter und Telefoniekarten, Modems, Soundkarten und eine Vielzahl
von Datenaquisitionskarten, wie GPIB oder Feldbusinterfacekarten
sein.
-
Zahlreiche Variationen und Modifikationen werden
den Fachleuten auf dem Gebiet offenbar werden, sobald die obige
Offenbarung vollständig
anerkannt ist. Es ist beabsichtigt, dass die folgenden Ansprüche interpretiert
werden, um alle derartigen Variationen und Modifikationen zu umfassen.