-
HINTERGRUND
-
In Rechenvorrichtungen kann ein Prozessor, wie etwa eine zentrale Verarbeitungseinheit (CPU), Anweisungen, die in Softwareanwendungen enthalten sind, gemäß einem Ausführungszyklus verarbeiten. Ein beispielhafter Anweisungszyklus beinhaltet eine Abrufphase, in der eine als nächstes auszuführende Anweisung aus dem Speicher abgerufen wird, eine Dekodierungsphase, in der die abgerufene Anweisung interpretiert und für die Ausführung vorbereitet wird, eine Ausführungsphase, in der das der Anweisung zugeordnete Verhalten durchgeführt wird. In manchen Fällen kann der Prozessor oder die Rechenvorrichtung, die den Prozessor enthält, einen Anweisungscache zum Speichern von Anweisungen beinhalten, so dass der Prozessor häufig verwendete Anweisungen nicht jedes Mal aus dem Speicher, beispielsweise einem Direktzugriffsspeicher (RAM), abrufen muss, wenn sie ausgeführt werden sollen. Solch ein Anweisungscache kann die Prozessorleistung verbessern, da das Abrufen einer Anweisung aus dem Speicher ein relativ langsamer Vorgang ist, der Hunderte von Prozessorzyklen dauern kann, währen ein Abrufen aus einem Cache möglicherweise nur einige Prozessorzyklen in Anspruch nimmt.
-
ZUSAMMENFASSUNG
-
Die vorliegende Offenbarung bezieht sich auf die Verwaltung eines Anweisungscache basierend auf der zeitlichen Lokalität der zwischengespeicherten Anweisungen.
-
Generell kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstands in Verfahren verkörpert werden, die die Vorgänge des Empfangens einer Anforderung für eine erste Anweisung, die in einer Softwareanwendung enthalten ist, beinhalten; das Speichern eines ersten Cacheeintrags, der der ersten Anweisung entspricht, in einer Cachestruktur; den Empfang einer Anforderung für eine zweite Anweisung, die in der Softwareanwendung enthalten ist, wobei die zweite Anweisung sich von der ersten Anweisung unterscheidet; als Reaktion auf den Empfang einer Anforderung für die zweite Anweisung, die Feststellung, dass ein Cacheeintrag aus der Cachestruktur entfernt werden muss, um Platz für einen zweiten Cacheeintrag zu schaffen, der der zweiten Anweisung entspricht; als Reaktion auf die Feststellung, dass ein Cacheeintrag entfernt werden muss, die Feststellung, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, auf Basis zeitlicher Lokalitätsattribute, die mindestens einer, der ersten Anweisung oder der zweiten Anweisung, zugeordnet sind aus der Cachestruktur entfernt werden sollte, wobei die zeitlichen Lokalitätsattribute eine Wahrscheinlichkeit darstellen, dass zusätzliche Anforderungen für eine zugeordnete Anweisung empfangen werden, während die Anweisung in einer Cachestruktur gespeichert ist; als Reaktion auf die Feststellung, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, entfernt werden soll, die Entfernung des ersten Cacheeintrags aus der Cachestruktur; und als Reaktion auf die Entfernung des ersten Cacheeintrags, Speicherung des zweiten Cacheeintrags in der Cachestruktur.
-
In einem anderen generellen Aspekt beinhaltet ein beispielhaftes Verfahren die Feststellung eines ersten zeitlichen Lokalitätsindikators für eine erste Anweisungsregion einer Softwareanwendung und einen zweiten zeitlichen Lokalitätsindikator für eine zweite Anweisungsregion der Softwareanwendung, die eine andere ist als die erste Anweisungsregion, wobei die erste und die zweite Anweisungsregion jeweils eine oder mehrere Anweisungen enthalten, wobei die ersten und zweiten und zeitlichen Lokalitätsindikatoren Wahrscheinlichkeiten darstellen, dass Anweisungen, die in den ersten und zweiten Anweisungsregionen enthalten sind, erneut ausgeführt werden, während die Anweisungen in einer Cachestruktur gespeichert werden, wobei der zweite zeitliche Lokalitätsindikator angibt, dass die Anweisungen in der zweiten Anweisungsregion mit höherer Wahrscheinlichkeit erneut ausgeführt werden als Anweisungen in der ersten Anweisungsregion; und Bereitstellung des ersten zeitlichen Lokalitätsindikators und des zweiten zeitlichen Lokalitätsindikators an die Cachestruktur, wobei die Cachestruktur zur Speicherung von Cacheeinträgen konfiguriert ist, die Anweisungen der Softwareanwendung darstellen, wenn die Anweisungen von einem Prozessor, der die Softwareanwendung ausführt, ausgeführt werden, und worin die Cachestruktur konfiguriert ist, einen ersten Cacheeintrag zu entfernen, der eine Anweisung repräsentiert, die in der ersten Anweisungsregion enthalten ist, um Platz zu Speicherung eines zweiten Cacheeintrags zu schaffen, der eine Anweisung repräsentiert, die in der zweiten Anweisungsregion enthalten ist, zumindest zum Teil auf Grundlage des ersten zeitlichen Lokalitätsindikators und des zweiten zeitlichen Lokalitätsindikators.
-
Andere Ausführungsformen dieses Aspekts umfassen entsprechende Systeme, Apparate und Computerprogramme, die für die Durchführung der Aktionen der Verfahren, die auf Computerspeichervorrichtungen kodiert sind, konfiguriert sind.
-
Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert sein, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. Durch die Verwaltung dessen, welche Anweisungen in einem Anweisungscache gespeichert werden, so dass es wahrscheinlicher ist, dass häufiger verwendete (oder „zeitliche“)" Anweisungen Vorrang vor Anweisungen gewährt wird, bei denen es weniger wahrscheinlich ist, dass sie häufig verwendet werden (oder „nicht-zeitliche“ Anweisungen), kann die Hitrate des Cache erhöht werden, was zu einer verbesserten Systemleistung führen kann. Die hierin beschriebenen Techniken können weiterhin dazu verwendet werden, eine bestimmte Softwareanwendung zu profilieren und zeitliche Lokalitätsattribute festzulegen, die verschiedenen Anweisungen und/oder Anweisungsregionen der bestimmten Softwareapplikation zugeordnet sind. Die zeitlichen Lokalitätsattribute können dann dazu verwendet werden, das Verhalten des Anweisungscache gegenüber der bestimmten Softwareanwendung zu modifizieren, was zu weiteren Leistungsverbesserungen gegenüber vorherigen Cacheverwaltungsschemata führen kann, wie etwa am wenigsten zuletzt verwendete LRU-Schemata.
-
Die Details einer oder mehrerer Ausführungen eines Gegenstands dieser Spezifikation sind in den begleiteten Bildern und der Beschreibung unten veranschaulicht. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
-
BESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Blockdiagramm einer Umgebung, in der Anweisungscacheverwaltung auf Grundlage zeitlicher Lokalität auftreten kann.
-
2 ist ein Blockdiagramm einer Systemkonfiguration, das den Informationsfluss zwischen einem Prozessor, einem Anweisungscache und einem Speicher zur Verwaltung des Anweisungscache auf Grundlage der zeitlichen Lokalität der zwischengespeicherten Anweisungen zeigt.
-
3A ist ein Blockdiagramm, das einen beispielhaften Zustand eines Anweisungscache vor einer Räumungsentscheidung auf Grundlage zeitlicher Lokalität zeigt.
-
3B ist ein Blockdiagramm, das einen beispielhaften Zustand eines Anweisungscache nach einer Räumungsentscheidung auf Grundlage zeitlicher Lokalität zeigt.
-
4A ist ein Blockdiagramm, das einen beispielhaften Zustand eines Anweisungscache vor einer Räumungsentscheidung auf Grundlage beobachteter Eingabenutzung zeigt.
-
4B ist ein Blockdiagramm, das einen beispielhaften Zustand eines Anweisungscache nach einer Räumungsentscheidung auf Grundlage beobachteter Eingabenutzung zeigt.
-
5 ist ein Flussdiagramm eines beispielhaften Prozesses zur Verwaltung eines Anweisungscache auf Grundlage der zeitlichen Lokalität der zwischengespeicherten Anweisungen.
-
6 ist ein Flussdiagramm eines beispielhaften Prozesses zur Feststellung zeitlicher Lokalitätsattribute für eine Softwareanwendung.
-
7 ist ein Blockdiagramm einer beispielhaften Rechenvorrichtung.
-
Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Manche Softwareanwendungen können eine große Anzahl unterschiedlicher Anweisungen, die von einem Prozessor auszuführen sind, beinhalten. Es lässt sich sagen, dass solche Anwendungen einen „großen Anweisungs-Fußabdruck“ haben. Solche Anwendungen können über ein großes „Arbeitsset“ an Anweisungen verfügen; das heißt, einen großen Satz an Anweisungen, die recht häufig ausgeführt werden. Diese Anweisungen sind oft im Cache gespeichert und werden während der Verarbeitung aus dem Cache geräumt. Eine Eigenschaft einer Anweisung, die durch das nachfolgend beschriebene System und die Verfahren festgestellt wird, ist die „zeitliche Lokalität“; das ist eine Repräsentation der Wahrscheinlichkeit, dass eine Anweisung ausgeführt wird, während die Anweisung im Cache gespeichert ist. Zeitliche Lokalität lässt sich auf binäre Weise quantifizieren, beispielsweise entweder zeitlich oder nicht-zeitlich, oder auf eine granulärere Weise über eine bestimmte Spanne. Im letzteren Fall können die Anweisungen beispielsweise eine niedrige, moderate und hohe zeitliche Lokalität haben, wobei eine Untermenge von Anweisungen, die eine hohe zeitliche Lokalität haben, häufiger ausgeführt wird als jene mit moderater oder niedriger zeitlicher Lokalität.
-
In manchen Fällen kann ein Anweisungscache ineffizient genutzt werden, weil Anweisungen mit hoher zeitlicher Lokalität möglicherweise aus dem begrenzten Platz des Anweisungscache geräumt werden, um Platz für Anweisungen mit niedrigerer zeitlicher Lokalität zu schaffen. Die Anweisungen mit niedrigerer zeitlicher Lokalität werden möglicherweise nicht wieder ausgeführt, während sie sich im Anweisungscache befinden, was zu einer verringerten Leistung führen kann, da mehr Anweisungen aus dem Speicher als aus dem Anweisungscache abgerufen werden. Wenn eine Anwendung über einen großen Anweisungs-Fußabdruck oder ein großes Arbeitsset an Anweisungen verfügt, kann diese Situation häufiger auftreten, da eine große Anzahl unterschiedlicher Anweisungen wahrscheinlich zwischen aufeinanderfolgenden Ausführungen einer bestimmten Anweisung ausgeführt werden. Das kann zu einem Anweisungscache führen, der nicht die am häufigsten verwendeten Anweisungen für die Anwendung speichert.
-
Dementsprechend beschreibt die vorliegende Offenbarung Techniken zur Verwaltung eines Anweisungscache auf Grundlage der zeitlichen Lokalität der zwischengespeicherten Anweisungen. Eine beispielhafte Technik beinhaltet das Empfangen einer ersten Anweisung, die in einer Softwareanwendung enthalten ist. Die Anforderung kann beispielsweise von einer Cachestruktur von einem Prozessor empfangen werden, der die Softwareanwendung ausführt. Die Cachestruktur kann dann einen ersten Cacheeintrag, der der ersten Anweisung entspricht, speichern, wie beispielsweise nach dem Abrufen der Anweisung aus einem Speicher. Die Cachestruktur kann eine Anforderung nach einer zweiten Anweisung, die in der Softwareanwendung enthalten ist und sich von der ersten Anweisung unterscheidet, empfangen. Als Reaktion auf den Empfang einer Anforderung der zweiten Anweisung kann die Cachestruktur feststellen, dass ein Cacheeintrag aus der Cachestruktur entfernt werden muss, um Platz zur Speicherung eines zweiten Cacheeintrags, der der zweiten Anweisung entspricht, zu schaffen, wie beispielsweise in Fällen, in denen die Cachestruktur voll ist. Als Reaktion auf die Feststellung, dass ein Cacheeintrag entfernt werden muss, kann die Cachestruktur feststellen, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, auf Grundlage der zeitlichen Lokalitätsattribute, die mindestens einer, der ersten Anweisung oder der zweiten Anweisung, zugeordnet sind und eine Wahrscheinlichkeit repräsentieren, dass zusätzliche Anforderungen für eine zugeordnete Anweisung empfangen werden, entfernt werden sollte. Der erste und der zweite Cacheeintrag können beispielsweise die zeitlichen Lokalitätsattribute enthalten und die Cachestruktur kann die Attribute analysieren, um festzustellen, dass der erste Cacheeintrag entfernt werden sollte, wie beispielsweise in dem Fall, dass die Attribute angeben, dass eine erneute Ausführung der ersten Anweisung weniger wahrscheinlich ist als die Ausführung der zweiten Anweisung. Als Reaktion auf die Feststellung, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, entfernt werden soll, kann die Cachestruktur den ersten Cacheeintrag entfernen und den zweiten Cacheeintrag speichern.
-
Eine weitere beispielhafte Technik umfasst die Feststellung eines ersten zeitlichen Lokalitätsindikators für eine erste Anweisungsregion einer Softwareanwendung und eines zweiten zeitlichen Indikatorattributs für eine zweite Anweisungsregion der Softwareanwendung, die sich von der ersten Anweisungsregion unterscheidet. In manchen Fällen können die zeitlichen Lokalitätsindikatoren von einem Anwendungsprofiler festgestellt werden. Der erste und der zweite zeitliche Lokalitätsindikator kann Wahrscheinlichkeiten repräsentieren, dass Anweisungen, die in der ersten und der zweiten Anweisungsregion enthalten sind, erneut ausgeführt werden, während die Anweisungen in einer Cachestruktur gespeichert sind. In einem Beispiel gibt der zweite zeitliche Lokalitätsindikator an, dass Anweisungen in der zweiten Anweisungsregion mit größerer Wahrscheinlichkeit erneut ausgeführt werden als Anweisungen in der ersten Anweisungsregion, während sie sich im Cache befinden. Der Anwendungsprofiler kann den ersten zeitlichen Lokalitätsindikator und den zweiten zeitlichen Lokalitätsindikator der Cachestruktur bereitstellen, die einen ersten Cacheeintrag, der eine Anweisung repräsentiert, die in der ersten Anweisungsregion enthalten ist, entfernt, um Platz für einen zweiten Cacheeintrag zu schaffen, der eine Anweisung repräsentiert, die in der zweiten Anweisungsregion enthalten ist, auf Grundlage zumindest zum Teil des ersten zeitlichen Lokalitätsindikators und des zweiten zeitlichen Lokalitätsindikators.
-
Diese und weitere Merkmale werden nachstehend ausführlicher beschrieben.
-
1 ist ein Blockdiagramm einer Umgebung 100, in der Anweisungscacheverwaltung auf Grundlage zeitlicher Lokalität auftreten kann. Wie gezeigt enthält die Umgebung 100 einen Prozessor 108, einen Anweisungscache 110, einen Speicher 120 und einen Anwendungsprofiler 118. Während des Betriebs analysiert der Anwendungsprofiler 118 eine Softwareanwendung 102 zur Feststellung der den Anweisungsregionen 104 oder Anweisungen 106 der Softwareanwendung 102 zugeordneten zeitlichen Lokalitätsattribute 116. Die zeitlichen Lokalitätsattribute 116 können in die Softwareanwendung 102 eingefügt werden, wie etwa in Form von Indikatoren, Markierungen oder Direktiven innerhalb der Anweisungsregionen 104 und/oder der Anweisungen 106. Die zeitlichen Lokalitätsattribute 116 können auch getrennt von der Softwareanwendung 102 gespeichert werden, wie etwa in einem anderen Teil des Speichers 120.
-
Wenn die Softwareanwendung 102 vom Prozessor 108 ausgeführt wird, ruft der Prozessor 108 Anweisungen 106 zur Ausführung über den Anweisungscache 110 ab. Der Anweisungscache 110 speichert einen oder mehrere Cacheeinträge 112, von denen jeder eine bestimmte Anweisung 114 repräsentiert, und einschließlich zeitlicher Lokalitätsattribute 116, die der Anweisung 114 zugeordnet sind. Wenn der Prozessor 108 eine Anweisung aus dem Anweisungscache 110 abruft, stellt der Anweisungscache 110 fest, ob die angeforderte Anweisung in einem der Cacheeinträge 112 gespeichert ist. Falls der Anweisungscache 110 feststellt, dass die angeforderte Anweisung nicht in einem der Cacheeinträge 112 enthalten ist, ruft der Anweisungscache 110 die angeforderte Anweisung aus dem Speicher 120 ab. In manchen Fällen kann der Anweisungscache 110 einen Datenblock aus dem Speicher abrufen, der die angeforderte Anweisung und andere Anweisungen enthält, die vor oder nach der angeforderten Anweisung im Speicher auftreten. Der Anweisungscache 110 kann außerdem die zeitlichen Lokalitätsattribute 116, die der angeforderten Anweisung zugeordnet sind, abrufen und die zeitlichen Lokalitätsattribute 116 in dem Cacheeintrag 112 zusammen mit der Anweisung 114 speichern. In manchen Fällen kann der Anweisungscache 110 feststellen, dass alle Cacheeinträge 112 aktuell zum Speichern von Anweisungen genutzt werden (d. h. der Cache ist voll), und er kann feststellen, ob eine Anweisung aus einem der Cacheeinträge 112 entfernt (beispielsweise geräumt) werden soll, um Platz für die angeforderte Anweisung zu schaffen. Der Anweisungscache 110 kann diese Feststellung auf Grundlage der zeitlichen Lokalitätsattribute 116, die der angeforderten Anweisung zugeordnet sind, und für jede der Anweisungen 114, die in den Cacheeinträgen 112 gespeichert sind, treffen. Wenn beispielsweise der Prozessor 108 eine Anweisung 106 aus dem Anweisungscache 110 anfordert und der Anweisungscache 110 über keinen Cacheeintrag 112 verfügt, der der Anweisung 106 zugeordnet ist, und der Anweisungscache 110 voll ist, kann der Anweisungscache 110 feststellen, ob eine Anweisung aus einem der Cacheeinträge 112 geräumt werden soll, um die Anweisung 106 zu speichern, oder ob die angeforderte Anweisung 106 ohne Speicherung der Anweisung 106 in einem Cacheeintrag 112 an den Prozessor 108 zurückgesendet werden soll. Diese Feststellung kann gemäß der zeitlichen Lokalitätsattribute 116, die der Anweisung 106 zugeordnet sind, und gemäß der zeitlichen Lokalitätsattribute 116, die den Anweisungen 114 zugeordnet sind, die in den Cacheeinträgen 112 des Anweisungscache 110 gespeichert sind, getroffen werden.
-
In dem aktuellen Beispiel wird angenommen, dass die zeitlichen Lokalitätsattribute 116 für die Anweisung 106 angeben, dass die Anweisung 106 zeitlich ist (es ist beispielsweise wahrscheinlich ist, dass sie vom Prozessor erneut abgerufen wird, während sie im Cache gespeichert ist), und dass die zeitlichen Lokalitätsattribute 116 für die Anweisung 114 angeben, dass die Anweisung 114 nicht-zeitlich ist (es ist beispielsweise nicht wahrscheinlich, dass sie, im Vergleich zu einer zeitlichen Anweisung, vom Prozessor erneut abgerufen wird, während sie im Cache gespeichert ist). Der Anweisungscache 110 kann die Anweisung 114, die nicht-zeitlich ist, räumen, um die Anweisung 106, die zeitlich ist, zu speichern.
-
In manchen Fällen kann der Anweisungscache 110 eine nicht-zeitliche Anweisung in einer am wenigsten zuletzt verwendeten LRU-Position innerhalb des Cache speichern, so dass es wahrscheinlich ist, dass sie geräumt wird. Solch ein Verhalten könnte eine Leistungserhöhung für nicht-zeitliche Anweisungen ermöglichen, auf die mehrere Male in schneller Folge zugegriffen wird, wie etwa Teile einer Schleife, auf die dann aber nicht mehr zugegriffen wird, während sie immer noch in der Cachestruktur 110 gespeichert wären.
-
Die Umgebung 100 enthält einen Prozessor 108. Obwohl er in 1 als ein einzelner Prozessor 134 veranschaulicht ist, könnten in bestimmten Implementierungen der Umgebung 100 zwei oder mehr Prozessoren enthalten sein. Jeder Prozessor 108 kann eine zentrale Verarbeitungseinheit (CPU), ein Blade, eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FPGA) oder eine andere geeignete Komponente sein. (Standardtext einfügen). Der Prozessor 108 kann außerdem ein einzelner Prozessorkern eines größeren Prozessors sein, der mehrere integrierte Prozesskerne enthält.
-
Der Prozessor 108 enthält einen Programmzähler 109, der die Speicheradresse der nächsten Anweisung zum Abruf enthält. In manchen Fällen kann der Programmzähler 109 anfänglich mit der Adresse der ersten Anweisung in der Softwareanwendung 102 belegt sein. Mit Ausführung der Anweisungen wird der Programmzähler 109 aktualisiert. Der Programmzähler 109 kann beispielsweise bei Programmausführung sequenziell erhöht werden und er kann so aktualisiert werden, dass er auf eine andere Position im Speicher verweist, wenn er auf eine Verzweigung oder eine andere Ablaufsteueranweisung (wie etwa eine Schleife oder eine Bedingung) in der Softwareanwendung 102 trifft. In manchen Fällen kann der Programmzähler 109 ein Register oder eine andere Struktur sein, die im Prozessor 108 enthalten ist.
-
Die Umgebung 100 enthält auch einen Anweisungscache 110. In manchen Fällen kann der Anweisungscache 110 in den Prozessor 108 integriert sein, wie etwa zum Beispiel in Form von L1, L2 oder L3 On-Chip Cache. Der Anweisungscache 110 kann auch eine vom Prozessor 108 getrennte Komponente sein und kann von mehreren Prozessoren genutzt werden. In manchen Implementierungen kann der Anweisungscache 110 eine spezialisierte Cachestruktur sein, die konkret zum zwischenspeichern von Anweisungen entwickelt wurde, die vom Prozessor 108 abgerufen werden, so dass die Anweisungen nicht aus dem Speicher 120 abgerufen werden müssen. Der Anweisungscache 110 kann auch eine Allzweck-Cache-Struktur sein. In manchen Fällen kann der Anweisungscache 110 eine vorbestimmte Anzahl an Cacheeinträgen 112 enthalten, so dass der Anweisungscache 110 über die Kapazität verfügt, eine begrenzte Anzahl an Anweisungen 114 und zugeordnete zeitliche Lokalitätsattribute 116 zu speichern.
-
In manchen Implementierungen können die Cacheeinträge 112 Speicherpositionen innerhalb des Anweisungscache 110 sein, wobei jede für die Speicherung einer Speicheradresse 113, einer Anweisung 114 und eines Sets zeitlicher Lokalitätsattribute 116, die der Anweisung 114 zugeordnet sind, konfiguriert ist. In manchen Fällen kann der Anweisungscache 110 nach der jeder Anweisung 114 zugeordneten Speicheradresse 113 indexiert werden. Beim Betrieb ruft der Prozessor 108, während er die Softwareanwendung 102 ausführt, seine nächste Anweisung zur Ausführung ab, indem er sie von einer in einem bestimmten Register, das als der „Programmzähler" oder „Anweisungszeiger“ bezeichnet werden kann, gespeicherten Speicheradresse abruft. Der Anweisungscache 110 kann einen Cacheeintrag 112, der der Speicheradresse 113 zugeordnet ist und vom Prozessor 108 abgerufen wurde, finden und die Anweisung 114, die in dem Cacheeintrag 112 gespeichert ist, zurück an den Prozessor 108 senden. In manchen Implementierungen können die Cacheeinträge 112 Cachezeilen innerhalb des Anweisungscache 110 sein. Der einzelne Cacheeintrag 112 kann auch mehrere Anweisungen speichern, wie etwa beispielsweise als Teil eines Datenblocks, der aus dem Speicher 120 geladen wird.
-
Wie gezeigt enthält jeder Cacheeintrag 112 eine Speicheradresse 113. Die Speicheradresse 113 kann eine Adresse innerhalb des Speichers 120 sein, an der die Anweisung 114 gespeichert ist. Die Speicheradresse 113 kann auch eine Adresse innerhalb des Speichers 120 sein, die dem Beginn eines Datenblocks entspricht, der von dem Cacheeintrag 112 gespeichert wird, wobei der Datenblock die Anweisung 114 enthält. In manchen Fällen kann die Speicheradresse 113 ein ganzzahliger Wert sein, der die Position innerhalb des Speichers 120 eindeutig identifiziert, wie etwa eine 32-Bit-Ganzzahl oder eine 64-Bit-Ganzzahl. Die Speicheradresse 113 kann auch eine virtuelle Speicheradresse sein, so dass sie sich auf eine Position innerhalb einer Seite eines virtuellen Speichers bezieht als auf eine Position innerhalb eines physikalischen Speichers. In solch einem Fall kann die Speicheradresse 113 durch Konsultation einer Seitentabelle (nicht gezeigt) in eine physikalische Adresse übersetzt werden.
-
Der Anweisungscache 110 kann, wenn er eine Anforderung zum Abrufen einer Anweisung von dem Prozessor 108 erhält, eine vom Prozess 108 in der Anforderung erhaltene Speicheradresse mit der Speicheradresse 113 in jedem der Cacheeinträge 112 vergleichen. Falls die Speicheradresse 113 der angeforderten Speicheradresse entspricht, kann der Anweisungscache 110 die Anweisung 114 an den Prozessor 108 zurücksenden. In manchen Fällen kann der Anweisungscache 110 gleichzeitig die Speicheradressen 113 mehrerer Cacheeinträge 112 prüfen, wie etwa beispielsweise durch festgelegte assoziative oder vollständig assoziative Suchvorgänge.
-
Jeder Cacheeintrag 112 enthält auch eine Anweisung 114. Die Anweisung 114 kann Informationen enthalten, die vom Prozessor 108 zu Ausführung des Teils der Softwareanwendung 102 benötigt wird, der von der Adresse, die im Programmzähler 109 gespeichert ist, angegeben wird. Eine Anweisung 114 kann beispielsweise einen Operationscode enthalten, der die auszuführende Anweisung darstellt, und Argumente, die bei Ausführung der Anweisung zu verwenden sind, wie etwa Speicheradressen oder numerische Werte.
-
Jeder Cacheeintrag 112 kann außerdem zeitliche Lokalitätsattribute 116 enthalten. Die zeitlichen Lokalitätsattribute 116 können Informationen über die zeitliche Lokalität der Anweisung 114 enthalten. In manchen Fällen können die zeitlichen Lokalitätsattribute 116 ein Bit enthalten, das angibt, dass die Anweisung 114 zeitlich ist, und es daher wahrscheinlich ist, dass sie von dem Prozessor 108 erneut abgerufen wird, während sie sich im Cache befindet, oder dass die Anweisung 114 nicht-zeitlich ist und es daher unwahrscheinlich ist, dass sie vom Prozessor 108 erneut abgerufen wird, während sie sich im Cache befindet. Eine Anweisung kann beispielsweise als zeitlich markiert sein, wenn die Wahrscheinlichkeit, dass sie erneut abgerufen wird, während sie sich im Cache befindet, größer ist als eine Schwellenwahrscheinlichkeit, und sie kann als nicht-zeitlich markiert sein, wenn die Wahrscheinlichkeit, dass sie erneut abgerufen wird, während sie sich im Cache befindet, nicht größer als die Schwellenwahrscheinlichkeit ist.
-
Die zeitlichen Lokalitätsattribute 116 können auch Werte enthalten, die angeben, wie wahrscheinlich es ist, dass die Anweisung 114 vom Prozessor 108 erneut abgerufen wird, wie etwa einen numerischen Wert, der diese Wahrscheinlichkeit repräsentiert. In manchen Fällen können die zeitlichen Lokalitätsattribute 116 eine der Anweisung 114 zugeordnete Verwendungszählung enthalten. Die Verwendungszählung kann jedes Mal, wenn die Anweisung 114 vom Prozessor 108 erneut abgerufen wird, vom Anweisungscache 110 erhöht werden. In manchen Fällen können die zeitlichen Lokalitätsattribute 116 dem Datenblock, der die Anweisung 114 enthält und im Cacheeintrag 112 gespeichert ist, zugeordnet werden.
-
Der Anweisungscache 110 kann die jeder Anweisung 114 zugeordneten zeitlichen Lokalitätsattribute 116 zur Feststellung verwenden, ob das Speichern der Anweisung 114 im Anweisungscache 110 die Leistung des Prozessors 108 verbessern wird, oder ob die Anweisung 114 aus dem Cache zugunsten einer anderen Anweisung geräumt werden sollte, bei der es wahrscheinlicher ist, dass sie erneut vom Prozessor 108 abgerufen wird. Falls beispielsweise der Anweisungscache 110 voll ist und der Prozessor 108 eine Anweisung abruft, kann der Anweisungscache 110 die Anweisung 114 identifizieren, bei der es auf Grundlage der zeitlichen Lokalitätsattribute 116 am wenigsten wahrscheinlich ist, dass sie vom Prozessor 108 erneut abgerufen wird. Falls, auf Grundlage der zeitlichen Lokalitätsattribute 116, die Wahrscheinlichkeit größer ist, dass die angeforderte Anweisung erneut vom Prozessor 108 abgerufen wird, als die Anweisung 114, kann der Anweisungscache 110 die Anweisung 114 räumen und die angeforderte Anweisung speichern. Der Anweisungscache 110 kann festlegen, welche Anweisung mit einer höheren Wahrscheinlichkeit abgerufen wird, indem er die zeitlichen Lokalitätsattribute 116, die jeder Anweisung zugeordnet sind, vergleicht. Der Anweisungscache 110 kann beispielsweise feststellen, dass eine Anweisung 114 mit einer niedrigen Verwendungszählung zugunsten einer Anweisung 114 mit einer höheren Verwendungszählung geräumt werden soll.
-
Wie gezeigt enthält die Umgebung 100 einen Speicher 120. Der Speicher 120 kann eine beliebige Speicherart enthalten und kann die Form eines volatilen und/oder nicht-volatilen Speichers haben, einschließlich, aber nicht beschränkt auf magnetische Medien, optische Medien, Speicher mit wahlfreiem Zugriff (RAM), Nur-Lese-Speicher (ROM), entfernbare Medien, Flash-Speicher oder jede andere lokale oder dezentrale Speicherkomponente. Der Speicher 120 enthält eine Softwareanwendung 102. In manchen Implementierungen kann die Softwareanwendung 102 ein ausführbares Programm sein, das aus einer übergeordneten Programmiersprache, wie etwa beispielsweise JAVA, C, C++ oder andere Programmiersprachen kompiliert wurde. Die Softwareanwendung 102 kann auch innerhalb eines Interpreters oder einer anderen virtuellen Umgebung, wie einer virtuellen Maschine, ausgeführt werden. Die Softwareanwendung 102 kann eine oder mehrere Anweisungsregionen 104 enthalten. Die Anweisungsregionen 104 enthalten eine oder mehrere Anweisungen 106. Die Anweisungsregionen 104 können durch Grenzen markiert sein, wie eine Start- und Endspeicheradresse, eine Start- und Endzeilennummer innerhalb einer Quellcodedatei, eine Funktion des Verfahrensnamens, einen Dateinamen oder andere Grenzen. Jede der einen oder mehreren Anweisungen 106 kann eine Anweisung in Maschinensprache, die vom Prozessor 108 ausführbar ist, sein. Die Anweisungen 106 können gemäß eines bestimmten Anweisungsformats, das dem Prozessor 108 zugeordnet ist, formatiert werden.
-
Die Umgebung 100 enthält auch einen Anwendungsprofiler 118. Während des Betriebs analysiert der Anwendungsprofiler 118 die Softwareanwendung 102 zur Erstellung der zeitlichen Lokalitätsattribute 116. In manchen Implementierungen kann der Anwendungsprofiler 118 das Ausführungsverhalten der Softwareanwendung 102 beobachten, um festzustellen welche Anweisungsregionen 104 und/oder Anweisungen 106 wahrscheinlich vom Prozessor 108 während der Ausführung der Anweisungsregionen 104 und/oder Anweisungen 106, die immer noch im Anweisungscache 110 gespeichert sind, erneut abgerufen werden. Der Anwendungsprofiler 118 kann beispielsweise die Anzahl der Prozessorzyklen zwischen aufeinanderfolgenden Ausführungen einer bestimmten Anweisung 106 verfolgen und vorhersagen, ob die bestimmte Anweisung 106 im Anweisungscache 110 immer noch gespeichert wäre, wenn sie erneut ausgeführt würde. In manchen Fällen kann der Anwendungsprofiler 118 die Softwareanwendung 102 ausführen und sein Cacheverhalten überwachen oder emulieren, um festzustellen, ob die bestimmte Anweisung 106 immer noch im Anweisungscache 110 gespeichert sein würde. Der Anwendungsprofiler 118 kann auch die Softwareanwendung 102 beobachten, während sie ausgeführt wird, und beobachten, welche Anweisungsregionen 104 und Anweisungen 106 erneut abgerufen werden, während sie immer noch im Anweisungscache 110 gespeichert sind, um die zeitliche Lokalität festzustellen. Der Anwendungsprofiler 118 kann auch historische Ausführungsdaten für die Softwareanwendung 102, wie Protokolle oder andere Daten, analysieren, um festzustellen, welche Anweisungsregionen 104 und Anweisungen 106 erneut abgerufen werden, während sie noch im Anweisungscache 110 gespeichert sind.
-
Der Anwendungsprofiler 118 kann Profilinganweisungen in die Softwareanwendung 102 einfügen, um Daten über ihr Ausführungsverhalten zu sammeln. Der Anwendungsprofiler 118 kann beispielsweise eine bestimmte Anweisung 106 modifizieren, so dass jedes Mal, wenn die Anweisung 106 ausgeführt wird, die Profilinganweisung ausgeführt wird. Der Anwendungsprofiler 118 kann diese Daten analysieren, um die Wahrscheinlichkeit festzustellen, dass die Anweisung 106 erneut abgerufen wird, während sie noch im Anweisungscache 110 gespeichert ist, und er kann zeitliche Lokalitätsattribute 116 erzeugen, die der Anweisung 106 zugeordnet sind, um diese Wahrscheinlichkeit wiederzugeben.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 den Quellcode der Anwendung 102 vor Kompilierung und Ausführung der Softwareanwendung 102 untersuchen. Der Anwendungsprofiler 118 kann beispielsweise bestimmte Anweisungsregionen 104 als zeitlich markieren, wie etwa durch Einfügen von Indikationen in den Quellcode der Softwareanwendung 102 am Anfang und Ende der zu markierenden bestimmten Region 104. Ein Compiler kann dann diese Indikatoren in Direktiven übersetzen, um den Anweisungscache 110 darüber zu informieren, dass die bestimmte Anweisungsregion 104 zeitlich ist.
-
In manchen Fällen kann der Anwendungsprofiler 118 Anweisungen einfügen, um bestimmte Anweisungen explizit aus dem Anweisungscache 110 am Ende der Anweisungsregion 104 zu räumen. Wenn beispielsweise auf eine nicht-zeitliche Anweisung nur im Rahmen einer Schleife innerhalb einer bestimmten Funktion zugegriffen wird, kann der Anwendungsprofiler 118 eine Anweisung zum Löschen bestimmter Cacheeinträge, die der Schleife aus dem Anweisungscache 110 am Ende der bestimmten Funktion entsprechen, einfügen. Der Anwendungsprofiler 118 kann auch Direktiven einfügen, um herbeizuführen, dass Anweisungen auf Grundlage der zeitlichen Lokalität auf verschiedenen Ebenen des Cache eingefügt werden.
-
Die bestimmten Techniken, die für die Markierung der Anweisungsregionen als zeitlich oder nicht-zeitlich verwendet werden, können von den Details der bestimmten Implementierung des Anweisungscache 110 abhängen. Ein Cacheeintrag könnte beispielsweise den Anweisungscache 110 komplett umgehen und direkt in einen Anweisungsabrufpuffer, der dem Prozessor 108 zugeordnet ist, eingefügt werden. Alternativ könnte der Cacheeintrag in eine Räumungsrichtlinie des Anweisungscache 110 als am wenigsten zuletzt verwendet (LRU) eingefügt werden, so dass er vor einer anderen Zeile im gleichen Satz aus dem Anweisungscache 110 geräumt wird. Es sollte beachtet werden, dass selbst wenn sich eine nicht-zeitliche Zeile in einer kurzfristigen Schleife befinden sollte, so dass durch das Vorhandensein der Zeile in der LRU-Position des Anweisungscache 110 die kurzfristigen zeitlichen Qualitäten der Schleife abgedeckt werden, während gleichzeitig angegeben wird, dass die Zeile nicht mehr im Cache sein muss nachdem die Schleife abgeschlossen ist.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 durch Einfügen explizierter Regionsbeginn- und Endanweisungen nicht-zeitliche Anweisungsregionen markieren. Eine StartNonTemporal Anweisung, die beispielsweise am Anfang einer Funktion oder eines Basisblocks eingefügt wird, kann angeben, dass alle nachfolgenden Anweisungen nicht-zeitlich sind. Eine EndNonTemporal Anweisung kann anzeigen, dass nachfolgende Anweisungen jetzt der normalen Cachingrichtlinie unterliegen. Ähnliche Anweisungen können dazu verwendet werden, um Regionen als zeitlich zu markieren oder als Regionen, die bestimmte zeitliche Lokalitätsattribute teilen. Um das Schachteln von Funktionsaufrufen zu ermöglichen, können die Start- und Endanweisungen einen internen Zähler erhöhen und verringern. Wenn der Zähler beispielsweise ungleich Null ist, dann kann der Prozessor 108 alle eingehenden Cacheeinträge als nicht-zeitlich behandeln. In manchen Fällen kann der interne Zähler über XSAVE Anweisungen kontextgeschaltet werden, da jede Schachtelzählung prozessspezifisch sein kann.
-
In manchen Fällen kann der Anwendungsprofiler 118 Anweisungen einfügen, um Cacheeinträge am Ende eines Basisblocks oder einer Funktion explizit zu räumen, wie etwa durch Einfügen einer CLFLUSH Anweisung. Des Weiteren kann, wenn der Anwendungsprofiler 118 feststellt, dass eine niedrigere Cacheebene, wie L1, ein angebrachtes Ziel für eine nicht-zeitliche Zeile ist, eine PREFETCHLn Anweisung verwendet werden, um die Anweisungszeilen in die entsprechende Cacheebene zu bringen.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 eine ganze Speicherseite als nicht-zeitlich oder zeitlich markieren, wie etwa durch Verwendung eines ungenutzten oder reservierten Bits im Seitentabelleneintrag für die Seite. In manchen Fällen könnte dieses Bit ein neu zugewiesenes Bit auf dem Seitentabelleneintrag sein. Eine neue Semantik könnte auch so verwendet werden, dass in einem x86-Kontext, wenn eine Seite als ausführbar markiert wird, die Seite immer als schreibgeschützt betrachtet wird und das vorhandene beschreibbare Bit als ein zeitlich Indikator neu definiert wird.
-
Der Anwendungsprofiler 118 kann mehrere Aliase von bestimmten Anweisungsregionen erzeugen, so dass ein Alias aufgerufen wird, wenn die Anweisungsregion als zeitlich gilt, und ein anderer aufgerufen wird, wenn die Anweisungsregion als nicht-zeitlich gilt. In manchen Fällen kann der Anwendungsprofiler 118 einen Seitenband-Bitvektor außerhalb des Anweisungscaches 110 aufrechterhalten. Jedes Bit im Bitvektor kann den zeitlich-Status eines bestimmten Cacheeintrags im Anweisungscache 110 repräsentieren.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 jeder Anweisung ein Anweisungspräfix hinzufügen, das ihre vorhergesagte nächste Wiederverwendung angibt. In einer x86 Architektur haben viele Anweisungspräfixe keinen Effekt (beispielsweise die meisten Segmente). Diese Präfixe können verwendet werden, um jede Anweisung als zeitlich oder nicht-zeitlich zu markieren. In manchen Fällen kann jedes Präfix grobkörnig (beispielsweise sehr weit, mittel, nah) sein, um eine relative zeitliche Lokalität der Anweisung anderen Ebenen der Cachehierarchie gegenüber zur Verwendung bei der Partitionierung anzugeben. Das Präfix kann auch ein feinkörniger Indikator sein, wie etwa ein Zähler, der die Anzahl der Anweisungszyklen seit der letzten Verwendung der Anweisung anzeigt.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 während der Ausführung eine ganze Speicherseite als nicht-zeitlich markieren, falls sie nur nicht-zeitliche Anweisungen enthält. In manchen Fällen kann dies durch Aktualisierung eines Attributs auf der Speicherseite erzielt werden. Der Anwendungsprofiler 118 kann auch Anweisungen 106 innerhalb der Softwareanwendung 102 mit einem Präfix, das die nächste vorhergesagte Verwendung der Anweisung 106 angibt, markieren.
-
In manchen Fällen kann der Anwendungsprofiler 118 mikroarchitektonische Prädiktoren (beispielsweise Verzweigungsprädikatoren) verwenden, um die zeitliche Lokalität bestimmter Anweisungen oder Anweisungsregionen festzustellen. Verzweigungsprädikatoren sind Komponenten, die versuchen, das Ergebnis bedingter Sprunganweisungen (beispielsweise „if/else“ Anweisungen) vorherzusagen, um das Abrufen und Ausführen von Anweisungen fortzusetzen, anstatt auf die Ausführung der bedingten Sprunganweisung zu warten. Ein Verzweigungsprädikator kann beispielsweise eine bedingte Überprüfung identifizieren, ob der Wert einer bestimmten Variablen größer als 5 ist. Auf Grundlage eines oder mehrerer Faktoren (nachfolgend besprochen) kann der Verzweigungsprädikator vorhersagen, ob die Bedingung als „true“ (was zu der von der Bedingung festgelegten Verzweigung führt) oder „falsch“ (was dazu führt, dass der Verzweigung nicht gefolgt wird) ausgewertet wird. Anweisungen von der vorhergesagten Verzweigung können abgerufen und spekulativ ausgeführt werden. Falls die Ausführung der bedingten Anweisung endet und die Vorhersage korrekt war, wird die Ausführung der spekulativen Verzweigung hinunter weiter ausgeführt. Falls die Ausführung der bedingten Anweisung endet und die Vorhersage nicht korrekt war, werden die spekulativ ausgeführten Anweisungen ausgesondert und die Ausführung folgt der korrekten Verzweigung entlang. In manchen Fällen kann ein Verzweigungsprädikator eine jeder Vorhersage zugeordnete Konfidenz festlegen. Diese Konfidenz kann diskrete Werte enthalten (beispielsweise „Verzweigung stark gefolgt“, „Verzweigung schwach gefolgt“, „Verzweigung stark nicht gefolgt“, „Verzweigung schwach nicht gefolgt“) oder einen numerischen Wert, der ein Konfidenzniveau angibt, beinhalten.
-
In manchen Implementierungen kann der Anwendungsprofiler 118 die von den Verzweigungsprädiktoren erzeugten Vorhersagen dazu verwenden, um die zeitliche Lokalität für bestimmte Anweisungen oder Anweisungsregionen festzustellen. In manchen Fällen kann der Anwendungsprofiler 118 jede Vorhersage als eine Angabe der zeitlichen Lokalität einer bestimmten Verzweigung behandeln. Wenn ein Verzweigungsprädiktor beispielsweise vorhersagt, dass einer bestimmten Verzweigung gefolgt wird, kann der Anwendungsprofiler 118 den der bestimmten Verzweigung zugeordneten Cacheeintrag als zeitlich markieren. Wenn ein Verzweigungsprädiktor vorhersagt, dass einer bestimmten Verzweigung nicht gefolgt wird, kann der Anwendungsprofiler 118 den der bestimmten Verzweigung zugeordneten Cacheeintrag als nicht-zeitlich markieren. In manchen Fällen kann der Anwendungsprofiler 118 bei der Festlegung der zeitlichen Lokalität ein jeder Vorhersage zugeordnetes Konfidenzniveau berücksichtigen, wie etwa durch Markierung von Cacheeinträgen, die Verzweigungen zugeordnet sind, für die eine „stark gefolgt“ Konfidenz vorhergesagt wurde, als zeitlich. Der Anwendungsprofiler 118 kann außerdem die ermittelte Richtigkeit einer bestimmten Vorhersage als Angabe der zeitlichen Lokalität verwenden. Wenn ein Verzweigungsprädiktor beispielsweise vorhersagt, dass einer bestimmten Verzweigung gefolgt wird und tatsächlich einer anderen Verzweigung gefolgt wird, kann der Anwendungsprofiler 118 den der falsch vorhergesagten Verzweigung zugeordneten Cacheeintrag als nicht-zeitlich markieren.
-
2 ist ein Blockdiagramm einer Systemkonfiguration 200, das den Informationsfluss zwischen einem Prozessor 108, einem Anweisungscache 110 und einem Speicher 120 zur Verwaltung des Anweisungscache auf Grundlage der zeitlichen Lokalität der zwischengespeicherten Anweisungen zeigt. Bei 205 ruft der Prozessor 108 die erste Anweisung zur Ausführung ab. Bei 210 stellt der Anweisungscache 110 fest, dass die erste Anweisung nicht im Cache gespeichert ist. Bei 215 ruft der Anweisungscache 110 die erste Anweisung und die dazugehörigen zeitlichen Attribute aus dem Speicher 120 ab. Bei 220 speichert der Anweisungscache 110 die erste Anweisung in den dazugehörigen zeitlichen Attributen. Bei 225 sendet der Anweisungscache 110 die erste Anweisung an den Prozessor 108 zurück.
-
Bei 230 ruft der Prozessor 108 eine zweite Anweisung zur Ausführung ab. Bei 235 stellt der Anweisungscache 110 fest, dass die zweite Anweisung nicht im Cache gespeichert ist. Bei 240 ruft der Anweisungscache 110 die zweite Anweisung und die dazugehörigen zeitlichen Attribute aus dem Speicher 120 ab. Bei 245 stellt der Anweisungscache 110 fest, dass er voll ist.
-
Bei 250 räumt der Anweisungscache 110 die erste Anweisung auf Grundlage der zugeordneten zeitlichen Attribute. Der Anweisungscache 110 kann beispielsweise feststellen, dass die zweite Anweisung mit höherer Wahrscheinlichkeit vom Prozessor 108 erneut abgerufen werden wird als die erste Anweisung und kann als Reaktion darauf die erste Anweisung räumen. Diese Feststellung kann wie vorstehend unter Bezugnahme auf 1 beschrieben durchgeführt werden. Bei 255 speichert der Anweisungscache 110 die zweite Anweisung und zugeordnete zeitliche Attribute im Cache. Bei 260 sendet der Anweisungscache 110 die zweite Anweisung an den Prozessor 108 zurück.
-
3A ist ein Blockdiagramm, das einen beispielhaften Zustand 300 eines Anweisungscache 302 vor einer Räumungsentscheidung auf Grundlage zeitlicher Lokalität zeigt. Wie gezeigt enthält der Anweisungscache 302 zeitliche Anweisungen 302a–c und die nicht-zeitliche Anweisung 306. Es soll eine neue zeitliche Anweisung 308 im Anweisungscache 302 gespeichert werden.
-
3B ist ein Blockdiagramm, das einen beispielhaften Zustand 350 des Anweisungscache 302 nach einer Räumungsentscheidung auf Grundlage zeitlicher Lokalität zeigt. Der Anweisungscache 302 enthält immer noch die zeitlichen Anweisungen 302ac. Die nicht-zeitliche Anweisung 306 wurde aus dem Anweisungscache 302 geräumt und durch die neue zeitliche Anweisung 308 ersetzt.
-
4A ist ein Blockdiagramm, das einen beispielhaften Zustand 400 eines Anweisungscache 402 vor einer Räumungsentscheidung auf Grundlage beobachteter Eingabenutzung zeigt. Wie gezeigt, enthält der Anweisungscache 402 Anweisungen 404a–d. Jede der Anweisungen 404a–d enthält einen Wiederverwendungs-Zählwert 406ad. In manchen Implementierungen kann der Anweisungscache 402 den Wiederverwendungs-Zählwert 406a–d jedes Mal, wenn die Anweisung aus dem Cache 402 abgerufen wird, erhöhen. Es soll eine neue Anweisung 408 in dem Anweisungscache 402 gespeichert werden.
-
4B ist ein Blockdiagramm, das einen beispielhaften Zustand 450 eines Anweisungscache 402 nach einer Räumungsentscheidung auf Grundlage beobachteter Eingabenutzung zeigt. Der Anweisungscache 402 enthält immer noch die Anweisungen 404b–d. Die Anweisung 404a wurde zugunsten der neuen Anweisung 408 aus dem Anweisungscache 402 geräumt. Der Wiederverwendungs-Zählwert 410 wurde der neuen Anweisung 408 zugeordnet und auf Null initialisiert. In manchen Fällen kann der Anweisungscache 402 Anweisungen räumen, die einen Wiederverwendungs-Zählwert von Null haben, was angibt, dass sie nicht-zeitlich sind. Der Anweisungscache 402 kann auch die Anweisung mit dem niedrigsten Wiederverwendungs-Zählwert, die aktuell im Anweisungscache 402 gespeichert ist, räumen. In manchen Fällen kann der Anweisungscache 402 eine Anweisung räumen, die einen Wiederverwendungs-Zählwert von Null hat, selbst wenn die Anweisung die zuletzt verwendete Anweisung im Cache ist. Wenn andere Cacheeinträge beispielsweise wesentlich höhere Wiederverwendungs-Zählwerte haben als die zu räumende Anweisung und die Anweisung, die die zu räumende Anweisung ersetzen soll, als zeitlich markiert ist, kann die Anweisung auch geräumt werden, wenn sie nicht die zuletzt verwendete Anweisung im Cache ist.
-
5 ist ein Flussdiagramm eines beispielhaften Prozesses 500 zur Verwaltung eines Anweisungscache auf Grundlage der zeitlichen Lokalität der gecachten Anweisungen. Bei 505 wird eine Anforderung für eine erste Anweisung, die in einer Softwareanwendung enthalten ist, empfangen.
-
Bei 510 wird ein erster Cacheeintrag, der der ersten Anweisung entspricht, in einer Cachestruktur gespeichert. In manchen Fällen beinhaltet das Speichern des ersten Cacheeintrags das Speichern des ersten Cacheeintrags in der Cachestruktur auf einer bestimmten Prioritätsebene auf Grundlage der zeitlichen Lokalitätsattribute und eine Festlegung, dass der erste Cacheeintrag entfernt werden soll, beruht mindestens zum Teil auf der bestimmten Prioritätsebene. In manchen Implementierungen beinhaltet der erste Cacheeintrag eine zeitliche Markierung, die angibt, ob wahrscheinlich auf den ersten Cacheeintrag zugegriffen wird, und der Wert der zeitlichen Markierung des ersten Cacheeintrags wird auf Grundlage der zeitlichen Lokalitätsattribute festgelegt, und eine Festlegung, dass der erste Cacheeintrag entfernt werden sollte, beruht zumindest teilweise auf dem Wert der zeitlichen Markierung.
-
Bei 515 wird eine Anforderung für eine zweite Anweisung, die in der Softwareanwendung enthalten ist, empfangen, wobei die zweite Anweisung sich von der ersten Anweisung unterscheidet. Bei 520 erfolgt als Reaktion auf den Empfang einer Anforderung der ersten Anweisung eine Feststellung, dass ein Cacheeintrag aus der Cachestruktur entfernt werden muss, um Platz zur Speicherung eines zweiten Cacheeintrags, der der zweiten Anweisung entspricht, zu schaffen.
-
Bei 525 erfolgt als Reaktion auf die Feststellung, dass der Cacheeintrag entfernt werden muss, eine Feststellung, wie etwa durch die Cachestruktur oder einer der Cachestruktur zugeordneten Cachesteuerung, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, auf Grundlage der zeitlichen Lokalitätsattribute, die mindestens einer, der ersten Anweisung oder der zweiten Anweisung, zugeordnet sind, aus der Cachestruktur entfernt werden soll. In manchen Fällen repräsentieren die zeitlichen Lokalitätsattribute eine Wahrscheinlichkeit, dass die zusätzlichen Anforderungen für eine zugeordnete Anweisung empfangen werden, während die zugeordnete Anweisung im Cache gespeichert ist. In manchen Implementierungen enthält der erste Cacheeintrag eine Verwendungsmarkierung, die angibt, ob auf den ersten Cacheeintrag innerhalb des Cache neu zugegriffen wurde. Die Feststellung, dass der erste Cacheeintrag entfernt werden sollte beruht zumindest zum Teil auf der Verwendungsmarkierung. In manchen Fällen enthalten die zeitlichen Lokalitätsattribute historische Ausführungsdaten für die Softwareanwendung. Die zeitlichen Lokalitätsattribute können einen zeitlichen Indikator enthalten, der angibt, ob es wahrscheinlich oder unwahrscheinlich ist, dass zusätzliche Anforderungen der zugeordneten Anweisung empfangen werden. In manchen Fällen sind die zeitlichen Lokalitätsattribute einer bestimmten Anweisungsregion, die eine oder mehrere Anweisungen enthält, zugeordnet, und repräsentieren eine Wahrscheinlichkeit, dass zusätzliche Anforderungen für Anweisungen, die in der Anweisungsregion enthalten sind, empfangen werden. In manchen Fällen werden die zeitlichen Lokalitätsattribute zumindest teilweise während der Ausführung der Softwareanwendung ermittelt. Die zeitlichen Lokalitätsattribute können auch zumindest teilweise auf Grundlage der Verzweigungsvorhersageergebnisse für die Softwareanwendung ermittelt werden.
-
Bei 530 wird, als Reaktion auf die Feststellung, dass der erste Cacheeintrag, der der ersten Anweisung entspricht, entfernt werden soll, der erste Cacheeintrag aus der Cachestruktur entfernt. Bei 535 wird, als Reaktion auf die Entfernung des ersten Cacheeintrags, der zweite Cacheeintrag in der Cachestruktur gespeichert.
-
6 ist ein Flussdiagramm eines beispielhaften Prozesses 600 zur Feststellung zeitlicher Lokalitätsattribute für eine Softwareanwendung. Bei 605 wird ein erster zeitlicher Lokalitätsindikator für eine erste Anweisungsregion einer Softwareanwendung ermittelt und ein zweiter zeitlicher Lokalitätsindikator für eine zweite Anweisungsregion der Softwareanwendung ermittelt. Die erste und die zweite Anweisungsregion sind unterschiedliche Anweisungsregionen. In manchen Fällen repräsentiert der erste und der zweite zeitliche Lokalitätsindikator Wahrscheinlichkeiten, dass Anweisungen, die in der ersten und der zweiten Anweisungsregion enthalten sind, erneut ausgeführt werden, während die Anweisungen in einer Cachestruktur gespeichert sind. In diesem Beispiel wird angenommen, dass der zweite zeitliche Lokalitätsindikator angibt, dass Anweisungen in der zweiten Anweisungsregion mit größerer Wahrscheinlichkeit erneut ausgeführt werden als Anweisungen in der ersten Anweisungsregion.
-
Die Ermittlung der zeitlichen Lokalitätsindikatoren kann auf vielerlei geeignete Weisen erfolgen. In manchen Fällen beruhen die Feststellungen des ersten und des zweiten zeitlichen Lokalitätsindikators beispielsweise zumindest teilweise auf historischen Ausführungsdaten für die Softwareanwendung. Die Feststellungen können zumindest teilweise auch auf Verzweigungsvorhersageanalysen der Softwareanwendung beruhen. In wieder anderen Implementierungen können die Feststellungen die Beobachtung der Verwendung von Anweisungen in der ersten Anweisungsregion und der zweiten Anweisungsregion während der Ausführung der Softwareanwendung und die Aktualisierung des ersten und des zweiten zeitlichen Lokalitätsindikators auf Grundlage der beobachteten Verwendung beruhen. Die Feststellungen können auch die Markierung der ersten Anweisungsregion als nicht-zeitlich und der zweiten Anweisungsregion als zeitlich umfassen. In manchen Fällen umfassen die Feststellungen die Markierung der ersten und der zweiten Anweisungsregion mit numerischen Werten, die die Wahrscheinlichkeiten repräsentieren, dass die in der ersten und der zweiten Anweisungsregion enthaltenen Anweisungen erneut ausgeführt werden, während die Anweisungen in der Cachestruktur gespeichert sind, worin die numerische Wertmarkierung der zweiten Anweisungsregion größer ist als die numerische Wertmarkierung der ersten Anweisungsregion.
-
Bei 610 werden der erste zeitliche Lokalitätsindikator und der zweite zeitliche Lokalitätsindikator der Cachestruktur bereitgestellt. Die Cachestruktur kann so konfiguriert werden, dass sie Cacheeinträge, die Anweisungen der Softwareanwendung repräsentieren, speichert, während die Anweisungen von einem Prozessor, der die Softwareanwendung ausführt, ausgeführt werden. Die Cachestruktur entfernt einen ersten Cacheeintrag, der eine Anweisung repräsentiert, die in der ersten Anweisungsregion enthalten ist, um Platz für die Speicherung eines zweiten Cacheeintrags zu schaffen, der eine Anweisung repräsentiert, die in der zweiten Anweisungsregion enthalten ist. Dies auf Grundlage des ersten zeitlichen Lokalitätsindikators und des zweiten zeitlichen Lokalitätsindikators, die angeben, dass bei den Anweisungen aus der zweiten Anweisungsregion eine höhere Wahrscheinlichkeit einer erneuten Ausführung besteht als bei den Anweisungen in der ersten Anweisungsregion.
-
7 ist ein Blockdiagramm der Rechenvorrichtungen 700, 750, die zur Implementierung der in diesem Dokument beschriebenen Systeme und Verfahren, entweder als Client oder als Server oder als eine Vielzahl von Servern, verwendet werden können. Die Rechenvorrichtung 700 dient zur Darstellung verschiedener digitaler Computer, wie Laptops, Desktops, Workstations, Personal Digital Assistants, Server, Blade Server, Mainframes und anderer geeigneter Computer. Computergerät 750 soll verschiedene Formen mobiler Geräte, wie Personal Digital Assistants, Mobiltelefone, Smartphones und andere ähnliche Computergeräte, darstellen. Zusätzlich können die Computer 700 oder 750 ebenfalls USB(Universal Serial Bus)-Laufwerke beinhalten. Die USB-Speichermedien können Betriebssysteme und andere Anwendungen speichern. Die USB-Flashlaufwerke können Eingabe-/Ausgabekomponenten, wie z. B. einen kabellosen Transmitter oder USB-Anschluss enthalten, der in eine USB-Schnittstelle eines anderen Computers eingesteckt werden kann. Die hier gezeigten Komponenten, ihre Verbindungen und Beziehungen und ihre Funktionen sollen nur exemplarisch sein und sollen Implementierungen der in diesem Dokument beschriebenen und/oder beanspruchten Erfindungen nicht einschränken.
-
Die Rechenvorrichtung 700 beinhaltet einen Prozessor 702, Speicher 704, ein Speichergerät 706, eine Hochgeschwindigkeitsschnittstelle 708, die mit dem Speicher 704 und den Hochgeschwindigkeits-Erweiterungsanschlüssen 710 verbunden ist und eine langsame Schnittstelle 712, die mit einem langsamen Bus 714 und dem Speichergerät 706 verbunden ist. Alle der Komponenten 702, 704, 706, 708, 710 und 712 sind mithilfe verschiedener Busse miteinander verbunden und können an einer gemeinsamen Hauptplatine oder auf andere Weise, wie geeignet, angebracht sein. Der Prozessor 702 kann Ausführungsanweisungen innerhalb der Rechenvorrichtung 700 verarbeiten, einschließlich Anweisungen, die im Speicher 704 oder in der Speichervorrichtung 706 gespeichert sind, um die grafischen Informationen für ein GUI auf einem externen Eingabe-/Ausgabegerät, z. B. auf dem Bildschirm 716 gekoppelt mit der High-Speed-Schnittstelle 708, anzuzeigen. In anderen Implementierungen können mehrere Prozessoren und/oder mehrere Busse verwendet sein, wie angemessen, zusammen mit mehreren Speichern und Speichertypen. Außerdem können mehrere Computergeräte 700 verbunden sein, wobei jedes Gerät Teile der nötigen Operationen bereitstellt (z. B. als Serverbank, eine Gruppe von Blade-Servern oder ein Multiprozessor-System).
-
Der Speicher 704 zeichnet Informationen in der Rechenvorrichtung 700 auf. In einer Implementierung ist der Speicher 704 ein flüchtiges Speichergerät oder flüchtige Speichergeräte. In einer anderen Implementierung ist der Speicher 704 ein nicht flüchtiges Speichergerät oder nicht flüchtige Speichergeräte. Der Speicher 704 kann auch eine andere Form von computerlesbarem Medium sein, zum Beispiel ein magnetischer oder optischer Datenträger.
-
Das Speichergerät 706 ist dafür geeignet, Massenspeicherung für die Rechenvorrichtung 700 bereitzustellen. In einer Ausführungsform kann das Speichergerät 706 ein computerlesbares Medium sein oder enthalten, zum Beispiel ein Diskettengerät, ein Festplattengerät, ein optisches Datenträgergerät oder ein Bandgerät, ein Flash-Speicher oder ein anderes ähnliches Solid-State-Speichergerät oder eine Reihe von Geräten, zum Beispiel Geräte in einem Storage Area Network oder anderen Konfigurationen. Ein Computerprogrammprodukt kann konkret in einem Informationsträger ausgeführt sein. Das Computerprogrammprodukt kann auch Anweisungen enthalten, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 704, das Speichergerät 706 oder der Prozessorspeicher 702.
-
Die schnelle Schnittstelle 708 verwaltet bandbreite-intensive Operationen für die Rechenvorrichtung 700, während die langsame Schnittstelle 712 Operationen mit niedrigerer Bandbreite verwaltet. Eine solche Zuordnung von Funktionen ist nur exemplarisch. In einer Ausführungsform ist der High-Speed-Controller 708 mit Speicher 704, Display 716 (z. B. über einen Grafikprozessor oder -beschleuniger) und mit High-Speed-Erweiterungsanschlüssen 710 gekoppelt, die verschiedene Erweiterungskarten aufnehmen können (nicht dargestellt). In der Implementierung ist Low-Speed-Schnittstelle 712 mit Speichervorrichtung 706 und Low-Speed-Erweiterungsanschlüssen 714 verbunden. Der Low-Speed-Erweiterungsanschluss, der verschiedene Kommunikationsanschlüsse (z. B. USB, B, Ethernet, Funkethernet) beinhalten kann, kann an ein oder mehrere Eingabe-/Ausgabe-Geräte, wie eine Tastatur, ein Zeigegerät, einen Scanner oder ein Netzwerkgerät, wie einen Switch oder Router, z. B. durch einen Netzwerkadapter gekoppelt sein.
-
Die Rechenvorrichtung 700 kann in einer Reihe verschiedener Formen implementiert sein, wie in der Figur gezeigt. Es kann zum Beispiel als Standardserver 720 oder mehrmals in einer Gruppe solcher Server implementiert sein. Es kann auch als Teil eines Rackserversystems 724 implementiert sein. Außerdem kann es in einem Personal Computer, wie dem Laptop-Computer 722, implementiert sein. Alternativ können Komponenten von Computergerät 700 mit anderen Komponenten in einem mobilen Gerät kombiniert sein (nicht dargestellt), z. B. Gerät 750. Jedes solcher Geräte kann eines oder mehrere Computergeräte 700, 750 enthalten, und ein gesamtes System kann aus mehreren Computergeräten 700, 750 bestehen, die miteinander kommunizieren.
-
Die Rechenvorrichtung 750 beinhaltet einen Prozessor 752, Speicher 764, ein Eingabe-/Ausgabegerät, wie eine Anzeige 754, eine Kommunikationsschnittstelle 766 und einen Sende-Empfänger 768, unter anderen Komponenten. Das Gerät 750 kann auch mit einem Speichergerät ausgestattet sein, zum Beispiel einem Microdrive oder anderem Gerät, um zusätzlichen Speicher bereitzustellen. Alle der Komponenten 750, 752, 764, 754, 766 und 768 sind mithilfe verschiedener Busse miteinander verbunden und mehrere der Komponenten können an einer gemeinsamen Hauptplatine oder auf andere Weise, wie geeignet, angebracht sein.
-
Der Prozessor 752 kann Anweisungen in der Rechenvorrichtung 750 ausführen, zum Beispiel Anweisungen, die in Speicher 764 gespeichert sind. Der Prozessor kann als ein Chipsatz von Chips implementiert werden, die separate und mehrere analoge und digitale Prozessoren beinhalten. Zusätzlich dazu kann der Prozessor mit einer beliebigen Anzahl von Architekturen implementiert werden. Der Prozessor 752 kann beispielsweise ein CISC-Prozessor (Complex Instruction Set Computers), ein RISC-Prozessor (Reduced Instruction Set Computer) oder ein MISC-Prozessor (Minimal Instruction Set Computer) sein. Der Prozessor kann zum Beispiel für die Koordination der anderen Komponenten des Geräts 750 sorgen, zum Beispiel die Kontrolle von Benutzeroberflächen, Anwendungen, die vom Gerät 750 ausgeführt werden, und die drahtlose Kommunikation durch Gerät 750.
-
Der Prozessor 752 kann mit einem Benutzer über Steuerschnittstelle 758 und Displayschnittstelle 756 kommunizieren, die mit einem Display 754 gekoppelt ist. Die Anzeige 754 kann zum Beispiel ein TFT-LCD-Display (Thin-Film-Transistor Liquid Crystal Display) oder eine OLED-Anzeige (organische Leuchtdiode) oder eine andere angemessene Anzeigetechnologie sein. Die Displayschnittstelle 756 kann eine geeignete Schaltung enthalten, die das Display 754 dazu bringt, einem Benutzer grafische und andere Informationen zu präsentieren. Die Steuerschnittstelle 758 kann Befehle von einem Benutzer empfangen und sie für die Sendung an Prozessor 752 umwandeln. Zusätzlich kann eine externe Schnittstelle 762 Kommunikation mit dem Prozessor 752 bereitstellen, beispielsweise, um Nahbereichskommunikation des Geräts 750 mit anderen Geräten zu ermöglichen. Die externe Schnittstelle 762 kann zum Beispiel in einigen Implementierungen eine kabelgebundene Kommunikation bereitstellen, oder in anderen Implementierungen eine drahtlose Kommunikation und es können auch mehrere Schnittstellen verwendet werden.
-
Der Speicher 764 speichert Informationen in der Rechenvorrichtung 750. Der Speicher 764 kann als ein computerlesbares Medium bzw. als eines von mehreren computerlesbaren Medien, als flüchtiger Speicher bzw. als flüchtige Speicher oder als ein nichtflüchtiger Speicher bzw. als nichtflüchtige Speicher implementiert werden. Erweiterungsspeicher 774 kann ebenfalls bereitgestellt und mit dem Gerät 750 über Erweiterungsschnittstelle 772 verbunden werden, die zum Beispiel eine SIMM(Single In Line Memory Module)-Kartenschnittstelle umfassen kann. Ein solcher Erweiterungsspeicher 774 kann zusätzlichen Speicherplatz für Gerät 750 bereitstellen oder er kann auch Anwendungen oder andere Informationen für Gerät 750 speichern. Insbesondere kann Erweiterungsspeicher 774 Anweisungen zum Ausführen oder Ergänzen der oben beschriebenen Prozesse enthalten und er kann außerdem sichere Informationen enthalten. Somit kann Erweiterungsspeicher 774 zum Beispiel als Sicherheitsmodul für Gerät 750 bereitgestellt werden und er kann mit Anweisungen programmiert sein, die die sichere Verwendung von Gerät 750 erlauben. Zusätzlich dazu können über die SIMM-Cards sichere Anwendungen bereitgestellt werden, zusammen mit zusätzlichen Informationen, wie dem Ablegen von Identifizierungsinformationen auf der SIMM-Card auf eine Weise, die nicht gehackt werden kann.
-
Der Speicher 764 kann beispielsweise Flash Speicher und/oder NVRAM-Speicher beinhalten, wie nachstehend erörtert. In einer Implementierung, ist ein Computerprogrammprodukt konkret in einem Informationsträger ausgeführt. Das Computerprogrammprodukt enthält Anweisungen, die, wenn sie ausgeführt werden, ein oder mehrere Verfahren ausführen, wie die oben beschriebenen. Der Informationsträger ist ein computer- oder maschinenlesbares Medium, wie der Speicher 764, die Speichererweiterung 774 oder der Prozessorspeicher 752, das beispielsweise über den Transceiver 768 oder die externe Schnittstelle 762 empfangen werden kann.
-
Das Gerät 750 kann drahtlos über die Verbindungsschnittstelle 766 kommunizieren, die digitale Signalverarbeitungsschaltkreise beinhalten kann, falls erforderlich. Die Verbindungsschnittstelle 766 kann Verbindungen mit verschiedenen Kommunikationstypen oder -protokollen aufbauen, darunter GSM-Sprachanrufe, SMS, EMS, oder MMS-Messaging, CDMA, TD-MA, PDC, WCDMA, CDMA2000 oder GPRS unter anderen. Eine solche Kommunikation kann zum Beispiel über Funkfrequenzempfänger 768 erfolgen. Zusätzlich kann eine Kurzstreckenkommunikation stattfinden, wie unter Verwendung eines Bluetooth-, WLAN- oder anderen solchen Sende-Empfängern (nicht gezeigt). Außerdem kann GPS(Global Positioning System)-Empfängermodul 770 zusätzliche mit der Navigation und dem Ort verbundene drahtlose Daten für Gerät 750 bereitstellen, die ggf. von Anwendungen verwendet werden können, die auf Gerät 750 ausgeführt werden.
-
Das Gerät 750 kann mithilfe des Audio-Codec 760 auch akustisch kommunizieren, das gesprochene Informationen von einem Benutzer empfangen und diese in nutzbare digitale Informationen konvertieren kann. Audio-Codec 760 kann ebenfalls akustische Töne für einen Benutzer erzeugen, zum Beispiel durch einen Lautsprecher zum Beispiel in einem Handgerät von Gerät 750. Solche Töne können Töne von Sprachtelefonanrufen beinhalten, können aufgezeichnete Töne (z. B. Sprachnachrichten, Musikdateien usw.) beinhalten und können auch Töne, die von Applikationen erzeugt werden, die auf Gerät 750 laufen, beinhalten.
-
Die Rechenvorrichtung 750 kann in einer Reihe verschiedener Formen implementiert sein, wie in der Figur gezeigt. Es kann zum Beispiel als Mobiltelefon 780 implementiert werden. Sie kann außerdem als Teil eines Smartphones 782, Personal Digital Assistant (PDA) oder eines anderen ähnlichen Mobilgeräts implementiert sein.
-
In verschiedenen Ausführungen werden Verfahren, die „als Reaktion auf“ oder „als eine Konsequenz von“ eines anderen Verfahrens (z. B. einer Bestimmung oder eine Identifizierung) ausgeführt sind, nicht ausgeführt, wenn das vorherige Verfahren nicht erfolgreich war (z. B. wenn die Bestimmung nicht ausgeführt wurde). Verfahren, die „automatisch“ durchgeführt werden, sind Verfahren, die ohne Eingriff (z. B. eingreifende Benutzereingabe) durchgeführt werden. Merkmale, die in diesem Dokument unter Verwendung des Konjunktivs beschrieben sind, können optionale Implementierungen beschreiben. In manchen Beispielen beinhaltet die „Übertragung“ von einem ersten Gerät auf ein zweites Gerät die Eingabe von Daten in ein Netz zum Empfang durch das zweite Gerät, aber nicht den Empfang der Daten durch das zweite Gerät. Umgekehrt kann der „Empfang“ von einem ersten Gerät den Empfang der Daten aus einem Netz beinhalten, aber nicht die Übertragung der Daten durch das erste Gerät.
-
Das „Bestimmen“ durch ein Computersystem kann beinhalten, dass das Computersystem ein anderes Gerät anfordert, um die Bestimmung durchzuführen und die Resultate an das Computersystem liefert. Außerdem kann das „Anzeigen“ oder das „Präsentieren“ durch ein Computersystem beinhalten, dass das Computersystem Daten sendet, um zu veranlassen, dass ein anderes Gerät die referenzierten Informationen anzeigt oder präsentiert.
-
Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen Tätigkeiten können in digitalen elektronischen Schaltungen oder in Computer-Software, Firmware oder Hardware implementiert werden, einschließlich der in dieser Spezifikation offengelegten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehrerer von ihnen. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d. h. als ein oder mehrere Module von Computerprogrammanweisungen implementiert werden, die auf einem Computer-Speichermedium für die Durchführung durch oder die Kontrolle des Betriebs des datenverarbeitenden Apparats kodiert werden. Alternativ oder zusätzlich können die Programmanweisungen auf einem künstlich erzeugten propagierten Signal, beispielsweise einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal künstlich kodiert werden, das erzeugt wird, um Informationen für die Übertragung auf einen geeigneten Empfängerapparat für die Durchführung durch einen datenverarbeitenden Apparat zu kodieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln oder in ihnen enthalten sein. Außerdem ist ein Computer-Speichermedium zwar kein verbreitetes Signal, aber ein Computer-Speichermedium kann eine Quelle oder ein Bestimmungsort von Computerprogrammanweisungen sein, die in einem künstlich erzeugten verbreiteten Signal kodiert werden. Bei dem Computerspeichermedium kann es sich auch um eine oder mehrere unterschiedliche physische Komponenten oder Medien (z. B. mehrere CDs, Disks oder andere Speichergeräte) handeln bzw. kann das Speichermedium darin enthalten sein.
-
Die in dieser Spezifikation beschriebenen Tätigkeiten können als Tätigkeiten implementiert werden, die von einem datenverarbeitenden Apparat mit Daten durchgeführt werden, die auf einem oder mehreren maschinell lesbaren Speichergeräten gespeichert werden oder von anderen Quellen entgegengenommen werden.
-
Der Begriff „datenverarbeitender Apparat“ umfasst alle Arten von Apparaten, Geräten und Maschinen für die Verarbeitung von Daten, einschließlich beispielsweise durch einen programmierbaren Prozessor, einen Computer, ein System auf einem oder mehreren Chips oder Kombinationen des Vorstehenden. Der Apparat kann logische Schaltungen mit einem Sonderzweck, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung) enthalten. Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Durchführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbank-Managementsystem, ein Betriebssystem, eine plattformunabhängige Laufzeitumgebung, eine virtuelle Maschine oder eine Kombination einer oder mehrerer der genannten darstellt. Der Apparat und die Durchführungsumgebung können verschiedene unterschiedliche Rechnermodell-Infrastrukturen umsetzen, wie Webdienstleistungen, verteilte Rechen- und Grid-Computing-Infrastrukturen.
-
Ein Computerprogramm (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder verfahrensorientierter Sprachen, und das Programm kann in jeder beliebigen Form eingesetzt sein, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Benutzung in einer Rechenumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält (z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern). Ein Computerprogramm kann auf einem Computer oder mehreren Computern eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
-
Die in dieser Spezifikation beschriebenen Verfahren und logischen Abläufe können durch einen oder mehrere programmierbare Prozessoren durchgeführt werden, die ein oder mehrere Computerprogramme ausführen, um Handlungen aufgrund von Eingangsdaten durchzuführen und Ausgabedaten zu erstellen. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
-
Prozessoren, die für die Ausführung eines Computerprogramms geeignet sind, schließen beispielsweise sowohl allgemeine und als auch Spezial-Mikroprozessoren sowie alle Arten eines oder mehrerer Prozessoren jeglicher Art Digitalrechner ein. Im Allgemeinen nimmt ein Prozessor Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind ein Prozessor für das Durchführen von Tätigkeiten gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen, bzw. ist ein Computer operativ an ein solches Speichergerät gekoppelt. Jedoch muss ein Computer solche Geräte nicht haben. Außerdem kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Organizer (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen. Geräte, die für das Speichern von Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Dauerspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetplatten, z. B. interne Festplatten oder herausnehmbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
-
Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige)Monitor, mit welchem dem Benutzer Informationen angezeigt werden, sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Nutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Zusätzlich kann ein Computer mit einem Benutzer durch das Senden und das Erhalten von Dokumenten von einem Gerät, das von einem Benutzer benutzt wird, wechselwirken; beispielsweise durch das Senden von Webseiten an einen Webbrowser durch ein Benutzergerät des Benutzers als Antwort auf Anforderungen des Webbrowsers.
-
Die in dieser Spezifikation dargelegten Ausführungsformen des Patentgegenstandes können in einem Computersystem implementiert werden, das eine Backend-Komponente beinhaltet, z. B. als ein Datenserver oder das eine Middleware-Komponente beinhaltet, z. B. ein Anwendungsserver oder das eine Front-End-Komponente beinhaltet, z. B. ein Anwendercomputer mit einer grafischen Benutzerschnittstelle oder einem Webbrowser, durch den ein Anwender mit einer Implementierung des in dieser Patentschrift dargelegten Patentgegenstandes interagieren kann oder jede beliebige Kombination von einer oder mehrerer solcher Backend-, Middleware- oder Front-End-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetz. Zu Beispielen für Kommunikationsnetze zählen ein lokales Netzwerk („LAN“), ein Fernnetzwerk („WAN“), eine netzübergreifende Verbindung (z. B. das Internet) und Peer-to-Peer Netzwerke (z. B. Ad-Hoc Peer-to-Peer Netzwerke).
-
Das Computersystem kann Anwender und Server beinhalten. Ein Benutzer und Server sind im Allgemeinen voneinander entfernt und interagieren normalerweise über ein Kommunikationsnetzwerk. Die Beziehung zwischen Benutzer und Server erfolgt unter Verwendung von Computerprogrammen, die auf den jeweiligen Computern ausgeführt werden und eine Benutzer-Server-Beziehung zueinander aufweisen. In manchen Ausführungen überträgt ein Server Daten (z. B. eine HTML-Seite) an ein Benutzergerät (z. B. mit dem Ziel, Daten anzuzeigen und Benutzereingaben von einem Benutzer zu erhalten, der mit dem Benutzergerät interagiert). Daten, die am Benutzergerät erzeugt werden (z. B. als Resultat einer Interaktion des Benutzers), können vom Benutzergerät am Server erhalten werden.
-
Zwar enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
-
Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Erfordernis verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge durchgeführt werden müssen oder dass alle dargestellten Tätigkeiten durchgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den oben beschriebenen Ausführungsformen nicht in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
-
Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen beschriebenen Handlungen in einer anderen Reihenfolge ausgeführt werden und dennoch erwünschte Ergebnisse erzielen. Zusätzlich erfordern die in den beigefügten Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder aufeinanderfolgende Reihenfolge, um erwünschte Ergebnisse zu erzielen. Bei bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.
-
Eine beispielhafte Ausführungsform lässt sich zusammenfassen als das Verwalten eines Anwendungscache auf Grundlage zeitlicher Lokalität der zwischengespeicherten Anweisungen. Ein beispielhaftes Verfahren beinhaltet den Empfang einer Anforderung nach einer ersten Anweisung, die in einer Softwareanwendung enthalten ist; das Speichern der ersten Anweisung in einer Cachestruktur; den Empfang einer Anforderung nach einer zweiten Anweisung, die in der Softwareanwendung enthalten ist; die Feststellung, dass ein Cacheeintrag aus der Cachestruktur entfernt werden muss, um Platz für das Speichern der zweiten Anweisung zu schaffen; die Feststellung, dass die erste Anweisung aus der Cachestruktur entfernt werden sollte auf Grundlage der zeitlichen Lokalitätsattribute, die mindestens der ersten Anweisung oder der zweiten Anweisung zugeordnet sind, wobei die zeitlichen Lokalitätsattribute eine Wahrscheinlichkeit repräsentieren, dass zusätzliche Anforderungen für eine zugeordnete Anweisung erhalten werden, während die Anweisung in der Cachestruktur gespeichert ist; Entfernen der ersten Anweisung aus der Cachestruktur; und Speichern der zweiten Anweisung in der Cachestruktur.