DE69332696T2 - Rechnerverfahren und System zur Speicherverwaltung - Google Patents
Rechnerverfahren und System zur SpeicherverwaltungInfo
- Publication number
- DE69332696T2 DE69332696T2 DE69332696T DE69332696T DE69332696T2 DE 69332696 T2 DE69332696 T2 DE 69332696T2 DE 69332696 T DE69332696 T DE 69332696T DE 69332696 T DE69332696 T DE 69332696T DE 69332696 T2 DE69332696 T2 DE 69332696T2
- Authority
- DE
- Germany
- Prior art keywords
- objects
- accessible
- pointer
- memory
- new
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 58
- 238000005056 compaction Methods 0.000 claims abstract description 29
- 238000007726 management method Methods 0.000 claims 2
- 230000008569 process Effects 0.000 description 19
- 238000013459 approach Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 2
- 230000004807 localization Effects 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
- G06F12/0269—Incremental or concurrent garbage collection, e.g. in real-time systems
- G06F12/0276—Generational garbage collection
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0253—Garbage collection, i.e. reclamation of unreferenced memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/70—Details relating to dynamic memory management
- G06F2212/702—Conservative garbage collection
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Description
- Die vorliegende Erfindung betrifft im Allgemeinen ein Computerverfahren und - system zum Erfassen von Datenmüll im Speicher und im Besonderen ein Verfahren und ein System zum Erfassen von Datenmüll unter Verwendung eines konservativen Herangehens an Stapelzeiger und eines Generationsherangehens an die Freigabe von Objekten.
- Rechnersysteme können Rechnerspeicher dynamisch verwalten. Die dynamische Speicherverwaltung bezieht sich auf den Prozess, durch den Speicherbereiche zeitweilig einem bestimmten Zweck zugeordnet und später freigegeben werden, wenn sie für jenen Prozess nicht mehr benötigt werden. Nicht zugeordnete Bereiche stehen für eine neue Zuordnung für einen anderen Zweck zur Verfügung. Der Prozess, der den Speicher dynamisch verwaltet, wird als Speichermanager bezeichnet. Der vom Speichermanager verwaltete Speicher wird als "Haufen" bezeichnet. Wenn ein Programm einen Speicherbereich benötigt, um Daten zu speichern, sendet das Programm eine Anfrage an den Speichermanager. Der Speichermanager ordnet einen Speicherbereich aus dem Haufen zu, um der Anfrage zu genügen, und schickt einen auf den Speicherbereich weisenden Zeiger an das Programm. Das Programm hat dann über den Zeiger Zugang zu dem Speicherbereich.
- Im Falle von Programmen, die in bestimmten Sprachen, wie zum Beispiel C++, geschrieben wurden, können Speicherbereiche (ein Speicherbereich wird oft als Objekt bezeichnet) automatisch oder dynamisch zugeordnet werden. Automatische Objekte werden automatisch zugeordnet, wenn in ein Verfahren eingetreten wird, und automatisch freigegeben, wenn das Verfahren verlassen wird. Andererseits werden dynamische Objekte durch einen ausdrücklichen Auftrag an den Speichermanager zugeordnet und entweder durch einen ausdrücklichen Auftrag an den Speichermanager oder automatisch mittels eines Verfahrens freigegeben, das als Datenmüllerfassung bezeichnet wird. Üblicherweise werden automatische Objekte in einem Stapel und dynamische Objekte in einem Haufen gespeichert.
- Ein Programm kann nur über einen Zeiger auf ein dynamisches Objekt zugreifen. Ein Zeiger ist eine Speicherstelle, welche die Adresse eines Objektes enthält. Wenn das Programm den Zeiger überschreibt, wird das entsprechende Objekt für das Programm "unzugänglich". Mehrere Zeiger können auf ein Objekt zeigen. Nur wenn alle Zeiger überschrieben werden oder Teil eines anderen unzugänglichen Objekts sind, wird das Objekt unzugänglich. Ein unzugängliches Objekt ist ein Objekt, aus dem das Programm keine Daten abrufen und in das es keine Daten schreiben kann. Die Datenmüllerfassung ist der Prozess der dynamischen Speicherverwaltung, der Objekte erkennt und verschiebt, die nicht länger für das Programm zugänglich sind und daher Kandidaten für die Freigabe und erneute Zuordnung sind.
- Es gibt zwei grundlegende Verfahren, um zu ermitteln, ob ein Objekt zugänglich ist. Das Verweiszählverfahren verfolgt, ob ein Objekt zugänglich ist, indem ein Zeigerzähler im Objekt jedes Mal inkrementiert wird, wenn ein neuer Zeiger gesetzt wird, um auf das Objekt zu zeigen, und indem der Zeigerzähler jedes Mal dekrementiert wird, wenn ein auf das Objekt weisender Zeiger überschrieben wird. Das Verweiszählverfahren ist aufwändig. Bei einigen Implementierungen können zusätzliche 50 Bytes an Code für jede Zeigerzuordnung benötigt werden,um den Zeigerzähler zu inkrementieren und zu dekrementieren. Weiterhin kann es schwierig sein, in bestimmten Situationen unzugängliche Objekte zu identifizieren. Wenn zum Beispiel Objekt A einen Zeiger auf Objekt B und Objekt B einen Zeiger auf Objekt A enthält und der Zeigerzähler für Objekt A 1 und für Objekt B 1 beträgt, sind die Objekte A und B letzten Endes unzugänglich, obgleich diese Zeigerzähler nicht den Wert 0 aufweisen.
- Das andere Datenmüllerfassungsverfahren zum Ermitteln, welche Objekte zugänglich sind, verfolgt nicht auf ein Objekt weisende Zeiger. Wenn für die Zuordnung mehr Haufenspeicher benötigt wird, identifiziert die Datenmüllerfassungsroutine vielmehr zugängliche Objekte, indem sie alle Zeiger im Programmüberprüft und jedes Objekt als zugänglich markiert, auf das ein Zeiger weist. Wenn diese Markierung abgeschlossen ist, sind alle nicht als zugänglich markierten Objekte unzugänglich und stehen für eine Neuzuordnung zur Verfügung. Üblicherweise überprüft die Datenmüllerfassungsroutine jeden Zeiger im Speicher (Haufen und Stapel). Es kann jedoch sehr schwierig sein zu ermitteln, ob eine bestimmte Speicherstelle einen Zeiger oder einen anderen Wert enthält. Die folgende C++-Deklaration zeigt zum Beispiel, dass ein Objekt A zu einer bestimmten Zeit ein Zeiger auf ein Objekt und zu anderen Zeiten ein ganzzahliger Wert sein kann.
- Eine Datenmüllerfassungsroutine würde nicht wissen, ob Objekt A einen Zeiger oder eine Ganzzahl enthält, sofern das Programm nicht einen Indikator mit jeder Zuordnung für dieses Objekt setzt. Diese Art des Verfolgens ist sehr aufwändig. Wenn Objekt A einen ganzzahligen Wert aufweist, der zufällig das gleiche Bitmuster besitzt wie ein Zeiger auf ein Objekt, könnte die Datenmüllerfassungsroutine ohne diese Art des Verfolgens nicht sicher sein, ob es sich tatsächlich um eine Ganzzahl oder einen Zeiger handelt. Eine Speicherstelle, die zu bestimmten Zeiten ein Zeiger und zu anderen Zeiten kein Zeiger sein kann, wird als "möglicher Zeiger" bezeichnet. Ein "konservatives" Verfahren der Datenmüllerfassung verfolgt nicht jede Zuordnung eines möglichen Zeigers. Es nimmt vielmehr an, dass Objekt A ein Zeiger ist, und behandelt das Objekt, auf welches er weisen könnte, als zugänglich. Bei diesem Herangehen kann die Datenmüllerfassungsroutine ein Objekt als zugänglich markieren, wenn es in Wirklichkeit unzugänglich ist.
- Konservative Datenmüllerfassungsroutinen haben Probleme beim Verdichten des Speichers. Während des Speicherverdichtens werden üblicherweise alle zugänglichen Objekte zu einem Ende des Haufens verschoben (die zugeordneten Objekte), wodurch am anderen Ende freier Raum (die nicht zugeordneten Objekte) geschaffen wird. Wenn die Datenmüllerfassungsroutine ein Objekt bewegt, muss sie alle Zeiger auf dieses Objekt aktualisieren, um dessen neue Position widerzuspiegeln. Die konservative Datenmüllerfassungsroutine kann jedoch den Wert eines möglichen Zeigers nicht verändern, da, wenn der mögliche Zeiger in Wirklichkeit einen kein Zeiger seienden Wert enthält, die Datenmüllerfassungsroutine einen Fehler in das Programm einfügen würde. Deshalb verdichten konservative Datenmüllerfassungsroutinen üblicherweise keinen Speicher.
- Da die Datenmüllerfassung zeitaufwändig sein kann, verwenden einige Datenmüllerfassungsroutinen ein als Generationserfassung bezeichnetes Verfahren. Eine Generations-Datenmüllerfassungsroutine teilt die Objekte im Haufen in zwei Kategorien ein: neue Objekte (kürzlich erzeugt) und alte Objekte (nicht kürzlich erzeugt). Dieses Verfahren geht von der Annahme aus, dass kürzlich erzeugte Objekte im Allgemeinen rasch unzugänglich werden, während ältere Objekte üblicherweise für einen bestimmten Zeitraum zugänglich bleiben. Somit gibt eine Generations-Datenmüllerfassungsroutine neue Objekte frei, alte Objekte jedoch nicht. Eine Generations-Datenmüllerfassungsroutine verzichtet auf die Vollständigkeit der Datenmüllerfassung (einige alte Objekte können unzugänglich sein) zu Gunsten eines schnelleren Prozesses der Datenmüllerfassung.
- Die Fig. 1A und 1B zeigen ein Beispiel für einen Stapel und einen Haufen vor und nach der Datenmüllerfassung unter Verwendung eines konservativen Ansatzes. Fig. 1A zeigt den Stapel 110 und den Haufen 120 vor der Datenmüllerfassung. Der Stapel 110 enthält fünf Stapeleinträge 111-115 mit den Werten 4, 23, 12, 64 und 16. Der Haufen 120 enthält acht Objekte 121-128 an den Stellen 0, 4, 8, 12, 16, 20, 24 und 28 sowie ab Stelle 32 freien Raum 129. Der Stapeleintrag 111 ist als nur ein Zeiger definiert; die Stapeleinträge 112-114 können ein Zeiger oder eine Ganzzahl sein; und der Stapeleintrag 115 ist eine Ganzzahl. Der Stapeleintrag 111 enthält einen Zeiger 118 auf das Objekt 122. Der Stapeleintrag 112 enthält aktuell keinen Zeiger, da sein Wert 23 nicht der Adresse irgendeines Objekts entspricht. Der Stapeleintrag 113 kann einen Zeiger 116 (gekennzeichnet durch die gestrichelte Linie) enthalten, da es an der Stelle 12 ein Objekt gibt. Der Stapeleintrag 114 enthält aktuell keinen Zeiger, da sein Wert 64 auf ein Objekt im freien Raum verweisen würde. Der Stapeleintrag 115 ist kein Zeiger, obwohl sein Wert 16 der Stelle eines Objektes entspricht. Das Objekt 122 im Haufen 120 enthält ein Feld 119, das ein Zeiger 117 auf ein Objekt 123 oder eine Ganzzahl sein könnte. Die Objekte 121, 125, 126, 127 und 128 sind unzugänglich, weil keine Zeiger auf diese Objekte weisen. Das Objekt 122 ist zugänglich, weil der Zeiger 118 darauf weist. Die Objekte 123 und 124 können zugänglich sein, weil der Stapeleintrag 113 und das Feld 119 auf diese Objekte weisen könnten.
- Fig. 1B zeigt den Stapel 110 und den Haufen 120 nach der Datenmüllerfassung unter Verwendung eines konservativen Herangehens. In diesem Beispiel weiß die Datenmüllerfassungsroutine, ob eine Speicherstelle einen Zeiger, keinen Zeiger oder möglicherweise einen Zeiger enthält. Sie verfolgt jedoch nicht, ob ein möglicher Zeiger aktuell einen Zeiger enthält. Der Haufen 120 enthält das zugängliche Objekt 122 und die möglicherweise zugänglichen Objekte 123 und 124. Die unzugänglichen Objekte 121, 125-128 wurden an die freien Stellen 130 und 131 verschoben (freigegeben). Das Objekt 122 wurde bewegt und der ihm entsprechende Zeiger 118, Stapeleintrag 111, geändert, um auf die neue Stelle zu zeigen. Die Objekte 121 und 124 wurden nicht bewegt, da der Prozess der Datenmüllerfassung nicht sicher sein kann, ob der Stapeleintrag 113 oder das Feld 119 eine Ganzzahl oder ein Zeiger sind.
- Fig. 2A und 2B zeigen ein Beispiel für einen Stapel und einen Haufen vor und nach der Datenmüllerfassung unter Verwendung eines Generationsansatzes. Fig. 2A zeigt den Stapel 210 und den Haufen 220 vor der Datenmüllerfassung unter Verwendung des Generationsansatzes. Der Stapel 210 enthält drei Stapeleinträge 211, 212 und 214, bei denen es sich um Zeiger handelt. Der Haufen 220 enthält acht Objekte 221- 228 sowie freien Platz 229. Der Zeiger 240 wird von der Datenmüllerfassungsroutine beibehalten und zeigt auf den Beginn der neuen Objekte. Der Stapeleintrag 211 zeigt auf das Objekt 222; der Stapeleintrag 213 zeigt auf das Objekt 227; und der Stapeleintrag 214 zeigt auf das Objekt 223. Das Objekt 223 enthält ein Feld 242, bei dem es sich um einen Zeiger 243 auf das Objekt 224 handelt, und das Objekt 227 enthält ein Feld 244, bei dem es sich um einen Zeiger 245 auf das Objekt 228 handelt. Die Objekte 221 bis 225 sind alte Objekte, die Objekte 226 bis 228 neue Objekte. Die Objekte 222, 223, 224, 227 und 228 sind zugänglich, wohingegen die Objekte 221, 225 und 226 unzugänglich sind.
- Fig. 2B zeigt den Stapel 210 und den Haufen 220 nach der Datenmüllerfassung unter Verwendung eines Generationsansatzes. Da ein Generationsherangehen erfolgte, wurden die unzugänglichen alten Objekte 221 und 225 nicht verschoben (freigegeben). Nur das Objekt 226, welches neu und unzugänglich ist, wurde verschoben. Der Stapeleintrag 213 wurde aktualisiert, um die neue Stelle des Objektes 227 widerzuspiegeln, und der Zeiger 247 im Feld 244 wurde aktualisiert, um die neue Stelle des Objektes 228 widerzuspiegeln. Der freie Platz 230 spiegelt die Verschiebung des Objektes 226 wider. Der Zeiger 240 wurde aktualisiert, um auf den Beginn der neuen Objekte zu zeigen.
- Die USA-Patentschrift Nr. 4,907,151 legt ein System und ein Verfahren zum Erfassen von Datenmüll unklaren Ursprungs offen. Ein System und ein Verfahren der dynamischen Speicherzuordnung und -freigabe schaffen einen Haufen als Speicherplatz zum Speichern von Programmobjekten, die von einer Aufgabe erzeugt wurden. Der Haufen ist in Seiten unterteilt, deren Größe von den physischen Seitengrößen unabhängig ist. Seiten werden als nicht zugeordnet oder als zugeordnet für das Speichern von Programmobjekten gekennzeichnet. Ein Ursprungsspeicherbereich speichert als Hinweise bezeichnete Informationen bezüglich von im Haufen gespeicherten Programmobjekten. Der Hinweis kann mehrdeutige Zeiger umfassen, die auf im Haufen gespeicherte Programmobjekte zeigen können oder auch nicht. Die Datenmüllerfassung wird ausgeführt, indem alle Seiten im Haufen, auf die Hinweise vorliegen, verschoben und beibehalten werden, wohingegen alle anderen zugänglichen Programmobjekte im Haufen in zuvor freigegebene Seiten kopiert werden. Alle Zeiger auf die kopierten Programmobjekte werden durch Zeiger auf die neuen Kopien dieser Programmobjekte ersetzt. Alle Programmobjekte in Seiten, auf die mehrdeutige Zeiger weisen, werden an ihrem ursprünglichen Platz belassen, und nur die Zeiger auf die kopierten Programmobjekte werden durch Zeiger auf die neuen Kopien der Programmobjekte ersetzt.
- Die Europäische Patentanmeldung Nr. 0,430,668 legt ein Verfahren und ein System zur Wiedernutzbarmachung nicht zugeordneten Speicherplatzes offen, wobei in einer virtuellen Speicherumgebung gearbeitet wird, in welcher der Benutzerspeicherplatz in Seiten unterteilt ist. Für jede aktive Seite speichert eine Tabelle das Alter des ältesten Objektes auf der Seite und das Alter des jüngsten Objektes, auf das von dieser Seite aus gezeigt wird. Eine Generationsaufteilung teilt die Seiten in "sichere" Seiten und "bedrohte" Seiten. Rettungsseiten, die Zeiger auf bedrohte Seiten aufweisen können, werden ermittelt, indem das Alter des jüngsten Objektes, auf das von dieser Seite aus gezeigt wird, mit der Generationsaufteilung verglichen wird. Alle potenziellen Zeiger auf den Rettungsseiten werden verfolgt und die Objekte, auf die gezeigt wird, als zugänglich markiert. Alle von anderen zugänglichen Objekten aus zugänglichen Objekte werden ebenfalls markiert. Unmarkierte bedrohte Objekte werden freigegeben.
- Johnson, The case for a read barrier, Computer Architecture News [Der Fall für eine Lesesperre, Neuigkeiten zur Rechnerarchitektur], ACM, New York, USA, April 1991, Bd. 19., Nr. 2, Seiten 279 bis 287, untersucht die Leistung zweier unterschiedlicher Datenmüllerfassungsalgorithmen anhand einer sehr umfangreichen und lange laufenden Lisp-Anwendung. Beide Algorithmen verwenden Schreibsperren für die Generationserfassung. Nur ein Algorithmus verwendet eine Lesesperre für die inkrementierende Erfassung. Die Hauptunterschiede beim Umgang mit den Seiten wurden festgestellt, wenn eine Lesesperre der Datenmüllerfassungsroutine gestattete, nicht unabhängig, sondern mit dem virtuellen Speichermanager zu arbeiten.
- Es ist Aufgabe der vorliegenden Erfindung, ein verbessertes Verfahren und System für die dynamische Speicherverwaltung in einem Computersystem zu schaffen. Diese Aufgabe wird durch die Verfahren nach dem selbstständigen Anspruch 1 und das System nach dem selbstständigen Anspruch 14 gelöst. Bevorzugte Ausführungsformen der Erfindung bilden den Gegenstand der Unteransprüche. Diese und andere Aufgaben, die aus der nachfolgenden ausführlicheren Beschreibung der Erfindung deutlich werden, lassen sich durch ein verbessertes Verfahren und System zum Ermitteln unzugänglicher Objekte in einem Computerspeicher gelöst. In einer bevorzugten Ausführungsform umfasst der Speicher einen Stapel und einen Haufen, wobei der Haufen alte und neue Objekte, die durch Zeiger identifiziert werden, und der Stapel Einträge aufweist, die Zeiger sein können. Wenn in einer bevorzugten Ausführungsform ein altes Objekt einen Zeiger aufweist, der so eingestellt ist, dass er auf ein neues Objekt zeigt, so wird das alte Objekt zu der Erinnerungsliste hinzugefügt. Während der Datenmüllerfassung wird jeder Stapeleintrag als möglicher Zeiger aufgefasst. Dann wird jedes Objekt, auf das von einem Stapeleintrag gezeigt werden könnte, als zugänglich markiert, jedes neue Objekt, auf das von einem alten Objekt in der Erinnerungsliste gezeigt wird, als zugänglich markiert, und jedes neue Objekt, das über ein zuvor markiertes Objekt zugänglich ist, ebenfalls als zugänglich markiert. Wenn dieser Prozess abgeschlossen ist, sind alle nicht als zugänglich markierten neuen Objekte unzugänglich.
- Fig. 1A und 1B zeigen ein Beispiel für einen Stapel und einen Haufen vor und nach der Datenmüllerfassung unter Verwendung eines konservativen Ansatzes.
- Fig. 2A und 2B zeigen ein Beispiel für einen Stapel und einen Haufen vor und nach der Datenmüllerfassung unter Verwendung eines Generationsansatzes.
- Fig. 3 zeigt ein Übersichts-Ablaufschema des Verfahrens der Datenmüllerfassung in einer bevorzugten Ausführungsform.
- Fig. 4 zeigt ein Ablaufschema der Routine ProcessStackPointers [Stapelzeiger verarbeiten] in einer bevorzugten Ausführungsform.
- Fig. 5 zeigt ein Ablaufschema der Routine ProcessMaybePointerList [Liste der möglichen Zeiger verarbeiten] in einer bevorzugten Ausführungsform.
- Fig. 6 zeigt ein Ablaufschema der Routine ProcessRememberList [Erinnerungsliste verarbeiten] in einer bevorzugten Ausführungsform.
- Fig. 7 zeigt ein Ablaufschema der Routine CheckEmbeddedPointers [Eingebettete Zeiger prüfen] in einer bevorzugten Ausführungsform.
- Fig. 8A zeigt ein Beispiel für neuen Raum eines Haufens nach dem Markieren aller zugänglichen Objekte.
- Fig. 8B zeigt das Beispiel für den neuen Raum eines Haufens nach dem Verdichten.
- Fig. 9 zeigt ein Ablaufschema einer Verdichtungsroutine in einer bevorzugten Ausführungsform der vorliegenden Erfindung.
- Die vorliegende Erfindung schafft ein verbessertes Verfahren der Datenmüllerfassung, welches konservative und Generations-Datenmüllerfassungsverfahren kombiniert. In einer bevorzugten Ausführungsform geht die Datenmüllerfassungsroutine nach konservativer Weise davon aus, dass jeder Stapeleintrag auf ein Objekt zeigt, und verwendet ein exaktes Verfahren, um zu ermitteln, ob eine globale Variable ein Zeiger ist und ob ein Feld innerhalb eines Objektes im Haufen ein Zeiger ist. Weiterhin wird bevorzugt, dass die Datenmüllverarbeitungseinrichtung nur neue Objekte freigibt.
- Während der Laufzeit des Programms wird eine Liste alter Objekte geführt, die einen Zeiger auf ein neues Objekt enthalten. Wenn das den Zeiger enthaltende Objekt alt und das durch den Zeiger bestimmte Objekt neu ist, wird das alte Objekt zu einer Erinnerungsliste hinzugefügt. In einer bevorzugten Ausführungsform erzeugt ein Compiler einen Code, der dieses Überprüfen und Hinzufügen zur Erinnerungsliste für jede Zeigerzuordnungserklärung ausführt. Weiterhin erzeugt der Compiler eine virtuelle Funktion für jede Objektklasse. Eine dieser virtuellen Funktionen gibt eine Liste der in dem Objekt enthaltenen Zeiger zurück, während eine weitere die Größe des Objektes zurückgibt. Der Compiler erzeugt einen Code, um exakt zu verfolgen, ob ein möglicher Zeiger in einem Objekt aktuell einen Zeiger enthält.
- In einer bevorzugten Ausführungsform unterteilt der Speichermanager den Haufen logisch in neuen Raum und alten Raum. Der Speichermanager führt eine Zuordnung neuer Objekte aus dem neuen Raum aus. In einer bevorzugten Ausführungsform ist die Datenmüllerfassungsroutine in einem Prozessor mit segmentiertem Aufbau, zum Beispiel dem Intel 80386, implementiert.
- Jedes zugängliche neue Objekt ist entweder über einen Stapeleintrag oder über ein altes Objekt in der Erinnerungsliste zugänglich. Durch die Verarbeitung der Stapeleinträge und der Objekte in der Erinnerungsliste kann die Datenmüllerfassungsroutine somit ermitteln, welche neuen Objekte zugänglich sind oder sein könnten. In einer bevorzugten Ausführungsform behandelt die Datenmüllerfassungscoutine jeden Stapeleintrag auf konservative Weise, das heißt, sie geht davon aus, dass jeder Stapeleintrag ein möglicher Zeiger ist. Die Datenmüllerfassungsroutine markiert jedes neue Objekt, auf das ein Stapeleintrag zeigen könnte, als gesperrt und zugänglich, und jedes neue Objekt, das über das gesperrte Objekt zugänglich ist, als zugänglich. Danach verarbeitet die Datenmüllerfassungsroutine jedes Objekt in der Erinnerungsliste, indem sie jedes neue Objekt aufsucht, das über das jeweilige alte Objekt zugänglich ist, und es als zugänglich markiert. Nach dem Abschluss des Markierens verdichtet die Datenmüllerfassungsroutine den Speicher in dem neuen Segment.
- Fig. 3 zeigt ein Übersichts-Ablaufschema des Verfahrens der Datenmüllerfassung in einer bevorzugten Ausführungsform. In Schritt 301 ruft die Datenmüllerfassungsroutine die Routine ProcessStackPointers (Stapelzeiger verarbeiten) auf, um in konservativer Weise alle neuen Objekte zu markieren, die über die Stapeleinträge zugänglich sein könnten. In Schritt 302 ruft die Datenmüllerfassungsroutine die Routine ProcessRememberList (Erinnerungsliste verarbeiten) auf, um alle neuen Objekte zu markieren, die über die alten Objekte in der Erinnerungsliste zugänglich sein könnten. In Schritt 303 verdichtet die Datenmüllerfassungsroutine das neue Segment des Haufens.
- Fig. 4 zeigt ein Ablaufschema der Routine ProcessStackPointers in einer bevorzugten Ausführungsform. In den Schritten 401 bis 404 verarbeitet die Datenmüllerfassungsroutine jeden Stapeleintrag, um zu ermitteln, ob es sich um einen Zeiger auf ein neues Objekt handeln könnte oder ob es sich definitiv nicht um einen Zeiger auf ein neues Objekt handelt. Wenn es sich um einen Zeiger auf ein neues Objekt handeln könnte, fügt die Datenmüllerfassungsroutine den Stapeleintrag zwecks späterer Verarbeitung zu einer Liste möglicher Zeiger hinzu. In Schritt 401 wählt die Datenmüllerfassungsroutine den nächsten Stapeleintrag beginnend mit dem ersten aus. Wenn in Schritt 402 alle Stapeleinträge bereits ausgewählt sind, fährt die Datenmüllerfassungsroutine mit Schritt 405 fort, anderenfalls mit Schritt 403. Wenn in Schritt 403 der ausgewählte Stapeleintrag ein Zeiger auf ein neues Objekt sein könnte, fügt ihn die Datenmüllerfassungsroutine in Schritt 404 zu der Liste möglicher Zeiger hinzu und springt zu Schritt 401 zurück, um den nächsten Stapeleintrag auszuwählen, anderenfalls springt die Datenmüllerfassungsroutine zu Schritt 401 zurück. In einer bevorzugten Ausführungsform wird neuen Objekten Raum in einem einzigen Segment zugeordnet. Somit weisen die Zeiger auf die neuen Objekte eine Segmentwahlinformation auf, die gleich der des neuen Segments ist. Der Stapeleintrag kann ein Zeiger auf ein neues Objekt sein, wenn sein Auswahlabschnitt auf das neue Segment zeigt und sich der Versatzabschnitt innerhalb der Grenzen des neuen Segments befindet. In Schritt 405 ruft die Datenmüllerfassungsroutine die Routine ProcessMaybePointerList (Liste möglicher Zeiger verarbeiten) auf, um in konservativer Weise die Objekte zu markieren, auf die von Stapeleinträgen in der Liste möglicher Zeiger gezeigt werden könnte. Dann kehrt die Datenmüllerfassungsroutine zum Anfang zurück.
- Fig. 5 zeigt ein Ablaufschema der Routine ProcessMaybePointerList in einer bevorzugten Ausführungsform. Diese Routine verarbeitet die Einträge in der Liste möglicher Zeiger, indem sie alle neuen Objekte als gesperrt und zugänglich markiert, auf die gezeigt werden könnte. Die Routine markiert weiterhin die neuen Objekte als zugänglich, die über diese Objekte zugänglich sind. In Schritt 501 sortiert die Datenmüllerfassungsroutine die Liste möglicher Zeiger. In Schritt 502 wählt die Datenmüllerfassungsroutine das nächste neue Objekt im Haufen beginnend mit dem ersten neuen Objekt aus. Wenn in Schritt 503 alle neuen Objekte bereits ausgewählt worden sind, kehrt die Datenmüllerfassungsroutine zum Anfang zurück, anderenfalls fährt sie mit Schritt 504 fort. Wenn in Schritt 504 die Liste möglicher Zeiger einen Stapeleintrag enthält, der auf das ausgewählte Objekt oder ein in das ausgewählte Objekt eingebettetes Objekt zeigen würde, wenn er ein Zeiger wäre, fährt die Datenmüllerfassungsroutine mit Schritt 505 fort, anderenfalls springt sie zu Schritt 502 zurück, um das nächste neue Objekt auszuwählen. In Schritt 505 markiert die Datenmüllerfassungsroutine das ausgewählte Objekt als gesperrt. Das ausgewählte Objekt kann bereits als zugänglich markiert worden sein, weil es über ein bereits als zugänglich markiertes neues Objekt zugänglich ist. Es wird trotzdem jetzt als gesperrt markiert, damit es während des Verdichtens des Haufens nicht bewegt wird. Wenn in Schritt 506 das ausgewählte Objekt bereits als zugänglich markiert ist, wurden die eingebetteten Zeiger bereits verarbeitet, um zu ermitteln, welche neuen Objekte über sie zugänglich sind, und die Datenmüllerfassungsroutine springt zu Schritt 501 zurück, um das nächste neue Objekt auszuwählen, anderenfalls fährt sie mit Schritt 507 fort. In Schritt 507 markiert die Datenmüllerfassungsroutine das ausgewählte Objekt als zugänglich. In Schritt 508 ruft die Datenmüllerfassungsroutine die Routine CheckEmbeddedPointers (eingebettete Zeiger prüfen) auf, lässt sie das ausgewählte Objekt durchlaufen und springt dann zu Schritt 502 zurück, um das nächste neue Objekt auszuwählen. Wie weiter unten ausführlich erläutert wird, markiert diese Routine alle neuen Objekte (die noch nicht als zugänglich markiert worden sind), die über das durchlaufene Objekt zugänglich sind (mit Ausnahme der neuen Objekte, die nur über ein altes Objekt von dem durchlaufenen Objekt aus zugänglich sind), als zugänglich. Fig. 6 zeigt ein Ablaufschema der Routine ProcessRememberList (Erinnerungsliste verarbeiten) in einer bevorzugten Ausführungsform. Diese Routine verarbeitet jedes alte Objekt in der Erinnerungsliste, um jedes neue Objekt als zugänglich zu markieren, das über das jeweilige alte Objekt zugänglich ist. In Schritt 601 wählt die Datenmüllerfassungsroutine das nächste Objekt in der Erinnerungsliste beginnend mit dem ersten aus. Wenn in Schritt 602 alle Objekte in der Erinnerungsliste bereits ausgewählt worden sind, kehrt die Datenmüllerfassungsroutine zum Anfang zurück, anderenfalls fährt sie mit Schritt 603 fort. In Schritt 603 ruft die Datenmüllerfassungsroutine die Routine CheckEmbeddedPointers auf, lässt sie die ausgewählten Objekte durchlaufen und springt dann zu Schritt 601 zurück, um das nächste Objekt auszuwählen.
- Fig. 7 zeigt ein Ablaufschema der Routine CheckEmbeddedPointers in einer bevorzugten Ausführungsform. Diese Routine durchläuft ein Objekt und markiert jedes neue Objekt (das nicht bereits als zugänglich markiert worden ist) als zugänglich, das über Zeiger zugänglich ist, die in das durchlaufene Objekt eingebettet sind (mit Ausnahme der neuen Objekte, die nur über ein altes Objekt von dem durchlaufenen Objekt aus zugänglich sind). Diese Routine wird rekursiv aufgerufen, um jedes neue Objekt zu verarbeiten, auf das von den Zeigern gezeigt wird, die in dem durchlaufenen Objekt enthalten sind. Fachleuten dürfte klar sein, dass diese Routine in nicht- rekursiver Weise implementiert sein könnte. Wenn diese Routine auf einen Zeiger auf ein altes Objekt trifft, verarbeitet sie die Zeiger in diesem alten Objekt nicht, weil in dem Falle, dass das alte Objekt einen Zeiger auf ein neues Objekt enthält, das alte Objekt in der Erinnerungsliste erfasst ist und die Datenmüllerfassungsroutine es auf diese Weise verarbeitet. In Schritt 701 wählt die Datenmüllerfassungsroutine den nächsten Zeiger in dem durchlaufenen Objekt beginnend mit dem ersten aus. In einer bevorzugten Ausführungsform wird für jede Klasse von Objekten eine virtuelle Funktion definiert, die beim Aufruf die in dem Objekt enthaltenen Zeiger angibt. Wenn in Schritt 702 alle eingebetteten Zeiger für das durchlaufene Objekt verarbeitet sind, kehrt die Datenmüllerfassungsroutine zum Anfang zurück, andernfalls fährt sie mit Schritt 703 fort. Wenn in Schritt 703 das Objekt, auf das die ausgewählten Zeiger weisen, neu und noch nicht als zugänglich markiert worden ist, fährt die Datenmüllerfassungsroutine mit Schritt 704 fort, anderenfalls springt sie zu Schritt 701 zurück, um den nächsten eingebetteten Zeiger auszuwählen. Wenn der ausgewählte Zeiger den Wert Null aufweist, zeigt er nicht auf ein neues Objekt. Wenn das Objekt bereits als zugänglich markiert worden ist, sind alle von ihm aus zugänglichen neuen Objekte (mit Ausnahme der neuen Objekte, die nur über ein altes Objekt von dem durchlaufenen Objekt aus zugänglich sind) als zugänglich markiert worden. In Schritt 704 ruft die Datenmüllerfassungsroutine rekursiv die Routine CheckEmbeddedPointers auf, lässt sie das ausgewählte Objekt durchlaufen und springt dann zu Schritt 701 zurück, um den nächsten eingebetteten Zeiger auszuwählen.
- Der bevorzugte Verdichtungsalgorithmus der vorliegenden Erfindung bewegt jedes Objekt, das markiert und nicht gesperrt ist, zu einem Ende des Haufens. Die bewegten Objekte behalten ihre relativen Positionen zueinander. Dieses Beibehalten der relativen Position trägt dazu bei, die Lokalisierung der Verweise zu verbessern. Ein Objekt neigt im Allgemeinen dazu, auf Objekte zu verweisen, die etwa zur gleichen Zeit erzeugt worden sind. Somit stellt das Beibehalten der relativen Position sicher, dass sich ein Objekt räumlich in der Nähe von Objekten befindet, die in zeitlicher Nähe erzeugt wurden, mit Ausnahme gesperrter Objekte. Da gesperrte Objekte nicht bewegt werden, können sie räumlich von Objekten getrennt werden, die in zeitlicher Nähe erzeugt wurden. Die verbesserte Lokalisierung der Verweise ist besonders wichtig für die Verminderung von Seitenfehlern in einem Rechnersystem mit virtuellem Speicher.
- Wenn Objekte bewegt werden, können sie in der Nähe eines gesperrten Objektes gespeichert werden. Wenn der Raum zwischen einem gesperrten Objekt und einem bewegten Objekt nicht groß genug ist, um das nächste bewegte Objekt aufzunehmen, wird ein Scheinobjekt erzeugt und in diesen Raum bewegt. Ein Scheinobjekt ist groß genug, um diesen Raum zu füllen, und weist eine zugeordnete virtuelle Funktionstabelle auf. Da kein Zeiger auf das Scheinobjekt zeigen kann, wird das Scheinobjekt bei der nächsten Datenmüllerfassung freigegeben.
- Wenn das Bewegen der Objekte abgeschlossen ist, wird eine Liste von Bereichen mit aneinander grenzenden Abschnitten freien Raumes erstellt. Der freie Raum wäre mit Ausnahme markierter und gesperrter Objekte durchgehend. Die Zuordnung neuer Objekte erfolgt von diesem freien Raum aus.
- Fig. 8A zeigt ein Beispiel für neuen Raum, nachdem alle zugänglichen Objekte markiert worden sind. Die markierten und nicht gesperrten Objekte sind M&sub0;, M&sub1;, M&sub2;, M&sub3;, M&sub4; und M&sub5;. Die markierten und gesperrten Objekte sind ML&sub0;, ML&sub1;, M&sub2; und M&sub3;. Die nicht markierten Objekte sind U&sub0;, U&sub1;, U&sub2;, U&sub3;, U&sub4;, U&sub5;, U&sub6; und U&sub7;. Die Zahlen in der rechten unteren Ecke jedes Objektes geben die Größe des Objektes an. Fig. 8B zeigt das Beispiel für neuen Raum eines Haufens nach dem Verdichten. Das mit D&sub0; bezeichnet Objekt ist ein Scheinobjekt. Der freie Raum wird durch F&sub0;, F&sub1; und F&sub2; gekennzeichnet, die miteinander verbunden sind. Der Zeiger TOS zeigt das obere Ende des Raumes nach Abschluss des Verdichtens an. Während des Verdichtungsprozesses wurde ermittelt, dass das Objekt M&sub2; mit der Größe 5 nicht in einen Raum mit der Größe 2 passen würde. Folglich wurde das Scheinobjekt D&sub0; mit der Größe 2 erzeugt und in den Raum mit der Größe 2 eingefügt. Obwohl das Objekt M&sub4; mit der Größe 2 in diesen Raum passen würde, wurde es nicht bewegt, weil durch ein derartiges Bewegen die relative Reihenfolge der markierten und nicht gesperrten Objekte verändert würde.
- Fig. 9 zeigt ein Ablaufschema einer Verdichtungsroutine in einer bevorzugten Ausführungsform der vorliegenden Erfindung. Diese Routine initialisiert einen Zeiger auf das obere Ende des Raumes (TOS) so, dass er auf das erste Objekt in dem neuen Raum zeigt. Der TOS-Zeiger zeigt auf die nächste Stelle, an die ein Objekt bewegt werden kann. In Schritt 901 wählt die Verdichtungsroutine das nächste Objekt in dem neuen Raum beginnend mit dem ersten aus. Wenn in Schritt 902 alle Objekte bereits ausgewählt worden sind, fährt die Verdichtungsroutine mit Schritt 911 fort, anderenfalls mit Schritt 903. Wenn in Schritt 903 das ausgewählte Objekt markiert und nicht gesperrt ist, ist das ausgewählte Objekt zu bewegen, und die Verdichtungsroutine fährt mit Schritt 904 fort, anderenfalls springt sie zu Schritt 901 zurück, um das nächste Objekt auszuwählen. Wenn in Schritt 904 ausreichend Raum zwischen dem TOS und dem nächsten gesperrten Objekt vorhanden ist, kann das Objekt zum TOS bewegt werden, und die Verdichtungsroutine fährt mit Schritt 908 fort, anderenfalls fährt sie mit Schritt 905 fort. Das nächste gesperrte Objekt verweist auf das nächstliegende gesperrte Objekt, welches sich zwischen dem TOS und dem Ende des neuen Raumes befindet. Wenn kein derartiges gesperrtes Objekt existiert, wird davon ausgegangen, dass sich der Raum vom TOS bis zum Ende des neuen Raumes erstreckt. In den Schritten 905 bis 907 füllt die Verdichtungsroutine den Raum zwischen dem TOS und dem nächsten gesperrten Objekt mit einem Scheinobjekt. Wenn der TOS-Zeiger auf das nächste gesperrte Objekt zeigt, wird kein Scheinobjekt benötigt, und die Schritte 905 bis 907 werden übersprungen. Ein Scheinobjekt weist eine virtuelle Funktion, welche die Größe des Objektes zurückgibt, und eine virtuelle Funktion auf, welche einen Hinweis darauf zurückgibt, dass sich in dem Objekt keine Zeiger befinden. Während der nächsten Datenmüllerfassung nach der Erzeugung des Scheinobjektes wird dieses nicht als zugänglich markiert (keine Zeiger zeigen darauf) und daher freigegeben. In Schritt 905 erzeugt die Verdichtungsroutine ein Scheinobjekt, welches groß genug ist, um den Raum zwischen dem TOS und dem nächsten gesperrten Objekt zu füllen. In Schritt 906 speichert die Verdichtungsroutine das Scheinobjekt am TOS. In Schritt 907 rückt die Verdichtungsroutine das TOS vor das nächste gesperrte Objekt und springt zu Schritt 904 zurück, um zu prüfen, ob genug Raum zwischen dem vorgerückten TOS und dem neuen nächsten gesperrten Objekt vorhanden ist. In Schritt 908 bewegt die Verdichtungsroutine das ausgewählte Objekt zum TOS. In Schritt 909 aktualisiert die Verdichtungsroutine die auf das bewegte Objekt weisenden Zeiger. Während des Prozesses des Markierens der Objekte erzeugte die Datenmüllerfassungsroutine eine Liste aller Zeiger, die auf jedes markierte Objekt weisen. In Schritt 910 rückt die Verdichtungsroutine das TOS vor das bewegte Objekt und springt zu Schritt 901 zurück, um das nächste Objekt zu verarbeiten. In Schritt 911 verbindet die Verdichtungsroutine den freien Raum oberhalb des TOS und kehrt zum Anfang zurück.
- Nach dem Abschluss der Verdichtungsroutine definiert das TOS den Beginn des neuen Raumes und das Ende des alten Raumes. Die Erinnerungsliste wird vorzugsweise aktualisiert, indem die alten Objekte entfernt werden, die nicht mehr auf Objekte in dem neuen Raum zeigen. Fachleuten dürfte klar sein, dass dieses Aktualisieren von der Verdichtungsroutine ausgeführt werden könnte, wenn ein Objekt bewegt wird. Da der neue Raum, wie in Fig. 8B dargestellt, gesperrte Objekte, zum Beispiel ML&sub2; und ML&sub3;, enthalten kann, kann die Erinnerungsliste nach dem Verdichten alte Objekte enthalten, die auf diese gesperrten Objekte in dem neuen Raum zeigen. Alternativ würde die Erinnerungsliste erst aktualisiert, wenn ein neuer Raum so definiert ist, dass der neue Raum keine Objekte enthält. Wenn eine derartige Definition vorliegt, können alle alten Objekte aus der Erinnerungsliste entfernt werden, da es in dem neuen Raum keine Objekte gibt, auf die gezeigt werden könnte. Der neue Raum nach Fig. 8B könnte zum Beispiel so definiert werden, dass er keine Objekte enthält, indem der neue Raum als beim Objekt F1 beginnend oder in einem anderen Segment beginnend definiert wird, wenn die Implementierung auf einem Rechner mit Segmentarchitektur vorgenommen wird. Bei einer derartigen Definition kann der alte Raum freien Speicherplatz enthalten. Wenn der neue Raum als an einer anderen Stelle als dem TOS beginnend definiert wird, würde die Verdichtungsroutine bei der nächsten Verdichtung vorzugsweise Objekte zu der Stelle bewegen, auf die vom TOS gezeigt wird, anstatt das TOS zurückzusetzen, um auf den neuen Raum zu zeigen. Somit würde jeglicher freie Speicherplatz innerhalb des alten Raumes während des Verdichtens gefüllt.
- Obwohl die vorliegende Erfindung im Sinne bevorzugter Ausführungsformen beschrieben wurde, ist nicht beabsichtigt, die Erfindung auf diese Ausführungsformen zu beschränken. Modifikationen der Erfindung liegen für Fachleute auf der Hand. Die Erfindung wird durch die Ansprüche definiert.
Claims (25)
1. Verfahren zum Verwalten von Speicher in einem Computersystem, wobei der
Speicher Datenobjekte (122; 222, 223, 224, 227, 228) aufweist und jedes Objekt
(122; 222, 223, 224, 227, 228) durch einen Zeiger (118; 216, 217, 218, 243, 245)
identifiziert wird, der Speicher einen Stapel (110; 210) sowie einen Haufen (120;
220) enthält der Haufen (120; 220) eine Vielzahl alter Objekte (121, 128; 221, 225)
sowie eine Vielzahl neuer Objekte (226, 228) aufweist, der Speicher eine Liste von
Zeigern zu einer Vielzahl alter Objekte enthält, die einen Zeiger zu einem neuen
Objekt enthalten, der Stapel (110; 210) Stapeleinträge (111, 115; 211, 214)
aufweist und jeder Stapeleintrag (111, 115; 211, 214) als definitiv kein Zeiger seiend
oder möglicherweise ein Zeiger seiend identifiziert werden kann, wobei das
Verfahren umfasst:
Identifizieren (430), ob jeder Stapeleintrag (11, 115; 211, 214) definitiv kein Zeiger
oder möglicherweise ein Zeiger ist;
Markieren (404) des neuen Objektes als zugänglich und Markieren jedes neuen
Objektes, das über das markierte Objekt zugänglich ist, als zugänglich für jedes
neue Objekt, auf das möglicherweise ein Stapeleintrag zeigt, der als
möglicherweise ein Zeiger seiend identifiziert wird, und
Markieren jedes neuen Objektes, auf das ein Zeiger zeigt, der in dem alten Objekt
enthalten ist, als zugänglich, und Markieren jedes neuen Objektes, das über die
markierten Objekte zugänglich ist, als zugänglich, für jedes alte Objekt, auf das ein
Zeiger in der Liste von Zeigern zeigt.
2. Verfahren nach Anspruch 1, wobei mit den Schritten des Markierens jedes neuen
Objektes, das über ein markiertes Objekt zugänglich ist, als zugänglich diejenigen
neuen Objekte nicht markiert werden, die von dem markierten Objekt aus nur über
ein altes Objekt zugänglich sind.
3. Verfahren nach Anspruch 1 oder 2, das des Weiteren umfasst:
für jedes neue Objekt, auf das möglicherweise ein Stapeleintrag zeigt, der als
möglicherweise ein Zeiger seiend identifiziert wird, Markieren (505) des neuen
Objektes als gesperrt, so dass das Objekt bei Speicherverdichtung nicht bewegt
wird.
4. Verfahren nach Anspruch 1, wobei der Speicher eine Vielzahl von Speicherstellen
und eine Vielzahl von Objekten (121, 128; 221, 228) aufweist, die von einem
ersten Objekt (121, 221) bis zu einem letzten Objekt (128; 228) der Reihe nach
geordnet sind, wobei jedes Objekt (121, 128; 221, 228), das nicht als zugänglich
markiert worden ist, als nicht zugänglich betrachtet wird, und jedes zugängliche
Objekt gesperrt oder nicht gesperrt ist, wobei jedes Objekt, das zugänglich und
nicht gesperrt ist, einen Verweiszeiger (118; 216, 217, 218, 243, 245) aufweist, der
auf das Objekt zeigt, wobei das Verfahren des Weiteren umfasst:
Bewegen (908) einer Vielzahl zugänglicher und nicht gesperrter Objekte, wobei die
Reihenfolge der zugänglichen und nicht gesperrten Objekte nachdem Bewegen
aufrechterhalten wird; und
Einstellen (909) des Verweiszeigers jedes bewegten Objektes, so dass er auf die
Stelle zeigt, an die es bewegt wurde.
5. Verfahren nach Anspruch 4, wobei beim Schritt des Bewegens (908) die
zugänglichen und nicht gesperrten Objekte an Speicherstellen bewegt werden, die zuvor
von einem zugänglichen und nicht gesperrten Objekt, das bereits bewegt wurde,
oder einem nicht zugänglichen Objekt eingenommen wurde.
6. Verfahren nach Anspruch 4 oder 5, wobei das Bewegen der Vielzahl zugänglicher
und nicht gesperrter Objekte einschließt:
Initialisieren eines Speicherzeigers, so dass er auf das erste Objekt in dem
Speicher zeigt, und
Auswählen (901) des Objektes beginnend mit dem ersten Objekt für jedes Objekt
in dem Speicher und der Reihenfolge nach bis zum letzten Objekt vorgehend; und
wenn das ausgewählte Objekt zugänglich und nicht gesperrt ist (903; Y), wenn die
Größe des ausgewählten Objektes so ist, dass das ausgewählte Objekt beginnend
an der Speicherstelle, auf die der Speicherzeiger zeigt, an die Speicherstellen
kopiert werden kann, ohne ein gesperrtes Objekt zu überschreiben (904; Y):
Kopieren (908) des ausgewählten Objektes an die Speicherstellen, beginnend mit
der Speicherstelle, auf die der Speicherzeiger zeigt;
Aktualisieren (909) des Verweiszeigers auf das ausgewählte Objekt, so dass der
Verweiszeiger auf das kopierte Objekt zeigt; und
Weiterrücken (910) des Speicherzeigers, so dass er auf eine Speicherstelle nach
dem kopierten Objekt zeigt.
7. Verfahren nach Anspruch 6, das des Weiteren umfasst:
wenn die Größe des ausgewählten Objektes so ist, dass das ausgewählte Objekt
nicht kopiert werden kann (903, N);
Speichern (906) eines Scheinobjektes beginnend an dem Speicher, auf den der
Speicherzeiger zeigt, so dass die Größe des Scheinobjektes ein gesperrtes Objekt
nicht überschreibt; und
Weiterrücken (907) des Speicherzeigers, so dass er an eine Stelle nach dem
gesperrten Objekt zeigt.
8. Verfahren nach Anspruch 1, wobei der Haufen (120; 220) neue Objekte (226, 228)
und alte Objekte (221, 128; 221, 225) enthält und das Verfahren des Weiteren
umfasst:
Betrachten derjenigen Objekte als nicht zugänglich, die nicht als zugänglich
markiert worden sind;
Zurücksetzen neuer Objekte, die nicht zugänglich sind, in freie Räume (130, 131)
des Speichers.
9. Verfahren nach Anspruch 8, wobei ein Objekt ein Datenelement (119; 242, 244)
enthält, und das des Weiteren umfasst:
definitives Bestimmen, ob das Datenelement (119; 242, 244) einen Zeiger auf ein
neues Objekt enthält.
10. Verfahren nach einem der Ansprüche 8 bis 9, wobei der Schritt des Zurücksetzens
neuer Objekte das Bewegen neuer Objekte einschließt, die zugänglich sind.
11. Verfahren nach Anspruch 10, wobei:
die Objekte des Haufens (120; 220) eine relative Position zueinander haben; und
beim Schritt des Bewegens neuer Objekte die relative Position der bewegten
Objekte zueinander aufrechterhalten wird.
12. Verfahren nach Anspruch 10, wobei neue Objekte, auf die ein Stapeleintrag zeigt,
der konservativ als ein Zeiger seiend bestimmt wird, nicht bewegt werden.
13. Verfahren nach Anspruch 8, das des Weiteren umfasst:
Markieren jedes neuen Objektes, auf das möglicherweise ein Stapeleintrag zeigt,
der als möglicherweise ein Zeiger seiend identifiziert worden ist, als gesperrt, wobei
der Schritt des Zurücksetzens das Bewegen von Objekten einschließt, die als
zugänglich markiert sind und die nicht gesperrt sind.
14. System zur Speicherverwaltung von Speicherdatenobjekten in einem
Computerspeicher gemäß dem Verwaltungsverfahren nach einem der Ansprüche 1 bis 13,
wobei der Speicher Datenobjekte (122; 222, 223, 224, 227, 228) aufweist und
jedes Objekt (122; 222, 223, 224, 227, 228) durch einen Zeiger (118; 216, 217, 218,
243, 245) identifiziert wird, der Speicher einen Stapel (100; 210) sowie einen
Haufen (120; 220) enthält, wobei der Haufen (120; 220) eine Vielzahl alter Objekte
(121, 128; 221, 225) sowie eine Vielzahl neuer Objekte aufweist, der Speicher eine
Liste von Zeigern zu einer Vielzahl alter Objekte enthält, die einen Zeiger auf ein
neues Objekt enthalten, der Stapel (110; 210) Stapeleinträge (111, 115; 211, 214)
aufweist und jeder Stapeleintrag (111, 115; 211, 214) als definitiv kein Zeiger
seiend oder möglicherweise ein Zeiger seiend identifiziert werden kann, wobei das
System umfasst:
eine Einrichtung, die identifiziert, ob ein Eintrag (111, 115; 221, 214) eines Stapels
(110; 210) des Computerspeichers definitiv kein Zeiger oder möglicherweise ein
Zeiger auf ein Objekt ist, das auf einem Haufen (120; 220) des Computerspeichers
gespeichert ist, wobei der Haufen (120; 220) eine Vielzahl alter Objekte (121, 128;
221, 225) und neuer Objekte (226, 228) enthält;
eine Einrichtung, die jedes neue Objekt, auf das möglicherweise ein Stapeleintrag
zeigt, der als möglicherweise ein Zeiger seiend identifiziert wird, als zugänglich
markiert und jedes neue Objekt, das über die markierten Objekte zugänglich ist,
als zugänglich markiert; und
für jedes alte Objekt, auf das ein Zeiger in der Liste von Zeigern zeigt, eine
Einrichtung, die jedes neue Objekt, auf das ein Zeiger zeigt, der in dem alten Objekt
enthalten ist, als zugänglich markiert und jedes neue Objekt, das über die
markierten Objekte zugänglich ist, als zugänglich markiert.
15. System nach Anspruch 14, wobei die Einrichtung, die jedes neue Objekt, das über
ein markiertes Objekt zugänglich ist, als zugänglich markiert, diejenigen neuen
Objekte nicht markiert, die von dem markierten Objekt aus nur über ein altes
Objekt zugänglich sind.
16. System nach Anspruch 14 oder 15, das des Weiteren umfasst:
eine Einrichtung, die jedes neue Objekt, auf das möglicherweise ein Stapeleintrag
zeigt, der als möglicherweise ein Zeiger seiend identifiziert wird, als gesperrt
markiert, so dass das Objekt bei Speicherverdichtung nicht bewegt wird.
17. System nach Anspruch 14, das des Weiteren umfasst:
eine Einrichtung, die jedes Objekt, das als nicht zugänglich markiert worden ist, als
nicht zugänglich betrachtet, wobei jedes zugängliche Objekt gesperrt oder nicht
gesperrt ist und jedes Objekt, das zugänglich und nicht gesperrt ist, einen
Verweiszeiger (118; 216, 217, 218, 243, 245) aufweist, der auf das Objekt zeigt, wobei
das System des Weiteren eine Einrichtung umfasst, die eine Vielzahl zugänglicher
und nicht gesperrter Objekte in einem Speicher des Computersystems bewegt,
wobei eine Reihenfolge der zugänglichen und nicht gesperrten Objekte nach dem
Bewegen aufrechterhalten wird; und
eine Einrichtung, die den Verweiszeiger jedes bewegten Objektes so einstellt,
dass er auf die Stelle zeigt, an die es bewegt wurde.
18. System nach Anspruch 17, wobei die Einrichtung, die bewegt, eine Einrichtung
enthält, die die zugänglichen und nicht gesperrten Objekte an Speicherstellen
bewegt, die zuvor von einem zugänglichen und nicht gesperrten Objekt, das bereits
bewegt wurde, oder von einem nicht zugänglichen Objekt eingenommen wurde.
19. System nach Anspruch 17 oder 18, wobei die Einrichtung, die die Vielzahl
zugänglicher und nicht gesperrter Objekte bewegt, enthält:
eine Einrichtung, die einen Speicherzeiger initialisiert, so dass er auf das erste
Objekt in dem Speicher zeigt;
eine Einrichtung, die jedes Objekt in dem Speicher mit dem ersten Objekt
beginnend und der Reihenfolge nach bis zum letzten Objekt vorgehend, auswählt, und
eine Einrichtung, die, wenn das ausgewählte Objekt zugänglich und nicht gesperrt
ist, und wenn die Größe des ausgewählten Objektes so ist, dass das ausgewählte
Objekt beginnend an der Speicherstelle, auf die der Speicherzeiger zeigt, an
Speicherstellen kopiert werden kann, ohne ein gesperrtes Objekt zu überschrieben,
das ausgewählte Objekt beginnend mit der Speicherstelle, auf die der
Speicherzeiger zeigt, an die Speicherstellen kopiert (908),
den Verweiszeiger auf das ausgewählte Objekt aktualisiert (909), so dass der
Verweiszeiger auf das kopierte Objekt zeigt; und
den Verweiszeiger weiterrückt (910), so dass er auf eine Speicherstelle nach dem
kopierten Objekt zeigt:
20. System nach Anspruch 19, das des Weiteren umfasst:
eine Einrichtung, die, wenn die Größe des ausgewählten Objektes so ist, dass das
ausgewählte Objekt nicht kopiert werden kann:
ein Scheinobjekt beginnend mit dem Speicher, auf den der Speicherzeiger zeigt,
speichert (906), so dass die Größe des Scheinobjektes ein gesperrtes Objekt nicht
überschreibt, und
den Speicherzeiger weiterrückt (907), so dass er auf eine Stelle nach dem
gesperrten Objekt zeigt.
21. System nach Anspruch 14, das des Weiteren umfasst:
eine Einrichtung, die diejenigen Objekte als nicht zugänglich betrachtet, die nicht
als zugänglich markiert worden sind;
eine Einrichtung, die neue Objekte, die nicht zugänglich sind, in Räume (130, 131)
des freien Speichers zurücksetzt.
22. System nach Anspruch 21, wobei ein Objekt ein Datenelement (119; 242, 244)
enthält, und das des Weiteren umfasst:
eine Einrichtung, die definitiv bestimmt, ob das Datenelement (119; 242, 244)
einen Zeiger auf ein neues Objekt enthält.
23. System nach Anspruch 21 oder 22, wobei die Einrichtung, die neue Objekte
zurücksetzt, eine Einrichtung enthält, die neue Objekte bewegt, die zugänglich sind.
24. System nach Anspruch 23, wobei:
die Objekte des Haufens (120; 220) eine relative Position zueinander haben; und
die Einrichtung, die neue Objekte bewegt, die relative Position der bewegten
Objekte aufrechterhält.
25. System nach Anspruch 23, wobei die Einrichtung, die neue Objekte zurücksetzt,
neue Objekte, auf die ein Zeigereintrag zeigt, der konservativ als ein Zeiger seiend
bestimmt wird, nicht bewegt.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US89961692A | 1992-06-15 | 1992-06-15 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69332696D1 DE69332696D1 (de) | 2003-03-27 |
DE69332696T2 true DE69332696T2 (de) | 2003-08-21 |
Family
ID=25411296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69332696T Expired - Lifetime DE69332696T2 (de) | 1992-06-15 | 1993-06-15 | Rechnerverfahren und System zur Speicherverwaltung |
Country Status (6)
Country | Link |
---|---|
US (1) | US5652883A (de) |
EP (1) | EP0574884B1 (de) |
JP (1) | JP3628032B2 (de) |
AT (1) | ATE233001T1 (de) |
CA (1) | CA2098459A1 (de) |
DE (1) | DE69332696T2 (de) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102004013180A1 (de) * | 2004-03-17 | 2005-10-06 | Giesecke & Devrient Gmbh | Speicherbereinigung (Garbage Collection) für Smart Cards |
Families Citing this family (55)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6233621B1 (en) * | 1996-04-30 | 2001-05-15 | Sun Microsystems, Inc. | System and method for space efficient hashcode allocation |
US5923877A (en) * | 1996-05-01 | 1999-07-13 | Electronic Data Systems Corporation | Object-oriented programming memory management framework and method |
US5949972A (en) * | 1996-08-23 | 1999-09-07 | Compuware Corporation | System for memory error checking in an executable |
US6092168A (en) * | 1996-10-25 | 2000-07-18 | Hewlett-Packard Co. | Data storage system and method for deallocating space by writing and detecting a predefined data pattern |
US5903900A (en) * | 1997-04-23 | 1999-05-11 | Sun Microsystems, Inc. | Method and apparatus for optimizing exact garbage collection of array nodes in a carded heap |
US5911144A (en) * | 1997-04-23 | 1999-06-08 | Sun Microsystems, Inc. | Method and apparatus for optimizing the assignment of hash values to nodes residing in a garbage collected heap |
US5915255A (en) * | 1997-04-23 | 1999-06-22 | Sun Microsystems, Inc. | Method and apparatus for referencing nodes using links |
US6199075B1 (en) * | 1997-05-30 | 2001-03-06 | Sun Microsystems, Inc. | Method and apparatus for generational garbage collection of a heap memory shared by multiple processors |
US6182107B1 (en) * | 1997-06-03 | 2001-01-30 | Object Technology Licensing Corporation | Management of reference object lifetimes in object oriented programs |
US6055612A (en) * | 1997-07-11 | 2000-04-25 | Geodesic Systems, Inc. | Incremental garbage collector with decommit barrier |
GB9721659D0 (en) * | 1997-10-14 | 1997-12-10 | Philips Electronics Nv | Space-limited marking structure for tracing garbage collectors |
US6065019A (en) * | 1997-10-20 | 2000-05-16 | International Business Machines Corporation | Method and apparatus for allocating and freeing storage utilizing multiple tiers of storage organization |
US6072952A (en) * | 1998-04-22 | 2000-06-06 | Hewlett-Packard Co. | Method and apparatus for coalescing variables |
US6125434A (en) * | 1998-05-19 | 2000-09-26 | Northorp Grumman Corporation | Dynamic memory reclamation without compiler or linker assistance |
US6327701B2 (en) | 1998-09-15 | 2001-12-04 | Sun Microsystems, Inc. | Method and apparatus for finding bugs related to garbage collection in a virtual machine |
GB2342470A (en) * | 1998-10-09 | 2000-04-12 | Ibm | A memory management system and method for a data processing system |
US6442751B1 (en) | 1998-12-14 | 2002-08-27 | International Business Machines Corporation | Determination of local variable type and precision in the presence of subroutines |
GB2345160B (en) * | 1998-12-23 | 2003-08-20 | Ibm | Virtual machine memory management |
GB2345159B (en) * | 1998-12-23 | 2003-08-20 | Ibm | Virtual machine memory management |
GB2345355A (en) * | 1998-12-30 | 2000-07-05 | Ibm | Garbage collection in a Java virtual machine |
US6480862B1 (en) * | 1999-04-23 | 2002-11-12 | International Business Machines Corporation | Relation-based ordering of objects in an object heap |
SE514318C2 (sv) * | 1999-10-28 | 2001-02-12 | Appeal Virtual Machines Ab | Förfarande för att effektivisera en databehandlingsprocess vid användning av en virtuell maskin och där ett skräpsamlingsförfarande används |
US6970893B2 (en) * | 2000-10-27 | 2005-11-29 | Bea Systems, Inc. | System and method for regeneration of methods and garbage collection of unused methods |
JP3611295B2 (ja) * | 2000-03-09 | 2005-01-19 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステム、メモリ管理方法及び記憶媒体 |
US6757891B1 (en) * | 2000-07-12 | 2004-06-29 | International Business Machines Corporation | Method and system for reducing the computing overhead associated with thread local objects |
US6865585B1 (en) * | 2000-07-31 | 2005-03-08 | Microsoft Corporation | Method and system for multiprocessor garbage collection |
US6457023B1 (en) * | 2000-12-28 | 2002-09-24 | International Business Machines Corporation | Estimation of object lifetime using static analysis |
US6654773B2 (en) | 2001-02-27 | 2003-11-25 | Tajea Corporation | Method of deterministic garbage collection |
US6598141B1 (en) * | 2001-03-08 | 2003-07-22 | Microsoft Corporation | Manipulating interior pointers on a stack during garbage collection |
US7546305B2 (en) * | 2001-04-13 | 2009-06-09 | Oracle International Corporation | File archival |
US6748503B1 (en) | 2001-06-27 | 2004-06-08 | Microsoft Corporation | System and method facilitating unmanaged code participation in garbage collection |
CA2484355A1 (en) * | 2002-05-02 | 2003-11-13 | Sarvega, Inc. | System and method for transformation of xml documents using stylesheets |
JP4079684B2 (ja) * | 2002-05-08 | 2008-04-23 | 株式会社日立製作所 | ヒープメモリ管理方法およびそれを用いた計算機システム |
KR20030094658A (ko) * | 2002-06-07 | 2003-12-18 | 이승룡 | 자동화된 동적 메모리 관리 기반의 시스템 환경에서어플리케이션이 직접 동적 메모리를 관리하는 방법 |
US8108628B2 (en) * | 2003-08-04 | 2012-01-31 | Azul Systems, Inc. | Processor instruction used to perform a matrix test to generate a memory-related trap |
KR100626368B1 (ko) * | 2003-08-25 | 2006-09-20 | 삼성전자주식회사 | 가비지 콜렉션 벤치마킹 방법 |
US7587568B2 (en) * | 2003-09-05 | 2009-09-08 | Oracel International Corporation | Method and system of reclaiming storage space in data storage systems |
JP4504756B2 (ja) * | 2004-07-26 | 2010-07-14 | 株式会社アプリックス | Java(登録商標名)実行環境におけるメモリ管理方法及びメモリ管理プログラム |
US7380087B2 (en) * | 2004-08-25 | 2008-05-27 | Microsoft Corporation | Reclaiming application isolated storage |
US7730016B2 (en) * | 2005-01-31 | 2010-06-01 | Oracle International Corporation | Identification of false ambiguous roots in a stack conservative garbage collector |
US7779054B1 (en) * | 2005-09-30 | 2010-08-17 | Oracle America, Inc. | Heuristic-based resumption of fully-young garbage collection intervals |
US7627621B2 (en) * | 2007-02-12 | 2009-12-01 | Sun Microsystems, Inc. | Method and system for minor garbage collection |
US7870171B2 (en) * | 2007-02-12 | 2011-01-11 | Oracle America, Inc. | Method and system for garbage collection in a multitasking environment |
US7831640B2 (en) * | 2008-04-15 | 2010-11-09 | Microsoft Corporation | Using an overflow list to process mark overflow |
US7860906B2 (en) * | 2008-05-28 | 2010-12-28 | Microsoft Corporation | Overflow per segment |
US8301672B2 (en) * | 2008-09-22 | 2012-10-30 | Advanced Micro Devices, Inc. | GPU assisted garbage collection |
US8473900B2 (en) * | 2009-07-01 | 2013-06-25 | Advanced Micro Devices, Inc. | Combining classes referenced by immutable classes into a single synthetic class |
US8327109B2 (en) * | 2010-03-02 | 2012-12-04 | Advanced Micro Devices, Inc. | GPU support for garbage collection |
US8577936B2 (en) * | 2010-11-29 | 2013-11-05 | International Business Machines Corporation | Fixup cache tool for object memory compaction in an information handling system |
US8527544B1 (en) | 2011-08-11 | 2013-09-03 | Pure Storage Inc. | Garbage collection in a storage system |
US8726264B1 (en) | 2011-11-02 | 2014-05-13 | Amazon Technologies, Inc. | Architecture for incremental deployment |
US9229740B1 (en) | 2011-11-02 | 2016-01-05 | Amazon Technologies, Inc. | Cache-assisted upload proxy |
US8984162B1 (en) * | 2011-11-02 | 2015-03-17 | Amazon Technologies, Inc. | Optimizing performance for routing operations |
CN103838679B (zh) * | 2012-11-22 | 2017-08-04 | 中兴通讯股份有限公司 | 一种缓存处理方法及装置 |
WO2015009306A1 (en) * | 2013-07-18 | 2015-01-22 | Empire Technology Development, Llc | Memory attack detection |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4775932A (en) * | 1984-07-31 | 1988-10-04 | Texas Instruments Incorporated | Computer memory system with parallel garbage collection independent from an associated user processor |
US4797810A (en) * | 1986-06-26 | 1989-01-10 | Texas Instruments Incorporated | Incremental, multi-area, generational, copying garbage collector for use in a virtual address space |
US4907151A (en) * | 1988-09-30 | 1990-03-06 | Digital Equipment Corporation | System and method for garbage collection with ambiguous roots |
JPH0812633B2 (ja) * | 1989-11-28 | 1996-02-07 | ゼロックス コーポレーション | 参照されないコンピュータ記憶スペースを再活用する方法およびシステム |
-
1993
- 1993-06-15 EP EP93109545A patent/EP0574884B1/de not_active Expired - Lifetime
- 1993-06-15 JP JP14379293A patent/JP3628032B2/ja not_active Expired - Lifetime
- 1993-06-15 DE DE69332696T patent/DE69332696T2/de not_active Expired - Lifetime
- 1993-06-15 CA CA002098459A patent/CA2098459A1/en not_active Abandoned
- 1993-06-15 AT AT93109545T patent/ATE233001T1/de not_active IP Right Cessation
-
1995
- 1995-05-23 US US08/448,238 patent/US5652883A/en not_active Expired - Lifetime
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102004013180A1 (de) * | 2004-03-17 | 2005-10-06 | Giesecke & Devrient Gmbh | Speicherbereinigung (Garbage Collection) für Smart Cards |
Also Published As
Publication number | Publication date |
---|---|
DE69332696D1 (de) | 2003-03-27 |
US5652883A (en) | 1997-07-29 |
CA2098459A1 (en) | 1993-12-16 |
ATE233001T1 (de) | 2003-03-15 |
EP0574884A1 (de) | 1993-12-22 |
JPH0695954A (ja) | 1994-04-08 |
EP0574884B1 (de) | 2003-02-19 |
JP3628032B2 (ja) | 2005-03-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69332696T2 (de) | Rechnerverfahren und System zur Speicherverwaltung | |
DE3784190T2 (de) | Eintragung eines datenbasisindex in das journal zur verbesserten rueckstellung. | |
DE4220198C2 (de) | Transaktionsverarbeitungsverfahren für einen digitalen Computer und Transaktionsverarbeitungssystem | |
DE69738101T2 (de) | Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen | |
DE69128367T2 (de) | System und Verfahren zur Transaktionsbearbeitung mit verminderter Verriegelung | |
DE69909021T2 (de) | Dynamische Speicherrückforderung ohne Compiler- oder Programmverbinderunterstützung | |
DE69836796T2 (de) | Datenverarbeiter mit lokalisierter gedächtnisreklamierung | |
DE69613594T2 (de) | Rechnersicherungssystem mit offenen Dateien | |
DE3151745C2 (de) | ||
DE69800909T2 (de) | Verfahren und Vorrichtung zur Optimierung der präzisen Speicherbereinigung, bei der Programmschleifen mit Zeiger-Feldern verwendet werden | |
DE69516538T2 (de) | Speicherung von rechnerdaten | |
DE69119222T2 (de) | Datensicherung und Beseitigung in einem Datenverarbeitungssystem | |
DE69229156T2 (de) | Digitaldatenprozessor mit verbesserter Wiederanlaufkennzeichnung und Verzweigung | |
DE102012208141B4 (de) | Ausgleich nachlassender Funktionsfähigkeit | |
DE69322683T2 (de) | Verfahren und Vorrichtung zur Durchführung eines pseudo-LRU Cachespeicherersetzungsschemas mit einer Verriegelungsfunktion | |
DE69932874T2 (de) | Verfahren und Computersystem zur dynamischen Generationsverwaltung von Rechnerspeicher | |
DE60129025T2 (de) | Speicherbereichszuordnung in einem dateisystem zum beschreiben beliebiger bereiche | |
DE60213867T2 (de) | Vorrichtung zur verwaltung von datenreplikation | |
DE69133302T2 (de) | Registerabbildung in einem einzigen Taktzyklus | |
DE69030024T2 (de) | Verfahren zur Herstellung einer Duplikation von einer Datenbank | |
DE4210126C2 (de) | Verfahren zur dynamischen Dateierweiterung in einem Online-Datenbanksystem und Vorrichtung zur Durchführung des Verfahrens | |
DE69033064T2 (de) | Verfahren zur Zuordnung von reellen Seiten zu virtuellen Seiten mit davon verschiedenen Seitengrössen | |
DE69431499T2 (de) | Meta-data-Struktur und Handhabung | |
DE69131472T2 (de) | Verfahren zum Vorsehen eines synchronisierten Datencachespeicherbetriebs für Prozessoren in einer parallelen Verarbeitungsanordnung und parallele Verarbeitungsanordnung zur Durchführung des Verfahrens | |
DE69923658T2 (de) | Dynamische speicherplatzzuordnung |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition |