DE69932964T2 - Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch - Google Patents

Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch Download PDF

Info

Publication number
DE69932964T2
DE69932964T2 DE69932964T DE69932964T DE69932964T2 DE 69932964 T2 DE69932964 T2 DE 69932964T2 DE 69932964 T DE69932964 T DE 69932964T DE 69932964 T DE69932964 T DE 69932964T DE 69932964 T2 DE69932964 T2 DE 69932964T2
Authority
DE
Germany
Prior art keywords
data structure
access
memory
memory address
address
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 - Fee Related
Application number
DE69932964T
Other languages
English (en)
Other versions
DE69932964D1 (de
Inventor
Boris Palo Alto Beylin
Vinod Piedmont Grover
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of DE69932964D1 publication Critical patent/DE69932964D1/de
Application granted granted Critical
Publication of DE69932964T2 publication Critical patent/DE69932964T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • 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/445Program loading or initiating
    • 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
    • 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/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • 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/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • 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/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • 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/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure
    • Y10S707/99945Object-oriented database structure processing

Description

  • Hintergrund der Erfindung
  • Gebiet der Erfindung
  • Diese Erfindung betrifft das Gebiet von Datenstruktur-Initialisierungsverfahren. Insbesondere stellt diese Erfindung ein Verfahren, ein System und ein Computerprogrammprodukt zum effizienten Aufrufen einer programmierten Operation bei der ersten aktiven Verwendung einer Datenstruktur oder eines Klassenobjekts dar. Die programmierte Operation kann ohne Begrenzung verwendet werden, um die Datenstruktur oder statische Variablen in dem Klassenobjekt zu initialisieren.
  • Hintergrund
  • Eine Zentraleinheit (CPU) eines Computers ist dazu ausgelegt, Computerbefehle auszuführen, die Operationen an Datenwerten durchführen. Diese Datenwerte werden im Allgemeinen in Variablen im Speicher und in den Registern der CPU gespeichert. Die meisten Universalcomputer weisen spezialisierte Befehle zum Zugreifen auf Variablen mit unterschiedlichen Längen auf. Eine byteorientierte Speicherzugriffsbetriebsart greift beispielsweise auf ein einzelnes Byte des Speichers an irgendeiner adressierbaren Byteadresse im Speicher zu. Andere Nicht-Byte-Zugriffsbetriebsarten werden verwendet, um auf zwei, vier, acht, sechzehn Bytes oder Variablen mit anderer Größe zuzugreifen. Jede der Nicht-Byte-Zugriffsbetriebsarten erfordert, dass die Variable auf eine gerade Speicheradresse ausgerichtet wird. Der Computer ruft einen Fehlerzustand (einen Fehler durch fehlausgerichteten Speicherzugriff) hervor, wenn eine Nicht-Byte-Zugriffsbetriebsart auf eine ungerade Byteadresse versucht wird. Dieser Fehlerzustand verursacht eine Ausnahme im Computersystem und ruft eine Abfangroutine hervor.
  • Datenstrukturen werden verwendet, um in einem Computersystem gespeicherte Informationen zu organisieren. Programmierte Routinen in einem Prozedur-Programmierparadigma greifen auf die Datenstrukturen zu, um Operationen in Abhängigkeit von den Datenstrukturen durchzuführen und/oder deren Inhalt zu modifizieren. Diese Datenstrukturen werden initialisiert, nachdem sie zugeordnet wurden. Die Reihenfolge, in der diese Datenstrukturen initialisiert werden, ist insbesondere dann wichtig, wenn der Anfangszustand einer Datenstruktur vom Zustand einer anderen Datenstruktur abhängt. Ein Fachmann wird verstehen, dass die Datenstruktur durch den Zuordnungsprozess vorinitialisiert werden kann, um Datenfelder innerhalb der Datenstruktur auf einen gewissen Vorgabewert (gewöhnlich Null) zu setzen. Diese Vorinitialisierung ist von der Initialisierung, die erforderlich ist, um spezielle Datenstrukturelemente auf anfängliche Nicht-Vorgabewerte zu setzen, verschieden.
  • Objektorientierte Programmier-(OOP) Sprachen kapseln die Daten eines Objekts (im Allgemeinen im Objekt als Datenstruktur enthalten) mit zugehörigen OOP-Verfahren zum Verarbeiten der Daten dieses Objekts ein. Gewöhnlich werden OOP-Objekte in einem Freispeicherbereich instantiiert und basieren auf Klassen, die auf die programmierten Verfahren für jedes OOP-Objekt Bezug nehmen. Auf instantiierte OOP-Objekte wird durch Zeiger zugegriffen und sie enthalten Daten (in Instanzvariablen), die für dieses spezielle instantiierte OOP-Objekt spezifisch sind. Konzeptionell enthält ein OOP-Objekt mit dem Objekt in Beziehung stehende Informationen (wie z.B. die Anzahl von Instanzvariablen in dem Objekt), die Instanzvariablen und Adressen von programmierten Routinen (OOP-Verfahren), die auf den Inhalt der Instanzvariablen im Objekt zugreifen und/oder diesen bearbeiten. Da jedoch Objekte häufig programmierte Routinen und mit dem Objekt in Beziehung stehende Informationen gemeinsam nutzen, werden diese gemeinsam genutzten Informationen gewöhnlich in eine Klasse extrahiert. Folglich enthält das instantiierte Objekt einfach seine eigenen Instanzvariablen und einen Zeiger auf seine Klasse.
  • Die Erfindung gilt sowohl für Datenstrukturen als auch OOP-Objekte (wie z.B. Klassenobjekte).
  • Smalltalk, Java und C++ sind Beispiele von OOP-Sprachen. Smalltalk wurde in der Learning Research Group im Palo Alto Research Center (PARC) von Xerox in den frühen 70-er Jahren entwickelt. C++ wurde von Bjarne Stroustrup in den AT&T Bell Laboratories 1983 als Erweiterung von C entwickelt. Java ist eine OOP-Sprache mit Elementen von C und C++ und umfasst stark abgestimmte Bibliotheken für die Internetumgebung. Es wurde bei SUN Microsystems entwickelt und 1995 ausgegeben.
  • Weitere Informationen über OOP-Konzepte sind in Not Just Java von Peter van der Linden, © Sun Microsystems Press/Prentice Hall PTR Corp. Upper Saddle River, NJ, (1997), ISBN 0-13-864638-4, Seiten 136–149, zu finden.
  • Einige OOP-Sprachen (wie z.B. die JAVA-Programmiersprache) ermöglichen Klassenvariablen. Diese Klassenvariablen ermöglichen, dass jedes instantiierte Objekt auf eine gemeinsame Instanzvariable zugreift, die von jedem instantiierten Objekt, das von der Klasse abhängt, gemeinsam genutzt wird. Die statischen Klassenvariablen müssen vor ihrer Verwendung durch irgendwelche der instantiierten Objekte initialisiert werden. Die Java-Programmiersprachenspezifikation erfordert, dass statische Klassenvariablen bei der ersten aktiven Verwendung der Klasse initialisiert werden. Weitere Informationen über die Initialisierung von Java-Klassen sind in The Java" Language Specification von Gosling, Joy und Steele, © Sun Microsystems, Inc., Addison-Wesley, ISBN 0-201-63451-1, Seiten 223–227, zu finden.
  • 1A stellt eine Klassenobjekt-Datenstruktur dar, auf die durch das allgemeine Bezugszeichen 100 hingewiesen wird und die eine Datenstruktur darstellt, die als OOP-Klassenobjekt verwendet wird. Die Klassenobjekt-Datenstruktur 100 umfasst ein "Status"-Feld 101, das unter anderen Informationen den Initialisierungsstatus des Klassenobjekts enthält. Die Klassenobjekt-Datenstruktur 100 umfasst auch ein Feld 103 "statische Klassenvariable", das verwendet wird, um den Inhalt der statischen Klasseninstanzvariable zu speichern. Die Klassenobjekt-Datenstruktur 100 umfasst auch ein "Klassenverfahrenszeiger"-Feld 105, das einen Zugriffsmechanismus auf die Verfahren der Klasse, wie z.B. eine Matrix von Zeigern auf diese Verfahren, enthält.
  • 1B stellt einen "Datenstrukturzugriffs"-Prozess des Standes der Technik dar, auf den durch das allgemeine Bezugszeichen 120 hingewiesen wird und der verwendet wird, um eine Datenstruktur bei ihrer ersten aktiven Verwendung zu initialisieren. Der Prozess 120 des Standes der Technik beginnt an einer "Start"-Grenzstelle 121 und geht zu einer Entscheidungsprozedur 123 "Datenstruktur initialisiert" weiter, die das "Status"-Feld 101 der Datenstruktur prüft, um festzustellen, ob die Datenstruktur initialisiert wurde. Wenn die Datenstruktur nicht initialisiert wurde, geht der Prozess 120 des Standes der Technik zu einer Prozedur 125 "Datenstruktur initialisieren" weiter, die die Initialisierung durchführt und den Inhalt des "Status"-Feldes 101 modifiziert, um anzugeben, dass die Datenstruktur initialisiert wurde. Sobald die Prozedur 125 "Datenstruktur initialisieren" endet oder wenn die Entscheidungsprozedur 123 "Datenstruktur initialisiert" festgestellt hat, dass die Datenstruktur bereits initialisiert wurde, geht der Prozess 120 des Standes der Technik zu einer Prozedur 127 "auf Datenstruktur zugreifen" weiter, die eine aktive Verwendung der Datenstruktur durchführt. Der Prozess 120 des Standes der Technik endet durch eine "Ende"-Grenzstelle 129.
  • Der Hauptnachteil dieser Methode des Standes der Technik besteht darin, dass jeder Zugriff auf ein Datenstrukturelement in der Datenstruktur erfordert, dass der Computer prüft, ob die Datenstruktur initialisiert wurde. Eine Kompilierer-Optimierungstechnologie existiert, um redundante Prüfungen zu optimieren, indem die Tatsache ausgenutzt wird, dass nur erfolgreiche Prüfungen andere Prüfungen innerhalb einer Routine erreichen. Außerdem kann eine rechenaufwändigere Analyse zwischen Routinen verwendet werden, um redundante Prüfungen über Routinengrenzen unter der Annahme, dass die Ausführungssequenz bestimmt werden kann, zu optimieren. Diese Kompilierer-Optimierungsverfahren sind jedoch sehr rechenaufwändig und werden folglich häufig nicht verwendet.
  • 1C stellt einen Prozess einer "adaptiven Optimierung" des Standes der Technik dar, auf den mit dem allgemeinen Bezugszeichen 150 hingewiesen wird, um den Ausführungsprogrammcode selbst zu modifizieren, um den Zugriff auf die Datenstrukturelemente zu optimieren. Unter Verwendung dieses Verfahrens erzeugt der Kompilierer einen Code, um eine Zugriffsprüfroutine anstelle von Computeroperationen aufzurufen, um direkt auf das Datenstrukturelement zuzugreifen. Wenn jede Zugriffsprüfung angetroffen wird, wird die zum Aufrufen der Zugriffsprüfroutine verwendete Aufrufstelle modifiziert, um den Aufruf der Zugriffsprüfroutine mit Befehlen zum direkten Zugreifen auf das Datenstrukturelement zu überschreiben. Außerdem initialisiert die Zugriffsprüfroutine die Datenstruktur beim ersten Mal, wenn die Zugriffsprüfroutine an der Datenstruktur aufgerufen wird.
  • Der Optimierungsprozess 150 beginnt an einer "Start"-Grenzstelle 151 und geht zu einer Prozedur 153 "Zugriffsprüfroutine aufrufen" weiter. Die Prozedur 153 "Zugriffsprüfroutine aufrufen" geschieht von der Aufrufstelle an dem Punkt, an dem das Programm normalerweise auf das Datenstrukturelement zugreifen würde. Die Zugriffsprüfroutine wertet dann in einer Entscheidungsprozedur 155 "erster Datenstrukturzugriff" das "Status"-Feld 101 aus, um festzustellen, ob die Klassenobjekt-Datenstruktur 100 initialisiert wurde. Wenn die Datenstruktur nicht initialisiert wurde, führt die Zugriffsprüfroutine die erforderliche Initialisierung in einer Prozedur 157 "Datenstruktur initialisieren" durch. Als nächstes geht der Optimierungsprozess 150 zu einer Prozedur 159 "Laufzeitaufrufstelle korrigieren" weiter. Die Prozedur 159 "Laufzeitaufrufstelle korrigieren" modifiziert die Computerbefehle an der Aufrufstelle, um die Aufrufbefehle für die Zugriffsprüfroutine gegen Befehle auszutauschen, die tatsächlich auf die Datenstrukturelemente in der Klassenobjekt-Datenstruktur 100 zugreifen, und folglich die anschließende Verarbeitung zu optimieren. Im Allgemeinen korrigiert die Prozedur 159 "Laufzeitaufrufstelle korrigieren" auch andere Aufrufstellen, die auf die Datenstruktur zugreifen, so dass nur ein Aufruf der Prozedur 153 "Zugriffsprüfroutine aufrufen" für jede Datenstruktur erforderlich ist.
  • Wenn jedoch die Klassenobjekt-Datenstruktur 100 bereits initialisiert wurde (oder wenn die Prozedur 159 "Laufzeitaufrufstelle korrigieren" endet), geht der Optimierungsprozess 150 zu einer Prozedur 161 "auf Datenstruktur zugreifen" (durch die eingefügten Befehle definiert) weiter, die auf das gewünschte Datenstrukturelement zugreift. Dann endet der Optimierungsprozess 150 durch eine "Ende"-Grenzstelle 163.
  • Der Hauptnachteil bei diesem Verfahren des Standes der Technik besteht darin, dass der ausführbare Programmcode selbstmodifizierend ist. Diese Lösung ist in vielen Umgebungen nicht annehmbar. Der selbstmodifizierende Code ist auch sehr schwer von Fehlern zu bereinigen und zu warten.
  • Das Dokument "Pointer Swizzling at Page Fault Time: Efficiently Supporting Huge Address Spaces on Standard Hardware", Computer Architecture News, 19 (1991), Juni, Nr. 4, von P.R. Wilson, offenbart die Verwendung einer Programmprozedur, die normalerweise auf eine Datenstruktur zugreift, die einen überdimensionierten Speicherplatz auf einem Hardwaresystem mit einer adressierbaren Speicherdimension, die kürzer ist als der überdimensionierte Speicherplatz, erfordert. Ein erster Zeiger, der von der Programmprozedur verwendet wird, wird von einer Abfangprozedur erfasst, die den ersten Zeiger in einen ersten vorübergehenden Zeiger umsetzt, der einem ersten Speicherplatz der tatsächlichen Hardware entspricht. Der erste Hardware-Speicherplatz umfasst einen zweiten Zeiger, der auf einen zweiten Speicherplatz zeigt, auf den als nächstes zugegriffen werden soll. Dieser zweite Zeiger wird durch die Abfangroutine auch in einen zweiten vorübergehenden Zeiger umgesetzt, der auf einen zweiten Hardware-Speicherplatz zeigt, der auch einen dritten Zeiger auf einen dritten Speicherplatz enthalten kann – und so weiter. Um Zeigerfehlabgleiche zu vermeiden, können die Zeiger, auf die Bezug genommen wird, in den Hardware-Speicherplätzen eine doppelte oder mehrfache Größe der Zeiger aufweisen, die für die Adressendimension des normalen vorübergehenden Speichers erforderlich sind.
  • Es wäre vorteilhaft, ein Verfahren für eine Initialisierung der ersten aktiven Verwendung von Datenstrukturen bereitzustellen, das nicht einen Ausführungscode selbstmodifiziert und auch nicht Spezialfall-Kompilierer-Optimierungen erfordert und effizienter ist als die Verfahren des Standes der Technik. Ein solches erfindungsgemäßes Verfahren würde die Leistung von Computern, die das Verfahren verwenden, verbessern.
  • Zusammenfassung der Erfindung
  • Die Erfindung ist in den Ansprüchen 1, 10 bzw. 19 definiert. Spezielle Ausführungsbeispiele der Erfindung sind in den abhängigen Ansprüchen dargelegt.
  • Die vorliegende Erfindung stellt ein Verfahren zum Aufrufen einer programmierten Operation in Reaktion auf eine erste aktive Verwendung eines Speicherbereichs dar.
  • Ein Aspekt der Erfindung ist ein Verfahren zum Aufrufen einer programmierten Operation an einer Datenstruktur in Reaktion auf eine erste aktive Verwendung der Datenstruktur. Das Verfahren umfasst den Schritt des Zuordnens eines Datenstruktur-Zugriffskennzeichenspeichers zur Datenstruktur. Der Datenstruktur-Zugriffskennzeichenspeicher enthält anfänglich eine fehlausgerichtete Speicheradresse, die mit der Datenstruktur in Beziehung steht. Ein weiterer Stritt ist jener des Auslösens einer Abfangroutine bei der ersten aktiven Verwendung der Datenstruktur durch Versuchen, auf die Datenstruktur unter Verwendung der fehlausgerichteten Speicheradresse mit einer ausgerichteten Speicherzugriffsbetriebsart zuzugreifen. Die Erfindung umfasst auch den Schritt des Umwandelns der fehlausgerichteten Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine ausgerichtete Speicheradresse. Folglich haben anschließende Versuche, auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zuzugreifen, Erfolg, ohne die Abfangroutine auszulösen.
  • Ein weiterer Aspekt der Erfindung offenbart ein System zum Aufrufen einer programmierten Operation an einer Datenstruktur in Reaktion auf eine erste aktive Verwendung der Datenstruktur. Die Erfindung umfasst einen Zuordnungsmechanismus, der dazu ausgelegt ist, einen Datenstruktur-Zugriffskennzeichenspeicher der Datenstruktur zuzuordnen. Der Datenstruktur-Zugriffskennzeichenspeicher enthält anfänglich eine fehlausgerichtete Speicheradresse, die mit der Datenstruktur in Beziehung steht. Die Erfindung umfasst auch einen Fehlermechanismus für den fehlausgerichteten Speicherzugriff, der dazu ausgelegt ist, eine Abfangroutine bei der ersten aktiven Verwendung der Datenstruktur auszulösen. Die erste aktive Verwendung der Datenstruktur geschieht durch einen Versuch, auf die Datenstruktur unter Verwendung einer ausgerichteten Speicherzugriffsbetriebsart mit der fehlausgerichteten Speicheradresse, die der Datenstruktur durch den Zuordnungsmechanismus zugeordnet wird, zuzugreifen. Ein weiteres Element der Erfindung ist ein Adressenumwandlungsmechanismus, der dazu ausgelegt ist, die fehlausgerichtete Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine ausgerichtete Speicheradresse umzuwandeln. Dieser Mechanismus reagiert auf den Fehlermechanismus für den fehlausgerichteten Speicherzugriff. Folglich haben anschließende Versuche, auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zuzugreifen, Erfolg, ohne die Abfangroutine auszulösen.
  • Noch ein weiterer Aspekt der Erfindung ist ein Computerprogrammprodukt, das in einem für den Computer verwendbaren Speichermedium enthalten ist, um eine programmierte Operation an einer Datenstruktur in Reaktion auf eine erste aktive Verwendung der Datenstruktur aufzurufen. Wenn er auf einem Computer ausgeführt wird, veranlasst der maschinenlesbare Code, dass ein Computer einen Zuordnungsmechanismus, einen Fehlermechanismus für den fehlausgerichteten Speicherzugriff und einen Adressenumwandlungsmechanismus ausführt. Jeder dieser Mechanismen besitzt dieselben Funktionen wie die entsprechenden Mechanismen für die vorher beschriebene Vorrichtung.
  • Bei einem Ausführungsbeispiel umfasst das Verfahren den Schritt des Ausrichtens des Datenstrukturelements auf eine gerade Speicheradresse. Das Datenstrukturelement befindet sich in einem geraden Versatz innerhalb der Datenstruktur, so dass auf das Datenstrukturelement unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart zugegriffen werden kann. Das Verfahren ordnet auch einen Datenstruktur-Zugriffskennzeichenspeicher der Datenstruktur zu. Der Datenstruktur-Zugriffskennzeichenspeicher enthält anfänglich eine ungerade Datenstruktur-Speicheradresse, die mit der Datenstruktur in Beziehung steht. Ein weiterer Schritt in dem Verfahren ist jener des Auslösens einer Abfangroutine beim anfänglichen Zugriff auf das Datenstrukturelement. Die Abfangroutine wird durch Versuchen eines Zugriffs auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der ungeraden Datenstruktur-Speicheradresse und dem geraden Versatz ausgelöst. Das Verfahren wandelt auch die ungerade Datenstruktur-Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine gerade Datenstrukturadresse um. Folglich haben anschließende Versuche, auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der geraden Datenstrukturadresse und dem geraden Versatz zuzugreifen, Erfolg, ohne die Abfangroutine auszulösen. Außerdem umfasst das Verfahren die Schritte des Aufrufens der programmierten Operation und des Zugreifens auf das Datenstrukturelement unter Verwendung der geraden Datenstrukturadresse.
  • Bei einem Ausführungsbeispiel umfasst das System einen Ausrichtungsmechanismus, der dazu ausgelegt ist, das Datenstrukturelement auf eine gerade Speicheradresse des Speichers auszurichten. Das Datenstrukturelement befindet sich in einem geraden Versatz innerhalb der Datenstruktur, so dass auf das Datenstrukturelement vom Speicher unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart der CPU zugegriffen werden kann. Das System umfasst auch einen Zugriffskennzeichenmechanismus, der dazu ausgelegt ist, einen Datenstruktur-Zugriffskennzeichenspeicher der Datenstruktur zuzuordnen. Der Datenstruktur-Zugriffskennzeichenspeicher enthält anfänglich eine ungerade Datenstruktur-Speicheradresse, die mit der Datenstruktur in Beziehung steht. Das System umfasst außerdem einen Auslösemechanismus, der dazu ausgelegt ist, eine Abfangroutine beim anfänglichen Zugriff auf das Datenstrukturelement auszulösen, indem versucht wird, auf das Datenstrukturelement im Speicher unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der ungeraden Datenstruktur-Speicheradresse und dem geraden Versatz zuzugreifen. Ein Adressenumwandlungsmechanismus ist auch innerhalb des Systems enthalten. Der Adressenumwandlungsmechanismus reagiert auf den Auslösemechanismus und ist dazu ausgelegt, die ungerade Datenstruktur-Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine gerade Datenstrukturadresse umzuwandeln. Folglich haben anschließende Versuche, auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der geraden Datenstrukturadresse und dem geraden Versatz zuzugreifen, Erfolg, ohne die Abfangroutine auszulösen. Das System umfasst auch einen Aufrufmechanismus, der dazu ausgelegt ist, die programmierte Operation aufzurufen; und einen Datenzugriffsmechanismus, der dazu ausgelegt ist, auf das Datenstrukturelement innerhalb des Speichers unter Verwendung der geraden Datenstrukturadresse zuzugreifen.
  • Auslösen der Abfangroutine. Das System umfasst auch einen Aufrufmechanismus, der dazu ausgelegt ist, die programmierte Operation aufzurufen; und einen Datenzugriffsmechanismus, der dazu ausgelegt ist, auf das Datenstrukturelement innerhalb des Speichers unter Verwendung der geraden Datenstrukturadresse zuzugreifen.
  • Wenn er auf einem Computer ausgeführt wird, bewirkt der maschinenlesbare Code bei einem Ausführungsbeispiel, dass ein Computer einen Ausrichtungsmechanismus, einen Zugriffskennzeichenmechanismus, einen Auslösemechanismus, einen Adressenumwandlungsmechanismus, einen Aufrufmechanismus und einen Datenzugriffsmechanismus ausführt. Jeder dieser Mechanismen besitzt dieselben Funktionen wie die entsprechenden Mechanismen für die vorher beschriebene Vorrichtung.
  • Die vorangehenden und viele weitere Aspekte der vorliegenden Erfindung werden für übliche Fachleute zweifellos offensichtlich, nachdem sie die folgende ausführliche Beschreibung von bevorzugten Ausführungsformen gelesen haben, die in den verschiedenen Zeichnungsfiguren dargestellt sind.
  • Beschreibung der Zeichnungen
  • 1A stellt ein Klassenobjekt des Standes der Technik dar;
  • 1B stellt einen ersten Prozess des Standes der Technik dar, der verwendet wird, um eine erste aktive Verwendung einer Datenstruktur oder eines OOP-Objekts zu erfassen;
  • 1C stellt einen zweiten Prozess des Standes der Technik dar, der verwendet wird, um eine erste aktive Verwendung einer Datenstruktur oder eines OOP-Objekts zu erfassen und die anschließenden Verwendungen zu optimieren;
  • 2 stellt ein Computersystem dar, das in der Lage ist, die Erfindung gemäß einem bevorzugten Ausführungsbeispiel anzuwenden;
  • 3 stellt den Betriebsüberblick über die Erfindung gemäß einem bevorzugten Ausführungsbeispiel dar;
  • 4 stellt eine Nachschlagetabelle, die verwendet wird, um eine fehlausgerichtete Speicheradresse einer speziellen Klasse oder Datenstruktur zuzuordnen, gemäß einem bevorzugten Ausführungsbeispiel dar;
  • 5 stellt einen detaillierten Klassenobjekt-Verwendungsprozess gemäß einem bevorzugten Ausführungsbeispiel dar;
  • 6A stellt einen Prozess "Zugriffskennzeichen auffinden" gemäß einem bevorzugten Ausführungsbeispiel dar; und
  • 6B stellt einen Prozess "Zugriffskennzeichen umwandeln" gemäß einem bevorzugten Ausführungsbeispiel dar.
  • Beschreibung von bevorzugten Ausführungsbeispielen
  • Bezeichnungen und Nomenklatur
  • Die folgende "Bezeichnungen und Nomenklatur" wird bereitgestellt, um das Verständnis der vorliegenden Erfindung und von deren bevorzugten Ausführungsbeispielen zu unterstützen.
  • Aufrufstelle – Eine Aufrufstelle ist die Prozedur, die verwendet wird, um eine programmierte Routine aufzurufen.
  • Klasse – Die Klasse ist eine Implementierung der OOP-Sprache, die Informationen aufzeichnet, die für einen Satz von Objekten gemeinsam sind, die von derselben Klasse instantiiert oder von anderen Objekten kopiert werden. Ein Fachmann wird verstehen, dass diese Datenstruktur dieselbe Datenstruktur, die zum Darstellen von Klassen verwendet wird, die von der Implementierung der Programmiersprache verwendet werden, sein kann oder nicht. Außerdem kann die Klasse selbst ein OOP-Objekt sein.
  • Datenstruktur – Eine Datenstruktur ist eine geordnete Speicheranordnung im Speicher für Variablen. Ein OOP-Objekt ist eine spezialisierte Datenstruktur.
  • Objekt – Ein Objekt im objektorientierten Programmierparadigma ist eine Zuordnung zwischen programmierten Verfahren und den durch eine Klasse definierten Datenstrukturen und dem instantiierten Speicher, der ein OOP-Objekt der Klasse darstellt.
  • Zeiger – Ein Zeiger ist ein Datenwert, der verwendet wird, um auf eine Datenstruktur oder ein Objekt zu verweisen. Ein Fachmann wird verstehen, dass "Zeiger" ohne Begrenzung eine Speicheradresse für die interessierenden Informationen oder einen zum Berechnen von deren Adresse verwendeter Wert und irgendwelche funktionalen Äquivalente, einschließlich Zugriffsnummern und ähnlicher Gebilde, umfasst.
  • Programmiertes Verfahren – Ein programmiertes Verfahren ist eine programmierte Routine, die einem OOP-Objekt zugeordnet ist. Das programmierte Verfahren wird aufgerufen, um zu bewirken, dass das OOP-Objekt eine Operation durchführt.
  • Programmierte Routine – Eine Prozedur, die von einer Aufrufstelle aufgerufen wird, so dass, wenn die Prozedur endet, sie zum nächsten Befehl nach der Aufrufstelle zurückkehrt. Eine programmierte Routine entspricht einer "Prozedur", "Funktion" oder "Routine", wie diese Begriffe auf dem Fachgebiet verwendet werden.
  • Prozedur – Eine Prozedur ist eine eigenständige Sequenz von Schritten, die zu einem gewünschten Ergebnis führen. Diese Schritte sind diejenigen, die eine physikalische Bearbeitung von physikalischen Größen erfordern. Gewöhnlich nehmen diese Größen die Form von elektrischen oder magnetischen Signalen an, die gespeichert, übertragen, kombiniert, verglichen oder anderweitig bearbeitet werden können. Diese Signale werden als Bits, Werte, Elemente, Symbole, Zeichen, Terme, Zahlen oder dergleichen bezeichnet. Es ist für Fachleute verständlich, dass alle diese und ähnliche Begriffe den entsprechenden physikalischen Größen zugeordnet sind und lediglich zweckmäßige Bezeichnungen sind, die auf diese Größen angewendet werden.
  • Betriebsumgebung
  • Obwohl die nachfolgende Beschreibung der Erfindung innerhalb des objektorientierten Paradigma liegt und auf Java-Klassenobjekte gerichtet ist, sind die offenbarten Verfahren auf andere Programmierparadigmen anwendbar und die Beschreibung gilt auch für Datenstrukturen.
  • Die Erfindung verwendet einen Computer. Einige der Elemente eines Computers, wie durch das allgemeine Bezugszeichen 200 angegeben, die dazu ausgelegt sind, die Erfindung zu unterstützen, sind in 2 gezeigt, wobei ein Prozessor 201 gezeigt ist, der eine Zentraleinheit (CPU) 203, einen Speicherabschnitt 205 und einen Eingabe/Ausgabe-(E/A) Abschnitt 207 aufweist. Der E/A-Abschnitt 207 ist mit einer Tastatur 209, einer Anzeigeeinheit 211, einer Plattenspeichereinheit 213 und einer CD-ROM-Laufwerkseinheit 215 verbunden. Die CD-ROM-Laufwerkseinheit 215 kann ein CD-ROM-Medium 217 lesen, das typischerweise ein Programm und Daten 219 enthält. Die CD-ROM-Laufwerkseinheit 215 zusammen mit dem CD-ROM-Medium 217 und der Plattenspeichereinheit 213 bildet einen Dateispeichermechanismus. Ein solches Computersystem ist in der Lage, Anwendungen auszuführen, die die Erfindung verkörpern. Ein Fachmann wird verstehen, dass die CD-ROM-Laufwerkseinheit 215 gegen irgendeine andere Vorrichtung ausgetauscht werden kann, die ermöglicht, dass ein maschinenlesbarer Code von irgendwelchen Medien oder über das Netzwerk in den Computer gelesen wird. Eine solche Person wird auch verstehen, dass die Erfindung auf einem Computer ausgeführt werden kann, der keine Tastatur oder Anzeige umfasst.
  • Die Erfindung stellt einen effizienten Mechanismus bereit, um eine erste aktive Verwendung einer Datenstruktur (einschließlich eines OOP-Objekts) zu erfassen und die Datenstruktur direkt vor der ersten aktiven Verwendung zu initialisieren. Die Erfindung arbeitet durch Bewirken, dass die erste aktive Verwendung einer Datenstruktur einen Fehler eines fehlausgerichteten Speicherzugriffs verursacht, der zu einer Abfangroutine führt. Dies wird bewerkstelligt, indem angefordert wird, dass die Speicherzugriffsoperation unter Verwendung einer Speicherzugriffsbetriebsart durchgeführt wird, die eine gerade Speicheradresse erfordert, und der Speicherzugriff bei einer ungeraden Speicheradresse versucht wird. Die Abfang-Bearbeitungsroutine wandelt die Speicheradresse in eine gerade Speicheradresse um, führt die Datenstruktur-Initialisierung durch und bewirkt, dass der Computer den Befehl, der die Abfangroutine verursacht hat, erneut ausführt. Dieser Versuch, auf die nun initialisierte Datenstruktur zuzugreifen, hat Erfolg, da die Speicheradresse umgewandelt wurde.
  • 3 stellt einen "Klassenobjekt-Initialisierungs"-Prozess dar, der mit dem allgemeinen Bezugszeichen 300 angegeben ist und der verwendet wird, um ein Klassenobjekt in Reaktion auf die erste aktive Verwendung des Klassenobjekts (der anfängliche Zugriff) zu initialisieren. Ein Fachmann wird verstehen, dass das Klassenobjekt eine Datenstruktur ist. Der "Klassenobjekt-Initialisierungs"-Prozess 300 beginnt an einer "Start"-Grenzstelle 301 und geht zu einer Prozedur 303 "Klassenobjekt laden" weiter. Die Prozedur 303 "Klassenobjekt laden" ordnet Speicher für das Klassenobjekt zu und kann das Klassenobjekt vorinitialisieren. Die Vorinitialisierung ermöglicht, dass das Klassenobjekt von dem das Objekt enthaltenden Programm verwendet wird. Die Vorinitialisierung richtet sich auf Elemente wie z.B. die Größe des Klassenobjekts, Verfahrenszeiger und ein anfängliche Zugriffskennzeichen. Es findet jedoch während der Vorinitialisierung keine vom Benutzer festgelegte Initialisierung statt.
  • Das Zugriffskennzeichen wird vorinitialisiert, so dass es eine fehlausgerichtete Speicheradresse enthält, so dass ein Speicherzugriff unter Verwendung einer ausgerichteten Speicherzugriffsbetriebsart misslingt, wenn ein gerader Versatz mit dem Zugriffskennzeichen verwendet wird. Im Allgemeinen ist die fehlausgerichtete Speicheradresse eine ungerade Datenstruktur-Speicheradresse, die dem Klassenobjekt zugeordnet ist, und die ausgerichtete Speicherzugriffsbetriebsart ist eine Nicht-Byte-Zugriffsbetriebsart. Ein Fachmann wird verstehen, dass die ungerade Datenstruktur-Speicheradresse häufig auf eine ungerade Bytestelle innerhalb des Klassenobjekts zeigt. Obwohl das Klassenobjekt vorinitialisiert werden kann, werden die als Variablen verwendeten Datenstrukturelemente innerhalb des Klassenobjekts nicht initialisiert, bis das Programm eine erste aktive Verwendung von irgendeinem der Datenstrukturelemente innerhalb des Klassenobjekts versucht. Ein Fachmann wird verstehen, dass jeder Zugriff auf das Klassenobjekt das Zugriffskennzeichen verwendet, so dass irgendein Zugriff auf das Klassenobjekt die erste aktive Verwendung des Klassenobjekts sein kann.
  • Schließlich versucht ein Ausführungsprogramm die erste aktive Verwendung der Klasse in einer Prozedur 305 "erste aktive Verwendung der Klasse versuchen", indem es versucht, auf eine statische Klassenvariable zuzugreifen. Diese Prozedur verwendet das Zugriffskennzeichen der Klasse, um einen indirekt indizierten Speicherzugriff unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart zu versuchen, um auf die statische Klassenvariable zuzugreifen (alle aktiven Verwendungen der Klasse verwenden dieses Verfahren, um die Klasse aktiv zu verwenden, so dass irgendeine aktive Verwendung die erste versuchte aktive Verwendung sein kann). Da das Zugriffskennzeichen auf eine ungerade Datenstruktur-Speicheradresse vorinitialisiert wird, misslingt der Speicherzugriffsversuch (da nur ein Byte-Zugriffsbetriebsart-Befehl auf den Speicher beginnend an einer ungeraden Bytegrenze zugreifen kann). Der Computer erfasst den illegalen Speicherzugriffsversuch und löst eine Abfangroutine aus. Die Abfangroutine verursacht, dass der Computer eine Prozedur 307 "Fehlausrichtung abfangen durch Abfangroutine" ausführt, die feststellt, dass der Speicherzugriff innerhalb eines Klassenobjekts stattfand, das nicht initialisiert war. Die nachfolgende Beschreibung beschreibt die Erfindung in Bezug auf moderne Computersysteme, die einen fehlausgerichteten Speicherzugriffsversuch ermitteln, wenn die Speicherzugriffsbetriebsart nicht byteorientiert ist und auf eine ungerade Speicheradresse adressiert ist.
  • Der "Klassenobjekt-Initialisierungs"-Prozess 300 modifiziert dann das Zugriffskennzeichen in einer Prozedur 309 "Zugriffskennzeichen umwandeln", so dass ein anschließender Nicht-Byte-Zugriffsbetriebsart-Speicherzugriff unter Verwendung des Zugriffskennzeichens Erfolg hat, ohne den Fehler des fehlausgerichteten Speicherzugriffs zu verursachen. Im Allgemeinen besteht diese Modifikation aus dem Umwandeln des Zugriffskennzeichens in eine gerade Adresse innerhalb des Klassenobjekts. Folglich haben anschließende Nicht-Byte-Zugriffsbetriebsart-Zugriffe Erfolg, wenn das Zugriffskennzeichen mit einem geraden Versatz verwendet wird. Nachdem der "Klassenobjekt-Initialisierungs"-Prozess 300 das Zugriffskennzeichen umgewandelt hat, geht er zu einer Prozedur 311 "Einleitungsroutinenverfahren aufrufen" weiter, die eine programmierte Operation aufruft, die eine Initialisierung für statische Klassenvariablen und vom Benutzer festgelegte Initialisierungsoperationen durchführt. Diese Initialisierungsprozesse greifen auf die Datenstruktur unter Verwendung des modifizierten Zugriffskennzeichens zu. Sobald die Datenstruktur vollständig initialisiert ist, bewirkt eine Prozedur 313 "erste aktive Verwendung der Klasse vollenden", dass die Abfang-Bearbeitungsroutine den Rückkehrprogrammzähler (falls erforderlich) einstellt und eine Abfangroutinerückkehr ausführt, um die Prozedur 305 "erste aktive Verwendung der Klasse versuchen" erneut auszuführen. Da das Zugriffskennzeichen nun gerade ist, endet die Prozedur 305 "erste aktive Verwendung der Klasse versuchen" erfolgreich. Der "Klassenobjekt-Initialisierungs"-Prozess 300 endet dann durch eine "Ende"-Grenzstelle 315.
  • 4 stellt eine "Nachschlage"-Tabelle dar, die mit dem allgemeinen Bezugszeichen 400 versehen ist und von einem bevorzugten Ausführungsbeispiel verwendet wird, um das Zugriffskennzeichen einem Klassenobjekt zuzuordnen. Die "Nachschlage"-Tabelle 400 enthält eine Matrix 401 "Klassenzeiger und Ausdehnung", die eine Matrix von Strukturen, eine zweidimensionale Matrix oder eine andere auf dem Fachgebiet bekannte Speicheranordnung sein kann. Die Matrix 401 "Klassenzeiger und Ausdehnung" umfasst ein Feld 403 "Zeiger auf Klasse A", das einen Zeiger auf das erste Byte der "A"-Klasse (nicht dargestellt) enthält. Die Matrix 401 "Klassenzeiger und Ausdehnung" umfasst auch ein Feld 405 "Größe von Klasse A", das die Größe der "A"-Klasse enthält. Ebenso enthält ein Feld 407 "Zeiger auf Klasse B" die Adresse einer Instanz 409 der "Klasse B", die (wie alle Klassen) auf eine gerade Speicheradresse ausgerichtet ist. Das Feld 411 "Größe von Klasse B" enthält die Größe der Instanz 409 der "Klasse B". Ein Feld 413 "Zeiger auf Klasse C" enthält einen Zeiger auf eine Instanz 415 der "Klasse C" und ein Feld 417 "Größe von Klasse C" enthält die Größe der Instanz 415 der "Klasse C". Ein Feld 419 "Zeiger auf Klasse D" enthält einen Zeiger auf das erste Byte der "D"-Klasse (nicht dargestellt). Ein Feld 421 "Größe von Klasse D" enthält die Größe der "D"-Datenstruktur.
  • Ein Fachmann wird verstehen, dass in einer Nicht-OOP-Umgebung die Matrix 401 "Klassenzeiger und Ausdehnung" Zeiger auf Datenstrukturen und die Größe der Datenstrukturen umfasst. Ein Fachmann wird auch verstehen, dass viele Mechanismen zum Erzeugen der Matrix 401 "Klassenzeiger und Ausdehnung" existieren. Diese Mechanismen umfassen (ohne Begrenzung) das Erzeugen der Matrix 401 "Klassenzeiger und Ausdehnung" unter Verwendung eines Kompilierers (oder Assemblierers) zusammen mit einem Binderprogramm, das dynamische Konstruieren der Matrix 401 "Klassenzeiger und Ausdehnung", wenn Datenstrukturen oder Klassen vom Speicher zugeordnet werden, und viele weitere ähnliche Verfahren.
  • Die Instanz 409 der "Klasse B" umfasst ein Feld 423 "Zugriffskennzeichen der Klasse B", das verwendet wird, um das Zugriffskennzeichen zu speichern. Bei diesem Ausführungsbeispiel wird der anfängliche Inhalt des Zugriffskennzeichenfeldes während der Vorinitialisierung auf eine ungerade Datenstruktur-Speicheradresse wie z.B. die Adresse der Instanz 409 der "Klasse B" plus Eins, gesetzt. Während des Initialisierungsprozesses wird das Zugriffskennzeichen so modifiziert, dass es auf eine gerade Datenstrukturadresse zeigt. Folglich zeigt das modifizierte Zugriffskennzeichen auf eine gerade Speicheradresse innerhalb der Klasse. Ein bevorzugtes Ausführungsbeispiel lässt das modifizierte Zugriffskennzeichen auf die erste Instanzvariable in der Klasse zeigen. Ein weiteres bevorzugtes Ausführungsbeispiel lässt das modifizierte Zugriffskennzeichen auf den Start der Klasse zeigen. Die Instanz 409 der "Klasse B" umfasst auch ein Feld 425 "statische Klassenvariable", das als Speicher für eine Klasseninstanzvariable dient, die von allen Objekten der Klasse gemeinsam genutzt wird. In der Java-Umgebung muss das Feld 425 "statische Klassenvariable" bei der ersten aktiven Verwendung der Klasse initialisiert werden.
  • Die Instanz 409 der "Klasse B" umfasst auch einen "Klassenverfahrenszugriff"-Speicher 427. Ein Fachmann wird verstehen, dass der "Klassenverfahrenszugriff"-Speicher 427 ein Mittel für instantiierte Objekte der Klasse zum Aufrufen der Verfahren des Objekts bereitstellt. Die Instanz 415 der "Klasse C" umfasst auch ein Feld 429 "Zugriffskennzeichen der Klasse C" mit denselben Eigenschaften wie jene des Feldes 423 "Zugriffskennzeichen der Klasse B", das jedoch anfänglich einen Wert enthält, der die Adresse der Instanz 415 der "Klasse C" plus Eins ist. Die Instanz 415 der "Klasse C" enthält auch ein Feld 431 "statische Klassenvariable" und einen "Klassenverfahrenszugriff"-Speicher 433 mit ähnlichen Eigenschaften wie die entsprechenden Felder in der Instanz 409 der "Klasse B".
  • Das Feld 423 "Zugriffskennzeichen der Klasse B", das Feld 425 "statische Klassenvariable", der Klassenverfahrenszugriff"-Speicher 427, das Feld 429 "Zugriffskennzeichen der Klasse C", das Feld 431 "statische Klassenvariable" und der "Klassenverfahrenszugriff"-Speicher 433 werden alle auf gerade Speicheradressen unter Verwendung von einem oder mehreren Ausrichtungsmechanismen, die auf dem Fachgebiet gut verstanden sind, ausgerichtet. Diese Ausrichtung kann bewerkstelligt werden, indem angefordert wird, dass jede statische Klassenvariable an einem geraden Versatz vom Start der Klasseninstanz startet und dass die Klasseninstanz auch an einer geraden Speicheradresse startet. Eine weitere Anforderung besteht darin, dass auf jede statische Klassenvariable unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart zugegriffen wird. Folglich wird eine statische Ein-Byte-Klassenvariable durch den Kompilierer so erweitert, dass sie eine Länge von mindestens zwei Bytes aufweist und auf ein geradzahliges Byte ausgerichtet ist. Die "Nachschlage"-Tabelle 400 stellt einen Zugriffskennzeichenmechanismus bereit, der das Zugriffskennzeichen der Klasse zuordnet.
  • 5 stellt einen "Klassenobjektverwendungs"-Prozess dar, der mit dem allgemeinen Bezugszeichen 500 angegeben ist und der eine erste aktive Verwendung des Klassenobjekts, gefolgt von einer nachfolgenden aktiven Verwendung, zeigt. Der "Klassenobjektverwendungs"-Prozess 500 beginnt an einer "Start"-Grenzstelle 501 und geht zu einer Prozedur 503 "Zugriffskennzeichen laden" weiter. Die Prozedur 503 "Zugriffskennzeichen laden" ruft das Zugriffskennzeichen aus dem Zugriffsfeld in der Klasse (beispielsweise dem Feld 423 "Zugriffskennzeichen der Klasse B") ab und bringt den Zugriffskennzeichenwert in eine Form, die in einer indirekt indizierten Operation verwendet werden kann. Dies umfasst im Allgemeinen das Laden des Inhalts des Zugriffskennzeichens der Klasse in ein Register, so dass ein Speicherzugriff an einer Speicherstelle durchgeführt werden kann, die vom Zeiger im Register versetzt ist. Als nächstes versucht eine Prozedur 505 "anfänglicher Zugriff", auf das Datenstrukturelement (wie z.B. das Feld 425 "statische Klassenvariable") als Versatz von der Adresse, auf die durch den Zeiger im Register gezeigt wird, zuzugreifen. Dieser Zugriff wird unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart versucht. Dieser Zugriffsversuch aktiviert den Computer, um einen Fehler eines fehlausgerichteten Speicherzugriffs bei diesem anfänglichen Zugriff zu erzeugen, da das Zugriffskennzeichen eine ungerade Adresse mit einem geraden Versatz ist und einen Nicht-Byte-Zugriffsbetriebsart-Speicherzugriff verwendet. Folglich ist dieser versuchte Zugriff ein Auslösemechanismus, der eine Abfangroutine bei der ersten aktiven Verwendung des Klassenobjekts aufruft.
  • Ein Fachmann wird verstehen, dass die Adresse des Datenstrukturelements im Klassenobjekt erzeugt werden kann, indem der gerade Versatz des Datenstrukturelements zum Zugriffskennzeichenwert im Register addiert wird; dass der gerade Versatz als Versatz vom im Register enthaltenen Zugriffskennzeichenwert verwendet werden kann, oder ein anderer geeigneter Mechanismus, der unter Verwendung der Adressierungsbetriebsarten des Computers zur Verfügung steht.
  • Der resultierende Abfangprozess speichert den Zustand des Computers (einschließlich des das Zugriffskennzeichen enthaltenden Registers) und ruft eine Prozedur 507 "Abfangroutine empfangen" innerhalb eines Abfang- Bearbeitungsprogramms auf. Eine Prozedur 509 "Adresse gewinnen" innerhalb des Ermittlungs-Bearbeitungsprogramms untersucht den gespeicherten Computerzustand und den Befehl, der den Fehler des fehlausgerichteten Speicherzugriffs verursacht hat, und gewinnt die ungerade Speicheradresse, die den Fehler verursacht hat, und stellt fest, welches Register zum Zeitpunkt der Abfangroutine das Zugriffskennzeichen enthielt. Sobald diese Adresse gewonnen ist, stellt eine Entscheidungsprozedur 511 "Adresse in Klassenobjekt" unter Verwendung der "Nachschlage"-Tabelle 400 fest, ob die gewonnene Adresse eine Adresse innerhalb irgendeines relevanten OOP-Klassenobjekts (Datenstruktur) ist. Ein Fachmann wird verstehen, wie die gewonnene Adresse mit den Informationen innerhalb der Matrix 401 "Klassenzeiger und Ausdehnung" zu vergleichen ist, um diese Feststellung durchzuführen. Wenn die gewonnene Adresse keine Adresse innerhalb irgendeiner relevanten OOP-Klasse ist, geht der "Klassenobjektverwendungs"-Prozess 500 zu einer Prozedur 513 "normale Abfangverarbeitung" weiter, um die Abfangroutine unter Verwendung von Verfahren des Standes der Technik zu verarbeiten, da die Abfangroutine nicht mit der ersten aktiven Verwendung der Klasse in Beziehung stand.
  • Wenn jedoch die Adresse eine Adresse innerhalb eines der Speicherbereiche (OOP-Klassen), die durch die Matrix 401 "Klassenzeiger und Ausdehnung" definiert sind, war, erzeugt die Entscheidungsprozedur 511 "Adresse in Klassenobjekt" einen Zeiger auf das Klassenobjekt, das die Adresse enthält. Dann geht der "Klassenobjektverwendungs"-Prozess 500 zu einer Prozedur 515 "Zugriffskennzeichen auffinden" weiter, die den entsprechenden Zeiger in der Matrix 401 "Klassenzeiger und Ausdehnung" verwendet, um das Zugriffskennzeichenfeld aufzufinden, das dem Klassenobjekt zugeordnet ist, wie anschließend mit Bezug auf 6A beschrieben wird.
  • Als nächstes geht der "Klassenobjektverwendungs"-Prozess 500 zu einer Prozedur 517 "Zugriffskennzeichen umwandeln" weiter, die das in einem Zugriffskennzeichenfeld (wie z.B. dem Feld 423 "Zugriffskennzeichen der Klasse B") gespeicherte Zugriffskennzeichen umwandelt, so dass es auf eine gerade Speicheradresse zeigt, so dass ein Nicht-Byte-Zugriffsbetriebsart-Speicherzugriff, der auf einen geraden Versatz vom Zugriffskennzeichen durchgeführt wird, auf das beabsichtigte Datenstrukturelement zugreift. Die Prozedur 517 "Zugriffskennzeichen umwandeln" wird anschließend mit Bezug auf 6B beschrieben.
  • Nachdem das Zugriffskennzeichen umgewandelt ist, geht der "Klassenobjektverwendungs"-Prozess 500 zu einer Prozedur 519 "Rückkehrprogrammzähler einstellen" weiter. Die Prozedur 519 "Rückkehrprogrammzähler einstellen" modifiziert den von der Prozedur 507 "Abfangroutine empfangen" gespeicherten Zustand, um den Inhalt des das Zugriffskennzeichen enthaltenden Registers so umzuwandeln, dass es das umgewandelte Zugriffskennzeichen enthält. Die Prozedur 519 "Rückkehrprogrammzähler einstellen" stellt auch den Programmzähler ein, um die versuchte Speicheroperation (die die Abfangroutine aufgerufen hat) mit dem umgewandelten Zugriffskennzeichen erneut auszuführen. Als nächstes initialisiert eine "Klasseninitialisierungs"-Prozedur 520 die Klasse. Ein Fachmann wird verstehen, dass die "Klasseninitialisierungs"-Prozedur 520 ein Beispiel für einen Aufrufmechanismus ist, der verwendet wird, um eine programmierte Operation aufzurufen. Ein Fachmann wird auch verstehen, dass die Initialisierung Erfolg hat, da das Zugriffskennzeichen vor der Ausführung der "Klasseninitialisierungs"-Prozedur 520 umgewandelt wurde. Schließlich stellt eine "Abfangsroutinenrückkehr"-Prozedur 521 den Computerzustand (wie durch die Prozedur 519 "Rückkehrprogrammzähler einstellen" modifiziert) wieder her und kehrt zur erneuten Ausführung des Befehls zurück, der die Abfangroutine bei der Prozedur 505 "anfänglicher. Zugriff" verursacht hat. Da das Zugriffskennzeichen nicht mehr ungerade ist, greift der vorher versuchte Speicherzugriff erfolgreich auf die initialisierte Datenstruktur zu. Als nächstes geht der "Klassenobjektverwendungs"-Prozess 500 zu einer Prozedur 523 "weitere Verarbeitung" weiter, die weitere Prozeduren durchführt. Schließlich versucht eine Prozedur 525 "anschließender Zugriff" einen weiteren Zugriff auf eines der Datenstrukturelemente in der Datenstruktur unter Verwendung des umgewandelten Zugriffskennzeichens und des geraden Versatzes auf das Datenstrukturelement im Klassenobjekt. Da das umgewandelte Zugriffskennzeichen gerade ist, endet diese Operation (der Datenzugriffsmechanismus), ohne eine Abfangroutine zu verursachen. Der "Klassenobjektverwendungs"-Prozess 500 endet durch eine "Ende"-Grenzstelle 527. Ein Fachmann wird verstehen, dass die tatsächliche Sequenz des vorher beschriebenen Schritts modifiziert werden kann, um ähnliche Ergebnisse zu erzielen.
  • Ein bevorzugtes Ausführungsbeispiel der Erfindung wird verwendet, um statische Klassenvariablen innerhalb eines Java-Klassenobjekts zu initialisieren. Dieses Ausführungsbeispiel verwendet die aufgerufene programmierte Operation als Initialisierungsprozedur, die die Java-Klassen-Einleitungsroutinen aufruft.
  • 6A stellt einen Prozess "Zugriffskennzeichen auffinden" dar, der mit dem allgemeinen Bezugszeichen 600 angegeben ist und von der Prozedur 515 "Zugriffskennzeichen auffinden" von 5 aufgerufen wird. Der Prozess 600 "Zugriffskennzeichen auffinden" beginnt an einer "Start"-Grenzstelle 601 und geht zu einer Prozedur 603 "Klasse auffinden" weiter, die die Adresse der Datenstruktur, die von der Entscheidungsprozedur 511 "Adresse in Klassenobjekt" zurückgegeben wird, als Zeiger auf die relevante Datenstruktur verwendet. Dann findet eine Prozedur 605 "Zugriffskennzeichen auffinden" das Datenstrukturelement, das das Zugriffskennzeichen enthält (beispielsweise das Feld 423 "Zugriffskennzeichen der Klasse B"), und führt einen Zeiger auf den Zugriffskennzeichenspeicher zurück, so dass das Zugriffskennzeichen durch die Prozedur 517 "Zugriffskennzeichen umwandeln" von 5 umgewandelt werden kann. Obwohl ein bevorzugtes Ausführungsbeispiel das Zugriffskennzeichen als erstes Datenstrukturelement in einem OOP-Objekt oder einer Datenstruktur anordnet, wird ein Fachmann verstehen, dass viele Verfahren existieren, um das Zugriffskennzeichen seinem OOP-Objekt oder seiner Datenstruktur zuzuordnen.
  • 6B stellt einen Prozess "Zugriffskennzeichen umwandeln" dar, der mit dem allgemeinen Bezugszeichen 650 angegeben ist und der durch die Prozedur 517 "Zugriffskennzeichen umwandeln" von 5 aufgerufen wird. Der Prozess 650 "Zugriffskennzeichen umwandeln" bewirkt einen Adressenumwandlungsmechanismus. Der Prozess 650 "Zugriffskennzeichen umwandeln" beginnt an einer "Start"-Grenzstelle 651 und geht zu einer Entscheidungsprozedur 653 "ungerades Klassenzugriffskennzeichen" weiter, die feststellt, ob das der Klasse zugeordnete Zugriffskennzeichen nicht geändert wurde. Wenn das Zugriffskennzeichen der Klasse ungerade ist, geht der Prozess 650 "Zugriffskennzeichen umwandeln" zu einer Prozedur 655 "Klassenzugriffskennzeichen umwandeln" weiter, die das Zugriffskennzeichen, das in einem Zugriffskennzeichenfeld (wie z.B. dem Feld 423 "Zugriffskennzeichen der Klasse B") gespeichert ist, umwandelt, so dass es auf eine gerade Speicheradresse zeigt. Folglich greift ein Nicht-Byte-Zugriffsbetriebsart-Speicherzugriff, der auf einen geraden Versatz vom Zugriffskennzeichen durchgeführt wird, auf das beabsichtigte Datenstrukturelement zu. Der Prozess 650 "Zugriffskennzeichen umwandeln" geht dann zu einer Prozedur 657 "Zugriffskennzeichen im Register umwandeln" nach der Prozedur 655 "Klassenzugriffskennzeichen umwandeln" weiter. Die Prozedur 657 "Zugriffskennzeichen im Register umwandeln" wird auch erreicht, wenn die Entscheidungsprozedur 653 "ungerades Klassenzugriffskennzeichen" festgestellt hat, dass das Zugriffskennzeichen der Klasse gerade war. Die Prozedur 657 "Zugriffskennzeichen im Register umwandeln" wandelt auch das Zugriffskennzeichen um, das sich im Register befindet, das von der Prozedur 507 "Abfangroutine empfangen" gespeichert wird. Wenn die Abfangroutine zurückkehrt, haben somit anschließende Zugriffe auf die Klasse unter Verwendung dieses Registers Erfolg. Ein Fachmann wird verstehen, dass das Register, das das ungerade Zugriffskennzeichen enthält, durch Untersuchen des Befehls, der die Abfangroutine während der Prozedur 509 "Adresse gewinnen" verursacht hat, ermittelt wird. Schließlich endet der Prozess 600 "Zugriffskennzeichen auffinden" durch eine "Ende"-Grenzstelle 659.
  • Ein bevorzugtes Ausführungsbeispiel wird innerhalb des Prozedurprogrammparadigmas ausgeführt. Ein weiteres bevorzugtes Ausführungsbeispiel wird unter Verwendung von Klassen im objektorientierten Programmier-(OOP) Paradigma ausgeführt. Im OOP-Paradigma ist die Datenstruktur in einer Klasse enthalten und das Datenstrukturelement ist eine statische Klassenvariable. Ein Fachmann wird verstehen, dass die Erfindung verwendet werden kann, um eine programmierte Operation in Reaktion auf den ersten Speicherzugriff auf einen Speicherbereich aufzurufen. Ein bevorzugtes Ausführungsbeispiel wird in Java-Umgebungen verwendet, um statische Klassenvariablen bei der ersten aktiven Verwendung der Klasse zu initialisieren, wie für die Java-Programmiersprachenspezifikation erforderlich.
  • Die Erfindung ruft effizient eine programmierte Operation auf, wenn auf eine Datenstruktur oder ein OOP-Objekt zum ersten Mal zugegriffen wird. Insbesondere stellt die Erfindung einen effizienten Mechanismus zum Initialisieren von Java-Klassen bei ihrer ersten aktiven Verwendung bereit.
  • Aus dem Vorangehenden ist zu erkennen, dass die Erfindung (ohne Begrenzung) die folgenden Vorteile aufweist:
    • 1) Die Laufzeitprüfung für die erste aktive Verwendung einer Datenstruktur ist für einen Kompiliereroptimierer transparent.
    • 2) Kompiliereroptimierungen von Computerbefehlen, die verwendet werden, um auf die Datenstruktur zuzugreifen, können sicher solche Computerbefehle optimieren, ohne spezielle Optimierungsfälle zu erfordern.
    • 3) Nur die erste aktive Verwendung der Datenstruktur schafft irgendeinen Mehraufwand. Anschließende aktive Verwendungen tun dies nicht.
  • Obwohl die vorliegende Erfindung hinsichtlich derzeit bevorzugter Ausführungsbeispiele beschrieben wurde, wird ein Fachmann verstehen, dass verschiedene Modifikationen und Änderungen vorgenommen werden können, ohne vom Schutzbereich der Erfindung abzuweichen. Folglich ist der Schutzbereich der Erfindung nicht auf die hierin erörterten speziellen Ausführungsbeispiele der Erfindung begrenzt, sondern sollte nur durch die beigefügten Ansprüche und deren Äquivalente festgelegt werden.

