-
HINTERGRUND
-
Rechengeräte umfassen typischerweise Speichercontroller, um den Zugriff auf Speicher z. B. durch einen Prozessor, der Daten lesen und schreiben will, zu steuern. Zum Beispiel kann ein Speicher als dynamischer Speicher mit wahlfreiem Zugriff (DRAM – Dynamic Random Access Memory) gestaltet sein, der den ”Hauptspeicher” des Rechengerätes bildet, der verwendet wird, um Daten für die Verwendung durch den Prozessor zu speichern, so wie vom Computer ausführbare Befehle, Daten für die weitere Verarbeitung entsprechend den vom Computer ausführbaren Befehlen und so weiter.
-
Eine Technik, die verwendet worden ist, um die Leistungsfähigkeit beim Zugriff auf den DRAM zu verbessern, ist es, eine ”Seite” gegenüber dem Hauptspeicher zu schließen, wenn der Verkehr zu dem Speicher über eine vorbestimmte Zeitdauer, die als eine ”Leerlaufzeit” bezeichnet werden kann, geschlafen hat. Somit werden zukünftige Anfragen an den Speicher mit einer ”Seite leer”-Zeitgebung ausgeführt und stehen somit nicht dem zusätzlichen Aufwand gegenüber, die Seite zu schließen, bevor eine andere Seite geöffnet wird. Eine Verbesserung des Leistungsverhaltens kann zum Beispiel erwartet werden, wenn eine zukünftige Anfrage zu mehr ”Seitenverfehlungen” (z. B. wird eine andere Seite als die, die offen ist, einer nächsten Speichertransaktion unterworfen) als ”Seitentreffern” führt. Wenn daher die ”verfehlte” Seite bereits geschlossen ist, wird der Aufwand bei der Anfrage nach einer weiteren Seite minimiert.
-
Herkömmliche Techniken, die verwendet worden sind, um die Leerlaufzeit einzustellen, wurden jedoch durch ein grundlegendes Eingage/Ausgabe-System (BIOS – Basic Input Output System) beim Hochfahren eingerichtet und wurden während des Betriebs des Speichercontrollers nicht geändert. Daher waren diese herkömmlichen Techniken statisch und somit nicht in der Lage, Änderungen in den Daten, die vom Speichercontroller herbeigeführt werden, zu berücksichtigen.
-
Die
US 6,799,241 B2 offenbart ein Verfahren zur dynamischen Anpassung einer Speicherseitenschließstrategie für Computersysteme, die verschiedene Arten von DRAM basierten Speichern verwendet, die in eine oder mehrere Speicherbänke aufgeteilt sind. Darüber hinaus wird eine Vergleichseinheit offenbart, die mit einer Seitenregistriereinheit verbunden ist und dazu verwendet wird, eine Zugangsadresse zu empfangen und ein Treffersignal gemäß einem Vergleichsergebnis der Zugangsadresse und der Adressdaten, die in der Seitenregistereinheit gespeichert sind, auszugeben.
-
Der
US 2005/0071581 A1 ist eine Anzeigetafel zu entnehmen, die dazu ausgelegt ist, das Vorliegen anhängiger Anfragen an einen Speicher, die in einer Warteschlange gespeichert sind und die von dem Speichercontroller bearbeitet werden sollen, zu verfolgen. Darüber hinaus offenbart die Druckschrift einen Seiteninformations-Beobachter, einen Arbiter für die dynamische Aktualisierung, einen Verfolger des dynamischen Aktualisierens und einen Verwalter für das Schließen von Seiten.
-
Es ist die Aufgabe der Erfindung, eine Vorrichtung und ein entsprechendes Verfahren vorzuschlagen, die den Zugriff auf einen Speicher mit wahlfreiem Zugriff über eine Steuerung der Leerlaufzeit zu verbessern.
-
Diese Aufgabe lösen die Vorrichtung gemäß dem Patentanspruch 1, das System gemäß dem Patentanspruch 9 sowie das Verfahren gemäß dem Patentanspruch 12.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist eine Veranschaulichung einer beispielhaften Implementierung eines Rechengerätes, das so zu betreiben ist, dass es die Techniken für das dynamische Aktualisieren von Leerlauf-Zeitgebern ausführt.
-
2 ist eine Veranschaulichung einer beispielhaften Implementierung, die einen dynamischen Leerlauf-Zeitgeber der 1 in weiteren Einzelheiten zeigt.
-
3 veranschaulicht eine beispielhafte Implementierung einer Zustandsmaschine, die so zu betreiben ist, dass sie einen Zähler eines Leerlauf-Zeitgebers der 2 steuert.
-
4 veranschaulicht eine beispielhafte Implementierung eines Countdown-Zeitgebers für den Leerlauf-Zeitgeber der 2.
-
5 veranschaulicht ein beispielhaftes Zusammenspiel eines Arbiters für die dynamische Aktualisierung und eines Verfolgers der dynamischen Aktualisierung bei dem dynamischen Leerlauf-Zeitgeber der 2.
-
6 ist eine Veranschaulichung einer beispielhaften Zustandsmaschine für einen Seiteninformation-Beobachter der 2, der Seitenübergänge verfolgt und Angaben für eine ”gute” und eine ”schlechte” Entscheidung für den Arbiter für das dynamische Aktualisieren der 5 erzeugt.
-
7 ist eine Veranschaulichung einer beispielhaften Implementierung einer ”Vorab-Auftrag (pre-charge)” und einer ”Vorab-Auftrag an alle (pre-charge all)”-Anfragetechnik.
-
8 ist ein Ablaufdiagramm, das eine Prozedur bei einer beispielhaften Implementierung veranschaulicht, bei der eine Geschichte der Seitenzugriffe verwendet wird, um den Zugriff auf einen Speicher zu verwalten.
-
Fallweise werden in der Diskussion dieselben Bezugsziffern verwendet, um auf gleiche Strukturen und Komponenten Bezug zu nehmen.
-
GENAUE BESCHREIBUNG
-
In der folgenden Diskussion werden beispielhafte Vorrichtungen beschrieben, die einen dynamisch aktualisierbaren, adaptiven Leerlauf-Zeitgeber zur Verfügung stellen und/oder benutzen können. Dann werden beispielhafte Prozeduren beschrieben, die von den beispielhaften Vorrichtungen verwendet werden können, ebenso wie von anderen Vorrichtungen, ohne dass man sich von deren Gedanken und Umfang entfernt.
-
Beispielhafte Vorrichtungen
-
1 veranschaulicht eine beispielhafte Implementierung 100 eines Rechengerätes 102, das so zu betreiben ist, dass es Techniken für einen dynamisch aktualisierbaren, adaptiven Leerlauf-Zeitgeber verwendet. Das Rechengerät 102 kann vielfältig gestaltet sein, so wie als ein herkömmlicher Desktop-Computer (z. B. ein Desktop-PC), ein Server, ein Notebook-Computer, ein Hilfsmittel für die persönliche Information und so weiter. Somit kann das Rechengerät 102 als ein ”dickes” Rechengerät, das wesentliche Verarbeitungs- und Speicherressourcen hat (z. B. ein Server) bis hin zu einem ”dünnen” Rechengerät mit relativ beschränkten Verarbeitungs- und/oder Speicherressourcen, so wie ein Hilfsmittel für die persönliche Information, gestaltet sein. Eine weite Vielfalt anderer Ausgestaltungen wird auch in Betracht gezogen.
-
Das Rechengerät 102, wie es in der 1 veranschaulicht ist, umfasst einen Prozessor 104, einen Speicher 106, einen Speichercontroller 108 und eine Steuervorrichtung 110 für einen Cursor. Die Steuervorrichtung 110 für den Cursor (z. B. eine Maus, ein Touchscreen, ein Touchpad und so weiter) ist mit dem Prozessor 104 über einen Bus, so wie über einen Host-Bus in einem Grafikspeichercontroller-Hub, betrieblich gekoppelt. Der Prozessor 104 kann vielfältig gestaltet sein und ist somit nicht durch die Materialien, aus denen er gebildet sein kann, oder die Bearbeitungsmechanismen, die hierin verwendet werden, beschränkt. Zum Beispiel kann der Prozessor aus Halbleiter(n) und/oder Transistoren (z. B. elektronischen integrierten Schaltungen (ICs – Integrated Circuits)) und so weiter bestehen. Zusätzlich, obwohl ein einzelner Prozessor 104 veranschaulicht ist, kann der Prozessor 104 ein Vertreter für mehrere Prozessoren sein, die durch Verwendung eines Busses zur Kommunikation mit dem Speichercontroller 108 gekoppelt sind.
-
Ähnlich ist der Speicher 106, der ein Vertreter für den ”Hauptspeicher” des Rechengerätes 102 sein kann, vielfältig gestaltbar. Zum Beispiel kann der Speicher 106 als DRAM gestaltet sein, der einen synchronen DRAM (SDRAM), einen Rambus DRAM (RDRAM), einen mit doppelter Datenrate arbeitenden synchronen DRAM (DDR DRAM) und so weiter umfassen kann.
-
Der Speichercontroller 108 ist so gestaltet, dass er ”Speicheranfragen” (die hiernach auch als ”Anfragen” bezeichnet werden) bedient, was, wie es hierin verwendet wird, sich auf eine Übergabe von Befehl und Adresse zwischen einem Auftraggeber und dem Speicher 106 bezieht. Zum Beispiel ist eine ”Speicherleseanfrage” eine Übergabe von Daten von dem Speicher 106 an einen Auftraggeber. Zum Beispiel kann der Prozessor 104 die Speicherleseanfrage einleiten (z. B. als Antwort auf eine Eingabe, die er von der Steuervorrichtung 110 für den Cursor erhalten hat), um Daten von dem Speicher 106 an den Prozessor 104 zu übergeben. Eine ”Speicherschreibanfrage” ist eine Übergabe von Daten von dem Auftraggeber an den Speicher 106. Weiter mit dem voranstehenden Beispiel kann der Prozessor 104 eine Speicherschreibanfrage einleiten, um Daten von dem Prozessor 104 an den Speicher 106 zu übergeben. Steuerinformation (z. B. ein Prioritätswert und eine Lese/Schreib-Eigenschaft der Speicheranfrage) kann als ein Teil der Speicheranfrage transportiert werden, durch Verwendung eines vordefinierten Protokolls in Bezug auf das Durchleiten der Adresse und so weiter.
-
Der Speichercontroller 108 ist in einer Implementierung so gestaltet, dass er Daten zwischen dem Speicher 106 und dem Prozessor 104 über die Verwendung von ”Seiten” überträgt. Zum Beispiel kann sich eine ”Seite” auf einen Block aus Daten beziehen, der innerhalb einer Zeile eines oder mehrerer DRAMs gespeichert ist, die den Speicher 106 implementieren. Auf die Zeile wird in diesem Fall über eine Zeilenadresse zugegriffen, die von dem Speichercontroller 108 zur Verfügung gestellt wird, und dann wird die Spaltenadresse der bestimmten Daten, die angesprochen werden, zur Verfügung gestellt. Eine weitere Spaltenadresse kann außerdem verwendet werden, um auf zusätzliche Daten innerhalb der Zeile zuzugreifen, ohne die Zeilenadresse erneut zur Verfügung zu stellen, was als ein ”Seitentreffer” bezeichnet werden kann. Das Lesen oder Schreiben zusätzlicher Daten aus derselben Zeile bzw. in dieselbe Zeile auf diese Weise (was als ”Seitenmodus” bezeichnet werden kann) sorgt für weniger Verzögerungszeit, wenn auf die Daten zugegriffen wird, da Spaltenzugriffe ausgeführt werden können, ohne die Zeilenadresse zwischen den Spaltenzugriffen zur Verfügung zu stellen und ohne eine gegenwärtig ”offene” Seite zu schließen, auf die nicht zugegriffen wird. Somit kann dieses zu einem verbesserten Leistungsgrad bei der Nutzung des Speichers 106 führen.
-
Wenn eine Speicherleseanfrage eine ”offene” Seite trifft, wird die Speicherleseanfrage zu dem Speichercontroller 108 gesendet, in dem sie bedient wird. Bei einer Implementierung zeichnet der Speichercontroller 108 die Seite (z. B. einen Zeilenteil der Adresse) der vorliegenden Speicheranfrage in Seitenregistern in dem Speichercontroller 108 auf. Wenn innerhalb einer Leerlaufzeitdauer (deren weitere Diskussion hiernach zu finden ist) eine weitere Speicheranfrage erfasst wird und zu derselben Seite geleitet wird, wie die vorliegende Speicheranfrage, was erfasst werden kann, indem die Seite, die in den Seitenregistern aufgezeichnet ist, verglichen wird, dann kann die gegenwärtige Datenübertragung ohne das Schließen der Seite weitergeführt werden.
-
Der Speichercontroller 108 kann dann eine Adresse der ausgewählten Speicheranfrage an den Speicher 106 zusammen mit entsprechender Steuerinformation über einen Bus durchleiten. Bei einer Implementierung umfasst die Steuerinformation einen Schreiben-Freigabe-Anteil (z. B. eine Datenmaske eines Protokolls mit doppelter Datenrate (DDR)), um anzugeben, welche Bytes der Daten zu schreiben sind, einen Zeilenadress-Anteil, um einen Zeilenbereich der Adresse anzugeben, der durchgeleitet wird, und einen Spaltenadressen-Anteil, um die Spaltenadresse anzugeben, die durchgeleitet wird. Wenn die Anfrage ein Lesen ist, werden die ausgewählten Daten von dem Speicher 106 zur Verfügung gestellt.
-
Wenn der ankommende Agent auf eine andere Seite zugreift (d. h. ein ”Verfehlen” vorliegt), dann wird eine vorliegende Seite (wenn es eine gibt) geschlossen, und auf die andere Seite wird zugegriffen, indem eine Zeilenadresse der Speicheranfrage und dann die entsprechenden Spaltenadressen zur Verfügung gestellt werden.
-
Wie zuvor beschrieben, besteht eine Technik, die verwendet werden kann, um den Leistungsgrad des Zugriffs auf den Speicher 106 zu verbessern, darin, eine Seite in dem Speicher 106 zu schließen, wenn kein Verkehr zu dem Speicher über eine vorbestimmte Zeitdauer stattgefunden hat, was als eine ”Leerlaufzeit” bezeichnet werden kann. Daher werden zukünftige Anfragen an den Speicher mit einer ”Seite leer”-Zeitgebung behandelt und stehen daher nicht einem zusätzlichen Aufwand gegenüber, die Seite zu schließen, bevor eine andere Seite geöffnet wird.
-
Um festzustellen, ob und wann Seiten beim Speicher 106 zu schließen sind, kann der Speichercontroller 108 einen dynamischen Leerlauf-Zeitgeber 112 und eine Anzeigetafel 114 benutzen. Die Anzeigetafel 114 ist so gestaltet, dass sie das Vorliegen anhängiger Anfragen, die in Warteschlangen 116 gespeichert sind, an den Speicher 106 verfolgt, die von dem Speichercontroller 108 verarbeitet werden sollen. Zum Beispiel kann die Anzeigetafel Rank und Bank des Speichers 106, die adressiert werden, verfolgen. Wenn es keine anhängigen Speicheranfragen gibt, kann die Anzeigetafel 114 eine Angabe an den dynamischen Leerlauf-Zeitgeber 112 liefern, um eine Zeitkontrolle einzuleiten, damit vorliegende Seiten geschlossen werden.
-
Der dynamische Leerlauf-Zeitgeber 112 ist so gestaltet, dass er Techniken verwendet, um die Seiten zu schließen und um dynamisch sich ändernde Codeströme zu adressieren, indem die vorangegangenen Entscheidungen, die über das Schließen von Seiten getroffen wurden, verfolgt werden. Der dynamische Leerlauf-Zeitgeber 112 kann auch während des Betriebs dynamisch anpassen, um ”schlechte” Entscheidungen über das Schließen von Seiten ebenso wie ”gute” Entscheidungen zu kompensieren, damit die Anzahl aufeinander folgender ”guter” Entscheidungen erhöht wird. Zum Beispiel kann der dynamische Leerlauf-Zeitgeber 112 eine ”Skalier”-Technik benutzen, die durch eine Skala vorbestimmter Zeitüberschreitungswerte läuft, welche auf vorangegangenen Entscheidungen basieren, die getroffen wurden, um Seiten zu schließen, je nachdem, ob die Entscheidungen ”gut” oder ”schlecht” sind. Somit kann der dynamische Leerlauf-Zeitgeber 112 das Verhalten anstehender Codeströme basierend auf vorangegangenen Codeströmen vorhersagen und eine Leerlaufzeit anpassen, indem die Zeitüberschreitungswerte entsprechend verwendet werden, die für die Feststellung benutzt werden, wann die Seiten zu schließen sind. Eine weitere Diskussion des dynamischen Leerlauf-Zeitgebers 112 kann mit Bezug auf die folgende Zeichnungsfigur gefunden werden. Obwohl die beispielhafte Implementierung 100 der 1 Komponenten, die für die Funktionalität repräsentativ sind, als getrennt veranschaulicht, können diese Komponenten weiter kombiniert (z. B. können der Prozessor 104 und der Speichercontroller 108 durch denselben Chip gebildet werden), aufgeteilt und so weiter werden, ohne dass man sich vom Gedanken und Umfang dessen entfernt.
-
2 ist eine Veranschaulichung einer beispielhaften Implementierung 200, die den dynamischen Leerlauf-Zeitgeber 112 der 1 in weiteren Einzelheiten zeigt. Der dynamische Leerlauf-Zeitgeber 112 der 2 umfasst fünf Komponenten, die als ein Leerlauf-Zeitgeber 202, ein Seiteninformation-Beobachter 204, ein Arbiter 206 für die dynamische Aktualisierung, ein Verfolger 208 des dynamischen Aktualisierens und ein Verwalter 210 für das Schließen von Seiten bezeichnet werden.
-
Der Leerlauf-Zeitgeber 202 stellt einen Hauptzähler dar, der die Anzahl von Leerlauf-Zyklen sowohl für geöffnete als auch für geschlossene Seiten zählt, was für jeden Rank/jede Bank dupliziert wird. Der Seiteninformation-Beobachter 204 verfolgt gegenwärtige und vergangene Seitenstatusinformation und erzeugt Interpretationen für das Entscheiden über das Schließen von Seiten, die für jeden Rank/jede Bank dupliziert werden, wobei eine Ausgabe an den Arbiter 206 für das dynamische Aktualisieren und an den Verfolger 208 des dynamischen Aktualisierens geliefert wird.
-
Der Arbiter 206 für das dynamische Aktualisieren behandelt das Schlichten der Rechte am Verfolger 208 des dynamischen Aktualisierens zwischen jedem der Ränge/Bänke, wenn eine Aktualisierung über Entscheidungen für das Schließen von Seiten durchgeführt werden soll. Der Verfolger 208 des dynamischen Aktualisierens kann als ein auf dem ”Wasserstand” basierender Haben/Soll-Verfolger implementiert werden, der das Inkrementieren/Dekrementieren der Zeit des Zählers des Leerlauf-Zeitgebers 202 verwaltet. Der Verfolger 208 des dynamischen Aktualisieren stellt auch Logik zur Verfügung, um den Zeitüberlaufwert für den gewinnenden Rank/die Bank zu inkrementieren oder zu dekrementieren, für die von dem Arbiter 206 für das dynamische Aktualisieren geschlichtet worden ist. Der Verwalter 210 für das Schließen von Seiten verhandelt Anfragen über das Schließen von Seiten von jedem der Leerlauf-Zeitgeber 202 des Rank/der Bank und gibt ein Anfragepaket 212 an einen zwischengeschalteten (Interstream-)Arbiter 214 für die Taktausgabe 216.
-
Die Anzeigetafel 114 beliefert den Leerlauf-Zeitgeber 202 mit einer Angabe, wenn es in keiner der Lese/Schreib-Warteschlangen des Speichercontrollers anhängigen Anfragen an einen bestimmten Rank/eine Bank gibt. Der Leerlauf-Zeitgeber 202 wird dann das Herabzählen von einem Zeitüberlaufwert beginnen (gesteuert durch den Verfolger 208 des dynamischen Aktualisierens und den Arbiter 206 für das dynamische Aktualisieren) und dem Verwalter 210 für das Schließen von Seiten eine Anfrage zum Schließen einer Seite vorlegen, wenn das Zeitherabzählen abgeschlossen ist. Der Seiteninformation-Beobachter 204 verfolgt vorangegangene Seitenstatusinformation und Entscheidungen über das Schließen von Seiten basierend auf der Geschichte der ausgegebenen Takte und der vorliegenden Aktualisierungsanfragen an den Arbiter 206 für das dynamische Aktualisieren. Der Arbiter 206 für das dynamische Aktualisieren ist so gestaltet, dass er zwischen mehreren Aktualisierungsanfragen zwischen den Rängen/Bänken schlichtet und dem Verfolger 208 des dynamischen Aktualisierens Information über den gewinnenden Rank/die Bank vorlegt, um einen Zeitüberschreitungswert für den entsprechenden Rank/die Bank für zukünftige Schließungen von Seiten zu aktualisieren.
-
3 veranschaulicht eine beispielhafte Implementierung einer Zustandsmaschine 300, die so zu betreiben ist, dass sie einen Zähler des Leerlauf-Zeitgebers 202 der 2 steuert. Der Leerlauf-Zeitgeber 202 ist ein ”Haupt”-Zeitgeberblock, der so gestaltet ist, dass er von einem Zeitüberschreitungswert herabzählt, um das Schließen von Seiten zu steuern, wobei diese Steuerung von der Zustandsmaschine 300 der 3 durchgeführt werden kann.
-
Die Zustandsmaschine umfasst einen Leerlauf 302-Zustand, einen Zähl 304-Zustand, einen Anfrage 306-Zustand und einen Leerlauf-Zähl 308-Zustand. Der Leerlauf 302-Zustand ist ein Zustand, während dem Speicherregister des Speichercontrollers 108 untätig sind, z. B. mit anhängigen Anfragen geöffnet oder geschlossen sind.
-
Der Zähl 304-Zustand bewirkt, dass der Leerlauf-Zeitgeber 202 ein Herabzählen für geöffnete Seiten ausführt, die keine anhängigen Anfragen haben. In den Anfrage 306-Zustand wird eingetreten, wenn der Leerlauf-Zeitgeber 202 unterbrochen hat, Anfragen für das Schließen von Seiten für die Bank an den Verwalter 210 für das Schließen von Seiten geltend zu machen. Anfragen bleiben geltend, bis sie von dem Verwalter 210 für das Schließen von Seiten bedient sind, während sie in diesem Zustand sind. Der Leerlauf-Zähl 308-Zustand bewirkt ein Herabzählen eines Leerlauf-Zyklus, das für geschlossene Seiten durchgeführt wird, was benutzt werden kann, um Datenströme mit zwischengeschalteten Pulsen ”schlechter” Entscheidungen zu kompensieren, so dass sie nicht die Entscheidungen des Verfolgers 208 des dynamischen Aktualisierens insgesamt beeinflussen. Im Folgenden werden Beschreibungen für die Architektur einer Zustandsmaschine 300 der 3 angegeben, woran sich dann eine Beschreibung von Übergängen zwischen den Zuständen der Zustandsmaschine 300 anschließt.
-
”mrst_b”
-
Aktiv niedriges Rücksetzen der Zustandsmaschine 300.
-
”q_noreq”
-
Es gibt keine anhängigen Anfragen von einer der Warteschlangen 116 an den Rank/die Bank.
-
”dpgregval”
-
Eine bestimmte Seite (d. h. ein Rank/eine Bank) ist offen.
-
”idle_timer”
-
Der Leerlauf-Zeitgeber 202 ist der tatsächliche Zähler, der beim Eintritt in den Zähl 304-Zustand von Zeitüberschreitungswert herabzählt.
-
”infinite_override”
-
Der Zeitüberschreitungswert für das Herabzählen kann auf ”unendlich” (z. B. ”FFh”) gesetzt werden, um eine unendliche Leerlauf-Herabzählzeit anzugeben, damit verhindert wird, dass Anfragen für das Schließen von Seiten jemals geltend gemacht werden.
-
”zero_override”
-
Der Zeitüberschreitungswert für das Herabzählen kann auf ”Null” (z. B. ”00h”) gesetzt werden, um eine Leerlauf-Herabzählzeit von Null für unmittelbare Anfragen zum Schließen von Seiten anzugeben.
-
”scr_use_dit”
-
Dies ist ein Konfigurationsbit, das angibt, dass der Leerlauf-Zeitgeber 202 aktiviert ist.
-
”scr_idle_cnt_en”
-
Dies ist ein Konfigurationsbit, das angibt, dass das Herabzählen des Leerlaufzyklus für geschlossene Seiten aktiviert ist.
-
Nach dem Rücksetzen tritt die Zustandsmaschine 300 in den Leerlauf 302-Zustand ein. Wenn eine Seite geöffnet wird, die keine anhängigen Anfragen von einer der Warteschlagen hat, und wenn die Zeitüberschreitungswerte für das Herabzählen nicht Null (z. B. ”00h”) oder unendlich (z. B. ”FFh”) sind, und wenn der Leerlauf-Zeitgeber 202 aktiviert ist, geht die Zustandsmaschine 300 in den Zähl 304-Zustand über. Dies gibt an, dass der Rank/die Bank für opportunistische Schließungen von Seiten bereit ist und das Laden des Herabzähl-Zeitgebers mit dem Zeitüberschreitungswert anstoßen wird.
-
Während er in dem Zähl 304-Zustand ist, zählt der Zähler des Leerlauf-Zeitgebers 202 kontinuierlich mit jedem Speichertakt vom Zeitüberschreitungswert hinunter, bis er Null erreicht. Wenn eine Seite geschlossen wurde, bevor der Leerlauf-Zeitgeber 202 abgelaufen ist (beispielsweise aufgrund einer Anfrage an den Speicher 106 war der Leerlauf-Zeitgeber 202 auf einen unendlichen Wert programmiert/dynamisch bewegt worden und so weiter), wird der Leerlauf-Zeitgeber 202 zurück in den Leerlauf 302-Zustand übergehen.
-
Der Übergang von dem Zähl 304-Zustand zu der Anfrage 306 wird ausgelöst, wenn die folgenden Bedingungen erfüllt sind:
- • Der Leerlauf-Zeitgeber 202 hat unterbrochen (idle_timer = = 0) ODER der Zeitüberschreitungswert wird vom Programm her/dynamisch auf Null (z. B. ”00h) bewegt (zero_override), UND
- • es gibt noch keine Anfrage an die Bank (q_noreq) UND
- • die Seite ist noch geöffnet (pgregvalid).
-
Wenn er in dem Anfrage 306-Zustand ist, bestätigt der Leerlauf-Zeitgeber 202 dem Verwalter 210 für das Schließen von Seiten eine Anfrage zum Schließen von Seiten (pgclose_req), wenn es sicher ist, einen Vorab-Auftrag auszugeben (prech_safe) und geht zurück in den Leerlauf 302-Zustand über, wenn die Seite geschlossen ist. Mit anderen Worten bestätigt der Leerlauf-Zeitgeber 202 den ”Vorab-Auftrag”, um eine gegenwärtige Seite zu schließen, und geht in den Leerlauf 302-Zustand über, wenn die Seite geschlossen ist. Es sollte auch angemerkt werden, dass es einen direkten Bogen von dem Leerlauf 302-Zustand zu dem Anfrage 306-Zustand für Fälle gibt, in denen der Zeitüberschreitungswert Null (z. B. ”00h”) ist und es sicher ist, unmittelbar einen Befehl für einen Vorab-Auftrag auszugeben (d. h. eine gegenwärtige Seite zu schließen).
-
Der Leerlauf-Zeitgeber 202 kann auch als ein Ersatz-Zeitgeber arbeiten, wenn der Rank/die Bank untätig und geschlossen ist. Dies wird in der Zustandsmaschine 300 durch den Leerlauf-Zähl 308-Zustand dargestellt. In den Leerlauf-Zähl 308-Zustand wird eingetreten, wenn die Bank ohne anhängige Anfrage an den Rank/die Bank untätig ist und der Rank/die Bank geschlossen wird. Dies löst den Leerlauf-Zähler 202 aus, falls er aktiviert ist (scr_idle_cnt_en), eine Anzahl Leerlaufzyklen zu zählen, während derer die Bank geschlossen ist. In regelmäßigen Intervallen (scr_idle_ctn[7:0]) wird dem Leerlauf-Zähler 202 eine ”Belohnung” gegeben, eine Anzahl ”schlechter” Entscheidungen zum Schließen von Seiten beiseite zu legen, wenn eine ausreichende Zeitdauer vergangen ist, wobei eine weitere Diskussion dieses Sachverhalts mit Bezug auf die folgende Figur gefunden werden kann.
-
4 veranschaulicht eine beispielhafte Implementierung eines Countdown-Zeitgebers für den Leerlauf-Zeitgeber 202. Wie zuvor beschrieben zählt der Leerlauf-Zeitgeber 202 kontinuierlich herunter, bis er Null erreicht, und bleibt dort, bis ein neuer Zeitüberschreitungswert geladen wird. Das Herabzählen geschieht, wenn die Zustandsmaschine 300 in dem Zähl 304-Zustand oder dem Leerlauf-Zähl 308-Zustand ist. Die veranschaulichten Flops ”dyn_cnt” und ”slot_cnt” der 4 dienen als ein Speicherpunkt für das dem Wasserstand basierenden Schema in dem dynamischen Leerlauf-Zeitgeber 112. Der ”slot_cnt” kann auch als ein Index in einen Multiplexierer mit 8 Bit 8:1 verwendet werden, der die vorbestimmten (z. B. vorprogrammierten) Zeitüberschreitungswerte enthält (in der 4 als ”scr_timeout” veranschaulicht), die für den Leerlauf-Zeitgeber 202 zu benutzen sind. Es sollte angemerkt werden, dass die Strukturen der 3 und 4 für Rank und Bank dupliziert werden.
-
Der Arbiter 206 für das dynamische Aktualisieren schlichtet Anfragen von jeder der Bänke, die die Benutzung des Verfolgers 208 des dynamischen Aktualisierens anfragen. Der Arbiter 206 für das dynamische Aktualisieren kann zum Beispiel jede der gültigen Anfragen von jeder Bank überprüfen und für einen besten Kandidaten entscheiden, das Recht am Verfolger 208 des dynamischen Aktualisierens zu übernehmen, um seine Werte ”dyn_cnt” und ”slot_cnt” zu aktualisieren. Auf diese Weise kann eine verringerte Gatter-Zahl erhalten werden, da der Verfolger 208 des dynamischen Aktualisierens gemeinsam genutzt wird.
-
Das Schlichten für den Verfolger 208 des dynamischen Aktualisierens kann durchgeführt werden, indem zwei Stufen ausgeführt werden. Die erste Stufe der Schlichtung basiert auf einem ersten verfügbaren Algorithmus mit einem niedrigsten Rank, der eine höchste Priorität hat, gefolgt von einer niedrigsten Bank, die dem Verwalter 210 für das Schließen von Seiten ähnlich sein kann. Die Verhandlung wird auf dem qualifizierten ”idle_inc_rerq” von dem Leerlauf-Zeitgeber jedes Rank/jeder Bank ausgeführt. Ein qualifizierter ”idle_inc_req” (d. h. die ”Belohnung” des Leerlauf-Zählers) beschreibt irgendeinen Rank/eine Bank, die die ”idle_inc_req” geltend macht, da der Leerlauf-Zeitgeber 202, wenn er in einem ”Leerlauf-Zähl”-Zustand ist, abgelaufen ist und die Skala sich nicht in der ”Mitte”, z. B. an einem Zählwert ”20h”, befindet. Dies verringert beträchtlich die Menge der ”idle_inc_req”, die geschlichtet werden, da keine Anfragen verhandelt werden, die nicht zu einer Änderung der Skala führen werden.
-
Der Gewinner der ersten Stufe erhält das Recht am Verfolger 208 des dynamischen Aktualisieren, wenn es keine Angaben für einen Treffer einer ungültigen Seite (PIH – Page Invalid Hit), das Verfehlen einer ungültigen Seite (PIM – Page Invalid Miss), den Treffer einer gültigen Seite (PVH – Page Valid Hit) oder das Verfehlen einer gültigen Seite (PVM – Page Valid Miss) gibt, die von dem Seiteninformation-Beobachter 204 für jede der Bänke erhalten worden ist. Darüber hinaus wird jeder Bank, die ihren Seiteninformationsstatus bestätigt, die Inhaberpriorität gegeben. Diese Implementierung nimmt an, dass sich von einem architektonischen Standpunkt her PIH, PIM, PVH und PVM wechselseitig ausschließen, da der zwischengeschaltete Arbiter 214 jeder Bank in einem gegebenen Taktzyklus einen einzigen Zyklus zuteilt, obwohl weitere Implementierungen ebenfalls in Betracht gezogen werden.
-
Die Bank, die das Schlichten gewonnen hat, wird im nächsten Taktzyklus alle folgenden Eigenschaften ausmultiplexiert und an den Verfolger 208 des dynamischen Aktualisierens geschickt haben:
- • Treffer für ungültige Seite (PIH);
- • Verfehlen einer gültigen Seite (PVM);
- • Angabe einer Belohnung (Belohnung), die gegeben wird, wenn die Belohnung für den dynamischen Leerlauf-Zeitgeber 112 aktiviert ist und gute Entscheidungen (PVH und PIM) und ”idle_inc_req” umfasst;
- • Zähler für das dynamische Aktualisieren (dyn_cnt[5:0]); und
- • Rank/Bank-Index, der im vorangegangenen Takt erteilt worden ist.
-
Das Folgende wird dann multiplexiert und in den nächsten zwei Taktzyklen gesendet:
- • Zeitfensterzähler (slot_cnt[2:0]);
- • Überschreiben des Zählers mit Null (zero_override);
- • Überschreiben des Zählers mit Unendlich (infinite_override); und
- • Rank/Bank-Index, der zwei Taktzyklen zuvor erteilt worden ist.
-
Der Verfolger
208 des dynamischen Aktualisierens verfolgt die Anzahl ”guter” und ”schlechter” Entscheidungen zum Schließen von Seiten, die von dem Leerlauf-Zeitgeber
202 getroffen werden, wobei Beispiele davon in der folgenden Tabelle gezeigt sind. Der Verfolger
208 dynamischen Aktualisierens kann zum Beispiel als eine Skala mit 6 Bit implementiert werden. Bei einer Implementierung wird der Zähler auf eine Mitte der Skala (z. B. ”20h”) voreingestellt, wann immer er einen Schwellenwert abruft oder wenn ein Rücksetzen geltend gemacht wird.
Entscheidung | Seitenstatus | Treffer/Verfehlen | Gut/Schlecht | Beschreibung |
Treffer für ungültige Seite (PIH) | ungültig | Treffer | Schlecht | Die Seite wurde zu früh geschlossen und der nächste Zugriff auf die Bank war ein Seitentreffer |
Verfehlen einer ungültigen Seite (PIM) | ungültig | Verfehlen | Gut | Die Seite wurde früh genug geschlossen und der nächste Zugriff auf die Bank war das Verfehlen einer Seite |
Treffer für eine gültige Seite (PVH) | gültig | Treffer | Gut | Die Seite wurde nicht zu früh geschlossen, und der nächste Zugriff auf die Bank war ein Seitentreffer |
Verfehlen einer ungültigen Seite (PVM) | gültig | Verfehlen | Schlecht | Die Seite wurde zu spät geschlossen und der nächste Zugriff auf die Bank war ein Verfehlen der Seite |
-
Diese Entscheidungen werden verwendet, um zwischen den vorbestimmten Zählerwerten wie folgt zu skalieren. Ein Übergang (z. B. einen Wert in der Skala der Zeitüberschreitungswerte ”nach unten”) auf einen Zeitüberschreitungswert mit einer relativ geringeren Zeitdauer wird ausgeführt, wenn man einer vorbestimmten Anzahl ”schlechter” Entscheidung gegenübersteht, weil der Zeitüberschreitungswert zu ”groß” war, d. h. eine Zeitdauer, auf die mit dem Zeitüberschreitungswert Bezug genommen wurde. Wenn zum Beispiel einem PIH vier PVM folgen, und ein Schwellwert mit niedrigem Wasserstand auf drei Zähler unterhalb von ”20h” gesetzt wird (d. h. auf 1Ch), kann ein Übergang durch eine auf Wasserstand basierende Skala mit sechs Bit auf ”21h” durchgeführt werden, wenn man dem PIH gegenübersteht, und bei einem ersten PVM, dem man gegenübersteht, ”zurück” auf ”20h” bewegt werden. Außerdem werden Übergänge nach ”1Fh”, ”1Eh” bzw. ”1Ch” für die nächsten drei PVMs, denen man gegenübersteht, durchgeführt werden. Da der niedrige Wasserstand auf ”1Ch” gesetzt ist, wird es den 6-Bit-Wasserstand in der niedrigen Phase auslösen, was bewirkt, dass das ”slot_cnt” ein niedrigeres Zeitfenster auswählen wird, das auf einen Zeitüberschreitungswert programmiert war, welcher eine relativ kürzere Zeitdauer für den Rank/die Bank beschreibt. Sobald sie ausgelöst hat, wird die auf einem Wasserstand mit 6-Bit basierende Skala für den Rank/die Bank auf ”20h” zurückgesetzt werden.
-
Wenn eine ”Belohnung” aktiviert ist und einem PIH drei PVMs, eine ”gute” Entscheidung und eine PVM folgen, würden Übergänge wie folgt durchgeführt werden. Die Skala würde von ”20h” auf ”21h” (für den PIH) gehen, auf ”20h” (erstes PVM), auf ”1Fh” (zweites PVM), auf ”1Eh” (drittes PVM), auf ”1Fh” (”gute” Entscheidung) und schließlich auf ”1Eh” für das vierte PVM. Da bei diesem Beispiel der niedrige Wasserstand auf ”1Ch” programmiert war, wurde der niedrige Wasserstand nicht unterschritten, da er um eine ”gute” Entscheidung versetzt war, und somit werden mehr PVMs benötigt, um den niedrigen Wasserstand zu unterschreiten. Dies geschieht, um die Notwendigkeit nach einem zusätzlichen Befehl für einen Vorab-Auftrag (d. h. Seite schließen) zu berücksichtigen. Ein ähnlicher Übergang wird einen Wert ”höher” in der Skala der Zeitüberschreitungswerte durchgeführt, auf einen Zeitüberschreitungswert mit einer relativ größeren Zeitdauer, wenn man einer vorbestimmten Anzahl ”guter” Entscheidungen gegenübersteht.
-
Ein Übergang zu einem anderen Zeitüberschreitungswert, der sich auf eine Zeitdauer bezieht, die näher (z. B. um einen Wert) an einer Mitte (z. B. ”20h”) der Skala liegt, wird durchgeführt, wenn ein Verfehlen einer ungültigen Seite oder ein Treffer einer gültigen Seite beobachtet wird. Dies berücksichtigt die verbesserte Verzögerungszeit durch einen zusätzlichen Vorab-Auftrag- oder einen Aktivierungsbefehl. Weiter wird ein Übergang durchgeführt, um sich näher an eine Mitte der Skala zu bewegen, wenn eine vorbestimmte Anzahl von Zählungen aufgetreten ist, während derer Verkehr zwischen dem Speicher und dem Speichercontroller nicht vorgekommen ist. Dies beseitigt Fälle, in denen relativ lange Zyklen der Inaktivität bei geschlossenen Seiten nach einer Anzahl relativ weit beabstandeter ”schlechter” Entscheidungen beobachtet worden ist, wie es zuvor in Bezug auf den Leerlauf-Zähl 308-Zustand der 3 beschrieben worden ist.
-
Wie zuvor beschrieben, wird das Recht am Verfolger 208 des dynamischen Aktualisierens von dem Arbiter 206 für das dynamische Aktualisieren ausgehandelt. Wenn das Recht einmal festgelegt worden ist, wird die Aktualisierungsinformation für den gewinnenden Rank/die Bank ausmultiplexiert und an einen Leerlauf-Zeitgeber 202 gesendet, um das ”dyn_cnt” und das ”slot_cnt” zu aktualisieren. Die unmittelbare Seiteninformation wird verwendet, um die ”dyn_cnt”-Skala in dem Leerlauf-Zeitgeber 202 für den Rank/die Bank in dem nächsten Taktzyklus zu aktualisieren. In dem folgenden Taktzyklus wird der ”slot_cnt” für den Rank/die Bank aktualisiert.
-
Der Verfolger 208 des dynamischen Aktualisierens kann auch zwei programmierbare Wasserstandswerte enthalten, z. B. einen ”hohen” und einen ”niedrigen” Wasserstand. Wenn der ”hohe” Wasserstand erreicht ist, bewegt sich der ”slot_cnt” zu einem ”größeren” Zeitfenster, z. B. einem Wert auf der Skala, der einen relativ größeren Zeitüberschreitungswert beschreibt. Typischerweise wird das größere Zeitfenster auf einen Zeitüberschreitungswert programmiert, der größer ist als das gegenwärtige Zeitfenster, und somit wird dieses den Zeitüberschreitungswert, der von dem Leerlauf-Zeitgeber 202 benutzt wird, inkrementieren. In ähnlicher Weise bewegt sich, wenn der niedrige Wasserstand erreicht ist, der ”slot_cnt” zu einem kleineren Zeitfenster (z. B. einem Wert auf der Skala, der einen relativ kleineren Zeitüberschreitungswert beschreibt), was somit den Zeitüberschreitungswert für den Leerlauf-Zeitgeber 202 dekrementiert. Die Zeitfensterbewegung kann gedeckelt werden, wenn der Zeitüberschreitungswert an irgendeinem Zeitfenster auf Null (z. B. ”00h”) oder Unendlich (z. B. ”FFh”) programmiert wird, um den Zeitfensterbereich, d. h. den Bereich der Skala, zu beschränken. Zum Beispiel kann ein Zeitfensterbereich mit acht Zeitfenstern (d. h. Werten) programmiert werden.
-
Die Skala des Verfolgers 208 des dynamischen Aktualisierens für den gewinnenden Rank/die Bank kann auf eine Mitte (z. B. ”20h”) der Skala zurückgesetzt werden, wenn:
das Rücksetzen geltend gemacht ist ODER
der hohe Wasserstand überschritten worden ist ODER
der niedrige Wasserstand unterschritten worden ist.
-
Die weitere Diskussion der Wechselwirkung zwischen dem Verfolger 208 des dynamischen Aktualisieren und dem Arbiter 206 für das dynamische Aktualisieren kann in Bezug auf die folgende Figur gefunden werden.
-
5 veranschaulicht eine beispielhafte Wechselwirkung 500 zwischen dem Arbiter 206 für das dynamische Aktualisieren und dem Verfolger 208 des dynamischen Aktualisierens. Die Angaben für PIH, PIM, PVH und PVM werden auf Seitenregistern des Speichercontrollers 108 entsprechend einer Zustandsmaschine 600 der 6 erzeugt, welche eine beispielhafte Zustandsmaschine 600 für den Seiteninformation-Beobachter 206 veranschaulicht, der Seitenübergänge verfolgt.
-
Seiteninformation wird erzeugt, wenn die Zustandsmaschine 600 in den PIH-, dem PIM-, dem PVH- oder dem PVM-Zustand ist. Die Zustände Wait Valid und Wait Invalid werden verwendet, um den Seiteninformation-Beobachter 204 in einem anhängigen Zustand zu halten, bis sich die Seite von einem PVM oder PIH/PIM erholt, um das fehlerhafte Gutschreiben aufgrund einer vorangegangenen Entscheidung zu verhindern. Zum Beispiel wird das Gutschreiben eines aktiven Befehls von einem vorangegangenen PVM oder das Gutschreiben einer Lese/Schreib-Ausgabe von einem vorangegangenen PIH die von dem PVM/PIH herrührende Strafe beseitigen.
-
Das Folgende diktiert die Einzelheiten der Angaben des Seiteninformation-Verfolgers. Der Treffer für eine ungültige Seite (PIH) wird geltend gemacht, wenn:
das Seitenregister für den Rank/die Bank ungültig ist (!pgregvalid), UND
ein Aktivierungsbefehl an den Rank/die Bank ausgegeben wurde (setvalid), UND
die vorangegangene Zeilenadresse der gegenwärtigen Zeilenadresse äquivalent ist (samelaunch).
-
Das Verfehlen einer ungültigen Seite (PIM) wird geltend gemacht, wenn:
das Seitenregister für den Rank/die Bank ungültig ist (!pgregvalid), UND
ein Aktivierungsbefehl an den Rank/die Bank ausgegeben wurde (setvalid), UND
die vorangegangene Zeilenadresse nicht zu der gegenwärtigen Zeilenadresse äquivalent ist (!samelaunch).
-
Ein Treffer für eine gültige Seite (PVH) wird geltend gemacht, wenn:
das Seitenregister für den Rank/die Bank gültig ist (pgregvalid), UND
ein Lese/Schreibbefehl an den Rank/die Bank ausgegeben wurde (dlaunchrdwrcmd * samerkbk), UND
eine Anfrage zum Schließen der Seite wurde für den Rank/die Bank in vorangegangenen Zyklus nicht geltend gemacht wurde (!pgcls_req_f).
-
Ein Verfehlen einer gültigen Seite (PVM) wird geltend gemacht, wenn:
das Seitenregister für den Rank/die Bank gültig ist (pgregvalid), UND
ein Befehl für einen Vorab-Auftrag oder einen Vorab-Auftrag an alle an den Rank/die Bank ausgegeben wurde (clrvalid), UND
die Anfrage von einer der Warteschlangen bewilligt wurde (q_req_gnt), UND
eine Anfrage zum Schließen der Seite in dem vorangegangenen Zyklus für den Rank/die Bank nicht geltend gemacht wurde (!pgcls_req_f), UND
der sichere Vorlab-Auftrag für den Rank/die Bank für wenigstens zwei Zyklen bestätigt worden ist (presafe_ff), UND
ein Wiederauffrischbefehl nicht bewilligt wurde (!refresh_gnt).
-
Wie zuvor beschrieben umfasst der dynamische Leerlauf-Zeitgeber 112 einen Verwalter 210 für das Schließen einer Seite, welcher jede der Anfragen zum Schließen einer Seite von jedem Rank/jeder Bank sammelt und über den besten Kandidaten für eine Anfrage zum Schließen einer Seite mit dem zwischengeschalteten Arbiter 214 verhandelt. Bei einer Implementierung gibt es zwei Ebenen der Schlichtung für den Verwalter 210 zum Schließen einer Seite, z. B. pro Bank und pro Rank.
-
Die erste Ebene der Schlichtung entscheidet über einen besten Kandidaten für jede der Bänke in demselben Rank, basierend auf einer ersten verfügbaren Anfrage, z. B. von der Bank 0 zu der Bank 7. Die zweite Ebene der Schlichtung entscheidet über einen besten Kandidaten für jeden der Ranks basierend auf einer ersten verfügbaren Anfrage, z. B. von, Rank 0 zu Rank 3. Bei diesem Beispiel impliziert dies eine Schlichtungsreihenfolge Bank 0 von Rank 0, Bank 0 von Rank 1, Bank 0 von Rank 2, Bank 0 von Rank 3, Bank 1 von Rank 0, Bank 1 von Rank 1 usw.
-
Der Verwalter 210 für das Schließen einer Seite kann auch einen ”Vorab-Auftrag an alle”-Zyklus (z. B. ein Seitenbandsignal für den Zwischenstrom-Arbiter 214) für einen bestimmten Rank anfragen, der
zwei oder mehr Bänke hat, die das Schließen einer Seite anfragen (potential_prechall_rk[3:0]) UND
jede der Bänke in dem Rank fragt entweder nach dem Schließen einer Seite (pgclose_req[31:0]) oder eine Seite ist ungültig (!pgregvalid[31:0]) und es ist sicher, ein Vorladen auf der ungültigen Seite auszugeben (prech1n_safe[31:0]).
-
Eine ”Vorab-Auftrag an alle”-Anfrage kann Anfragen zum Schließen einer Seite von anderen Bänken/Rängen verdrängen. Bei einer Implementierung, wenn mehrere ”Vorab-Auftrag an alle”-Anfragen für mehr als einen Rank geltend gemacht sind, kann der niedrigste Rank bedient werden. 7 veranschaulicht eine beispielhafte Implementierung dieser Technik.
-
Beispielhafte Prozeduren
-
Die folgende Diskussion beschreibt Techniken für einen dynamisch aktualisierten, adaptiven Leerlauf-Zeitgeber, die implementiert werden, indem die zuvor beschriebenen Systeme und Vorrichtungen verwendet werden. Die Prozeduren sind als ein Satz Blöcke gezeigt, die Arbeitsgänge festlegen, welche von einer oder von mehreren Vorrichtungen ausgeführt werden und die nicht notwendigerweise auf die Reihenfolge beschränkt ist, die zum Ausführen der Arbeitsgänge mit den jeweiligen Blöcken gezeigt ist.
-
8 veranschaulicht eine Prozedur 800 bei einer beispielhaften Implementierung, die von dem Speichercontroller 108 der 1 benutzt werden kann. Eine Geschichte der Seitenzugriffe auf einen Speicher wird erhalten (Block 802). Zum Beispiel kann der Beobachter 204 für Seiteninformation verwendet werden, um Seitenzugriffe zu verfolgen. Beobachtungen werden von einem Speichercontroller gemacht, welche der Seitenzugriffe zu einem Treffer für eine ungültige Seite, ein Verfehlen einer gültigen Seite, einem Verfehlen einer ungültigen Seite oder einen Treffer für eine gültige Seite führen (Block 804). Somit kann der Speichercontroller 108 bestimmen, welche der Entscheidungen ”gut” (z. B. ein Verfehlen einer ungültigen Seite oder ein Treffer für eine gültige Seite) oder ”schlecht” (z. B. ein Treffer für eine ungültige Seite oder ein Verfehlen einer gültigen Seite) waren. Der Zugriff auf den Speicher durch den Speichercontroller wird basierend auf den Beobachtungen verwaltet (Block 806). Zum Beispiel kann eine skalenbasierte Technik verwendet werden, um zwischen Werten (d. h. Zeitfenstern) einer Skala überzugehen, die eine Vielzahl von Zeitüberschreitungswerten umfasst.