DE69738101T2 - Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen - Google Patents

Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen Download PDF

Info

Publication number
DE69738101T2
DE69738101T2 DE69738101T DE69738101T DE69738101T2 DE 69738101 T2 DE69738101 T2 DE 69738101T2 DE 69738101 T DE69738101 T DE 69738101T DE 69738101 T DE69738101 T DE 69738101T DE 69738101 T2 DE69738101 T2 DE 69738101T2
Authority
DE
Germany
Prior art keywords
pointer
slot
smart
direct
referenced
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
Application number
DE69738101T
Other languages
English (en)
Other versions
DE69738101D1 (de
Inventor
John G. Bellevue Bennett
Ketan Seattle Dalal
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Corp
Original Assignee
Microsoft Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Microsoft Corp filed Critical Microsoft Corp
Application granted granted Critical
Publication of DE69738101D1 publication Critical patent/DE69738101D1/de
Publication of DE69738101T2 publication Critical patent/DE69738101T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation
    • Y10S707/99957Garbage collection

Description

  • Technisches Gebiet
  • Die vorliegende Erfindung bezieht sich auf das Gebiet von Objektverweisen und insbesondere auf das Gebiet der Objektverweisoptimierung.
  • Hintergrund der Erfindung
  • Einige Computeranwendungen, wie zum Beispiel CAD/CAM-Anwendungen greifen typischerweise auf große Sätze von Datenobjekten („Objekte") zu, entwerfen, pflegen und ändern diese über einen langen Zeitraum, unter Verwendung eines einzelnen Computersystems oder unter Verwendung einer Anzahl verbundener Computersysteme. Für derartige Objekte ist es üblich, dass sie Verweise auf andere Objekte in dem Objektsatz enthalten. Derartige Anwendungen verwenden oft ständige Objektsysteme, um diese Objekte zu pflegen und sie für den Zugriff und für Änderungen auf einem beliebigen verbundenen Computersystem zugänglich zu machen. Ständige Objektsysteme stellen die stetige Verfügbarkeit von ständigen Objekten sicher, indem sie diese auf eine nichtflüchtige Art auf einem Objektserver speichern, wie zum Beispiel einer Datenbank oder einem Dateisystem, während ständige Objekte in den Hauptspeicher eines Computersystems verschoben werden können, damit auf dem Computersystem ausgeführte Programme darauf zugreifen und sie verarbeiten können.
  • Wenn ein auf dem Computersystem ausgeführtes Programm den Zugriff auf ein Objekt und Änderungen an diesem auf seinem Hauptspeicher beendet, überträgt das ständige Objektsystem das Objekt auf den Objektserver, so dass das Objekt auf eine nichtflüchtige Art gespeichert wird. Das übertragene Objekt kann Verweise auf andere Objekte in dem Objektsatz enthalten. Zu dem Zeitpunkt der Übertragung umfasst jeder dieser Verweise im Allgemeinen einen Pointer auf eine Adresse in dem Hauptspeicher des gleichen Computersystems, in das das referenzierte Objekt geladen wurde. Derartige Verweise hängen von der Identität des Computersystems, die durch den Pointer nicht wiedergegeben wird, sowie dem bestimmten Inhalt des Hauptspeichers des Computersystems ab, der vollkommen verschieden sein kann, wenn ein Programm das nächste Mal das übertragene Objekt von dem Objektserver überträgt. Wenn der Objektserver zu einem späteren Zeitpunkt die Version des Objekts, die Hauptspeicherpointer enthält, ei nem Programm auf einem anderen Computersystem zur Verfügung stellt, werden die Hauptspeicherpointer in dem Objekt ungültig sein. Als Teil des Verfahrens zum Übertragen des Objekts auf den Objektserver, führt das ständige Objektsystem deshalb ein als „Passivierung" („passivation") bezeichnetes Verfahren durch. Passivierung umfasst das Ersetzen der Verweise des Hauptspeicherpointers in dem passivierten Objekt, die dazu verwendet werden, die referenzierten Objekte in dem Hauptspeicher des gegenwärtigen Computersystems zu lokalisieren, durch die von dem ständigen Objektsystem verwendeten ständigen Pointer, um die referenzierten Objekte auf dem Objektserver zu lokalisieren. (Ständige Pointer werden auch als „Objektidentifikatoren" (OID) bezeichnet und können unter Verwendung von Datenstrukturen mit globalen eindeutigen Identifikatoren (GUID) dargestellt werden.) Das derartige Ersetzen eines Hauptspeicherpointers durch einen ständigen Pointer wird als „Rückgängigmachen des Umwandelns" ("unswizzling") des Hauptspeicherpointers bezeichnet.
  • Wenn ein Programm zu einem späteren Zeitpunkt das ständige Objektsystem verwendet, um auf das auf den Objektserver übertragene Objekt zuzugreifen oder dieses zu ändern, überträgt das ständige Objektsystem das Objekt von dem Objektserver zu dem Hauptspeicher des Computersystems, auf dem das Programm ausgeführt wird, und führt ein Verfahren zur „Entpassivierung" ("depassivation") durch. Entpassivierung umfasst das Ersetzen der ständigen Pointer in dem übertragenen Objekt, die im Allgemeinen von dem Programm nicht verwendet werden können, um auf die referenzierten Objekte, auf die durch die ständigen Pointer Bezug genommen wird, zuzugreifen und diese zu ändern, durch Hauptspeicherpointer, die das Programm verwenden kann, um auf die referenzierten Objekte zuzugreifen und diese zu ändern. Das derartige Ersetzen eines ständigen Pointers durch einen Hauptspeicherpointer wird als „Umwandeln" („swizzling") des ständigen Pointers bezeichnet.
  • Herkömmliche Umwandlungsverfahren werden in drei Kategorien eingeteilt, von denen jedes wesentliche Nachteile aufweist. Die Hardwareumwandlung verwendet die Seitenspeichertechnik eines vorhandenen virtuellen Speicherverwaltungssystems, um referenzierte Objekte zu laden, wenn die auf sie gerichteten Hauptspeicherpointer durch das Programm, das das entpassivierte Objekt verwendet, aufgelöst werden. Virtuelle Speicherverwalter teilen einen Adressraum des Hauptspeichers, der größer als der tatsächliche Hauptspeicher ist, in Seiten mit einer festen Länge ein. Einige der Seiten in dem Hauptspeicherraum werden tatsächlich in dem Hauptspeicher abgebildet, während andere „seitenausgelagert" („paged out") werden. Wenn ein Programm versucht, einen Poin ter auf eine seitenausgelagerte Seite zu dereferenzieren, führt der Versuch zu einem Hardware-Interrupt, der als „Seitenfehler" („page fault") bezeichnet wird. Seitenfehler werden von einer Interrupt-Dienstroutine (ISR) bearbeitet, die die fehlerhafte Seite „seiteneinlagert", indem sie Platz für sie im Hauptspeicher findet (in den meisten Fällen durch Seitenauslagern einer anderen Seite), die fehlerhafte Seite von einer Festplatte in den Hauptspeicher lädt, die fehlerhafte Seite als seiteneingelagert markiert und indem sie der Dereferenzierungsoperation ermöglicht, fortzufahren.
  • Nach dem Hardwareumwandlungsverfahren wird, wenn das entpassivierte Objekt geladen wird, jeder ständige Pointer durch einen Hauptspeicherpointer auf eine „Geisterseite" („ghost page") ersetzt, die als seitenausgelagert markiert wird. Wenn ein Programm versucht, einen Hauptspeicherpointer auf eine Geisterseite zu dereferenzieren, wird ein Seitenfehler erzeugt und eine geänderte Bearbeitungsroutine des Seitenfehlerinterrupts lädt das referenzierte Objekt von dem Objektserver unter Verwendung seines ständigen Pointers, markiert die Geisterseite als seiteneingelagert und ermöglicht der Dereferenzierungsoperation fortzufahren. Nachfolgende Versuche, den Hauptspeicherpointer zu dereferenzieren, laufen ohne weitere Verzögerung ab. Die Hardwareumwandlung hat den Vorteil, dass referenzierte Objekte nicht geladen werden, bis auf sie tatsächlich zugegriffen wird. Die Hardwareumwandlung weist jedoch auch zwei wichtige Nachteile auf: (1) Das Seitenfehlerverfahren und das Seiteneinlagern sind kostspielige Operationen, die ungefähr so lange dauern wie das Ausführen von 2000 Befehlen auf einigen Prozessoren. (2) Die von virtuellen Speicherverwaltungssystemen verwendete feste Seitengröße ist zum Speichern von Objekten mit variabler Größe schlecht geeignet – das führt dazu, dass ein Teilabschnitt des Hauptspeichers, der größer als das geladene Objekt ist, ausschließlich für das geladene Objekt reserviert ist, und Objekte, die mit der Zeit so groß werden, dass sie die Größe der zugeordneten Seiten überschreiten, nicht aufnehmen kann.
  • Die indirekte Softwareumwandlung verwendet einen Speicherplatz, der als ein „residenter Objektdeskriptor" („resident object descriptor") bezeichnet wird, um einen Grad an Umleitung zwischen einem Pointer in dem entpassivierten Objekt und dem referenzierten Objekt zu schaffen. Nachdem ein entpassiviertes Objekt geladen wurde, wird jeder ständige Pointer in dem entpassivierten Objekt in einen residenten Objektdeskriptor verschoben und durch einen Pointer auf den residenten Objektdeskriptor ersetzt. Das erste Dereferenzieren der Pointer auf einen residenten Objektdeskriptor führt dazu, dass das referenzierte Objekt geladen und ein Hauptspeicherpointer auf das geladene referenzierte Objekt in dem Objektdeskriptor gespeichert wird. Dann wird der Hauptspeicherpointer auf das geladene referenzierte Objekt in dem residenten Objektdeskriptor dereferenziert, um den Zugriff auf das referenzierte Objekt möglich zu machen. Wenn der Pointer auf einen residenten Objektdeskriptor danach dereferenziert wird, wird der Hauptspeicherpointer auf das geladene referenzierte Objekt in dem residenten Objektdeskriptor dazu verwendet, um auf das referenzierte Objekt zuzugreifen. Genau wie die Hardwareumwandlung weist die indirekte Softwareumwandlung den Vorteil auf, dass referenzierte Objekte nicht geladen werden; bis auf sie tatsächlich zugegriffen wird. Ferner kann die Ladung von referenzierten Objekten rückgängig gemacht werden oder die Objekte können, ohne Pointer ungültig zu machen, in den residenten Objektdeskriptor, der in den entpassivierten Objekten gespeichert ist, verschoben werden. Die indirekte Softwareumwandlung weist jedoch auch einen wichtigen Nachteil auf: Das Dereferenzieren von zwei Hauptspeicherpointern (der erste in dem entpassivierten Objekt, der zweite in dem residenten Objektdeskriptor), das jedes Mal erforderlich ist, wenn das Programm auf das referenzierte Objekt zugreift, dauert doppelt so lange wie das Dereferenzieren eines einzelnen Hauptspeicherpointers oder ungefähr genauso lange wie das Ausführen von 90 Befehlen auf einigen Prozessoren dauert.
  • Die direkte Softwareumwandlung umfasst das Ersetzen jedes ständigen Pointers durch einen Hauptspeicherpointer direkt auf das referenzierte Objekt. Während diese Herangehensweise den zusätzlichen durch die indirekte Softwareumwandlung angefallenen Zeitaufwand der Doppelumleitung überwindet, weist sie den Nachteil auf, dass das Rückgängigmachen des Ladens von referenzierten Objekten oder das Verschieben dieser, die in den entpassivierten Objekten gespeicherten direkten Hauptspeicherpointer ungültig macht. Dies kann Versuche, den Speicher aus Objekten, die durch entpassivierte Objekte referenziert werden, zu verschieben oder zu regenerieren, schwierig oder unmöglich machen.
  • In Anbetracht der Nachteile der herkömmlichen Umwandlungsverfahren würde ein Umwandlungsverfahren mit einem niedrigen Zeitaufwand, das das Rückgängigmachen des Ladens referenzierter Objekte und deren Verschieben erleichtert, einen wesentlichen Nutzen bringen.
  • MCAULIFFE, M. L., SOLOMON, M. H.: "A trace-based simulation of pointer swizzling techniques" DATA ENGINEERING, 1995. PROCEEDINGS OF THE ELEVENTH INTERNATIONAL CONFERENCE ON TAIPEI; TAIWAN, 6.–10. März 1995, LOS ALAMITOS, CA, USA, IEEE COMPUT. SOC., 10. März 1995, Seite 52–61 bezieht sich auf verschiedene Umwandlungsverfahren, die in Abhängigkeit von der Zeit der Umwandlung als „eifrig" ("eager") oder „träge" ("lazy") und als „direkt" ("direct") oder „indirekt" ("indirect") in Bezug auf Gültigkeitspflege klassifiziert werden. Wann immer ein Objekt in den Speicher eingelesen wird, werden bei der eifrigen indirekten Umwandlung alle Pointer innerhalb des Objekts umgewandelt, um auf OTE zu zeigen. Jeder OTE (Object Table Entry = Objektverzeichniseintrag) in einem Objektverzeichnis, das einen Eintrag für jedes gegenwärtig von einer Anwendung verwendete Objekt enthält, enthält einen (möglicherweise Null-)Pointer auf ein Objekt in dem virtuellen Speicher und andere Informationen über den Zustand des Objekts. Wenn ein Pointer in dem eifrigen indirekten Umwandlungsverfahren dereferenziert wird, wird der OTE geprüft, um zu erkennen, ob das Zielobjekt resident ist. Wenn es resident ist, wird der OTE einen Pointer darauf enthalten. Wenn es nicht resident ist, wird der OTE einen Nullpointer enthalten, und in dem Fall muss das Objekt aus der Datenbank abberufen werden. Das träge indirekte Verfahren wandelt Pointer träge um, um auf OTE zu zeigen. Ein träges Verfahren wird warten, bis ein Pointer tatsächlich verwendet wird, bevor es ihn umwandelt. Um einen Pointer beim trägen Umwandeln zu dereferenzieren, wird er zuerst geprüft, um zu erkennen, ob er umgewandelt wird oder nicht. Wenn er umgewandelt ist, wird wie beim indirekten Umwandeln fortgefahren. Wenn er nicht umgewandelt ist, wird nach dem OID in dem OID-Index gesucht, wobei OID auf OTE abgebildet werden, und der entstandene OTE wird zum Lokalisieren des Zielobjekts im Speicher sowie zum Umwandeln des Pointers verwendet. Das Verfahren zum Dereferenzieren eines Pointers beim trägen direkten Umwandeln ist das gleiche wie beim trägen indirekten Umwandeln, mit der Ausnahme, dass die virtuelle Adresse des Zielobjekts, anstatt die Adresse seines OTEs, zum Umwandeln der Pointer verwendet wird.
  • CHONG-MOK PARK ET AL: "Providing orthogonal persistence to C++ using forced inheritance", COMPUTER SOFTWARE AND APPLICATIONS CONFERENCE, 1994. COMPSAC 94. PROCEEDINGS., EIGHTEENTH ANNUAL INTERNATIONAL, TAIPEI, TAIWAN, 9.–11. NOVEMBER 1994, LOS ALAMITOS, CA, USA, IEEE COMPUT. SOC., 9. November 1994, Seite 64–70 bezieht sich auf zwei Arten zum Unterstützen von ständigen Pointern. Eine Art ist die Verwendung von Speicherpointern als ständige Pointer. Die andere Art ist das zur Verfügung stellen von Smartpointern, die als ständige Pointer wirken. Smartpointer sind Objekte in Kategorien, die zusätzliche Aufgaben ausführende Pointer nachbilden. Diese Pointer speichern die OID sowie Speicheradressen von ständigen Objekten.
  • KORDALE, R., AHAMAD, M.: "Objekt Caching in a CORBA Compliant System", TECHNICAL REPORT GIT-CC-95-23, COLLEGE OF COMPUTING, GEORGIA INSTITUTE OF TECHNOLOGY, ATLANTA, GA 30332, USA, Nr. 23, 1995, Seite 1–12 legt Kennzeichnungsverweise offen, als eine Art der Unterscheidung zwischen Verweisen auf residente und nicht residente Objekte. Ein nicht gekennzeichneter Verweis ist ein direkter Speicherpointer auf das Objekt in dem Speicher. Ein gekennzeichneter Verweis enthält einen Objektidentifikator, der zum Lokalisieren des Objekts auf einer Festplatte oder auf einem Fernserver ausreicht. Jedes Mal, wenn ein Verweis verschoben wird, wird das Kennzeichen geprüft, um zu gewährleisten, dass es auf ein residentes Objekt zeigt. Wenn es nicht auf ein residentes Objekt zeigt, wird ein Objektfehler ausgelöst.
  • DAY, M. S.: "Client Cache Management in a Distributed Objekt Database", PHD THESIS, MASSACHUSETTS INSTITUTE OF TECHNOLOGY, 1995 bezieht sich auf Client-Cache-Verwaltung in einer verteilten Objektdatenbank und zeigt die Experimentergebnisse des Testens verschiedener Lösungen für drei Probleme, die bei der Durchführung des Abrufens und der Cache-Verwaltung in Bezug auf die Objektgrößeneinheiten, anstatt fester Größeneinheiten, wie zum Beispiel Seiten, auftreten: Welche Objekte vorausgelesen werden sollen; wie Interobjektverweise aus dem Cache übersetzt oder umgewandelt werden sollen, wenn sie vom Server zum Client abgerufen werden und welche Objekte aus dem Cache verlagert werden sollen.
  • HOSKING, A. L., MOSS, J. E. B.: "Object fault handling for persistent programming languages: a performance evaluation", 8" ANNUAL ACM CONFERENCE ON OBJECTORIENTED PROGRAMMING SYSTEMS, LANGUAGES AND APPLICATIONS, OOPSLA 1993, WASHINGTON DC, USA, 26. SEPTEMBER–1. OKTOBER 1993 beschreibt Fehlererkennung in einem Knoten-Markierungsschema, bei dem es erforderlich ist, dass alle Objektverweise in residenten Objekten zu Pointern umgewandelt werden. Kleine als Fehlerblöcke bezeichnete Proxyobjekte übernehmen den Platz der nicht residenten Objekte. Ein Fehlerblock enthält den OID des Zielobjekts und kann von einem normalen Objekt unterschieden werden. Wann immer ein sich auf einen Fehlerblock beziehender Verweis befolgt wird, wird das Zielobjekt resident gemacht. Der Fehlerblock wird auf das jetzt residente Objekt geändert. Der aktualisierte Fehlerblock wird als ein indirekter Block bezeichnet. Wenn sich ein zu befolgender Verweis auf einen indirekten Block bezieht, kann das Zielobjekt durch eine Umleitung lokalisiert werden. Wenn ein Objekt resident gemacht wird, werden seine Pointerfelder nach dem für die Fehlererkennung angewendeten Mechanismus umgewandelt. Alle Felder, die sich auf schon resi dente Objekte beziehen, werden so umgewandelt, dass sie direkt auf jene Objekte zeigen.
  • KEMPER, A., KOSSMAN, D.: "Adaptable Pointer swizzling strategies in object bases", PROCEEDINGS OF THE INTERNATIONAL CONFERENCE ON DATA ENGINEERING, WIEN, 19. APRIL BIS 23. APRIL 1993, LOS ALAMITOS, IEEE COMP. SOC. PRESS, US, BD. KONF. 9, 23. APRIL 1993, Seite 155–162 klassifiziert und bewertet verschiedene Herangehensweisen, um den Zugriff auf residente ständige Objekte in dem Hauptspeicher zu optimieren, was als Pointerumwandlung bezeichnet wird. Um den Zugriff auf Interobjektverweise zu beschleunigen, werden die ständigen Pointer in Hauptspeicherpointer umgewandelt. Eifrige und träge, direkte und indirekte Umwandlungsverfahren werden bewertet und mit der Leistung eines Objektverwalters, der keine Pointerumwandlung verwendet, verglichen.
  • Übersicht über die Erfindung
  • Es ist das Ziel der vorliegenden Erfindung, die Ladung eines Objekts auf eine Art und Weise rückgängig zu machen, welche die Pointer auf das Objekt, die auf Anwendungen enthalten und in anderen Objekten gespeichert sind, nicht ungültig macht.
  • Dieses Ziel wird durch den Inhalt der unabhängigen Ansprüche erreicht. Ausführungsformen sind in den Unteransprüchen festgelegt.
  • Die vorliegende Erfindung verwendet Dreizustand-Verweise, um den Zugriff auf referenzierte Objekte zu verwalten. In einer bevorzugten Ausführungsform nach der Erfindung, ersetzt eine Umwandlungsvorrichtung der ständigen Pointer („die Vorrichtung") einen ständigen Pointer, der für das Erlangen eines referenzierten Objekts aus dem Objektserver verwendbar ist, durch einen Smartpointer. Der Smartpointer kann entweder direkt auf den Platz in dem Hauptspeicher, auf den das referenzierte Objekt geladen wurde, zeigen oder er kann indirekt auf das referenzierte Objekt durch einen Umleitungsslot zeigen. Die Vorrichtung speichert anfänglich den ständigen Pointer für das referenzierte Objekt in dem Umleitungsslot. Wenn der Smartpointer erstmalig dereferenziert wird, enthält der Smartpointer einen Pointer auf den Umleitungsslot. An dieser Stelle wird der ständige Pointer in dem Umleitungsslot dafür verwendet, das referenzierte Objekt vom Objektserver auf den Hauptspeicher zu laden. Nachdem das referenzierte Objekt geladen wurde, wird ein Pointer auf das geladene Objekt in dem Umleitungsslot sowie in dem Smartpoin ter gespeichert. Wenn der Smartpointer danach dereferenziert wird, enthält er einen direkten Pointer auf das geladene Objekt, der direkt dereferenziert wird, um sofort, ohne den Umleitungsslot zu verwenden, auf das referenzierte Objekt zuzugreifen.
  • Um das geladene referenzierte Objekt „stillzulegen", ersetzt die Vorrichtung den direkten Pointer in dem Smartpointer durch einen Pointer auf den Umleitungsslot. Wenn sich das geladene referenzierte Objekt in dem stillgelegten Zustand befindet, kann die Vorrichtung das Objekt in den Hauptspeicher verschieben, ohne den Smartpointer ungültig zu machen, indem der Pointer lediglich in dem Umleitungsslot eingestellt wird. Die Vorrichtung kann auch das referenzierte Objekt aus dem Hauptspeicher entfernen, wenn es sich in dem stillgelegten Zustand befindet. Wenn die Vorrichtung das referenzierte Objekt aus dem Hauptspeicher entfernt, speichert sie den ständigen Pointer für das referenzierte Objekt in dem Umleitungsslot, so dass ein nachfolgendes Dereferenzieren des Smartpointers dazu führt, dass das referenzierte Objekt geladen wird. Diese Eigenschaften der Vorrichtung werden vorzugsweise in einem Speicherbereinigungsschema zum Regenerieren von unbenutztem Speicher verwendet, in dem referenzierte Objekte stillgelegt werden, wenn sie nicht vor kurzem verwendet und zum Entfernen aus dem Hauptspeicher verfügbar gemacht wurden.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist ein Blockdiagramm der oberen Ebene des Universal-Computersystems, in dem die Vorrichtung vorzugsweise angewendet wird.
  • 2 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein ständiges Objekt zu laden und zu entpassivieren.
  • 3 ist ein Diagramm des Speichers, das die Ergebnisse des Arbeitsschritts 201 zeigt.
  • 4 ist ein Diagramm des Speichers, das die Ergebnisse der Arbeitsschritte 203 und 204 zeigt.
  • 5 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise durch die Aktivität in Erwiderung auf einen Versuch eines Anwendungsprogramms, einen Smartpointer zu dereferenzieren, durchgeführt werden.
  • 6 ist ein Diagramm des Speichers, das die Ergebnisse der Arbeitsschritte aus 5 zeigt.
  • 7 zeigt die Schritte, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein Objekt zum Rückgängigmachen des Ladens vorzubereiten.
  • 8 ist ein Diagramm des Speichers, das die Ergebnisse der in 7 gezeigten Arbeitsschritte darstellt.
  • 9 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um die Ladung eines Objekts rückgängig zu machen.
  • 10 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein Objekt in den Hauptspeicher zu verschieben.
  • 11 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um das Stilllegungsverfahren im großen Stil durchzuführen.
  • 12 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um die Flush-Operation durchzuführen.
  • Genaue Beschreibung der Erfindung
  • Die vorliegende Erfindung verwendet Dreizustand-Verweise, um den Zugriff auf referenzierte Objekte zu verwalten. Nach der Erfindung ersetzt eine Umwandlungsvorrichtung für ständige Pointer („die Vorrichtung") in einem referenzierenden Objekt einen ständigen Pointer auf ein referenziertes Objekt, dessen Ladung rückgängig gemacht wurde, durch einen Smartpointer auf das referenzierte Objekt.
  • Wenn ein referenziertes Objekt geladen wird, verschiebt die Vorrichtung in einer bevorzugten Ausführungsform zuerst den ständigen Pointer von dem referenzierten Objekt in einen Umleitungsslot in einem Verzeichnis von Umleitungsslots, wo er mit einer Anzeige, dass er ein ständiger Pointer ist, gespeichert wird. Die Vorrichtung ersetzt an dieser Stelle auch den ständigen Pointer in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält und der anzeigt, dass er keinen direkten Pointer auf das referenzierte Objekt enthält. Bei Smartpointer, die einen Pointer auf den Umleitungsslot enthalten, spricht man vom „indirekt Referenzieren" des referenzierten Objekts.
  • Wenn der Smartpointer in dem referenzierenden Objekt zu einem späteren Zeitpunkt dereferenziert wird, bestimmt die Dereferenzierungsoperation, dass der in dem Smartpointer enthaltene Pointer kein direkter Pointer auf das referenzierte Objekt ist und benutzt ihn, um auf den ständigen Pointer in der zentralen Datenstruktur zuzugreifen. Dann verwendet die Vorrichtung ständige Pointer, um das referenzierte Objekt auf den Hauptspeicher unter einer geeigneten Adresse zu laden. Die Vorrichtung speichert diese Adresse in dem Verweis in dem referenzierenden Objekt sowie in dem Umleitungsslot mit Anzeigen darauf, dass sie ein direkter Pointer auf das referenzierte Objekt ist. Danach verlaufen Zugriffe auf das referenzierte Objekt schnell, indem der in dem referenzierenden Objekt gespeicherte direkte Pointer sofort verwendet wird, ohne das referenzierte Objekt erneut zu laden oder auf das Slotverzeichnis zuzugreifen. Wenn andere referenzierende Objekte Verweise auf die gleichen referenzierten Objekte enthalten, werden diese, wie die Verweise auf das referenzierte Objekt in dem ersten referenzierenden Objekt, durch Pointer auf den gleichen Umleitungsslot ersetzt. Wenn diese anderen Pointer auf den Umleitungsslot dereferenziert werden, bestimmt die Vorrichtung, dass der Umleitungsslot einen direkten Pointer auf das geladene referenzierte Objekt enthält und kopiert den direkten Pointer in das andere referenzierende Objekt, um auf das geladene referenzierte Objekt direkt zuzugreifen, ohne es erneut zu laden.
  • Wenn die Verwendung des referenzierten Objekts abgeschlossen ist, konvertiert die Erfindung vorzugsweise alle Smartpointer, die das referenzierte Objekt direkt referenzieren, um das referenzierte Objekt indirekt zu referenzieren, indem alle direkten Pointer in referenzierenden Objekten auf das referenzierte Objekt durch Pointer auf den zentralen Datenstrukturslot ersetzt werden. Dadurch kann das referenzierte Objekt gegebenenfalls zu einem späteren Zeitpunkt in den Arbeitsspeicher verschoben werden, indem der Pointer in dem zentralen Datenstrukturslot lediglich aktualisiert wird, ohne dass ein Smartpointer in referenzierenden Objekten aktualisiert werden muss. Referenzierte Objekte können auch sicher freigegeben werden, wenn keiner der Verweise direkt auf sie zeigt. Referenzierte Objekte können in Erwiderung auf eine Anforderung von einem anderen Benutzer des referenzierten Objekts, ausschließlich selbst das referenzierte Objekt zu verwenden, freigegeben werden oder in Erwiderung auf einen Anstoß zum Regenerieren von Speicherabschnitten, die von unbenutzten Objekten belegt sind.
  • 1 ist ein Blockdiagramm der oberen Ebene des Universal-Computersystems, in dem die Vorrichtung vorzugsweise angewendet wird. Die Figur zeigt ein Computersystem 100, das auf ein Objekt zugreift. Das Computersystem 100, das auf ein Objekt zugreift, enthält einen Prozessor (CPU) 110, Ein-/Ausgabeeinrichtungen 120 und einen Hauptspeicher 130. Unter den Ein-/Ausgabeeinrichtungen 120 befindet sich eine Speichereinrichtung 121, wie zum Beispiel ein Festplattenlaufwerk. Die Ein-/Ausgabeeinrichtungen 120 umfassen ebenfalls eine Netzwerkverbindung 122, über die das Computersystem, das auf ein Objekt zugreift, Daten mit anderen Computersystemen austauschen kann. Die Ein-/Ausgabeeinrichtungen 120 umfassen ferner ein entfernbares Medienlaufwerk 123, das zum Installieren von Softwareprodukten, einschließlich der Vorrichtung, verwendet werden kann, die auf einem Computerlesbaren Medium, wie zum Beispiel einer CD-ROM, zur Verfügung gestellt werden. Der Hauptspeicher 130 enthält ein ständiges Objektsystem 131 zum beständigen Pflegen eines Objektsatzes. Die Umwandlungsvorrichtung 132 ist in dem ständigen Objektsystem 131 enthalten und wird auf dem CPU 110 ausgeführt. Der Hauptspeicher 130 umfasst ferner ein entpassiviertes Objekt 133, das einen Smartpointer 134 enthält. Das entpassivierte Objekt 133 wird hier ebenfalls als das referenzierende Objekt behandelt. Der Hauptspeicher 130 enthält ferner ein Slotverzeichnis 135, das aus einem Umleitungsslot 136 sowie anderen Umleitungsslots (nicht gezeigt) besteht. Das Slotverzeichnis entspricht vorzugsweise einem Bearbeitungsverzeichnis, das von dem Speicherverwalter benutzt wird. Zu bestimmten Zeitpunkten enthält der Hauptspeicher 130 ferner ein referenziertes Objekt 137 sowie andere referenzierte Objekte (nicht gezeigt).
  • 1 zeigt ebenfalls, dass die Netzwerkverbindung 122 des Computersystems 100, das auf ein Objekt zugreift, mit einer Netzwerkverbindung 152 eines Computersystems 150 eines Objektservers verbunden ist. Das Computersystem 150 eines Objektservers enthält einen Objektserver 153, der den Satz ständiger Objekte pflegt, indem er sie auf eine nichtflüchtige Weise speichert. Der Objektserver 153 reagiert auf Anforderungen von anderen Teilen des ständigen Objektsystems, ständige Objekte an den Objektserver und aus diesem zu übertragen. Das Computersystem 150 des Objektservers enthält ebenfalls einen Prozessor 151, der von dem Objektserver 153 verwendet wird. Während die Vorrichtung vorzugsweise auf Computersystemen implementiert wird, die wie oben beschrieben, konfiguriert sind, werden Kenner der Technik erkennen, dass sie auch auf Computersystemen implementiert werden kann, die unterschiedliche Konfigurationen aufweisen. Zum Beispiel werden die Computersysteme oft nicht alle in 1 gezeigten Funktionen enthalten oder sie können Funktionen, die nicht in 1 gezeigt sind, enthalten. Ferner kann der Objektserver 153 in dem Computersystem 100, das auf ein Objekt zugreift, lokalisiert sein, anstatt in dem Computersystem 150 des Objektservers.
  • 2 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein ständiges Objekt zu laden und zu entpassivieren. Die Vorrichtung kann ein ständiges Objekt in Erwiderung auf eine direkte Anforderung von einer Anwendung laden und entpassivieren. Wie unten erläutert, kann die Vorrichtung ebenfalls ein ständiges Objekt in Erwiderung auf einen Versuch durch eine Anwendung, einen Smartpointer auf das ständige Objekt zu dereferenzieren, laden und entpassivieren. In Schritt 201 verwendet die Vorrichtung einen ständigen Pointer für das ständige Objekt, um das Objekt aus dem Objektserver 153 (1) zu erhalten und das Objekt in dem Hauptspeicher 130 zu speichern. Das in Schritt 201 geladene Objekt kann einen oder mehrere Pointer auf andere ständige Objekte enthalten. Derartige Pointer auf andere Objekte sind im Allgemeinen ständige Pointer, die verwendet werden können, um die durch sie referenzierten Objekte aus dem Objektserver als ein Ergebnis der vorherigen Passivierung des in Schritt 201 geladenen Objekts, zu erlangen. Schritt 203 speichert ebenfalls vorzugsweise eine Anzeige in dem Umleitungsslot, so dass der Pointer in dem Umleitungsslot ein ständiger Pointer auf das referenzierte Objekt ist, kein Hauptspeicherpointer direkt auf das dereferenzierte Objekt.
  • 3 ist ein Diagramm des Speichers, das die Ergebnisse des Arbeitsschritts 201 zeigt. 3 zeigt den Hauptspeicher 330 sowie einen Abschnitt des Inhalts des Hauptspeichers. Im Hauptspeicher sind das in Schritt 201 geladene referenzierende Objekt 333 und ein Slotverzeichnis 335 gezeigt. Das Slotverzeichnis enthält eine Anzahl von Slots, einschließlich Slots 336, 341, 342, 343 und 344. Wenn das referenzierende Objekt 333 in Schritt 201 geladen wird, enthält es einen ständigen Pointer 371.
  • Noch einmal auf 2 bezugnehmend, entpassiviert die Vorrichtung das geladene Objekt in Schritten 202205. Die Vorrichtung durchläuft die Schritte 202205 für jeden in dem geladenen Objekt enthaltenen ständigen Pointer in einer Schlaufe. In Schritt 203 weist die Vorrichtung dem Objekt, das durch den ständigen Pointer referenziert wird, einen Umleitungsslot in dem Slotverzeichnis 135 (1) zu, indem der ständige Pointer in einen leeren Umleitungsslot in dem Slotverzeichnis kopiert wird.
  • 4 ist ein Diagramm des Speichers, das die Ergebnisse der Arbeitsschritte 203 und 204 zeigt. In 4 kann man erkennen, dass der ständige Pointer 371 (3) aus dem referenzierenden Objekt 333 in einen leeren Slot 436 des Slotverzeichnisses 435 gemäß Schritt 202 kopiert wurde. Wenn jedoch ein Umleitungsslot in dem Slotverzeichnis schon dem referenzierten Objekt zugewiesen wurde, weist die Vorrichtung vorzugsweise dem referenzierten Objekt in Schritt 203 keinen weiteren Umleitungsslot zu. Die Vorrichtung bestimmt vorzugsweise, ob dem referenzierten Objekt schon ein Slot in dem Slotverzeichnis zugewiesen wurde, indem ein index auf dem Slotverzeichnis gepflegt wird, der von den ständigen Pointern der referenzierten Objekte hin auf Slots in dem Slotverzeichnis zeigt, das jenen referenzierten Objekten zugewiesen ist. Dieser index kann sich separat von dem Slotverzeichnis befinden oder er kann direkt in das Slotverzeichnis integriert sein. Wenn der index anzeigt, dass ein Umleitungsslot in dem Slotverzeichnis nicht bereits dem referenzierten Objekt zugewiesen wurde und die Vorrichtung dem referenzierten Objekt einen Slot in dem Slotverzeichnis zuweist, aktualisiert die Vorrichtung vorzugsweise ebenfalls diesen Index, um eine Abbildung von dem ständigen Pointer des referenzierten Objekts zu dem zugewiesenen Slot einzubeziehen.
  • In Schritt 204 ersetzt die Vorrichtung den ständigen Pointer in dem geladenen Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot für das referenzierte Objekt enthält. Als Teil von Schritt 204 ersetzt die Vorrichtung einen ständigen Pointer durch einen Smartpointer und speichert eine Anzeige in dem Smartpointer, die der im Smartpointer enthaltene Pointer auf einen Umleitungsslot richtet, anstatt direkt auf das referenzierte Objekt zu zeigen. In 4 kann man erkennen, dass die Vorrichtung in Schritt 204 den ständigen Pointer 371 in einem referenzierenden Objekt 333 (3) durch einen Smartpointer 434 ersetzt. Der Smartpointer 434 umfasst einen Pointer auf den Slot 436 sowie eine Anzeige („1") 462, die der im Smartpointer enthaltene Pointer 461 auf einen Slot richtet, anstatt direkt auf das referenzierte Objekt zu zeigen. Um die Länge des Smartpointers genauso lang wie die Länge eines Hauptspeicherpointers zu machen, den die Anwendung in dem entpassivierten Objekt verarbeiten soll, speichert die Vorrichtung vorzugsweise diese Anzeige als ein Bit in einer unbenutzten Bit-Stellung in dem Pointer auf den Umleitungsslot. Auf Grund von Speicherbyte-Ausrichtungsanforderungen sind ein oder mehrere der niedrigstwertigen Bits des Pointers auf den Umleitungsslot unbenutzt, genauso wie die niedrigstwertigen Bits von Pointern auf andere Objekte. Deshalb speichert die Vorrichtung die Anzeige vorzugsweise in dem Smartpointer in dem niedrigstwertigen Bit des Hauptspeichersortierers, die in dem Smartpointer enthalten ist. Kenner der Technik werden erkennen, dass die Anzeige auch auf viele andere Arten nützlich gespeichert werden kann. In Schritt 205 schleift die Vorrichtung auf Schritt 202 zurück, um den nächsten ständigen Pointer in dem geladenen Objekt zu verarbeiten. Nach Schritt 205 werden diese Schritte abgeschlossen. Nachdem die Vorrichtung das Objekt, wie in 2 gezeigt, lädt und erstpassiviert, kann die Anwendung, für die das Objekt geladen wurde, auf das Objekt in dem Hauptspeicher zugreifen und sie kann insbesondere die in dem Objekt erscheinenden Smartpointer, wie zum Beispiel Smartpointer 434 (4), dereferenzieren.
  • 5 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung in Erwiderung auf einen Versuch eines Anwendungsprogramms, einen Smartpointer zu dereferenzieren, durchgeführt wird. Diese Schritte werden vorzugsweise als die Implementierung eines Dereferenzierungsoperators für eine Klasse festgelegt, zu der alle Smartpointer gehören. In der Programmiersprache C++ kann eine Vorlage verwendet werden, um den Dereferenzierungsoperator für die Smartpointerklasse festzulegen, so dass diese Schritte einbezogen werden können.
  • Wenn in Schritt 501 ein bitweises UND des Smartpointers mit dem Wert „1" gleich 1 ist (d. h. wenn das niedrigstwertige Bit des Smartpointers „1" ist, wodurch angezeigt wird, dass der Smartpointer einen Pointer auf einen Slot anstatt einen direkten Pointer auf das referenzierte Objekt enthält), fährt die Vorrichtung dann mit Schritt 503 fort, andernfalls ist das Ergebnis dieses bitweisen UND „0", wodurch angezeigt wird, dass der in dem Smartpointer enthaltene Pointer ein direkter Pointer auf das referenzierte Objekt ist, und die Vorrichtung fährt mit Schritt 502 fort. In Schritt 502 sendet die Vorrichtung das referenzierte Objekt zurück, indem der direkte Pointer, der in dem Smartpointer gespeichert ist, unter Verwendung des Dereferenzierungsoperators des Standardpointers dereferenziert wird. In Schritt 503 ändert die Vorrichtung das niedrigstwertige Bit des Smartpointers von 0 auf 1. Wenn in Schritt 504 ein bitweises UND des Pointers in dem Slot, auf den durch den Slotpointer gezeigt wird, mit dem Wert „1" gleich „1" ist (d. h. wenn das niedrigstwertige Bit gleich „1" ist, wodurch angezeigt wird, dass der Pointer in dem Slot ein ständiger Pointer anstatt ein direkter Pointer auf das referenzierte Objekt ist), fährt die Vorrichtung dann mit Schritt 507 fort, andernfalls ist das niedrigstwertige Bit des Pointers in dem Slot eine „0" und der Pointer in dem Slot ist ein direkter Pointer auf das referenzierte Objekt und die Vorrichtung fährt mit Schritt 505 fort. In Schritt 505 kopiert die Vorrichtung den direkten Pointer auf den Smartpointer aus dem Slot, auf den durch den Smartpointer gezeigt wird. In Schritt 506 sendet die Vorrichtung das referenzierte Objekt zurück, indem der in dem Smartpointer gespeicherte direkte Pointer unter Verwendung des Dereferenzierungsoperators des Standardpointers dereferenziert wird. In Schritt 507 ändert die Vorrichtung die „1" in dem niedrigstwertigen Bit des Pointers in dem Slot, auf den durch den Smartpointer gezeigt wird, auf eine „0". In Schritt 508 ruft die Vorrichtung das ständige Objektsystem auf, um das referenzierte Objekt aus dem Objektserver unter Verwendung des in dem Slot, auf den durch den Smartpointer gezeigt wird, enthaltenen ständigen Pointers zu erhalten. In Schritt 508 speichert die Vorrichtung ferner einen direkten Pointer auf das geladene referenzierte Objekt in dem Slot, auf den durch den Slotpointer gezeigt wird. Nach Schritt 508 fährt die Vorrichtung mit Schritt 505 fort, um den direkten Pointer auf das referenzierte Objekt in den Smartpointer zu kopieren und das referenzierte Objekt zurückzusenden.
  • 6 ist ein Diagramm des Speichers, das die Ergebnisse der Arbeitsschritte aus 5 zeigt. Beim Vergleich von 6 mit 4 kann man erkennen, dass die Vorrichtung das referenzierte Objekt 637 gemäß Schritt 508 geladen hat. Das geladene referenzierte Objekt 637 enthält vorzugsweise seinen eigenen ständigen Pointer 638, der zusammen mit dem Slotverzeichnisindex, der von den ständigen Pointern bis zu den Umleitungsslots abgebildet wird, verwendet werden kann, um den Slot des referenzierten Objekts in dem Slotverzeichnis zu lokalisieren. Die Vorrichtung speichert ferner direkte Pointer auf das referenzierte Objekt 637 in dem Slotpointer 634 und in dem Slot 636, auf den vorher durch den Smartpointer 634 gezeigt wurde. Auf Grund der Byteausrichtungsanforderungen für den Platz des referenzierten Objekts 637 ist das niedrigstwertige Bit des Smartpointers 634 und des Slots 636 ferner „0", wodurch angezeigt wird, dass diese Pointer direkte Pointer auf das referenzierte Objekt sind.
  • Nachdem die in 5 gezeigte Dereferenzieroperation für einen Smartpointer durchgeführt wurde, laufen nachfolgende Dereferenzieroperationen schnell ab. Da das niedrigstwertige Bit des Smartpointers „0" ist, führt die Vorrichtung lediglich Schritte 501 und 502 aus, um das referenzierte Objekt 637, auf das durch den direkten Pointer 661 des Smartpointers 634 gezeigt wird, zurückzusenden. Da dieses verkürzte Verfahren nur einen einzigen Zugriff auf den Hauptspeicher einschließt, ist es zweimal so schnell wie herkömmliche indirekte Softwareumwandlungsverfahren, bei denen Pointer auf ein referenziertes Objekt immer durch einen anderen Pointer umgeleitet werden.
  • In einigen Fällen muss die Ladung eines referenzierten Objekts aus dem Speicher rückgängig gemacht werden. Wenn zum Beispiel eine andere Anwendung, möglicherweise auf einem anderen Computersystem, das Objekt mit dem richtigen Zugriff laden muss. Ein weiteres Beispiel ist, wenn ein von dem Objekt belegter Speicher für einen anderen Zweck verwendet werden muss. In diesen Fällen kann die Vorrichtung das Objekt zum Rückgängigmachen des Ladens derartig vorbereiten, dass keine Smartpointer auf das Objekt, die auf Anwendungen enthalten und in anderen geladenen, entpassivierten Objekten gespeichert sind, ungültig gemacht werden.
  • 7 zeigt die Schritte, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein Objekt zum Rückgängigmachen des Ladens vorzubereiten. Die Vorrichtung führt diese Schritte vorzugsweise ebenfalls aus, um ein Objekt zum Verschieben an eine andere Adresse innerhalb des Hauptspeichers vorzubereiten. Das Vorbereiten eines Objekts vor dem Rückgängigmachen des Ladens oder vor dem Verschieben ist als „Stilllegen" des Objekts bekannt. Diese Schritte identifizieren vorzugsweise das Objekt, das für das Rückgängigmachen des Ladens vorbereitet werden soll, indem der dem Objekt zugewiesene Umleitungsslot identifiziert wird. In Schritten 701703 durchläuft die Vorrichtung in einer Schlaufe jeden Smartpointer, der einen direkten Pointer auf das stillzulegende Objekt enthält, der den gleichen Wert wie der direkte Pointer zum stillzulegenden Objekt aufweist, der in dem identifizierten Slot gespeichert ist. In einer bevorzugten Ausführungsform umfasst Schritt 701 das Verschieben einer Liste der Smartpointer, die dem Umleitungsslot, der dem stillzulegenden Objekt zugeordnet ist, zugewiesen sind. Bei dieser Ausführungsform ist der Zeitaufwand relativ gering, sie erfordert jedoch das Pflegen einer Liste der Smartpointer, die jedem Umleitungsslot zugeordnet sind. In einer alternativen Ausführungsform umfasst Schritt 701 das Verschieben der Liste aller Smartpointer, die in dem Hauptspeicher geschaffen wurden. Während die alternative Ausführungsform den Nachteil hat, dass der Zeitaufwand relativ hoch ist, hat sie den Vorteil, dass sie die Speicher- und Verarbeitungsanforderungen des Pflegens einer Liste von Smartpointern für jeden Umleitungssiot vermeidet. Für jeden Smartpointer, der einen direkten Pointer auf das stillzulegende Objekt enthält, speichert die Vorrichtung in Schritt 702 einen Pointer auf den identifizierten Slot in dem Smartpointer, anstelle des direkten Pointers. Als Teil des Schritts 702 ändert die Vorrichtung ebenfalls das niedrigstwertige Bit des Smartpointers auf „1", um anzuzeigen, dass der Smartpointer jetzt einen Pointer auf einen Umleitungsslot, anstatt einen direkten Pointer auf das referenzierte Objekt, enthält. In Schritt 703 schleift die Vorrichtung auf Schritt 701 zurück, um den nächsten Smartpointer, der einen direkten Pointer auf das stillzulegende Objekt enthält, zu verarbeiten. Nachdem jeder derartige Smartpointer verarbeitet wurde, werden diese Schritte abgeschlossen. Beim Abschluss dieser Schritte gibt es keine Smartpointer in dem Hauptspeicher, die direkte Pointer auf das stillgelegte Objekt enthalten. Stattdessen bezieht sich jeder Smartpointer, der sich auf das stillgelegte Objekt bezieht, durch den Umleitungsslot auf das stillgelegte Objekt.
  • 8 ist ein Diagramm des Speichers, das die Ergebnisse der Arbeitsschritte, die in 7 gezeigt sind, zeigt. Beim Vergleich von 8 mit 6 kann erkannt werden, dass die Vorrichtung den direkten Pointer 661 in dem Smartpointer 634 (6) durch einen Poin ter auf den Slot 836 für das referenzierte Objekt ersetzt hat. Die Vorrichtung hat ferner das niedrigstwertige Bit des Smartpointers auf „1" verändert, wodurch angezeigt wird, dass der Smartpointer einen Pointer auf einen Umleitungsslot, anstatt einen direkten Pointer auf das referenzierte Objekt, enthält.
  • 9 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um die Ladung eines Objekts rückgängig zu machen. In Schritt 901 legt die Vorrichtung, wie in 7 gezeigt, den Umleitungsslot still, der zu dem Objekt gehört dessen Ladung rückgängig zu machen ist. In Schritt 902 hebt die Vorrichtung die Zuordnung für den Abschnitt des Hauptspeichers auf, der von dem Objekt, dessen Ladung rückgängig gemacht werden soll, belegt ist. In Schritt 903 ersetzt die Vorrichtung den direkten Pointer in dem Umleitungsslot, der dem Objekt, dessen Ladung rückgängig gemacht werden soll, zugewiesen ist, durch einen ständigen Pointer auf das Objekt, dessen Ladung rückgängig gemacht werden soll. Diese Schritte werden dann abgeschlossen. Wenn der Smartpointer auf ein Objekt, dessen Ladung rückgängig gemacht wurde, zu einem späteren Zeitpunkt dereferenziert wird, verwendet die Vorrichtung den in dem Umleitungsslot gespeicherten ständigen Pointer, um das Objekt, dessen Ladung rückgängig gemacht wurde, aus dem Objektserver wieder abzuberufen.
  • Nachdem die Vorrichtung die in 9 gezeigten Schritte durchführt, um die Ladung des Objekts rückgängig zu machen, wird der Hauptspeicher wieder in den in 4 gezeigten Zustand versetzt. Und zwar enthält der Smartpointer 434 einen Pointer 461 auf den Umleitungsslot 436, der dem Objekt, dessen Ladung rückgängig gemacht wurde, zugewiesen wird. Der Umleitungsslot 436 enthält einen ständigen Pointer auf das referenzierte Objekt, den die Vorrichtung verwenden kann, um das referenzierte Objekt erneut zu laden, wenn der Smartpointer 461 zu einem späteren Zeitpunkt dereferenziert wird.
  • Die Vorrichtung berücksichtigt ebenfalls die Verschiebung von referenzierten Objekten, während sie in den Hauptspeicher geladen sind. 10 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein Objekt in den Hauptspeicher zu verschieben. Wie in 7 gezeigt, legt die Vorrichtung in Schritt 1001 den Slot, der dem zu verschiebenden Objekt zugewiesen ist, still. In Schritt 1002 verschiebt die Vorrichtung das referenzierte Objekt in den Hauptspeicher, indem es auf einen anderen Platz in dem Hauptspeicher kopiert wird und indem der Speicher, der anfänglich das referenzierte Objekt enthalten hat, zu dem freien Pool zurückgesendet wird. In Schritt 1003 speichert die Vorrichtung in dem Slot, der dem verschobenen Objekt zu gewiesen wurde, einen direkten Pointer auf dem neuen Platz, auf den das referenzierte Objekt in Schritt 1002 verschoben wurde. Diese Schritte werden dann abgeschlossen.
  • Die Vorrichtung führt vorzugsweise ein Stilllegungsverfahren aller durch Slotpointer referenzierter Objekte zu verschiedenen Zeitpunkten durch. Dieses Verfahren wird als „Stilllegen im großen Stil" ("wholesale idling") bezeichnet und ermöglicht der Vorrichtung, nicht häufig dereferenzierte Smartpointer ausfindig zu machen, indem, nachdem erhebliche Zeit seit dem Stilllegen im großen Stil vergangen ist, Slots, die immer noch stillgelegt sind, mit Smartpointern übereinstimmen, die seit dem Durchführen des Verfahrens des Stilllegens im großen Stil nicht dereferenziert wurden.
  • 11 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um ein totales Stilllegungsverfahren durchzuführen. In Schritten 11011104 durchläuft die Vorrichtung jeden vorhandenen Smartpointer in einer Schlaufe. Diese Schlaufe umfasst vorzugsweise das Verschieben einer Liste von vorhandenen Smartpointern, die aktualisiert wird, wenn Smartpointer geschaffen oder zerstört werden. Wenn der Smartpointer in Schritt 1102 einen direkten Pointer auf das referenzierte Objekt enthält, wie durch sein niedrigstwertiges Bit angezeigt, fährt die Vorrichtung mit dem Schritt 1103 fort, ansonsten fährt die Vorrichtung mit Schritt 1104 fort. In Schritt 1103 speichert die Vorrichtung einen indirekten Pointer auf das referenzierte Objekt in dem Smartpointer, wobei er die Adresse des dem referenzierten Objekt zugewiesenen Slots umfasst, dessen niedrigstwertiges Bit auf „1" geändert wurde. In Schritt 1104 schleift die Vorrichtung auf Schritt 1101 zurück, um den nächsten Smartpointer zu verarbeiten. Wenn keine Smartpointer übrig sind, werden diese Schritte abgeschlossen.
  • Einige Programmierumgebungen stellen eine Funktion zur Verfügung, die als Speicherbereinigung bezeichnet wird, die ein periodisch durchgeführtes Verfahren ist, um unbenutzte Datenstrukturen zu identifizieren und deren Zuordnung aufzuheben. In vielen derartiger Programmierumgebungen ist die Speicherbereinigungsfunktion unter Verwendung eines „Erreichbarkeitsalgorithmus" ("reachability algorithm") implementiert, nach dem im Objekt enthaltene Pointer, die für die Verwendung bekannt sind, rekursiv dereferenziert werden, um auf jede Datenstruktur zuzugreifen, auf die direkt oder indirekt durch die für die Verwendung bekannte Datenstrukturen zugegriffen werden kann. Von allen verbleibenden Datenstrukturen wird angenommen, dass sie zurzeit nicht verwendet werden und ihre Zuordnung aufgehoben ist. In Programmierumgebungen, in denen diese Form von Speicherbereinigung angewendet wird, führt die Vorrichtung vorzugsweise das Stilllegungsverfahren im großen Stil durch, indem jeder Smartpointer stillgelegt wird, der während des rekursiven Dereferenzierens von Pointern als Teil des Speicherbereinigungsverfahrens aufgetreten ist, anstatt die in 11 gezeigten Schritte durchzuführen. Dadurch kann die Vorrichtung die Kosten des Pflegens der Liste von vorhandenen Smartpointern, die von den in 11 gezeigten Schritten benutzt werden, vermeiden.
  • Um Abschnitte des Hauptspeichers zu regenerieren, der von geladenen referenzierten Objekten, auf die nicht zugegriffen wird, belegt ist, führt die Vorrichtung vorzugsweise eine Flush-Operation nach einer vorgegebenen Zeitspanne nach dem Durchführen der Operation des Stilllegens im großen Stil durch. In der Flush-Operation werden Objekte, die immer noch stillgelegt sind, nach einer Zeitspanne seit dem Stilllegen im großen Stil, als unbenutzt angesehen und deren Ladung wird rückgängig gemacht. 12 ist ein Flussdiagramm, das die Schritte zeigt, die vorzugsweise von der Vorrichtung durchgeführt werden, um die Flush-Operation durchzuführen. In Schritten 12011203 durchläuft die Vorrichtung jeden verwendeten Smartpointer in einer Schlaufe. Wenn der Slot in Schritt 1202 noch stillgelegt ist, das heißt, wenn keiner der Smartpointer direkte Pointer auf das referenzierte Objekt, dem der Slot zugewiesen ist, enthält, fährt die Vorrichtung mit Schritt 1204 fort, um die Ladung des Objekts, dem der Slot zugewiesen ist, rückgängig zu machen. Nach den Schritten 1202 und 1204 fährt die Vorrichtung mit Schritt 1203 fort, um zu Schritt 1201 zurückzuschleifen, um den nächsten verwendeten Slot zu verarbeiten. Wenn keine Smartpointer übrig sind, werden diese Schritte abgeschlossen.
  • Während die vorliegende Erfindung in Bezug auf die bevorzugten Ausführungsformen gezeigt und beschrieben wurde, wird von Kennern der Technik verstanden, dass verschiedene Veränderungen oder Modifikationen in der Form und im Detail vorgenommen werden können, ohne vom Bereich der Erfindung abzuweichen. Zum Beispiel können die Speicherbereinigungs- und Flush-Operationen auf verschiedene Arten durchgeführt werden, so dass jede zum Rückgängigmachen des Ladens der unbenutzten referenzierten Objekte führt. Zum Beispiel kann die Vorrichtung eine Liste der Objekte pflegen, die nach dem Zeitpunkt ihres letzten Stilllegens sortiert wurden, und sie kann die Ladung der Objekte, die zuletzt stillgelegt wurden, zuerst periodisch rückgängig machen. Die Smartpointer und Umleitungsslots können auch andere Anzeigen als die, die als „0" gespeichert bezeichnet werden, verwenden, egal ob sie einen direkten Pointer auf das referenzierte Objekt in dem niedrigstwertigen Bit des Pointers enthalten. Zum Beispiel kann die Vorrichtung diese Anzeigen als Merker separat von dem Pointer speichern.

Claims (19)

  1. Verfahren in einem Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) zum Umwandeln ("swizzling") eines ständigen ("persistent") Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833), indem ein Umleitungsslot ("indirection slot") (136, 336, 341344, 436, 441444, 636, 641644, 836, 841844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungsslot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei das Verfahren folgende Schritte umfasst: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Verwendung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei das Verfahren weiterhin dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und weiterhin folgende Schritte umfasst: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei das Verfahren weiterhin folgende Schritte in Erwiderung auf eine Anforderung, den Speicher zu regenerieren (rückfordern, "reclaim"), umfasst: Identifizieren von Objekten, auf die kein direkter Pointer in keinem Smartpointer zeigt; und für jedes identifizierte Objekt: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das identifizierte Objekt enthält; Rückgängigmachen des Ladens ("unloading") des identifizierten Objekts; und Ersetzen des direkten Pointers in dem identifizierten Umleitungsslot durch einen Wiederladungsidentifikator, der zum erneuten Laden des identifizierten Objekts verwendbar ist.
  2. Verfahren in einem Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) zum Umwandeln eines ständigen Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833), indem ein Umleitungsslot (136, 336, 341344, 436, 441444, 636, 641644, 836, 841844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungs slot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei das Verfahren folgende Schritte umfasst: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Benutzung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei das Verfahren ferner dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und ferner folgende Schritte umfasst: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei das Verfahren weiterhin folgende Schritte in Erwiderung auf eine Anforderung, den Speicher zu regenerieren, umfasst: Identifizieren von Umleitungsslots, die einen direkten Pointer auf ein Objekt enthalten, der in keinem Smartpointer enthalten ist; und für jeden identifizierten Umleitungsslot: Rückgängigmachen des Ladens des Objekts, auf das der direkte Pointer in dem Umleitungsslot zeigt, und Ersetzen des direkten Pointers in dem Umleitungsslot durch einen Wiederladungsidentifikator, der zum erneuten Laden des Objekts, dessen Ladung rückgängig gemacht wurde, verwendbar ist.
  3. Verfahren nach Anspruch 1 oder 2, weiterhin umfassend: Detektieren eines zweiten Versuchs, den Smartpointer zu dereferenzieren; und in Erwiderung auf den Detektionsschritt, Dereferenzieren des direkten Pointers auf das geladene referenzierte Objekt, der in dem Smartpointer enthalten ist.
  4. Verfahren nach einem der Ansprüche 1 bis 3, wobei ein oder mehrere zusätzliche Smartpointer, die direkte Pointer auf das geladene referenzierte Objekt enthalten, geschaffen worden sein können, und weiterhin umfassend: Empfangen einer Anforderung, das geladene referenzierte Objekt stillzulegen ("idle"); und in Erwiderung auf den Empfangsschritt und für jeden Smartpointer, der einen Pointer auf das geladene referenzierte Objekt enthält, Ersetzen des direkten Pointers auf das geladene referenzierte Objekt durch einen Pointer auf den Umleitungsslot.
  5. Verfahren nach Anspruch 4, weiterhin umfassend nach dem Schritt des Ersetzens des direkten Pointers auf das geladene referenzierte Objekt durch einen Pointer auf den Umleitungsslot: Detektieren eines zweiten Versuchs, den Smartpointer zu dereferenzieren; und in Erwiderung auf den Schritt des Detektierens eines zweiten Versuchs, den Smartpointer zu dereferenzieren: Ersetzen des Pointers auf den Umleitungsslot und des Smartpointers durch den in dem Umleitungsslot gespeicherten direkten Pointer auf das geladene referenzierte Objekt, und Dereferenzieren des direkten Pointers auf das geladene referenzierte Objekt.
  6. Verfahren nach einem der Ansprüche 1 bis 3, weiterhin umfassend einen Schritt des Ladens eines oder mehrerer zusätzlicher referenzierter Objekte in den Speicher unter Verwendung zusätzlicher Smartpointer, wobei ein oder mehrere zusätzliche Smartpointer, die direkte Pointer auf die geladenen referenzierten Objekte enthalten, geschaffen worden sein können, wobei das Verfahren weiterhin folgende Schritte umfasst: Empfangen einer Anforderung, eine identifizierte Vielzahl geladener referenzierter Objekte stillzulegen; und in Erwiderung auf den Empfangsschritt und für jeden Smartpointer, der einen direkten Pointer auf eines der identifizierten geladenen referenzierten Objekte enthält, Ersetzen des direkten Pointers auf das identifizierte geladene referenzierte Objekt durch einen Pointer auf den Umleitungsslot für das identifizierte geladene referenzierte Objekt.
  7. Verfahren nach einem der Ansprüche 1 bis 6, wobei die Schritte des Identifizierens von Smartpointern und, für jeden identifizierten Smartpointer, des Identifizierens eines Umleitungsslots und des Ersetzens des direkten Pointers in Erwiderung auf ein Übergeben (überlassen, "committing") von Änderungen an den Objekten an einen ständigen Objektspeicher durchgeführt werden.
  8. Verfahren nach einem der Ansprüche 1 bis 7, das weiterhin dazu dient, ein referenziertes Objekt, das in dem Hauptspeicher gespeichert ist und auf das durch ein oder mehrere Smartpointer unter Verwendung eines Umleitungsslots, der ei nen Hauptspeicherpointer auf das referenzierte Objekt enthält, Bezug genommen wird, stillzulegen, wobei das Verfahren weiterhin folgende Schritte umfasst: Empfangen einer Anforderung, das referenzierte Objekt stillzulegen, indem sichergestellt wird, dass kein Smartpointer einen direkten Pointer auf das referenzierte Objekt enthält; in Erwiderung auf den Empfangsschritt und für jeden Smartpointer, der auf das referenzierte Objekt Bezug nimmt, Speichern eines Pointers auf den Umleitungsslot in dem Smartpointer.
  9. Verfahren nach Anspruch 8, weiterhin umfassend: Detektieren eines Versuchs, den Smartpointer zu dereferenzieren; und in Erwiderung auf den Detektionsschritt: Ersetzen des Pointers auf den Umleitungsslot in dem Smartpointer durch den Pointer auf das referenzierte Objekt, und Dereferenzieren des Pointers auf das geladene referenzierte Objekt.
  10. Verfahren nach Anspruch 8 oder 9, weiterhin umfassend: nach dem Speicherschritt Empfangen einer Anforderung, das Laden des referenzierten Objekts aus dem Speicher rückgängig zu machen; und in Erwiderung auf den Schritt des Empfangens einer Anforderung, das Laden des referenzierten Objekts rückgängig zu machen: Ersetzen des Hauptspeicherpointers auf das referenzierte Objekt, der in dem Umleitungsslot enthalten ist, durch einen ständigen Pointer, der zum erneuten Laden des referenzierten Objekts verwendbar ist, und Rückgängigmachen des Ladens des referenzierten Objekts.
  11. Verfahren nach Anspruch 10, weiterhin umfassend: Detektieren eines Versuchs, den Smartpointer zu dereferenzieren, in Erwiderung auf den Detektionsschritt: Laden des referenzierten Objekts in den Hauptspeicher unter Benutzung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen des ständigen Pointers in dem Umleitungsslot durch einen Pointer auf das geladene referenzierte Objekt, Ersetzen des Pointers auf den Umleitungsslot in dem Smartpointer durch den Pointer auf das geladene referenzierte Objekt und Dereferenzieren des Pointers auf das geladene referenzierte Objekt.
  12. Verfahren nach Anspruch 8 oder 9, weiterhin umfassend: nach dem Speicherschritt Empfangen einer Anforderung, das referenzierte Objekt an einen neuen Speicherplatz zu verschieben; und in Erwiderung auf den Schritt des Empfangens einer Anforderung, das Laden des referenzierten Objekts rückgängig zu machen: Verwenden des Pointers in dem Umleitungsslot, um das referenzierte Objekt an den neuen Speicherplatz zu verschieben, und Ersetzen des Hauptspeicherpointers auf das referenzierte Objekt, der in dem Umleitungsslot enthalten ist, durch einen Hauptspeicherpointer auf den neuen Speicherplatz.
  13. Verfahren nach Anspruch 12, weiterhin umfassend: nach den Schritten des Verschiebens und Ersetzens Detektieren eines Aufrufs einer Dereferenzierungsoperation auf dem Smartpointer; und in Erwiderung auf den Detektionsschritt: Ersetzen des Pointers auf den Umleitungsslot in dem Smartpointer durch den Pointer auf den neuen Speicherplatz in dem Umleitungsslot, und Dereferenzieren des Pointers auf den neuen Speicherplatz.
  14. Computer-lesbares Medium, das Computerausführbare Befehle gespeichert hat, welche, wenn sie durch ein Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) ausgeführt werden, das Computersystem dazu veranlassen, ein Verfahren zum Umwandeln eines ständigen Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833) durchzuführen, indem ein Umleitungsslot (136, 336, 341344, 436, 441444, 636, 641644, 836, 841844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungsslot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei das Verfahren folgende Schritte umfasst: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Verwendung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei das Verfahren weiterhin dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und weiterhin folgende Schritte umfasst: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei das Verfahren weiterhin folgende Schritte in Erwiderung auf eine Anforderung, den Speicher zu regenerieren (rückfordern, "reclaim"), umfasst: Identifizieren von Objekten, auf die kein direkter Pointer in keinem Smartpointer zeigt; und für jedes identifizierte Objekt: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das identifizierte Objekt enthält; Rückgängigmachen des Ladens ("unloading") des identifizierten Objekts; und Ersetzen des direkten Pointers in dem identifizierten Umleitungsslot durch einen Wiederladungsidentifikator, der zum erneuten Laden des identifizierten Objekts verwendbar ist.
  15. Computer-lesbares Medium, das Computerausführbare Befehle gespeichert hat, welche, wenn sie durch ein Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) ausgeführt werden, das Computersystem dazu veranlassen, ein Verfahren zum Umwandeln eines ständigen Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833) durchzuführen, indem ein Umleitungsslot (136, 336, 341344, 436, 441444, 636, 641644, 836, 841844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungsslot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei das Verfahren folgende Schritte umfasst: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Benutzung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt, und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei das Verfahren ferner dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und ferner folgende Schritte umfasst: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei das Verfahren weiterhin folgende Schritte in Erwiderung auf eine Anforderung, den Speicher zu regenerieren, umfasst: Identifizieren von Umleitungsslots, die einen direkten Pointer auf ein Objekt enthalten, der in keinem Smartpointer enthalten ist; und für jeden identifizierten Umleitungsslot: Rückgängigmachen des Ladens des Objekts, auf das der direkte Pointer in dem Umleitungsslot zeigt, und Ersetzen des direkten Pointers in dem Umleitungsslot durch einen Wiederldungsidentifikator, der zum erneuten Laden des Objekts, dessen Ladung rückgängig gemacht wurde, verwendbar ist.
  16. Computerlesbares Medium nach Anspruch 14 oder 15, das weiterhin Computerausführbare Befehle zum Durchführen jedes der Schritte nach einem der Ansprüche 3 bis 13 hat.
  17. Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) und mit einer Einrichtung zum Umwandeln eines ständigen Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833), indem ein Umleitungsslot (136, 336, 341344, 436, 441444, 636, 641644, 836, 841-844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungsslot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei die Einrichtung zu folgendem angepasst ist: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Verwendung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei die Einrichtung weiterhin dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und weiterhin zu folgendem angepasst ist: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei die Einrichtung weiterhin dazu angepasst ist, in Erwiderung auf eine Anforderung, den Speicher zu regenerieren (rückfordern, "reclaim") folgendes durchzuführen: Identifizieren von Objekten, auf die kein direkter Pointer in keinem Smartpointer zeigt; und für jedes identifizierte Objekt: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das identifizierte Objekt enthält; Rückgängigmachen des Ladens ("unloading") des identifizierten Objekts; und Ersetzen des direkten Pointers in dem identifizierten Umleitungsslot durch einen Wiederladungsidentifikator, der zum erneuten Laden des identifizierten Objekts verwendbar ist.
  18. Computersystem (100) mit einem Speicher (130, 330, 430, 630, 830) und mit einer Einrichtung zum Umwandeln eines ständigen Pointers (371) auf ein referenziertes Objekt (137) in einem referenzierenden Objekt (333, 433, 633, 833), indem ein Umleitungsslot (136, 336, 341344, 436, 441444, 636, 641644, 836, 841844) verwendet wird und indem Smartpointer (134, 434, 634, 834) verwendet werden, die dazu angepasst sind, entweder einen Pointer (461, 861) auf den Umleitungsslot oder einen Pointer (661) auf ein geladenes referenziertes Objekt zu enthalten, wobei die Einrichtung zu folgendem angepasst ist: Laden (201) des referenzierenden Objekts in den Speicher; in Erwiderung auf den Schritt des Ladens des referenzierenden Objekts: Kopieren (203) des ständigen Pointers aus dem referenzierenden Objekt in den Umleitungsslot und Ersetzen (204) des ständigen Pointers in dem referenzierenden Objekt durch einen Smartpointer, der einen Pointer auf den Umleitungsslot enthält; Detektieren eines Versuchs, den Smartpointer zu derefenzieren; und in Erwiderung auf den Detektionsschritt: Laden (508) des referenzierten Objekts in den Speicher unter Benutzung des in dem Umleitungsslot gespeicherten ständigen Pointers, Ersetzen (505) des ständigen Pointers in dem Umleitungsslot durch einen direkten Pointer auf das geladene referenzierte Objekt, Ersetzen (505) des Pointers auf den Umleitungsslot in dem Smartpointer durch den direkten Pointer auf das geladene referenzierte Objekt und Dereferenzieren (506) des Pointers auf das geladene referenzierte Objekt; wobei die Einrichtung ferner dazu dient, Speicherbereinigung auf einer Gruppe der Smartpointer durchzuführen, und ferner zu folgendem angepasst ist: Identifizieren von Smartpointern in der Gruppe von Smartpointern, die einen direkten Pointer auf ein geladenes Objekt enthalten; und für jeden identifizierten Smartpointer: Identifizieren eines Umleitungsslots, der einen direkten Pointer auf das gleiche geladene Objekt enthält, auf das der direkte Pointer in dem Smartpointer zeigt, und Ersetzen des direkten Pointers in dem Smartpointer durch einen Pointer auf den identifizierten Umleitungsslot; wobei die Einrichtung weiterhin dazu angepasst ist, in Erwiderung auf eine Anforderung, den Speicher zu regenerieren, folgendes durchzuführen: Identifizieren von Umleitungsslots, die einen direkten Pointer auf ein Objekt enthalten, der in keinem Smartpointer enthalten ist; und für jeden identifizierten Umleitungsslot: Rückgängigmachen des Ladens des Objekts, auf das der direkte Pointer in dem Umleitungsslot zeigt, und Ersetzen des direkten Pointers in dem Umleitungsslot durch einen Wiederladungsidentifikator, der zum erneuten Laden des Objekts, dessen Ladung rückgängig gemacht wurde, verwendbar ist.
  19. Computersystem nach Anspruch 17 oder 18, das dazu angepasst ist, jeden der Schritte nach einem der Ansprüche 3 bis 13 durchzuführen.
DE69738101T 1996-12-12 1997-11-14 Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen Expired - Lifetime DE69738101T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US764557 1996-12-12
US08/764,557 US5794256A (en) 1996-12-12 1996-12-12 Pointer swizzling facility using three-state references to manage access to referenced objects

Publications (2)

Publication Number Publication Date
DE69738101D1 DE69738101D1 (de) 2007-10-18
DE69738101T2 true DE69738101T2 (de) 2008-01-03

Family

ID=25071057

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69738101T Expired - Lifetime DE69738101T2 (de) 1996-12-12 1997-11-14 Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen

Country Status (4)

Country Link
US (2) US5794256A (de)
EP (1) EP0848324B1 (de)
JP (1) JP4176857B2 (de)
DE (1) DE69738101T2 (de)

Families Citing this family (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5794256A (en) * 1996-12-12 1998-08-11 Microsoft Corporation Pointer swizzling facility using three-state references to manage access to referenced objects
US6145121A (en) * 1997-04-17 2000-11-07 University Of Washington Trace based method for the analysis, benchmarking and tuning of object oriented databases and applications
US6460071B1 (en) * 1997-11-21 2002-10-01 International Business Machines Corporation System and method for managing client application state in a stateless web browser environment
US6345276B1 (en) * 1998-09-18 2002-02-05 Microsoft Corporation Representing base pointers in a shared memory heap
US6499095B1 (en) * 1999-02-11 2002-12-24 Oracle Corp. Machine-independent memory management system within a run-time environment
US6877161B1 (en) 1999-02-11 2005-04-05 Oracle International Corp. Address calculation of invariant references within a run-time environment
US6434685B1 (en) 1999-02-11 2002-08-13 Oracle Corp. Paged memory management system within a run-time environment
US6457019B1 (en) 1999-02-11 2002-09-24 Oracle Corp. Memory management within a run-time environment
US6366932B1 (en) * 1999-06-24 2002-04-02 International Business Machines Corporation Apparatus and method for accessing an object oriented object using a smart passive reference
US6408305B1 (en) * 1999-08-13 2002-06-18 International Business Machines Corporation Access frontier for demand loading pages in object-oriented databases
US6704743B1 (en) 1999-09-13 2004-03-09 Copernus, Inc. Selective inheritance of object parameters in object-oriented computer environment
US6978272B1 (en) * 1999-11-29 2005-12-20 Ncr Corporation Method and apparatus for displaying instrumentation parameters in a database system
US7031976B1 (en) 2000-05-26 2006-04-18 Sprint Communications Company L.P. Computer framework and method for isolating a business component from specific implementations of a datastore
US20020169786A1 (en) * 2001-02-16 2002-11-14 Richek Martin D. Type-safe homogeneous linkage for heterogeneous smart pointers
US6598141B1 (en) 2001-03-08 2003-07-22 Microsoft Corporation Manipulating interior pointers on a stack during garbage collection
US20040015876A1 (en) * 2001-05-24 2004-01-22 Applin John R. Method and structure of implementing a safe pointer
US7069540B1 (en) * 2001-07-02 2006-06-27 Unisys Corporation COM persistence model
EP1466270A4 (de) * 2001-12-06 2005-03-23 Univ New York Logikanordnung, datenstruktur, system und verfahren zur multilinearen repräsentation von multimodalen datenensembles zur synthese, erkennung und komprimierung
US7379925B2 (en) * 2003-07-25 2008-05-27 New York University Logic arrangement, data structure, system and method for multilinear representation of multimodal data ensembles for synthesis, rotation and compression
CA2553452A1 (en) * 2004-01-13 2005-07-28 New York University Method, system, storage medium, and data structure for image recognition using multilinear independent component analysis
US7506003B2 (en) * 2005-07-14 2009-03-17 Microsoft Corporation Moving data from file on storage volume to alternate location to free space
US7558804B1 (en) * 2005-08-26 2009-07-07 American Megatrends, Inc. Method, apparatus, and computer-readable medium for space-efficient storage of variables in a non-volatile computer memory
US7873943B2 (en) * 2005-12-28 2011-01-18 Intel Corporation Inserting stack clearing code in conservative garbage collection
US20070179959A1 (en) * 2006-01-30 2007-08-02 Microsoft Corporation Automatic discovery of data relationships
US7716530B2 (en) * 2006-02-28 2010-05-11 Microsoft Corporation Thread interception and analysis
US9785549B2 (en) * 2007-04-27 2017-10-10 Microsoft Technology Licensing, Llc Managing object lifetime for native/managed peers
US8429633B2 (en) * 2008-11-21 2013-04-23 International Business Machines Corporation Managing memory to support large-scale interprocedural static analysis for security problems
US20100287216A1 (en) * 2009-05-07 2010-11-11 Tatu Ylonen Oy Ltd Grouped space allocation for copied objects
JP4959781B2 (ja) 2009-12-22 2012-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション オブジェクト生成地点記録方法およびプログラム
US8756193B2 (en) 2011-10-31 2014-06-17 Apple Inc. System and method for persisting object pointers
CN103345416A (zh) * 2013-07-26 2013-10-09 深圳市融创天下科技股份有限公司 一种获取数组长度的方法及系统
KR102464801B1 (ko) * 2015-04-14 2022-11-07 삼성전자주식회사 반도체 장치의 동작 방법 및 반도체 시스템
US10725908B2 (en) * 2018-08-10 2020-07-28 Microsoft Technology Licensing, Llc. Fast initialization of complex in-memory data structures

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5398334A (en) * 1992-04-06 1995-03-14 General Electric Company System for automatic garbage collection using strong and weak encapsulated pointers
GB2269033A (en) * 1992-07-22 1994-01-26 Ibm Controlling data storage to enable garbage collection
EP0620520A1 (de) * 1993-03-30 1994-10-19 AT&T Corp. Verfahren zur Erzeugung persistenter Datenobjekte mit verborgenen Zeigern
US5517645A (en) * 1993-11-05 1996-05-14 Microsoft Corporation Method and system for interfacing components via aggregate components formed by aggregating the components each with an instance of a component manager
US5692183A (en) * 1995-03-31 1997-11-25 Sun Microsystems, Inc. Methods and apparatus for providing transparent persistence in a distributed object operating environment
US5794256A (en) * 1996-12-12 1998-08-11 Microsoft Corporation Pointer swizzling facility using three-state references to manage access to referenced objects

Also Published As

Publication number Publication date
JPH10254756A (ja) 1998-09-25
JP4176857B2 (ja) 2008-11-05
US5794256A (en) 1998-08-11
EP0848324A3 (de) 2004-04-28
DE69738101D1 (de) 2007-10-18
US6105041A (en) 2000-08-15
EP0848324B1 (de) 2007-09-05
EP0848324A2 (de) 1998-06-17

Similar Documents

Publication Publication Date Title
DE69738101T2 (de) Verwaltung des Zugangs zu Objekten mit Hilfe von Referenzen mit drei Zuständen
DE3151745C2 (de)
DE60023002T2 (de) Erweiterung und abbildung auf physikalischem speicher von linearen adressen unter verwendung von 4 und 8 byte seitentabelleneinträgen in einem 32-bit mikroprozessor
DE69724572T2 (de) Verfahren und Vorrichtung zur Vorladung von verschiedenen vorgegebenen Adressenübersetzungsattributen
DE3833933C2 (de) Informationsverarbeitungseinrichtung mit einer Adressenerweiterungsfunktion
DE69836796T2 (de) Datenverarbeiter mit lokalisierter gedächtnisreklamierung
DE602004011018T2 (de) Ungültigkeitserklärung eines speichers und löschen von puffereinträgen
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE69721590T2 (de) Ein bereichsbasiertes seiten-table-walk-bit verwendendes verfahren sowie vorrichtung
DE60002295T2 (de) Aufwandslose ausnahmebehandlung
DE602005004166T2 (de) Vorrichtung, system und verfahren zur reinitialisierung einer serialisierung von dateisystemen
DE4220198C2 (de) Transaktionsverarbeitungsverfahren für einen digitalen Computer und Transaktionsverarbeitungssystem
DE112010003492B4 (de) Transaktionsspeichersystem mit wirksamerZwischenspeicherunterstützung
DE60320026T2 (de) Verbessertes speichermanagement für echtzeit-anwendungen
DE3832912C2 (de) Virtuell adressierbare Cache-Speichereinrichtung
EP1393184B1 (de) Vorrichtung und verfahren zum ermitteln einer physikalischen adresse aus einer virtuellen adresse unter verwendung einer hierarchischen abbildungsvorschrift mit komprimierten knoten
DE2459006C2 (de) Einrichtung zum Bilden einer absoluten Adresse in einer Datenverarbeitunsanlage
DE69909021T2 (de) Dynamische Speicherrückforderung ohne Compiler- oder Programmverbinderunterstützung
DE69629140T2 (de) Cachefähigkeitsattribut für virtuelle Adressen in Cachespeichern mit sowohl virtuellen als auch physikalischem Index
DE112017001027B4 (de) Seitenfehlerbehebung
DE19959758A1 (de) Bestimmung der Art und der Genauigkeit von lokalen Variablen bei vorhandenen Subroutinen
DE69634315T2 (de) Verfahren und Gerät zur Verwendung eines Ladebefehls der keinen Fehler verursacht
DE60028069T2 (de) Verfahren und vorrichtung zur kontexterhaltung unter ausführung von übersetzten befehlen
DE19961499A1 (de) Caching von Objekten in Platten-gestützten Datenbanken
DE112005002328T5 (de) Cachespeicherungsunterstützung für Direktspeicherzugriffsadreßübersetzung

Legal Events

Date Code Title Description
8364 No opposition during term of opposition