-
Hintergrund
-
Technisches Gebiet
-
Die
vorliegende Offenbarung betrifft allgemein Informationsverarbeitungssysteme
und, insbesondere, die Übersetzung
und Verwaltung von logischen Sequenzer-Adressen in einem Multi-Sequenzer-System.
-
Stand der Technik
-
Um
die Leistungsfähigkeit
von Informationsverarbeitungssystemen, etwa solchen, die Mikroprozessoren
aufweisen, wurden sowohl Hardware- als auch Softwaretechniken verwendet.
Auf der Hardwareseite wurden Ansätze
der Ausgestaltung des Mikroprozessors einschließlich höherer Taktgeschwindigkeit,
Pipelining, Sprungvorhersage, superskalare Ausführung, Out-of-Order (OOO) Ausführung und Caches
gemacht. Viele derartige Ansätze
haben zu einer vergrößerten Anzahl
der Transistoren geführt und
haben bei einigen Beispielen dazu geführt, dass die Anzahl der Transistoren
stärker
zugenommen hat als die verbesserte Leistungsfähigkeit.
-
Statt
einer verbesserten Leistungsfähigkeit, die
lediglich durch zusätzliche
Transistoren erreicht werden, betreffen andere Verbesserungen der
Leistungsfähigkeit
Softwaretechniken. Ein Softwareansatz, der vollendet worden ist,
um die Leistungsfähigkeit
eines Prozessors zu verbessern, ist als "Multi-Threadening" bekannt. Bei dem Software-Multithreading
kann ein Befehlsstrom in mehrere Befehlsströme aufgeteilt werden, die gleichzeitig
ausgeführt werden.
Weiter können
mehrere unabhängige
Softwareströme
gleichzeitig ausgeführt
werden. Bei einem Ansatz, der als Zeitschlitz-Multithreading oder Zeitmultiplex
("TMUX")-Multithreading
bekannt ist, schaltet ein einzelner Prozessor nach einer bestimmten
Zeitdauer zwischen Fäden
um. Bei einem weiteren Ansatz schaltet ein einzelner bei dem Auftreten eines
Trägerereignisses
Prozessor zwischen Fäden um,
etwa wenn ein Chache mit langer Latenz fehlt. Bei diesem Ansatz,
der als ein Switch-on-Event-Multithreading ("SoEMT") bekannt ist, ist zu einem gegebenen
Zeitpunkt höchstens
ein Faden aktiv.
-
Zunehmend
wird das Multithreading durch eine Hardware unterstützt. Bei
einem Ansatz können beispielsweise
Prozessoren in einem Mehrprozessorsystem, etwa einem Chip-Multiprozessor ("CMP")-System, jeder auf
einen der mehreren Softwarefäden
gleichzeitig einwirken. Bei einem anderen Ansatz, der als simultanes
Multithreading ("SMT") bezeichnet wird,
ist ein einzelner physikalischer Prozessor so ausgebildet, dass
er wie mehrere logische Prozessoren erscheint, um Systeme und Anwenderprogramme
zu betreiben. Für
SMT können
mehrere Softwarefäden
aktiv sein und gleichzeitig auf einen einzigen Prozessor ohne Schalten
arbeiten, d. h. jeder logische Prozessor beinhaltet einen vollständigen Satz
des Architekturzustands, viele andere Ressource n des physikalischen
Prozessors, wie Pufferspeicher, Ausführungseinheiten, Branchprediktoren, die
Steuerlogik und Busse werden geteilt. Für SMT wirken die Befehle von
mehreren Softwarefäden gleichzeitig
auf jeden logischen Prozessor.
-
Für ein System,
das die gleichzeitige Ausführung
von Softwarefäden
unterstützt,
etwa SMT und/oder CMP-Systeme, kann eine Betriebssystemanwendung
den Ablauf und die Ausführung
von Softwarefäden
auf FadenausführungsRessource
n steuern. Für
ein System, das es einem Verwender stattdessen erlaubt, Softwarefäden explizit über Befehle
der Verwenderebene zu steuern, können
solche Befehle den Namen oder die Adresse einer FadenausführungsRessource
angeben.
-
Kurze Erläuterung der Zeichnungen
-
Ausführungsbeispiele
der vorliegenden Erfindung ergeben sich aus der nachfolgenden Zeichnung,
in der nacheinander entsprechende Elemente mit einander entsprechenden
Ziffern angegeben sind. Diese Zeichnungen sind nicht einschränkend zu verstehen,
sie sollen statt dessen ausgewählte
Ausführungsbeispiele
einer Vorrichtung, eines Systems und eines Verfahrens zum Verwalten
und Übersetzen des
Mappens von logischen Sequenzer-Adressen in einem Multi-Sequenzer-System
auf gegenständlichen
Sequenzern illustrieren.
-
1 ist
ein Blockdiagramm, das verschiedene Ausführungsbeispiele von Multi-Sequenzer-Systemen
darstellt.
-
2 ist
ein Blockdiagramm, das eine graphische Repräsentation eines im wesentlichen
parallelen Programmierungsansatzes für ein Multi-Sequenzer-System
darstellt.
-
3 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Multi-Sequenzer-Systems
mit einem einzigartigen Identifizierer für jeden Sequenzer ist.
-
4 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Multi-Sequenzer-Systems
ist, das einen Mapping-Manager zum Verwalten des Mappens von logischen
Sequenzer-Adressen auf gegenständliche
Sequenzer-Adressen aufweist.
-
5 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Multi-Sequenzer-Systems
ist, das einen Mapping-Manager zum Verwalten des Mappens von virtualisierten
logischen Sequenzer-Adressen auf gegenständliche Sequenzer-Adressen
aufweist.
-
6 ist
ein Blockdiagramm, das eine weitere Einzelheit für wenigstens ein Ausführungsbeispiel einer
Mapping-Struktur illustriert.
-
7 ist
ein Datenflußdiagramm,
das wenigstens ein Ausführungsbeispiel
eines beispielhaften Szenarios zum Mappen von aktuellen SequenzerFrames
in virtualisierte, logische Sequenzer-Adressen illustriert.
-
8 ist
ein Flussdiagramm, das Inhalte einer beispielhaften Mapping-Struktur
für das
beispielhafte Szenario, das in 7 gezeigt
ist, illustriert.
-
9 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel einer Rationierungslogik
für einen
Mapping-Manager illustriert.
-
10 ist
ein Datenverarbeitungsdiagramm, das wenigstens ein Ausführungsbeispiel
eines Verfahrens zum Übersetzen
einer virtuellen Sequenzer-Adresse in einen tatsächlichen Sequenzer-Identifizierer
wiedergibt.
-
11 ist
ein Blockdiagramm, das beispielhafte Eintritte für wenigstens ein Ausführungsbeispiel einer Übersetzungsbeschleunigungsstruktur
illustriert.
-
12 ist
ein Flussdiagramm, das die Steuerung und den Datensprung für wenigstens
ein Ausführungsbeispiel
eines Verfahrens zur Sequenz-Rationierung illustriert.
-
13 ist
ein Flussdiagramm, das die Steuerung und den Datensprung für wenigstens
ein Ausführungsbeispiel
eines Verfahrens zum Handhaben eines Seitentabellenfehlers für logische
Sequenzer-Adressen illustriert.
-
14 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Multi-Sequenzer-Multithreading-Systems,
das asymmetrische Sequenzer aufweist, illustriert.
-
15 ist
ein Blockdiagramm, das eine weitere Einzelheit für wenigstens ein Ausführungsbeispiel
eines Systems, das die offenbarten Techniken ausführen kann,
illustriert.
-
16 ist
ein Blockdiagramm eines weiteren Ausführungsbeispiels eines Multi-Sequenzer-Systems,
das eine sequenzerbewußte
Operationen auf der Verwenderebene unterstützt.
-
Eingehende Beschreibung
-
Die
nachfolgende Diskussion beschreibt ausgewählte Ausführungsbeispiele von Verfahren, Systemen
und Mechanismen zum Verwalten des Mappen von logischen Sequenzer-Adressen
für ein Multi-Sequenzer-System,
das eine Sequenzer-Arithmetik auf der Verwenderebene unterstützt. Die
Ausführungsbeispiele
des Mechanismus und des Verfahrens, die hier beschrieben sind„ können mit
Singlecore- oder Multicore-Multithreading-Systemen
verwendet werden.
-
In
der nachfolgenden Beschreibung sind verschiedene bestimmte Einzelheiten,
wie Sequenzer-Allokationsansätze,
Multithreading-Umgebungen, Systemkonfigurationen, Anzahl und Topologie von
Sequenzern in einem Multi-Sequenzer-System, Mikroarchitekturstrukturen
und eine Befehlsnomenklatur und -Parameter verwendet, um ein besseres Verständnis der
Ausführungsbeispiele
der vorliegenden Erfindung zu ermöglichen. Es versteht sich jedoch
für den
Fachmann, dass die Erfindung ohne derartige spezifische Einzelheiten
verwirklicht werden kann. Zusätzlich
weiter sind bestimmte, bekannte Strukturen, Schaltkreise und dergleichen
in ihren Einzelheiten nicht gezeigt, um die vorliegende Erfindung
nicht unnötig
unklar zu machen.
-
Der
Begriff Faden-Einheit, der hier mit dem Begriff "Sequenzer" austauschbar verwendet wird, ist eine
distinkte FadenausführungsRessource,
und kann jede gegenständliche
oder logische Einheit sein, die dazu in der Lage ist, einen Faden
auszuführen.
Sie kann eine auf den nächsten
Befehl weisende Logik haben zum Bestimmen des nächsten für einen gegebenen Faden auszuführenden
Befehl haben. Ein Sequenzer kann eine logische Faden-Einheit oder
eine gegenständliche
Faden-Einheit sein. Eine solche Unterscheidung zwischen logischen
und gegenständlichen
Faden-Einheiten
wird unmittelbar anschließend
in Verbindung mit 1 diskutiert.
-
1 ist
ein Blockdiagramm, das ausgewählte
Eigenschaften der Ausführungsbeispiele 110, 115, 150, 170 eines
Multi-Sequenzer-Systems illustriert, das eine Steuerung von Fäden auf
Verwenderebene unterstützt. 1 zeigt
ausgewählte
Eigenschaften eines SMT Multi-Sequenzer-Multi-Fadening-Systems 110,
wobei jeder Sequenzer ein logischer Prozessor ist, der einen Faden
gleichzeitig mit der Ausführung
von anderen Fäden
auf anderen logischen Prozessoren ausführen kann. 1 zeigt
weiter wenigstens ein Ausführungsbeispiel
eines Multi-Sequenzer-Systems 115, das mehrere logische Sequenzer über einen
Switch-an-Event (SoeMT) Mechanismus unterstützt, etwa einen Zeitmultiplexing-Typ
eines Schaltmechanismus unterstützt,
so dass jeder der logischen Prozessoren auf seinen Faden läuft, wobei
nur ein Faden zu einem Zeitpunkt auf einem solchen System 115 ausgeführt wird.
-
1 zeigt
weiter ausgewählte
Merkmale eines Mutiple-Core-Multi-Threading-Systems 150, 170.
Die gegenständlichen
Kerne für
ein Multi-Core-Multi-Threading-System
können
entweder Einzel-Sequenzer-Kerne (siehe beispielsweise das System 150)
oder Muli-Sequenzer-Kerne (siehe beispielsweise das System 170)
sein. Derartige Multi-Core-Multi-Threading-Ausführungsbeispiele werden später diskutiert,
während
die Einzel-Kern-Multi-Sequenzer-Systeme 110, 115 sofort
nachfolgend diskutiert werden.
-
In
dem SMT-System 110 ist ein einzelner, gegenständlicher
Prozessor 104 ausgebildet, um als mehrfache Faden-Kontexte
aufzutreten, hier als TC1 bis TCn (nicht gezeigt) bezeichnet. Jeder der n-Faden-Kontexte
wirkt als Sequenzer. Wenn wenigstens einer dieser Faden-Kontexte
(beispielsweise m aus der Anzahl n) für das Betriebssystem und/oder
Verwenderprogramme sichtbar gemacht werden, werden diese Faden-Kontexte manchmal
als logische Prozessoren (nicht gezeigt) bezeichnet und werden hier
als LP1 bis LPm bezeichnet.
Jeder Faden-Kontext TC1 bis TCn beinhaltet
einen Satz von Architekturzuständen
AS1-ASn. Diese Architekturzustände weisen bei
wenigstens einem Ausführungsbeispiel
Datenregister, Segmentregister, Debug-Register, und die meisten
der für
das Modell spezifischen Register, auf. Die Faden-Kontexte TC1-TCn teilen sich
die meisten anderen Ressource n des gegenständlichen Prozessors 104,
etwa die Pufferspeicher, Ausführungseinheiten,
Branch-Prediktoren, die Steuerlogik und die Busse.
-
Obwohl
solche Merkmale geteilt werden können,
kann jeder Faden-Kontext in dem Multi-Treading-System 110 unabhängig die
nachfolgende Befehlsadresse erzeugen (und, beispielsweise, einen Abruf
von einem Befehlsspeicher, einem Ausführungsbefehlsspeicher oder
einem Ablaufspeicher ausführen).
Der Prozessor 104 weist so logisch unabhängige, auf
den nächsten
Befehl weisende, Zeiger und Abrufspeicher 120 zum Abrufen
von Befehlen für
jeden Faden-Kontext auf, obwohl die mehren logischen Sequenzer in
einer einzigen gegenständlichen
Abruf/Dekodier-Einheit 122 implementiert
sein können.
Bei einem SMT Ausführungsbeispiel
umfasst der Begriff "Sequenzer" wenigstens den Zeiger für den nächsten Befehl
und die Abruflogik 120 für einen Faden-Kontext, gemeinsam
mit wenigsten einigen der zugehörigen
Architekturzustände,
AS, für den
Faden-Kontext. Es sollte beachtet werden, dass die Sequenzer eines
SMT Systems 110 nicht symmetrisch sein müssen. Beispielsweise
können
zwei SMT-Sequencher desselben gegenständlichen Prozessors in der
Menge der Information über
den Architekturzustand, den sie jeweils aufweisen, unterschiedlich
sein wird.
-
Bei
wenigstens einem Ausführungsbeispiel ist
das Multi-Sequenzer-System 110 ein Single-Core-Prozessor 104,
der ein gleichzeitiges Multi-Threading unterstützt. Bei einem solchen Ausführungsbeispiel
ist jeder Sequenzer ein logischer Prozessor mit einem eigenen Befehl
für den
auf den nächsten
Befehl weisenden Zeiger und eine Zugriffslogik und seiner eigen
Information über
den Zustand der Architektur, obwohl derselbe physikalische Prozessorkern 104 alle
Faden-Befehle ausführt.
Bei einem solchen Ausführungsbeispiel
beinhaltet der logische Prozessor seine eigene Version des Architekturzustands, obwohl
AusführungsRessource
n des alleinigen Prozessorkerns 104 unter gleichzeitig
arbeitenden Fäden
geteilt werden können.
-
1 zeigt
ein alternatives Ausführungsbeispiel
eines Multi-Sequenzer-Systems 115, das dazu in der Lage
ist, einen Multi-Faden-Code auszuführen. Das Ausführungsbeispiel 115 ist
als ein Switch-on-Event-Multi-Fadening ("SOEMT")-Ausführungsbeispiel
bezeichnet. Bei dem Ausführungsbeispiel 115 ist
jeder Sequenzer ähnlich
den Sequenzern bei dem vorangehenden Ausführungsbeispiel 110,
in dem jeder Sequenzer ein logischer Prozessor ist mit einer Information über den
Architekturzustand und seinem eigenen, auf den nächsten Befehl weisenden Zeiger.
Das System 115 unterscheidet sich jedoch von dem oben diskutierten
System 110 darin, dass die Sequenzer sich jeweils mit den
anderen Sequenzern dieselbe gegenständliche Zugriffslogik 120 in
einer einzigen Zugriffs-/Dekodier-Einheit 122 in den gegenständlichen
Prozessorkern 104 teilen. Die Zugriffslogik 120 kann
umgeschaltet werden zum Zugriff für verschiedene Sequenzer des
Systems 115, basierend auf einer Mehrzahl von Switch-on-Event-Strategien.
Die Switch-on-Event-Trigger können
einen Abschnitt einer bestimmten Zeitmenge oder verschiedenen Zyklen
sein, etwa als Zeitmultiplexen (TMUX). Bei anderen Ausführungsbeispielen
können
die SOEMT-Trigger
andere Ereignisse sein, etwa Speicherfehlereignisse, Seitenfehler,
Langlatenzbefehle, usw..
-
1 zeigt
wenigstens zwei Ausführungsbeispiele
von Mehrkern-Multi-Threading-Systemen 150, 170.
Bei wenigstens einigen Ausführungsbeispielen
des Mehrkernsystems 150, 170, das in 1 gezeigt
ist, kann das System einen Prozessor 104 als Bildungsblock
verwenden. Jeder der Sequenzer kann ein Prozessorkern 104 mit den
mehreren Kernen 1041 -104n , 1041 -104m , der in einem einzigen Chip-Package 160 beziehungsweise 180 aufgenommen
ist, sein. Bei dem System 150, das in 1 gezeigt
ist, kann jeder Kern 104, (i=0 bis n) ein Single-Thread-Sequenzer
sein. Bei dem System 170, das in 1 gezeigt
ist, kann jeder Kern 104j (j= 1 bis m) ein Multi-Sequenzer-Prozessorkern
sein.
-
Die
Chippackages 160, 180 werden in 1 mit
unterbrochenen Linien dargestellt, um anzugeben, dass die dargestellten
Einchip-Ausführungsbeispiele
der Multikernsysteme 150, 170, nur illustrativ sind.
Bei anderen Ausführungsbeispielen
können
die Prozessorkerne eines Multi-Core-Systems auf separaten Chips
angeordnet sein oder können
als ein SOEMT Multi-Sequenzer-System organisiert sein.
-
Ein
erstes Mehrkern-Multi-Threading-System 150, das in 1 dargestellt
ist, kann zwei oder mehrere gesonderte, gegenständliche Prozessoren 1041 -104n aufweisen,
das dazu in der Lage ist, einen unterschiedlichen Fäden auszuführen, so
dass die Ausführung
von wenigstens Teilen unterschiedlicher Fäden gleichzeitig stattfinden
kann. Jeder Prozessor 1041 bis 104„ weist
eine gegenständlich
unterschiedliche Abrufeinheit 122 auf, um Abrufbefehlsinformation
für seinen
jeweiligen Faden abzurufen. Bei einem Ausführungsbeispiel, bei dem jeder
Prozessor 1041 -104n einen
einzelnen Faden ausführt,
implementiert die Zugriffs-/Decodier-Einheit 122 eine einzige
Logik 120 für
den Zeiger für
den nächsten
Befehl und den Zugriff.
-
1 zeigt
weiter ein Multi-Core-Multi-Fadening-System 170, das mehrere
SMT Systeme 110 aufweist. Bei einem solchen Ausführungsbeispiel 170 unterstützt jeder
Prozessor 1041 -104m mehrere Faden-Kontexte.
Beispielsweise ist jeder Prozessor 1041 -104m ein
SMT Prozessor, der k Sequenzer unterstützt, so dass das System 170 effektiv
m*k Sequenzer implementiert. Weiter implementiert die Zugriffs-/Dekodier-Einheit 122 für das System 170 unterschiedliche
Logiken für
den Zeiger auf den nächsten
Befehl und dem Zugriff für
jeden unterstützten
Faden-Kontext.
-
Zur
Vereinfachung der Darstellung fokussiert sich die nachfolgende Diskussion
auf Ausführungsbeispiele
des Multi-Core-Systems 150. Der Fokus sollte jedoch nicht
als einschränkend
verstanden werden, der unten beschriebene Mechanismus kann entweder
in einem Mehrkern oder in einem Einkern-Mulit-Sequenzer-System ausgeführt werden. Auch
können
Einkern- oder Mehrkern-Systeme mit Ein-Sequenzer-Kernen oder Mehr-Sequenzer-Kernen
implementiert sein. Für
jeden Mehr-Sequenzer-Kern können
ein oder mehrere Multi-Threading-Techniken verwendet werden, einschließlich SMT
und/oder SoeMT. Es versteht sich, dass die Systeme 110, 115, 150, 170,
die in 1 gezeigt sind, zusätzliche Merkmale aufweisen
können,
etwa ein Speichersystem, Ausführungseinheiten
und dergleichen, diese sind in 1 nicht
gezeigt.
-
Jeder
Sequenzer 104, bei dem Systembeispiele 110, 115, 150, 170,
die in 1 gezeigt sind, kann ein einzigartiger Identifizierer
zugeordnet sein (unten in Verbindung mit 3 gezeigt).
Verschiedene Ausführungsbeispiele
des Systems 110, 150 können eine unterschiedliche
Anzahl N von Gesamtsequenzem anzeigen.
-
Ausführungsbeispiele
des Systems 110, 115, 150, 170,
die in 1 gezeigt sind, können jeweils ein Signalisieren
unter den Sequenzern aufweisen. Der Begriff "Sequenzerarithmetik" wird hier zur Bezeichnung eines Zwischensequenzersignalisieren zum
Service zwischen zwei Sequenzern verwendet. Eine Architekturunterstützung für die Sequenzerarithmetik
kann Erstreckungen zu einem Befehlssatzarchitektur beinhalten, so
dass einer oder mehrere Befehle vorgesehen sind, um eine direkte
Verwendermanipulation der Steuer- und Zustandsübertragungen zwischen Sequenzern
zu erlauben. Ein Befehl auf der Verwenderebene wird als "sequenzerbewusst" bezeichnet, wenn
es ein Sequenzerarithmetikbefehl oder jede andere Art eines Befehls
ist, der eine logische Sequenzer-Adresse als ein Parameter beinhaltet,
der als ein Befehlsoperant und/oder implizit bei einer Befehlsausführung bezogen
kodiert werden kann. Solche Befehle können Sequenzer-Arithmetikbefehle
beinhalten, die entweder zum Signalisieren eines anderen Sequenzers
(hier als ein "SXFR", oder geteilter
Transfer bezeichnet) oder zum Schaffen eines Aufstellen eines Klientensequenzers zum
Beobachten eines solchen Signals (hier als ein Shred-Monitor "SEMONITOR" Befehl bezeichnet).
-
Sequenzerbewusste
Befehle können
auch andere Befehle beinhalten, die eine logische Sequenzer-Adresse
als ein Parameter aufweisen, etwa als ein sequenzerbewusster Statussicherungs-
und Umspeicherbefehl. Bei der Ausführung eines solchen Statussicherungsbefehls
kann ein erster Sequenzer einen Schnappschuss des Architekturzustands
eines zweiten Sequenzers erzeugen. Der sequenzerbewusste Umspeicherbefehl
kann angeben, dass die sicheren Architekturzustände in einen bestimmten Sequenzer
geladen werden.
-
Jeder
sequenzerbewusste Befehl kann weiter optional mehrere als eine logische
Sequenzer-Adresse als Parameter beinhalten. Beispielsweise kann
ein sequenzerbewusster Befehl als ein Parameter ein Aggregat von
mehreren logischen Sequenzer-Adressen beinhalten. Ein solcher Ansatz
kann verwendet werden für
ein Multicasten oder Aussenden von Zwischensequenzersignalen von
einem Sequenzer zu mehreren anderen Sequenzern. Um die nachfolgende
Diskussion zu vereinfachen, beziehen sich die nachfolgenden Beispiele,
wenn nicht anders angegeben, auf den Fall des Uni-Castings: ein
erster Sequenzer führt
einen sequenzerbewussten Befehl aus, der eine einzige andere logische
Sequenzer-Adresse angibt. Ein solcher Ansatz wird zur Vereinfachung
der Beschreibung angegeben und ist lediglich illustrativ, er sollte
jedoch nicht begrenzend wirken. Der Fachmann wird verstehen, dass
Ausführungsbeispiele
des hier beschriebenen Mechanismus für das Aussenden und das Multicasten
auch von sequenzerbewussten Befehlen angewendet werden können.
-
Zur
Vereinfachung der Beschreibung kann SXFR in der folgenden Diskussion
als Gedächtnisstütze des
Befehls für
einen illustrativen Zwischensequenzersignalbefehl verwendet werden.
Entsprechend werden zum Zwecke der Beschreibung und/oder Begrenzung
SSAVE, und SRSTOR als Befehlsgedächtnisstützen verwendet
für die
sequenzerbewusste Sicherungs- und Speicherungsbefehle für die Architekturstruktur.
Der Fachmann wird verstehen, dass viele andere Varianten und Gedächtnisstützen der
Signalbefehle als auch als Speicher und Speicherbefehle für den Kontext
und andere sequenzerbewusste Befehle verwendet werden können, ohne
den Schutzbereich der beiliegenden Ansprüche zu verlassen.
-
Bei
Ausführungsbeispielen
der Verfahren, Mechanismen und Systeme, wie sie hier beschrieben worden
sind, ist ein für
den Verwender sichtbares Merkmal der Architektur der Sequenzer-Arithmetik-Operationen
wenigstens ein kanonischer Satz von Befehlen, die es dem Verwender
erlauben, ein Signal zum Bedienen unter den Sequenzern zu verursachen.
Ein solches Signalisieren kann durch einen Befehl ausgelöst werden,
der als einen Parameter einen Namen oder logische Adresse des Sequenzers 104, auf
den die nachfolgende Steuerübertragung
aufgeführt
wird, aufweist. Der Sequenzer, der ein Signal für den Faden-Kontroll-Transfer
erzeugt, wird als ein Sourcesequenzer bezeichnet, und der Empfänger des
erzeugten Signals wird hier als Destinationssequenzer bezeichnet.
-
Es
wird jetzt kurz auf 2 Bezug genommen zu einer Diskussion
des Basiskonzepts, das bei wenigstens einem Ausführungsbeispiel des hier beschriebenen
Systems vorhanden ist. 2 ist ein Blockdiagramm, das
eine graphische Darstellung eines parallelen Programmierungsansatzes
eines Multi-Sequenzer-Multi-Threading-Systems illustriert.
-
Ein
Multiprozessing-Paradigma eines geteilten Speichers kann bei einem
Ansatz, der als paralleles programmieren bezeichnet wird, verwendet werden.
Bei diesem Ansatz kann ein Anwendungsprogrammierer ein Softwareprogramm
aufspalten, manchmal bezeichnet als eine "Anwendung" oder ein "Prozess" in mehrerer Aufgaben, die gleichzeitig
ablaufen, um die Parallelität
für ein
Softwareprogramm auszudrücken.
Alle Fäden
desselben Softwareprogramms ("Prozess") teilen eine gemeinsame
logische Sicht des Speicheradressraums.
-
2 zeigt
Prozesse 200, 220, die für ein arbeitendes System 240 sichtbar
ist. Diese Prozesse 200, 220 können unterschiedliche Softwareanwendungsprogramme
sein, beispielsweise ein `Textverarbeitungsprogramm oder ein E-Mail-Verwaltungsprogramm.
Gewöhnlich
arbeitet jeder Prozess in einem unterschiedlichen Adressraum.
-
Das
Betriebssystem ("OS") 240 ist
gewöhnlich
zum Verwalten der von dem Verwender erzeugten Aufgaben für einen
Prozess verantwortlich, etwa dem Prozess 220, der in 2 dargestellt
ist. Entsprechend kann das Betriebssystem 240 einen unterschiedlichen
Faden 225, 226 für jede der von dem Verwender
definierten Aufgaben, der dem Prozess 220 zugehörig ist,
erzeugen, und kann die Fäden 225, 226 auf
die Thread-AusfürungsRessource
n mappieren.
-
Entsprechend
zeigt 2 Verwender-Faden 225, 226,
die zugehörig
sind zu und sich denselben virtuellen Speicheradressraum mit dem
Prozess 220 teilen. Die Fäden 225, 226 für den Prozess 220 sind in 2 gezeigt
und repräsentieren
so unterschiedliche Verwender definierte Aufgaben. Solche Fäden werden
hier manchmal als "OS
Threads" bezeichnet, um
anzugeben, dass sie erzeugt, verwaltet und geplant werden von dem
OS 240. Alternativ können
solche Fäden
auch austauschbar sein mit dem Begriff "Verwender-Threads" oder "Verwender-Aufgaben", um die Idee eines OS verwalteten Faden
repräsentierende
Verwenderaufgabe zu bezeichnen.
-
Die
Verwender-Fäden 225, 226 können durch
das OS 240 erzeugt, verwaltet und geplant werden. Bezüglich der
Planung der Verwender-Fäden 225, 226 kann
die OS 240 einen Planer aufweisen, der die Fäden 225, 226 zur
Ausführung
plant, und jeden Faden 225, 226 zu einem oder
mehreren logischen Sequenzer-Adressen mappt Entsprechend zeigt 2 ein übliches
Threading-Schema, wobei das Betriebssystem 240 verantwortlich
ist zum Mappen jeden Verwender-Fäden 225, 226 zu
einer einzelnen logischen Sequenzer-Adresse. Üblicherweise entspricht die
logische Sequenzer-Adresse einem einzelnen Sequenzer, der, beispielsweise,
einen besonderen Zeiger für
den nächsten
Befehl haben kann.
-
2 zeigt
jedoch einen noch jüngeren
Ansatz des Multi-Threadings. 2 zeigt,
dass ein einzelner OS-Thread, etwa der Faden 225, der in 2 gezeigt
ist, zugehörig
sein kann, mehreren Fäden
der Verwenderebene, 280, 282, die nicht von dem
Betriebssystem 240 erzeugt, geplant oder anders verwaltet
worden sein müssen.
Solche Fäden
können als "Shreds" bezeichnet werden,
um sie von OS Fäden
zu unterscheiden.
-
Die
Shreds 280, 282 brauchen nicht für den Planer
des OS 240 sichtbar zu sein, und das OS 240 bestimmt üblicherweise
nicht, wann und wie der zugehörige
OS Faden (wie der OS Faden 225, der den Shreds 280 und 282 zugehörig ist)
plant, wie ein Shred auf einer zugehörigen logischen Sequenzer-Adresse
läuft.
Der OS Faden 225 ist selbstgewöhnlich verantwortlich über zu planen,
wann und wie einer seiner Shreds 280, 282 läuft. Obwohl
zwei derartige Shreds 280, 282 in 2 gezeigt
sind, kann jede beliebige Anzahl derartiger Shreds einem einzelnen
OS Faden zugehörig
sein.
-
Bei
wenigstens einem Ausführungsbeispiel kann
einer oder können
mehrere sequenzerbewusste Befehle von einem Programmierer in Shreds
kodiert werden, die einem OS Faden zugehörig sind. Solche Befehle können, wenn
sie während
des Betriebs des OS Fäden
ausgeführt
werden, ohne Intervention der OS 240 Planungslogik eine
Erzeugung, eine Steuerungsübergabe,
eine Sequenzer-Arithmetik, einen Kontextspeicher, einen Kontext
umspeichern oder andere Vorgänge
für Shreds
verursachen.
-
3 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Multi-Threading-Systems 300 verdeutlicht,
das eine Mehrzahl von Thread- AusführungsRessource
hn 320, 322, 324, 326, hier
als "Sequenzer" bezeichnet, einschließt. Die
Sequenzer 320, 322, 324, 326 können von
jeder Art einer Thread-AusführungsRessource sein,
einschließlich
eines einzelnen Sequenzerkerns, eines SMT-logischen Prozessors (hier,
beispielsweise die Diskussion von TC1 bis
TCn in Verbindung mit 1)
oder eines SOEMT-Kerns (siehe beispielsweise 115 von 1),
um einige wenige zu nennen. Alle diese Beispiele repräsentieren
Hardwaremerkmale, die die Ausführung
eines oder mehrerer Fäden unterstützen. Jede
solcher Thread-AusführungsRessource
einschließlich
eines SMT-logischen Prozessor, wird hier als "gegenständlicher Sequenzer" bezeichnet.
-
3 zeigt
vier gegenständliche
Sequenzer 320, 322, 324, 326.
Jeder der Sequenzer 320, 322, 324, 326 ist
mit einem einzigartigen Sequenzer-Identifizierer (SEQ0, SEQ1, SEQ2,
SEQ3) versehen. Der Fachmann wird erkennen, dass die vier gegenständlichen
Sequenzer in 3 lediglich beispielhaft dargestellt
sind, dies sollte nicht als Begrenzung angesehen werden. Ein System,
das die hier beschriebenen Techniken verwendet, kann eine beliebige
Anzahl von gegenständlichen
Sequenzern aufweisen, die dazu in der Lage sind, gleichzeitig viele
Befehle auszuführen.
-
3 zeigt
weiter, dass einer oder mehrere Befehle 345 von einem Verwenderprogramm 340 für sequenzerbewusste
Operationen auf der Verwenderebene sorgen. Die sequenzerbewussten
Befehle 345 weisen logische Sequenzer-Adressen, wie L_Seg0,
L_Seq1, L_Seq2 und L_Seq3 auf, um Sequenzer zu identifizieren. Für die restliche
folgende Diskussion können
die Begriffe "logische
Sequenzer-Adresse" und "virtuelle Sequenzer-Adresse" austauschbar verwendet
werden.
-
Bei
wenigstens einem Ausführungsbeispiel wird
angenommen, dass die Befehle 345 des Verwenderprogramms 340 durch
einen OS-verwalteten Faden ausgebildet werden. Das Programm 340 kann daher
hier auch als ein Thread (Faden) bezeichnet werden. Ansprechend
auf solche Befehle 345 (das heißt dann, wenn die Befehle 345 ausgeführt werden)
kann der Mapping-Manager 302 ein Nachschlagen ausführen, um
zu bestimmen, welcher gegenständliche
Sequenzer 320-326 von der logischen Sequenzer-Adresse, die in dem
Befehl 345 angegeben worden ist, angegeben wird. Bei wenigstens
einem Ausführungsbeispiels
des Mapping-Managers 302 kann das Nachschlagen implementiert
sein in oder unterstützt
werden durch eine Hardware oder Firmware oder durch Eindringen in
ein Softwaresteuerungsprogramm mit einem geeigneten Vorrang.
-
3 zeigt
ein Ausführungsbeispiel
des Systems 300, das eine etwas einfache Virtualisierung der
logischen Sequenzer-Adressen bietet. Das heißt, eine Anzahl von logischen
Sequenzer-Adressen, die dem Anwenderprogrammierer verfügbar ist,
ist statistisch an eine begrenzte Anzahl von gegenständlichen
Sequenzern 320-326 gebunden. 3 zeigt
so ein 1:1 Mappen zwischen gegenständlichen Sequenzern und logeischen
Sequenzer-Adressen, was bei einem Anwenderprogramm verwendet werden
kann.
-
Ein
Mapping-Manager 302 kann so das Mappen zwischen gegenständlichen
Sequenzern 320-326 und logischen Sequenzer-Adressen,
die durch einen oder mehrere Fäden 340 verwendet
werden, verwalten. Bei wenigstens einem Ausführungsbeispiel ist der Mapping-Manager 302 ein
Betriebssystemprogramm oder eine andere Softwareanwendung. Bei einem
solchen Ausführungsbeispiel
kann der Mapping-Manager 320 das
Mappen auf einer bevorzugten Ebene des Betriebs ausführen. Beispielsweise
kann die Verwaltung des Mappens zwischen tatsächlichen Sequenzern und logischen
Sequenzer-Adressen gehandhabt werden als eine priviligierte Operation
durch einen OS Kernel oder einen Treiber.
-
Alternative
Ausführungsbeispiele
des Mapping-Managers 320 können das Mappen auf einer Mehrzahl
von Abstraktionsebenen verwalten. Beispielsweise kann der Mapping-Manager 302 eine
architekturale Nachschlagtabelle sein, die durch ein Umbezeichnen
auf Mikroarchitekturebene durch eine Hardware und/oder eine Firmware
unterstützt
wird. Bei wenigstens einem anderen Ausführungsbeispiel kann der Mapping-Manager ein
Softwaremechanismus eines Virtualisierungsmanagements sein, in einer
virtuellen Maschine oder einem Hypervisor. Oder, bei wenigstens
einem anderen Ausführungsbeispiel, kann
der Mappierungsmanager 302 ein nicht privilegierter Softwarecode
sein, auf der Verwenderebene, die die Mappierungsmanagerfunktion
als Teil eines Verwender-Fäden
(beispielsweise 225) oder Prozesses (beispielsweise 220)
sein.
-
Es
wird jetzt auf 16 Bezug genommen, das ein Blockdiagramm
ist, das bestimmte architekturale Merkmale eines anderen Ausführungsbeispiels
für ein
Multi-Sequenzer-System 1600 ist,
das sequenzerbewusste Operationen auf der Verwenderebene unterstützt. 16 zeigt,
dass das System 1600, Sequenzer 1620, 1640 aufweist.
Die Anzahl und die Art der in 16 gezeigten
Sequenzern sollten nicht als begrenzend verstanden werden. Obwohl nur
zwei Arten von Sequenzern 1620, 1640 dargestellt
sind, kann ein alternatives Ausführungsbeispiel des
Systems 1600 zusätzliche
Typen von Sequenzern aufweisen. Zusätzlich sollte die Anzahl jeden Typs 1620, 1640 von
Sequenzern, die in 16 dargestellt sind, nicht als
Begrenzung für
die obere und die untere Grenze der Anzahl jedes Sequenzer-Typs bei
alternativen Ausführungsbeispielen
des Systems 1600 verstanden werden. Sowohl kleinere als
auch größere Anzahlen
jedes Sequenzer-Typs 1620, 1640 kann verwendet
werden.
-
16 zeigt,
dass das System (1+s)*t Sequenzer aufweist. Während 16 eine
t bis (s*t) Bindungsbeziehung zwischen dem ersten Sequenzer-Typ
t 1620 darstellt, insgesamt einen zweiten Sequenzer-Typ
SONEToAS 1640, wobei t = 4, s = 3, soll eine solche Darstellung
nicht als begrenzend verstanden werden. Bei alternativen Ausführungsbeispielen
kann t und s jede unterschiedliche Anzahl sein, wobei t > 0 und s > 0.
-
Der
erste Sequenzer-Typ 1620, der in 16 mit "T" markiert ist und hier als ein "T-Sequenzer" bezeichnet wird, kann direkt durch
ein OS verwaltet werden, bei dem es sich um einen Planer, wie ein
OS-Faden auf dem T-Sequenzer laufen soll, sein kann. Der zweite
Sequenzer-Typ 1640, der in 16 als "S" markiert ist, wird hier als "S-Sequenzer" bezeichnet, er wird nicht direkt von
dem OS verwaltet. Stattdessen kann der S-Sequenzer 1640 direkt
von einem Verwendercode in einem Faden verwaltet werden – es kann
direkt durch den Faden verwaltet werden, um Shreds laufen zu lassen,
die mit dem Faden zugehörig
sind.
-
Bezüglich der
Architektur kann jeder OS-verwaltete Faden einem einzelnen Multi-Sequenzer-Ensemble 1650 entsprechen
(hier bezeichnet als ein "Meta-Prozessor"). Jeder Meta-Prozessor 1650 kann einen
logischen T-Sequenzer 1620 und SONEToAS logische S-Sequenzer
aufweisen. 16 zeigt t Meta-Prozessoren,
wobei t = 4 ist. Jeder der dargestellten Meta-Prozessoren weist
SONEToAS S-Sequenzer auf, wobei s = 3 ist. Entsprechend weist jeder
der Meta-Prozessoren 1650 insgesamt + 1 Sequenzer auf,
(d. h. SONEToAS S-Sequenzer zuzüglich
eines T-Sequenzer). Das OS kann verantwortlich sein für das Verwalten
eines Fadens, dann für
das Planen eines Faden zu einem Meta-Prozessor 1650 und
der Faden kann weiter seine mehreren Shreds gemeinsam auf den (t+s)
Sequenzern in dem Meta-Prozessor planen und ablaufen lassen. 16 soll
die Anzahl der Meta-Prozessoren 1650 für ein System nicht einschränken, noch
soll es die Anzahl der S-Sequenzer 1640, die jedem der
Meta-Prozessoren 1650 zugehörig sind,
einschränken.
Bestimmte Werte für
t und s sind mit 16 lediglich beispielhaft dargestellt.
-
Für ein Multi-Sequenzer-System,
das eine Unterstützung
für sequenzerbewusste
Operationen auf Verwenderebene unterstützt, etwa die Ausführungsbeispiele 300, 1600,
die in den 3 und 16 gezeigt
sind, ist ein Sequenzer gesondert von einer architekturale Ressource
wirksam. Entsprechende Registerressourcen, Speicherressourcen und
andere gemeinsame architekturelle Ressourcen. Die Sequenzer-Ressourcen können einen
unterschiedlichen architekturalen Bezeichnungsraum haben und können einem
Virtualisierungsmanagement unterworfen sein.
-
Architektural
kann eine Sequenzer-Ressource – ohne
Einschränkung – wenigstens
drei Komponenten aufweisen. Einen Bezugsnamen, einen Sequenzer-Status-Kontext
und einen Fähigkeitsdeskriptor.
Der Fähigkeitsdeskriptor
kann eine Zusatzinformation über
den Sequenzer aufweisen, etwa Planungsbegrenzungen und Anforderungen,
als auch andere relevante Eigenschaften, wie die, ob es sich um
einen T-Sequenzer oder einen S-Sequenzer
handelt. Architektural unterscheiden sich für jeweils zwei Sequenzer in
einem Mikro-Prozessor 1600 von (1+s) Sequenzern, die jeweilige
Sequenzer-Ressourcen
in dem Bezugsnamen und können
auch bezüglich
der Kontextzusammensetzung und/oder der Fähigkeitsdeskriptor Information
sich unterscheiden. Beispielsweise ist es möglich, dass ein Satz eines
Sequenzers von architekturalen Zuständen sich von dem anderen Sequenzer
unterscheidet.
-
Für einen
gegebenen Meta-Prozessor 1650 können die oben erwähnten sequenzerbewussten Befehlen,
etwa SXFR, SSAVE und SRTOR für
alle der (1+s) logischen Sequenzer definiert sein.
-
Das
heißt,
der Befehl kann ein oder mehrere der logischen Sequenzadressen haben,
die als Operanden kodiert sind, oder anders bezug nehmen auf einen
oder mehrere der logischen Sequenzadressen während der Befehlsausführung.
-
Architektural
ist die scheinbare statische Bindung des einen T-Sequenzer 1620 und
der s S-Sequenzer 1640 in einem Metaprozessor 1650 lediglich logisch
(oder manchmal äquivalent
bezeichnet als „virtuell"). D. h., die logischen
Sequenzeradressen in einem gegebenen Metaprozessor können statisch bestimmt
sein und können,
beispielsweise, von 0 bis s reichen. Zum Zwecke der Diskussion eines
alternativen Ausrührungsbeispiels
wird erwähnt,
dass 16 ein System 1600 mit Ausführungsressourcen 1680 zeigt,
die K gegenständliche
Sequenzer Seq 0 – Seq
k aufweisen. Die Sequenzer der Auführungsressourcen 1680 können jeweils
mit einer zugehörigen
Speicherhierarchie 1692 gekoppelt sein. Obwohl in 16 besonders gezeigt,
versteht der Fachmann, dass eine Speicherhierarchie 1692 für einen Sequenzer
Seq 0 – Seq
k einen Chipspeicher aufweisen kann oder statt dessen nicht auf
einem Chip angeordnete Speicher. 16 zeigt,
dass jeder der Sequenzer Seq 0 – Seq
k einen Zugang zu einem zweiten Speicher haben kann, der von allen
Sequenzern geteilt wird.
-
Wenn
K > 0 und, üblicher,
wenn K > t, kann das
Mappen zwischen (1+ s)* t logischen Sequenzern zu K gegenständlichen
Sequenzern während des
Ablaufes dynamisch geändert
werden. Infolgedessen kann ein solchen Ausführungsbeispielen die genaue
Gruppierung der gegenständlichen
Sequenzern entsprechend einem oder mehreren logischen T-Sequenzern 1620 und
zu einem oder mehreren S-Sequenzern 1640 zugehörig für einen
oder mehrere Metaprozessoren 1650 dynamisch während des Ablaufs
geändert
werden.
-
Das
dynamische Mappen von logischen Sequenzadressen zu gegenständlichen
Sequenzern kann als „Virtualisierung" bezeichnet werden.
Die Virtualisierung von logischen Sequenzadressen ist eine Technik,
die es erlaubt, Fäden,
die mehrere Sequenzer für
eine Ausführung
benötigen,
mittels einer dynamischen physikalischen Sequenzeranordnung auszuführen. Die
Virtualisierung von logischen Sequenzadressen bezieht sich auf die
Abstraktion von gesonderten logischen Sequenzadressen – gesehen von
dem Faden von gegenständlichen
Sequenzeridentifizierer- von physikalischen Sequenzern – gesehen
von der gegenständlichen
Multi-Sequenzer-Prozessorimplementation.
Aufgrund dieser Trennung muss der Anwendungsprogrammierer lediglich
die logischen Sequenzadressen kennen.
-
Wie
bei dem oben in Verbindung mit 3 diskutierten
Ausführungsbeispiel 300 können die
sequenzerbewussten Befehle für
das System 1600 eine logische Sequenzadresse für den Destinationssequenzer
angeben. Bei wenigstens einem Ausführungsbeispiel des Systems 1600 ist
die logische Sequenzadresse jedoch dynamisch zu einem physikalischen
Sequenzer mappiert, nicht also statisch mappiert. Die dynamische
Mappierung von logischen Sequenzadressen in gegenständliche Sequenzer
kann verwaltet werden durch einen Mappingmanager 1670.
Bei wenigstens einem Ausführungsbeispiel kann
der Mappingmanager 302 den Grundzügen folgen, die oben in Verbindung
mit 3 für
den Mappingmanager 302 diskutiert worden sind. Während der
Ausführung
kann das Mappen für
eine logische Sequenzadresse sich von einem gegenständlichen Sequenzer
zu einem anderen ändern,
muss dies aber nicht.
-
Der
Mappingmanager kann verschiedene Aspekte der Sequenzerressourcen
eines Systems 600 zusätzlich
zu dem dynamischen Mappen von logischen Sequenzadressen in gegenständliche
Sequenzer verwalten. Ein Mappingmanager 1670 kann zusätzlich die
Bindung zwischen einem T-Sequenzer 1640 und einem oder
mehreren S-Sequenzern 1640 in einem Meta-Prozessor 1650 verwalten.
Zusätzlich kann
ein Mappingmanager den Sequenzerzustandskontext und den Sequenzerfähigkeitsdeskriptor
verwalten.
-
Bei
einem Mulitsequenzersystem, das sequenzerbewusste Befehle verwaltet,
kann die Größe des logischen
Sequenzadressraums (d.h. die Gesamtanzahl von gesonderten logischen
Sequenzadressen, die in den sequenzerbewussten Befehlen verwendet
werden kann) architektural definiert sein unabhängig von der Anzahl von gegenständlichen Sequenzern,
die bei einem gegebenen System vorhanden sind. Beispielsweise kann
ein 32-Bit Wert zum Repräsentieren
einer logischen Sequenzadresse verwendet werden unabhängig davon,
ob die tatsächliche
Anzahl für
Sequenzer, für
das Mehrsequenzersystem mit einer geringen Anzahl von Bits repräsentiert
sein könnte.
Bei einem solchen beispielhaften Ausführungsbeispiel können k Bits,
wobei k = 32, verwendet werden, um bis zu 2k =
232 logische Sequenzadressen zu repräsentieren,
unabhängig
davon, wie viele gegenständliche
Sequenzer das System aufweist.
-
Bei
dem Beschreiben einer Mehrsequenzerarchitektur, etwa der von 1600,
die in 16 offenbart ist, kann es bequem
sein, die Bezeichnung „k-Bit Sequenzeradressierbarkeit" zu verwenden, um
die Geamtanzahl von 2k logischen Sequenzadressen
zu bezeichnen, auf die ein Faden (beispielsweise 225 oder 226 in 2)
bezug nehmen kann auf eine Metaprozessor (beispielsweise 1650 von 16),
der einen T-Sequenzer und (2k-1) S-Sequenzer hat. Umgekehrt
kann ein Metaprozessor 1650 bestehend aus (1+s)-Sequenzern 1620, 1640 als
einen log (1+s)-bit adressierbaren Sequenzerraum aufweisend bezeichnet
werden. Entsprechend zeigt 16 ein
Multisequenzerersystem 1600, wobei jeder Metaprozessor 1650 einen
2-bitadressierbaren logischen Sequenzadressraum hat.
-
Die 5 und 5 zeigen
wenigstens zwei alternative Ausführungsbeispiele 400, 500 von
Multithreading-Multisequenzersystemen, die für ein dynamisches Mappen der
gegenständlichen
Sequenzer auf logische Sequenzeradressen sorgen, die in sequenzerbewussten
Befehlen auf der Verwenderebene verwendet werden. Entsprechende
Elemente in den 4 und 5 zeigen
entsprechende Bezugszeichen.
-
Für ein System 400, 500,
das ein dynamisches Mappen von logischen-zu-gegenständlichen Sequenzern unterstützt, muss
der Anwendungsprogrammierer nicht notwendigerweise wissen, wann und
welcher gegenständliche
Sequenzer verfügbar ist,
um ihre Anwendung während
der Ausführung durchzuführen. Sie
können
einfach eine logische Sequenzadresse in ihrem Anwenderprogramm verwenden.
Wie oben beschrieben, kann es erwünscht sein, eine Programmansicht
des Multisequenzersystems 400, 500 zu erlauben,
um eine Anzahl (M) von logischen Sequenzadressen („Virt.
0” – „Virt.
M") einzuschließen, die
tatsächlich
die Anzahl (N) von gegenständlichen
Sequenzern 420-426 des Systems 400, 500 übersteigt.
Bei solchen Ausführungsbeispielen kann
der Mappingmanager 402, 502 zum Mappen von M logischen
Sequenzadressen auf N gegenständliche
Sequenzadressidentifizierer verantwortlich sein, wobei M > N. Bei anderen Ausführungsbeispielen
ist M = N, oder M < N,
und der Mappingmanager 402, 502 kann eine ähnliches
oder möglicherweise
einfaches Mappen durchführen,
wie es oben bezüglich
der Ausführungsbeispiele,
die in 3 gezeigt ist, beschrieben ist.
-
Ein
dynamisches Mappen der logischen Sequenzadressen in gegenständliche
Sequenzer wird behandelt als „hinter
der Bühne" des Mappingmanagers 402, 502 in
einer Art und Weise, die für
das Anwenderprogramm transparent ist. Wie in Verbindung mit den 4 und 5 gezeigt,
sind „gegenständliche
Sequenzer" die tatsächlichen
Sequenzer (siehe beispielsweise 420-426), die
in einem gegebenen gegenständlichen
Mulitsequenzerhardwaresystem implementiert sind.
-
Die 4 und 5 zeigen,
dass das System 400, 500 ein Speichermedium 406 aufweisen kann,
das mit Ausführungsressourcen 490 gekoppelt sind.
Das Speichermedium 460 kann ein Speichersubsystem in verschiedenen
Hierarchieebenen sein, die verschiedene Arten von Cachespeicher,
Mikrocode oder Firmwarespeicher wie ein nur Lesespeicher („ROM"), ein Systemspeicher
wie einen dynamischen Speicher mit wahlfreiem Zugriff oder dergleichen,
einen nicht-flüchtigen
Speicher wie einen Flash-Speicher (d. h. einen memory stick usw.)
eine magnetischen oder eine optischen Scheibe aufweisen kann. Das
Speichermedium 400 kann, wie gezeigt, ein Applikationsprogramm 440 und
einen Mappingmanager 402, 502 speichern.
-
Ein
Mappingmanager 402, 502 kann primär auf Sequenzervirtualisierungsmanagementanforderungen
ansprechen. Wie oben erläutert,
muss der Mappingmanager 402, 502 nicht notwendigerweise ein
Softwareprogramm sein, das in dem Speichermedium 460 gespeichert
ist, wie dies in den Ausführungsbeispielen
der 4 und 5 dargestellt ist. Bei anderen
Ausführungsbeispielen
kann der Mappingmanager 402, 502 bei jeder aus
einer Vielzahl von Ebenen von Hardware- und Softwareabstraktionen
vorhanden sein. Solche Abstraktionen können von der mikroarchitekturalen
Ebene, der virtuellen Maschine oder dem Hypervisorarchitekturebene
bis zu dem OS Kernel oder der Treiberebene und der nicht-privilegierten Anwendercodeebene
reichen.
-
Ein
Mappingmanager 402, 502 kann so verschiedenen
Virtualisierungsanforderungen entsprechen. Der Mappingmanager 402, 502 kann
einen Mappingmechanismus als auch einen Planungsmechanismus aufweisen.
Der Mappingmechanismus kann eine Rationierungslogik 485 und
eine Übersetzungslogik 486 aufweisen.
Der Planungsmechanismus kann eine Rationierungslogik 485 und
eine Übersetzungslogik 486 aufweisen.
Der Planungsmechanismus kann eine Planungslogik 487 aufweisen.
-
Die Übersetzungslogik 486 kann
den Versuch machen, eine Adressübersetzung
für jeden
sequenzerbewussten Befehl schaffen, der auf eine logische Sequenzadresse
bezug nimmt. Für
ein System 400, 500, das ein dynamisches Mappen
aller Sequenzadressen in gegenständliche
Sequenzer schafft, kann die Übersetzung
von logischen Sequenzadressen (verwendet von einem Anwenderprogramm 440)
in gegenständliche
Sequenzeridentifizierer durch die Übersetzungslogik 486 für jeden
Bezug eines sequenzerbewussten Befehl in eine logische Sequenzadresse
ausführen.
-
5 zeigt
ein alternatives Ausführungsbeispiel
eines Mappingmanager 402, 502, das eine Mappingstruktur 580 versenden
kann, um eine Mappinginformation zu enthalten und zum Ausführen einer Übersetzung
der logischen Sequenzadressen in gegenständliche Sequenzeridentifizierer.
Die Mappingstruktur 580 kann bei wenigstens einem Ausführungsbeispiel
in dem Speichermedium 460 sein. Allgemein wird für jeden
Befehl, der als Operanden eine logische Sequenzadresse aufweist
oder ansonsten auf die logische Sequenzadresse Bezug nimmt, die logische
Speicheradresse von dem Mappingmanager 520 über ein
Nachschlagen in der Mappingstruktur 580 übersetzt.
Bei wenigstens einem Ausführungsbeispiel
kann ein solches Nachschlagen zur Übersetzung unter Verwendung
einer Unterstützung auf
der Systemebene des Betriebssystems ausgeführt werden. Bei wenigstens
einem alternativen Ausführungsbeispiel
kann die Übersetzungstabelle
durch eine anwendungspezifische Virtualisierung auf der Threadebene
ausgeführt
werden. Bei einem weiteren Ausführungsbeispiel
kann die Übersetzungstabelle ausgeführt werden
durch einen virtuellen Maschinenmonitor oder einen Hypervisor.
-
5 zeigt
weiter, dass ein optionaler Mechanismus von der Übersetzungslogik 486 verwendet
werden kann, um die Übersetzung
einer logischen Sequenzadresse in einen gegenständlichen Sequenzidenifizierer
zu beschleunigen. 5 zeigt, dass die Ausführungsressourcen 490 des
Systems weiter eine optionale Übersetzungsbeschleunigungsstruktur 518 aufweisen
kann, um eine solche Beschleunigung zu unterstützen. Bei wenigstens einem Ausführungsbeispiel
kann die Übersetzungsbeschleunigungsstruktur 518 als
Speicher oder einen Puffer zum Halten eines Untersatzes von Einträgen der
Mappingstruktur 580 arbeiten. Die Verwendung von gebrochenen
Linien für
die Übersetzungsbeschleunigungsstruktur 518,
soll die optionale Natur einer solchen Struktur 518 angeben.
-
Wenn
die Übersetzungslogik 486 nicht
dazu in der Lage ist, den gegenständlichen Sequenzer zu lokalisieren
nach dem Ausführen
des Nachschlagens odr nicht dazu in der Lage ist, die Mappininformation für die logische
Sequenzadresse zu lokalisieren, kann ein Fehler ausgelöst werden.
Der Fehler wird so zugezogen bei einer logischen Sequenzeradressenübersetzungsfehlen
(hier bezeichnet als „LSAT-Fehlen"). Das LSAT fehlen
kann eine Steuerübertragung an
einen Anwender auslösen,
etwa die Rationierungslogik 485, um einen gegenständlichen
Sequenzer als logische Sequenzadresse, die den Fehler verursacht
hat, anzugeben.
-
Bezüglich dieser
Fehler können
die sequenzerbewussten Befehle, etwa SXFR, SSAVE, SRTOR, usw. als
architektural mit einer Fehlersemantik definiert werden, so dass
ein Fehlerzustand erzeugt wird, wenn die Übersetzungslogik 486 unfähig ist,
einen physikalischen Sequenzer nach dem Nachschlagen zu lokalisieren
oder unfähig
ist, eine Mappierungsinformation für die logische Sequenzadresse
zu lokalisieren. In Antwort auf diesen Fehler kann die Steuerung
auf einen Fehleranwender übertragen
werden, etwa die Rationierungslogik 485. Mit anderen Worten,
kann ein LSAT-Fehlerzustand erhoben werden, wenn die Übersetzungslogik 486 und/oder
die Mappierungsstruktur 480 bei einem Nachschlagen der
logischen-zu-gegenständlichen
Sequenzerübersetzung
versagt.
-
Bei
verschiedenen Ausführungsbeispielen des
Mappierungsmanagers 402, 502 kann die LSAT-Fehlstörung auf
unterschiedliche Weisen behandelt werden. Bei wenigstens einem Ausführungsbeispiel,
bei dem der Mappierungsmanagers 402, 502 direkt
in Hardware implementiert ist, kann der Mappierungsmanagers 402, 502 als
eine Hardwarestatusmaschine implementiert sein, die den Fehlerzustand
behandelt.
-
Bei
einem anderen Ausführungsbeispiel kann
der Fehler, der durch ein LSAT-Fehlen ausgelöst worden ist, ein mikroarchitekturaler
Fehlerzustand sein, der von einem Mikrocodefluss auf der mikroarchitekturalen
Ebene behandelt wird. Der Mikrocodefluss kann eine Abfolge von Mikrobefehlen
sein, die in einem Mikrocodespeicher, etwa einem ROM-Abschnitt des
Speichermediums 460 gespeichert ist. Bei wenigstens einem
Ausführungsbeispiel kann
der LSAT Fehldefektzustand einen Mikrocodesteuerübertrag zum Springen auf einen
bestimmten Mikrocodefluss verursachen, der die Rationierungslogik 486 des
Mappierungsmanagers 402, 502 implementiert.
-
Bei
einem weiteren Ausführungsbeispiel kann
der Fehlerzustand, der durch ein LSAT-Fehlen ausgelöst wird, für die architekturale Vorrangebene für eine virtuelle
Maschine definiert sein. Der Fehlerzustand triggert eine Steuerungsübergabe
auf einen virtuellen Maschinemonitor oder Hypervisor. Bei einem
solchen Ausführungsbeispiel
kann ein LSAT Fehlerdefektbedingung einer Gastsoftware wie einem
Gastbetriebssystem einen Steuerungsübergang (etwa einem „VMEXIT")auf einen virtuellen
Hostmaschinenmonitor oder Hypervisor auslösen. Der virtuelle Maschinenmonitor
oder Hypervisor kann einen Mappierungsmanagers 402, 502 implementieren,
der dem Fehler begegnet.
-
Bei
noch einem weiteren Ausführungsbeispiel
ist der LSAT-Fehler auf der Vorrangebene für Betriebssysteme definiert,
etwa einem Ring-0-Privilegebene in einer IA32 Architektur, analog
zu einem Speicherseitenfehler. Bei wenigstens einem Ausführungsbeispiel
kann das LSAT-Fehlen so einen Systemebenenfehler auslösen. Ein
derartiges Ausführungsbeispiel
ist in den 4 und 5 gezeigt.
Bei einem solchen Ausführungsbeispiel
kann der Sequenzeradressübersetzungsfehler
zur Steuerungsübertragung
auf den Mappierungsmanagers 402, 502 führen, zu
Softwareanwendern auf der Systemebene oder der OS Kernel oder auf
den Gerätetreiber.
Die Systemvorrangebene kann manchmal auch austauschbar als Supervisorvorrangeben
in manchen Architekturen bezeichnet werden. Derartige Systemebenen
LSAT Fehldefekte können
beispielsweise einem Speicherseitenfehler verwandt sein, der bei
einem Seitenfehler für
einen Ladebefehl ausgelöst wird.
In Antwort auf den Systemebenen LSAT-Fehlerzustand kann der Mappierungsmanagers 402, 502, der
ein Betriebssystem oder ein Gerätetreiberanwender
sein kann, aufgerufen werden um dem Fehler zu begegnen.
-
Bei
einem weiteren Ausführungsbeispiel kann
der LSAT-Fehlerzustand auf der architekturalen Vorrangebene definiert
sein, die der Verwenderebene oder einer Nicht-Supervisorebenencode, (etwa einer Ring-3-Vorrangebene
in der IA32 Architektur) zugehörig
sein. Beispielsweise kann der Fehlerzustand als ein fehlerartiger
Typ auf der Verwenderebene vom „Ertragsereignis" definiert sein.
das, wenn es auftritt, eine Übertragung
der Steuerung auf den Anwendercode auf Verwenderebene, der die Rationierungslogik 486 des
Mappierungsmanagers 402, 502 implementiert. Bei
einem solchen Ausführungsbeispiel
kann der LSAT-Fehldefektzustand von demselben Verwenderprogramm
bedient werden, einschließlich
der den Fehler induzierenden sequenzerbewussten Befehl.
-
Für eines
oder mehrere der oben diskutierten Ausführungsbeispiele kann der Fehler,
der bei einem Fehlen der Übersetzung
der logischen Sequenzeradresse (hier als ein „LSAT- Fehlen") während
der Ausführung
eines sequenzerbewussten Befehls entweder in einer synchronen oder
einer asynchronen Weise behandelt werden. Bei dem asynchronen Ansatz kann
der Sequenzer einen Fehlerzustand auslösen, wie oben beschrieben,
und kann derart bedient werden, dass der Fehler als ein asynchrones
Ereignis wirkt, das eine Übertragung
der Steuerung auf den Mappierungsmanager 402, 502 oder,
insbesondere bei wenigstens einem Ausführungsbeispiel, auf dem Behandlercode
auslöst,
der die Rationierungslogik 485 beinhaltet. Die Fehlerbehandlung
wird ereignisgesteuert, (etwa auch bei einem LSAT-Fehlen) und der
entsprechende Steuerungsübergang
auf den Fehlerbehandler ist seiner Natur nach asynchron.
-
Bei
wenigstens einem alternativen Ausführungsbeispiel kann die Architektur
jedoch eine nicht-versagende Variante des sequenzerbewussten Befehls
definieren. Das LSAT-Fehlen,
nicht aber das Verursachen eines Fehlers, der einen asynchronen Steuerungsübergang
auf einen Anwender verursacht, kann für eine spätere synchrone Behandlung aufgezeichnet
werden. Das Fehlen kann, beispielsweise, durch Setzen eines „Vergiftungsbit" oder eines anderen
Fehlindikators aufgezeichnet werden. In einem solchen Fall kann
der Fehlindikator später
während
der Ausführung
durch die Software geprüft
werden. Wenn der Fehlindikator als gesetzt erkannt wird, kann er
zu diesem Zeitpunkt behandelt werden. Auf diese Weise kann der Fehlerzustand
wie er in dem Fehlindikator angegeben ist, synchron behandelt werden.
-
Bei
einem solchen Ausführungsbeispiel
erzeugt dann, wenn bei der Ausführung
eines nichtversagenden sequenzerbewussten Befehls ein LSAT-Fehlen
auftritt, der Befehl nicht einen architekturalen Fehler. Stattdessen
kann der Fehler für
eine spätere
Verarbeitung aufgezeichnet werden und der Befehl schließt die Ausführung ab.
Bei einem solchen Ausführungsbeispiel
kann der Fehler als ein Teil des architekturalen Zustands auf eine
Weise, die ähnlich der
des Setzen eines Zustandsbits ist, aufgezeichnet werden. Der eine
oder die mehreren Bits des architekturalen Zustands, der gesetzt
ist auf einer Aufzeichnung auf ein LSAT-Übertragungsfehlen kann bezeichnet
werden als ein „vergifteter" Zustand. Bei wenigstens
einem Ausführungsbeispiel
könnte
der architekturale Zustand, der den „vergifteten" Zustand angibt,
mehr als ein Bit sein. Bei wenigstens einigen derartigen Ausführungsbeispielen
kann eine zusätzliche
Information in einem Mehrbitzustand kodiert sein, zusätzlich dazu,
ob ein LSAT-Fehlen aufgefunden worden ist, so als besondere Diagnoseinformation
oder Hinweise, die eine mögliche
Ursache des LSAT-Fehlerzustands
angeben und/oder einige Information über den Sequenzerbefehl, der
den Fehlerzustand verursacht hat.
-
Bei
nicht unterbrechenden Ausführungsbeispielen
kann die Software den vergifteten Zustand nach Abschluss der Beendigung
für den
nicht unterbrechenden sequenzerbewussten Befehl untersuchen. Wenn
ein Übersetzungsfehlen
aufgezeichnet worden ist, kann die Software einen synchrone Steuerungsübergang
auf einen Anwender ausführen,
der sodann den Übertragungsfehldefekt
behandelt. Bei wenigstens einem Ausführungsbeispiel ist das Verhalten
der nicht unterbrechenden Variante des sequenzerbewussten Befehls
etwa analog zu dem Verwendungsmodell des LD:S und des CHK.S in der
Architektur des Itanium® und des Itanium® 2
Mikroprozessors, wie sie von der Intel Corporation verfügbar sind,
wobei der LD.S Befehl den Speicherseitenfehler untersuchen kann,
nicht jedoch einen Seitenfehler verursachen kann auch bei dem Auffinden
eines Fehlers bei der virtuellen Speicherübersetzung. Stattdessen vervollständigt das
LD.S die Befehlsausführung, setzt
jedoch ein Vergiftungsbit (als NAT Bit bezeichnet). Das Vergiftungsbit
kann von dem CHK.S Befehl später
bei der Anwendersoftware untersucht werden, was eine Steuerübergabe
auf einen Behandler auf der Verwenderebene verursachen kann.
-
Zusammenfassend
kann bei vielen unterschiedlichen Ausführungsbeispielen dann, wenn
die Übersetzungslogik 486 nicht
dazu in der Lage ist, eine gegenständlichen Sequenzer zu lokalisieren oder
eine Mappinginformation für
eine logische Sequenzeradresse, die in einem sequenzerbewussten Befehl
(hier als „LSAT-Fehlen") angegeben worden ist,
zu lokalisieren, das Fehlerverhalten entweder ein asynchrones architekturelles
Ereignis sein, das die Steuerungsübergabe an einen Fehlerbehandler überträgt oder
kann statt dessen ein Aufzeichnen eines vergifteten Zustands anzeigen,
das durch eine Software synchron geprüft wird. Solche Fehlerverhalten
können
für unterschiedliche
Vorrangsebenen in unterschiedlichen Ausführungsbeispielen definiert werden
(wie, beispielsweise, einem Monitor einer virtuellen Maschine und
der Hypervisorebene, der Systemvorrangsebene und der Verwenderebene).
-
Sowohl
für die
Ausführungsbeispiele 400 und 500 in
den 4 und 5 kann der Mappierungsmanager 402, 502 auch
zusätzlich
zur Übersetzung,
eine Mappingverwaltung ausführen.
Bei wenigstens einem Ausführungsbeispiel
kann wenigstens ein Teil der Mappingverwaltung durch die Rationierungslogik 485 ausgeführt werden.
Die Rationierungslogik 485 kann, beispielsweise, aufgerufen
werden, wenn ein LSAT-Fehlen erkannt wird. Die Rationierungslogik 485 kann
einen gegenständlichen
Sequenzer in eine logische Sequenzeradresse mappen, die in einem
sequenzerbewussten Befehl spezifiziert wird. Ein logischer Sequenzer,
der in einen gegenständlichen
Sequenzer mappiert ist, wird hier als ein „aktiver logischer Sequenzer" bezeichnet, der entsprechende
gegenständliche
Sequenzer kann wiederum als „schmutziger
gegenständlicher
Sequenzer" bezeichnet
werden. Ein gegenständlicher Sequenzer,
der nicht als ein logischer Sequenzer mappiert ist, kann als ein „verfügbar" oder „leerlaufend" oder „frei" bezeichnet werden.
-
Bei
wenigstens einem Ausführungsbeispiel kann
die Rationierungslogik den Kontext eines aktiven logischen Sequenzers
von dem entsprechenden schmutzigen gegenständlichen Sequenzer in einen Sicherungsspeicher
räumen
(unten in Verbindung mit 7 näher beschrieben) und sodann
den sich ergebenen verfügbaren
Sequenzer an den logischen Sequenzer geben, dessen Zugang gerade
das Fehlen der LSAT verursacht hat. Derartige Kontextwechselvorgänge können durch
die Rationierungslogik 485 beispielsweise dann ausgeführt werden,
wenn keine zusätzlichen
gegenständlichen
Sequenzer leer laufen und für
das Mappen verfügbar
sind.
-
Das
heißt,
die Ausführungsressourcen 490 weisen
eine finite Zahl N von gegenständlichen
Sequenzern 420-426 auf, auf denen der Mappierungsmanager 402, 502 mappen
kann und M logische Sequenzer zur Ausführung planen kann. Jeder aktive Shred
(wie, beispielsweise, Shred 280 und/oder Shred 282 in 2),
der durch einen aktiven Verwenderfaden geplant ist (wie, beispielsweise, 225 in 2)
auf einem logischen Sequenzer benötigt einen gegenständlichen
Sequenzer, auf dem er läuft. Entsprechend
kann der Mappierungsmanager 402, 502 die Verteilung
und das Mappen von gegenständlichen
Sequenzern auf die logischen Sequenzer verwalten, um den Fortgang
bei dem Ausführen
der shreds auszuführen,
die diesen logischen Sequenzern zugewiesen sind.
-
Bei
dem Durchführen
des Mappens und der Verteilungsfunktion, die oben beschrieben sind,
können
die Rationierungslogik 485 des Mappierungsmanagers 402, 502 gegenständliche
Sequenzer (420-426), die zu logischen Sequenzadressen
zu mappieren sind, zuweisen. Die Rationierungslogik 485 veranlasst
die Unterteilungssequenzer mehrere Shreds von demselben Faden als
auch mehrere Fäden
von mehreren Prozessen aufzunehmen und 2) die Sequenzer effektiv
zu verteilen, um so viele häufig
bezogene Arbeitssätze
von logischen Sequenzern in physikalischen Sequenzern wie möglich zu
mappieren. Die Rationierungslogik 485 kann einen beliebigen
von mehreren Ansätzen
zum Verwalten von virtuellen-zu-gegenständlichen Sequenzermappern verwenden.
Solche Ansätze
können
eine Basis und Grenzen, eine Segmentation, ein Paging oder dergleichen
aufweisen. Diese Liste ist nicht erschöpfend, sie ist lediglich eine
beispielhafte Auflistung.
-
Basis und Grenzen
-
Der
Mappierungsmanager 402, der in 4 gezeigt
ist, kann einen Basis- und Grenzenansatz unterstützen, um ein Mappen von virtuellen
zu gegenständlichen
Sequenzern zu verwalten. Bei einem derartigen Ausführungsbeispiel
wendet der Mappierungsmanager 402 einen statischen Partionierungsansatz
an, der einen statischen Teil des gegenständlichen Sequenzers für jeden
Faden (oder, äquivalent, für jeden
Metaprozessor) bestimmt. Der Mappierungsmanager 402 kann
eine Hardwaremappingsstruktur 415 verwenden, um das Mappen
auszuführen.
-
Bei
wenigstens einem Ausführungsbeispiel weist
die Mappingstruktur 415 wenigstens zwei Register auf: ein
Basisregister 416 und ein Grenzenregister 417.
Das Basisregister 416 kann einen Basissequenzeridentifikationswert
für einen
Faden aufweisen. Das Grenzregister 417 kann einen maximalen Sequenzeridentifikationswert
für den
Faden halten. Der Grenzregisterwert repräsentiert die höchste gültige virtuelle
Sequenzeradresse, die der Faden erreichen kann. Gemeinsam definieren
das Basisregister 416 und das Grenzregister 417 einen
Bereich von gegenständlichen
Sequenzern für
den thread. Die Werte für
das Basisregister 416 und das Grenzenregister 417 kann
von dem Mappierungsmanager 402, 502 geladen werden
wenn ein Faden geladen wird oder eingebracht wird.
-
Unter
dem Basis- und Grenzansatz kann ein Faden nur auf die gegenständlichen
Sequenzer zugreifen, die in dem Bereich der gegenständlichen
Sequenzeridentifizierungen liegt, die von den Werten seines Basisregisters 416 und
Grenzregisters 417 angegeben sind.
-
Die
Bereichsprüfung
kann bei jeder Bezugnahme auf eine logische Sequenzeradresse in
dem Faden ausgeführt
werden. Für
jede Fadenreferenz auf einer logischen Sequenzeradresse hat der
Faden die Illusion, dass er zu dem logischen Adressbereich von 0
bis zu dem Wert in dem Grenzenregister 417 Zugang hat.
Der Faden hat gegenständlich
jedoch Zugang zu gegenständlichen
Sequenzern in dem Bereich von einer unteren Grenze, die durch den
Wert in dem Basisregister 416 angegeben wird bis zu einer oberen
Grenze, die berechnet wird als die Summe des Wertes in dem Basisregister 416 zuzüglich eines Wertes
in dem Grenzenregister 417. Die Sequenzeradresse wird verglichen
mit dem oberen Grenzwert in dem Grenzenregister 417. Wenn
die Adresse nicht innerhalb der Grenze ist, kann ein Übersetzungsfehler
für den
Mappierungsmanager 402 erzeugt werden.
-
Segmentation
-
Ein
alternativer dynamischer Adressmanagementansatz für eine logischen
Sequenzer, der durch den Mappierungsmanager 402 unterstützt werden
kann, kann den Basis- und Grenzansatz mit einem Segmentationsansatz
beinhalten. Bei einem solchen Ausführungsbeispiel können die
Ausführungsressourcen 490 einen
Satz von Basis- und Grenzregistern 416, 417 für jedes „Segment" aufweisen. Entsprechend
kann die Mappierungsstruktur 415 für x Segmente x Basisregister 416 und
x zugehörige
Grenzregister 417 einschließen, wobei jedes Registerpaar 416, 417 einem „Segment" zugehörig ist.
-
Ein „Segment" ist ein logischer
Aggregationsblock von logischen Sequenzeradressen. Jeder Aggregationsblock
von logischen Sequenzeradressen wird ein Segment genannt und kann
eigene zugehörige
Basis- und Grenzregistern 416, 417 haben. Bei
einigen Ausführungsbeispielen
wird das Basisregister 416 als Segmentbasisregister bezeichnet
und das Grenzregister 417 wird als Segmentgrenzregister
bezeichnet. Bei wenigstens einigen Ausführungsbeispielen wird die Segmentation
zum Trennen der gegenständlichen
Sequenzer in gesonderte Gruppen verwendet, die jede bestimmte Fähigkeitseigenschaften
hat, wie, beispielsweise, Leistungseigenschaften, (beispielsweise
Sequenzer in einem Segment, die schneller oder langsamer sind als
ein anderes Segment) oder Sequenzertyp (d. h. Sequenzer in einem
Segment können
als T-Sequenzer
mappiert sein, während
diejenigen aus einem anderen Segment als S-Sequenzer mappiert sind).
-
Paging basiertes Adressmanagement der
logischen Sequenzer.
-
5 zeigt
ein Ausführungsbeispiel
eines Mappingmanagers 520, der einen pagingbasierten Ansatz
zum Verwalten des dynamischen Mappens von logischen Sequenzeradressen
verwendet.
-
5 zeigt,
dass die gegenständlichen
Sequenzer 420-426 als kleine, gleichgroße Partitionen, die
als „frames" 510 bezeichnet
werden, organisiert sein können.
Obwohl in 5 lediglich zwei Frames 510 gezeigt
sind, ist diese Darstellung nicht einschränkend zu verstehen. Der Mappierungsmanager 502 kann
ein Virtuell-zu-Gegenständlich-Mappen für jede Anzahl
von Frames verwalten. Zusätzlich
können
die Frames jede beliebige Anzahl von Sequenzern aufweisen.
-
Der
Mappierungsmanager 502 kann einen auf einem Paging basierenden
Ansatz erzwingen, bei dem der Adressraum des logischen Sequenzers
für dynamisch
mappierte Adressen eines logischen Sequenzers aufgeteilt werden
kann in eine Anzahl von gleich großen Partitionen, die als „Seiten" bezeichnet werden.
Die Anzahl der logischen Sequenzer auf einer Seite ist dieselbe
wie eines Rames. Entsprechend ist der Adressraum des logischen Sequenzers effektiv
eine Sammlung von logischen Sequenzerseiten einer gegebenen Framegröße.
-
Eine
kleine Seite kann möglicherweise
die Größe einer
Seitentabelle erhöhen,
während
eine große
Seite möglicherweise
zu einer relativ hohen internen Fragmentation führen kann. Die Rationierungslogik 486 kann
gegenständliche
Sequenzer zuordnen und logische Sequenzer auf Seitenebenen von Granularität mappen.
Bei dem in 5 dargestellten Ausführungsbeispiel
hat jeder Rahmen zwei gegenständliche
Sequenzer.
-
Eine
architekturale Unterstützung
für einen Seitenbasierten
Adressraum des logischen Sequenzers kann ein Register 525 oder
eine andere Struktur zum Speichern eines Zeigers auf die Seitentabelle aufweisen.
Bei wenigstens einem Ausführungsbeispiel
ist berücksichtigt,
dass die Seitentabelle in einer Mappierungsstruktur 580 in
einem Speichermedium 460, wie beispielsweise, einem Speicher
beinhaltet ist. Es wird weiter angenommen, dass bei wenigstens einem
Ausführungsbeispiel
der Wert in dem Zeigerregister 525 geladen wird, um die
Basisspeicheradresse oder den Ort der Seitentabelle anzugeben. Die
architekturale Unterstützung
für den
seitenbasierten Adressraum des logischen Sequenzers, kann weiter
ein Register 526 oder eine andere Struktur aufweisen, um
einen Wert für
die Größe der Seitentabelle
zu halten.
-
Der
Pagingmechanismus kann verwendet werden, um die gegenständliche
Sequenzer 420-426 in Partitionen mit fester Größe von entweder
gleicher oder ungleicher Größe als eine
Basiseinheit von Sequenzerallokation verwendet werden. Für gleich
große
feste Partitionen von Sequenzern kann jede Partition einem Faden
zugeordnet werden. Ein solcher Ansatz kann zu einer internen Fragmentation
führen, da
nicht alle Fäden
notwendigerweise auf dieselbe Anzahl von Sequenzern zugreifen. Ein
Nutzen eines solchen Ansatzes ist jedoch, dass der Platzierungsalgorithmus,
der durch die Rationierungslogik 485 des Mappingmanagers 402, 502 verwendet
wird, flexibler sein kann, da alle Partitionen von gleicher Größe sind,
so dass es gleichgültig
ist, welche bestimmte Partition einem Faden tatsächlich zugeordnet wird.
-
Die
Verwendung von gleich großen
Partitionen für
den Paginmechanismus erlaubt die Verwendung einer einzelnen Bitmap
zum Mappen eines kleine Arbeitssatzes von logischen Sequenzern von
einem großen
und knappen Satz von logischen Sequenzeradressen auf einen kleinen
Satz von gegenständlichen
Sequenzern. Dieser Nutzen wird in einem Segmentationsansatz nicht
verwirklicht, wo ein Segment einen Satz von kontinuierlich bezeichneten gegenständlichen
Sequenzern repräsentiert.
Bei einem Segmentationsansatz kann der Mappierungsmanager 402, 502 nicht
nur eine geringe gesonderte Anzahl von logischen Sequenzeradressen
auf die gegenständlichen
Sequenzer mappen.
-
Alternativ
können
Seiten eines festen Satzes von unterschiedlichen Größen durch
die Mappierungsmanager 402, 502 verteilt werden.
Bei einem solchen Ansatz kann einem Faden die kleinste verfügbare Partition,
die für
den Faden groß genug
ist, zugeordnet werden. Da die Rationierungslogik 485 kleinere
Partitionen solchen Fäden,
die kleinere Sequenzerblöcke
erfordern, zuordnen kann, kann die interne Fragmention kleiner sein
als bei einem Ansatz mit gleich großen festen Partitionen. Das
heißt, es
ist möglich,
jedem Faden zu der kleinsten verfügbaren Partition innerhalb
der der Faden passen wird, zuzuordnen. Dieser Ansatz kann möglicherweise
zu einer externen Fragmentation führen. Das heißt, die externe
Fragmentation kann auftreten wenn, obwohl die Summe von verfügbaren gegenständlichen
Sequenzern 420-426 genug ist für die Erfordernisse eines physikalischen
Sequenzers eines Fadens, keine einzelne Partition des gegenständlichen
Sequenzers die groß genug
ist für
den Faden, verfügbar
ist. Die Rationierungslogik 485 hat daher eine geringere
Flexibilität
in dem Platzierungsalgorithmus für
feste Partitionen mit variabler Länge, als mit gleich großen Partitionen.
-
Alternativ
kann der Mappingmanager 402, 502 einen Partitionierungsansatz
unterstützen,
in der Sequenzerpartitionen von unterschiedlicher Größe sein
kann und dynamisch erzeugt werden können. Bei einem solchen Ansatz
kann die Rationierungslogik 485 genau die geeignete Anzahl
von Sequenzern für
jeden Faden zuordnen. Für
ein System, bei dem mehr als ein Sequenzer für einen Faden verwendet werden
kann, kann die dynamische Sequenzerallokation und die Deallokation
zu einer externen Fragmentierung führen. Um eine solche externe
Fragmentierung zu vermeiden, kann der Mappierungsmanager 402-502 für ein System,
das einen dynamischen Sequenzerpartionierungsansatz verwendet, eine
Verdichtung implementieren. Eine solche Verdichtung hat einen relativ
zugehörigen
Overhead, in dem es eine Relokation (siehe, beispielsweise, die Relokationslogik 910 von 9)
von allen Kontexten des Status der Sequenzer für einen oder mehrere Fäden einschließt, so dass
diese anderen zugehörigen Sequenzern „benachbart" sein können, und
so dass die freien gegenständlichen
Sequenzer in einem kontinuierlichen Block verbleiben. Bei wenigstens
einigen Ausführungsbeispielen
ist die Relokationslogik 910 aufgerufen zum Relozieren
und Remappen des Sequenzers, um bestimmten Fähigkeitsanforderungen zu entsprechen,
die gemeinsam sind mit dem Mappen zu logischen zu gegenständlichen
Sequenzern. Beispielsweise kann bei einem Ausführungsbeispiel ein logischer
Sequenzer zugehörig
sein einem Fähigkeitsdeskriptor,
der ein Remappen immer dann erfordert, wenn der darunter liegende
gegenständliche
Sequenzer einen bestimmten thermischen Schwellenwert übersteigt.
Bei wenigstens einem Ausführungsbeispiel
wird der Relokationsvorgang, der von 910 ausgeführt wird,
manchmal als ein „Sequenzerhoppen" bezeichnet.
-
Die
Rationierungslogik 485 eines Mappierungsmanagers 402, 502 für ein System,
das ein dynmaisches Sequenzermappen verwendet, kann beliebige aus
verschiedenen Mappingtechniken verwenden. Diese Mappingtechniken
können
für jede
Einheit der Allokation verwendet werden, so als individuelle gegenständliche
Sequenzer, Segment, Seiten, usw. Eine besondere Auflistung derartiger
Ansätze erfolgt
unten. Dem Fachmann ergibt sich jedoch, dass eine Rationierungslogik 485 zusätzlich die
Vorteile der Fähigkeit
des Sequenzers bei dem Ausführen
von dem Mappen von logischen zu gegenständlichen Sequenzern nutzen
kann. Eine weitere Diskussion dieser zur Fähigkeit beitragenden Mappingbetrachtungen
ergibt sich in Verbindung mit 13.
-
Im
Allgemeinen kann ein Mappierungsalgorithmus, der von der Rationierungslogik 485 für ein System
verwendet wird, das einer dynamischen Sequenzeralloaktion folgt
und dem Mappierungsansatz, das Folgende einschließen, obwohl
eine solche Liste nicht abschließend ist:
- a.
Best-Fit Algorithmus. Der Mappierungsmanager 402, 502 tastet
alle freien Partitionen von physikalischen Sequenzern ab und wählt die
Partition des physikalischen Sequenzers, der in der Größe derjenigen
am nächsten
ist, die für
den angeforderten Faden benötigt
wird. Ein solcher Algorithmus kann zu einer relativ guten Anpassung
führen und
daher einer effizienten Nutzung der tatsächlichen Sequenzer – die kleinste
verfügbare
Partition ist groß genug,
um einem Faden zugeordnet zu werden.
- b. First-Fit Algorithmus. Der Mappierungsmanager 402, 502 wählt die
erste verfügbare
Partition des Sequenzers aus, die groß genug ist.
- c. Next-Fit Algorithmus. Mappierungsmanager 402, 502 tastet
die Partitionen von Sequenzern ausgehend von dem Ort der unmittelbar
von ...Allokation ab und wählt
die nächste
verfügbare
Partition, die groß genug
ist.
-
Unabhängig davon,
wie die Sequenzer partitioniert sind, kann das Mappen 402, 502 die
Rationierungslogik 485 aufweisen, die das dynamische Mappen
eines gegenständlichen
Sequenzers verwaltet oder die Partition von gegenständlichen
Sequenzern, zu einem Faden jedes Mal, wenn ein Bezug auf eine logische
Sequenzadresse in einem ersten Programm in einem LSAT-Fehlen auftritt.
Nachfolgende Bezugnahmen auf die logische Sequenzeradresse von dem Programm
können
durch die Übersetzungslogik 486 vernetzt
werden, ohne dass ein LSAT-Fehlen auftritt.
-
Während einige
der oben diskutierten Partitionierungsschemata oberflächlich ähnlich bekannten Speichermanagementtechniken
zu sein scheinen, beinhaltet die Anwendung derartiger Techniken
auf Sequenzer einzigartige Anforderungen. Im Gegensatz zu Register-
und Speichervirtualisationsschemata schließen Sequenzer nicht einfach
den spatialen Kontext der Datenspeicherung ein. Statt dessen ist
ein Sequenzer eine Ausführungsressource,
die weit mehr Eigenschaften beinhalten und daher komplexere Betrachtungen.
-
Zur
weiteren Darstellung wenigstens einiger der einzigartigen Merkmale
von gegenständlichen Sequenzern
als eine dynamisch mappierte Ressource, bezieht sich die nachfolgende
Diskussion auf einen gegenständlichen
Sequenzer als eine Basiseinheit einer Sequenzerallokation. Der Fachmann
erkennt jedoch, dass die nachfolgende Diskussion auch für andere
Allokationseinheiten zutrifft, einschließlich Segmenten und/oder Rahmen
von gegenständlichen
Sequenzern.
-
Ein
Faden kann mehrere sequenzerbewusste Befehle beinhalten. Wir verwenden
den Wert Y zum Darstellen in einer Anzahl von einzigartigen logischen
Sequenzeraderessen, die in diesen Befehlen in einen Faden bezogen
sind. Die Mappierungsmanager 402, 502 können einen
gegenständlichen
Sequenzer auf jeden von Y logischen Sequenzeradressen des Fäden mappen.
Für einen
Faden, der eine Gesamtzahl von Y von einzigartigen logischen Sequenzeradressen
beinhaltet, kann der Faden einen Fortschritt bedeuten, solange wenigstens
ein gegenständlicher
Sequenzer dem Faden zugeordnet ist. Der Mappingmanager 402, 502 kann
dies erreichen durch Multiplexen von mehreren (Y) logischen Sequenzerkontexten
auf dem einzigen physikalischen Sequenzer. Mit anderen Worten, kann
während
die Menge eines Fäden
von dem OS angegeben ist, der Mappierungsmanager 402, 502 alternativ
jeden der Y mehrfachsequenzerkontextes Fäden zu Z gegenständlichen
Sequenzern zuordnen, wobei Z genau 1 sein kann. Dieses Mulitplexen
kann für
jede Anzahl von Y logischen Sequenzadressen und Z gegenständlichen
Sequenzern durchgeführt
werden, wobei Y > Z.
-
Bei
wenigstens einem Ausführungsbeispiel kann
zum Handhaben der Y > Z
Multiplexsitutation kann ein Multisequenzer-Multithreadingsystem 500 eine
Kontextschlange die einen logischen Sequenzer („LSCQ") 527 aufweisen. Bei wenigstens
einem Ausführungsbeispiel
kann die LSCQ 527 eine Datenstruktur sein. Bei dem in 5 dargestellten
Ausführungsbeispiel
wird LSCQ 527 in dem Speichermedium 460 gespeichert,
bei dem es sich um ein Speichersystem handeln kann, und kann ein
Teil des Sicherungsspeichers 575 sein. Bei wenigstens einem Ausführungsbeispiel
weist die LSCQ 527 wenigstens Y-Z Eingänge auf und kann bis Y Eingänge aufweisen.
Jeder Eingang ist dazu in der Lage, die Kontextinformation für einen
logischen Sequenzer zu halten, aber auch andere Information wie
eine Fähigkeitsattributsinformation,
wie Sequenzerhoppinanforderungen und Sequenzerplanungsanforderungen.
-
Wenn
ein Faden mit Y logischen Sequenzeradressen mulitplext wird, um
auf Z gegenständlichen Sequenzern
zu laufen, führt
der Mappierungsmanager 402, 502 ein Umschalten
des Sequenzerkontext zu jedem Zeitpunkt, wenn ein logischer Sequenzer ausgeschaltet
wird, aus, und ein neuer logischer Sequenzer wird zu einem gegenständlichen
Sequenzer eingeschaltet. Während
dieses Kontextschaltens wird der gegenwärtige Kontext eines schmutzigen gegenständlichen
Sequenzers, der einem aktiven logischen Sequenzer aus Y logischen
Sequenzern zugehörig
ist, in dem entsprechenden Eingang des LSCQ 527 gesichert.
Sodann wird der Kontext des neuen logischen Sequenzers kopiert oder
in den gegenständlichen
Sequenzer „eingeschaltet".
-
Der
Mappierungsmanager 402, 502 karin so einen Kontextsicherungsvorgang
für den
gegenwärtigen
logischen Sequenzer (dem einen, der ausgeschaltet ist) und einen
Kontextwiedergewinnungsvorgang für
den neuen logischen Sequenzer (demjenigen, der eingeschaltet wird)
während
eines Y > Z Multiplexen
von logischen Sequenzadressen in gegenständliche Sequenzer ausführen. Es
wird angenommen, dass der Mappierungsmanager 402, 502 die
mulitplexen Y logischen Sequenzerkontexte in bzw. aus dem LSCQ 527 sichern
bzw. rückgewinnen wird.
-
Wenn
ein Fadenwechsel auf der OS-Ebene für einen ersten Faden ausgeführt wird,
kann das OS einen SSAVE Vorgang ausführen, um die Kontexte der Z
gegenständlichen
Prozessoren für
den Faden zu sichern, als auch jede Kontextinformation, die zu dem
LSCQ 527 für
Y-Z nichtaktive logische Sequenzadressen, die dem Faden zugehörig sind,
gesichert worden ist, in dem OS-Kernel Sicherungsbereich als dem
Gesamtfadenkontext. Bei einem späteren
Fadenwechsel kann der SRSTOR Vorgang durch den OS Kernel zum Wiedergewinnen
des Fadenkontextes einschließlich
aller Y logischen Sequenzerkontexte ausgeführt werden. Solche Vorgänge, die
von dem OS kernel durchgeführt
werden, werden hier als virtualisierte SSAVE und SRSTOR Vorgänge bezeichnet.
Derartige SSAVE und SRSTOR Vorgänge können durch
das OS durchgeführt
werden. Bei wenigstens einigen Ausführungsbeispielen kann der virtualisierte
SSAVE und der SRSTOR Mechanismus auf verschiedenen Vorrangsebenen
einschließlich dem
virtuellen Maschinenmotor und den Mikrocodeschichten implementiert
werden, wie oben beschrieben.
-
Während eines
SRSTOR Vorgangs kann das OS bis zu Z der Y logischen Sequenzerkontexte
aus dem Fadenkontextsicherungsbereich des OS Kernels in die Z-gegenständlichen
Sequenzer, die jetzt für
den Faden verfügbar
sind, rückgewinnen
(Z kann eine unterschiedliche Zahl sein als sie es war, als der Faden
zuvor aktiv war, Z ist mindestens 1). Der Rest der Y virtuellen
Sequenzer des Fäden
wird in Y-Z Eingange des LSCQ 527 des Fäden gespeichert. Bei wenigstens
einem Ausführungsbeispiel
gewinnt der STSTOR Vorgang alle Y logischen Sequenzerkontexte aus
dem den Fadenkontext speichernden Bereich des Kernels in einen Y-Eingang
LSCQ 527 während
des SRSTOR-Vorgangs, statt Z-logische Sequenzerkontexte direkt in
die entsprechenden Z-gegenständlichen
Sequenzer zu speichern. Bei einem solchen Ausführungsbeispiel können die
Y-logischen Sequenzerkontexte gemappt und geplant werden für Z-gegenständliche
Sequenzer unter Verwendung von verschiedenen Strategien. Solche
Strategien können
eine Anforderungsverteilung einschließen. Bei einer Anforderungsverteilung
wird, wenn auf einen logischen Sequenzer Bezug genommen wird, aus
den LSCQ 527 ausgewählt
und der Mappierungsmanager 402, 502 versucht,
einen leer laufenden gegenständlichen
Sequenzer aus dem Z-gegenständlichen
Sequenzern auf den logischen Sequenzer zu mappen. Wenn kein leer
laufender gegenständlicher
Sequenzer vorhanden ist, kann der Mappingmanager 402, 205,
einen schmutzigen gegenständlichen
Sequenzer auswählen,
ein Sequenzerkontext des „swap" ausführen, um
den Kontext in einen geeigneten Eingang für den entsprechenden logischen
Prozessor in dem LSCQ 527 zu sichern und den neuen logischen
Sequenzer einplanen zum Mappen des gegenständlichen Sequenzers, der gerade
geräumt
worden ist.
-
Alternativ
kann während
des Multiplexens der Mappingmanager 402, 502 während der
Quanten für
den Faden die Y-logischen Sequenzer für eine Ausführung auf dem Z- gegenständlichen
Sequenzern vorsehen. Der Mappingmanager 402, 502 kann einen
Planungsansatz verwenden, etwa einen einfachen zeitbasierten Rundlaufansatz
unter Verwendung von Unterquanten. Jedes Unterquantum kann eine
Fraktion oder ein Teil der OS Quanten für das Vorbereiten sein. Alternativ
kann der Mappingmanager 402, 502 unterschiedliche
Vorbereitungsansätze verwenden,
etwa einen ereignisgesteuerten Ansatz. für den ereignisgesteuerten Ansatz
kann ein logischer Sequenzer aus einem physikalischen Sequenzer
bei dem Auftreten eines Cachefehlens oder einem anderen relativ
Ereignis mit relativ langer Latenz ausgeschaltet werden. Bei dem
ereignisgesteuerten Ansatz kann ein logischer Sequenzer auch von
einem gegenständlichen
Sequenzer ausgeschaltet werden bei dem Auftreten eines Ereignisses,
das aufgetreten ist aufgrund des Prüfens einer eingeschränkten Kapazität, etwa
einem schmutzigen gegenständlichen
Sequenzer, der einen thermische Schwelle übersteigt, das es erfordert,
den gemappten logischen Sequenzer in das LSCQ 527 zu räumen zum
neuen Planen (was ein Wechseln des Sequenzers einschließen kann).
-
Bei
wenigstens einem Ausführungsbeispiel kann
die LSCQ 527 Verwaltung, die von dem Mappingmanager 402, 502 durchgeführt wird,
ein Teil des Betriebssystems sein. Bei einem solchen Ausführungsbeispiel
kann das OS zum Verwalten des LSCQ 527 und zum Planen der
Y logischen Sequenzerkontexte auf die Z-gegenständlichen Sequenzer verantwortlich
sein.
-
6 zeigt
eine weitere Einzelheit einer Mappingstruktur 580, die
von dem Mappingmanager 402, 502 beibehalten werden
kann (5). 6 wird hier unter Bezugnahme
auf 5 diskutiert. Die Mappingstruktur 580 kann
von der Übersetzungslogik 486 (5)
zum Ausführen
der Sequenzeradressen von einem logischen zu einem gegenständlichen Sequenzer
befragt werden. Einträge
in die Mappingstruktur kann durch die Rationierungslogik 485 (5)
verwaltet werden, wenn ein gegenständlicher Sequenzer zugeordnet
oder freigegeben wird, einschließlich einer neuen Anordnung
für eine
logische Sequenzeradresse.
-
Die
Mappingstruktur 580 kann eine Mappingtabelle 610 für jeden
Faden aufweisen. Beispielsweise zeigt 6 Mappingstrukturen 610a, 610b, 610c und 610d,
der Fäden
A, B, C und D zugehörig
sind. Obwohl in 6 lediglich vier spezifische
Fäden gezeigt
sind, ist das Beispiel von 6 nicht
als einschränkend
anzusehen. 6 zeigt, dass jede beliebige
Anzahl x von Fäden
von dem Mappingmanager aufgenommen werden kann, der einen seitenbasierenden
Mappingansatz für
die logische Sequenzeradresse unterstützt (etwa der Mappingmanager 502, der
in 5 gezeigt ist).
-
Bei
wenigstens einem Ausführungsbeispiel kann
die Mappingstruktur 580 eine Frameliste 620 für freie
Sequenzer aufweisen, über
die der Mappingmanger 502 die Spur derjenigen gegenständlichen Frames
beibehält,
die gegenwärtig
nicht zugeordnet und die daher zur Verteilung verfügbar sind,
wenn in einem sequenzbewussten Befehl auf eine neue logische Sequenzeradresse
bezug genommen wird.
-
Bei
dem in 6 gezeigten Beispiel, das lediglich illustrativen
Zwecken dient und nicht als Einschränkung anzusehen ist, ist jede
Mappingtabelle 610 eine Sequenzerseitentabelle, die einen
Eingang für
jede Seite des entsprechenden Fäden
einschließt.
Entsprechend weist das Beispiel von 6 drei Seiten
für den
Faden A und den Faden B auf, und weist vier Seiten für den Faden
C und den Faden D auf. Die Sequenzerseitentabelle 610 kann
einfach als „Seitentabelle" in der folgenden
Diskussion bezeichnet werden.
-
6 zeigt,
dass jeder Eingang 630 einer Fadenseitentabelle 610 ein
Sequenzerseitenframeadressfeld 632 aufweisen kann. Der
Mappingmanager 502 kann einen Wert in das Seitenframeadressfeld 632 platzieren,
wenn ein physikalischer Sequenzer der Seite entsprechend dem Eintrag 632 zugeordnet ist.
(Bei wenigstens einem Ausführungsbeispiel
kann der Wert in das Adressfeld 632 durch die Rationierungslogik 485 für eine anfängliche
Zuordnung oder durch eine Neuanordnungslogik (siehe 910, 9) für eine Neuanordnung
platziert sein). Der Wert des Seitenframeadressfeldes 632 gibt
eine Seitenframeadresse für
den Seitenframe an, zu dem mappierte Sequenzer gehört. Für einen
gegenwärtig
aktiven Faden kann der Wert des Seitenframeadressfeldes 632 die
Basisadresse des gegenständlichen
Sequenzerframes angeben, zu dem die entsprechende Seite des Fäden zugeordnet
ist. Für
einen Faden, der seine Ausführung
nicht beendet hat, jedoch ausgewechselt worden ist, um Raum für einen
anderen Faden zu machen, gibt der Wert des Sequenzerseitenframeadressfeldes 632 die
Zeigeradresse für
die nicht gemappte Sequenzerseitenkontextinformation des Fadend,
die in dem Sicherungsspeicher 575 gespeichert worden ist,
(siehe, beispielsweise, den Sicherungsspeicher 575 in 5),
an.
-
6 zeigt,
dass der Eintrag 630 auch ein Vorhanden/Nichtvorhanden-Feld 634 aufweisen kann.
Der Wert des Vorhanden/Nichtvorhanden-Feldes 634 kann angeben,
ob die Kontextinformation für die
Fadenseite in dem gegenständlichen
Sequenzerframe vorhanden ist oder ob es in dem Sicherungsspeicher 575 vorhanden
ist. Der Wert des Vorhanden/Nichtvorhanden-Feldes 634 kann
daher von dem Mappingmanager 502 verwendet werden um zu bestimmen,
ob die Inhalte des Sequenzerseitenframeadressfeldes 632 die
Basisadresse des gegenständlichen
Sequenzerrahmens ist oder ob es einen Ort einer logischen Sequenzerseite
mit dem Sicherungsspeicher 575 angibt. Der Wert des Bits,
das das Vorhandensein angibt, kann zum Auslösen eines Seitenfehlers bei
einigen Ausführungsbeispielen
untersucht werden.
-
6 gibt
an, dass jeder Eintrag 630 auch weitere Felder einschließen kann.
Bei einigen Ausführungsbeispielen
können
einige oder mehrere dieser zusätzlichen
Felder die Skriptoren für
Fähigkeitsattribute
halten, um Eigenschaften anzugeben oder Einschränkungen anzugeben, die dem
virtuellen Sequenzerframe zugehörig
sind, repräsentiert
durch den Eintrag 630. Beispielsweise kann der Eintrag 630 ein
Schutzfeld 636 angeben, das durch eine Schutzlogik verwendet
werden kann und eine optionale Teilungslogik (siehe 912, 914 von 9)
des Mappingmanagers 502.
-
Natürlich können verschiedene
Ausführungsbeispiele
zusätzliche
oder unterschiedliche Felder als diejenigen, die in 6 dargestellt
sind, aufweisen. Beispielsweise kann der Eintrag 630 ein
Vorbereitungsfeld 638 aufweisen. Das Vorbereitungsfeld 638 kann
eine Planungsinformation für
den zugehörigen
logischen Sequenzerframe halten. Die Vorbereitungsinformation kann,
beispielsweise, eine oder mehrere auf dem Alter basierende Hinweise
beinhalten, um anzugeben, wenn oder wie häufig der Frequenzerframe zum
Mappen oder Neumappieren einschließlich der Neuanordnung wie
etwa ein Sequenzerhoppen anzugeben. Zusätzlich oder stattdessen kann
die Vorbereitunsgsinformation 638 eine Fähigkeitsinformation
beinhalten, die eine oder mehrere Eigenschaften angibt, die für den gegenständlichen Prozessor
auf dem der logische Sequenzframe vorgesehen ist, angibt. Beispielsweise
kann die auf der Leistungsfähigkeit
basierende Vorbereitungsinformation eine gewünschte minimale Eigenschaft
oder ein maximales Maß für die Energie
pro Befehl für
einen gegenständlichen
Zielsequenzerframe beinhalten.
-
Eine
kurze Bezugnahme auf 10 zeigt, dass bei wenigstens
einem Ausführungsbeispiel
des Verfahrens 1000 zum Übersetzen einer logischen Sequenzeradresse 1030 in
einen gegenständlichen Sequenzidentifizierer 1040.
Bei wenigstens einem Ausführungsbeispiel
kann das Verfahren 1000 durch eine Übersetzungslogik des Mappingmanagers durchgeführt werden
(siehe, beispielsweise, die Übersetzungslogik 486 des
Mappingmanagers 502, wie in 5 gezeigt).
-
10 ist
ein Flussdiagramm, das den Daten- und Steuerungsfluss bei wenigstens
einem Ausführungsbeispiels
eines allgemeinen Verfahrens 1000 zum Verwenden einer Mappingstruktur
(siehe, beispielsweise, 580 von 5) zum Ausführen einer logischen
Sequenzeradressübersetzung
wiedergibt. Insbesondere zeigt 10 die
Verwendung einer oder mehrerer Seitentabellen 1010 als
Mappingstruktur 580 (5).
-
Das
Verfahren kann zum Ausführen
einer logischen Frequenzadressübersetzung
für ein
Multitthreadingsystem, das mehrere Sequenzer aufweist (siehe beispielsweise 420-426 von 5)
verwendet werden. Das Verfahren 1000 kann durch einen Mappingmanager 1020 entsprechend
den Grundzügen des
Mappingmanagers 502, der in 5 gezeigt
ist, ausgeführt
werden. Bei wenigstens einem Ausführungsbeispiel kann das Verfahren 1000 durch
die Übersetzungslogik
eines Mappingmanagers (siehe beispielsweise 485 des Mappingmanagers 502 in 5)
ausgeführt
werden. Bei wenigstens einem Ausführungsbeispiel kann der Mappingmanager 1020 ein
Programm eines Betriebssystems sein, so dass das Verfahren 1000 von
dem Betriebssystem ausgeführt
wird. Bei wenigstens einem weiteren Ausführungsbeispiel kann das Verfahren 1000 durch
einen Mappingmanager 1020 ausgeführt werden, der eine Routine
auf der Verwenderebene ist, das geschrieben worden ist von, beispielsweise,
einem Anwendungsprogrammierer. Bei wenigstens einem weiteren Ausführungsbeispiel
kann das Verfahren 1000 durch einen Mappingmanager 1020 ausgeführt werden,
der ein Monitor einer virtuellen Maschine ist oder einem Hypervisor.
Bei wenigstens einem Ausführungsbeispiel
kann das von dem Mappingmanager 1020 ausgeführte Verfahren 1000 durch
die Verwendung einer Übersetzungsbeschleunigungsstruktur beschleunigt
werden (siehe beispielsweise 518, dargesetllt in 5).
-
Es
sollte beachtet werden, dass die gegenständlichen Sequenzer 420-426,
auf die oben in Verbindung mit 5 bezug
genommen worden ist, nicht symmetrisch sein müssen, ihre Anzahl sollte nicht
als einschränkend
verstanden werden. Bezüglich
der Symmetrie können
einer oder mehrere der physikalischen Sequenzer von einem oder mehreren der
anderen physikalischen Sequenzer im Hinblick auf jede Eigenschaft
oder Rangordnung unterschiedlich sein. Bei wenigstens einigen Ausführungsbeispielen
können
die Eigenschaft des gegenständlichen
Sequenzer oder die Rangordnung Dimensionen, Wort und/oder Datenweggröße, Topologie, Speicherart
und/oder -größe, Leistungsverbrauch, Anzahl
der funktionellen Einheiten, Kommunikationsarchitekturen (muliti-drop
gegenüber Punkt-zu-Punkt-Verbindung)
Operationsfrequenz, Größe, Befehle
pro Zyklus, Energieverbrauch pro Befehl, thermische Eigenschaft,
Fähigkeit
bezüglich des Setzens
von Befehlssatzunterstützung, OS-Sichtbarkeit),
oder jedes andere Maß in
Bezug auf Funktionalität,
Eigenschaft, Grundfläche,
Leistung, thermische Maße
oder dgl. einschließen.
Diese Eigenschaften sind lediglich illustrativ und sollten nicht
als einschränkend
verstanden werden. Sie sind als Beispiele aufgelistet um zu illustrieren,
dass zwei physikalische Sequenzer in einem asymmetrischen Multi-Sequenzer-System
sich unterscheiden können gegenüber einem
oder einer Kombination der obigen Eigenschaften oder Maße. Bei
wenigstens einigen Ausführungsbeispielen
können
einige dieser Eigenschaften ausgedrückt werden als Teil des Fähigkeitsdeskriptors
für die
logischen Sequenzer und geprüft werden
bei dem Mappen vom logischen Sequenzer zum gegenständlichen
Sequenzer.
-
Bezüglich der
Anzahl von Sequenzern kann das Übersetzungsverfahren 1000 für jede Anzahl
von Sequenzern verwendet werden. Beispielsweise kann das Übersetzungsverfahren 1000 für ein Multi-Sequenzer-System
implementiert sein, das vier, acht, sechzehn, zweiunddreißig, vierundsechzig,
einhundertachtundzwanzig und mehr Sequenzer aufweist.
-
10 zeigt,
dass der Mappierungsmanager 1020 über eine logische Sequenzadresse 1030, die
eine logische Seitenzahl 1032 und einen Versatz 1034 aufweist,
zum Aufführen
der Übersetzung 1050 aufnehmen
kann,. Die logische Sequenzeradresse 1030 kann so effektiv
die Verwendung einer logischen Sequenzadresse durch einen Faden
zu einer logischen Seitenanzahl und einem Versatz innerhalb der
Seite mappen. 10 zeigt, dass die logische Sequenzadresse 1030,
in einem sequenzerbewussten Befehl in einem Faden, etwa dem Faden
N, angegeben sein kann.
-
10 zeigt
allgemein, dass der Mappingmanager 1020 die geeignete Fadensequenzerseitentabelle 1010 verwenden
kann, die dem Faden N zugehörig
ist, um die logische Sequenzadresse 1030 in einen physikalischen
Sequenzidentifizierer 1040 zu übersetzen. Insbesondere zeigt 10,
dass bei 1052 der Mappingmanager 1020 die Seitenzahl 1032 („001") der logischen Sequenzadresse 1030 als
ein Index in die Seitentabelle 1010 verwendet. Der Wert („111") an dem indizierten
Eintrag der Seitentabelle 110 ist bei 1054 angeordnet
in einem bestimmten Seitenframeabschnitt 1042 des übersetzten
gegenständlichen
Sequenzeridenifizierers 1040.
-
10 zeigt
weiter, dass der Mappingmanager 1020 bei 1056 den
Versatz 1034 („101") der logischen Sequenzadresse 1030 direkt
in einen bestimmten Versatzabschnitt 1044 des übersetzten
gegenständlichen
Sequenzidentifizierers 1040 kopieren kann.
-
Insgesamt
zeigt 10 so ein Verfahren 1000 zum Übersetzen
einer logischen Sequenzadresse in einen gegenständlichen Sequenzidentifizierer,
das das Folgende aufweisen kann: Empfang bei 1050 einer
logischen Sequenzadresse 1030; Verwenden bei 1052 einen
Abschnitt 1032, der logischen Sequenzadresse 1030 als
einen Index in eine Seitentabelle 1010 zum Bestimmen einer
Seitenzahl („111"); Platzieren bei 1054 der
Seitenzahl in einen bestimmten Abschnitt 1043 eines übersetzten
Sequenzeridentifizierers 1040 und Kopieren bei 1056 eines
weiteren Abschnitts 1034 der logischen Sequenzadresse 1030 in
einer Versatzabschnitt 1044 des übersetzten Sequenzeridentifizierers 1040.
-
Die
in den 6 und 10 gezeigten Beispiele sollten
nicht dahingehend verstanden werden, dass das Übersetzungsverfahren für die virtuelle
Sequenzadresse 1000 auf einen Ansatz beschränkt ist, der
auf eine einzige Ebene der Seitentabellen beschränkt ist. Beispielsweise zeigt 6,
dass der Seitentabelleneintrag 630 zusätzliche Bits 640 aufweisen
kann. Bei wenigstens einem Ausführungsbeispiel
können
ein oder mehrere zusätzliche
Bits 640 verwendet warden, um bei wenigstens einem alternativen
Ausführungsbeispiel
zusätzliche
Seitentabellenebenen anzugeben. Entsprechend kann der Mappingmanager 1020 einen
Ansatz erzwingen, der mehrere Ebenen der Seitentabellen einschließt.
-
Optionale Hardwarebeschleunigung für die Übersetzung
-
Es
wird jetzt zu 5 zurückgekehrt. Es ist erkennbar,
dass wenigstens ein Ausführungsbeispiel des
Multi-Sequenzer-Multithreadingsystems 500 das die Übersetzung
der dynamisch mappierten logischen Sequenzadressen unterstützt, eine
optionale Übersetzungsbeschleunigungsstruktur 518 aufweisen
kann.
-
Bei
wenigstens einem Ausführungsbeispiel kann
die Struktur 518 ein Lookaside-Puffer zur Sequenzadressübersetzung
(„STLB") der Cacheeinträge der Seitentabellen
oder andere Arten der Mappingstruktur 580 sein. Ein Aufnehmen
der Einträge
in den Cachespeicher in eine Hardwarestuktur 518 der Ausführungsressourcen 490 kann
die Geschwindigkeit der Übersetzung
vergrößern. Ein
Grund für
die Beschleunigung besteht darin, dass die Sequenzer 420-426 auf
die Struktur 518 zugreifen, ohne die Zeit zu benötigen, auf
die Mappingstruktur 580 zurückzugreifen, die auf dem Speichermedium 460 angeordnet
ist. Beispielsweise wird für
das Übersetzungsbeispiel
von 10 angenommen, dass die STLB 518 von 5 die
Inhalte des Eintrags 001 der Seitentabelle 1010 aufweist.
In einem solchen Fall kann das Nachschlagen und die Übersetzung
von der STLB-Logik im Inneren der Ausführungsressourcen 490 (5)
durchgeführt
werden, ohne Zugriff zu der Seitentabelle 1010 des Fadens
N, die in dem Speichermedium 460 angeordnet sein kann.
-
11 ist
ein Blockdiagramm, das wenigstens ein Ausführungsbeispiel eines Formats
für eine Übersetzungsbeschleunigungsstruktur 1100 zeigt. Die
Einträge
einer Beschleunigungsstruktur, etwa 518 von 5,
kann dem Format der Beschleunigungsstruktur 1100 folgen,
die in 11 gezeigt ist. Die Felder 1102-1110,
die für
Einträge
des Ausführungsbeispiels
der STLB, die in 11 gezeigt ist, dargestellt
sind, sind lediglich für
illustrative Zwecke wiedergegeben. Zusätzliche oder unterschiedliche Information
kann bei anderen Ausführungsbeispielen in
der Hardwarebeschleunigungsstruktur 1100 gespeichert sein.
-
Bei
dem in 11 gezeigten Ausführungsbeispiel
weisen die Einträge
für die
Struktur 1100 die folgenden Felder auf: ein Gültigkeitsfeld 1102,
einen logischen Seitenidentifizierer (siehe beispielsweise 1032 von 10) 1104 und
ein gegenständliches Seitenframefeld 1110 (siehe
beispielsweise 1042 von 10).
-
Bei
wenigstens einem Ausführungsbeispiel kann
die Basisadresse der fadenspezifischen Sequenzerseitentabelle (siehe
beispielsweise 1010 von 10) in
ein Register 1120 geladen sein, wenn eine Kontextänderung
zu einem neuen Faden auftritt. Das Register 1120 kann ein
Steuerregister sein. Zu jedem Zeitpunkt, zu dem eine Änderung
des Fadenkontextes auftritt (wie angegeben durch die Modifikation
des Steuerregisters 1120), können die Inhalte der Hardwarebeschleunigungsstruktur 1100 gelöscht werden.
-
Es
wird kurz auf die beiden 5 und 11 Bezug
genommen. Es versteht sich, dass bei wenigstens einem Ausführungsbeispiel
jeder Sequenzer 420-426 gleichzeitig einen unterschiedlichen
Faden ausführen
kann. Entsprechend können wenigstens
bei einem Ausführungsbeispiel
ein STLB 1100 und ein Steuerregister 1120 für jeden
Sequenzer 420-426 bestimmt sein. Entsprechend
kann die Hardwarebeschleunigungsstruktur, die in 5 dargestellt
ist, eine Mehrzahl von STLBs 1110 und Steuerregister 1120 aufweisen,
und zwar einer für
jeden der Sequenzer 420-426.
-
Es
wird weiterhin auf 5 gemeinsam mit 9 Bezug
genommen. Es wird dargestellt, dass zum Verwalten der Verteilung
und des Mappens von gegenständlichen
Sequenzern zu aktiven Fäden
der Mappingmanager 520 einer Rationierungslogik 485 ausweisen
kann. (Entsprechende Elemente in den 5 und 9 tragen
entsprechende Bezugszeichen). Die Rationierungslogik 485 kann
eine Logik zum Verteilen der gegenständlichen Sequenzer 420-426 und
den aktiven Fäden
aufweisen.
-
Zusätzlich zu
der Logik, die die Anfangszuordnung einer logischen Sequenzadresse
zu einem gegenständlichen
Sequenzer ausführt,
zeigt 9 dass die Rationierungslogik 485 weiter
eine Logik beinhalten zum Ausführen
der folgenden Sequenzermanagement funktionen kann: Relokation, Protektion und
Teilen. Jede dieser Aufgaben wird in ihren Einzelheiten in den nachfolgenden
Absätzen
erläutert.
-
Bezüglich der
Relokationslogik 910 kann es der Fall sein, dass ein Mappen
zwischen einer logischen Sequenzadresse und einem gegenständlichen Sequenzer
nicht geändert
werden muss, bevor der Faden, der ursprünglich auf die logische Sequenzadresse
bezogen ist, die Ausführung
abgeschlossen hat. Wenn der Mappingmanager 502 bestimmt,
dass ein zweiter virtueller Sequenzerkontext in einen gegenständlichen
Sequenzer gewechselt werden sollte, wird der Status des gegenwärtig mappierten
logischen Sequenzers aus in einen Sicherungsspeicher 575 gewechselt.
Ein solches Auswechseln kann durch die Relokationslogik 910 ausgeführt werden. Es
kann, beispielsweise, während
der Verdichtung ausgeführt
werden.
-
Bei
solchen Situationen führt
die Relokationslogik 910 eine Logik zum Verwalten des Kontextes
und der Mappinginformation aus, so dass der dem logischen Sequenzer
zugehörige
Status zurück in
den gegenwärtigen
gegenständlichen
Sequenzer oder zu einem späteren
Zeitpunkt in einen anderen gegenständlichen Sequenzer ausgewechselt
werden kann. Die Relokationslogik 910 weist so eine Logik zum
Verwalten der Kontextinformation, die jedem Sequenzermappen von
logisch zu physikalisch zugehörig
ist, wie in der Mappingstruktur (siehe 580, 5) berücksichtigt,
auf. Zusätzlich
weist die Rationierungslogik 485 eine Logik zum Modifizieren
des Mappens auf. Bei wenigstens einem Ausführungsbeispiel kann eine solche
Funktionalität
auch durch die Relokationslogik 910 vorgesehen sein. Bei
wenigstens einem Ausführungsbeispiel,
bei dem der Mappingmanager 502 einen gegenständlichen
Sequenzerallokationsalgorithmus ausführt, der eine externe Fragmentation
einschließt
(etwa den die obigen Best-fit Algorithmus), kann die Relokationslogik 910 eine
Logik einschließen
zum 1) Neuanordnen der gegenständlichen
Sequenzer, die zu demselben Faden gehören als ein zusammenhängender
Block und 2) entsprechendes Modifizieren der Mappinginformation.
-
9 zeigt,
dass die Rationierungslogik 485 eine Schutzlogik 915 aufweisen
kann. Bei einem Ausführungsbeispiel
verhindert die Schutzlogik 912 einen unerwünschten
Zugriff auf einen gegenständlichen
Sequenzer. Bei wenigstens einem Ausführungsbeispiel wird dies erreicht
durch Schützen
eines Applikationsfäden
vor einem Verweisen einer logischen Sequenzadresse, die gegenwärtig einem
anderen Faden zugehörig
ist. Die Schutzlogik 912 kann eine Kontextinformation für die logische
Sequenzadresse verwenden, die einem gegenständlichen Sequenzer zugehörig ist,
um festzustellen, wenn von einem Befehl, der demselben Threadkontext
zugehörig ist
ein Zugriffsversuch erfolgt. Wenn nicht, verhindert die Schutzlogik 912 den
Zugang. Die Schutzlogik 912 prüft so und erzwingt während der
Ausführung
einen Schutz gegen einen unerwünschten
Zugriff von einem Sequenzer oder einem Sequenzerframe durch einen
anderen Sequenzer oder einen anderen Sequenzerframe.
-
Schließlich zeigt 9,
dass die Rationierungslogik 485 eine Beteiligungslogik 914 aufweisen kann.
Eine solche Beteiligungslogik 914 ist optional, wie durch
die gebrochenen Linien in 5 angegeben.
Die Beteiligungslogik 914 kann es zwei oder mehreren Fäden erlauben,
denselben gegenständlichen
Sequenzer zu teilen. Bei Ausführungsbeispielen,
die es den Fäden
erlauben, auf einen gemeinsamen Satz von einen oder mehreren tatsächlichen
Sequenzern zuzugreifen, erzwingt die Beteiligungslogik 912 spezifische
Parameter und beschränkt
die Steuerung auf die Art des Teilens, die erlaubt ist.
-
Entsprechend
kann, wenn ein anderer Faden versucht auf die logische Sequenzadresse
zuzugreifen, während
ein erster Faden aktiv ist, die Schutzlogik 912, einen
solchen Zugriff verhindern. Alternativ kann, wenn das Teilen derart
erlaubt ist, dass mehrere aktive Fäden gleichzeitig auf den gegenständlichen
Sequenzer zugreifen können,
die optionale Beteiligungslogik 914 Teilparameter und Beschränkungen
erzwingen.
-
Es
wird jetzt für
die weitere Diskussion auf 12 bezug
genommen, in der wenigstens ein Ausführungsbeispiel der Sequenzerzuweisung,
die von der Rationierungslogik 485 durchgeführt wird,
gezeigt ist. Eine solche Zuweisung kann das Folgende aufweisen:
Anfängliche
Zuweisung von gegenständlichen
Sequenzen, Neumappen der gegenständlichen
Sequenzer und Erhalten/Auffrischen von Mappiningformation.
-
12 ist
ein Flussdiagramm, das die Steuerung und den Datenfluss bei wenigstens
einem Ausführungsbeispiel
des Verfahrens 1200 zur Sequenzerrationierung zeigt. Bei
wenigstens einem Ausführungsbeispiel
kann das Verfahren 1200, das durch einen Mappingmanager
durchgeführt
wird (siehe, beispielsweise, 580 von 5).
Insbesondere kann bei wenigstens einem Ausführungsbeispiel das Verfahren 1200 durch
eine Rationierungslogik (siehe beispielsweise 485 von 5)
ausgeführt
werden.
-
12 zeigt,
dass das Verfahren bei dem Block 1202 beginnt und zu dem
Block 1204 fortschreitet. Bei dem Block 1204 empfängt das
Verfahren die logische Adresse des Destinationssequenzers, die als
ein Parameter in einem sequenzerbewussten Befehl, das an dem Quellensequenzer 104a ausführt, vorgesehen
ist.
-
Die
Verarbeitung schreitet sodann zu dem Block 12106 vor, wo
ein Nachschlagen in einer Mappingstruktur 1250 ausgeführt wird.
Die Mappingstruktur 1250 kann eine Mappinstruktur sein,
etwa eine Struktur 580, wie sie in 5 gezeigt
ist, die in einem Speichermedium gespeichert ist (wie, beispielsweise, 460 von 5).
Die Mappingstruktur 1250 weist einen gültigen Eintrag für die logische
Sequenzadresse auf, derart, dass ein schon zugewiesener gegenständlicher
Sequnenzidentifizierer gewonnen werden kann, es wird dann gesagt,
dass das Nachschlagen 1206 einen Treffer aufweist. Ansonsten
hat dies zu einem „Fehlversuch" geführt.
-
Bei
wenigstens einem anderen Ausführungsbeispiel
kann das Nachschlagen, das in dem Block 1206 ausgeführt worden
ist, anfänglich
in einer Beschleunigungsstruktur ausgeführt werden, etwa der Struktur 518,
die in 5 gezeigt ist. Wenn ein Treffer vorliegt, schreitet
die Verarbeitung unmittelbar zu dem Block 1212 fort. Wenn
ein Treffer nicht vorliegt, kann das Verfahren sodann in dem Block 1206 ein Nachschlagen
in einer Mappingstruktur ausführen, die
in dem Speichermedium gespeichert ist, wie oben beschrieben.
-
In
dem Block 1208 wird bestimmt, ob ein Fehlversuch vorliegt.
Zuzüglich
zu der Bestimmung eines Fehlens in der Mappingstruktur (und/oder
einer Beschleunigungsstruktur) wie dies oben ist in bezug auf Block 1206 beschrieben
worden, kann die Verarbeitung in dem Block 1208 bestimmen,
dass ein „Fehlen" sich ergeben hat,
auch wenn ein Seitentabelleneintrag oder ein Beschleunigungsstruktureintrag
für die
angegebene logische Sequenzadresse vorliegt. Das heißt, wenn
die Inhalte des Vorhanden/Fehlen-Feldes 634 des Seitentabelleneintrags angibt,
dass die Kontextinformation für
die bestimmte logische Sequenzadresse an den Sicherungsspeicher
(siehe Block 512 und Sicherungsspeicher 550 von 13) übergeben
worden ist, wird ein „Fehlen" in dem Block 1208 bestimmt.
-
12 zeigt,
dass infolge der Entscheidungsbox 1208 die Verarbeitung
fortschreitet zu dem Block 1210 bei einem Fehlen und zu
Block 1209 für einen
Treffer. Bei einem Treffer wird eine Unterstützung des sequenzerbewussten
Befehls in dem Block 1212 ausgeführt. Bei wenigstens einem Ausführungsbeispiel
weist die Unterstützung,
die in dem Block 1212 ausgeführt wird, das Senden eines
Signals für
einen arithmetischen Befehl des Sequenzers an den Destinationssequenzer 104n auf, der von dem gegenständlichen
Sequenzeridentifizierer identifiziert worden ist, der während des
Nachschlagens in dem Block 1206 gewonnen worden ist. Infolge
eines derartigen Signals kann die gewünschte Signalisierung zu dem
Destinationssequenzer 104n erreicht werden,
wie in dem arthmetischen Befehl des Sequenzer angegeben. Von dem
Block 1212 endet die Verarbeitung in dem Block 1214.
-
12 zeigt,
dass die Verarbeitung zu dem Block 1210 fortschreitet,
wenn ein Fehlen in dem Block 1208 bestimmt ist. In dem
Block 1212 kann ein Fehldefektbehandler aufgerufen werden.
Die Verarbeitung endet sodann in Block 1214.
-
13 ist
ein Flussdiagramm, das den Steuerfluss und den Datenfluss bei wenigstens
einem Ausführungsbeispiel
des Verfahrens zur Fehlerbehandlung zeigt, die in Folge der Verarbeitung
des Blocks 1210 (siehe 12) aufgerufen
werden kann. Der Fachmann versteht, dass anders als ein direktes Aufrufen
eines Fehlerbehandlers in dem Block 1210 ein Sequenzseitenfehler
in dem Block 1210 ausgelöst werden kann. Bei einem solchen
Ausführungsbeispiel
kann ein Fehlerbehandler in Folge des Fehlers, der in dem Block 1210 ausgelöst worden
ist aufgerufen werden; der Fehlerbehandler kann wiederum das Verfahren 1300,
das in 13 gezeigt ist, auslösen.
-
13 zeigt,
dass das Verfahren 1300, das von der Rationierungslogik 485 ausgeführt werden kann,
allgemein zum Zuordnen eines gegenständlichen Sequenzers zu einer
logischen Sequenzadresse, die in dem Block 1204 von 12 empfangen worden
ist, dient. Vor dem weiteren Diskutieren der 13 sollte
beachtet werden, dass bei wenigstens einem alternativen Ausführungsbeispiel
das Verfahren 1300 von 13 auch
für andere
Situationen als ein „Fehlen" aufgerufen werden
kann, wie es in dem Block 1208 von 12 erkannt
worden ist. Bei wenigstens einem Ausführungsbeispiel kann das Verfahren 1300 aufgerufen
werden, so dass die Rationierungslogik 485 fähigkeitsattributbasiertes
Monitoring, eine Erzwingung und eine Optimierung für die physikalische
Sequenzerallokation ausführen
kann. Ein solches Monitoring basierend auf Fähigkeiten, kann eine Verletzungsbedingung
erkennen und infolgedessen zu einem „Fehlen"-Zustand führen.
-
Als
eine gesonderte architekturale Ressource unterscheidet sich ein
adressierbarer logischer Sequenzer 420-426 von
einem adressierbaren logischen Speicherort sowohl in den räumlichen
als auch in den zeitlichen Eigenschaften. Räumlich weist eine logische
Sequenzadresse, wie sie durch ein Applikationsprogramm verwendet
wird, eine Kontextzustandsinformation für die Registerzustände für eine gegebene
Befehlssatzarchitektur für
einen Einzelsequenzer auf. (Siehe, beispielsweise, die architekturalen
Zustände
AS, die in 1 gezeigt sind). Temporal entspricht
eine logische Sequenzadresse einem bestimmten Rechenstrom des Steuerstroms,
der unterschiedliche Ausmaße
der Pünktlichkeitsanforderungen
(beispielsweise scheduling) hat.
-
Entsprechend
betrifft das Mappen von logischen Sequenzadressen in gegenständliche
Sequenzadressen nicht nur die Allokation eines gegenständlichen
Sequenzers, auf dem ein logischer Sequenzerkontext mappiert werden
kann, sondern betrifft auch die Allokation von Zeitmengen zum Laufen des
logischen Sequenzers auf einer Weise zum Sicherstellen weiteren
Fortschritts des Programms unter Verwendung des logischen Sequenzers
zum Ablaufen von shreds. Beispielsweise kann bei einem Ausführungsbeispiel
die temporale Anforderung, wie einem Planungshinweis in Feld 638,
in einem logischen Sequenzerdiskriptor 630 repräsentiert
sein und kann eine zeitbasierende periodische Aktivierung des Verfahrens 1300 zum
Neumappen der entsprechenden logischen Sequenzadressen von einem Satz
von physikalischen Sequenzen zu einem anderen Satz verursachen.
Bei wenigstens einem Ausführungsbeispiel
kann das Neumappen M logischer Sequenzerkontexten auf N gegenständlichen
Sequenzern eine Rundlaufplanungsstrategie implementieren, die periodisch
und seriell M logische Sequenzadressenkontexte durch N gegenständliche
Sequenzer rotieren kann. Bei einem Ausführungsbeispiel ist eine Planungsmenge,
während
der ein logischer Sequenzer auf einem gegenständlichen Sequenzer läuft, bevor
er ausgetauscht wird, eine Untermenge der OS Menge, der ein Faden
durch ein OS zugewiesen ist. Die Strategie kann einen gesamten Fortschritt
aller logischer Sequenzer in einem Faden sicherstellen.
-
13 zeigt,
dass Statusinformation für
logische Sequenzer einem Übergeben 1308 (sichern)
in und Füllen 1310 (wiedergewinnen)
in bzw. aus einem Sicherungsspeicher 1275. ist. Der Sicherungsspeicher 1275 kann
jede Speicherstruktur haben, einschließlich einem Memory.
-
Bei
wenigstens einem Ausführungsbeispiel kann
die logische Sequenz die Statusinformation, die Gegenstand des Übergebens 1308 und
des Füllens 1310 ist,
Kontextinformation beinhalten. Solche Kontextinformation kann, beispielsweise,
alle Registerzustände
für architekturaldefinierte
Register auf dem Sequenzer beinhalten. Bei wenigstens einem Ausführungsbeispiel
kann die Zustandssequenzinformation weiter optional temporale Information
aufweisen, die sich auf das Scheduling beziehen, wie einer minimal
erforderlichen Menge und/oder der gewünschten Sequenz zum Rescheduling.
-
Zusätzlich zu
dieser Information kann eine Rationierungslogik (siehe beispielsweise
485 von 5) des Mappingmanagers (siehe
beispielsweise 502 von 5) weiter
einen Zugriff haben auf bestimmte gegenständliche Sequenzinformation
bezogen auf solche Sequenzerfähigkeitsattribute
und Eigenschaften wie Temperatur, Funktionalität, Leistungsfähigkeit,
Leistungsaufnahme, Zusammensetzung der funktionalen Einheiten und
Sequenzerausführungszustand,
um einige wenige zu nennen.
-
Das
Verfahren 1300 von 13 kann
daher aufgerufen warden, um es dem Mappingmanager zu erlauben, solche
auf Fähigkeitsattributen
basierende logische und/oder gegenständliche Sequenzzustandsinformation
bei dem Zuordnen oder Remappen gegenständlicher Sequenzer zu berücksichtigen. Beispielsweise
kann das Verfahren 1300 ausgelöst werden, wenn eine Ausführung des
gegenständlichen
Sequenzerzustands angibt, dass es abgewürgt ist und keinen weiteren
Fortschritt macht. Ein derartiger Ausführungszustand kann beispielsweise
auftreten, wenn der Sequenzer ein Ereignis mit langer Latenz festgestellt
hat, etwa das Fehlen eines Cache oder auf eine Verriegelung an einem
Synchronisationsobjekt wartet.
-
Durch
dasselbe Merkmal können
die Attribute des gegenständlichen
Sequenzers dann, wenn das Verfahren 1300 aufgrund eines
Fehlens in der Seitentabelle 1250 aufgerufen wird, berücksichtigt werden,
um die Auswahl des physikalischen Sequenzers für die Zuordnung oder Neuzuordnung
zu informieren, zu vergrößern oder
zu optimieren. Bei einem Beispiel für verschiede Typen von physikalischen
Sequenzerattributen, die durch die Rationierungslogik 485 während der
Ausführung
des Verfahrens 1300, das in 13 gezeigt
ist, berücksichtigt
werden können,
wenden wir uns kurz 14 zu.
-
14 zeigt,
dass ein Multi-Sequenzer-Multithreadingsystem 1400 allgemein
einen Mappingmanager 1420 und wenigstens zwei gesonderte
Typen von gegenständlichen
Sequenzern 1410, 1412 aufweisen kann (bei wenigstens
einem Ausführungsbeispiel
weist ein Multisequenzer-Multithreadingsystem natürlich nur
einen einzigen Typ eines Sequenzers auf). Gepunkte Linien und Ellipsen
werden in 3 verwendet, um anzugeben, dass
die zusätzlichen Sequenzer
jedes Typs 1410, 1412 optional sind.
-
Das
System 1400 kann einen oder mehrere jeden Typs von Sequenzern
aufweisen. Entsprechend kann jeder Sequenzertyp 1410, 1412 mit
einem bestimmten Satz von Fähigkeitsattributen
versehen sein. Da die Sequenzertypen gesondert sind, sagen wir,
dass sie „asymmetrisch" sind – die Attribute
können
sich unter den Sequenzertypen unterscheiden. Bei wenigstens einem
Ausführungsbeispiel
können
die Sequenzer 1410, 1412 sich bezüglich des
Leistungsverbrauchs unterscheiden. Bei wenigstens einem weiteren
Ausführungsbeispiel
können
die Sequenzer 1410, 1412 sich bezüglich einer Funktionalität unterscheiden.
Beispielsweise kann ein erster Sequenzer 1410 alle Funktionalitäten implementieren,
die für
einen T-Sequenzer erforderlich sind, dessen OS beide Systeme des
Ebenenvorrangcodes und des Verwenderebenenvorrangcodes ablaufen
kann, während
ein zweiter Sequenzer 1412 nur Funktionalitäten implementieren
kann, die von einem OS-Sequenzer angefordert werden, der nur auf einem
Verwenderebenen-Vorrangcode läuft
und nicht auf einem Systemeben-Vorrangcode
laufen muss. Bei einem weiteren Beispiel kann ein erster Sequenzertyp 1410 einen
vollständigen
Satz von Funktionsfähigkeiten
für einen
gegebenen Befehlssatz implementieren. Der zweite Sequenzertyp 1412 kann
missbilligte Funktionalitäten
aufweisen, etwa nur einen Untersatz von Fähigkeiten für den Befehlssatz implementieren.
Beispielsweise kann ein [abgelehnter] Sequenzer dazu in der Lage
sein, ganzzahlige und Gleitkommabefehle auszuführen, kann aber nicht einen
einzigen Befehl mit mehrfachen Daten („SIMD") von Befehlsinstruktionen ausführen, etwa Streaming
SIMD Extensions 3 („SSE3"). Andererseits kann
ein anderer Sequenzer dazu in der Lage sein, alle die Befehle auszuführen, die
der erste Sequenzer ausführen
kann, und kann weiter SSE3-Befehle ausführen.
-
Anders
als oder zusätzlich
zu funktionellen Kriterien können
sich asymmetrische Sequenzertypen 1410, 1412 bezüglich des
Leistungsverbrauchs und/oder den Temperaturattributen unterscheiden. Beispielsweise
kann der zweite Sequenzertyp 1412 weniger Leistung benötigen oder
kann Berechnungen langsamer als der erste Sequenzertyp 1410 ausführen. Auch
kann der Mappingmanager 1420 die Temperatur bei dem Ausführen der
Sequenzerrationierung berücksichtigen.
Beispielsweise kann, wenn ein bestimmter Sequenzer eine Hochtemperaturschwelle
annimmt, das Verfahren 1300 von 13 aufgerufen
werden um, die virtuelle Sequenzadresse auf einen unterschiedlichen
tatsächlichen
Sequenzer zu mappen, der kühler
ist. Diese Fähigkeitsattribute (Leistungsanforderung,
Geschwindigkeit, Funktionalitätsfähigkeit,
Temperatur, Ausführungszustand, usw.)
kann auf dem Softwaremappingmanager 502 verfügbar sein
und kann zum Informieren des Mappingvorgangs (manchmal bezeichnet
als „Sequenzerrationierung") verwendet werden,
wie dies weiter unten in weiteren Einzelheiten beschrieben werden wird.
-
Es
wird jetzt zu 13 zurückgekehrt und das Verfahren 1300 diskutiert. 13 zeigt,
dass das Verfahren bei dem Block 1302 beginnt und zu dem Block 1304 fortschreitet.
In dem Block 1304 wird ein Sequenzer oder ein Sequenzerframe,
der der logischen Sequenzadresse zugeordnet ist, die in dem Block 1204 von 12 gewonnen
worden ist, identifiziert. Wiederum wird der Begriff „Sequenzer" in der Bedeutung
verstanden, dass entweder ein individueller Sequenzer oder eine
Mehrzahl von Sequenzern in einem frame bedeutet. Die Begriffe „Sequenzer" und „Sequenzerrahmen" können so
austauschbar in der nachfolgenden Diskussion verwendet werden.
-
Bei
verschiedenen Ausführungsbeispielen können verschiedene
Ansätze
zum Bestimmen eines potentiellen Sequenzers in dem Block 1304 verwendet
werden. Im Allgemeinen kann die Bestimmung 1304 einen traditionellen
Selektionsansatz verwenden, der sodann über die Sequenzerattributinformation
informiert wird.
-
Bei
wenigsten einem Ausführungsbeispiel wird
der freie Sequenzer in dem Block 1304 ausgewählt, wenn
gegenwärtig
ein oder mehrere freie Sequenzer vorhanden sind (siehe beispielsweise
die freie Liste 620, die in 6 und 8 angegeben ist).
Wenn ein Sequenzer frei ist, wird er ausgewählt. Bei wenigstens einem Ausführungsbeispiel
wird die Attributanalyse, die unten beschrieben wird, verwendet,
um zu bestimmen, welcher der freien Sequenzer in dem Block 1304 ausgewählt werden
sollte.
-
Wenn
keine Sequenzer frei sind, wird ein gegenwärtig aktiver (manchmal als „Opfer" bezeichneter) Sequenzer
in dem Block 1304 ausgewählt. Jeder bekannter Ersetzungsalgorithmus,
aka victim selection algorithm, kann in dem Block 1304 verwendet werden,
um eine aktiven (oder „schmutzigen") Sequenzer als ein „Opfer" auszuwählen. Ein
solcher Algorithmus kann, ohne darauf beschränkt zu sein, ein Not-Recently-Used, First-in-First-Out,
Least-Recently-Used, Not-Frequently-Used, Aging, Working Set, Clock,
and Working Set Clock („WSClock") einschließen. Jeder
solcher Ansatz kann verwendet werden, um in dem Block 1304 den
Sequenzer, der in den Sicherungsspeicher 1275 auszuräumen ist, um
Raum für
einen eingehenden Sequenzer zu schaffen (der eingehende Sequenzer
ist der logische Sequenzer, der in dem Block 1210 des Verfahrens 1300 den
Aufruf verursacht hat).
-
Unabhängig davon,
ob der Sequenzer aus der freien Liste gewählt ist oder ein Opfersequenzer entsprechend
ein Ersetzungsalgorithmus ausgewählt worden
ist, wird die Opferauswahl optional in dem Block 1304 von
einer Fähigkeitsattributanalyse
informiert.
-
Die
Fähigkeitsattributanalyse
kann in dem Block 1304 ausgeführt werden, um zu bestimmen,
ob die gegenwärtigen
Attribute eines gegenständlichen Sequenzers
sich als mehr oder weniger wahrscheinlicher Kandidat zur Zuordnung
oder Neuzuordnung erweist. Beispielsweise kann die Fähigkeitsattributanalyse
verwendet werden zum Auswählen
von Einträgen
in die freie Liste, um einen auszuwählen, der dazu in der Lage
ist, einen spezifischen Satz von Funktionen auszuführen oder
aber eine geringere Leistungsaufnahme oder Temperatur als andere
hat, usw. Alternativ kann die Fähigkeitsattributanalyse zum
Auswählen
aus den gegenständlichen
Sequenzern, die durch einen Ersetzungsalgorithmus berücksichtigt
worden sind, verwendet werden, um einen gegenständlichen Sequenzer auszuwählen, der
ein wahrscheinlicher Kandidat zum Auswechseln ist. Beispielsweise
kann die Fähigkeitsattributanalyse angeben,
dass ein gegenständlicher
Sequenzer ein guter Kandidat ist, wenn er gegenwärtig keinen Fortschritt macht
(d. h. aufgrund eines lang andauernden Cachefehlers steht oder aber
wartet im Hinblick auf ein Ringen um eine Verriegelung eines Synchronisationsobjekts).
-
Von
dem Block 1304 schreitet die Verarbeitung zu dem Block 1306 fort.
In dem Block 1306 wird bestimmt, ob der Zustand des ausgewählten Opfers in
den Sicherungsspeicher 1275 übergeben werden sollte. Die
Bestimmung in dem Block 1306 bewertet als „falsch", wenn das Opfer
aus der freien Liste ausgewählt
worden ist. In einem solchen Fall schreitet die Verarbeitung zu
dem Block 1312 fort.
-
Wenn
jedoch der Opfersequenzer gegenwärtig
aktiv ist, schreitet die Verarbeitung von dem Block 1306 zu
dem Block 1308 fort. In dem Block 1308 werden
die Kontextzustände
für den
Sequenzer in den Sicherungsspeicher 1275 übergeben.
Bei einem Ausführungsbeispiel,
das Sequenzerframes benutzt, werden die Kontextzustände für alle Sequenzer
in dem Opfersequenzerframe in den Sicherungsspeicher 1275 übergeben.
Die Verarbeitung schreitet sodann in Block 1310 fort.
-
In
dem Block 1310 wird der Kontextzustand für die Sequenzer
(oder, alternativ, für
alle Sequenzer in den fehlerhaften Sequenzerrahmen) aus dem Sicherungsspeicher 1275 zurückgewonnen.
Die Kontextinformation wird in dem gegenwärtigen Sequenzer vorgesehen,
der in dem Block 1304 ausgewählt worden ist. Auf diese Weise
wird der Kontextzustand für
den Opfersequenzer bei 1310 in den Sicherungsspeicher 1275 übergeben
und der Kontextzustand für die
neue logische Sequenzadresse wird von dem Sicherungsspeicher 1275 in
den gegenständlichen
Opfersequenzer eingegeben.
-
Von
dem Block 1310 schreitet die Verarbeitung zu dem Block 1312.
Der Block 1312 kann auch direkt von dem Block 1304 erreicht
werden, wenn der ausgewählte
gegenständliche
Sequenzer gegenwärtig
nicht aktiv ist. In dem Block 1312 werden eine oder mehrere Übersetzungsstrukturen
ausgefrischt, um die Zuordnung der neuen logischen Sequenzeradresse
für den
ausgewählten
gegenständlichen
Sequenzer zu reflektieren. Wenigstens bei einem Ausführungsbeispiel
wird die Mappingstruktur 1250 in dem Block 1312 aufgefrischt.
-
Bei
einem Ausführungsbeispiel,
das die Mappingstruktur 1250 als eine oder mehrere Sequenzerseitentabellen
implementiert, wird die Sequenzerseitentabelle für den Faden, der den Sequenzerseitenfehler
verursacht hat, ausgefrischt, um das neue Sequenzermapping für die logische
Sequenzadresse zu der gegenständlichen
Sequenzadresse wiederzugeben. Bei einem solchen Ausführungsbeispiel
wird das vorliegende Feld (siehe 634, 6),
das für
jeden Seitentabelleneintrag in dem Block 1312 modifiziert
ist, gesetzt, um anzugeben, dass die Kontextinformation für die Seite
nicht aus dem Sicherungsspeicher 1275 gewonnen werden muss.
-
Zusätzlich wird
das gegebene Feld für
den Seitentabelleneintrag für
den Sequenzer, der in den Sicherungsspeicher 1275 in dem
Block 1308 übergeben
worden ist, modifiziert, um anzugeben, dass die Kontextinformation
in dem Sicherungsspeicher, nicht also in dem gegenständlichen
Sequenzer gespeichert ist.
-
Schließlich kann
für Ausführungsbeispiele, die
eine optionale Hardwareübersetzungsbeschleunigungsstruktur 1318 verwenden,
wie ein STLB 100, das in 11 dargestellt
ist, das Folgende in dem Block 1312 ausgeführt werden:
eine Übersetzungsbeschleunigungsstruktur 1218 wird
aufgrund eines Fadenkontextumschaltens geleert. Die Verarbeitung endet
sodann in dem Block 1314.
-
Die 7 und 8 zeigen
weiter ein spezifisches Beispiel, um weiter einige der Verarbeitungen des
Verfahrens 1300, wie es allgemein oben in Verbindung mit
den 12 und 13 gezeigt
worden ist, darzustellen. 7 zeigt
ein beispielhaftes Sequenzerrationierungsszenario, das durch die
Rationierungslogik 485 für den Musterfaden ausgeführt wird,
Fäden A-D,
dargestellt in 6. 7. zeigt eine
Reihe von Aktionen, AA – AF,
die während
des Mustersequenzrationierungsszenarios ausgeführt wird. Solche Aktionen reflektieren
ein bestimmtes Beispiel des allgemeinen Verfahrens 1200, 1300 zur Zuordnung
physikalischer Sequenzen, wie sie in den 12 und 13 dargestellt
sind. Entsprechend werden die 7 und 8 unten
unter Bezugnahme auch auf die 12 und 13 diskutiert.
-
7 zeigt
ein beispielhaftes Ausführungsbeispiel,
das zwölf
verfügbare
gegenständliche
Sequenzerframes aufweist. Die Aktion AA von 7 zeigt
einen Ausgangszustand, in der bisher keine der physikalischen Frames
zu einer logischen Sequenzadresse mappiert worden sind.
-
Aktion
AB von 7 zeigt die Zuordnung von drei Sequenzerframes,
Frames 0-2, für
die drei Seiten eines Fadens A. Insbesondere zeigt 7, dass
bei der Aktion AB, die Seite 0 des Fadens A (bezeichnet als „A0") zu dem Rahmen 0
mappiert ist. Diese Ausgangsmappierung der Seite 0 des Fadens A
kann ausgeführt
werden in Antwort auf das erste Auftreten des Empfangens einer logischen
Sequenzadresse, die die Seite 1 für den Faden A einschließt. (Siehe
Seitennummer 1032 der logischen Sequenzadresse 1030 in 10).
-
Eine
derartige logische Sequenzadresse kann durch die Rationierungslogik
in dem Block 1204 von 12 empfangen
werden. Da die Seite bisher nicht zu einem physikalischen Sequenzer
mappiert worden ist, führt
das Nachschlagen in der Tabelle im Block 1206 von 12 zu
einem Fehler und die Verarbeitung schreitet so zu dem Block 1210 fort
und nachfolgend zu dem Block 1304 von 13.
Bei 13 wird ein gegenständlicher Sequenzerrahmen für die Seite
ausgewählt.
Wie in 7 dargestellt, wird der Sequenzerframe 0 in dem
Block 1304 für das
in 7 dargestellte Beispiel ausgewählt.
-
Entsprechend
zeigt die Aktion AB von 7, dass das ursprüngliche
Mapping für
die Seiten 1 und 2 des Fadens A in einer ähnlichen Weise ausgeführt werden
kann.
-
7 zeigt
weiter, dass das ursprüngliche Mapping
der Seiten für
den Faden B in einer ähnlichen
Weise bei der Aktion AC von 7 zugewiesen werden
kann. D. h. 7 zeigt, dass die Seiten 0,
1 und 2 des Fadens B zu Sequenzern 3, 4 und 5 in der Aktion C von 7 mappiert
werden können.
-
7 zeigt
weiter, dass das ursprüngliche Mapping
der Seiten für
den Faden C in einer ähnlichen
Weise in der Aktion AD von 7 zugewiesen werden
kann. D. h. 7 zeigt, dass die Seiten 0,
1, 2 und 3 des Fadens C zu den Sequenzern 6, 7, 8 und 9 in der Aktion
AD von 7 zugeordnet werden kann.
-
7 zeigt,
dass das Austauschverarbeiten durch die Rationierungslogik in der
Aktion AE ausgeführt
werden kann. Eine solche Verarbeitung kann in Antwort auf das Empfangen
einer logischen Sequenzadresse, die eine Seite beinhaltet, die bisher nicht
mappiert ist, durchgeführt
werden. Entsprechend kann, wie oben diskutiert worden ist, die logische
Sequenzadresse in dem Block 1204 empfangen werden. Blöcke 1206 und 1210 können sodann ausgeführt werden.
Die Bezugnahme auf 13 zeigt wiederum, dass ein
Sequenzer für
die Seite in dem Block 1304 ausgewählt wird. Für das in 7 gezeigte
Ausführungsbeispiel
verbleiben lediglich zwei Sequenzer zu dem Zeitpunkt, zu dem eine
erste Referenz zu dem Faden D in dem Block 1204 empfangen
wird.
-
Der
Faden D weist jedoch vier logische Sequenzadressen auf und wir nehmen
an, dass die Schedulinganforderungen in den Fähigkeitsattributen des Fadens
D daher mindestens vier gegenständliche
Sequenzer benötigen.
Bei wenigstens einem Ausführungsbeispiel
wird die minimale Anzahl der gegenständlichen Sequenzer, die für einen
Faden erforderlich sind, durch die Rationierungslogik in dem Block 1304 bestimmt.
Bei wenigstens einem Ausführungsbeispiel
kann die Anzahl der von einem Faden erforderten logischen Sequenzer über einen
Fähigkeitsberichtsbefehl
architektural vorgesehen sein. Eine solche Ziffer kann, beispielsweise,
durch Ausführen
eines Fähigkeitsberichtsbefehls,
etwa einem CPUID Befehl, der die Anzahl der logischen Sequenzadressen
berichtet, auf die ein einzelner Faden zugreifen kann, bestimmt
werden.
-
Entsprechend
ist in dem Block 1304 ein aktiver „Opfer"-Sequenzer zum Austausch ausgewählt. Wie
oben beschrieben, können
Sequenzerattribute berücksichtigt
werden um zu bestimmen, welcher oder welche Sequenzer auszutauschen
sind. Beispielsweise kann die Rationierungslogik in dem Block 1304 bestimmen,
dass der Faden B aufgrund eines lang andauernden Cachefehlens abgewürgt ist und
keinen Fortschritt macht, und dass seine Sequenzerframes daher zum
Austausch ausgewählt werden
sollten, um Raum für
den Faden D zu machen.
-
7 zeigt,
dass der Kontextzustand für
die physikalischen Sequenzerrahmen 3, 4 und 5 ausgetauscht
in den Sicherungsspeicher in der Aktion AE sind. Entsprechend zeigt 13,
dass eine Fadenkontextsicherung in den Sicherungsspeicher in dem Block 1308 stattfindet.
Wenn der Faden D selbst zuvor aktiv war, jedoch vor der Beendigung
des Fadens in den Sicherungsspeicher 1275 übergeben
worden ist, wird dieser Kontext aus dem Sicherungsspeicher 1275 in
den entleerten gegenständlichen
Sequenzer zurückgespeichert.
-
Bei
dem in 7 gezeigten Beispiel zeigt die Aktion AF jedoch
ein anfängliches
Mappen für
die Seiten des Fadens D an. Entsprechend muss der Kontextzustand
für den
Faden D nicht aus dem Rückspeicher 1275 rückgespeichert
werden, sondern wird stattdessen mit den Anfangswerten initialisiert.
-
Entsprechend
wird der Block 1310, der in 13 mit
gepunkteten Linien dargestellt, um anzugeben, dass er nicht notwendigerweise
in allen Fällen ausgeführt wird.
-
Aktion
AF von 7 gibt an, dass die Seiten 0, 1, 2 und 3 für den Faden
D zu den physikalischen Sequenzern 3, 4, 5 bzw. 10 mappiert ist.
-
8 zeigt
die Inhalte der Sequenzerseitentabellen 610a-610d nach
der Aktion AF des beispielhaften Szenarios, das in 7 dargestellt
ist. 8 zeigt, dass die Seitentabelle 610a für den Faden
A das Mappen der Seiten 0, 1 und 2 für den Faden A zu den physikalischen
SeitenFrames 0, 1 bzw. 2. Der Wert (P") des „Vorhanden/Nichtvorhanden"-Feldes (siehe 634, 6)
für jeden
Eintrag der Seitentabelle 610a gibt an, dass die Kontextinformation
für die
Seiten auf den physikalischen Sequenzerframes geladen sind, nicht
in dem Sicherungsspeicher.
-
Entsprechend
zeigt 8, dass die Seitentabelle 610c für den Faden
C das Mappen der Seiten 0, 1, 2 und 3 des Fadens C zu den gegenständlichen Seitenframes
6, 7, 8 bzw. 9 angibt. Die Seitentabelle 610d für den Faden
D gibt das Mappen der Seiten 0, 1, 2, 3 des Faden D zu gegenständlichen
Sequenzern 3, 4, 5 bzw. 10 an. Die Werte des Vorhanden/Nichtvorhanden-Feldes
(siehe 634, 6) für jeden Eintrag der Tabellen 610c und 610d geben
wiederum an, dass die Adressen für
die Einträge
gegenständliche
Sequenzerframes angeben, die den gegenwärtigen Kontext halten.
-
8 zeigt
weiter, dass die Seitentabelle 610b für den Faden B einen vorhandenen
Wert „A" in dem Vorhanden/Nichtvorhanden-Feld 634 für jeden Eintrag
auf der Seitentabelle 610b angibt. Entsprechend kann der
Kontext für
die Seiten für
den Faden B an der angegebenen Adresse (xxx, yyy bzw. zzz) des Sicherungsspeichers 1275 gefunden
werden.
-
Bei
wenigstens einem Ausführungsbeispiel wird
das Auffrischen der Fadenseitentabellen 610a-610b einschließlich des
Vorhanden/Nichtvorhanden-Feldes durch die Rationierungslogik im Block 1312 von 13 durchgeführt.
-
Schließlich zeigt 8,
dass die Liste 620 der freien Rahmen angibt, dass der gegenständliche Sequenzerrahmen 11 unverteilt
bleibt.
-
15 zeigt
wenigstens ein Ausführungsbeispiel
eines Rechensystems 1500, das dazu in der Lage ist, die
offenbarten Techniken auszuführen.
Das Rechensystem 1500 schließt wenigstens einen Prozessorkern 1504 und
ein Memorysystem 1540 ein. Das Memorysystem 1540 kann
größere, relativ
langsame Memoryspeicher 1502 als auch ein oder mehrere
relativ schnelle Cache wie einen Befehlscache 1544 und/oder
einen Datencache 1542 aufweisen. Der Memoryspeicher 1502 kann
Befehle 1510 und Daten 1512 zum Steuern des Betriebs
des Prozessors 1504 speichern. Bei wenigstens einem Ausführungsbeispiel
kann der Memoryspeicher 1502 auch eine Mappingstruktur 1580 aufweisen.
-
Das
Memorysystem 1540 dient als generalisierte Repräsentation
von Speichern und kann eine Vielzahl von Formen von Speichern aufweisen,
etwa eine Harddrive, eine CD-ROM, einen Speicher mit wahlfreien
Zugriff (RAM), einen dynamischen Speicher mit wahlfreiem Zugriff
(DRAM), einen statischen Speicher mit wahlfreiem Zugriff (SRAM),
ein Flash Memory und die zugehörige
Schaltung. Speichersysteme 1540 können Befehle 1510 und/oder
Daten 1512 speichern, die durch Datensignale repräsentiert sind,
die durch den Prozessor 1540 ausgeführt werden können. Die
Befehle 1510 und/oder die Daten 1512 können einen
Code und/oder Daten zum Ausführen
einer oder aller der hier diskutierten Techniken aufweisen.
-
Der
Prozessor 1504 kann ein vorderes Ende 1520 aufweisen,
das eine Befehlsinformation an einen Ausführungskern 1530 liefert.
Eine aufgerufene Befehlsinformation kann in einem Cache 1525 gepuffert
werden, um die weitere Ausführung
durch den Ausführungskern 1530 abzuwarten.
Das vordere Ende 1520 kann die Befehlsinformation an den
Ausführungskern 1530 in
der Programmabfolge liefern.
-
Bei
wenigstens einem Ausführungsbeispiel weist
das vordere Ende 1520 eine Abruf-/Dekodiereinheit 322 auf, die
den als nächstes
auszuführenden Befehl
bestimmt. Bei wenigstens einem Ausführungsbeispiel des Systems 1500 kann
die Abruf-/Dekodiereinheit 122 einen Zeiger für den nächsten Befehl
und eine Abruflogik 120 aufweisen. Bei einem Ausführungsbeispiel,
bei dem jeder Prozessor 1504 mehrere Fadenkontexte unterstützt, implementiert die
Abruf-/Dekodiereinheit 122 gesonderte Zeiger für den nächsten Befehl
und Abruflogiken 120 für
jeden unterstützten
Fadenkontext. Die optionale Natur des zusätzlichen Zeigers für den nächsten Befehl
und der Abruflogik 120 in einem Mulitprozessorsystem ist
die gepunkteten Linien in 15 angedeutet.
-
Ausführungsbeispiele
der hier beschriebenen Verfahren können in Hardware, einer Hardware Emulationssoftware
oder anderer Software, Firmenware oder einer Kombination aus derartigen
Implementationsansätzen
implementiert sein. Ausführungsbeispiele
der Erfindung können
für ein
programmierbares System mit wenigstens einem Prozessor, einem Datenspeichersystem
(einschließlich flüchtiger
und nichtflüchtiger
Speicher und/oder Speicherelementen) wenigstens einer Eingabeeinrichtung
oder wenigstens einer Ausgabeeinrichtung implementiert sein. Für den Zweck
dieser Anmeldung weist ein Prozessorsystem jede Art eines Systems auf,
das einen Prozessor hat, beispielsweise einen digitalen Signalprozessor
(DSP), einem Mikrokontroller, einem anwendungsspezifischen integrierten Schaltkreis
(ASIC), oder einen Mikroprozessor.
-
Ein
Programm kann in einem Speichermedium oder einem Gerät (beispielsweise
einer Hard Disk Drive, einem Floppy Disk Drive, einem Nur-Lese-Speicher
(ROM), einem CD-ROM, einem Flash Memory Gerät, eine DVD oder einem anderen
Speichergerät),
das von einem allgemeinen oder einem besonderen programmierbaren
Verarbeitungssystem lesbar ist. Die Befehle, die von einem Prozessor in
einem Prozessorsystem zugänglich
sind, sorgen für
die Konfiguration und den Betrieb des Prozesssystems, wenn das Speichermedium
und/oder das Gerät
durch das Verarbeitungssystem gelesen wird zum Ausführen der
hier beschriebenen Prozeduren. Ausführungsbeispiele der Erfindung
können
auch als ein maschinenlesbares Speichermedium implementiert sein,
konfiguriert für
die Verwendung mit einem Verarbeitungssystem, wobei das Speichermedium
so konfiguriert ist, dass es das Verarbeitungssystem dazu veranlasst,
in einer besonderen vorgegebenen Weise zu arbeiten, um die hier
beschriebenen Funktionen auszuführen.
-
Das
beispielhafte System 1500 ist repräsentativ für Verarbeitungssysteme basierend
auf dem Pentium®,
Pentium® Pro,
Pentium® II,
Pentium® III, Pentium® 4
und Itanium® und
Itanium® 2
Mikroprozessoren , verfügbar
von der Intel Corporation, obwohl andere Systeme (einschließlich Personalcomputer (PCs)
mit anderen Mikroprozessoren, Workstations, Personal Digital Assistants
und anderen mobilen Einheiten, Set-Top Boxes und dergleichen) auch
verwendet werden können.
Bei einem Ausführungsbeispiel
können
beispielhafte Systeme eine Version des WindowsTM Betriebssystem,
das von der Microsoft Corporation erhältlich ist, obwohl andere Betriebssysteme
und graphische Verwenderschnittstellen auch verwendet werden können.
-
Obwohl
besondere Ausführungsbeispiele der
vorliegenden Erfindung gezeigt und beschrieben worden sind, ergibt
es sich für
den Fachmann, dass Änderungen
und Abwandlungen ausgeführt
werden können,
ohne sich von dem Schutzbereich der beiliegenden Ansprüche zu lösen. Beispielsweise
kann die Mappingstruktur 580, die in 5 dargestellt
ist, in einer Art und Weise organisiert werden, die anders ist als
die oben diskutierte. Beispielsweise kann die Mappingstruktur 580 organisiert
sein als eine invertierte Sequenzerseitentabelle, die eine Hash-Tabelle ist,
die eine Anzahl von Tabelleneinträgen hat, die gleich ist der
Anzahl der gegenständlichen
Sequenzerframes. Weiter kann jeder Tabelleneintrag der Mappingstruktur 580 einer
verlinkten Liste von Mappierungen einer virtuellen Seite auf einen
Seitenrahmen.
-
Beispielsweise
kann der Mappingmanager (siehe 502, 5) beispielsweise
ein hybrides Mappingschema unterstützen, das sowohl eine Segmentation
als auch ein Paging kombiniert. Der Mappingmanager kann für diesen
Ansatz eine unterschiedliche Seitentabelle für jedes Segment in einem Prozess
verwenden, so dass die Anzahl der Seiten für verschiedene Segmente variieren
kann.
-
Bei
einem alternativen Ausführungsbeispiel kann
der Mappingmanager nicht nur die Sequenzerattributinformation bei
dem Ausführen
der Sequenzerrationierung berücksichtigen,
sondern kann auch Auszeitaktionen berücksichtigen, die von dem gegenständlichen
Sequenzer selbst ausgeführt
werden. D. h. der Sequenzer kann programmiert sein, um einen Ereignishandhaber
aufzurufen bei dem Auftreten des Zeitaus-Ereignisses. Das Zeitaus-Ereignis kann,
beispielsweise, jedes Ereignis sein, das angibt dass der Sequenzer
keinen Fortschritt macht (lang andauerndes Fehlen des Caches auf
der letzten Ebene, Warten auf eine Sperre des Synchronisationsobjektes,
usw.). Wenn ein Sequenzer eine Auszeit nimmt, kann der Ereignishandhaber
für das
Zeitaus-Ereignis eine Arbeit ausführen um den gegenwärtigen Befehlsstrom
in eine „Warteschlange" aufzunehmen und
den gegenständlichen
Sequenzer zurück
auf die freie Liste setzen oder, bei einem alternativen Ausführungsbeispiel,
das ein LSCQ wie oben beschrieben unterstützt, kann die Auszeit den gegenwärtigen aktiven
logischen Sequenzer veranlassen, in das LSCQ zu übergeben und der Mappingmanager 502 kann
wiederum einen Ersatz des logischen Sequenzerkontext von dem LSCQ
finden. Dies kann ausgeführt
werden durch eine Schedulinglogik (siehe beispielsweise 487 nach
den 4 und 5). Die Schedulinglogik 487 kann
in Ersatz des logischen Kontext planen, auf dem freigegebenen physikalischen
Sequenzer zu laufen.
-
Der
Ereignishandhaber kann stattdessen oder zusätzlich dazu eine Sequenzerpräfung auf dem
nachfolgenden virtuellen Sequenzer oder der Sequenzerseite ausführen. In
effektiver Weise sendet eine solche Nachfrage nach der Aktionsfähigkeit einen
Altersmechanismus (ähnlich
einem Takt oder einem WSClock), um sicher zu stellen, dass alle
virtuellen Sequenzer für
einen Faden in einer vorhersagbaren Zeitdauer aufgerufen werden.
-
Entsprechend
wird der Fachmann erkennen, dass Änderungen und Abwandlungen
ausgeführt werden
können,
ohne sich von der Erfindung nach seinen breiteren Aspekten zu lösen. Die
beiliegenden Ansprüche
umfassen mit ihrem Schutzbereich alle derartigen Änderungen
und Abwandlungen, die in den wahren Schutzbereich der vorliegenden
Erfindung fallen.
-
Zusammenfassung
-
Offenbart
werden Ausführungsbeispiele
eines Systems, Verfahren und Mechanismen zur Verwaltung und zur Übersetzung
eines Mappens zwischen den Adressen eines logischen Sequenzers und
gegenständlichen
oder logischen Sequenzern in einem Mehrsequenzer-Multifaden-System. Ein Mappingmanager
kann die Zuweisung verwalten und das Mappen der Adressen des logischen
Sequenzers oder der Seiten zu den tatsächlichen Sequenzern oder Frames
des Systems. Die Rationierungslogik, die dem Mappingmanager zugehörig ist,
kann Sequenzerattribute berücksichtigen,
wenn ein derartiges Mappen durchgeführt wird. Die Relokationslogik, die
dem Mappingmanager zugehörig
ist, kann ein Ausgeben und Aufnehmen von Kontextinformation zu/von
einem Sicherungsspeicher verwalten, wenn die aktuellen Sequenzer
neu gemappt werden. Die Sequenzer können einzeln oder können als
Teil von partionierten Blöcken
zugeordnet werden. Der Mappingmanager kann weiter eine Übersetzungslogik aufweisen,
die an den Identifizierer für
den gemappten Sequenzer schafft, jedes Mal wenn eine Adresse eines
logischen Sequenzers in einem Verwenderprogramm verwendet wird.
Weitere Ausführungsbeispiele
werden auch beschrieben und beansprucht.