DE112013001711T5 - Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine - Google Patents

Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine Download PDF

Info

Publication number
DE112013001711T5
DE112013001711T5 DE112013001711.3T DE112013001711T DE112013001711T5 DE 112013001711 T5 DE112013001711 T5 DE 112013001711T5 DE 112013001711 T DE112013001711 T DE 112013001711T DE 112013001711 T5 DE112013001711 T5 DE 112013001711T5
Authority
DE
Germany
Prior art keywords
function
wildcard
called
computer
placeholder
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.)
Ceased
Application number
DE112013001711.3T
Other languages
English (en)
Inventor
c/o IBM Corporation Gschwind Michael Karl
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112013001711T5 publication Critical patent/DE112013001711T5/de
Ceased legal-status Critical Current

Links

Images

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
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/4482Procedural
    • G06F9/4484Executing subprograms

Abstract

Es wird eine Technik zum Erzeugen von Platzhaltern bereitgestellt. Eine Verarbeitungsschaltung empfängt einen Aufruf an eine aufgerufene Funktion. Die Verarbeitungsschaltung ruft eine aufgerufene Funktionseigenschaft der aufgerufenen Funktion ab. Die Verarbeitungsschaltung erzeugt auf der Grundlage der aufgerufenen Funktionseigenschaft einen Platzhalter für die aufgerufene Funktion.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Erfindung betrifft allgemein Laufzeitoptimierungen und insbesondere Optimieren von Unterroutine-Aufrufen für eine aufgerufene Unterroutine.
  • ZUGRUNDE LIEGENDE TECHNIK
  • In der Informatik stellt eine Unterroutine (auch als Prozedur, Funktion, Routine, Verfahren oder Unterprogramm bekannt) einen Abschnitt eines Codes innerhalb eines größeren Programms dar, das eine bestimmte Task ausführt und von dem übrigen Code relativ unabhängig ist. Wie die Bezeichnung „Unterprogramm” nahelegt, verhält sich eine Unterroutine im Wesentlichen genauso wie ein Computerprogramm, das als ein Schritt in einem größeren Programm oder einem anderen Unterprogramm verwendet wird. Eine Unterroutine ist oft so codiert, dass sie während einer einzigen Ausführung mehrmals und/oder von mehreren Orten aus, auch aus Unterroutinen heraus, gestartet („aufgerufen”) werden und dann nach dem „Aufruf” zur nächsten Anwendung zurück verzweigen (zurückkehren) kann, sobald die Task der Unterroutine ausgeführt ist.
  • In der Datenverarbeitung besteht ein Systemaufruf darin, dass ein Programm einen Dienst von einem aktiven Kern des Systems anfordert. Dazu können auf Hardware bezogene Dienste (z. B. Zugreifen auf die Festplatte), Erzeugen und Ausführen neuer Prozesse und Austauschen von Daten mit integrierten Diensten eines Kerns (wie beispielsweise Zeitplanung) gehören. Systemaufrufe stellen die Schnittstelle zwischen einem Prozess und dem Betriebssystem (z. B. dem Kern) bereit. Der Kern bildet die Hauptkomponente der meisten Computer-Betriebssysteme; er stellt eine Brücke zwischen Anwendungen und der aktuell auf der Hardwareebene ausgeführten Datenverarbeitung dar. Zu den Zuständigkeiten eines Kerns gehört ein Verwalten der Systemressourcen (der Datenübertragung zwischen Hardware- und Software-Komponenten). Als Grundbestandteil eines Betriebssystems kann ein Kern für gewöhnlich die unterste Abstraktionsebene für die Ressourcen (insbesondere Prozessoren und E/A-Einheiten) bereitstellen, die eine Anwendungssoftware zum Ausführen ihrer Funktion steuern muss. Der Kern stellt diese Fähigkeiten üblicherweise Anwendungsprozessen durch Datenübertragungsmechanismen zwischen Prozessen und durch Systemaufrufe zur Verfügung.
  • In einer Computer-Software beschreibt eine binäre Anwendungsschnittstelle (application binary interface, ABI) eine Schnittstelle der untersten Ebene zwischen einem Anwendungsprogramm und dem Betriebssystem oder zwischen dem Anwendungsprogramm und einer anderen Anwendung. Die ABI erfasst Eigenschaften wie Datentyp, Dateigröße und Ausrichtung der Anwendung; die Grundregeln für Aufrufe, die festlegen, wie Funktionsargumente übergeben und Rückgabewerte abgerufen werden; die Anzahl der Systemaufrufe und die Art und Weise, wie eine Anwendung Systemaufrufe an das Betriebssystem richten soll; und im Fall einer vollständigen Betriebssystem-ABI das binäre Format von Objektdateien, Programmbibliotheken und so weiter. Verschiedene ABIs (z. B. die Interactive Unix-ABI, die einer großen Vielfalt von Programmen die Ausführung auf einer Vielfalt von Unix- und Linux®-Varianten für die Intel x86-Architektur gestattet) lassen zu, dass eine ABI ohne Änderung auf einem anderen derartigen System ausgeführt werden kann, sofern die benötigten gemeinsam genutzten Bibliotheken vorhanden und ähnliche Vorbedingungen erfüllt sind.
  • Der Programmentwicklungszyklus eines typischen Anwendungsprogramms beinhaltet Schreiben von Quellcode, Compilieren des Quellcodes zu Objektdateien, Erstellen von gemeinsam genutzten Bibliotheken und Einbinden der Objektdateien in ein ausführbares Hauptprogramm. Weitere Vorbereitungsarbeiten, darunter Laden des ausführbaren Hauptprogramms und Laden der gemeinsam genutzten Bibliotheken zum Starten einer Anwendung, werden erledigt, bevor die Anwendung auf einer bestimmten Hardware-Plattform ausgeführt wird.
  • Der Compiler bearbeitet zu jedem Zeitpunkt nur eine einzige Quelldatei (Kompilierungseinheit), um Objektdateien zu erzeugen. Der Compiler erzeugt einen Objektcode, ohne die endgültige Adresse oder Verlagerung des Codes/der Daten zu kennen. Insbesondere erzeugt der Compiler einen Objektcode, der in einem TOC (table of contents, Inhaltsverzeichnis) auf variable Werte zugreift, ohne die endgültige Größe oder die relativen Adressen/Adressen verschiedener Datenabschnitte zu kennen. Platzhalter (stubs) für diese Daten werden in den Objektcode eingefügt und durch den Programmverbinder aktualisiert. Bei einem TOC handelt es sich um eine variable Adresszuordnungstabelle, die zum Beispiel in einer IBM® AIX®-Umgebung genutzt wird, um auf Programmvariablen in einer Weise zuzugreifen, die gemeinsam genutzte Bibliotheken unterstützt und vom Standort der Daten unabhängig ist. Eine ähnliche Struktur, die als globale Tabelle relativer Adressen (global offset table, GOT) bezeichnet wird, führt eine ähnliche Funktion (z. B. indirekter und dynamisch verlagerbarer Zugriff auf Variablen) in einer Linux®-Umgebung durch. Ein Unterschied zwischen einem TOC und einer GOT besteht darin, dass ein TOC aktuelle Daten enthalten kann, während eine GOT nur Adressen (Zeiger) auf Daten enthält. In der Linux® PowerPC®-64-Bit-Umgebung enthält der TOC den GOT-Abschnitt zuzüglich kleiner Datenvariablen.
  • Der Programmverbinder sammelt Objektdateien, erzeugt daraus ausführbare Programme/gemeinsam genutzte Objekte und weist dem Code/den Daten relative Adressen zu. Der Programmverbinder löst während der Programmentwicklung interne Bezüge auf, und während der Ladezeit werden externe Bezüge aufgelöst. Der Programmverbinder sammelt die TOC-Einträge von Objektdateien, weist relative TOC-Adressen zu und erzeugt den TOC-Abschnitt. Der Programmverbinder kennt die endgültige Größe des TOC, führt jedoch an den durch den Compiler erzeugten Zugriffscodesequenzen des TOC keine größeren Änderungen durch. Der Programmverbinder kennt die relativen Adressen für bestimmte Einträge von internen Bezügen des TOC, jedoch nicht die endgültigen aufgelösten Werte für die meisten Einträge von externen Bezügen des TOC. Die Einträge von externen Bezügen des TOC werden durch das Ladeprogramm/den dynamischen Programmverbinder aufgelöst.
  • In der Publikation „Power ISATM, Version 2.06 Revision B”, von IBM, erschienen am 23. Juli 2010, wird eine beispielhafte Architektur mit einem Befehlssatz (instruction set architecture, ISA) für einen Computer mit reduziertem Befehlssatz (reduced instruction set computer, RISC) beschrieben. Der Power ISA dient hierin zum Veranschaulichen beispielhafter Ausführungsformen. Die Erfindung ist jedoch nicht auf Power ISATM- oder RISC-Architekturen beschränkt. Einem Fachmann dürfte die Anwendung der Erfindung in einer Vielfalt von Architekturen ohne weiteres einsichtig sein.
  • In der Publikation „z/Architecture® Principles of Operation” SA22-7832-08, neunte Auflage (August 2010), von IBM wird eine beispielhafte Architektur mit einem Befehlssatz für einen Computer mit komplexem Befehlssatz (complex instruction set computer, CISC) beschrieben.
  • In der Publikation „64-bit PowerPC ELF Application Binary Interface Supplement 1.9” (2004), von IBM, wird eine 64-Bit-Ergänzung für die binäre Anwendungsschnittstelle ABI für ein ausführbares und Verknüpfungsformat für den PowerPC® (PowerPC® Executable and Linking Format, ELF) beschrieben.
  • In den Publikationen „Power Architecture® 32-bit Application Binary Interface Supplement 1.0 Linux” (19. April 2011) und „Power Architecture® 32-bit Application Binary Interface Supplement 1.0-Embedded” (10. April 2011) wird die 32-Bit-ABI beschrieben.
  • Heutzutage benötigen Aufrufe an externe Funktionen einen „Platzhalter”, um ausgeführt zu werden. Dieses Erzeugen von Platzhaltern ist bei Betriebssystemen üblich, die gemeinsam genutzte Bibliotheken unterstützen, das trifft sowohl auf firmeneigene Betriebssysteme wie beispielsweise z/OS® und AIX® (Advanced Interactive eXecutive) von IBM® oder Open-Source-Betriebssysteme wie beispielsweise Linux® zu. In AIX wird dieser Platzhalter als „glink” und in Linux® als „PLTstub” bezeichnet. Eigenschaften der Funktion, die verknüpft wird, sind während der Kompilierungszeit und während der statischen Verknüpfungszeit nicht bekannt, Compiler und statische Programmverbinder müssen einen „Worst-Case”-Platzhalter (Platzhalter für den ungünstigsten aller Fälle) erzeugen, der alle Funktionen bereitstellen kann, die ein Aufruf für eine externe Funktion jemals benötigen könnte, darunter zum Installieren einer Umgebung (d. h. Adressinitialisierung) und zum Ausführen eines „fernen” indirekten Registeraufrufs. Diese Eigenschaften sind während der Kompilierungszeit/während der statischen Verknüpfungszeit unbekannt, da die zu verknüpfende Funktion unbekannt ist.
  • IBM, AIX, PowerPC, Power ISA, z/OS, z/Architecture und Power Architecture sind Warenzeichen von International Business Machines Corporation, die weltweit in vielen Rechtssystemen geschützt sind. Linux ist ein eingetragenes Warenzeichen von Linus Torvalds in den Vereinigten Staaten von Amerika und/oder anderen Staaten.
  • Deshalb besteht ein Bedarf, das oben erwähnte technische Problem zu lösen.
  • KURZDARSTELLUNG
  • Ausführungsformen beinhalten ein Verfahren, ein System und ein Computerprogrammprodukt zum Erzeugen von Platzhaltern. Eine Verarbeitungsschaltung empfängt einen Aufruf an eine aufgerufene Funktion. Die Verarbeitungsschaltung ruft eine aufgerufene Funktionseigenschaft der aufgerufenen Funktion ab. Die Verarbeitungsschaltung erzeugt auf der Grundlage der aufgerufenen Funktionseigenschaft einen Platzhalter für die aufgerufene Funktion.
  • Weitere Merkmale und Vorteile werden durch die Techniken der vorliegenden Erfindung realisiert. Hierin werden andere Ausführungsformen und Aspekte der Erfindung detailliert beschrieben und als Bestandteil der beanspruchten Erfindung angesehen. Zum besseren Verständnis der Erfindung mit ihren Vorteilen und Merkmalen wird auf die Beschreibung und die Zeichnungen verwiesen.
  • Unter einem weiteren Aspekt stellt die vorliegende Erfindung ein computergestütztes Verfahren zum Erzeugen von Platzhaltern bereit, wobei das Verfahren aufweist: Empfangen eines Aufrufs an eine aufgerufene Funktion; Abrufen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die Verarbeitungseinheit; und Erzeugen eines Platzhalters für die aufgerufene Funktion durch die Verarbeitungseinheit auf der Grundlage der aufgerufenen Funktionseigenschaft.
  • Unter einem weiteren Aspekt stellt die vorliegende Erfindung ein Computersystem zum Erzeugen von Platzhaltern bereit, wobei das System aufweist: eine Verarbeitungsschaltung; einen funktionell mit der Verarbeitungsschaltung verbundenen Speicher; eine Auflösungsfunktion zum Auflösen eines Aufrufs an eine aufgerufene Funktion durch die Verarbeitungsschaltung; wobei die Auflösungsfunktion ferner dazu dient, ein Mittel zum Abrufen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die Verarbeitungsschaltung abzurufen; und wobei die Auflösungsfunktion ferner dazu dient, ein Mittel zum Erzeugen eines Platzhalters für die aufgerufene Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft durch die Verarbeitungsschaltung zu erzeugen.
  • Unter einem anderen Aspekt stellt die vorliegende Erfindung ein Computerprogrammprodukt zum Erzeugen von Platzhaltern bereit, wobei das Computerprogrammprodukt aufweist: ein materielles Speichermedium, das durch eine Verarbeitungsschaltung ausführbar ist und zum Speichern von Anweisungen zum Ausführen durch die Verarbeitungsschaltung dient, um ein Verfahren auszuführen, das aufweist: Empfangen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die Verarbeitungsschaltung; und Erzeugen eines Platzhalters der aufgerufenen Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft durch die vorliegende Erfindung.
  • Unter einem weiteren Aspekt stellt die vorliegende Erfindung ein Computersystem zum Erzeugen von Platzhaltern bereit, wobei das System aufweist: eine Verarbeitungsschaltung und einen funktionell mit der Verarbeitungsschaltung verbundenen Speicher, wobei das System zum Ausführen eines Verfahrens konfiguriert ist, das aufweist: Empfangen eines Aufrufs an eine aufgerufene Funktion durch die Verarbeitungsschaltung; Abrufen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die Verarbeitungsschaltung; und Erzeugen eines Platzhalters für die aufgerufene Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft durch die Verarbeitungsschaltung.
  • Unter einem weiteren Aspekt stellt die vorliegende Erfindung ein Computerprogrammprodukt zum Erzeugen von Platzhaltern bereit, wobei das Computerprogrammprodukt ein computerlesbares Speichermedium aufweist, das durch eine Verarbeitungsschaltung lesbar ist und in dem Anweisungen zum Ausführen durch die Verarbeitungsschaltung gespeichert sind, um ein Verfahren zum Ausführen der Schritte der Erfindung auszuführen. Unter einem weiteren Aspekt stellt die vorliegende Erfindung ein Computerprogramm bereit, das auf einem computerlesbaren Medium gespeichert und in den internen Speicher eines digitalen Computers ladbar ist und das Abschnitte eines Softwarecodes aufweist, die zum Ausführen der Schritte der Erfindung dienen, wenn das Programm auf einem Computer ausgeführt wird.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Die vorliegende Erfindung wird im Folgenden anhand eines Beispiels unter Bezugnahme auf die bevorzugten Ausführungsformen beschrieben, die in den folgenden Figuren veranschaulicht sind:
  • 1 ist ein Blockschaubild eines Computersystems nach dem Stand der Technik, in dem eine bevorzugte Ausführungsform der vorliegenden Erfindung umgesetzt werden kann;
  • 2 ist ein Blockschaubild, das ein Beispiel der Verarbeitung für einen Platzhalter nach dem Stand der Technik veranschaulicht und in dem eine bevorzugte Ausführungsform der vorliegenden Erfindung umgesetzt werden kann.
  • 3 ist ein Blockschaubild, das ein Beispiel einer weiteren Verarbeitung für einen Platzhalter nach dem Stand der Technik veranschaulicht und in dem eine bevorzugte Ausführungsform der vorliegenden Erfindung umgesetzt werden kann;
  • 4 ist ein Blockschaubild, das ein Erzeugen verschiedener neuer Platzhalter auf der Grundlage der Eigenschaften einer bestimmten aufgerufenen Funktion gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 5 ist ein Ablaufplan, der ein Verfahren zum Ermitteln von während der Laufzeit zu erzeugenden Platzhaltern gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 6 ist ein Blockschaubild, das ein weiteres Präzisieren des Erzeugens von Platzhaltern gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 7 ist ein Ablaufplan eines Verfahrens zum weiteren Anpassen des Erzeugens von Platzhaltern auf der Grundlage einer vorgegebenen Umgebung/Adressinitialisierung gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung;
  • 8 ist ein Blockschaubild, das weitere Abschnitte des Speichers mit einem separaten Platzhaltersegment zum Speichern erzeugter Platzhalter gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung veranschaulicht;
  • 9 ist ein Ablaufplan eines Verfahrens zum Prüfen, ob (zwei oder mehr) verschiedene Anwendungen doppelte Platzhalter erzeugt haben, und zum gemeinsamen Nutzen der jeweils privaten durch die Anwendungen gemäß einer bevorzugten Ausführungsform der vorliegende Erfindung;
  • 10 ist ein Ablaufplan eines Verfahrens zum Erzeugen von Platzhaltern auf der Grundlage von Eigenschaften der aufgerufenen Funktionen gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung;
  • 11 veranschaulicht ein Computerprogrammprodukt nach dem Stand der Technik, in dem eine bevorzugte Ausführungsform der vorliegenden Erfindung umgesetzt werden kann; und
  • 12 veranschaulicht ein Beispiel eines Computers mit Fähigkeiten nach dem Stand der Technik, in dem eine bevorzugte Ausführungsform der vorliegenden Erfindung umgesetzt werden kann.
  • DETAILLIERTE BESCHREIBUNG
  • Beispielhafte Ausführungsformen stellen einen Mechanismus für eine sichere Laufzeitoptimierung von Aufrufen an Unterroutinen in externen Modulen auf der Grundlage aufgerufener Funktionseigenschaften wie beispielsweise Architekturebenen, die Fähigkeit zum Aufrufen einer Unterroutine mit einer nahen Verzweigung (mit kurzer Verschiebung) und einen Standort einer Zielunterroutine in einem Modul bereit. Gemäß beispielhaften Ausführungsformen werden während der Laufzeit fallspezifische Platzhalter erzeugt, wenn eine Funktion erstmals als Teil der dynamischen Verknüpfungsfähigkeit aufgerufen wird. Der dynamische Programmverbinder untersucht die aufgerufene Funktion und erzeugt einen optimierten Platzhalter auf der Grundlage von Eigenschaften wie beispielsweise Aufrufe an lokale Module im Vergleich zu Aufrufen an externe Module, Aufrufe an nahe Module im Vergleich zu Aufrufen an ferne Module und die Notwendigkeit zum Konfigurieren einer Ausführungsumgebung (d. h. Initialisieren von Adressen) für die aufgerufene Funktion als Bestandteil des Platzhalters. Gemäß einer Implementierung werden Platzhalter als Modul des Betriebssystems erzeugt, um die Ausführungssicherheit zu gewährleisten. Gleichzeitig werden Platzhalter atomar (in kleinen Schritten) aktualisiert, um beim Ausführen von mehreren Threads die Sicherheit zu gewährleisten.
  • Sobald das Ziel (z. B. die aufgerufene Funktion) bekannt ist, kann gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung ein indirekter Registeraufruf durch einen PC-bezogenen „nahen” Sprung ersetzt werden, um eine falsche Sprungvorhersage und andere Probleme zu vermeiden. Desgleichen können, wenn ein neuer Code mit einer erweiterten Architektur aufgerufen wird, bestimmte Konfigurationen wie beispielsweise das Laden eines TOC-(Inhaltsverzeichnis)Zeigers vermieden werden, um die Definition einer erweiterten Architektur und ABI (binäre Anwendungsschnittstelle) zu nutzen. Diese Eigenschaften sind während der Kompilierungszeit und während der statischen Verknüpfungszeit unbekannt, da die zu verknüpfende Funktion unbekannt ist. ABI ist eine Beschreibung für eine spezielle Hardwareplattform in Kombination mit dem Betriebssystem. Dies bedeutet einen Schritt über die anwendungsprogrammierbare Schnittstelle (API) hinaus, die die Aufrufe von der Anwendung an das Betriebssystem definiert. Die ABI definiert die API und die Maschinensprache für eine bestimmte Familie von Zentraleinheiten (CPU).
  • 1 zeigt allgemein ein Blockschaubild eines Computersystems 100 gemäß einer Ausführungsform. Das Computersystem 100 enthält einen Prozessor 105, der auch als Zentraleinheit (CPU) bezeichnet wird. Der Prozessor 105 weist einen oder mehrere Prozessorkerne auf, und der Prozessorkern kann als Schaltlogik 110 bezeichnet werden. Der Prozessor 105 kann ein oder mehrere Register 115 enthalten. In einer Computerarchitektur handelt es sich bei einem Prozessorregister um einen kleinen Speicherbereich, der als Bestandteil einer CPU oder eines anderen digitalen Prozessors verfügbar ist, und Daten können vom Speicher 120 in das Register 115 geladen werden, um arithmetische Arbeitsschritte durch die Schaltlogik 110 auszuführen. Die Register 115 können einzeln als Register 1 (r1) bis Register N (rN) gekennzeichnet sein.
  • Der Speicher 120 kann eine oder mehrere Software-Anwendungen 114 mit einer Programmlogik zum Ausführen der verschiedenen hierin erörterten Operationen beinhalten. Der Speicher 120 kann ein Betriebssystem (OS) 125 als Betriebssystem zum Betreiben des Computersystems 100 beinhalten. Das Betriebssystem 125 kann einen dynamischen Programmverbinder 130 mit einem Ladeprogramm 132 und einer Auflösungsfunktion 134 beinhalten. Der dynamische Programmverbinder 130 ist Bestandteil des Betriebssystems 125, das (über das Ladeprogramm 132) das Betriebssystem 125 lädt und (über die Auflösungsfunktion 134) gemeinsam genutzte Bibliotheken (z. B. die gemeinsam genutzte Bibliothek 150) für eine ausführbare Datei (z. B. Anweisungen z. B. der Software-Anwendung 114) verknüpft, wenn die ausführbare Funktion ausgeführt wird. Durch das spezielle Betriebssystem und das Format der ausführbaren Datei steht fest, wie der dynamische Programmverbinder funktioniert und wie dieser implementiert wird. Als Verknüpfen wird oft ein Prozess bezeichnet, der während der Kompilierungszeit der ausführbaren Datei (durch den Compiler 140) ausgeführt wird, während es sich bei einem dynamischen Programmverbinder in Wirklichkeit um ein spezielles Ladeprogramm handelt, das externe gemeinsam genutzte Bibliotheken in einen gerade ausgeführten Prozess lädt und diese gemeinsam genutzten Bibliotheken dann in den gerade ausgeführten Prozess des Prozessors 105 einbindet.
  • 2 ist ein Blockschaubild 200, das eine beispielhafte Verarbeitung unter Verwendung eines Platzhalters nach dem Stand der Technik veranschaulicht. Bei einem Platzhalter handelt es sich um eine kleine Programmroutine, die stellvertretend für ein größeres Programm steht, das möglicherweise später geladen werden soll oder über Fernzugriff erreichbar ist. Ein Platzhalter kann aus einer Reihe verschiedener Gründe verwendet werden. Zum Beispiel handelt es sich bei einem Verfahrensplatzhalter oder einfach Platzhalter in der Softwareentwicklung um einen Codeabschnitt, der stellvertretend für eine andere Programmierfunktionalität (z. B. eine aufgerufene Funktion) steht. Ein Platzhalter kann das Verhalten von realem Code (beispielsweise eine Prozedur auf einer fernen Maschine) simulieren oder vorübergehend einen noch zu entwickelnden Code ersetzen.
  • In 2 wird davon ausgegangen, dass ein Codeabschnitt 205 Bestandteil der Softwareanwendung 114 ist. Während der Kompilierungszeit verarbeitet der Compiler 140 die Funktion f(), die die Funktion g() aufruft. Da die Funktion g() in dem Codeabschnitt 205 enthalten ist, erzeugt der Compiler 140 die Anweisungen 210, die für eine Verzweigungsverknüpfung zur Funktion g() dienen, indem er die Nulloperationen 210 ausführt. Die während der Kompilierungszeit durch den Compiler 140 erzeugten Anweisungen 210 weisen (zunächst) die Auflösungsfunktion 134 an, die aufgerufene Funktion g() (die nicht in dem Codeabschnitt 205 der Softwareanwendung 114 enthalten war) unter Verwendung eines Platzhalters 215 aufzulösen. Der Platzhalter 215 und die Ladeanweisung 212 werden durch den statischen Programmverbinder gemäß einer oder mehrerer Power® ABIs erzeugt. Während der Laufzeit, während der eine dynamische Verknüpfung erfolgt, wird die Auflösungsfunktion 134 (über eine Ladeanweisung 214) durch den Platzhalter 215 aufgerufen (wobei die Auflösungsfunktion 134 dem dynamischen Programmverbinder 130 entspricht), und der der Ladeanweisung 214 entsprechende Adresszeiger wird durch die Auflösungsfunktion 134 durch Beschreiben aktualisiert, um den Inhalt des entsprechenden Datenspeicherplatzes durch die Adresse der aufgelösten Funktion zu ersetzen (im vorliegenden Beispiel durch „g()”), um den Platzhalter 215 zu veranlassen, bei zukünftigen Aufrufen die Steuerung direkt an die Funktion „g()” zu übergeben. Die Auflösungsfunktion 134 führt eine Namensauflösung durch, um die Adresse der aufgerufenen Funktion ”g()” ausfindig zu machen, führt schließlich zu der aufgerufenen Funktion g(), die in der gemeinsam genutzten Bibliothek 150 in einem Adresszeiger gespeichert ist, der einer Ladeanweisung 214 entspricht. Die Auflösungsfunktion 134 muss zuerst eine Suche in den Tabellen 155 und 165 durchführen, um die richtige Funktion g() und die Adresse für die Funktion g() zu erhalten. Die Auflösungsfunktion 134 führt die sechs Anweisungen (bei denen es sich um die fünf Anweisungen in bestimmten Betriebssystemen handeln kann, die in dem Platzhalter 405 in 4 gezeigt sind) in dem Platzhalter 215 aus, um zu der aufgerufenen Funktion g() zu gelangen. Dann stellt die Auflösungsfunktion 134 dem Codeabschnitt 205 die Unterroutine für die aufgerufene Funktion g() zur Verfügung (Zeile 220). Bei nachfolgenden Ausführungen des Codeabschnitts 205 wird die Unterroutine für die aufgerufene Funktion g() verwendet, ohne dass die Auflösungsfunktion 134, wie in 3 gezeigt, für den Codeabschnitt 205 nach der Funktion g() suchen und diese ermitteln (auflösen) muss. Das Blockschaubild 300 zeigt, dass die Auflösungsfunktion 134, wenn der Prozessor 105 in späteren Fällen den Codeabschnitt 205 verarbeitet, nicht aufgerufen werden muss. Vielmehr wird die Funktion g() im Platzhalter 215 unter Verwendung einer Anweisung „Verzweigung zum Zähler” (bctr) (Zeile 225) automatisch von der gemeinsam genutzten Bibliothek 150 abgerufen, da der dynamische Programmverbinder 130 die aufgerufene Funktion g() in der gemeinsam genutzten Bibliothek mit dem Codeabschnitt 205 verknüpft hat, der die Funktion g() aufruft.
  • Zunächst übergeben jedoch die fünf oder sechs Anweisungen des Platzhalters 215 die Steuerung an die Auflösungsfunktion 134. Die Anweisung in dem Platzhalter 215 kann beinhalten:
    std r2, 40(r1)
    Id r11, –32568(r2)
    mtctr r11
    Id r11, –32552(r2)
    Id r2, –32560(r2)
    bctr
  • Die Anweisungen in dem Platzhalter führen insbesondere die folgende Funktion gemäß der Power® ABI aus. Die erste Anweisung std r2, 40(r1) speichert das Adressierbarkeitsregister r2 für die Basisadresstabelle, damit es/sie nach der Rückkehr von der Funktion durch die Anweisung 212 wiederhergestellt werden kann. Die zweite Anweisung Id r11, –32568(r2) lädt die Zieladresse, zu der durch den Platzhalter verzweigt werden soll. Der Wert wird gemäß Linux PLT-Platzhaltern in der GOT gespeichert. Gemäß einer anderen Ausführungsform wird der Wert gemäß dem AIX®-glink-Platzhalter in einem Funktionsdeskriptor gespeichert. Der Wert wird zur Adresse der Auflösungsfunktion initialisiert, wenn das Ausführen beginnt, und durch die Auflösungsfunktion 134 zur Zielfunktion für den Platzhalter aktualisiert. Die dritte Anweisung mtctr r11 verschiebt die durch die Anweisung Id r11 geladene Adresse in das Zählregister. Die vierte Anweisung Id r11, –32552(r2) lädt ein Adressierbarkeitsregister, das in Verbindung mit Bibliotheken wie beispielsweise libffi oder statisch bereichsorientierten Sprachen verwendet werden kann. Diese Anweisung kann wahlweise ausgeführt werden. Die fünfte Anweisung Id r2, –32560(r2) lädt die GOT-Adresse (für Linux PLT-Platzhalter), die der Verzweigung zu der Funktion entspricht. Die sechste Anweisung bctr verzweigt zu der Adresse, die zuvor in das Zählregister geladen wurde.
  • Beispielhafte Ausführungsformen stellen die Auflösungsfunktion 134 bereit, die zum Erzeugen und Verwenden eines anderen Platzhalters mit weniger Anweisungen anstelle eines Platzhalters wie beispielsweise des Platzhalters 215 oder des Platzhalters 405 konfiguriert ist, ohne fünf oder sechs Anweisungen ausführen zu müssen.
  • Die 2 und 3 zeigten ein Beispiel eines PLT-Platzhalters, in diesem Fall des Platzhalters 215. Der PLT-Platzhalter beinhaltet einen Code (d. h. Anweisungen im Platzhalter 215) zum Verarbeiten von Worst-Case-Szenarios. Dazu gehört ein erneutes Laden des Basiszeigerkontexts für die TOC- oder GOT-Adressierung. Beim erneuten Laden des Basiszeigers für die TOC- oder GOT-Adressierung ist eine Adressinitialisierung erforderlich, wenn die Steuerung an ein Modul übergeben wird, von dem nicht bekannt ist, ob es dasselbe Modul ist.
  • PLT-Platzhalter erhalten auch eine Zieladresse vom TOC (bei dem es sich um eine Datenstruktur wie beispielsweise die Tabellen 155 und 165 handelt). Zu beachten ist, dass es zwei unterschiedliche Tabellen gibt, die TOC-(GOT-)Tabellen 159 und 169, und die Tabellen 155 und 165 der Auflösungsfunktion. Die TOC/GOT-Tabelle (beispielsweise 159 und 169) wird dazu verwendet, um nach Daten zu suchen. Die „Symboltabelle” (beispielsweise die Tabellen 155 und 165) wird durch die Auflösungsfunktion 134 verwendet, um nach Funktionen und deren Eigenschaften zu suchen. Hierfür ist eine aufwändige load/mtctr/bctr-Sequenz erforderlich, und (mitunter) lässt sich eine ctr-bezogene Verzweigung nur schwer vorhersagen.
  • 1 zeigt die gemeinsam genutzte Bibliothek 150, bei der es sich um das lokale Modul für die Aufruffunktion f() handelt. Ein Verweis auf das lokale Modul ist an die gemeinsam genutzte Bibliothek 150 gerichtet, die die Aufruffunktion enthält, bei der es sich um die Aufruffunktion f() handelt. Der Speicher 120 kann auch die gemeinsam genutzte Bibliothek 160 aufweisen, bei der es sich um ein externes (nicht lokales) Modul handelt, das sich in Bezug auf die Aufruffunktion f() außerhalb befindet. Die gemeinsam genutzte Bibliothek 160 (das externe Modul) 160 weist eine eigene Tabelle 155 ebenso auf wie die gemeinsam genutzte Bibliothek (das lokale Modul) 150 ihre Tabelle 155. Jede Tabelle 155 (für die gemeinsam genutzte Bibliothek 150) und Tabelle 165 (für die gemeinsam genutzte Bibliothek 160) enthält entsprechende Eigenschaften 157 beziehungsweise 167 für jede ihrer Funktionen. Die gemeinsam genutzte Bibliothek 150 weist ihre Tabelle TOC/GOT 159 und die gemeinsam genutzte Bibliothek 160 ihre Tabelle TOC/GOT 169 in einer Power®-Architektur auf, die Adressen und Daten enthält, wie in den Publikationen „64-bit PowerPC ELF Application Binary Interface Supplement 1.9” (2004), „Power Architecture® 32-bit Application Binary Interface Supplement 1.0 Linux®” (19. April 2011) und „Power Architecture® 32-bit Application Binary Interface Supplement 1.0-Embedded” (19. April 2011) erörtert wurde.
  • Die hierin erörterte Auflösungsfunktion 134 ist so konfiguriert, dass sie Entscheidungen zum Erzeugen neuer Platzhalter z. B. auf der Grundlage der Tatsache fällt, ob die aufgerufene Funktion g() zusammen mit der aufgerufenen Funktion f() in der lokalen gemeinsam genutzten Bibliothek 150 enthalten ist und/oder ob die aufgerufene Funktion in der gemeinsam genutzten Bibliothek (dem externen Modul) 160 enthalten ist, die sich in Bezug auf das lokale Modul (d. h. die gemeinsam genutzte Bibliothek 150) der Aufruffunktion f() befindet.
  • Gemäß Ausführungsformen ist der dynamische Programmverbinder 130 (insbesondere die Auflösungsfunktion 134) so konfiguriert, dass er Laufzeitoptimierungen durchführt. 4 ist ein Blockschaubild 400 der Auflösungsfunktion 134 (die auf dem Prozessor 105 ausgeführt wird) zum Erzeugen verschiedener neuer Platzhalter auf der Grundlage der Eigenschaften (z. B. der Eigenschaften 157 und/oder 167) der betreffenden Funktion wie beispielsweise der Funktion g(), die gemäß einer Ausführungsform aufgerufen wird.
  • Mittels der Auflösungsfunktion 134 muss ermittelt werden, ob die Eigenschaften jeder einzelnen Funktion (darunter der Funktion g()) in der gemeinsam genutzten Bibliothek 150 mit ihren Tabellen 155 und 159 oder in der externen gemeinsam genutzten Bibliothek 160 mit ihren Tabellen 165 und 169 gespeichert sind. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie die Eigenschaften für eine aufgerufene Funktion g() ausfindig macht und liest, wenn die Funktion (wie beispielsweise die Funktion g()) in einem Codeabschnitt (beispielsweise dem Codeabschnitt 205) erkannt wird. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie auf der Grundlage der individuellen Eigenschaften 157 der aufgerufenen Funktion einen neuen Platzhalter erzeugt, anstatt automatisch den Platzhalter 215 in Verbindung mit Funktionsaufrufen vom Code 205 an die Funktion g() zu verwenden, der in 4 als Platzhalter 405 mit nur fünf Anweisungen gezeigt ist.
  • Um die Beschreibung abzukürzen, wird davon ausgegangen, dass der Codeabschnitt 205 zusammen mit dem Aufruf an die Auflösungsfunktion 134 (z. B. durch die Anweisungen 210 und 212) in 4 enthalten ist. Die Auflösungsfunktion 134 konfiguriert nicht automatisch den Code 205 zum Ausführen des Platzhalters 405, der nunmehr mit fünf Anweisungen (vormals der Platzhalter 215 mit sechs Anweisungen in den 2 und 3) zum Aufrufen einer anderen Funktion wie beispielsweise der Funktion g() gezeigt ist. Im Interesse der kürzeren Beschreibung werden in 4 einige wenige beispielhafte Szenarios erörtert, jedoch ist klar, dass auch andere Szenarios infrage kommen. Gemäß der Erörterung in 2 wird davon ausgegangen, dass die Auflösungsfunktion 134 beauftragt/aufgerufen wird, um die Funktion g() aufzulösen, die in dem Codeabschnitt 205 der Softwareanwendung 114 nicht enthalten war.
  • In dem ersten Szenario sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zusammen mit den bestimmten Eigenschaften 157 der Funktion g() zu finden. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie die Eigenschaften 157 für die Funktion g() liest, und die Auflösungsfunktion 134 stellt fest, dass das Symbol (d. h. die Funktion g()) in der gemeinsam genutzten Bibliothek 150 lokal aufgelöst werden kann. Zum Beispiel stellt die Auflösungsfunktion 134 fest, dass die aufrufende Funktion f() und die aufgerufene Funktion g() in demselben lokalen Modul enthalten sind, bei dem es sich um dieselbe lokale gemeinsam genutzte Bibliothek 150 handelt. Demgemäß ist die Auflösungsfunktion 134 mit einer Logik zum Erzeugen eines Platzhalters 410 konfiguriert, der eine Verzweigung zu einer lokalen Funktion g() in der gemeinsam genutzten Bibliothek 150 (d. h. dem lokalen Modul) darstellt. Hierbei handelt es sich um eine direkte Verzweigung in dem Platzhalter 410, und die Auflösungsfunktion 134 ist so konfiguriert, dass sie die einzige Anweisung in dem Platzhalter 410 anstelle des allgemeineren Platzhalters 405 ausführt (der mit fünf Anweisungen für ein Worst-Case-Szenario ausgestattet ist. Demgemäß gibt die Auflösungsfunktion 134 die Unterroutine für die Funktion g() gemäß der Erörterung in den 2 und 3 zurück, um die Funktion g() ohne Verwendung eines allgemeineren Platzhalters 215 oder 405 direkt aufzurufen.
  • In dem zweiten Szenario sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zu finden, erkennt jedoch, dass die Funktion g() nicht in der gemeinsam genutzten Bibliothek 150 enthalten ist. Demgemäß sucht die Auflösungsfunktion 134 in der Tabelle 165 nach der Funktion g(), um den Namen der Funktion g() zusammen mit den bestimmten Eigenschaften 167 der Funktion g() zu finden. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie die Eigenschaften 167 für die Funktion g() liest, und stellt fest, dass es sich bei der Funktion g() zwar um ein externes Symbol handelt, das sich nicht in dem lokalen Modul 150 (sondern z. B. in der nichtlokalen gemeinsam genutzten Bibliothek 160) befindet, dass die aufgerufene Funktion g() jedoch über eine Verzweigungsoperation (d. h. eine PC-bezogene Verzweigung) aufgrund der Eigenschaften 167 erreichbar ist. Zum Beispiel stellt die Auflösungsfunktion 134 fest, dass die gemeinsam genutzte Bibliothek 150 der aufrufenden Funktion f() und/oder die Auflösungsfunktion 134 (die von der gemeinsam genutzten Bibliothek 150 aus aufgerufen werden kann) sich nahe (d. h. in Bezug auf den PC) dem Standort der aufgerufenen Funktion g() befindet. Das bedeutet, dass der Adressstandort der aufgerufenen Funktion g() mit weniger als 64 Bits (beispielsweise eine Anzahl von Bits, die durch eine PC-bezogene Verzweigung unterstützt wird) als relative Adresse in Bezug auf den Standort der aufrufenden Funktion f() und/oder des Platzhalters 405 angegeben werden kann. Demgemäß erzeugt die Auflösungsfunktion 134 Anweisungen für den Platzhalter 415, der anstelle des Platzhalters 405 verwendet werden soll. Da das externe Symbol (Funktion g()) gemäß der Feststellung durch die Auflösungsfunktion 134 PC-bezogen ist, bedeutet dies, dass Verzweigungsanweisungen (des Platzhalters 415) eine relative Adresse/Distanz (in den Registern 115) von einem Speicherplatz zu einem anderen Speicherplatz im Speicher 120 angeben. Zum Beispiel kann der Platzhalter 415 eine relative Adresse der PC-bezogenen Verzweigung im Platzhalter 415 zum Standort der aufgerufenen Funktion g() angeben. Außerdem kann die Auflösungsfunktion 134 über den Platzhalter 415 r2 mit dem Basiszeiger der Adresstabelle (beispielsweise einer Tabelle GOT oder TOC 169) für das der Funktion g() entsprechende Modul von der nichtlokalen gemeinsam genutzten Bibliothek 160 laden.
  • In dem dritten Szenario sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zu finden, stellt jedoch fest, dass die Funktion g() nicht in der gemeinsam genutzten Bibliothek 150 enthalten ist. Die Auflösungsfunktion 134 kann die Eigenschaften 167 für die Funktion g() lesen und stellt fest, dass es sich bei der Funktion g() um ein externes Symbol handelt, das durch eine Verschiebung (eine relative Adresse, die für eine PC-bezogene Verzweigung verwendet wird) nicht erreichbar ist. Demgemäß führt die Auflösungsfunktion 134 dann die Anweisungen des Platzhalters 405 (auch als Platzhalter 420 gezeigt) für den Normalfall aus.
  • 5 ist ein Ablaufplan, der ein Verfahren 500 gemäß einer Ausführungsform der (auf dem Prozessor 105 ausgeführten) Auflösungsfunktion 134 zum Ermitteln von Platzhaltern veranschaulicht, die während der Laufzeit erzeugt werden sollen. Gemäß der Erörterung in den 2, 3 und 4 wird davon ausgegangen, dass die Auflösungsfunktion 134 aufgerufen worden ist, um eine aufgerufene Funktion g() (die eine beliebige aufgerufene Funktion darstellen kann) zu ermitteln und ausfindig zu machen. In einer Situation nach dem Stand der Technik würde die Auflösungsfunktion 134 so konfiguriert, dass sie in Verbindung mit Anweisungen im Platzhalter 215 oder 405 aktiv wird, ohne auf der Grundlage der bestimmten Eigenschaften der aufgerufenen Funktion einen neuen Platzhalter zu erzeugen.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 507 nach der in Block 505 aufgerufenen Funktion g() sucht und die Eigenschaften 157 (lokale gemeinsam genutzte Bibliothek 150) und/oder die Eigenschaften 167 (externe gemeinsam genutzte Bibliothek 160) für diese bestimmte Funktion g() liest. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 510 auf der Grundlage der für die Funktion g() gelesenen bestimmten Eigenschaften 157 und/oder 167 den Typ des aufgerufenen Moduls (z. B. lokale gemeinsam genutzte Bibliothek 150 oder externe gemeinsam genutzte Bibliothek 160) ermittelt. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 515 einen Platzhalter für das lokale Modul erzeugt, wenn die Auflösungsfunktion 134 feststellt, dass es sich bei dem Modultyp der Funktion g() um ein lokales Modul handelt (also um dasselbe Modul (d. h. die gemeinsam genutzte Bibliothek 150) wie für die aufrufende Funktion f()). Der Platzhalter 410 stellt ein Beispiel für einen durch die Auflösungsfunktion 134 erzeugten Platzhalter für das lokale Modul dar (wenn sowohl die aufgerufene als auch die aufrufende Funktion in der gemeinsam genutzten Bibliothek 150 enthalten sind).
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 520 ermittelt, ob die aufgerufene Funktion g() durch eine lokale Verzweigung (hier: eine PC-bezogene Verzweigung) erreichbar ist, wenn die Auflösungsfunktion 134 feststellt, dass es sich bei dem Modultyp der Funktion g() um ein externes Modul (d. h. das Modul (externe gemeinsam genutzte Bibliothek 160)) der aufgerufenen Funktion g() handelt, das von dem Modul (d. h. der lokalen gemeinsam genutzten Bibliothek 150) der aufrufenden Funktion f() verschieden ist.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 525 einen Platzhalter für ein externes Modul mit einer nahen (z. B. durch Verschiebung erreichbaren) Verzweigung erzeugt, wenn die Auflösungsfunktion 134 feststellt, dass die aufgerufene Funktion g() mit einer PC-bezogenen Verzweigung erreichbar ist. Bei dem Platzhalter 415 handelt es sich um ein Beispiel eines Platzhalters für ein externes Modul, das durch relatives Adressieren z. B. von der aufgerufenen Funktion f() und/oder dem Standort der Auflösungsfunktion 134 erreichbar ist.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 530 einen Platzhalter für ein externes Modul mit einer fernen (indirekten Register-) Verzweigung erzeugt, wenn die Auflösungsfunktion 134 feststellt, dass die aufgerufene Funktion g() mit einer PC-bezogenen Verzweigung (d. h. mit einer lokalen Verzweigung) nicht erreichbar ist. Ein Beispiel für diesen Platzhalter stellen die Platzhalter 215 und 405 dar.
  • Beispielhafte Ausführungsformen stellen auch ein Optimieren der Anforderungen an die Umgebungsinstallation für die aufgerufene Funktion bereit. Unter Installation der Umgebung ist zu verstehen, dass Adressen (durch die Auflösungsfunktion 134) initialisiert werden müssen. Zum Beispiel stellt das Laden der TOC-Basis oder des GOT-Zeigers (d. h. der zum Zugreifen auf die Tabellen 159 und/oder 169 verwendeten Adressen) ein Initialisieren von Adressen dar, die im Initialisieren der Adresse des Zeigers besteht. Das Initialisieren von Adressen bezieht sich auf den Vorgang des Ladens einer Adresse in ein Basisregister (oder die Register 115), das für das weitere Adressieren von Anweisungen oder Daten verwendet werden kann, beispielsweise für ein Laden der Basisadresse einer TOC-Struktur, einer GOT-Struktur oder einer anderen Basisadresse in ein Basisadressregister. Bei einigen ABIs muss die Umgebung vor dem Aufrufen einer Funktion installiert sein, was zu größerem Systemaufwand führt, wenn die Umgebung nicht verwendet wird, beispielsweise wenn auf eine globale Variable nicht zugegriffen (d. h. diese nicht benötigt) wird. Viele moderne Anwendungen weisen Kurzfunktionen auf, die keine Umgebung nutzen. Verbesserte Architekturen bieten die Fähigkeit, PC-bezogene Adressen zu nutzen, damit keine Umgebung installiert zu werden braucht. Gemäß einer Ausführungsform ist jeder Funktion eine Eigenschaft (von den Eigenschaften 157 und/oder 167) zugehörig, die angibt, ob eine Umgebung installiert werden muss. Diese Eigenschaft (der Eigenschaften 157 und/oder 167) kann als Verlagerungstyp gekennzeichnet sein, der durch die Auflösungsfunktion 134 gelesen wird. Außerdem kann die Auflösungsfunktion 134 diese Eigenschaft durch Abtasten des zu verknüpfenden Codes (z. B. der Funktion g()) ermitteln. Eine weitere Optimierung zeigt das Blockschaubild in 6, das eine weitere Verfeinerung des Erzeugens von Platzhaltern durch die Auflösungsfunktion 134 gemäß einer Ausführungsform bereitstellt.
  • In 4 wurde oben erörtert, dass die Auflösungsfunktion 134 aufgerufen worden ist, um während der Laufzeit einen Platzhalter für die aufgerufene Funktion g() zu erzeugen, die durch aufrufende Funktion f() aufgerufen wurde. 6 unterscheidet sich von 4 nur durch den neu hinzugefügten Platzhalter 605, der im Folgenden näher erörtert wird. In 6 ist die Auflösungsfunktion 134 so konfiguriert, dass sie in der Tabelle 155 (die der lokalen gemeinsam genutzten Bibliothek 150 entspricht) nach der aufgerufenen Funktion g() sucht und die der aufgerufenen Funktion g() entsprechenden Eigenschaften 157 findet. Auf der Grundlage der Eigenschaften 157 für die aufgerufene Funktion g() erzeugt die Auflösungsfunktion 134 ebenso wie in 4 den Platzhalter 410.
  • Bei einem weiteren Szenario sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zu finden, erkennt jedoch, dass die Funktion g() nicht in der gemeinsam genutzten Bibliothek 150 enthalten ist. Demgemäß sucht die Auflösungsfunktion 134 in der Tabelle 165 nach der Funktion g(), um den Namen der Funktion g() zusammen mit den bestimmten Eigenschaften 167 der Funktion g() zu finden. Die Auflösungsfunktion liest die Eigenschaften 167 für die aufgerufene Funktion g() und stellt fest, dass es sich bei der aufgerufenen Funktion g() um ein externes Symbol handelt (d. h. extern in Bezug auf das Modul der aufrufenden Funktion f(), für die die Umgebung nicht installiert zu werden braucht). Das heißt, für dieses externe Symbol ist kein Initialisieren der Adresse (aus der Tabelle 169) erforderlich. In diesem Fall (der von dem Platzhalter 415 verschieden ist) braucht die Adresse nicht initialisiert zu werden, und die beiden Anweisungen (std r2, 40(r1) und Id r2, –32560(r2)) brauchen nicht ausgeführt zu werden. Demgemäß ist die Auflösungsfunktion 134 so konfiguriert, dass sie den Platzhalter 605 erzeugt. Im Gegensatz zum Platzhalter 415 braucht der Platzhalter 605 das Register r2 nicht zu speichern und zu laden.
  • Dem Fachmann ist klar, dass die Ermittlung, ob ein Initialisieren der Adresse erforderlich ist, auf einer Reihe von Faktoren beruhen kann. Gemäß einer Ausführungsform sind Daten als Eigenschaft in den Tabellen 157 und 167 aufgezeichnet, z. B. als unterschiedliche Verlagerungstypen gemäß Verlagerungsdaten für externe Symbole gemäß einer ABI wie beispielsweise der durch Bezugnahme bereits hierin aufgenommenen Power® ABI der Power Architecture®, oder als explizite Eigenschaft in einer Tabelle gespeichert. Gemäß einem anderen Merkmal können unterschiedliche Namenskonventionen verwendet werden, indem z. B. alle Symbolnamen, für die kein Initialisieren der Adresse erforderlich ist, mit einem speziellen Symbol wie beispielsweise $ (Dollarzeichen) oder _ (Unterstrich) beginnen. Gemäß einer anderen Ausführungsform sind Symbole, für die ein Initialisieren der Adresse erforderlich ist, dementsprechend markiert. Gemäß noch einem weiteren Merkmal tastet eine Ausführungsform den Objektcode der aufgerufenen Funktion ab, um zu ermitteln, ob ein Initialisieren der Adresse erforderlich ist. Der Fachmann dürfte in der Lage sein, beim Umsetzen der hierin enthaltenen Lehren noch weitere Mittel zum Übermitteln solcher Daten an eine Auflösungsfunktion ausfindig zu machen.
  • Bei einem weiteren Szenario sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zu finden, erkennt jedoch, dass die Funktion g() nicht in der gemeinsam genutzten Bibliothek 150 enthalten ist. Demgemäß sucht die Auflösungsfunktion 134 in der Tabelle 165 nach der Funktion g(), um den Namen der Funktion g() zusammen mit den bestimmten Eigenschaften 167 der Funktion g() zu finden. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie die Eigenschaften 167 für die Funktion g() liest, und stellt fest, dass es sich bei der Funktion g() zwar um ein externes Symbol handelt, das nicht in dem lokalen Modul 150 (sondern z. B. in der nicht lokalen gemeinsam genutzten Bibliothek 160) enthalten ist, dass die aufgerufene Funktion g() jedoch auf der Grundlage der Eigenschaften 167 über eine Verzweigungsverschiebung (d. h. eine PC-bezogene Verzweigung) erreichbar ist. Zum Beispiel stellt die Auflösungsfunktion 134 fest, dass sich die gemeinsam genutzte Bibliothek 150 der aufrufenden Funktion f() und/oder die Auflösungsfunktion 134 (die von der gemeinsam genutzten Bibliothek 150 aufgerufen werden kann) nahe dem Standort der aufgerufenen Funktion g() (d. h. PC-bezogen) befindet. Das bedeutet, dass der Standort der Adresse der aufgerufenen Funktion g() mit weniger als 64 Bits (beispielsweise eine Anzahl von Bits, die durch eine PC-bezogene Verzweigung unterstützt werden) als relative Adresse in Bezug auf den Standort der aufrufenden Funktion f() und/oder des Platzhalters 405 angegeben werden kann. Die Auflösungsfunktion 134 stellt auch fest, dass ein Initialisieren der Adresse erforderlich ist. Demgemäß erzeugt die Auflösungsfunktion 134 Anweisungen für den Platzhalter 415, die anstelle des Platzhalters 405 verwendet werden sollen. Da die Auflösungsfunktion 134 festgestellt hat, dass das externe Symbol (Funktion g()) PC-bezogen ist, bedeutet dies, dass Verzweigungsanweisungen (des Platzhalters 415) einen relative Adresse/Distanz (in den Registern 115) von einem Speicherplatz zu einem anderen Speicherplatz im Speicher 120 angeben. Zum Beispiel kann der Platzhalter 415 eine relative Adresse von der PC-bezogenen Verzweigung im Platzhalter 415 zu dem Standort der aufgerufenen Funktion g() angeben. Außerdem speichert die Auflösungsfunktion 134 über den Platzhalter 415 einen früheren Adresszeiger vom Register r2 in den Speicher und lädt in das Register r2 den Basiszeiger der Adresstabelle (beispielsweise einer GOT oder einem TOC) für das der Funktion g() entsprechende Modul aus der nichtlokalen gemeinsam genutzten Bibliothek 160.
  • Bei noch weiteren (nicht gezeigten) Szenarios sucht die Auflösungsfunktion 134 in der Tabelle 155 nach der Funktion g(), um den Namen der Funktion g() zu finden, erkennt jedoch, dass die Funktion g() nicht in der gemeinsam genutzten Bibliothek 150 enthalten ist. Die Auflösungsfunktion 134 kann die Eigenschaften 167 für die Funktion g() lesen und stellt fest, dass es sich bei der Funktion g() um ein externes Symbol handelt, das durch Verlagerung (durch eine relative Adresse, die für eine PC-bezogene Verzweigung verwendet wird) nicht erreichbar ist. Demgemäß führt die Auflösungsfunktion 134 die Anweisungen des Platzhalters 405 für den Normalfall aus. Bei noch weiteren Szenarios kann eine Auflösungsfunktion gemäß hierin enthaltenen Lehren einen Platzhalter unter Verwendung ferner indirekter Registerverzweigungen und ohne Laden des Basiszeigers der Adresstabelle (GOT/TOC) erzeugen und kann Platzhalter auf der Grundlage von Kombinationen hierin erörterter Eigenschaften und/oder auf der Grundlage anderer Eigenschaften erzeugen.
  • 7 ist ein Ablaufplan eines Verfahrens 700 (wobei die Auflösungsfunktion 134 auf dem Prozessor 105 ausgeführt wird), welches das Verfahren 500 auf der Grundlage der Installation einer Umgebung/einer Initialisierung der Adresse gemäß einer Ausführungsform weiter anpasst. 7 entspricht dem Blockschaubild 600 in 6 (die die 4 erweitert und optimiert).
  • Die Auflösungsfunktion 134 ermittelt während der Laufzeit einen oder mehrere Platzhalter. Wie oben wird davon ausgegangen, dass die Auflösungsfunktion 134 aufgerufen worden ist, um eine aufgerufene Funktion g() (die eine beliebige aufgerufene Funktion darstellen kann) zu ermitteln und ausfindig zu machen. Nach dem Stand der Technik würde die Auflösungsfunktion 134 den Anweisungen im Platzhalter 215 oder 405 folgen, ohne auf der Grundlage der bestimmten Eigenschaften der aufgerufenen Funktion einen neuen Platzhalter zu erzeugen.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 505 (in den Tabellen 155 und/oder 165) nach der aufgerufenen Funktion g() sucht und in Block 507 die Eigenschaften 157 und/oder 167 für diese bestimmte Funktion g() liest. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie auf der Grundlage des Lesens der bestimmten Eigenschaften 157 und/oder 167 für die Funktion g() in Block 510 den Typ des aufgerufenen Moduls (lokal oder nichtlokal) ermittelt. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 515 einen Platzhalter für das lokale Modul erzeugt, wenn sie feststellt, dass es sich bei dem Typ des Moduls der aufgerufenen Funktion g() um ein lokales Modul handelt (das sich in derselben gemeinsam genutzten Bibliothek 150 wie die aufrufende Funktion f() befindet). Das liegt daran, dass keine Umgebung installiert zu werden braucht, und der Platzhalter 410 stellt ein Beispiel für einen durch die Auflösungsfunktion 134 erzeugten Platzhalter für ein lokales Modul dar.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 705 ermittelt, ob der TOC-Basiszugriff (d. h. ein Initialisieren der Adresse) für die aufgerufene Funktion g() erforderlich ist, wenn die Auflösungsfunktion 134 feststellt, dass es sich bei dem Typ des Moduls der Funktion g() um ein externes Modul handelt (d. h., die gemeinsam genutzte Bibliothek 160 der aufgerufenen Funktion g() ist von der gemeinsam genutzten Bibliothek 150 der aufrufenden Funktion f() verschieden). Wenn die Auflösungsfunktion 134 feststellt, dass für die aufgerufene Funktion g() ein Initialisieren der Adresse erforderlich ist, erzeugt die Auflösungsfunktion 134 in Block 715 den Platzhalter für das externe Modul mit Initialisieren der TOC-Umgebung. Dadurch wird der Platzhalter 415 erzeugt. Dem Fachmann ist klar, dass das Verfahren 700 ferner mit den Lehren des Verfahrens 500 betrieben werden kann, indem Block 715 in einen Test 520 überführt, ein Block mit Adressinitialisierung erzeugt und mindestens eine lokale PC-bezogene und eine ferne indirekte Registerverzweigung verwendet wird.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 710 einen Platzhalter für das externe Modul ohne Initialisieren der TOC-Umgebung erzeugt, wenn die Auflösungsfunktion 134 feststellt, dass kein TOC-Basiszugriff (d. h. Initialisieren der Adresse) erforderlich ist. Demgemäß wird der Platzhalter 605 mit einer einzigen Anweisung erzeugt, die kein Initialisieren der Umgebung (d. h. kein Initialisieren der Adresse der Tabellen 159 und/oder 169) erfordert, wenn eine lokale PC-bezogene Verzweigung verwendet wird. Dem Fachmann ist klar, dass das Verfahren 700 weiterhin mit den Lehren des Verfahrens 500 betrieben werden kann, indem Block 710 in einen Test 520 überführt, ein Block ohne Adressinitialisierung erzeugt und mindestens eine lokale PC-bezogene und eine ferne indirekte Registerverzweigung verwendet wird.
  • Das Ermitteln und Erzeugen von Platzhaltern durch die Auflösungsfunktion 134 auf der Grundlage von Eigenschaften der aufgerufenen Funktion können durch viele weitere Merkmale ergänzt werden, wobei Eigenschaften von den Eigenschaften 157 und/oder 167 oder von anderen Mitteln zum Ermitteln von Eigenschaften gemäß den vorliegenden Lehren abgeleitet werden können, darunter, ohne darauf beschränkt zu sein, Namenskonventionen, Codeanalyse und so weiter. Für das hierin bereitgestellte dynamische Erzeugen von Code durch die Auflösungsfunktion 134 ist ein Schreiben von Code (d. h. Platzhaltern) während der Laufzeit erforderlich. Zur Gewährleistung der Sicherheit kann die Auflösungsfunktion 134 Daten mit einem Kern 170 des Betriebssystems (OS) austauschen, um Platzhalter als vertrauenswürdige Operation zu erzeugen und/oder zu aktualisieren. Demgemäß kann durch den OS-Kern 170 jede beliebige Operation mit Berechtigung durch die Auflösungsfunktion 134 ausgeführt werden.
  • Um Versuche zu verhindern, dass ein und derselbe Platzhalter durch verschiedene Anwendungen und/oder verschiedene Threads aktualisiert wird, wird ein gleichzeitiges Aktualisieren eines Platzhalters in einer Multithread-Umgebung (z. B. mit mehreren Prozessorschaltlogiken (Kernen) 110 und/oder einem oder mehreren gleichzeitig ausgeführten Threads) durchgeführt, sodass für einen anderen gleichzeitig ausgeführten Thread entweder ein aktualisierter Platzhalter oder ein nicht aktualisierter Platzhalter sichtbar ist. Gemäß einer Ausführungsform wird dies dadurch erreicht, dass die Zuordnung der Seite, in der der Platzhalter gespeichert ist, aufgehoben und dann der Code (d. h. der Platzhalter) aktualisiert wird, wenn die Seite für Anwendungen wie beispielsweise die Softwareanwendung 114 und Threads nicht sichtbar ist. Unter einem Aufheben der Zuordnung ist zu verstehen, dass die Auflösungsfunktion 134 die Seite des Platzhalters vorübergehend unerreichbar macht, vorzugsweise in Verbindung mit einem OS-Kern 170, während der Platzhalter erzeugt und/oder aktualisiert wird.
  • Außerdem kann ein gleichzeitiges Aktualisieren z. B. durch atomares Speichern erfolgen, indem ein Platzhalter durch Ausführen eines Speicherschrittes ersetzt wird, durch den der gerade ausgeführte Code des Speichers aktualisiert wird (z. B. kann die Auflösungsfunktion 134 einen langen allgemeinen Platzhalter durch eine einfache Verzweigung am Anfang des Platzhalters ersetzen). Die Auflösungsfunktion 134 kann auch einen Transaktionsspeicher zum gleichzeitigen Aktualisieren des gesamten Platzhalters verwenden. Dem Fachmann sind auch andere Mittel zum Durchführen von Aktualisierungen von einem ersten Platzhalter in einen zweiten Platzhalter bekannt, indem eine Vielfalt von Mitteln zum Aktualisieren von Platzhaltern gemäß der vorliegenden Offenbarung verwendet werden.
  • Unter Bezugnahme auf die 8 und 9 wird erörtert, dass der Auflösungsfunktion 134 eine weitere Optimierung hinzugefügt werden kann. 8 ist ein Blockschaubild, das weitere Abschnitte des Speichers 120 mit einem separaten Platzhaltersegment 805 zum Speichern der erzeugten Platzhalter gemäß einer Ausführungsform veranschaulicht. Zum Beispiel können alle durch die Auflösungsfunktion 134 erzeugten Platzhalter in dem separaten Platzhaltersegment 805, das mehrere Platzhalterseiten 810 aufweist, oder in einem separaten Segment gesammelt/gespeichert werden, das jeweils einem Modul entspricht. Bei dem oder den Platzhaltersegmenten 805 handelt es sich um vordefinierte Adressspeicherplätze einzelner Platzhalterseiten 810 in dem Speicher 120, und das/die Platzhaltersegmente kann/können durch die Auflösungsfunktion 134 verändert werden. Die Seiten sind so konfiguriert, dass sie einen Code (d. h. Anweisungen) eines Platzhalters für jeden Prozess (z. B. eine aufgerufene Funktion) durch Erstellen einer Kopie beim Schreiben aktualisieren. Außerdem kann das Betriebssystem 125 (z. B. die Auflösungsfunktion 134) einen Deduplizierungsprozess für Platzhalterseiten 810 umsetzen, welche die Seiten P1 bis PN aufweisen. Mittels des Deduplizierungsprozesses können Platzhalterseiten 810 ausfindig gemacht werden, die im Speicher 120 gemeinsam genutzt werden können (z. B. ohne dass mehrere Kopien von Platzhalterseiten, die als Reaktion auf das Aktualisieren von Platzhaltern durch die Auflösungsfunktion 134 durch Erstellen von Kopien beim Schreiben erzeugt wurden, sobald Platzhalter erzeugt worden sind), wenn es dieselbe Platzhalterseite 810 bereits gibt. Zum Beispiel ist der Deduplizierungsprozess so konfiguriert, dass er erzeugte Platzhalterseiten für jeden Prozess mit einer entsprechenden Platzhalterseite eines anderen Prozesses vergleicht und dieselbe/n Platzhalterseite/n für zwei oder mehr Prozesse gemeinsam nutzt. Zu beachten ist, dass die anderen in 1 erörterten Elemente des Speichers 120 aus Platzgründen nicht dargestellt sind.
  • 9 ist ein Ablaufplan eines Verfahrens 900 gemäß einer Ausführungsform mit einem Deduplizierungsprozess (der z. B. durch den OS-Kern 170 umgesetzt wird), mittels dessen geprüft wird, ob (zwei oder mehr) verschiedene Anwendungen (wie beispielsweise die Softwareanwendung 114) doppelte Platzhalter erzeugt haben, und der Deduplizierungsprozess (der z. B. durch den OS-Kern 170 umgesetzt wird) kann diese privaten Platzhalter für die Anwendungen gemeinsam nutzen. Ferner können mittels des Deduplizierungsprozesses (der z. B. als Teil des OS-Kerns 170 implementiert ist) doppelte Platzhalter entfernt werden.
  • Der Deduplizierungsprozess (der z. B. als Teil des OS-Kerns 170 umgesetzt wird) setzt das Verfahren 700 um. Das Verfahren 700 ist so konfiguriert, dass es in Block 905 eine Platzhalterseite (Speicherseite) auswählt, die durch Erstellen einer Kopie von Platzhaltern beim Schreiben erzeugt wurde. Bei dieser bestimmten Platzhalterseite kann es sich um die Platzhalterseite P1 handeln.
  • Das Verfahren 700 ist so konfiguriert, dass es in Block 910 die Platzhalterseite P1 mit anderen Seiten (der Platzhalterseiten 810) in dem Pool der beim Schreiben erstellten Kopien von Platzhaltern vergleicht. Das Verfahren 700 prüft, ob die Seite (z. B. die Platzhalterseite P1) dieselbe Speicherseite (z. B. dieselben Anweisungen für eine bestimmte aufgerufene Funktion g()) aufweist wie mindestens eine der anderen Platzhalterseiten P2 bis PN mindestens eines anderen Prozesses. Zum Beispiel kann die Speicherseite der Platzhalterseite P1 mit der Speicherseite der Platzhalterseite P7 verglichen werden. Wenn das Ergebnis der Frage nach Gleichheit Nein lautet, weist die Platzhalterseite P1 nicht dieselbe Speicherseite wie die Platzhalterseite P7 auf, und der Prozess wird mit Block 925 fortgesetzt. Wenn das Ergebnis der Frage nach Gleichheit Ja lautet, weist die Platzhalterseite P1 dieselbe Speicherseite wie die Platzhalterseite P7 auf, und die Auflösungsfunktion 134 verbindet (d. h. fügt zusammen) in Block 920 die Platzhalterseiten P1 und P7, verweist die entsprechenden Prozesse (z. B. derselben Softwareanwendung 114 oder von zwei verschiedenen Softwareanwendungen) auf das gemeinsam genutzte Platzhalter-Speicherabbild, das sich auf der Platzhalterseite P1 befinden kann, und konfiguriert für diese betreffenden Prozesse Kopieroperationen beim Schreiben.
  • Das Verfahren 700 ist so konfiguriert, dass es in Block 925 prüft, ob noch mehr Seiten mit der Platzhalterseite P1 verglichen werden müssen. Wenn dies der Fall ist (Ja), müssen noch mehr Platzhalterseiten 810 mit der Platzhalterseite P1 verglichen werden, und der Prozess kehrt zu Block 910 zurück. Wenn dies nicht der Fall ist (Nein), müssen keine weiteren Platzhalterseiten 810 mit der Platzhalterseite P1 verglichen werden, und das Verfahren 700 prüft in Block 930, ob die nächste Platzhalterseite, z. B. die Platzhalterseite P2, mit anderen Platzhalterseiten 810 verglichen werden muss. Wenn es eine nächste Platzhalterseite wie beispielsweise die Platzhalterseite P2 gibt, kehrt der Prozess zurück zu Block 905. Wenn alle Platzhalterseiten 810 (z. B. die Platzhalterseiten P1 bis PN) auf Duplikate durchsucht worden sind, ist der Prozess beendet.
  • Gemäß einer Ausführungsform kann die Anzahl der zu vergleichenden Seiten verringert werden, indem nur einander entsprechende Seiten miteinander verglichen werden, z. B. wenn die Seiten von einem gemeinsamen Modul, das in verschiedene Prozesse geladen wurde, von einer gemeinsamen Position in dem Platzhaltersegment eines gemeinsamen Moduls abgeleitet wurden und so weiter.
  • 10 ist ein Ablaufplan eines Verfahrens 1000 gemäß einer Ausführungsform zum Erzeugen von Platzhaltern durch die (auf dem Prozessor 105 ausgeführte) Auflösungsfunktion 134 auf der Grundlage von Eigenschaften der aufgerufenen Funktionen. Hierzu kann auf die 1 bis 9 Bezug genommen werden. Anhand verschiedener Beispiele wird die (auf dem Prozessor 105 ausgeführte) Auflösungsfunktion 134 beschrieben, die zur Erläuterung verschiedene Operationen ausführt. Es wird davon ausgegangen und ist klar, dass die Funktionen und Operationen der Auflösungsfunktion 134 durch den dynamischen Programmverbinder 130 und das Betriebssystem 125 (beispielsweise ein Dienst des Betriebssystems über den Kern 170) ausgeführt werden können.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 1005 einen Aufruf an eine aufgerufene Funktion (z. B. die aufgerufene Funktion g()) von einer aufrufenden Funktion (z. B. der aufrufenden Funktion f()) empfängt.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 1010 eine aufgerufene Funktionseigenschaft (z. B. die Eigenschaften 157 und/oder 167 der aufgerufenen Funktion g()) der aufgerufenen Funktion abruft.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie in Block 1015 einen Platzhalter erzeugt (wie beispielsweise die erzeugten Platzhalter, die in den 4, 5, 6 erörtert wurden) für die aufgerufene Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft (d. h. der Eigenschaften 157 und/oder 167 für die aufgerufene Funktion g()).
  • Ferner ist die Auflösungsfunktion 134 so konfiguriert, dass sie ermittelt, ob die aufgerufene Funktion g() und die aufrufende Funktion f() gemeinsam in einer gemeinsam genutzten Bibliothek 150 (bei der es sich um das lokale Modul handelt) enthalten sind. Außerdem ist die Auflösungsfunktion 134 so konfiguriert, dass sie ermittelt, ob die aufgerufene Funktion g() in einer anderen gemeinsam genutzten Bibliothek 260 enthalten ist, wobei sich die andere gemeinsam genutzte Bibliothek 160 außerhalb der gemeinsam genutzten Bibliothek 150 befindet.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie Anweisungen in dem Platzhalter in Abhängigkeit davon optimiert, ob die aufgerufene Funktion g() gemeinsam mit der aufrufenden Funktion f() in der gemeinsam genutzten Bibliothek 150 enthalten ist oder ob die aufgerufene Funktion g() in der anderen nichtlokalen gemeinsam genutzten Bibliothek 160 (d. h. in einem externen Modul) enthalten ist.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie Anweisungen in dem Platzhalter auf der Grundlage einer kurzen Aufrufdistanz optimiert (nachdem festgestellt wurde, dass die aufgerufene Funktion g() durch eine relative Speicheradresse/Verschiebung in einer Verzweigung erreichbar ist, z. B. in einem durch die aufrufende Funktion f() verwendeten Platzhalter (d. h., die aufgerufene Funktion g() in der gemeinsam genutzten Bibliothek 160 ist nicht weit von dem Standort (im Speicher 120) der Verzweigung entfernt, z. B. in einem durch die aufrufende Funktion f() in der gemeinsam genutzten Bibliothek 150 verwendeten Platzhalter). Die nahe Aufrufdistanz erfordert keine vollständige 64-Bit-Adresse, kann jedoch durch eine begrenzte Anzahl von Adressbits (z. B. 16 Bits) erreicht werden, die eine Nahdistanz anzeigen. Darüber hinaus ist die Auflösungsfunktion 134 so konfiguriert, dass sie auf der Grundlage einer fernen Aufrufdistanz den Platzhalter optimiert, nachdem festgestellt wurde, dass die aufgerufene Funktion g() mehr Adressbits benötigt als in der kurzen Aufrufdistanz bereitgestellt wurden. Für die ferne Aufrufdistanz werden alle 64 Adressbits benötigt.
  • Außerdem kann der Platzhalter durch einen Dienst des Betriebssystems über den Kern 170 erzeugt werden. Die Auflösungsfunktion 134 ist so konfiguriert, dass sie durch atomares Speichern aktualisiert, um einen aktualisierten Platzhalter zu erzeugen. Das atomare Aktualisieren zum Erzeugen des aktualisierten Platzhalters beinhaltet ein Aktualisieren des aktualisierten Platzhalters (d. h. ein Aktualisieren der Speicherseite), während die Zuordnung einer Speicherseite des Platzhalters (beispielsweise der Platzhalterseite P1) zu einem ausgeführten Adressraum eines Threads aufgehoben und ein atomares Speichern verwendet wird, um den aktualisierten Platzhalter in der Platzhalterseite P1 zu speichern.
  • Die Auflösungsfunktion 134 ist so konfiguriert, dass sie den Platzhalter in einem separaten Platzhaltersegment 805 mit einer Eigenschaft „Kopie beim Schreiben erstellen” zwischen mehreren Threads speichert, die eine gemeinsam genutzte Bibliothek 150/160 bearbeiten und mehrere Platzhalter (die z. B. in mehreren Platzhalter/Speicher-Seiten 910 gespeichert sind, miteinander verbindet/zusammenfügt, um Duplikate zu entfernen.
  • Gemäß der obigen Beschreibung können Ausführungsformen in der Form von computergestützten Prozessen und Vorrichtungen zum Umsetzen dieser Prozesse realisiert werden. Eine Ausführungsform kann ein Computerprogrammprodukt 110, das in 11 auf einen computerlesbaren/durch Computer nutzbaren Medium 1102 dargestellt ist, mit einer Computerprogrammcode-Logik 1104 beinhalten, deren Anweisungen in einem materiellen Medium als Herstellungsprodukt verkörpert sind. Als beispielhafte Herstellungsprodukte für das computerlesbare/durch Computer nutzbare Medium 1102 kommen infrage: Disketten, CD-ROMs, Festplatten, USB-(universal serial bus)Flashspeicher oder ein beliebiges anderes computerlesbares Speichermedium, wobei aus dem Computer eine Vorrichtung zum Umsetzen der Erfindung wird, wenn die Computerprogrammcode-Logik 1104 in einen Computer geladen und durch diesen ausgeführt wird. Für Ausführungsformen kommt eine Computerprogrammcode-Logik 1104 infrage, die in einem Speichermedium gespeichert ist, in einen Computer geladen und/oder durch diesen ausgeführt wird oder über ein bestimmtes Übertragungsmedium wie beispielsweise über elektrische Leitungen oder Kabel, Lichtwellenleiter oder über elektromagnetische Strahlung übertragen wird, wobei aus dem Computer eine Vorrichtung zum Umsetzen der Erfindung wird, wenn die Computerprogrammcode-Logik 1104 in einen Computer geladen und durch diesen ausgeführt wird. Wenn die Computerprogrammcode-Logik 1104 auf einem Universal-Mikroprozessor installiert ist, wird der Mikroprozessor durch diese so konfiguriert, dass spezielle Logikschaltungen erzeugt werden.
  • 12 veranschaulicht ein Beispiel eines Computers 1200 mit Fähigkeiten, die in beispielhaften Ausführungsformen verwendet werden können. Verschiedene hierin erörterte Verfahren, Prozeduren, Module, Ablaufpläne, Tools, Anwendungen, Schaltungen, Elemente und Techniken können auch die Fähigkeiten des Computers 120 beinhalten und/oder nutzen. Darüber hinaus kann der Computer 1200 dazu verwendet werden, Merkmale von hierin erörterten beispielhaften Ausführungsformen umzusetzen. Dem Fachmann ist bekannt, dass eine oder mehrere Fähigkeiten des Computers 120 genutzt werden können, um ein beliebiges hierin erörtertes Element in den 1 bis 11 zu realisieren, zu unterstützen oder eine Verbindung zu diesem herzustellen.
  • In Bezug auf die Hardwarearchitektur kann der Computer 1200 allgemein einen oder mehrere Prozessoren 1210, einen computerlesbaren Speicher 1220 und eine oder mehrere Eingabe- und/oder Ausgabeeinheiten (E/A) 1270 aufweisen, die zum Austauschen von Daten über eine (nicht gezeigte) lokale Schnittstelle miteinander verbunden sind. Bei der lokalen Schnittstelle kann es sich zum Beispiel, ohne darauf beschränkt zu sein, um einen oder mehrere in der Technik bekannte Busse oder andere leitungsgebundene oder drahtlose Verbindungen handeln. Die lokale Schnittstelle kann zusätzliche Elemente wie beispielsweise Steuereinheiten, Pufferspeicher (Cachespeicher), Treiber, Verstärker und Empfänger aufweisen, um Datenübertragungen zu ermöglichen. Ferner kann die lokale Schnittstelle Adresse-, Steuer- und/oder Datenverbindungen aufweisen, um geeignete Datenübertragungen zwischen den obigen Komponenten zu ermöglichen.
  • Bei dem Prozessor 1210 handelt es sich um eine Hardwareeinheit zum Ausführen einer Software, die in dem Speicher 1220 gespeichert sein kann. Bei dem Prozessor 1210 kann es sich im Grunde um einen beliebigen spezialisierten oder handelsüblichen Prozessor, eine Zentraleinheit (CPU), einen Datensignalprozessor (DSP) oder einen Zusatzprozessor von mehreren dem Computer 1200 zugehörigen Prozessoren handeln, und der Prozessor 1210 kann ein Mikroprozessor (in Form eines Mikrochips) auf Halbleiterbasis oder ein Makroprozessor sein.
  • Als computerlesbarer Speicher 1220 kommen ein beliebiges oder eine Kombination flüchtiger Speicherelemente infrage (z. B. ein Direktzugriffsspeicher (RAM) wie beispielsweise ein dynamischer Direktzugriffsspeicher (DRAM), ein statischer Direktzugriffsspeicher (SRAM) usw.) und nichtflüchtige Speicherelemente (z. B. ein ROM, ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM), ein elektronisch löschbarer programmierbarer Nur-Lese-Speicher (EEPROM), ein programmierbarer Nur-Lese-Speicher (PROM), ein Magnetband, ein Compact Disc-Nur-Lese-Speicher (CD-ROM), eine Speicherplatte, eine Diskette, eine Kassette oder dergleichen usw.). Darüber hinaus kann der Speicher 1220 elektronische, magnetische, optische und/oder andere Typen von Speichermedien beinhalten. Zu beachten ist, dass der Speicher 1220 eine verteilte Architektur aufweisen kann, in der verschiedene Komponenten weit voneinander entfernt sind, auf die der Prozessor 1210 jedoch zugreifen kann.
  • Die Software in dem computerlesbaren Speicher 1220 kann ein oder mehrere separate Programme beinhalten, die jeweils eine geordnete Reihenfolge ausführbarer Anweisungen zum Umsetzen von logischen Funktionen aufweisen. Die Software in dem Speicher 1220 beinhaltet ein geeignetes Betriebssystem (O/S) 1250, einen Compiler 1240, einen Quellcode 1230 und eine oder mehrere Anwendungen 1260 beispielhafter Ausführungsformen. Aus der Figur ist zu ersehen, dass die Anwendung 1260 zahlreiche Funktionskomponenten zum Umsetzen der Merkmale, Prozesse, Verfahren, Funktionen und Operationen der beispielhaften Ausführungsformen aufweist. Die Anwendung 1260 des Computers 1200 kann zahlreiche Anwendungen, Agenten, Softwarekomponenten, Module, Schnittstellen, Steuereinheiten usw. darstellen, die hierin erörtert wurden, jedoch ist die Anwendung 1260 nicht als Einschränkung zu verstehen.
  • Das Betriebssystem 1250 kann das Ausführen anderer Computerprogramme steuern und stellt eine Ablaufplanung, eine Eingabe-Ausgabe-Steuerung, eine Datei- und Datenverwaltung, eine Speicherverwaltung, ein Steuern der Datenübertragung und ähnliche Dienste bereit.
  • Die Anwendung(en) 1260 können eine serviceorientierte Architektur nutzen, bei der es sich um eine Gesamtheit von Diensten handeln kann, die Daten untereinander austauschen. Ferner ermöglicht die serviceorientierte Architektur zwei oder mehr Diensten, deren Aktivitäten (z. B. im gegenseitigen Auftrag) zu koordinieren und/oder auszuführen. Jede Interaktion zwischen Diensten kann eigenständig oder im lockeren Zusammenwirken erfolgen, sodass jede Interaktion von jeder anderen Interaktion unabhängig ist.
  • Ferner kann es sich bei der Anwendung 1260 um ein Quellprogramm, ein ausführbares Programm (Objektcode), ein Skript oder eine beliebige andere Einheit handeln, die einen Satz auszuführender Anweisungen aufweist. Wenn es sich um ein Quellprogramm handelt, wird das Programm für gewöhnlich durch einen Compiler (beispielsweise den Compiler 1240), einen Assembler, einen Interpreter oder dergleichen übersetzt, der unter Umständen in dem Speicher 1220 enthalten sein kann, um ordnungsgemäß mit dem O/S 1250 zusammenzuarbeiten. Darüber hinaus kann die Anwendung 1260 (a) in einer objektorientierten Programmiersprache, in der es Klassen von Daten und Verfahren gibt, oder (b) in einer prozeduralen Programmiersprache geschrieben sein, in der es Routinen, Unterroutinen und/oder Funktionen gibt.
  • Bei den E/A-Einheiten 1270 kann es sich um Eingabeeinheiten (oder Peripherieeinheiten) wie beispielsweise, ohne darauf beschränkt zu sein, eine Maus, eine Tastatur, einen Scanner, ein Mikrofon, eine Kamera usw. handeln. Außerdem kann es sich bei den E/A-Einheiten 1270 auch um Ausgabeeinheiten (oder Peripherieeinheiten) wie beispielsweise, ohne darauf beschränkt zu sein, einen Drucker, einen Bildschirm usw. handeln. Und schließlich kann es sich bei den E/A-Einheiten 1270 außerdem auch um Einheiten handeln, die sowohl Eingaben als auch Ausgaben vermitteln, darunter zum Beispiel, ohne darauf beschränkt zu sein, ein NIC (Netzschnittstellencontroller) oder ein Modulator/Demodulator (zum Zugreifen auf ferne Einheiten, andere Dateien, Einheiten, Systeme oder ein Netzwerk), ein Hochfrequenz-(HF-) oder ein anderer Sender/Empfänger, eine Telefonschnittstelle, eine Brücke, Leitwegrechner usw. Bei den E/A-Einheiten 1270 kann es sich auch um Komponenten zum Austauschen von Daten über verschiedene Netzwerke wie beispielsweise das Internet oder ein Intranet handeln. Die E/A-Einheiten 1270 können unter Verwendung von Bluetooth-Verbindungen und Kabeln (z. B. über USB-(Universal Serial Bus) Anschlüsse, serielle Anschlüsse, parallele Anschlüsse, FireWire, HDMI (High-Definition Multimedia Interface usw.)) mit dem Prozessor 1210 verbunden sein und/oder Daten mit diesem austauschen.
  • Der Prozessor 1210 ist so konfiguriert, dass er bei laufendem Computer 1200 innerhalb des Speichers 1220 gespeicherte Software ausführt, Daten an den Speicher 1220 sendet und von diesem empfängt und allgemein Arbeitsschritte des Computers 1200 bezüglich der Software steuert. Die Anwendung 1260 und das O/S 1250 werden ganz oder teilweise durch den Prozessor 1210 gelesen, möglicherweise innerhalb des Prozessors 1210 gepuffert und dann ausgeführt.
  • Zu beachten ist, dass die Anwendung 1260, wenn sie in Software ausgeführt ist, in praktisch jedem computerlesbaren Speichermedium zur Verwendung durch oder in Verbindung mit einem beliebigen computergestützten System oder Verfahren gespeichert sein kann. In Verbindung mit diesem Dokument kann es sich bei einem computerlesbaren Speichermedium um eine elektronische, magnetische, optische oder eine andere physische Einheit oder ein Mittel handeln, das ein Computerprogramm zur Verwendung durch oder in Verbindung mit einem computergestützten System oder Verfahren enthalten oder speichern kann.
  • Die Anwendung 1260 kann in einem beliebigen computerlesbaren Medium 1220 zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung, einem Server oder einer Einheit wie beispielsweise einem computergestützten System, einem System mit Prozessoren oder einem anderen System verkörpert sein, das Anweisungen von dem System, der Vorrichtung oder Einheit abrufen und ausführen kann. In Verbindung mit diesem Dokument kann es sich bei einem „computerlesbaren Speichermedium” um ein beliebiges Mittel handeln, das das Programm zur Verwendung durch oder in Verbindung mit dem System, der Vorrichtung oder Einheit speichern, lesen, schreiben, übertragen oder transportieren kann. Bei dem computerlesbaren Medium kann es sich zum Beispiel, ohne darauf beschränkt zu sein, um ein elektronische, magnetisches, optisches oder Halbleitersystem, eine entsprechende Vorrichtung oder Einheit handeln.
  • Als spezielle Beispiele (eine nicht erschöpfende Aufzählung) für das computerlesbare Medium 1220 kommen infrage: eine elektrische (elektronische) Verbindung mit einer oder mehreren Leitungen, eine austauschbare Computerdiskette (magnetisch oder optisch), ein Direktzugriffsspeicher (RAM) (elektronisch), ein Nur-Lese-Speicher (ROM) (elektronisch), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM, EEPROM, oder Flash-Speicher) (elektronisch), ein Lichtwellenleiter (optisch) und ein austauschbarer Compact Disc-Speicher (CD-ROM, CD R/W) (optisch).
  • Wenn die Anwendung 1260 in Hardware ausgeführt ist, kann sie gemäß beispielhaften Ausführungsformen mit einer oder einer Kombination der folgenden Technologien umgesetzt werden, die in der Technik bestens bekannt sind: diskrete Logikschaltungen mit Logikgattern zum Umsetzen von logischen Funktionen mit Datensignalen, eine anwendungsspezifische integrierte Schaltung (ASIC) mit geeigneten kombinatorischen Logikgattern, programmierbare Gate-Arrays (programmierbare Gatterschaltungen, PGA), vor Ort programmierbare Gatterschaltungen (FPGA) usw.
  • Es ist klar, dass der Computer 1200 beispielhafte Software- und Hardwarekomponenten beinhaltet, die in verschiedenen hierin erörterten Einheiten, Servern und Systemen enthalten sein können und nicht als Einschränkung zu verstehen sind, und dass in den verschiedenen Einheiten und System, die in beispielhaften Ausführungsformen erörtert wurden, weitere Software- und Hardwarekomponenten enthalten sein können.
  • Zu technischen Auswirkungen und Vorteilen zählen Einsparungen an Zeit und Verarbeitungsressourcen für Platzhalter, indem nicht Standard-Platzhalter für alle aufgerufenen Funktionen verwendet, sondern auf der Grundlage der aufgerufenen Funktion angepasste Platzhalter erzeugt werden. Dadurch kann die Laufzeit von Unterroutineaufrufen für externe Module auf der Grundlage aufgerufener Funktionseigenschaften (wie beispielsweise Architekturebenen) sicher optimiert werden, indem eine Unterroutine mit einer nahen (kurzen) Verschiebungsverzweigung und der Standort einer Ziel-Unterroutine in einem Modul aufgerufen wird.
  • Die hierin verwendeten Begriffe dienen nur zum Beschreiben bestimmter Ausführungsformen und nicht zur Einschränkung der Erfindung. Die hierin verwendeten Einzahlformen „ein”, „eine” und „der, die, das” sollen gleichermaßen auch die Mehrzahlformen einschließen, sofern aus dem Zusammenhang nicht anderes hervorgeht. Ferner ist klar, dass die Begriffe „weist auf” und/oder „aufweisend” bei Verwendung in dieser Beschreibung das Vorhandensein angegebener Merkmale, Ganzzahlen, Schritte, Operationen, Elemente und/oder Komponenten angeben, jedoch nicht das Vorhandensein oder das Hinzukommen einer oder mehrerer anderer Merkmale, Ganzzahlen, Schritte, Operationen, Elemente, Komponenten und/oder deren Gruppen ausschließen.
  • Die entsprechenden Strukturen, Materialien, Aktionen und Entsprechungen aller Mittel oder Schritte zuzüglich Funktionselemente in den folgenden Ansprüchen sollen alle Strukturen, Materialien oder Aktionen zum Ausführen der Funktion in Kombination mit anderen ausdrücklich beanspruchten Elementen beinhalten. Die Beschreibung der vorliegenden Erfindung ist zur Veranschaulichung und Beschreibung vorgelegt worden, erhebt jedoch nicht den Anspruch auf Vollständigkeit oder Beschränkung auf die Erfindung in der offenbarten Form. Dem Fachmann sind viele Änderungen und Varianten offensichtlich, ohne vom Schutzumfang der Erfindung abzuweichen. Die Ausführungsform wurde gewählt und beschrieben, um die Grundgedanken der Erfindung und deren praktische Anwendung bestmöglich zu erläutern und anderen Fachleuten das Verständnis der Erfindung für verschiedene Ausführungsformen mit verschiedenen Änderungen zu erleichtern, die für die beabsichtige Anwendung im Einzelnen geeignet sind.
  • Dem Fachmann ist einsichtig, dass Aspekte der vorliegenden Erfindung als System, Verfahren oder Computerprogrammprodukt umgesetzt werden können. Demgemäß können Aspekte der vorliegenden Erfindung die Form einer kompletten Hardwareausführungsform, einer kompletten Softwareausführungsform (darunter Firmware, residente Software, Mikrocode usw.) oder einer Ausführungsform annehmen, die Software- und Hardwareaspekte in sich vereint, die hierin sämtlich allgemein als „Schaltung”, „Modul” oder „System” bezeichnet werden können. Darüber hinaus können Aspekte der vorliegenden Erfindung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren computerlesbaren Medien mit einem darauf gespeicherten computerlesbaren Programmcode verkörpert ist.
  • Es kann eine beliebige Komponente eines oder mehrerer computerlesbarer Medien verwendet werden. Bei dem computerlesbaren Medium kann es sich um ein computerlesbares Signalmedium oder ein computerlesbares Speichermedium handeln. Bei einem computerlesbaren Speichermedium kann es sich zum Beispiel, ohne darauf beschränkt zu sein, um ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine entsprechende Vorrichtung oder Einheit oder eine beliebige geeignete Kombination derselben handeln. Als speziellere Beispiele (eine nicht erschöpfende Aufzählung) für das computerlesbare Speichermedium kommen infrage: eine elektrische Verbindung mit einer oder zwei Leitungen, eine austauschbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein austauschbarer Compact Disc-Nur-Lese-Speicher (CD-ROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder eine beliebige geeignete Kombination derselben. In Verbindung mit diesem Dokument kann es sich bei einem computerlesbaren Speichermedium um ein beliebiges materielles Medium handeln, das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder Einheit zum Ausführen von Anweisungen zu enthalten oder zu speichern.
  • Ein computerlesbares Signalmedium kann ein sich ausbreitendes Datensignal mit einem darin verkörperten computerlesbaren Programmcode beinhalten, zum Beispiel im Basisband oder als Teil einer Trägerwelle. Ein solches sich ausbreitendes Signal kann eine beliebige aus einer Vielfalt an Formen annehmen, darunter, ohne darauf beschränkt zu sein, elektromagnetisch, optisch oder eine beliebige geeignete Kombination derselben. Bei einem computerlesbaren Signalmedium kann es sich um ein beliebiges computerlesbares Medium handeln, das kein computerlesbares Speichermedium ist und das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder Einheit zum Ausführen von Anweisungen übertragen, weiterverbreiten oder transportieren kann.
  • Ein auf einem computerlesbaren Medium gespeicherter Programmcode kann unter Verwendung eines beliebigen geeigneten Medium übertragen werden, darunter, ohne darauf beschränkt zu sein, drahtlos, leitungsgebunden, Lichtwellenleiter, HF usw. oder eine beliebige geeignete Kombination derselben.
  • Ein Computerprogrammcode zum Ausführen von Operationen für Aspekte der vorliegenden Erfindung kann in einer beliebigen Komponente einer oder mehrerer Programmiersprachen geschrieben sein, darunter eine objektorientierte Programmiersprache wie beispielsweise Java®, Smalltalk, C++ oder dergleichen und herkömmliche prozedurale Programmiersprachen wie beispielsweise die Programmiersprache „C” oder ähnliche Programmiersprachen. Der Programmcode kann komplett auf dem Computer eines Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder komplett auf dem fernen Computer oder Server ausgeführt werden. Im letzteren Szenario kann der ferner Computer mit dem Computer des Benutzers durch einen beliebigen Typ von Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetzwerk (WAN), oder die Verbindung kann zu einem externen Computer (zum Beispiel durch das Internet unter Verwendung eines Internetdienstanbieters) hergestellt werden. Java und alle auf Java bezogenen Warenzeichen und Logos sind Warenzeichen oder eingetragene Warenzeichen von Oracle und/oder deren Tochterfirmen.
  • Aspekte der vorliegenden Erfindung werden oben unter Bezugnahme auf Ablaufpläne und/oder schematische Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es ist klar, dass jeder Block der Ablaufpläne und/oder Blockschaubilder und Kombinationen von Blöcken in den Ablaufplänen und/oder Blockschaubildern durch Computerprogrammanweisungen umgesetzt werden können. Diese Computerprogrammanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung zugeführt werden, um eine Maschine derart zu erzeugen, dass die durch den Prozessor des Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zum Umsetzen der in dem Block oder den Blöcken der Ablaufpläne und/oder Blockschaubilder angegebenen Funktionen/Aktionen erzeugen.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert sein, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten veranlassen kann, in einer bestimmten Weise so zu funktionieren, dass die in dem computerlesbaren Medium gespeicherten Anweisungen ein Herstellungsprodukt erzeugen, das Anweisungen beinhaltet, die die in dem Block oder den Blöcken der Ablaufpläne und/oder Blockschaubilder angegebenen Funktionen/Aktionen umsetzen.
  • Die Computerprogrammanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder andere Einheiten geladen werden, um eine Folge auf dem Computer, einer anderen programmierbaren Vorrichtung oder anderen Einheiten auszuführender Arbeitsschritte zu veranlassen, um einen computergestützten Prozess derart zu erzeugen, dass die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführten Anweisungen Prozesse zum Umsetzen der in dem Block oder den Blöcken der Ablaufpläne und/oder Blockschaubilder angegebenen Funktionen/Aktionen bereitstellen.
  • Die oben beschriebenen Ausführungsformen können in Form computergestützter Prozesse und Vorrichtungen zum praktischen Umsetzen dieser Prozesse realisiert werden. Gemäß Ausführungsformen ist die Erfindung in einem Computerprogrammcode verkörpert, der durch ein oder mehrerer Netzwerkelemente ausgeführt wird. Ausführungsformen beinhalten ein Computerprogrammprodukt auf einem durch Computer nutzbaren Medium, wobei eine Logik des Computerprogrammcodes Anweisungen enthält, die in einem materiellen Medium als Herstellungsprodukt verkörpert sind. Als beispielhafte Herstellungsprodukte für das durch Computer nutzbare Medium kommen Disketten, CD-ROMs, Festplatten USB-Flash-Speicher oder jedes andere computerlesbare Speichermedium infrage, wobei aus dem Computer eine Vorrichtung zum Umsetzen der Erfindung wird, wenn die Logik des Computerprogrammcodes in den Computer geladen und durch diesen ausgeführt wird. Ausführungsformen beinhalten eine Logik des Computerprogrammcodes, die zum Beispiel in einem Speichermedium gespeichert ist, in einen Computer geladen und/oder durch diesen ausgeführt oder über ein bestimmtes Übertragungsmedium wie beispielsweise über elektrische Leitungen oder Kabel, Lichtwellenleiter oder elektromagnetische Strahlung übertragen wird, wobei aus dem Computer eine Vorrichtung zum Umsetzen der Erfindung wird, wenn der Computerprogrammcode in den Computer geladen und durch diesen ausgeführt wird. Wenn die Logiksegmente des Computerprogrammcodes auf einem Universal-Mikroprozessor implementiert sind, wird der Mikroprozessor so konfiguriert, dass spezielle Logikschaltungen erzeugt werden.
  • Der Ablaufplan und die Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und die Arbeitsweise möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. Demgemäß kann jeder Block in dem Ablaufplan oder den Blockschaubildern ein Modul, ein Segment oder einen Codeabschnitt darstellen, der eine oder mehrere ausführbare Anweisungen zum Umsetzen der angegebenen logischen Funktionen aufweist. Zu beachten ist, dass bei bestimmten alternativen Ausführungsformen die in dem Block angegebenen Funktionen in einer von den Figuren abweichenden Reihenfolge vorkommen können. Zum Beispiel können zwei nacheinander gezeigte Blöcke je nach vorgesehener Funktionalität in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können mitunter in der umgekehrten Reihenfolge ausgeführt werden. Ferner wird darauf hingewiesen, dass jeder Block in den Blockschaubildern und/oder Ablaufplänen und Kombinationen von Blöcken in den Blockschaubildern und/oder Ablaufplänen durch spezielle Hardwaresysteme, die die angegebenen Funktionen oder Aktionen ausführen, oder durch Kombination von spezieller Hardware und Computeranweisungen umgesetzt werden.

Claims (16)

  1. Computergestütztes Verfahren zum Erzeugen von Platzhaltern, wobei das Verfahren aufweist: Empfangen eines Aufrufs an eine aufgerufene Funktion durch eine Verarbeitungsschaltung; Abrufen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die vorliegende Erfindung; und Erzeugen eines Platzhalters für die aufgerufene Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft durch die Verarbeitungsschaltung.
  2. Computergestütztes Verfahren nach Anspruch 1, das ferner aufweist: Feststellen, dass die aufgerufene Funktion und eine aufrufende Funktion gemeinsam in einer gemeinsam genutzten Bibliothek enthalten sind; oder Feststellen, dass die aufgerufene Funktion in einer anderen gemeinsam genutzten Bibliothek enthalten und sich die andere gemeinsam genutzte Bibliothek außerhalb der gemeinsam genutzten Bibliothek befindet.
  3. Computergestütztes Verfahren nach Anspruch 2, das ferner Optimierungsanweisungen in dem Platzhalter für den Fall aufweist, dass sich die aufgerufene Funktion zusammen mit der aufrufenden Funktion in der gemeinsam genutzten Bibliothek befindet.
  4. Computergestütztes Verfahren nach Anspruch 2, das ferner Optimierungsanweisungen in dem Platzhalter für den Fall aufweist, dass die aufgerufene Funktion in der anderen gemeinsam genutzten Bibliothek enthalten ist.
  5. Computergestütztes Verfahren nach einem der vorhergehenden Ansprüche, wobei das Verfahren aufweist: Optimieren von Anweisungen in dem Platzhalter auf der Grundlage einer nahen Aufrufdistanz als Reaktion auf ein Feststellen, dass die aufgerufene Funktion durch eine relative Adresse des Speichers von einer Verzweigung in dem Platzhalter erreichbar ist, wobei für die nahe Aufrufdistanz nicht sämtliche Adressbits benötigt werden; und Optimieren des Platzhalters auf der Grundlage der fernen Aufrufdistanz als Reaktion auf ein Feststellen, dass für die aufgerufene Funktion mehr Adressbits benötigt werden, als in der nahen Aufrufdistanz bereitgestellt werden, wobei für die ferne Aufrufdistanz sämtliche Adressbits benötigt werden.
  6. Computergestütztes Verfahren nach einem der vorhergehenden Ansprüche, wobei der Platzhalter durch einen Dienst des Betriebssystems erzeugt wird.
  7. Computergestütztes Verfahren nach einem der vorhergehenden Ansprüche, wobei das Verfahren ferner ein Aktualisieren des Platzhalters durch ein atomares Aktualisieren aufweist, um einen aktualisierten Platzhalter zu erzeugen; wobei das atomare Aktualisieren zum Erzeugen des aktualisierten Platzhalters aufweist: Aktualisieren des aktualisierten Platzhalters, während die Zuordnung einer Speicherseite des Platzhalters zu einem gerade ausgeführten Adressraum eines Threads aufgehoben ist, und/oder Verwenden eines atomaren Speicherns, um den aktualisierten Platzhalter zu speichern.
  8. Computersystem zum Erzeugen von Platzhaltern, wobei das System aufweist: eine Verarbeitungsschaltung; einen Speicher, der funktionell mit der Verarbeitungsschaltung verbunden ist; eine Auflösungsfunktion zum Empfangen eines Aufrufs an eine aufgerufene Funktion durch die Verarbeitungsschaltung; wobei die Auflösungsfunktion ferner zum Abrufen eines Mittels zum Abrufen einer aufgerufenen Funktionseigenschaft der aufgerufenen Funktion durch die Verarbeitungseinheit dient; und wobei die Auflösungsfunktion ferner dazu dient, ein Mittel zum Erzeugen eines Platzhalters der aufgerufenen Funktion auf der Grundlage der aufgerufenen Funktionseigenschaft durch die Verarbeitungsschaltung zu erzeugen.
  9. Computersystem nach Anspruch 8, wobei das System ferner aufweist: die Auflösungsfunktion dient ferner dazu festzustellen, dass die aufgerufene Funktion und eine aufrufende Funktion gemeinsam in einer gemeinsam genutzten Bibliothek enthalten sind; oder die Auflösungsfunktion dient ferner dazu festzustellen, dass die aufgerufene Funktion in einer anderen gemeinsam genutzten Bibliothek enthalten ist, wobei sich die andere gemeinsam genutzte Bibliothek außerhalb der gemeinsam genutzten Bibliothek befindet.
  10. Computersystem nach Anspruch 9, wobei das System ferner aufweist: die Auflösungsfunktion dient ferner dazu, Anweisungen in dem Platzhalter zu optimieren, wenn die aufgerufene Funktion gemeinsam mit der aufrufenden Funktion in der gemeinsam genutzten Bibliothek enthalten ist.
  11. Computersystem nach Anspruch 9, wobei das System ferner aufweist, dass die Auflösungsfunktion ferner dazu dient, Anweisungen in dem Platzhalter zu optimieren, wenn die aufgerufene Funktion in der anderen gemeinsam genutzten Bibliothek enthalten ist.
  12. Computersystem nach einem der Ansprüche 8 bis 11, wobei das System ferner aufweist: die Auflösungsfunktion dient ferner zum Bereitstellen eines Optimierens von Anweisungen in dem Platzhalter auf der Grundlage einer kurzen Aufrufdistanz als Reaktion auf ein Feststellen, dass die aufgerufene Funktion mit einer relativen Speicheradresse von einer Verzweigung in dem Platzhalter erreichbar ist, wobei für die nahe Aufrufdistanz nicht alle Adressbits erforderlich sind; und die Auflösungsfunktion dient ferner zum Optimieren des Platzhalters auf der Grundlage einer fernen Aufrufdistanz als Reaktion auf ein Feststellen, dass für die aufgerufene Funktion mehr Adressbits erforderlich sind als in der nahen Aufrufdistanz bereitgestellt werden, wobei für die ferne Aufrufdistanz alle Adressbits erforderlich sind.
  13. Computersystem nach einem der Ansprüche 8 bis 12, wobei der Platzhalter durch einen Dienst des Betriebssystems erzeugbar ist.
  14. Computersystem nach einem der Ansprüche 8 bis 13, das ferner aufweist, dass die Auflösungsfunktion zum Aktualisieren des Platzhalters durch atomares Aktualisieren dient, um einen aktualisierten Platzhalter zu erzeugen; wobei das atomare Aktualisieren zum Erzeugen des aktualisierten Platzhalters aufweist: die Auflösungsfunktion dient ferner zum Aktualisieren des aktualisierten Platzhalters, während die Zuordnung einer Speicherseite des Platzhalters zu einem gerade ausgeführten Adressraum eines Threads aufgehoben ist, und/oder zum Verwenden eines atomaren Speicherns, um den aktualisierten Platzhalter zu speichern.
  15. Computerprogrammprodukt zum Erzeugen von Platzhaltern, wobei das Computerprogrammprodukt aufweist: ein computerlesbares Speichermedium, das durch eine Verarbeitungsschaltung lesbar ist und in dem Anweisungen zum Ausführen durch die Verarbeitungsschaltung gespeichert sind, um ein Verfahren nach einem der Ansprüche 1 bis 7 auszuführen.
  16. Computerprogramm, das auf einem computerlesbaren Medium gespeichert und in den internen Speicher eines digitalen Computers ladbar ist und Abschnitte eines Softwarecodes zum Ausführen des Verfahrens nach einem der Ansprüche 1 bis 7 aufweist, wenn das Programm auf dem Computer ausgeführt wird.
DE112013001711.3T 2012-03-28 2013-02-05 Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine Ceased DE112013001711T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/432,393 2012-03-28
US13/432,393 US9063759B2 (en) 2012-03-28 2012-03-28 Optimizing subroutine calls based on architecture level of called subroutine
PCT/IB2013/050959 WO2013144731A1 (en) 2012-03-28 2013-02-05 Optimizing subroutine calls based on architecture level of called subroutine

Publications (1)

Publication Number Publication Date
DE112013001711T5 true DE112013001711T5 (de) 2014-12-11

Family

ID=49236867

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013001711.3T Ceased DE112013001711T5 (de) 2012-03-28 2013-02-05 Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine

Country Status (4)

Country Link
US (2) US9063759B2 (de)
DE (1) DE112013001711T5 (de)
GB (1) GB2513813B (de)
WO (1) WO2013144731A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9436475B2 (en) 2012-11-05 2016-09-06 Nvidia Corporation System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor incorporating the same
US10120663B2 (en) * 2014-03-28 2018-11-06 Intel Corporation Inter-architecture compatability module to allow code module of one architecture to use library module of another architecture
US9329875B2 (en) 2014-04-28 2016-05-03 International Business Machines Corporation Global entry point and local entry point for callee function
US9274769B1 (en) * 2014-09-05 2016-03-01 International Business Machines Corporation Table of contents pointer value save and restore placeholder positioning
US9146715B1 (en) * 2014-09-05 2015-09-29 International Business Machines Corporation Suppression of table of contents save actions
US9250881B1 (en) 2014-09-30 2016-02-02 International Business Machines Corporation Selection of an entry point of a function having multiple entry points
US9354947B2 (en) 2014-10-28 2016-05-31 International Business Machines Corporation Linking a function with dual entry points
US9395964B2 (en) 2014-10-30 2016-07-19 International Business Machines Corporation Rewriting symbol address initialization sequences
US20160274878A1 (en) * 2015-03-19 2016-09-22 Google Inc. Methods and systems for removing plt stubs from dynamically linked binaries
US9880833B2 (en) * 2015-06-30 2018-01-30 International Business Machines Corporation Initialization status of a register employed as a pointer
US9952844B1 (en) 2016-10-24 2018-04-24 International Business Machines Corporation Executing optimized local entry points and function call sites
US10268465B2 (en) 2016-10-24 2019-04-23 International Business Machines Corporation Executing local function call site optimization
US10534593B2 (en) 2016-10-24 2020-01-14 International Business Machines Corporation Optimized entry points and local function call tailoring for function pointers
US10169011B2 (en) 2016-10-24 2019-01-01 International Business Machines Corporation Comparisons in function pointer localization
US10108404B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Compiling optimized entry points for local-use-only function pointers
US10360005B2 (en) * 2016-10-24 2019-07-23 International Business Machines Corporation Local function call tailoring for function pointer calls
US10108407B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Loading optimized local entry points for local-use-only function pointers
US10108406B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Linking optimized entry points for local-use-only function pointers
US10169016B2 (en) 2016-10-24 2019-01-01 International Business Machines Corporation Executing optimized local entry points
US10180827B2 (en) 2016-12-14 2019-01-15 International Business Machines Corporation Suppressing storing of context information
US10235190B2 (en) 2016-12-14 2019-03-19 International Business Machines Corporation Executing instructions to store context information based on routine to be executed
US10241769B2 (en) 2016-12-14 2019-03-26 International Business Machines Corporation Marking sibling caller routines
US10152338B2 (en) 2016-12-14 2018-12-11 International Business Machines Corporation Marking external sibling caller routines
US20180165073A1 (en) 2016-12-14 2018-06-14 International Business Machines Corporation Context information based on type of routine being called
US10095493B2 (en) 2016-12-14 2018-10-09 International Business Machines Corporation Call sequence generation based on type of routine
US10310872B2 (en) * 2017-02-21 2019-06-04 Red Hat, Inc. Transparent fast application launcher
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884747B2 (en) * 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10534609B2 (en) * 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10691471B2 (en) * 2018-05-29 2020-06-23 Red Hat, Inc. Conflict resolution for strong symbols

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6321275B1 (en) * 1995-04-24 2001-11-20 Microsoft Corporation Interpreted remote procedure calls
US6317870B1 (en) 1999-02-26 2001-11-13 Hewlett-Packard Company System and method for optimization of inter-module procedure calls
JP2005352891A (ja) 2004-06-11 2005-12-22 Canon Inc クライアント/サーバアプリケーション作成装置、方法、及びコンピュータプログラム
CN1318976C (zh) 2004-06-16 2007-05-30 华为技术有限公司 软件测试方法及其系统
US7526502B2 (en) * 2004-09-10 2009-04-28 Microsoft Corporation Dynamic call site binding
JP2006092167A (ja) 2004-09-22 2006-04-06 Ricoh Co Ltd サービス提供装置、意味関係サービス提供装置、サービス提供プログラム、意味関係サービス提供プログラム、記録媒体、サービス提供方法及び意味関係サービス提供方法
US7533388B1 (en) 2005-04-28 2009-05-12 Sun Microsystems, Inc. Method and apparatus for dynamic Stubs and Ties in RMI-IIOP
US7353504B2 (en) * 2005-12-09 2008-04-01 Bea Systems, Inc. System and method for efficiently generating native code calls from byte code in virtual machines
US7856628B2 (en) 2006-01-23 2010-12-21 International Business Machines Corporation Method for simplifying compiler-generated software code
US20100077378A1 (en) 2008-09-25 2010-03-25 International Business Machines Corporation Virtualised Application Libraries
CN102346710B (zh) 2011-10-13 2015-04-29 北京航空航天大学 一种基于动态插桩技术的数据包处理时延分析方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries
US10061705B2 (en) 2014-11-17 2018-08-28 International Business Machines Corporation Identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Also Published As

Publication number Publication date
US9063759B2 (en) 2015-06-23
GB2513813B (en) 2017-02-22
US20140101677A1 (en) 2014-04-10
US20130263153A1 (en) 2013-10-03
US9075636B2 (en) 2015-07-07
GB2513813A (en) 2014-11-05
WO2013144731A1 (en) 2013-10-03
GB201415538D0 (en) 2014-10-15

Similar Documents

Publication Publication Date Title
DE112013001711T5 (de) Optimieren von Unterroutine-Aufrufen auf der Grundlage der Architekturebene einer aufgerufenen Unterroutine
DE102010051477B4 (de) Verfahren in einer computerplattform sowie computerplattform zum gemeinsamen benutzen von virtuellen speicherbasierten mehrversionsdaten zwischen den verschiedenartigen prozessoren der computerplattform
DE112012000693B4 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE102013022299B3 (de) Schutz globaler Register in einem Multithreaded-Prozessor
DE102015002582A1 (de) Architekturübergreifendes Kompatibilitätsmodul, um zuzulassen, dass ein Codemodul einer Architektur ein Bibliotheksmodul einer anderen Architektur verwendet
EP2807558B1 (de) Speichercontroller zur bereitstellung mehrerer definierter bereiche eines massenspeichermediums als unabhängige massenspeicher an einen master-betriebssystem-kern zur exklusiven bereitstellung an virutelle maschinen
DE102007025397B4 (de) System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
DE102016214786A1 (de) Anwendungsprofiling-Jobmanagement-System, -Programm und -Verfahren
DE102013200029A1 (de) Bereitstellen leistungsangepasster versionen kompilierten codes für eine cpu in einem system heterogener kerne
DE112007001714T5 (de) Virtualisieren von Leistungszählern
DE112007001988T5 (de) Gemeinsames Nutzen von Informationen durch Gäste in einer Virtuelle-Maschine-Umgebung
DE112009005006T5 (de) Optimierungen für ein ungebundenes transaktionales Speichersystem (UTM)
DE112012000512T5 (de) Aktualisieren von Software
DE112013004344T5 (de) Verfahren und System zum Migrieren von Prozessen in heterogenen Datenverarbeitungsumgebungen
DE112013000656T5 (de) System und Verfahren zum Verringern der Speichernutzung durch optimales Platzieren von virtuellen Maschinen in einem virtualisierten Rechenzentrum
DE60102694T2 (de) Modulares computersystem und -verfahren
DE112011103406T5 (de) Verwaltung von nicht geänderten Objekten
DE202015009297U1 (de) Programmprodukt zum Eliminieren zusätzlicher Speicherladungen während des Zugriffs auf globale Variablen in positionsunabhängigem Code
DE112017005015T5 (de) Verarbeiten von gleichgeordneten Aufrufen (SIBLING CALLS)
DE112014002877T5 (de) Passives Überwachen von virtuellen Systemen mithilfe von agentenunabhängiger, echtzeitnaher Indexierung
DE102018207314A1 (de) Software-definierte mikrodienste
DE102018114322A1 (de) Architektur und Dienste zur Unterstützung der rekonfigurierbaren Synchronisation in einem Multiprozessorsystem
EP4123448A1 (de) Absicherung eines einrichtevorgangs eines unterverzeichnisses und einer netzwerkschnittstelle für eine containerinstanz
DE112020002785T5 (de) Verfahren für ein virtualisierungssystem auf container-grundlage

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: RICHARDT PATENTANWAELTE PART GMBB, DE

Representative=s name: RICHARDT PATENTANWAELTE PARTG MBB, DE

R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R016 Response to examination communication
R003 Refusal decision now final