Claims (19)

  1. Computergesteuertes Verfahren zum Aufrufen einer programmierten Operation an einer Datenstruktur in Reaktion auf einen Zugriff auf die Datenstruktur unter Verwendung einer Speicheradresse, wobei die Speicheradresse ermittelt und umgewandelt wird; dadurch gekennzeichnet, dass die aufgerufene programmierte Operation an einer Datenstruktur auf eine erste aktive Verwendung der Datenstruktur reagiert, und das Verfahren die Schritte umfasst: Zuordnen (303) eines Datenstruktur-Zugriffskennzeichenspeichers zur Datenstruktur, wobei der Datenstruktur-Zugriffskennzeichenspeicher anfänglich so gesetzt ist, dass er eine fehlausgerichtete Speicheradresse enthält, die mit der Datenstruktur in Beziehung steht; Auslösen (305) einer Abfangroutine bei der ersten aktiven Verwendung der Datenstruktur, indem versucht wird, auf die Datenstruktur unter Verwendung der fehlausgerichteten Speicheradresse mit einer ausgerichteten Speicherzugriffsbetriebsart zuzugreifen; und Umwandeln (309) der fehlausgerichteten Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine ausgerichtete Speicheradresse in Reaktion auf die Auslösung der Abfangroutine, wodurch anschließende Versuche, auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zuzugreifen, ohne Auslösen der Abfangroutine Erfolg haben.
  2. Computergesteuertes Verfahren nach Anspruch 1, welches ferner umfasst: Ausrichten (520) der Datenstruktur auf die ausgerichtete Speicheradresse, so dass auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zugegriffen werden kann.
  3. Computergesteuertes Verfahren nach Anspruch 1, welches ferner umfasst: Aufrufen (301313) der programmierten Operation nach Anspruch 1; und Zugreifen (525) auf die Datenstruktur unter Verwendung der ausgerichteten Speicheradresse und der ausgerichteten Speicherzugriffsbetriebsart.
  4. Computergesteuertes Verfahren nach Anspruch 3, wobei die ausgerichtete Speicheradresse eine gerade Speicheradresse ist und die fehlausgerichtete Speicheradresse eine ungerade Speicheradresse ist.
  5. Computergesteuertes Verfahren nach Anspruch 1, welches ferner umfasst: Ausrichten (520) des Datenstrukturelements auf eine gerade Speicheradresse, wobei sich das Datenstrukturelement in einem geraden Versatz innerhalb der Datenstruktur befindet, so dass auf das Datenstrukturelement unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart zugegriffen werden kann; wobei, wenn der Datenstruktur-Zugriffskennzeichenspeicher der Datenstruktur zugeordnet wird (303), der Datenstruktur-Zugriffskennzeichenspeicher anfänglich eine ungerade Datenstruktur-Speicheradresse enthält, die mit der Datenstruktur in Beziehung steht; wobei das Auslösen (305) der Abfangroutine beim anfänglichen Zugriff auf die Datenstruktur durchgeführt wird, indem versucht wird, auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der ungeraden Datenstruktur-Speicheradresse und dem geraden Versatz zuzugreifen; wobei das Umwandeln (309) die ungerade Datenstruktur-Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine gerade Datenstrukturadresse umwandelt, wodurch anschließende Versuche, auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der geraden Datenstrukturadresse und dem geraden Versatz zuzugreifen, ohne Auslösen der Abfangroutine Erfolg haben; und danach, jedes Mal, wenn die programmierte Operation aufgerufen wird, Zugreifen (525) auf das Datenstrukturelement unter Verwendung der geraden Datenstrukturadresse.
  6. Computergesteuertes Verfahren nach Anspruch 5, wobei die Datenstruktur mit einem objektorientierten Programmierobjekt in Beziehung steht.
  7. Computergesteuertes Verfahren nach Anspruch 6, wobei das objektorientierte Programmierobjekt ein Java-Klassen-Objekt ist, das bei der ersten aktiven Verwendung des Java-Klassen-Objekts initialisiert wird.
  8. Computergesteuertes Verfahren nach Anspruch 5, wobei die programmierte Operation eine Initialisierungsprozedur (313) ist, die das Datenstrukturelement in der Datenstruktur bei der ersten aktiven Verwendung der Datenstruktur initialisiert.
  9. Computergesteuertes verfahren nach Anspruch 5, wobei das Datenstrukturelement eine statische Klassenvariable in einem Java-Klassen-Objekt ist und die programmierte Operation eine Initialisierungsprozedur ist, die die statische Klassenvariable durch Aufrufen einer Klasseneinleitungsroutine an dem Java-Klassen-Objekt initialisiert.
  10. Computergesteuertes System mit einer Zentraleinheit (203) und einem Speicher (205), der mit der Zentraleinheit gekoppelt ist, um eine programmierte Operation an einer Datenstruktur in Reaktion auf einen Zugriff auf die Datenstruktur unter Verwendung einer Speicheradresse, aufzurufen, wobei die Speicheradresse ermittelt und umgewandelt wird; dadurch gekennzeichnet, dass die aufgerufene programmierte Operation an einer Datenstruktur auf eine erste aktive Verwendung der Datenstruktur reagiert, und das System umfasst: einen Zuordnungsmechanismus, der dazu ausgelegt ist, einen Datenstruktur-Zugriffskennzeichenspeicher der Datenstruktur zuzuordnen (303), wobei der Datenstruktur-Zugriffskennzeichenspeicher anfänglich eine fehlausgerichtete Speicheradresse enthält, die mit der Datenstruktur in Beziehung steht; einen Fehlermechanismus für den fehlausgerichteten Speicherzugriff, der dazu ausgelegt ist, eine Abfangroutine bei der ersten aktiven Verwendung der Datenstruktur auszulösen (305), indem versucht wird, auf die Datenstruktur unter Verwendung einer ausgerichteten Speicherzugriffsbetriebsart mit der fehlausgerichteten Speicheradresse, die der Datenstruktur durch den Zuordnungsmechanismus zugeordnet wird, zuzugreifen; und einen Adressenumwandlungsmechanismus, der dazu ausgelegt ist, die fehlausgerichtete Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine ausgerichtete Speicheradresse in Reaktion auf den Fehlermechanismus für den fehlausgerichteten Speicherzugriff umzuwandeln (309), wodurch anschließende Versuche, auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zuzugreifen, ohne Auslösen der Abfangroutine Erfolg haben.
  11. Computergesteuertes System nach Anspruch 10, welches ferner umfasst: einen Ausrichtungsmechanismus, der dazu ausgelegt ist, die Datenstruktur auf die ausgerichtete Speicheradresse auszurichten (520), so dass auf die Datenstruktur unter Verwendung der ausgerichteten Speicherzugriffsbetriebsart und des Inhalts des Datenstruktur-Zugriffskennzeichenspeichers zugegriffen werden kann.
  12. Computergesteuertes System nach Anspruch 10, welches ferner umfasst: einen Aufrufmechanismus, der auf den Fehlermechanismus für den fehlausgerichteten Speicherzugriff reagiert und dazu ausgelegt ist, die programmierte Operation unter Verwendung des Mechanismus nach Anspruch 10 aufzurufen (301313); und einen Zugriffsmechanismus, der dazu ausgelegt ist, auf die Datenstruktur unter Verwendung der ausgerichteten Speicheradresse und der ausgerichteten Speicherzugriffsbetriebsart zuzugreifen (525).
  13. Computergesteuertes System nach Anspruch 12, wobei die ausgerichtete Speicheradresse eine gerade Speicheradresse ist und die fehlausgerichtete Speicheradresse eine ungerade Speicheradresse ist.
  14. Computergesteuertes System nach Anspruch 10 mit: einem Ausrichtungsmechanismus, der dazu ausgelegt ist, das Datenstrukturelement auf eine gerade Speicheradresse des Speichers auszurichten (520), wobei sich das Datenstrukturelement in einem geraden Versatz innerhalb der Datenstruktur befindet, so dass auf das Datenstrukturelement vom Speicher unter Verwendung einer Nicht-Byte-Zugriffsbetriebsart der Zentraleinheit (203) zugegriffen werden kann; wobei der Datenstruktur-Zugriffskennzeichenspeicher anfänglich eine ungerade Datenstruktur-Speicheradresse enthält, die mit der Datenstruktur in Beziehung steht; wobei der Auslösemechanismus dazu ausgelegt ist, die Abfangroutine beim anfänglichen Zugriff auf das Datenstrukturelement auszulösen, indem versucht wird, auf das Datenstrukturelement in dem Speicher unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der ungeraden Datenstruktur-Speicheradresse und dem geraden Versatz zuzugreifen; und wobei der Adressenumwandlungsmechanismus in Reaktion auf den Auslösemechanismus dazu ausgelegt ist, die ungerade Datenstruktur-Speicheradresse innerhalb des Datenstruktur-Zugriffskennzeichenspeichers in eine gerade Datenstrukturadresse umzuwandeln, wodurch anschließende Versuche, auf das Datenstrukturelement unter Verwendung der Nicht-Byte-Zugriffsbetriebsart mit der geraden Datenstrukturadresse und dem geraden Versatz zuzugreifen, ohne Auslösen der Abfangroutine Erfolg haben; einem Aufrufmechanismus, der dazu ausgelegt ist, die programmierte Operation aufzurufen; und einem Datenzugriffsmechanismus, der dazu ausgelegt ist, auf das Datenstrukturelement innerhalb des Speichers unter Verwendung der geraden Datenstrukturadresse zuzugreifen (525).
  15. Computergesteuertes System nach Anspruch 14, wobei die Datenstruktur mit einem objektorientierten Programmierobjekt in Beziehung steht.
  16. Computergesteuertes System nach Anspruch 15, wobei das objektorientierte Programmierobjekt ein Java-Klassen-Objekt ist, das bei der ersten aktiven Verwendung des Java-Klassen-Objekts initialisiert wird.
  17. Computergesteuertes System nach Anspruch 14, wobei die programmierte Operation eine Initialisierungsprozedur ist, die das Datenstrukturelement innerhalb der Datenstruktur bei der ersten aktiven Verwendung der Datenstruktur initialisiert.
  18. Computergesteuertes System nach Anspruch 14, wobei das Datenstrukturelement eine statische Klassenvariable in einem Java-Klassen-Objekt ist und die programmierte Operation eine Initialisierungsprozedur ist, die ferner einen Klassen-Einleitungsroutinen-Mechanismus umfasst, der dazu ausgelegt ist, die statische Klassenvariable innerhalb des Java-Klassen-Objekts zu initialisieren.
  19. Computerprogrammprodukt mit: einem vom Computer verwendbaren Speichermedium, in dem ein maschinenlesbarer Code enthalten ist, um eine programmierte Operation an einer Datenstruktur gemäß dem Verfahren nach einem der Ansprüche 1 bis 9 aufzurufen.
