-
Hintergrund
der Erfindung
-
Bereich der Erfindung
-
Die
vorliegende Erfindung betrifft Speicherbereinigung und insbesondere
Verfahren und Vorrichtungen zum Erleichtern von Speicherbereinigung
mit begrenzter Pausezeit.
-
Beschreibung der verwandten
Technik
-
Herkömmlicherweise
liegt die Verantwortung für
eine dynamische Zuordnung und Zuordnungsaufhebung von Speicher bei
den meisten Programmiersprachen beim Programmierer. So wird beispielsweise
in der Programmiersprache C Memory vom Freispeicher (Heap) durch
die Malloc-Prozedur (oder ihre Varianten) zugeordnet. Bei einer
gegebenen Zeigervariablen p hat die Ausführung von Maschinenanweisungen,
die dem Statement p = malloc(sizeof(SomeStruct)) entsprechen, zur
Folge, dass die Zeigervariable p auf neu zugeordneten Speicher (Storage)
für ein
Memory-Objekt einer Größe zeigt,
die zum Darstellen einer SomeStruct Datenstruktur erforderlich ist.
Nach der Benutzung kann die Zuordnung des vor der Zeigervariablen
p identifizierten Memory-Objekts durch Aufrufen von free(p) aufgehoben
oder freigegeben werden. Die Sprachen Pascal und C++ bieten analoge
Einrichtungen für
eine explizite Zuordnung und Zuordnungsaufhebung von Memory.
-
Dynamisch
zugeordneter Speicher (Storage) wird leider unerreichbar, wenn keine
Referenz, oder kein Zeiger, auf den Speicher in dem Satz von Root-Referenzpositionen
für eine
bestimmte Berechnung verbleibt. Memory-Objekte, die nicht mehr erreichbar,
aber noch nicht freigegelegten sind, werden als Garbage bezeichnet.
Ebenso kann die Zuordnung von Speicher, der mit einem Memory-Objekt
assoziiert ist, aufgehoben werden, während er noch referenziert
ist. In diesem Fall wurde eine dangling Reference erzeugt. Im Allgemeinen kann
es schwierig sein, dynamischen Memory korrekt zu verwalten. In den
meisten Programmiersprachen wird eine Heap-Zuordnung für Datenstrukturen
benötigt,
die den Vorgang überleben,
mit dem sie kreiert wurden. Wenn diese Datenstrukturen zu weiteren
Vorgängen
oder Funktionen geleitet werden, dann ist es möglicherweise schwierig oder
unmöglich
für den
Programmierer oder Compiler, den Moment zu ermitteln, an dem es sicher
ist, die Zuordnung aufzuheben.
-
Aufgrund
dieser Schwierigkeit kann Speicherbereinigung, d. h. die automatische
Rückgewinnung
von Heap-zugeordnetem Speicher nach seiner letzten Verwendung durch
ein Programm ein attraktives alternatives Modell des dynamischen
Memory-Management sein. Speicherbereinigung ist besonders für funktionale Sprachen
wie JAVATM (JAVATM und
Warenzeichen auf der Basis von JAVA sind Warenzeichen oder eingetragene Warenzeichen
von Sun Microsystems, Inc. in den Vereinigten Staaten und anderen
Ländern),
Prolog, Lisp. Smalltalk, Scheme, Eiffel, Dylan, ML, Haskell, Miranda,
Oberon usw. attraktiv, die gemeinsame Datennutzung, verzögerte Ausführung und
im Allgemeinen weniger vorhersehbare Ausführungsreihenfolgen haben als
die prozeduralen Sprachen (siehe allgemein, Jones & Lins, Garbage
Collection: Algorithms for Automatic Dynamic Memory Management.
S. 1–41,
Wiley (1996), wo Speicherbereinigung und klassische Algorithmen dafür beschrieben
sind).
-
Drei
klassische Speicherbereinigungsverfahren sind Referenzzählung, Mark-Sweep
und Kopieren von Speicherreklamation. Das erste, Referenzzählung, basiert
auf dem Führen
einer Zahl für
die Anzahl von Referenzen, z. B. Zeigern, auf jedes Memory-Objekt
aus aktiven Memory-Objekten oder Root-Referenzpositionen. Wenn ein
neues Memory-Objekt
zugeordnet und ein Zeiger darauf zugewiesen sind, dann wird die
Referenzzahl des Memory-Objekts auf eins gesetzt. Dann wird jedes
Mal, wenn ein Zeiger auf das Memory-Objekt gesetzt wird, die Referenzzahl
des Memory-Objekts inkrementiert. Wenn eine Referenz auf das Memory-Objekt
gelöscht
oder überschrieben
wird, dann wird die Referenzzahl dekrementiert. Memory-Objekte mit
einer Referenzzahl von null sind unerreichbar und können als
Garbage bereinigt werden. Eine Referenzzahl-Speicherbereinigungsimplementation beinhaltet
typischerweise ein zusätzliches
Feld, die Reference Count (Referenzzahl) in jedem Memory-Objekt
und hat Inkrementierungs- und Dekrementierungssupport im Rahmen
von Funktionen wie neues Objekt, Objekt löschen und Zeiger aktualisieren.
-
Im
Gegensatz dazu beinhalten Bereinigungsprotokollierverfahren das
Durchlaufen von Referenzketten durch Memory, um aktuelle, d. h.
referenzierbare Memory-Objekte zu identifizieren. Ein solches Bereinigungsprotokollierverfahren
ist das Mark-Sweep-Verfahren,
bei dem Referenzketten durch Memory durchlaufen werden, um aktuelle
Memory-Objekte zu identifizieren und zu markieren. Unmarkierte Memory-Objekte sind
Garbage und werden bereinigt und während einer separaten Sweep-Phase
zum freien Pool zurückgebracht.
Eine Mark-Sweep-Speicherbereinigungsimplementation beinhaltet typischerweise
ein zusätzliches Feld,
z. B. ein Mark-Bit, in jedem Memory-Objekt. Mark-Kompakt-Bereiniger arbeiten ergänzend zum
traditionellen Mark-Sweep-Ansatz mit Verdichtung (Compaction). Bei
Verdichtung werden aktuelle Objekte verschoben, um nützliche
Fragmentierungsreduktionen zu erzielen. Auch bei Referenzzahlverfahren
kann Verdichtung angewendet werden.
-
Bei
einem weiteren Protokollierungsverfahren, der Kopierbereinigung
(Copying Collection), wird Memory (oder ein Teil davon) in zwei
Teilräume
unterteilt, einen mit aktuellen Daten und einen mit alten Daten. Kopierspeicherbereinigung
beginnt damit, dass die Rollen der beiden Teilräume umgekehrt werden. Der Kopierbereiniger
durchläuft
dann die aktuellen Objekte im alten Teilraum, FromSpace, und kopiert
erreichbare Objekte in den neuen Teilraum, ToSpace. Wenn alle aktuellen
Objekte im FromSpace durchlaufen und kopiert sind, dann gibt es
im ToSpace ein Duplikat der Datenstrukturen. Im Wesentlichen säubert ein
Kopierbereiniger aktuelle Objekte aus dem Garbage. Ein nützlicher
Nebeneffekt der Kopierbereinigung ist, dass aktuelle Objekte in
ToSpace verdichtet werden, so dass Fragmentierung reduziert wird.
-
Generationale
Ansätze
bauen auf den Beobachtungen auf, dass (1) Memory-Objekte gewöhnlich jung sterben
und dass (2) Protokollierungsmethoden erhebliche Ressourcen auf
das Durchlaufen, Kopieren oder Verschieben von vergleichsweise lange
gelebten Objekten aufwenden. Generationale Speicherbereinigungssysteme
unterteilen den Heap in zwei oder mehrere Generationen, trennen
Objekte nach Alter und konzentrieren Bereinigungsaufwand (oder wenigstens
stärkeren
Bereinigungsaufwand) auf die jüngere(n)
Generation(en). Da die jüngste
Generation klein ist, können
speicherbereinigungsbezogene Pausezeiten durchschnittlich kurz gehalten
werden. Speicherbereinigung innerhalb einer Generation kann Kopier-
oder Mark-Sweep-Bereinigung sein. Die Promotion von Memory-Objekten
von einer jüngeren
zu einer älteren
Generation beinhaltet typischerweise Kopieren.
-
Aufgrund
der Kosten für
das Kopieren großer
Objekte beinhalteten einige generationale Ansätze große Objektbereiche (siehe z.
B. Ungar and Jackson, Tenuring Policies for Generation-based Storage
Reclamation, ACM SIGPLAN Notices, 23 (11), S. 1–17 (1988), Ungar and Jackson,
An Adaptive Tenuring Policy for Generation Scavengers, ACM Transactions
on Programming Languages and Systems, 14 (1), S. 1–17 (1992)). Die
Technik besteht typischerweise darin, ein großes Objekt in einen im generationalen
Teil des Heap gespeicherten Header-Teil und einen im großen Objektbereich
gespeicherten Textteil zu unterteilen. Die Header-Teile werden wie
andere Objekte gesäubert,
aber es werden keine Ressourcen auf das Kopieren der Textteile aufgewendet.
Ungar und Jackson haben gefunden, dass Pausezeiten durch Zuordnen
von 330 KB zu einem großen
Objektbereich um einen Faktor von vier reduziert werden können.
-
Für interaktive
oder Echtzeit-Anwendungen sind kurze Speicherbereinigungspausen
ein wesentlicher Leistungsfaktor. Traditionelle Implementationen
von Protokollierungsspeicherbereinigern unterbrechen periodisch
die Ausführung
von Anwendungsprogrammen, um Memory in Memory-Bereichen zu durchsuchen,
die nicht mehr gebraucht werden. Leider benötigen harte Echtzeitsysteme
Worst-Case-Garantien, dass Ergebnisse rechtzeitig errechnet werden.
Selbst in reinen interaktiven Systemen muss die Pausezeit begrenzt
und kurz sein. So genannte inkrementale Speicherbereinigungsmethoden
versuchen, längere
Pausen zu vermeiden, die durch Start- und Stoppreklamation verursacht werden,
und stattdessen die Bereinigung mit Anwendungsprogrammzyklen zu
verschachteln. Um dieses Ziel zu erreichen, muss ein inkrementaler
Bereiniger kohärent Heap-Zugriffe
durch den Bereiniger und das Anwendungsprogramm verwalten (häufig allgemeiner
Mutator genannt). Parallel arbeitende Bereiniger, z. B. in einem
Multiprozessor, haben ähnliche,
aber höhere
Feinkornsynchronisationsanforderungen.
-
Im
Allgemeinen haben verschachtelt oder parallel arbeitende Verschiebungsbereiniger
Multileser-Multischreiber-Synchronisationsprobleme. Es wurden sowohl
Lese- als auch Schreibbarrierenmethoden angewendet, um einen Mutator
daran zu hindern, Speicherbereinigung zu unterbrechen, indem er
die Konnektivität des
Memory-Objektreferenzierungsgraphs
auf eine Weise ändert,
die das Durchlaufen des Bereinigers stört (siehe z. B. Steele, Multiprocessing
Compactifying Garbage Collection, Communications of the ACM, 18
(9), S. 495–508
(1975) (Schreibbarriere, Mark-Sweep-Compact Collection); Dijkstra et al.,
On-the fly Garbage Collection: An Exercise in Cooperation, Communications
of the ACM 21 (11), S. 965–975
(1978) (Schreibbarriere); Kung & Song,
An Efficient Parallel Garbage Collection System and its Correctness
Proof, IEEE Symposium on Foundations of Computer Science, S. 120–131 (1977)
(Schreibbarriere); Baker, List Processing in Real-time on a Serial
Computer, Communications of the ACM, 21 (4), S. 280–93 (1978)
(Lesebarriere, Kopierbereiniger); Brooks, Trading Data Space for
Reduced Time and Code Space in Real-time Garbage Collection on Stock Hardwaare,
in Conference Record of the 1984 ACM Symposium on Lisp and Functional
Programming, Austin, Texas, S. 256–62 (1984) (Schreibbarriere,
Kopierbereiniger); und Dawson, Improved Effectiveness from a Real-time
Lisp Garbage Collector, Conference Record of the 1992 ACM Symposium
on Lisp and Functional Programming, San Fransisco. Kalifornien,
S. 159–67
(1982) (Schreibbarriere, Kopierbereiniger).
-
Die
Symbolics 3600 bot Hardware-Lesebarrieren- und Schreibbarrierensupport
für Kopierbereinigung nach
Baker-Art und zum Abfangen von interenerationalen Zeigerspeicherungen
(siehe Moon, Architecture of the Symbolics 3600, Proceedings of
the 12th Annual International Symposium on Computer Architecture,
S. 76–83
(1985)). Die MIT Lisp-Maschine und der TI-Explorer boten ebenfalls
Hardware-Lesebarrierensupport für eine
Kopierbereinigung nach Baker-Art. Nilsen und Schmidt beschreiben
im US-Patent Nr. 5.60,003 ein speicherbereinigtes Memory-Modul,
das Hardware-Lesebarrieren- und Schreibbarrieren implementiert.
-
Zusätzlich zur
Grundaufgabe des Verwaltens von Mutator-Zugriffen, um Änderungen
an der Verknüpfbarkeit
des Memory-Objektreferenzierungsgraphs auf eine Weise zu verhindern,
die ein Durchlaufen des Bereinigers stören würde, sollten Verschiebungsbereiniger
mit begrenzter Pausezeit die erhebliche Zeitperiode angehen, die
zum Verschieben eines großen
und/oder populären
Memory-Objekts benötigt
wird. Ein Speicherbereiniger kann sicherstellen, dass Memory-Objekte
innerhalb eines begrenzten Intervalls vollständig verschoben werden können, indem
große
Objekte, die mit dem begrenzten Intervall inkompatibel sind, auf
einen großen
Objektbereich relegiert werden, der mit einer verschiebungsfreien
Methode bereinigt werden (siehe z. B. Ungar und Jackson, Tenuring
Policies for Generation-based Storage Reclamation, ACM SIGPLAN Notices,
23 (11), S. 1–17
(1988)) oder der unbereinigt bleiben kann. Lazy- oder Inkremental-Kopieransätze werden
jedoch bevorzugt.
-
Die
Lösung
von Baker bestand darin, ein zusätzliches
Link-Wort in den Header von großen
Objekten einzubauen. In einer FromSpace-Instanz des Objekts speicherte
das Link-Wort eine
Weiterleitungsadresse zu einer ToSpace-Instanz des Objektes. In
der ToSpace-Instanz
des Objektes speicherte das Link-Wort eine Rückwärtslink zu der FromSpace-Instanz. Wenn die
Weiterleitungs- und die Rückwärtslink
stehen, dann wurde das Objekt inkremental kopiert. Wie kleine Objekte,
so wurden Felder des großen
Objektes kopiert und auf Zeiger zurück in FromSpace-Objekte abgetastet,
die noch nicht kopiert worden waren. Baker benutzte die abgetastete/unabgetastete
Grenze, die von einer Speicherbereinigungsvariablen, Scan, definiert
wurde, um Schreibzugriffe auf das teilkopierte große Objekt
zu lenken. Die Kosten für
das System von Baker, abgesehen von einem zusätzlichen Header-Wort, waren
eine Software-Schreibbarriere für
Schreibvorgänge
in die ToSpace-Instanz des großen
Objektes. Wenn die Adresse größer als
Scan war, dann erfolgte der Schreibvorgang in der OldSpace-Instanz
mit der Rückwärtslink;
ansonsten erfolgte der Schreibvorgang in der NewSpace-Instanz.
-
Nilsen
und Schmidt präsentierten
eine Hardware-Lösung
auf der Basis des Kopierbereinigers von Baker. Speziell stellten
Nilsen und Schmidt ein speicherbereinigtes Memory-Modul bereit,
in dem eine Hardware-Lesebarriere die Illusion gibt, dass die Bereinigung
abgeschlossen ist. Ein Hardware-Arbiter in dem speicherbereinigten
Memory- Modul bot
eine Hardware-Lesebarriere des Baker-Typs und zusätzlich Lese-
und Schreibbarrieren für
Zugriffe auf einen bis dahin unkopierten Teil einer Objektinstanz
in ToSpace. Das speicherbereinigte Memory-Modul führte Speicheradressregister.
um Beginn und Ende des unkopierten Teils anzuzeigen. Lese- und Schreibzugriffe
auf den unkopierten Teil wurden zur FromSpace-Instanz gerichtet.
-
Die
US 5 293 614 offenbart ein
weiteres System und Verfahren für
eine harte Echtzeit-Speicherbereinigung, die eine Schreibbarriere
erfordert und die Eigenschaften aufweist, die im Oberbegriff der
unabhängigen
Ansprüche
definiert sind.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die
Erfindung ist in den beiliegenden Ansprüchen definiert. Man hat entdeckt,
dass eine Schreibbarriere auf Speicher in ein teilweise verschobenes
großes
und/oder populäres
Memory-Objekt Implementationen von Verschiebungsspeicherbereinigern
mit begrenzter Pausezeit erleichtert, wie z. B. Kopierbereinigern,
generationalen Bereinigern und Bereinigern mit Verdichtung. Teilweise
verschobener Objektkennungsspeicher und darauf ansprechende Schreibbarriere
ermöglichen
eine Unterbrechung der Verschiebung von großen und/oder populären Memory-Objekten
durch eine Speicherbereinigungsimplementation, um einem Mutatorprozess
begrenzte Pausezeitgarantien zu geben.
-
Ein
teilweise verschobener Objektkennungsspeicher mit „copy from" Kennungsspeicher,
auf den Schreibbarrierenlogik zugreifen kann, folgt der Schreibbarrierenlogik,
um die Einheitlichkeit zwischen FromSpace- und ToSpace-Instanzen eines teilweise
verschobenen Memory-Objekts zu bewahren. In einigen Ausgestaltungen
fängt die
Schreibbarrierenlogik zu einem teilweise verschobenen Objekt-Trap-Handler ab,
der die Einheitlichkeit wahrt. In anderen Ausgestaltungen, die einen „copy from" Kennungsspeicher
beinhalten, auf den Schreibbarrierenlogik zugreifen kann, wahrt
die Schreibbarriere selbst die Einheitlichkeit ohne Software-Trap-Handler-Overheads. Ein fakultativer „how far" (wie weit) Anzeigespeicher
erleichtert die Unterscheidung, durch die Schreibbarrierenlogik
oder durch den teilweise verschobenen Objekt-Trap-Handler, zwischen einem
kopierten Teil und einem unkopierten Teil des teilweise verschobenen
Memory-Objekts. Einige Ausgestaltungen können möglicherweise nicht zwischen
kopierten und unkopierten Teilen des teilweise verschobenen Objekts
unterscheiden. Ferner erlaubt es zwar der „Copy to" und der „Copy from" Kennungsspeicher, auf den die Schreibbarriere
zugreifen kann, vorteilhafterweise, dass die Schreibbarrierenlogik
Einheitlichkeit zwischen FromSpace- und ToSpace-Instanzen eines teilweise
verschobenen Memory-Objekts ohne Software-Trap-Handler-Overhead
wahrt, aber einige Ausgestaltungen können einen solchen Software-Trap-Handler beinhalten.
Eine Reihe verschiedener alternativer Funktionalitätszuordnungen
zwischen Schreibbarrierenlogik und einem teilweise verschobenen
Objekt-Trap-Handler sind vorgesehen und fallen in den Umfang der
Ansprüche.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
vorliegende Erfindung wird für
die Fachperson nach Bezugnahme auf die Begleitzeichnungen besser
verständlich,
und ihre zahlreichen Aufgaben, Merkmale und Vorteile werden nach
einer solchen Bezugnahme offensichtlich.
-
1a und 1b (nachfolgend
kollektiv 1 genannt) sind ein Blockdiagramm
einer beispielhaften Ausgestaltung eines Hardware-Prozessors einer
virtuellen Maschine, der Support für Speicherbereinigungsimplementationen
mit begrenzter Pausezeit gemäß der vorliegenden
Erfindung beinhaltet.
-
2 veranschaulicht „Aufbau"-Beziehungen zwischen
Software- und Hardware-Komponenten
einer JAVA-Anwendungsumgebung mit Hardware-Prozessor (1) und Software-Komponenten einer beispielhaften
virtuellen JAVA-Maschinenimplementation.
-
3 illustriert
mehrere mögliche
Zusätze
zum Hardware-Prozessor von 1.
-
4a und 4b (nachfolgend
kollektiv 4 genannt) veranschaulichen
eine Ausgestaltung eines teilweise verschobenen Objektkennungsspeichers
und eines beispielhaften Memory-Objektreferenzierungsgraphs gemäß einer
Teilraum-Memory-Organisation
für einen
Kopierspeicherbereiniger vor dem Kopieren.
-
5 veranschaulicht
den teilweise verschobenen Objektkennungsspeicher und die Teilraum-Memory-Organisation
von 4 beim Kopieren eines großen Objekts
vom FromSpace auf den ToSpace.
-
6 veranschaulicht
Zugriffe eines Kopierbereinigungsprozesses und eines Mutatorprozesses
auf FromSpace- und ToSpace-Teile eines bereinigten Memory-Bereiches, der ein
teilweise verschobenes großes Objekt
beinhaltet. 6 illustriert den Betrieb einer
Schreibbarriere des Hardware-Prozessors von 1 in Verbindung
mit dem teilweise verschobenen Objektkennungsspeicher der 4 und 5.
-
7 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit einer Barriere für
Speicherungen auf eine Copy-from-Instanz eines teilweise verschobenen
Objektes und eines Trap-Handlers dafür.
-
8 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit einer Hardware-Barriere für Speicherungen auf eine Copy-from- Instanz eines teilweise
verschobenen Objekts und mit einem teilweise verschobenen Objektkennungsspeicher
mit Copy-from- und Copy-to-Instanzkennungen. Die Ausgestaltung von 8 sendet
selektiv Speicherdaten zu der Copy-from-Instanz und der Copy-to-Instanz
des teilweise verschobenen Objekts rund.
-
9 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit einer Hardware-Barriere für Speicherungen zu einer Copy-from-Instanz eines teilweise
verschobenen Objekts und mit einem teilweise verschobenen Objektkennungsspeicher
mit einer Copy-from-Instanzkennung, einer Copy-to-Instanzkennung und
einer kopierten/unkopierten Grenzkennung. Die Ausgestaltung von 9 leitet
oder sendet selektiv Speicherdaten je nach dem teilweisen Verschiebungszustand
des teilweise verschobenen Objekts rund, um ein inkrementales Kopieren
zu ermöglichen.
-
10 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit Barrieren für
Speicherungen auf die Copy-from- und die Copy-to-Instanzen eines teilweise verschobenen
Objekts und mit einem teilweise verschobenen Objektkennungsspeicher
mit Copy-from- und Copy-to-Instanzkennungen. Die Ausgestaltung von 10 ermöglicht sowohl
inkrementales Kopieren als auch inkrementales Zeiger-Update.
-
11 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit Barrieren für
Speicherungen auf die Copy-from- und die Copy-to-Instanzen eines teilweise verschobenen
Objekts und mit einem teilweise verschobenen Objektkennungsspeicher
mit einer Copy-from-Instanzkennung, einer Copy-to-Instanzkennung, einer
kopierten/unkopierten Grenzkennung und einem Speicherbereinigungsphasenindikator.
Die Ausgestaltung von 11 leitet oder sendet selektiv
Speicherdaten je nach dem teilweisen Verschiebungszustand des teilweise
verschobenen Objekts und der Speicherbereinigungsphase rund, um
sowohl inkrementales Kopieren als auch inkrementales Zeiger-Update
zu ermöglichen.
-
12 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit Barrieren für
Ladungen auf eine Copy-from-Instanz eines teilweise verschobenen
Objekts und für Speicherungen
auf die Copy-from-Instanz und mit einem teilweise verschobenen Objektkennungsspeicher
mit einer Copy-from-Instanzkennung,
einem Speicherbereinigungsphasenindikator und einem teilweise verschobenen
Objekt-Trap-Handler. Die Ausgestaltung von 12 leitet
selektiv Speicherungen um oder sendet sie rund und leitet selektiv
Ladungen um, um sowohl inkrementales Kopieren als auch inkrementales
Zeiger-Update zu ermöglichen,
und in einigen Variationen Überlappungen
von Copy-from- und Copy-to-Instanzen.
-
13 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit Barrieren für
Ladungen von einer Copy-from-Instanz eines teilweise verschobenen
Objektes und für Speicherungen
auf die Copy-from-Instanz und mit einem teilweise verschobenen Objektkennungsspeicher
mit einer Copy-from-Intanzkennung,
einer Copy-to-Instanzkennung und einem Speicherbereinigungsphasenindikator.
Die Ausgestaltung von 13 lenkt selektiv Speicherungen
um oder sendet sie rund und lenkt selektiv Ladungen um, um sowohl
inkrementales Kopieren als auch inkrementales Zeiger-Update zu ermöglichen.
-
14 veranschaulicht
eine Ausgestaltung eines Speicherbereinigungssystems mit begrenzter
Pausezeit mit Barrieren für
Ladungen von einer Copy-from-Instanz eines teilweise verschobenen
Objektes und für Speicherungen
auf die Copy-from-Instanz und mit einem teilweise verschobenen Objektkennungsspeicher
mit einer Copy-from-Instanzkennung,
einer Copy-to-Instanzkennung, einer kopierten/unkopierten Grenzkennung und
einem Speicherbereinigungsphasenindikator. Die Ausgestaltung von 13 leitet
selektiv Speicherungen um und leitet selektiv Ladungen um, um inkrementales
Kopieren, inkrementales Zeiger-Update und Überlappungen von Copy-from-
und Copy-to-Instanzen zu ermöglichen.
-
15 veranschaulicht
den Betrieb eines Speicherbereinigungssystems mit begrenzter Pausezeit, um Überlappungen
von FromSpace- und ToSpace-Teilen eines teilweise verschobenen großen Objektes
zuzulassen.
-
16 veranschaulicht
ein Objektreferenz-(objectref)Format gemäß einer Ausgestaltung der vorliegenden
Erfindung.
-
17A veranschaulicht ein Objektformat gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
17B veranschaulicht ein alternatives gehandhabtes
Objektformat gemäß einer
Ausgestaltung der vorliegenden Erfindung.
-
Gleiche
Bezugszeichen in verschiedenen Zeichnungen bedeuten ähnliche
oder identische Elemente.
-
BESCHREIBUNG DER BEVORZUGTEN
AUSGESTALTUNG(EN)
-
Es
folgt eine ausführliche
Beschreibung der für
am besten gehaltenen Art der Durchführung der Erfindung. Die Beschreibung
soll die Erfindung illustrieren und ist nicht als sie begrenzend
anzusehen.
-
Architektursupport
für Implementationen
von verschobenen Speicherbereinigern mit begrenzter Pausezeit beinhaltet
Speicher zum Identifizieren von Positionen, von denen (und in einigen
Ausgestaltungen, zu denen) ein großes und/oder populäres Memory-Objekt
verschoben wird. Der hierin verwendete Begriff großes Objekt
ist ein beliebiges Memory-Objekt
mit einer solchen Größe, Struktur
oder einem solchen Inhalt, dass die Verschiebung des kompletten
Memory-Objekts, potentiell mit Updates von Referenzen darauf, unter
ungünstigsten
Bedingungen mit Begrenzte-Pausezeit-Garantien einer Speicherbereinigungsimplementation
inkompatibel sein kann. Wie oben, wird in Ausgestaltungen gemäß der vorliegenden
Erfindung ein großes
Objekt mit unterschiedlichen Graden an Konservatismus operativ definiert.
So können
einige Ausgestaltungen beispielsweise einen Größenschwellenwert verwenden,
während
andere beim Berechnen eines großen
Objekts Referenzzahlen benutzen können. Noch andere Ausgestaltungen,
besonders solche, die im Wesentlichen auf Hardware basieren, können den
hierin beschriebenen Architektursupport ohne Rücksicht auf die Größe des Memory-Objekts nutzen. Der
hierin verwendete Begriff populäres
Objekt ist ein beliebiges Memory-Objekt
mit einer Referenzzahl, so dass die Verschiebung des Memory-Objekts,
einschließlich
Updates von Verweisen darauf, unter ungünstigsten Bedingungen mit Begrenzte-Pausezeit-Garantien
einer Speicherbereinigungsimplementation inkompatibel sein können. Wie
oben, so wird ein populäres
Objekt in Ausgestaltungen gemäß der vorliegenden
Erfindung mit unterschiedlichen Graden an Konservatismus operativ
definiert.
-
Im
Allgemeinen können
Ausgestaltungen gemäß der vorliegenden
Erfindung den hierin beschriebenen Architektursupport zum Verschieben
von großen
Objekten, populären
Objekten, großen
und populären Objekten,
allen Objekten (einschließlich,
aber nicht begrenzt auf, große(n)
und/oder populäre(n)
Objekte(n)) usw. verwenden. Ein solcher Architektursupport kann
zwar in Hardware, Software oder einer Kombination aus Hardware und
Software bereitgestellt werden, aber Ausgestaltungen, in denen Architektursupport
im Wesentlichen in Hardware bereitgestellt wird, bieten typischerweise
eine höhere
Leistung und den Vorteil von reduzierten Memory-Anforderungen. Aus
diesem Grund wird hierin eine beispielhafte Hardware-Prozessorausgestaltung
beschrieben. Auf der Basis dieser Beschreibung wird die Fachperson
jedoch alternative Ausgestaltungen erkennen können, die in den Umfang der
nachfolgenden Ansprüche
fallen.
-
Der
hierin verwendete Begriff Verschiebungsspeicherbereiniger ist ein
beliebiger Speicherbereiniger, der im Rahmen seines Betriebs Memory-Objekte
verschiebt, einschließlich
z. B. Kopierbereinigern, generationalen Bereinigern und Bereinigern,
die Verdichtung oder Objektverschiebung zum Reduzieren von Fragmentierung
und/oder zur Verbesserung der Lokalität bereitstellen. Echtzeit-
oder Begrenzte-Pausezeit-Implementationen
solcher Verschiebungsspeicherbereiniger werden typischerweise als
Inkremental-Speicherbereinigungssoftwareprozess implementiert, dessen
Berechnungen mit der Benutzerprozessaktivität verschachtelt sind. Die Fachperson
wird jedoch parallel arbeitende Speicherbereinigungsimplementationen
auf der Basis der hierin gegebenen Beschreibung erkennen. Ferner
wird die Fachperson geeignete Modifikationen erkennen, einschließlich der
Bereitstellung von Speicherkapazität zum Identifizieren mehrerer
teilweise verschobener Objekte, um parallele Bereinigungsimplementationen
zu unterstützen.
-
Ausgestaltung
mit virtuellem JAVA-Maschinenanweisungsprozessor
-
1 veranschaulicht eine exemplarische Hardware-Ausgestaltung
eines virtuellen Maschinenanweisungsprozessors 100, nachfolgend
Hardware-Prozessor 100 genannt, der Support für eine Verschiebungsspeicherbereinigung
mit begrenzter Pausezeit gemäß der vorliegenden
Erfindung beinhaltet und der von der Prozessorarchitektur unabhängige virtuelle
JAVA-Maschinenanweisungen direkt ausführt. Die Leistung des Hardware-Prozessors 100 beim
Ausführen
von virtuellen Maschinenanweisungen ist gewöhnlich besser als bei High-End-CPUs
wie dem Intel PENTIUM Mikroprozessor oder dem Sun Microsystems ULTRASPARC
Prozessor (alle SPARC-Warenzeichen werden unter Lizenz verwendet
und sind alle Warenzeichen oder eingetragene Warenzeichen von SPARC
International, Inc. in den Vereinigten Staaten und anderen Ländern. Produkte, die
SPARC-Warenzeichen
tragen, basieren auf einer Architektur, die von Sun Microsystems,
Inc. entwickelt wurde. PENTIUM ist ein Warenzeichen der Intel Corp.
aus Sunnyvale, CA), die dieselben virtuellen Maschinenanweisungen
mit einem Software-JAVA-Interpreter oder einem JAVA-JIT (just-in-time)
Compiler interpretieren. Darüber
hinaus ist der Hardware-Prozessor
kostenarm und hat eine geringe Leistungsaufnahme. Infolgedessen
ist der Hardware-Prozessor 100 für portable Anwendungen gut
geeignet.
-
Da
die Implementation des virtuellen JAVA-Maschinenanweisungsprozessors
im Hardware-Prozessor 100 im Wesentlichen in Hardware vorliegt,
können
25–50
KB Memory Storage, z. B. Festwertspeicher oder Arbeitsspeicher,
die sonst ein Software-Interpreter
benötigen
wurde, eliminert oder alternativ zugeordnet werden. Hardware- Support für Speicherbereinigung
bietet weitere Vorteile für
eine virtuelle JAVA-Maschinenimplementation
mit begrenztem Memory. indem Inline-Code für Speicherbereinigung reduziert
wird (z. B. vom Compiler gelieferter Lese- und/oder Schreibbarrierensupport),
indem eine verbesserte Auslastung von begrenztem Memory erleichtert
oder indem Speicherbereinigungsoverheads und Pausezeiten reduziert
werden. In Umgebungen, bei denen die Kosten eines großen Memory
zu hoch sind, wie z. B. bei einem Internet-Chip für Netzwerkgeräte, einem
Zellulartelefonprozessor, anderen Telekommunikations-ICs oder anderen
kostenarmen Niedrigleistungsanwendungen wie eingebetteten Prozessoren
und portablen Geräten,
ist der Hardware-Prozessor 100 von Vorteil.
-
Selbst
in Umgebungen, wo großer
Memory möglich
ist, reduziert Hardware-Support
für Speicherbereinigung
Overheads in Verbindung mit Barrierenausführungen, erleichtert eine verbesserte
Memory-Auslastung und reduziert Pausezeiten für Verschiebungsspeicherbereinigungsimplementationen.
Insbesondere bietet der Hardware-Prozessor 100 Vorteile
für Speicherbereinigungsverfahren
und -implementationen im Zusammenhang mit einer beispielhaften virtuellen
JAVA-Maschinenimplementation. Auf der Basis der Beschreibung hierin
wird die Fachperson jedoch Variationen für andere virtuelle JAVA-Maschinenimplementationen,
z. B. interpretierte und JIT-Compiler-Implementationen, sowie für andere
virtuelle Nicht-JAVA-Maschinenimplementationen erkennen.
-
Der
hierin verwendete Begriff virtuelle Maschine ist eine abstrakte
Rechenmaschine, die, wie eine echte Rechenmaschine. einen Anweisungssatz
hat und verschiedene Memory-Bereiche benutzt. Eine virtuelle Maschinenspezifikation
definiert einen Satz von von der Prozessorarchitektur unabhängigen virtuellen
Maschinenanweisungen, die von einer virtuellen Maschinenimplementation
ausgeführt
werden können.
Im Allgemeinen kann eine virtuelle Maschinenimplementation in Hardware
(z. B. im Falle des Hardware-Prozessors 100), in Software
(z. B. im Falle von interpretierten und JIT-Compiler-Implementationen)
oder in Hardware und Software ausgeführt werden. Jede virtuelle
Maschinenanweisung definiert einen spezifischen Vorgang, der durchgeführt werden
soll. Die virtuelle Maschine braucht die Computersprache, die zum
Erzeugen von virtuellen Maschinenanweisungen verwendet wird, oder
die zugrunde liegende Implementation der virtuellen Maschine nicht
zu verstehen. Es braucht lediglich ein bestimmtes Format für virtuelle
Maschinenanweisungen verstanden zu werden. In einer beispielhafen
Ausgestaltung sind die virtuellen Maschinenanweisungen virtuelle
JAVA-Maschinenanweisungen. Jede virtuelle JAVA-Maschinenanweisung beinhaltet ein oder
mehrere Bytes, die Anweisungen codieren, die Informationen, Operanden
und andere benötigte
Informationen identifizieren.
-
In
dieser Ausgestaltung verarbeitet der Hardware-Prozessor 100 (1) die virtuellen JAVA-Maschinenanweisungen,
die Bytecodes beinhalten. Der Hardware-Prozessor 100 führt die
meisten der Bytecodes direkt aus. Die Ausführung von einigen der Bytecodes
erfolgt jedoch über
Microcode. Lindholm & Yellin,
The JAVATM Virtual Machine Specification
(Addison-Wesley, 1996), ISBN 0-201-63452-X (hiermit in seiner Gesamtheit durch
Bezugnahme eingeschlossen) beinhaltet einen beispielhaften Satz
von virtuellen JAVA-Maschinenanweisungen. Der besondere Satz von
virtuellen Maschinenanweisungen, die von einem Hardware-Prozessor 100 unterstützt werden,
ist kein wesentlicher Aspekt der vorliegenden Erfindung. Die Fachperson
kann die Erfindung jedoch im Hinblick auf die virtuellen Maschinenanweisungen
für einen
bestimmten Satz von virtuellen Maschinenanweisungen oder Veränderungen
der virtuellen JAVA-Maschinenspezifikation
modifizieren.
-
In
einer Ausgestaltung beinhaltet der Hardware-Prozessor 100 einen
E/A-Bus und eine Memory-Schnittstelleneinheit 110, eine
Anweisungs-Cache-Einheit 120 mit Anweisungs-Cache 125.
eine Anweisungs-Decodiereinheit 130 mit Non-quick-zu-quick-Translator-Cache 131,
eine vereinheitlichte Ausführungseinheit 140,
eine Stapelmanagementeinheit 150 mit Stapel-Cache 155,
eine Daten-Cache-Einheit 160 mit Daten-Cache 165 und
eine Programmzähler-
und Trap-Steuerlogik 170. Support für die hierin beschriebenen Speicherbereinigungsmerkmale
liegt vornehmlich in der Ganzzahleneinheit 142 und dem
Register 144 der Ausführungseinheit 140,
mit etwas zusätzlichem
Support in der Programmzähler-
und Trap-Steuerlogik 170 (einschließlich z. B. Support zum Zwingen
des Programmzählers
zu einer nächsten
virtuellen JAVA-Maschinenanweisung
nach einer Abfangspeicherung). Die einzelnen Einheiten werden nachfolgend
beschrieben. Darüber
hinaus wird eine exemplarische Ausgestaltung des Hardware-Prozessors 100 ausführlicher
in der am 31. Juli 1997 veröffentlichten
PCT WO 9727536 (internationale Anmeldung Nr. PCT/US97/01221) beschrieben.
-
2 veranschaulicht
eine „Aufbau"-Beziehung zwischen
Software- und Hardware-Komponenten einer JAVA-Anwendungsumgebung
wie z. B. einer Anwendungsumgebung, die teilweise auf dem Hardware-Prozessor 100 (1) definiert und teilweise darauf ausgeführt wird.
Die JAVA-Anwendungs-/Applet-Software 210 nutzt Software-Komponenten,
die eine Applet/Anwendungsprogrammierschnittstelle (220) definiert,
die Folgendes beinhaltet: Software-Komponenten für AWT-Klassen 241,
Net- und E/A-Klassen 242 und
JAVA OS Windows 243. JAVA OS Grafik 248, TCP 244,
NFS 245, UDP 246, IP 247, Ethernet 222,
Tastatur 249 und Maus 221, die in einer Ausgestaltung
JAVA-Bytecodes beinhalten. In der Ausgestaltung von 2 beinhalten
die Software-Komponenten JAVA OS Graphik 248 und Ethernet 222 erweiterte
Bytecodes über
diejenigen hinaus, die von der Baseline JAVA Virtual Machine Specification
definiert werden. Komponenten einer eingebetteten Anwendungsprogrammierschnittstelle
(EAPI) 230 beinhalten Grundklassen 231 sowie Hardware-
und Software-Komponenten der virtuellen JAVA-Maschinenimplementation 250 gemäß der JAVA
Virtual Machine Specification.
-
Die
virtuelle JAVA-Maschinenimplementation 250 beinhaltet den
Hardware-Prozessor 100 sowie
darauf ablauffähigen
Trap-Code zum Beurteilen von virtuellen JAVA-Maschinenanweisungen. Darüber hinaus
beinhaltet die virtuelle JAVA-Maschinenimplementation 250 Hardware-Support
für erweiterte
Bytecodes (einschließlich
z. B. Zeigerspeicher-Bytecodes und Memory-Zugriffsbarrieren, die
nachfolgend in Zusammenhang mit Speicherbereinigung beschrieben
werden); Software für
Class-Loader 252, Bytecode-Verifizierer 253, Thread-Manager 354 und
Speicherbereinigung 251 sowie Microkernel 255.
Die virtuelle JAVA-Maschinenimplementation 250 beinhaltet
einen Teil 250a gemäß der JAVA
Virtual Machine Specification sowie implementationsabhängige Teile.
Die JAVA Virtual Machine Specification gibt zwar die Bereitstellung
von Speicherbereinigung vor, aber das jeweils verwendete Speicherbereinigungsverfahren
ist implementationsabhängig.
-
Architekturmerkmale
für Speicherbereinigung,
die hierin im Zusammenhang mit einer beispielhaften Hardware-Prozessor 100 Ausgestaltung
der virtuellen JAVA-Maschinenimplementation 250 beschrieben
sind, sind besonders für
generationale Speicherbereinigungsmethoden adaptiert. Auf der Basis
dieser Beschreibung wird die Fachperson jedoch die Anwendung von
Begrenzte-Pausezeit-Support der vorliegenden Erfindung zum Verschieben
von Bereinigern im Allgemeinen erkennen, einschließlich z.
B. nicht-generationaler Bereinigerimplementationen, inkrementaler
Mark-Compact-Bereinigern,
Kopierbereinigern usw.
-
3 illustriert
mehrere mögliche
Zusätze
zum Hardware-Prozessor 100, um ein komplizierteres System
zu erstellen. Schaltungen, die beliebige der gezeigten acht Funktionen
unterstützen,
d. h. NTSC-Encoder 501, MPEG 502, Ethernet-Controller 503,
VIS 504, ISDN 505, E/A-Controller 506,
ATM-Assembly/Reassembly 507 und Radio-Link 508 können auf
demselben Chip integriert werden wie der erfindungsgemäße Hardware-Prozessor 100.
-
Darüber hinaus
wird die Fachperson eine Reihe verschiedener Computer-Systeme mit
dem Hardware-Prozessor 100 erkennen, einschließlich Ausgestaltungen
des Hardware-Prozessors 100 mit
beliebigen der oben beschriebenen Zusatzschaltungen. Eine exemplarische
Computersystemausgestaltung beinhaltet physikalischen Memory Storage
(z. B RAM und/oder ROM), rechnerlesbare Media-Access-Geräte (z. B.
Platte, CD-ROM, Band und/oder Memory-Technik auf der Basis von rechnerlesbaren
Media-Access-Geräten usw.),
Ein-/Ausgabegeräteschnittstellen
(z. B. Schnittstellen für
Tastatur und/oder Zeigergeräte,
für Display-Geräte usw.)
und Kommunikationsgeräte
und/oder -schnittstellen. Geeignete Kommunikationsgeräte und/oder
-schnittstellen sind u. a. solche für netzwerk- oder telefoniegestützte Kommunikationen, für die Verbindung
mit Telekommunikationsnetzen einschließlich drahtgebundenen und/oder
drahtlosen Teilen eines öffentlichen
Wählnetzes,
eines Privatnetzes usw. In einigen Ausgestaltungen der vorliegenden
Erfindung werden Anweisungsströme
(wie z. B. JAVA-Bytecodes) zur Ausführung durch den Hardware-Prozessor 100 über solche
Kommunikationsgeräte
oder -schnittstellen gesendet und/oder empfangen.
-
Architektursupport für Speicherbereinigung
-
Der
Hardware-Prozessor 100 bietet Hardware-Support für eine Reihe
verschiedener Speicherbereinigungsverfahren einschließlich Verschiebungsbereinigungsmethoden,
die als darauf ablauffähige
Speicherbereinigungssoftware implementiert werden. Insbesondere
beinhaltet der Hardware-Prozessor 100 einen teilweise verschobenen
Objektkennungsspeicher und Barrierensupport. In einigen Ausgestaltungen
beinhaltet der Barrierensupport Schreibbarrierensupport für vom Programmierer
wählbare
Speicherfilterung und/oder Support für Ausführungszeitauflösung von
Speicher-Bytecodes zu zeigerspezifischen Bytecodes, um Zeigerspeicher-Trapping
zu erleichtern.
-
Teilweise
verschobener Obiektkennungsspeicher
-
4A veranschaulicht
eine Ausgestaltung eines teilweise verschobenen Objektkennungsspeichers 410 einschließlich From-Feld 411,
To-Feld 412 und Howfar-Feld 413. 4B zeigt
FromSpace 420 und ToSpace 430 Teile eines Memory
Storage gemäß einem
Kopierbereinigungsverfahren. In einer generationalen Bereinigerimplementation
können
die Teile FromSpace 420 und ToSpace 430 Teilräume einer
einzelnen Generation oder Teile von jeweils jungen bzw. alten Generationsräumen sein.
Alternativ können
die Teile FromSpace 420 und ToSpace 430 Teilräume in einem
nicht generationalen Bereinigungsraum sein. Ferner können die
Teile FromSpace 420 und ToSpace 430 einander überlappen,
können
individuell aneinander grenzend oder nicht aneinander grenzend sein,
brauchen nicht unbedingt von fester Größe zu sein oder feste Positionen
im Memory Storage zu haben. Darüber
hinaus werden in einigen Ausgestaltungen mehrere FromSpace- und To-Space-Teile
unterstützt,
mit geeigneten Modifikationen an teilweise verschobenem Objektkennungsspeicher 410 und
an den hierin beschriebenen Barrieren. 4B veranschaulicht
einen ersten Referenzierungszustand von aktuellen Memory-Objekten
A, B, C und dem großen
Objekt 450 vor dem Kopieren in den ToSpace 430.
Root-Zeigersatz 440 ist für jeden Root-Zeigersatz in
die Referenzierungsstruktur repräsentativ,
z. B. einschließlich
Zeigern, die von Operandenstapel- und/oder Lokalvariablenspeichereinträgen stammen,
die im Stapel-Cache 155 repräsentiert sind.
-
5 veranschaulicht
einen zweiten Referenzierungszustand eines teilweise verschobenen
Objektkennungsspeichers 410, FromSpace 420 und
ToSpace 430 bei der Unterbrechung der Verschiebung eines großen Objekts 450.
Aktuelle Memory-Objekte A und B wurden auf entsprechende Instanzen
A' und B' im ToSpace 430 kopiert.
Nach der Unterbrechung des Kopierens beinhaltet das große Objekt 450 einen
kopierten Teil 551 und einen nicht vollständig kopierten
Teil 552. Inhalt des kopierten Teils 551 des großen Objekts 450 wurde
auf einen entsprechenden Teil 551a einer ToSpace 430 Instanz
des großen
Objekts 450 kopiert. Der ToSpace 430 Speicher
für den
restlichen nicht vollständig
kopierten Teil des großen
Objekts 450 ist als Teil 552a dargestellt. Das
From-Feld 411 identifiziert das große Objekt 450 im FromSpace 420,
das To-Feld 412 identifiziert die entsprechende teilweise
verschobene Instanz 450a des großen Objekts 450, und
das Howfar-Feld 413 identifiziert eine Grenze zwischen
dem kopierten Teil 551 und dem nicht vollständig kopierten Teil 552 des
großen
Objekts 450. Ein überlappendes
Kopierrichtungsfeld (nicht dargestellt) ist fakultativ. In einer
Ausgestaltung beinhaltet ein solches Kopierrichtungsfeld ein Kopierrichtungsbit,
dessen Zustand eine Vorwärts-
oder Rückwärtsrichtung
zum Kopieren von überlappten
FromSpace- und ToSpace-Instanzen beinhaltet. In anderen Ausgestaltungen
wird die Kopierrichtung von den relativen Werten des From-Feldes 411 und
des To-Feldes 412 abgeleitet, wie die Fachperson verstehen
wird.
-
Das
Howfar-Feld 413 zeit den Fortschritt des Kopierens des
großen
Objekts an und/oder aktiviert Schreibbarrierenhardware und einen
teilweise verschobenen Objekt-Trap-Handler,
um auf geeignete Weise Mutatorzugriffe auf ein teilweise kopiertes
großes
Objekt zu handhaben. In der Ausgestaltung von 5 zeigt das
Howfar-Feld 413 die Adresse im Memory der Grenze zwischen
dem kopierten Teil 551 und dem unkopierten Teil 552 an.
Trotzdem wird die Fachperson auf der Basis der vorliegenden Beschreibung
erkennen, dass eine Reihe verschiedener geeigneter alternativer
Codierungen möglich
sind, wie z. B. ein Index weg von der durch das From-Feld 411 angezeigten
Speicherposition, eine Anzeige einer entsprechenden Grenze in der
ToSpace-Instanz 550a des großen Objekts 450 usw.
Das Howfar-Feld 413 codiert eine beliebige solche geeignete
Anzeige.
-
6 zeigt
den teilweise verschobenen Objektkennungsspeicher 410 im
Zusammenhang mit dem Mutatorprozess 610 und dem Speicherbereinigerprozess 620.
In der Ausgestaltung von 6 sind der Mutatorprozess 610 und
der Speicherbereinigungsprozess 620 jeweils durch virtuelle
JAVA-Maschinenanweisungen definiert, die vom Hardware-Prozessor 100 ausgeführt werden
können.
Der Speicherbereinigungsprozess 620 beinhaltet einen beliebigen
Verschiebungsbereiniger. Die nachfolgende Beschreibung bezieht sich
zwar auf den oben mit Bezug auf 5 beschriebenen
Teilraum-Kopierbereiniger, aber die Fachperson wird die Anwendbarkeit
auf andere Verschiebungsbereiniger erkennen. Im Verlaufe des Kopierens
des großen
Objekts 450 vom FromSpace 420 auf den ToSpace 430 liest
der Speicherbereinigungsprozess 620 vom bereinigten Raum 630 und
schreibt darauf.
-
In
einer Ausgestaltung aktualisiert der Speicherbereinigungsprozess 620 das
From-Feld 411 und
das To-Feld 412 zu Beginn des großen Objekts 450 und
kopiert und aktualisiert das Howfar-Feld 413 während eines
solchen Kopierens, so dass nach einer Unterbrechung durch den Mutatorprozess 610 das
Howfar-Feld 413 die Grenze zwischen dem kopierten Teil 551 und
dem unkopierten Teil 552 anzeigt. In Ausgestaltungen für eine parallele
Ausführung
von Mutatorprozess 610 und Speicherbereinigerprozess 620 (z.
B. in einem Multiprozessor) kann das Howfar-Feld 413 gesperrt
werden und die Fachperson wird geeignete Verfahren hierfür erkennen.
Alternative Ausgestaltungen können
bei Bedarf auf inkrementales Aktualisieren des Howfar-Felds 413 zu
Gunsten eines Updates nach einer Unterbrechung verzichten.
-
Der
Mutatorprozess 610 liest von dem Memory und schreibt darauf,
der den bereinigten Raum 630 beinhaltet. In einer Ausgestaltung
beinhaltet der Hardware-Prozessor 100 Support der Ganzzahleneinheit 142 für eine Barriere 660.
die Objektreferenzierinformationen (z. B. objectref) auf Inhalt
des From-Feldes 411, des To-Feldes 412 oder beide vergleicht.
Eine Übereinstimmung
mit dem Inhalt des From-Feldes 411 zeigt an, dass das referenzierte
Objekt die FromSpace 420 Instanz des teilweise verschobenen
großen
Objekts 450 ist. Eine Übereinstimmung
mit Inhalt des To-Feldes 412 zeigt an, dass das referenzierte
Objekt die teilweise kopierte ToSpace 430 Instanz 450a ist. In
einigen Ausgestaltungen wird die Beurteilung des jeweiligen Feldversatzes
in das referenzierte Objekt mit Inhalt des Howfar-Feldes 413 verglichen,
um die Handhabung der Barriere 660 von kopierten und unkopierten
Teilen des referenzierten Objekts zu verfeinern.
-
In
verschiedenen, nachfolgend ausführlicher
beschriebenen Ausgestaltungen beinhaltet die Barriere 660 Schreibbarrierensupport,
der auf teilweise verschobenen Objektkennungsspeicher 410 anspricht.
In einigen Ausgestaltungen beinhaltet die Barriere 660 auch
Lesebarrierensupport, der auf teilweise verschobenen Objektkennungsspeicher 410 anspricht.
In einigen Ausgestaltungen beinhaltet die Barriere 660 Hardware-Lese- und/oder -Schreibbarrierensupport
für Trapping
zu einer teilweise verschobenen Objekt-Trap-Handler-Software, die den Trapping-Zugriff
handhabt (z. B. durch Rundsenden eines Schreibzugriffs, Umleiten
eines Schreibzugriffs, Umleiten eines Lesezugriffs oder Zulassen,
dass ein Zugriff normal beendet wird). In anderen Ausgestaltungen
bietet eine Hardware-Lese- und/oder -Schreibbarriere selbst eine
solche geeignete Handhabung ohne Software-Trap-Handler-Overhead.
-
In
einigen Ausgestaltungen ist eine Begrenzte-Pausezeit-Verschiebung
durch Elemente der Barriere 660 vorgesehen, die ein inkrementales
Kopieren eines großen
und/oder populären
Objektes zulässt,
wobei Zeiger-Updates darauf über
einen Objekt-Referenzier-Handle
erfolgen. In solchen Ausgestaltungen erfolgen Zeiger-Updates selbst
auf populäre
Objekte trivial durch Aktualisieren eines einzigen Zeigers, d. h.
des Objekt-Referenzier-Handle.
In anderen Ausgestaltungen beinhaltet Begrenzte-Pausezeit-Verschiebung durch Elemente
der Barriere 660 Support für inkrementales Aktualisieren
von Zeigern auf ein populäres,
und möglicherweise
großes,
Objekt. Der hierin verwendete Begriff Begrenzte-Pausezeit-Verschiebung
beinhaltet sowohl Kopier- als auch Zeiger-Update. Die Fachperson wird die Anwendbarkeit
der hierin beschriebenen Ausgestaltungen auf Begrenzte-Pausezeit-Verschiebung
von großen
Objekten, auf Begrenzte-Pausezeit-Verschiebung von populären Objekten
und Begrenzte-Pausezeit-Verschiebung auf große, populäre Objekte erkennen. Eine gehandhabte
und ungehandhabte Objektreferenzierung wird nachfolgend ausführlicher
beschrieben.
-
Je
nach der/den Speicherbereinigungsmethode(n), die von einer bestimmten
Ausgestaltung des Hardware-Prozessors 100 unterstützt wird/werden,
kann Schreib- und/oder
Lesebarrierensupport vorgesehen werden, um zu verhindern, dass der
Mutatorprozess 610 den Speicherbereinigerprozess 620 stört, indem
er die Konnektivität
des Memory-Objektreferenzierungsgraphs auf eine Weise ändert, die
das Durchlaufen des Bereinigers stört. In einer Ausgestaltung
des Hardware-Prozessors 100 sind beispielsweise vom Programmierer wählbare Hardware-Schreibbarrieren
für intergenerationale
Zeigerspeicherungen, für
alle Zeigerspeicherungen und für
alle Speicherungen (einschließlich
Support für
gefilterte Barrierenvarianten von allen) vorgesehen.
-
„GENERATIONSISOLATIONSSYSTEM
UND VERFAHREN ZUR SPEICHERBEREINIGUNG"
-
In
einer Ausgestaltung der Barriere 660 ist Unterstützung für solche
zusätzlichen
Barrieren mit der oben beschriebenen Barriere für Speicherungen in einem teilweise
verschobenen großen
Objekt integriert.
-
In
Ausgestaltungen gemäß 1 beinhaltet ein teilweise verschobener
Objekt-Trap-Handler
virtuelle JAVA-Maschinenanweisungs-Bytecodes, die auf dem Hardware-Prozessor 100 ablaufen
können
und die vom Programmzähler
und der Trap-Steuerlogik 170 eingeleitet werden. Speicherbereinigungstraps,
einschließlich z.
B. einem teilweise verschobenen Objekt-Trap, werden ausgelöst, bevor
der Trapping-Schreibvorgang selbst beurteilt wird. Daher emuliert
der teilweise verschobene Objekt-Trap-Handler 650, um zu
verhindern, dass der Prozessor unendlich abfängt, den Trapping-Schreibvorgang
zusammen mit den zusätzlichen
speicherbereinigungsbezogenen Funktionen. In einer Ausgestaltung
zwingt dann die Programmzähler-
und Trap-Steuerlogik 170 den Programmzähler zur nächsten virtuellen JAVA-Maschinenanweisung
nach dem Trapping-Schreibvorgang. Auf der Basis der nachfolgenden
ausführlicheren
Beschreibung wird die Fachperson eine Reihe verschiedener gültiger Verhaltensweisen
für einen
teilweise verschobenen Objekt-Trap-Handler je nach den erzwungenen Einheitlichkeitsrichtlinien
erkennen.
-
Die
Speicherbereinigung wurde zwar oben allgemein mit Bezug auf die
illustrative Ausgestaltung von 6 eines
teilweise verschobenen Objektkennungsspeichers 410 mit
From-Feld 411, To-Feld 412, Howfar-Feld 413 und
im Zusammenhang mit einer Barriere 660 beschrieben, die
potentiell einen teilweise verschobenen Objekt-Trap-Handler beinhaltet,
aber es sind auch verschiedene alternative Ausgestaltungen geeignet.
In vielen dieser alternativen Ausgestaltungen kann ein teilweise
verschobener Objekt-Trap-Handler wegfallen und Mutatorprozess-Zugriffe
können
durch Hardware-Barrierensupport ordnungsgemäß gehandhabt werden, so dass
Overhead in Verbindung mit einem Trap-Handler reduziert wird. Auf der Basis
der nachfolgenden Beschreibung beispielhafter Ausgestaltungen wird
die Fachperson eine Reihe verschiedener zusätzlicher Kombinationen und
Variationen erkennen, die in den Umfang der Ansprüche fallen.
-
Schreibbarriere, die mit
Copy-From-Instunzkennungsspeicherung assoziiert ist
-
7 veranschaulicht
eine Ausgestaltung mit einem Copy-From-Registerfeld mit assoziierter
Schreibbarriere. Insbesondere beinhaltet die Ausgestaltung von 7 das
From-Feld 411 des teilweise verschobenen Objektkennungsspeichers 410 (siehe 4), die Hardware-Schreibbarriere 740 und
den teilweise verschobenen Objekt-Trap-Handler 750. In
der Ausgestaltung von 7 ist das From-Feld 411 in
Registern 144 des Hardware-Prozessors 100 repräsentiert.
Mutatorprozess 610, Speicherbereinigungsprozess 620 und
teilweise verschobener Objekt-Trap-Handler 650 beinhalten
Software, die auf dem Hardware-Prozessor 100 ablaufen kann.
Diese Ausgestaltung erleichtert das inkrementale Kopieren großer Objekte.
Ohne zusätzlichen
Support ist diese Ausgestaltung jedoch nicht für ein inkrementales Update
von großen
Zahlen von Zeigern auf die ToSpace 430 Instanz eines populären verschobenen
Objektes geeignet. Trotzdem reduziert eine solche Ausgestaltung
für Speicherbereinigungssysteme,
in denen Objekte beispielsweise über
Handles referenziert werden, wie unten mit Bezug auf 17 beschrieben wird, Hardware-Anforderungen und
ist für
eine Begrenzte-Pausezeit-Verschiebung geeignet, da das Aktualisieren
eines einzigen Handles auf die ToSpace 430 Instanz trivial sein
kann.
-
Der
Mutatorprozess 610 macht Lese- und Schreibzugriffe von
und zu dem bereinigten Raum 630. Lesezugriffe bleiben durch
Speicherbereinigungssupport unbetroffen. Schreibzugriffe werden
jedoch von der Hardware-Schriebbarriere 740 selektiv abgefangen.
Die Hardware-Schreibbarriere 740 löst den teilweise verschobenen
Objekt-Trap-Handler 750 als
Reaktion auf eine Übereinstimmung
zwischen dem Inhalt des From-Feldes 411 und
dem Ziel objectref aus, das mit dem Schreibzugriff 701 assoziiert
ist. In dieser Ausgestaltung ermittelt der teilweise verschobene
Objekt-Trap-Handler 750, oder führt bei Bedarf, Memory Storage für die Copy-To-Zielinformationen
wie z. B. die, die sonst im To-Feld 412 gespeichert werden.
Darüber
hinaus kann die Speicherbereinigungssoftware bei Bedarf einen Speicherkapazität für Howfar-Informationen wie
die führen,
die sonst im Howfar-Feld 413 gespeichert werden. Wenn der
Mutatorprozess 610 auf die FromSpace 420 Instanz
des großen
Objektes speichert, dann werden Speicherdaten entweder zur Copy-from-Instanz 450 und
zur Copy-to-Instanz 450A rundgesendet oder, in Ausgestaltungen,
die Speicherkapazität
für Howfar-Informationen
bereitstellen, der Howfar-Speicher wird inspiziert und die Speicherdaten
werden zu beiden Instanzen rundgesendet. wenn das Stored-to-Feld
des großen
Objektes bereits kopiert wurde, und ansonsten zur Copy-from-Instanz 450 geleitet.
Die Fachperson wird eine Reihe verschiedener Methoden erkennen,
mit denen der Speicherbereinigungsprozess 620 das To- Feld und das Howfar-Feld
aktualisieren und Variablen 751 speichern kann, die für den teilweise
verschobenen Objekt-Trap-Handler 750 zur Verfügung stehen.
Das Update 701 erfolgt mit einer beliebigen solchen geeigneten
Methode.
-
Wie
oben beschrieben, aktualisiert der Speicherbereinigungsprozess 620 das
From-Feld 411 des
teilweise verschobenen Objektkennungsspeichers 410, um
die Copy-from-Instanz 450 des
großen
Objektes zu identifizieren. In dieser Ausgestaltung stehen dem Mutatorprozess 610 Zeiger
auf die Copy-to-Instanz erst dann zur Verfügung, wenn der Handle für das große Objekt
nach Abschluss des Kopierens aktualisiert wurde. Daher braucht keine
Barriere für
Zugriffe auf die Copy-to-Instanz 450A geführt zu werden.
Diese Ausgestaltung ist nicht für überlappte
Copy-from- und Copy-to-Instanzen konfiguriert; Support für überlappte
Instanzen ist jedoch für
viele verschobene Bereinigermethoden nicht notwendig, wie z. B.
für generationale
Säuberungs- oder
Kopierbereinigungsmethoden.
-
In
einer Ausgestaltung wird eine Hardware-Schreibbarriere 740 durch
die Logik der Ganzzahleneinheit 142 (1)
bereitgestellt, die zum Beurteilen eines speicherungsorientierten
Bytecodes verantwortlich ist (z. B. putfield_quick, putfield, aastore,
usw.). In einer solchen Ausgestaltung fängt Logik, die die Hardware-Schreibbarriere 740 implementiert,
Schreibvorgänge
auf die Copy-from-Instanz, die durch Inhalt des From-Feldes 411 identifiziert
wird. So wird beispielsweise das gewünschte Verhalten der Hardware-Schreibbarriere 640A durch
die folgenden Logikgleichungen beschrieben:
if (objectref ==
FROM) then
generate gc_notify
wobei gc_notify ein beispielhafter
Trap-Handler ist. Die Fachperson wird eine Reihe verschiedener geeigneter Logikimplementationen
einschließlich
solcher erkennen, die andere Schreibbarrierenfunktionen wie z. B.
intergenerationales Zeigerspeicher-Trapping wie oben beschrieben kombinieren.
Howfar-Informationen können
bei Bedarf als Howfar-Feld 413 in Registern 144 bereitgestellt
werden (siehe 4, in 7 nicht
zu sehen), um ein Trapping durch die Hardware-Schreibbarriere 740 besser
nur auf diejenigen Situationen maßzuschneidern, in denen eine
Rundsendung notwendig ist, um dadurch Overheads in Verbindung mit
Aufrufen des teilweise verschobenen Objekt-Trap-Handlers 750 zu
reduzieren.
-
8 veranschaulicht
eine Ausgestaltung mit einem Copy-to-Registerfeld (z. B. dem To-Feld 412)
zusätzlich
zu einem Copy-from-Registerfeld (z. B. From-Feld 411) mit
assoziierter Schreibbarriere 840. Die Ausgestaltung von 8 stellt
eine Schreibbarriere für
Speicherungen auf Felder eines Objekts bereit, das durch den Inhalt
des From-Feldes 411 identifiziert wird, und eliminiert
vorteilhafterweise den teilweise verschobenen Objekt-Trap-Handler 750 und
seine assoziierten Overheads. Diese Ausgestaltung erleichtert inkrementales (begrenzte
Pausezeit) Kopieren von großen
Objekten, ist aber wie die von 7 nicht
gut für
ein Begrenzte-Pausezeit-Update von großen Zahlen von Zeigern auf
die ToSpace 430 Instanz eines kopierten Objektes geeignet.
Wie zuvor, können
gehandhabte Objektreferenzen diese Begrenzung mildern und eine allgemeine Begrenzte-Pausezeit-Verschiebung sogar
von populären
großen
Objekten zulassen, wenn auch auf Kosten eines zusätzlichen
Indirektionsniveaus.
-
Durch
Führen
eines Copy-to-Registerfeldes in Hardware, z. B. als To-Feld
412 in
Registern
144, können
Schreibzugriffe auf die Copy-from-Instanz sowohl zur Copy-from- als auch zur Copy-to-Instanz
durch die Hardware-Schreibbarriere
840 ohne Software-Trap-Handler-Eingriff
rundgesendet werden. In einer Ausgestaltung wird die Hardware-Schreibbarriere
840 durch
Logik der Ganzzahleneinheit
142 (
1)
bereitgestellt, die für
die Beurteilung eines speicherungsorientierten Bytecodes verantwortlich
ist. In einer solchen Ausgestaltung sendet die die Hardware-Schreibbarriere
840 implementierende
Logik store_data sowohl zur Copy-from- als auch zur Copy-to-Instanz
rund, die jeweils durch objectref und Inhalt des To-Feldes
412 identifiziert
werden. Eine beispielhafte Hardware-Schreibbarriere
840 wird
durch die folgenden Logikgleichungen beschrieben:
wobei offset der Relativzeiger
in das große
Objekt des Zielfeldes ist, das mit dem speicherungsorientierten Bytecode
assoziiert ist. Die Fachperson wird eine Reihe verschiedener geeigneter
Logikimplementationen wie z. B. solche erkennen, die andere Schreibbarrierenfunktionen
wie z. B. intergenerationales Zeigerspeicher-Trapping wie oben beschrieben
kombinieren. Da das To-Feld
412 für die Hardware-Schreibbarriere
840 zur
Verfügung
steht, erfolgt das Rundsenden in Hardware, und Software-Trap-Overhead
wird eliminiert.
-
9 veranschaulicht
eine Ausgestaltung mit Copy-to- und Howfar-Registerfeldern (z. B.
To-Feld 412 und Howfar-Feld 413) zusätzlich zum
Copy-from-Registerfeld (z. B. From-Feld 411) mit assoziierter
Hardware-Schreibbarriere 940. Die Ausgestaltung von 9 sieht
eine Schreibbarriere für
Speicherungen auf Felder eines Objektes vor, das durch den Inhalt
des From-Feldes 411 identifiziert wird, und lässt es vorteilhafterweise
zu, dass die Hardware-Schreibbarriere 940 auf das Rundsenden
von Speicherungen auf einen noch nicht kopierten Teil des großen Objektes
verzichtet, während
der teilweise verschobene Objekt-Trap-Handler 650 und
seine assoziierten Overheads entfallen. Wie die obigen Ausgestaltungen,
so erleichtert diese Ausgestaltung ein inkrementales Kopieren von
großen
Objekten, ist aber nicht gut für
ein Begrenzte-Pausezeit-Update von großen Zahlen von Zeigern auf
die ToSpace 430 Instanz eines kopierten Objektes geeignet.
Wie zuvor, können
gehandlete Objektreferenzen diese Begrenzung mildern, so dass allgemeine
Begrenzte-Pausezeit-Verschiebungen
sogar von populären
großen
Objekten möglich
sind, wenn auch auf Kosten eines zusätzlichen Indirektionsniveaus.
-
Durch
Führen
eines Copy-to-Registerfeldes in Hardware, z. B. als To-Feld
412 in
Registern
144, können
Schreibzugriffe auf die Copy-from-Instanz von der Hardware-Schreibbarriere
940 sowohl
zur Copy-from- als auch zur Copy-to-Instanz rundgesendet werden.
Indem ferner ein Howfar-Registerfeld in Hardware geführt wird,
z. B. als Howfar-Feld
413 in
Registern
144, kann das Rundsenden auf diejenigen Schreibzugriffe
begrenzt werden, für
die das jeweilige Zielfeld des Schreibzugriffs bereits auf ToSpace
430 kopiert
wurde. In jedem Fall erfolgt das Handling des Schreibzugriffs auf
das teilweise verschobene Objekt ohne Software-Trap-Handler-Eingriff.
In einer Ausgestaltung wird die Hardware-Schreibbarriere
940 durch
Logik der Ganzzahleneinheit
142 (
1)
bereitgestellt, die für
das Beurteilen eines speicherungsorientierten Bytecodes verantwortlich
ist. In einer solchen Ausgestaltung sendet die Hardware-Schreibbarriere
940 implementierende
Logik store_data sowohl zur Copy-from- als auch zur Copy-to-Instanz
rund, wenn das Zielobjektfeld in einem bereits kopierten Teil des
großen
Objektes ist, und leitet store_data zur Copy-from-Instanz, wenn
das Zielobjektfeld in einem noch nicht kopierten Teil des großen Objektes
ist. Eine beispielhafte Hardware-Schreibbarriere
940 wird
durch die folgenden Logikgleichungen beschrieben:
wobei offset der Relativzeiger
in das große
Objekt des Zielfeldes ist, das mit dem speicherungsorientierten Bytecode
assoziiert ist. In einigen Ausgestaltungen kann das Leiten von store_data
zur Copy-from-Instanz einfach dadurch erzielt werden, dass zugelassen
wird, dass der Schreibzugriff normal ohne Intervention der Hardware-Schreibbarriere
940 vollendet
wird. Die Fachperson wird eine Reihe verschiedener geeigneter Logikimplementationen
wie z. B. solche erkennen, die andere Schreibbarrierenfunktionen
wie intergenerationales Zeigerspeicher-Trapping wie oben beschrieben
kombinieren. Da das Howfar-Feld
413 für die Hardware-Schreibbarriere
940 zur
Verfügung
steht, kann die Hardware-Schreibbarriere
940 selektiv auf
das Schreiben von store_data auf die Copy-to-Instanz verzichten.
Diese geringfügige
Optimierung kann die Leistung verbessern, da nur ein einziger Schreibvorgang
durchgeführt
wird, anstatt zwei Schreibvorgänge
rundzusenden.
-
Schreibbarriere in Verbindung
mit Copy-from- und Copy-to-Instanzkennungsspeichern
-
Zusätzliche
Ausgestaltungen werden nunmehr mit Bezug auf die 10 und 11 beschrieben.
Wie einige der zuvor beschriebenen Ausgestaltungen, nutzen diese
zusätzlichen
Ausgestaltungen Hardware-Support (z. B. eine Hardware-Schreibbarriere
und den teilweise verschobenen Objekt-Kennungsspeicher 410),
um Schreibvorgänge
auf die FromSpace 420 Instanz eines teilweise verschobenen
großen
Objektes ohne Software-Trap-Handler-Eingriff
angemessen zu handhaben. Darüber
hinaus haben diese zusätzlichen
Ausgestaltungen jedoch eine Barriere für Schreibvorgänge auf
die ToSpace 430 Instanz eines teilweise verschobenen großen Objekts.
Auf diese Weise unterstützen
diese zusätzlichen
Ausgestaltungen sowohl inkrementales Kopieren eines großen Objektes
als auch ein inkrementales Update von Zeigern auf ein populäres Objekt
für insgesamt
Begrenzte-Pausezeit-Verschiebung von großen und/oder populären Objekten
ohne gehandlete Objektreferenzen.
-
In
den Ausgestaltungen der 10 und 11 aktualisiert
der Speicherbereinigungsprozess 620 inkremental Zeiger
(d. h. objectrefs) auf das große
Objekt. Schreibzugriffe des Mutatorprozesses 610 auf die FromSpace 420 Instanz
oder die ToSpace 430 Instanz werden von einer Hardware-Schreibbarriere,
z. B. der Hardware-Schreibbarriere 1040 oder der Hardware-Schreibbarriere 1140,
rundgesendet (oder auf geeignete Weise geleitet), so dass die beiden
Instanzen „synchron" gehalten werden,
während
die objectrefs aktualisiert werden. Da die beiden Instanzen synchron
gehalten werden, ist die Memory-Referenzierungsstruktur
für Referenzierungszustände robust,
in denen sich einige objectrefs auf eine FromSpace 420 Instanz
und andere auf die entsprechende ToSpace 430 Instanz beziehen.
Das Begrenzte-Pausezeit-Update von objectrefs, die sich auf das
große
Objekt beziehen, erfolgt durch inkrementales Aktualisieren solcher
objectrefs, so dass sie sich auf die ToSpace 430 Instanz
(anstatt auf die FromSpace 420 Instanz) beziehen. Man beachte, dass
in den Ausgestaltungen der 10 und 11 die
FromSpace 420 Instanz und die ToSpace 430 Instanz
einander nicht überlappen
dürfen.
-
Mit
Bezug auf 10, die Hardware-Schreibbarriere 1040 bietet
eine Barriere für
Schreibzugriffe auf die Copy-from-Instanz 450 oder die
Copy-to-Instanz 450A. Die Hardware-Schreibbarriere 1040 unterstützt inkrementales
Begrenzte-Pausezeit-Kopieren, wie oben mit Bezug auf die Hardware-Schreibbarriere 840 beschrieben
wurde. Die Hardware-Schreibbarriere 1040 spricht jedoch
auch auf das Copy-to-Registerfeld (z. B. auf das To-Feld 412)
an. Schreibzugriffe auf die Copy-from-Instanz 450 oder
die Copy-to-Instanz 450A werden sowohl
zur Copy-from-Instanz 450 als auch zur Copy-to-Instanz 450A rundgesendet,
so dass die Datenzustände
der beiden Instanzen synchronisiert werden. Auf diese Weise können objectrefs
auf das teilweise verschobene große Objekt inkremental aktualisiert
werden, da ein Lesezugriff auf eine der beiden Instanzen sich auf
denselben Feldzustand auflöst.
-
In
einer Ausgestaltung wird die Hardware-Schreibbarriere
1040 durch
Logik der Ganzzahleneinheit
142 (
1)
bereitgestellt, die zum Beurteilen eines speicherungsorientierten
Bytecodes verantwortlich ist. In einer solchen Ausgestaltung sendet
die die Hardware-Schreibbarriere
1040 implementierende
Logik store_data jeweils zur Copy-from- und zur Copy-to-Instanz
rund, die jeweils durch den Inhalt des From-Feldes
411 und des To-Feldes
412 identifiziert
werden. Eine beispielhafte Hardware-Schreibbarriere
1040 wird durch die
nachfolgenden Logikgleichungen beschrieben:
wobei offset der Relativzeiger
in das große
Objekt des Zielfeldes ist, das mit dem speicherungsorientierten Bytecode
assoziiert ist. Die Fachperson wird eine Reihe verschiedener geeigneter
Logikimplementationen wie z. B. solche erkennen, die andere Schreibbarrierenfunktionen
wie intergenerationales Zeigerspeicher-Trapping wie oben beschrieben
kombinieren. Da das From-Feld
411 und das To-Feld
412 für die Hardware-Schreibbarriere
1040 zur
Verfügung
stehen. können
Speicherungen auf die Copy-from-Instanz
450 oder
die Copy-to-Instanz
450A, die jeweils dadurch identifiziert
werden, erkannt werden, und die Rundsendung zu beiden Instanzen
kann in Hardware ohne Software-Trap-Overhead erfolgen.
-
11 zeigt
eine Ausgestaltung, in der ein How-Far-Registerfeld (z. B. Howfar- Feld 413)
und eine Modusanzeige (z. B. das Mode-Feld 1114 der Register 114)
hinzukommen. Wie in der Ausgestaltung von 10, bildet
die Hardware-Schreibbarriere 1140 eine Barriere für Schreibzugriffe
auf die Copy-from-Instanz 450 oder die Copy-to-Instanz 450A.
Die Hardware-Schreibbarriere 1140 unterstützt inkrementales
Begrenzte-Pausezeit-Kopieren,
indem sie gewährleistet,
dass kopierte Teile der FromSpace 420 und der ToSpace 430 Instanz synchron
gehalten werden. Die Hardware-Schreibbarriere 1140 lässt es vorteilhafterweise
zu, dass der Hardware-Prozessor 100 auf ein Rundsenden
von Speicherdaten zu einem noch nicht kopierten Teil des großen Objektes
während
einer Kopierphase verzichtet, die in der Ausgestaltung von 11 durch
einen COPY Zustand des Mode-Feldes 1114 angedeutet wird.
Während
einer Zeiger-Update-Phase, die durch einen PTR_UPDATE-Zustand des
Mode-Feldes 1114 angedeutet wird, werden jedoch Schreibzugriffe
auf die Copy-from-Instanz 450 oder die Copy-to-Instanz 450A sowohl
zur Copy-from-Instanz 450 als auch zur Copy-to-Instanz 450A rundgesendet.
Der Speicherbereinigungsprozess 620 aktualisiert das Mode-Feld 1114,
so dass es einer aktuellen Phase einer Verschiebung eines großen Objekts
entspricht.
-
In
einer Ausgestaltung wird die Hardware-Schreibbarriere
1140 durch
die Logik der Ganzzahleneinheit
142 (
1)
bereitgestellt, die zum Beurteilen eines speicherungsorientierten
Bytecodes verantwortlich ist. In einer solchen Ausgestaltung sendet
die Hardware-Schreibbarriere
1140 implementierende Logik
store_data sowohl zur Copy-from- als auch zur Copy-to-Instanz rund,
wenn das Zielobjektfeld in einem bereits kopierten Teil des großen Objektes
ist oder wenn das große
Objekt bereits vollständig
kopiert wurde und die Verschiebung in eine Zeiger-Update-Phase eingetreten
ist. Während
der Kopierphase leitet die Hardware-Schreibbarriere
1140 implementierende
Logik store_data zur Copy-from-Instanz, wenn das Zielobjektfeld
in einem noch nicht kopierten Teil des großen Objektes ist. Eine beispielhafte
Hardware-Schreibbarriere
1140 wird durch die folgenden
Logikgleichungen beschrieben:
wobei
der Zustand des Mode-Feldes
1114, MODE, eine Verschiebungsphase
anzeigt (z. B. COPY oder PTR_UPDATE), und offset der Relativzeiger
in das große
Objekt des Zielfeldes ist, das mit dem speicherungsorientierten
Bytecode assoziiert ist. Die Fachperson wird eine Reihe verschiedener
geeigneter Logikimplementationen wie z. B. solche erkennen, die
andere Schreibbarrierenfunktionen wie intergenerationales Zeigerspeicher-Trapping wie oben
beschrieben kombinieren. Da das Howfar-Feld
413 und das
Mode-Feld
1114 für
die Hardware-Schreibbarriere
1140 zur Verfügung stehen,
kann die Hardware-Schreibbarriere
1140 selektiv
auf das Schreiben von store_data auf die Copy-to-Instanz während der
Kopierphase einer großen
Objektverschiebung verzichten, während
Schreibvorgänge
in der Zeiger-Update-Phase rundgesendet werden. Diese geringfügige Optimierung
kann die Leistung verbessern, indem nur ein einziger Schreibvorgang
durchgeführt
wird, anstatt zwei Schreibvorgänge
in der Kopierphase rundzusenden. Darüber hinaus kann der Verschiebungsmodus
dadurch angezeigt werden, dass zugelassen wird, dass der Speicherbereinigungsprozess
620 die
Vollendung der Kopierphase in einem Zustand des Howfar-Feldes
413 codiert.
Die Fachperson wird erkennen, dass in den obigen Logikgleichungen
ein Wert im Howfar-Feld
413 von gleich oder kleiner als
null (0) verwendet werden kann, um die Vollendung der Kopierphase
zu codieren, wodurch das Mode-Feld
1114 überflüssig wird.
-
Lese- und Schreibbarrieren
in Verbindung mit dem Copy-from-Instanzkennungspeicher
-
Es
werden nun zusätzliche
Ausgestaltungen mit Bezug auf die 12–14 beschrieben.
Wie einige der zuvor beschriebenen Ausgestaltungen, so nutzen diese
zusätzlichen
Ausgestaltungen Hardware-Support (z. B. eine Hardware-Schreibbarriere
und den teilweise verschobenen Objektkennungsspeicher 410),
um Schreibvorgänge
auf die FromSpace 420 Instanz eines teilweise verschobenen
großen
Objektes angemessen zu handhaben. Diese zusätzlichen Ausgestaltungen haben
jedoch auch eine Barriere für
Lesevorgänge
von einer FromSpace 420 Instanz eines teilweise verschobenen
großen
Objekts. Auf diese Weise unterstützen
diese zusätzlichen
Ausgestaltungen Begrenzte-Pausezeit-Kopieren
sowie Begrenzte-Pausezeit-Updates von Zeigern auf das große Objekt
ohne gehandlete Objektreferenzen.
-
In
den Ausgestaltungen der 12–14 kopiert
der Speicherbereinigungsprozess 620 inkremental das große Objekt
von einer FromSpace 420 Instanz auf eine ToSpace 430 Instanz
während
einer Kopierphase (MODE = COPY) und aktualisiert inkremental Zeiger
(d. h. objectrefs) auf das große
Objekt während
einer Zeiger-Update-Phase (MODE = PTR_UPDATE). Während der Kopierphase der Verschiebung
des großen
Objekts werden Schreibzugriffe des Mutatorprozesses 610 auf
die FromSpace 420 Instanz rundgesendet oder auf geeignete
Weise von einem teilweise verschobenen Objekt-Trap-Handler z. B.
dem teilweise verschobenen Objekt-Trap-Handler 120 (12)
oder durch eine Hardware- Schreibbarriere
wie z. B. die Hardware-Schreibbarriere 1340 (13)
oder die Hardware-Schreibbarriere 1440 (14)
geleitet. Während
der Zeiger-Update-Phase der Verschiebung eines großen Objekts
werden Schreib- und Lesezugriffe des Mutatorprozesses 610 auf
die FromSpace 420 Instanz zur ToSpace 430 Instanz
umgeleitet.
-
12 veranschaulicht
eine Ausgestaltung mit einem Copy-from-Registerfeld mit assoziierten
Lese- und Schreibbarrieren. Insbesondere beinhaltet die Ausgestaltung
von 12 das From-Feld 411, die Hardware-Lesebarriere 1242,
die Hardware-Schreibbarriere 1241 und den teilweise verschobenen
Objekt-Trap-Handler 1250. Die Hardware-Lesebarriere 1242 und die Hardware-Schreibbarriere 1241 sind
illustrativ als Lese- und Schreibbarrieren-Hardware 1240 dargestellt.
Je nach der Implementation können
die Hardware-Schreibbarriere 1241 und die Hardware-Lesebarriere 1242 jedoch
auch Hardware gemeinsam nutzen oder können auf separater Hardware
basieren. In einer Ausgestaltung beinhaltet Logik der Ganzzahleneinheit 142 (1), die zum Beurteilen von speicherungsorientierten
Bytecodes verantwortlich ist, die Hardware-Schreibbarriere 1241,
und Logik der Ganzzahleneinheit 142, die zum Beurteilen
von ladungsorientierten Bytecodes verantwortlich ist (z. B. getfield_quick,
getfield, aaload, usw.), hat die Hardware-Lesebarriere 1242.
-
Der
Mutatorprozess 610 führt
Lese- und Schreibzugriffe von und zu dem bereinigten Raum 630 durch. Ein
bestimmter Lese- oder Schreibzugriff wird von der Lese- und Schreibbarrieren-Hardware 1240 selektiv
abgefangen, wenn der Lese- oder Schreibzugriff die FromSpace 420 Instanz
eines teilweise verschobenen Objekts anpeilt. Lese- und Schreibbarrieren-Hardware 1240 triggert
den teilweise verschobenen Objekt-Trap-Handler 1250 als Reaktion
auf eine Übereinstimmung
zwischen dem Inhalt des From-Feldes 411 und dem
Ziel objectref, das mit dem Schreibzugriff 701 oder dem
Lesezugriff 1202 assoziiert ist. In einer Ausgestaltung
spricht die Lese- und Schreibbarrieren-Hardware 1240 auf
ein Mode-Feld 1114 der Register 144 an, wodurch
das Verhalten der Hardware-Lesebarriere 1242 auf
der Basis des Zustands des Mode-Feldes 1114 geändert wird.
In einer solchen Ausgestaltung fängt
die Hardware-Lesebarriere 1242 selektiv nur während der Zeiger-Update-Phase
der Verschiebung eines großen
Objekts ab.
-
Eine
beispielhafte Hardware-Schreibbarriere 1241 wird durch
die folgenden Logikgleichungen beschrieben:
if (objectref ==
FROM) then
generate gc_notify
wobei gc_notify ein Trap-Handler
wie z. B. der teilweise verschobene Objekt-Trap-Handler 1250 ist.
Die Fachperson wird eine Reihe verschiedener geeigneter Logikimplementationen
wie z. B. solche erkennen, die andere Schreibbarrierenfunktionen
wie intergenerationales Zeigerspeicher-Trapping wie oben beschrieben
kombinieren. Eine beispielhafte Hardware-Lesebarriere 1242 wird durch
die folgenden Logikgleichungen beschrieben:
if ((MODE == PTR_UPDATE) && (objectref ==
FROM)) then
generate gc_notify
-
Alternative
Ausgestaltungen können
selektiv während
der Kopier- und Zeiger-Update-Phasen
der Verschiebung eines großen
Objekts mit entsprechendem Handling durch den teilweise verschobenen
Objekt-Trap-Handler 1250 abfangen, obwohl dies auf Kosten
eines größeren Trap-Handler-Overheads
geht.
-
Während der
Kopierphase ermittelt der teilweise verschobene Objekt-Trap-Handler 1250 oder
führt bei Bedarf
Memory Storage für
Copy-to-Zielinformationen wie die, die sonst im To-Feld 412 gespeichert
werden. Darüber
hinaus kann der teilweise verschobene Objekt-Trap-Handler 1250 bei
Bedarf einen Speicher für Howfar-Informationen
wie die führen,
die sonst im Howfar-Feld 413 gespeichert werden. Wenn der
Mutatorprozess 610 auf die FromSpace 420 Instanz
des großen
Objektes speichert, dann werden Speicherdaten entweder sowohl zur
Copy-from-Instanz 450 als auch zur Copy-to-Instanz 450A rundgesendet
oder, in Ausgestaltungen, die Speicher für Howfar-Informationen bereitstellen,
der Howfar-Storage wird inspiziert und die Speicherdaten werden
zu beiden Instanzen rundgesendet, wenn das Stored-to-Feld des großen Objektes
bereits kopiert wurde, und ansonsten zur Copy-from-Instanz 450 geleitet.
-
Während der
Zeiger-Update-Phase leitet der teilweise verschobene Objekt-Trap-Handler 1250 Lese- und
Schreibzugriffe, die eine FromSpace 420 Instanz eines teilweise
verschobenen großen
Objektes zur ToSpace 430 Instanz davon anpeilen. Wie zuvor,
ermittelt der teilweise verschobene Objekt-Trap-Handler 1250, oder
führt bei
Bedarf Memory Storage für
die Copy-to-Zielinformationen wie z. B. die, die sonst im To-Feld 412 gespeichert
werden. In jedem Fall leitet der teilweise verschobene Objekt-Trap-Handler 1250 sowohl
Lese- als auch Schreibzugriffe zur ToSpace 430 Instanz
um. Auf diese Weise geht ein Lesezugriff auf das teilweise verschobene
Objekt auf die ToSpace 430 Instanz, die garantiert auf
dem neuesten Stand ist.
-
Beispielhafte
Schreib-Trap- und Lese-Trap-Funktionen für den teilweise verschobenen
Objekt-Trap-Handler
1250 lauten wie folgt:
wobei read_destination der
Zielort für
einen ladungsorientierten Bytecode ist.
-
Im
Allgemeinen wird Overhead aufgrund von Trapping für den Lesebarrierenfall
wahrscheinlich größer sein
als das in dem Fall, in dem nur eine Schreibbarriere vorhanden ist,
weil Lesezugriffe typischerweise üblicher sind als Schreibzugriffe
in einem bestimmten Anweisungsstrom und in jedem Fall zusätzlich zu
Schreibzugriffen erfolgen. Teilweise aus diesem Grund ist die Hardware-Lesebarriere
1242 für Lesevorgänge in der Zeiger-Update-Phase von der FromSpace
420 Instanz
des teilweise verschobenen großen
Objekts selektiv. Die Hardware-Lesebarriere
1242 kann jedoch
bei Bedarf Lesevorgänge
von der FromSpace
420 Instanz des teilweise verschobenen
großen
Objekts unabhängig
von der Verschiebungsphase abfangen. In einer solchen Ausgestaltung
kann der teilweise verschobene Objekt-Trap-Handler
1250 so
konfiguriert sein, dass er eine überlappende
Copy-from-Instanz
450 und Copy-to-Instanz
450A intelligent
handlet.
15 illustriert eine Überlappung
der From-Instanz
1560 und der To-Instanz
1570,
wobei ein kopierter Teil
1561 auf den Teil
1571 der
To-Instanz
1570 kopiert wurde. Das From-Feld
411,
das To-Feld
412 und
das Howfar-Feld
413 codieren den teilweise verschobenen
Objektzustand wie oben beschrieben. In der Ausgestaltung von
15 kopiert
der Speicherbereinigungsprozess
620 das große Objekt
von hinten nach vorne (oder von vorne nach hinten), je nach der
relativen Überlappung
der From-Instanz
1560 und der To-Instanz
1570.
Um überlappte
From- und To-Instanzen zu erleichtern, sendet der teilweise verschobene
Objekt-Trap-Handler
1550 Schreibvorgänge nicht rund und leitet stattdessen
einen auf den nicht kopierten Teil
1560 gerichteten Schreibvorgang
zur From-Instanz
1560 und leitet einen auf den kopierten
Teil
1561 gerichteten Schreibvorgang zur To-Instanz
1570.
Eine geeignete Modifikation zur Schreib-Trap-Funktion des teilweise
verschobenen Objekt-Trap-Handlers
1250 lautet wie folgt:
wobei
COPY_DIRECTION anhand der relativen Positionen der From-Instanz
1560 und
der To-Instanz
1570 ermittelbar sind, die jeweils durch
das From-Feld
411 und das To-Feld
412 codiert
sind. Modifikationen zur Lese-Trap-Funktion des teilweise verschobenen
Objekt-Trap-Handlers
1250, um die ladungsorientierten Zugriffe entsprechend
umzuleiten, sind analog.
-
13 veranschaulicht
eine Ausgestaltung mit einem Copy-to-Registerfeld (z. B. das To-Feld 412)
zusätzlich
zu einem Copy-from-Registerfeld (z. B. das From-Feld 411)
mit assoziierter Lese- und Schreibbarrieren-Hardware 1340.
Wie zuvor, beinhaltet diese Ausgestaltung eine Modusanzeige (z.
B. Mode-Feld 1114 der Register 144), die vom Speicherbereinigungsprozess 620 geführt wird,
damit Lese- und Schreibbarrieren-Hardware 1340 zwischen
einer Kopierphase und einer Zeiger-Update-Phase einer Verschiebung
eines großen
Objekts unterscheiden können.
Im Vergleich zur Ausgestaltung von 12 bietet
die von 13 sowohl Lesebarrieren- als
auch Schreibbarrierensupport in Hardware (z. B. als Hardware-Lesebarriere 1342 für Speicherungen
auf Felder eines Objektes, das durch den Inhalt des From-Feldes 411 identifiziert
wird, und eine Hardware-Schreibbarriere 1341 für Speicherungen
auf Felder eines Objektes, das durch den Inhalt des From-Feldes 411 identifiziert
wird), wodurch vorteilhafterweise teilweise verschobener Objekt-Trap-Handler 1250 und
seine assoziierten Overheads eliminiert werden.
-
Durch
Führen
eines Copy-to-Registerfeldes in Hardware, z. B. als To-Feld 412 in
Registern 144, können
Schreibzugriffe auf die Copy-from-Instanz während einer Kopierphase (MODE
= COPY) sowohl auf die Copy-from- als auch die Copy-to-Instanz durch
die Hardware-Schreibbarriere 1341 ohne Software-Trap-Handler-Eingriff
rundgesendet werden. Während
einer Zeiger-Update-Phase (MODE = PTR_UPDATE) werden Schreibzugriffe
auf die Copy-from-Instanz durch die Hardware-Schreibbarriere 1341 zur
Copy-to-Instanz umgeleitet, wiederum ohne Software-Trap-Handler-Eingriff.
Lesezugriffe von der Copy-from-Instanz werden ebenfalls während der
Zeiger-Update-Phase
durch die Hardware-Lesebarriere 1342 ohne Software-Trap-Handler-Eingriff
zur Copy-to-Instanz umgeleitet. Kopierphasen-Lesezugriffe auf die
Copy-from-Instanz werden normal abgeschlossen.
-
In
einer Ausgestaltung wird Lese- und Schreibbarrieren-Hardware 1340 durch
Logik der Ganzzahleneinheit 142 (1)
bereitgestellt, die für
die Beurteilung von Bytecodes verantwortlich ist. Die Hardware-Schreibbarriere 1341 wird
durch Logik der Ganzzahleneinheit 142 bereitgestellt, die
für die
Beurteilung von speicherungsorientierten Bytecodes verantwortlich
ist, und Hardware-Lesebarriere 1342 wird von Logik der
Ganzzahleneinheit 142 bereitgestellt, die für die Beurteilung
von ladungsorientierten Bytecodes verantwortlich ist.
-
Während der
Kopierphase sendet die Hardware-Schreibbarriere 1342 implementierende
Logik store_data zu Copy-from- und Copy-to-Instanzen rund, die jeweils
durch objectref und den Inhalt des To-Feldes 412 identifiziert
werden, während
in der Zeiger-Update-Phase die Hardware-Schreibbarriere 1342 implementierende
Logik store_data nur auf die Copy-to-Instanz umleitet. Eine beispielhafte
Hardware-Schreibbarriere 1342 wird
durch die folgenden Logikgleichungen beschrieben:
-
-
Ebenso
wird eine beispielhafte Hardware-Lesebarriere
1341 durch
die folgenden Logikgleichungen beschrieben.
wobei in jedem Fall offset
der Relativzeiger in das große
Objekt des Zielfeldes ist, das mit dem speicherungs- oder ladungsorientierten
Bytecode assoziiert ist. Die Fachperson wird eine Reihe verschiedener
geeigneter Logikimplementationen einschließlich solcher erkennen, die
die Hardware-Schreibbarriere
1341 und die Hardware-Schreibbarriere
1342 kombinieren,
sowie Implementationen, die die Hardware-Schreibbarriere
1342 mit anderen
Schreibbarrierenfunktionen wie intergenerationales Zeigerspeicher-Trapping
wie oben beschrieben kombinieren. Da das To-Feld
412 für die Hardware-Schreibbarriere
1342 und
die Hardware-Lesebarriere
1341 zur Verfügung steht, können Rundsendung
und Umleitung in Hardware ausgeführt
werden und Software-Trap-Overhead wird eliminiert.
-
14 veranschaulicht
eine Ausgestaltung, die ein Howfar-Registerfeld (z. B. das Howfar-Feld 413) hinzufügt. Wie
in der Ausgestaltung von 13, stellt
die Lese- und Schreibbarrieren-Hardware 1440 Barrieren
für Lese-
und Schreibzugriffe von und zur Copy-from-Instanz 450 bereit.
Darüber
hinaus lenkt die Lese- und Schreibbarrieren-Hardware 1440 Lese- und Schreibzugriffe
zu einer geeigneten FromSpace 420 oder ToSpace 430 Instanz,
je nach dem, ob das von einem speicherungs- oder ladungsorientierten
Bytecode referenzierte Feld bereits auf die ToSpace 430 Instanz
kopiert wurde. Bei einem Betrieb in Verbindung mit dem Howfar-Feld 413 lässt es die
Hardware-Schreibbarriere 1441 vorteilhafterweise
zu, dass der Hardware-Prozessor 100 ohne Rundsenden von
Speicherdaten zu einem noch nicht kopierten Teil des großen Objektes während einer
Kopierphase auskommt, angezeigt durch einen COPY-Zustand des Mode-Feldes 1114.
In der Zeiger-Update-Phase wird garantiert, dass die ToSpace 430 Instanz
auf dem neuesten Stand ist; somit lässt es die Hardware-Lesebarriere 1442 durch
Umleiten von Lesezugriffen darauf zu, dass der Hardware-Prozessor 100 vorteilhafterweise
ohne Rundsenden von Speicherdaten in der Zeiger-Update-Phase auskommt.
Da die Rundsendung von Speicherdaten ausfällt, ist die Ausgestaltung
von 14 besonders für
die Unterstützung
von überlappenden
FromSpace 420 und ToSpace 430 Instanzen geeignet.
-
In
einer Ausgestaltung wird die Lese- und Schreibbarrieren-Hardware 1440 durch
Logik der Ganzzahleneinheit 142 (1)
bereitgestellt, die für
die Beurteilung von Bytecodes verantwortlich ist. Die Hardware-Schreibbarriere 1441 wird
durch Logik der Ganzzahleneinheit 142 bereitgestellt, die
für die
Beurteilung von speicherungsorientierten Bytecodes verantwortlich
ist, und die Hardware-Lesebarriere 1442 wird durch Logik
der Ganzzahleneinheit 142 bereitgestellt, die für die Beurteilung
von ladungsorientierten Bytecodes verantwortlich ist. Eine beispielhafte
Hardware-Schreibbarriere 1442 wird durch die folgenden
Logikgleichungen beschrieben:
-
-
Ebenso
wird eine beispielhafte Hardware-Lesebarriere
1341 durch
die folgenden Logikgleichungen beschrieben:
wobei
read_destination das Ziel für
einen ladungsorientierten Bytecode ist, und wobei in jedem Fall
offset der Relativzeiger in das große Objekt des Zielfeldes ist,
das mit dem speicherungs- oder ladungsorientierten Bytecode assoziiert
ist. Die Fachperson wird eine Reihe verschiedener geeigneter Logikimplementationen
einschließlich
Logikimplementationen erkennen, die die Hardware-Lesebarriere
1441 und
die Hardware-Schreibbarriere
1442 kombinieren,
sowie Implementationen, die die Hardware-Schreibbarriere
1442 mit anderen Schreibbarrierenfunktionen
wie intergenerationalem Zeigerspeicher-Trapping wie oben beschrieben
kombinieren.
-
Lese- und Schreibbarrieren,
die mit Copy-to-Instanzkennungspeicher assoziiert sind
-
Eine
Serie von Variationen über
die Ausgestaltungen der 12-14 beinhalten
Lese- und Schreibbarrieren, die mit einem Copy-to-Instanzkennungsspeicher
anstatt mit einem Copy-from-Instanzkennungsspeicher assoziiert sind.
Wie zuvor, Eigen diese Variationen aufeinander folgende Levels von
zusätzlichem
Hardware-Support hinzu, z. B. From-Feld 411 und Howfar-Feld 413 Support,
um Software-Trap-Handler-Overhead zu eliminieren und eine Überlappung
von Copy-from- und Copy-to-Instanzen 450 und 450A zuzulassen.
Die Variationen unterstützen
sowohl Begrenzte-Pausezeit-Kopieren als auch Begrenze-Pausezeit-Updates
von Zeigern auf ein teilweise verschobenes großes Objekt. Diese Variationen
werden nachfolgend in Analogie zu den Ausgestaltungen der 12–14 beschrieben,
und die Fachperson wird geeignete Modifikationen auf der Basis dieser
Beschreibung erkennen.
-
Der
Speicherbereinigungsprozess 620 aktualisiert Zeiger auf
das große
Objekt, d. h. von seiner FromSpace 420 Instanz zu seiner
ToSpace 430 Instanz, bevor die Objektdaten kopiert werden.
Auf diese Weise wird die Reihenfolge der Zeiger-Update- und Kopierphasen
umgekehrt. Lese- und Schreibbarrieren leiten Lese- und Schreibzugriffe
um, die auf Copy-to-Instanz 450A anstatt Copy-from-Instanz 450 gerichtet
sind. In einer Ausgestaltung fangen Hardware-Lese- und Schreibbarrieren
Zugriffe auf die Copy-to-Instanz 450A ab,
so dass eine teilweise verschobene Objekt-Trap-Handler-Software
aufgerufen wird, die das eigentliche Weiterleiten zur Copy-from-Instanz
durchführt.
Der teilweise verschobene Objekt-Trap-Handler kann bei Bedarf Speicher
für Howfar-Informationen wie
die führen,
die sonst im Howfar-Feld 413 gespeichert werden. Wenn der
Mutatorprozess 610 auf die ToSpace 420 Instanz
des großen
Objektes speichert, dann werden Speicherdaten zur Copy-to-Instanz 450A geleitet,
wenn das Stored-to-Feld des großen
Objektes bereits kopiert wurde, ansonsten werden sie zur Copy-from-Instanz 450 geleitet.
Ebenso wird, wenn der Mutatorprozess 610 von der ToSpace 420 Instanz
des großen
Objekts lädt,
das Laden von der Copy-to-Instanz 450A durchgeführt, wenn
das Stored-to-Feld des großen
Objekts bereits kopiert wurde, ansonsten wird es von der Copy-from-Instanz 450 durchgeführt. Support
für überlappte
FromSpace 430 und ToSpace 430 Instanzen wird wie
oben mit Bezug auf die Ausgestaltungen der 12 und 14 beschrieben
bereitgestellt. Alternativ kann die Lesebarriere, wenn kein Support
für überlappende
Regionen benötigt
wird, Ladungen zur Copy-from-Instanz leiten, und die Schreibbarriere
kann Speicherdaten zur Copy-from- und zur Copy-zu-Instanz rundsenden.
-
Wie
oben, kann Software-Trap-Overhead dadurch eliminiert werden, dass
mehr Register und komplexeres Verhalten in die Hardware eingebaut
werden. So beinhaltet beispielsweise eine Ausgestaltung das To-Feld 412 und
das From-Feld 411. Eine Hardware-Schreibbarriere, die auf
die Übereinstimmung
zwischen einem Speicherziel und dem To-Feld 412 anspricht,
sendet Speicherdaten zur Copy-to-Instanz 450A und zur Copy-from-Instanz 450 rund.
Eine Hardware-Lesebarriere, die auf eine Übereinstimmung zwischen einer
Ladungsquelle und dem To-Feld 412 anspricht, leitet Ladevorgänge zur
Copy-from-Instanz 450 um. Eine andere Ausgestaltung beinhaltet
das Howfar-Feld 413 zusätzlich
zum From-Feld 411 und zum To-Feld 412. Die Hardware-Schreibbarriere
und die Hardware-Lesebarriere leiten Speicherdaten und Ladedaten
zu kopierten Teilen der Copy-to-Instanz 450A und zu unkopierten
Teilen der Copy-from-Instanz 450. Die Fachperson wird geeignete
Logik für
die einzelnen Ausgestaltungen auf der Basis der obigen Beschreibung
erkennen.
-
Objektreferenzierungsformate
-
16 veranschaulicht
eine Ausgestaltung einer Objektreferenz (objectref), wie im Hardware-Prozessor 100 repräsentiert
ist. Drei Bits der objectref können
für Speicherbereinigungshints
verwendet werden. Ein zusätzliches
Handle-Bit H zeigt an, ob das Objekt durch objectref direkt oder
indirekt durch einen Handle referenziert wird. Handles bieten eine
Referenzierungsmethode, die die Verschiebung von Memory-Objekten
ohne aufwändige
Updates von Zeigern (oder objectrefs) darauf erleichtert, jedoch
auf Kosten eines zusätzlichen
Indirektionsniveaus. Diese beiden Felder werden ausmaskiert, bevor
sie zur Ganzzahleneinheit 142 (1)
des Hardware-Prozessors 100 geleitet werden.
-
In
einer Ausgestaltung des Hardware-Prozessors 100 und von
bereinigtem Raum 630 (6–14) wird
ein Objekt 1700 im Memory mit einem Header-Teil 1710 und
einem Instanzvariablen-Speicherteil 1770 repräsentiert. 17A veranschaulicht eine solche Ausgestaltung.
Der Header-Teil 1710 beinhaltet ein 32-Bit-Wort, das an
sich einen Methoden-Vektortabellen-Basisteil 1712 zum Repräsentieren
der Objektklasse und fünf Bits
von zusätzlichem
Speicher 1714 beinhaltet, der für den Synchronisationsstatus
des Objekts und Informationen für
den Speicherbereiniger reserviert sind. Bei Bedarf kann ein zweites
Header-Wort, z. B. Monitor-Zeiger 1716, die Adresse eines
für das
Objekt zugeordneten Monitors beinhalten, so dass alle fünf Bits von
zusätzlichem
Speicher 1714 im ersten Header-Wort für Speicherbereinigungsinformationen
zur Verfügung stehen.
In der Ausgestaltung von 17A zeigt
eine Objektreferenz (objectref) auf den Ort des Methoden-Vektortabellen-Basisteils 1712,
um das Overhead des Methodenaufrufs zu minimieren.
-
Es
stehen einem Speicherbereiniger wie dem Bereinigerprozess 620 drei
Bits an Header-Teil 1710 zur Verfügung. Im Header-Teil 1710 werden
drei Lower-Order-Bits (Header[2:0]) und zwei High-Order-Bits (Header[31:30])
ausmaskiert, wenn der Header als Zeiger behandelt wird. Drei dieser
Bits (Header[31:30,2]) stehen dem Speicherbereiniger zum Speichern
von Informationen über
das Objekt 1700 zur Verfügung. Bits 1 und 0 können zum
Halten von LOCK- und WANT-Bits für
die Objektsynchronisation verwendet werden. Alternativ kann ein
zweites Header-Wort, z. B. Monitor-Zeiger 1716, zum Führen des
Synchronisationsstatus von Objekt 1700 bereitgestellt werden,
so dass alle fünf
Bits für
Speicherbereinigungssupport verbleiben. Wie die Bits für den Speicherbereinigungssupport
verwendet werden, hängt
von dem/den jeweiligen Typen) von durch Speicherbereinigungsmethoden
implementiertem Bereinigungsprozess 620 und ggf. dem Speicherbereinigungs-Trap-Handler
ab. Mögliche
Verwendungszwecke sind Mark-Bits, Zählerbits zum Altern von Objekten
innerhalb einer Generation usw. Wie oben beschrieben, stehen in
einer Ausgestaltung mit optionalem zweitem Header-Wort des Header-Teils 1710 fünf Bits
für einen
Speicherbereiniger wie dem Bereinigungsprozess 620 zur
Verfügung.
-
In
der Ausgestaltung von 17A beginnt
der Instanzvariablen-Speicherteil 1720 mit einem Wort nach
dem Methoden-Vektortabellen-Basisteil 1712 und enthält Instanzvariablen
des Objektes 1700. Das niedrigstwertige Bit einer objectref
gibt vor, ob die Referenz gehandlet (== 1) ist oder nicht (== 0).
Ein alternatives, „gehandlet", Objektformat ist
in 17B dargestellt. Eine gehandelte Referenz wird
dann aufgestellt, wenn Objekt 1700b erzeugt wird, und alle
nachfolgenden Referenzen durch den Handle, d. h. den Speicherzeiger 1750b,
gehen, um auf das Objekt zuzugreifen. Dieser Support ist für einige
Typen von Speicherbereinigern vorgesehen, was die Kosten für Zeiger-Updates
bei der Objektverschiebung durch Kopieren von Handles anstatt des
zu Grunde liegenden Objektspeichers reduziert, einschließlich denen
für Instanzvariablen.
-
Gehandlete
Objektreferenzen lassen es zu, dass Speicherbereinigungssysteme
wie die, die oben mit Bezug auf die 7–9 beschrieben
wurden, eine Begrenzte-Pausezeit-Leistung
für Zeiger-Updates
auf ein kopiertes Objekt aufweisen. In anderen Speicherbereinigungssystemen,
für die
ein Begrenzte-Pausezeit-Zeiger-Update von großen Zahlen von Referenzierungszeigern
von der sich dadurch ergebenden Barrierenkonfiguration unterstützt wird,
z. B. in den oben mit Bezug auf die 10–14 beschriebenen
Ausgestaltungen, werden direkte Objektreferenzen bevorzugt.
-
Die
Erfindung wurde zwar mit Bezug auf verschiedene Ausgestaltungen
beschrieben, aber es ist zu verstehen, dass diese Ausgestaltungen
illustrativ sind und dass der Umfang der Erfindung nicht darauf
begrenzt ist. Anspruchsbegriffe wie erste Anweisung, zweite Anweisung,
dritte Anweisung usw. dienen lediglich zur Identifikation und sind
nicht als eine bestimmte Reihenfolge erfordernd anzusehen. Es sind
zahlreiche Variationen, Modifikationen, Zusätze und Verbesserungen der
beschriebenen Ausgestaltungen möglich.
So wurde beispielsweise die vorliegende Erfindung zwar hierin mit
Bezug auf beispielhafte Ausgestaltungen über die JAVA-Programmiersprache
und die virtuelle JAVA-Maschine beschrieben, sie ist aber darauf
nicht begrenzt und umfasst stattdessen Systeme, Artikel, Methoden
und Vorrichtungen für
eine breite Palette an verschiedenen Prozessorumgebungen (sowohl
virtuell als auch physisch). Darüber
hinaus wurden zwar bestimmte beispielhafte Ausgestaltungen im Hinblick
auf Hardware beschrieben, aber geeignete virtuelle Maschinenimplementationen
(JAVA-bezogen oder anderweitig) mit einem teilweise verschobenen
Objektkennungsspeicher und darauf ansprechenden Barrieren gemäß der obigen
Beschreibung beinhalten Implementationen des virtuellen Software-Maschinenanweisungsprozessors
wie z. B. einen Bytecode-Interpreter oder einen JIT-Compiler. Diese
und andere Variationen, Modifikationen, Zusätze und Verbesserungen fallen
in den durch die nachfolgenden Ansprüche definierten Umfang der
Erfindung.