DE69932964T 1998-02-26 1999-02-26 Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch Expired - Fee Related DE69932964T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/031,229 US6148302A (en) 1998-02-26 1998-02-26 Method, apparatus, system and computer program product for initializing a data structure at its first active use
US31229 1998-02-26

Publications (2)

Publication Number Publication Date
DE69932964D1 DE69932964D1 (de) 2006-10-12
DE69932964T2 true DE69932964T2 (de) 2007-05-03

Family

ID=21858297

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69932964T Expired - Fee Related DE69932964T2 (de) 1998-02-26 1999-02-26 Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch

Country Status (4)

Country Link
US (1) US6148302A (de)
EP (1) EP0939365B1 (de)
JP (1) JP2000194558A (de)
DE (1) DE69932964T2 (de)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3458728B2 (ja) * 1998-11-09 2003-10-20 富士通株式会社 構成部品データ管理装置および構成部品データ管理プログラムを格納したコンピュータ読み取り可能な記憶媒体
AU2001238541A1 (en) * 2000-02-17 2001-08-27 Interactive Video Technologies, Inc. Incremental bootstrap class loader
US6910045B2 (en) 2000-11-01 2005-06-21 Collegenet, Inc. Automatic data transmission in response to content of electronic forms satisfying criteria
US7302634B2 (en) 2001-03-14 2007-11-27 Microsoft Corporation Schema-based services for identity-based data access
US7024662B2 (en) 2001-03-14 2006-04-04 Microsoft Corporation Executing dynamically assigned functions while providing services
US6985958B2 (en) * 2001-03-14 2006-01-10 Microsoft Corporation Messaging infrastructure for identity-centric data access
US7284271B2 (en) 2001-03-14 2007-10-16 Microsoft Corporation Authorizing a requesting entity to operate upon data structures
US7539747B2 (en) 2001-03-14 2009-05-26 Microsoft Corporation Schema-based context service
US7788649B1 (en) * 2001-06-01 2010-08-31 Oracle International Corporation Method and software for processing server pages
US6954924B2 (en) * 2001-09-20 2005-10-11 International Business Machines Corporation System and method for employing externalized, dynamically configurable, cacheable trigger points
US7340495B2 (en) * 2001-10-29 2008-03-04 Intel Corporation Superior misaligned memory load and copy using merge hardware
US9886309B2 (en) 2002-06-28 2018-02-06 Microsoft Technology Licensing, Llc Identity-based distributed computing for device resources
US7305666B2 (en) * 2003-07-23 2007-12-04 Microsoft Corporation Description language for an extensible compiler and tools infrastructure
US7707566B2 (en) 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7559050B2 (en) * 2003-06-30 2009-07-07 Microsoft Corporation Generating software development tools via target architecture specification
US7120898B2 (en) 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US7086041B2 (en) * 2003-06-27 2006-08-01 Microsoft Corporation Extensible type system for representing and checking consistency of program components during the process of compilation
US7685581B2 (en) * 2003-06-27 2010-03-23 Microsoft Corporation Type system for representing and checking consistency of heterogeneous program components during the process of compilation
US7146606B2 (en) * 2003-06-26 2006-12-05 Microsoft Corporation General purpose intermediate representation of software for software development tools
US7788652B2 (en) * 2003-06-27 2010-08-31 Microsoft Corporation Representing type information in a compiler and programming tools framework
US20100192026A1 (en) * 2009-01-27 2010-07-29 Microsoft Corporation Implementations of program runtime checks
US8539452B2 (en) * 2009-05-05 2013-09-17 International Business Machines Corporation Virtual machine tool interface for tracking objects
US9830224B2 (en) * 2013-03-15 2017-11-28 Nvidia Corporation Selective fault stalling for a GPU memory pipeline in a unified virtual memory system

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3687124T2 (de) * 1986-02-06 1993-03-18 Mips Computer Systems Inc Funktionseinheit fuer rechner.
JPS63163930A (ja) * 1986-12-26 1988-07-07 Toshiba Corp アライメント補正方式
US5201043A (en) * 1989-04-05 1993-04-06 Intel Corporation System using both a supervisor level control bit and a user level control bit to enable/disable memory reference alignment checking
US5421016A (en) * 1991-12-12 1995-05-30 International Business Machines Corporation System and method for dynamically invoking object methods from an application designed for static method invocation
US5852731A (en) * 1995-06-05 1998-12-22 International Business Machines Corporation Computer program product for synchronizing static variable initialization and reference under a multi-threaded computer environment
US5771382A (en) * 1995-06-05 1998-06-23 International Business Machines Corporation System and method for synchronizing static variable initialization and reference under a multi-threaded computer environment
US5819252A (en) * 1996-04-10 1998-10-06 Digital Equipment Corporation Method and apparatus for handling and detecting an invalid use of a data structure
US5884083A (en) * 1996-09-20 1999-03-16 Royce; Robert Computer system to compile non-incremental computer source code to execute within an incremental type computer system
WO1998021651A1 (en) * 1996-11-14 1998-05-22 Alcatel Usa Sourcing, L.P. Generic software state machine and method of constructing dynamic objects for an application program
US6003038A (en) * 1997-03-31 1999-12-14 Sun Microsystems, Inc. Object-oriented processor architecture and operating method

Also Published As

Publication number Publication date
US6148302A (en) 2000-11-14
JP2000194558A (ja) 2000-07-14
DE69932964D1 (de) 2006-10-12
EP0939365A2 (de) 1999-09-01
EP0939365B1 (de) 2006-08-30
EP0939365A3 (de) 2001-08-29

Similar Documents

Publication Publication Date Title
DE69932964T2 (de) Verfahren, System und Rechnerprogrammprodukt zur Initialisierung einer Datenstruktur beim ersten Gebrauch
DE69814174T2 (de) Java laufzeitsystem mit veränderter sammlung von konstanten
DE3151745C2 (de)
DE69918334T2 (de) Erzeugung von kompilierten programmen für interpretative laufzeitumgebungen
DE60002295T2 (de) Aufwandslose ausnahmebehandlung
EP0502857B1 (de) Verfahren zur dynamischen bindung von definierbaren programmelementen eines interaktiven datenverarbeitungssystems
DE69924857T2 (de) Programm-kode-umwandlung
DE60006410T2 (de) Verfahren und system zum verteilen von objektorientierten rechnerprogrammen
DE69936162T2 (de) Verfahren und Gerät für ein objektorientiertes Unterbrechungssystem
DE4410060B4 (de) Übersetzungsvorrichtung zum Umsetzen einer virtuellen Speicheradresse in eine physikalische Speicheradresse
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
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE69724322T2 (de) Verfahren und Anordnung zum frühzeitigen Einfügen von Assemblercode zwecks Optimierung
DE69817333T2 (de) Verfahren und Vorrichtung zum Laden von Befehlskodes in einen Speicher und zum Verbinden dieser Befehlskodes
DE60028069T2 (de) Verfahren und vorrichtung zur kontexterhaltung unter ausführung von übersetzten befehlen
DE69932344T2 (de) Zugriff zu hierarchischem datenspeicher via sql-eingabe
DE69819686T2 (de) Objekt und verfahren zum bereitstellen eines effizienten mehrbenutzerzugriff auf verteilten betriebssystemkernkode durch instanzierung
DE19581873C2 (de) Prozessor zum Ausführen von Schiebeoperationen an gepackten Daten
DE2630323B2 (de) Datenspeichereinrichtung mit einem Hauptspeicher, einem Hilfsspeicher und einer Vorausschaulogik
DE69818103T2 (de) Anrufmechanismus für statisch und dynamisch verknüpfte funktionen in einer objektorientierten steuerung unter verwendung von heterogenen entwicklungsumgebungen
DE19959758A1 (de) Bestimmung der Art und der Genauigkeit von lokalen Variablen bei vorhandenen Subroutinen
DE3833933A1 (de) Informationsverarbeitungseinrichtung mit einer adressenerweiterungsfunktion
DE60103521T2 (de) Vorladen von klassen in einer datenverarbeitungseinrichtung ohne virtueller speicherverwalter
DE1952158A1 (de) Speicherschutzverfahren und Einrichtung zur Durchfuehrung dieses Verfahrens
DE102013200030B4 (de) Hash-basiertes verwalten von speicher-ids

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee