Die Aufgabe der vorliegenden Erfindung
besteht folglich darin, eine Vorrichtung und ein Verfahren zur Steuerung
einer Speicheranordnung mit Cache und einem Speicher zu schaffen,
die bei vergleichbarer Leistungsfähigkeit höhere Sicherheit gegen DPA-Angriffe
ermöglichen.
Diese Aufgabe wird durch eine Vorrichtung gemäß Anspruch
1 und ein Verfahren gemäß Anspruch
10 gelöst.
Eine erfindungsgemäße Vorrichtung
zur Steuerung einer Speicheranordnung mit einem Speicher und einem
dem Speicher zugeordneten Cache-Speicher umfasst eine Einrichtung
zum Zurückschreiben
von Daten aus dem Cache-Speicher in den Speicher unabhängig von
einer Verdrängung
dieser Daten aus dem Cache-Speicher.
Ein erfindungsgemäßes Verfahren zur Steuerung
einer Speicheranordnung mit einem Speicher und einem dem Speicher
zugeordneten Cache-Speicher, umfasst das Zurückschreiben von Daten aus dem
Cache-Speicher in den Speicher unabhängig von einer Verdrängung dieser
Daten aus dem Cache-Speicher.
Der Kerngedanke der vorliegenden
Erfindung besteht darin, dass die Korrelation zwischen dem Ereignis
von Zurückschreibevorgängen einerseits,
den dieselben auslösenden
collisions bzw. Kollisionen aufgrund beispielsweise Lade/Speicher-Zugriffen und dem
ursprünglichen
Schreiben der jeweiligen Datenblöcke
bzw. Daten in den Cache ausgelöst
durch beispielsweise einen Lade-/Speicher-Vorgang andererseits zumindest
teilweise, bei geeigneten Zusatzvorkehrungen aber auch vollständig zerstört, und
damit die Sicherheit vor DPA-Angriffen
erhöht
werden kann, wenn unabhängig
von einer Verdrängung
von Daten aus dem Cache diese Daten aus dem Cache in den Speicher
zurückgeschrieben werden.
Anders ausgedrückt,
werden einige oder alle Daten zwischen dem Zeitpunkt, da dieselben
in den Cache-Speicher gespeichert wurden, und dem Zeitpunkt, da
dieselben durch eine Kollision verdrängt werden, unmotiviert, d.h.
ohne Vorliegen einer Kollision, zurückgeschrieben. Bei geeigneter
Wahl der durch die unmotivierten, im folgenden als randomisierten
bezeichneten, Rückschreibevorgänge zurückgeschriebenen
Daten bzw. Cache-Blöcke
und geeigneter Einstellung der Auftrittswahrscheinlichkeit bzw.
Häufigkeit
der randomisierten Rückschreibevorgänge kann das
Auftreten von durch Kollisionen erzwungenen Rückschreibevorgängen nahezu
vollständig
und bei weiteren Vorkehrungen sogar vollständig verhindert werden, so
dass die Korrelation der am Stromprofil erkennbaren Rückschreibevorgänge mit
dem Zeitpunkt des Schreibens der Daten in den Cache sowie dem Zeitpunkt
der Kollisionen nahezu vollständig
bzw. vollständig
zerstört
ist.
Bevorzugte Ausgestaltungen der vorliegenden
Erfindung gehen aus den abhängigen
Patentansprüchen
hervor.
Bevorzugte Ausführungsbeispiele der vorliegenden
Erfindung werden nachfolgend Bezug nehmend auf die beiliegenden
Zeichnungen näher
erläutert.
Es zeigen:
1 ein
Blockschaltbild einer exemplarischen Controlleranordnung aus CPU,
Speicheranordnung mit Speicher und zugehörigem Cache-Speicher und einer
Cache-Steuerung gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung;
2 ein
Flussdiagramm zur Veranschaulichung der Funktionsweise der Cache-Steuerung nach 1; und
3 ein
Flussdiagramm zur Veranschaulichung randomisierter Rückschreibevorgänge gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung.
1 zeigt
zunächst
eine exemplarische Controlleranordnung aus CPU 10, einer
Speicheranordnung bestehend aus einem Speicher 12 und einem
zugeordneten Daten-Cache-Speicher 14 und einer Cache-Steuerung 16 gemäß einem
Ausführungsbeispiel
der vorliegenden Erfindung. Obwohl die Anordnung von 1 lediglich einen Datencache 14 enthält, ist
klar, dass dieselbe Anordnung neben dem Datencache 14 auch
einen Befehlscache 14 zur Speicherung von Instruktionen
für einen
schnellen Zugriff auf Instruktionen aufweisen kann, oder dass der
Cache 14 für
sowohl Daten als auch Instruktionen verwendet wird.
Der Cache-Speicher 14 besteht
aus mehreren Cache-Blöcken 141 – 14n , in denen aktuelle Werte für Daten
bzw. Daten-Blöcke
in dem Speicher 12 für einen
schnellen Zugriff durch die CPU 10 gespeichert sind. Cache 14 und
Speicher 12 sind miteinander über einen Datenpfad 18,
wie z.B. ein Bussystem, miteinander verbunden. Über den Datenweg 18 werden
Rückschreibevorgänge durchgeführt, d.h.
Vorgänge,
in welchen der Wert eines Datums bzw. Datenblocks in dem Speicher 12 durch
den aktuellen Wert in dem Cache 14 aktualisiert wird. Umgekehrt erhält der Cache 14 über den
Datenpfad 18 die Werte von Daten, deren aktuelle Werte
noch nicht in dem Cache 14 gespeichert sind, und die dann
wiederum andere Daten in dem Cache 14 verdrängen, wie
es im folgenden noch näher
erläutert
wird.
Der Cache 14 ist ferner
mit der CPU 10 über einen
weiteren Datenpfad 20 verbunden, über welchen einerseits die
CPU 10 in Lesezugriffen aktuelle Werte von Daten bzw. Datenblöcken erhält und andererseits
der Cache 14 aktualisierte bzw. modifizierte Werte von
der CPU 10 erhält,
beispielsweise im Rahmen von Store- bzw. Speicher-Vorgängen.
Die Cache-Steuerung 16 ist
sowohl mit der CPU 10 als auch mit dem Cache 14 verbunden.
Die CPU 10 signalisiert der Cache-Steuerung 16 Zugriffe auf die
Speicheranordnung aus Speicher 12 und Cache 14.
Der Cache 14 signalisiert der Cache-Steuerung 16 Informationen über die
Verdrängung
von aktuellen Datenwerten aus den Cache-Blöcken 141 – 14n . Anhand der Informationen von der
CPU 10 und dem Cache 14 führt die Cache-Steuerung 16 in
einer LRU-Tabelle 22 und in Dirty-Bits 24 Buch über die Reihenfolge,
in der auf die einzelnen Cacheblöcke zuletzt
zugegriffen wurde, und darüber,
ob die Inhalte der Cache-Blöcke
zwischen Eintragung und Verdrängung
modifiziert wurden oder nicht. Insbesondere dient die LRU-Tabelle
dazu, in dem Fall einer Kollision den zu verdrängenden Cache- Block zu ermitteln, während die
Bedeutung der Dirty-Bits darin besteht, für jeden Cache-Block einzeln
anzuzeigen, ob der darin befindliche Datenwert für ein Datum in dem Speicher 12 seit
dem Zeitpunkt, da derselbe unter Verdrängung eines anderen Datums
in den Cache-Speicher 14 gelangt ist, d.h. seit seiner
Einlagerung in den Cache 14, durch beispielsweise einen Speichervorgang
durch die CPU 10 modifiziert worden ist oder nicht.
Die Cache-Steuerung 16 übernimmt
im Hinblick auf die Steuerung von Zugriffen auf die Speicheranordnung
aus Speicher 12 und Cache 14 verschiedene Aufgaben,
die von einer Lade/Speicher-Steuerung 16a, einer Ersetzungssteuerung 16b und
einer Zufallszurückschreibesteuerung 16c übernommen
werden, und deren Funktionsweisen aus der Beschreibung zu 2 und 3 deutlich werden. Die Zufallszurückschreibesteuerung 16c ist
mit einem Zufallsgenerator 26 verbunden, um von demselben
Zufallswerte zu erhalten oder anfordern zu können, die ein in zeitlicher
Hinsicht und in Hinblick auf die Auswahl der Cache-Blöcke zufälliges Zurückschreiben
von Datenwerten in den Cache-Blöcken 141 – 14n ermöglichen sollen, wie es Bezug
nehmend auf 3 anschließend beschrieben
wird.
Nachdem im Vorhergehenden der Aufbau der
Anordnung von 1 beschrieben
worden ist, wird im folgenden die Funktionsweise der Cache-Steuerung 16 bzw.
ihrer verschiedenen Teilsteuerungen 16a – 16c beschrieben.
Insbesondere zeigt 2 den
Ablauf von Verfahrensschritten, die in der Anordnung von 1 auftreten, wenn ein Zugriff
auf ein Datum in der Speicheranordnung aus Speicher 12 und
Cache 14 beantragt wird, vorliegend von der CPU 10.
Nachdem in einem Schritt 100 beispielsweise
die CPU 10 von dem Cache 14 den Zugriff auf ein Datum
beantragt hat, prüft
der Cache 14 in einem Schritt 102, ob für das betreffende Datum ein
aktueller Wert in einem der Cache-Blöcke enthalten ist. Die Überprüfung wird
beispielweise assoziativ bzw. inhaltsadressiert auf der Basis der
physikalischen Seitenadresse, an der der betreffende Datenblock
im Speicher 12 gespeichert ist, oder, in dem Fall einer virtuellen
Adressierung, eventuell anhand einer entsprechenden logischen Adresse
durchgeführt.
Ist ein aktueller Wert des gesuchten Datenblocks bereits im Cache-Speicher 14 enthalten,
liegt also eine Cache-Hit bzw. ein Cache-Treffer vor, führt der
Cache 14 den Zugriff an dem entsprechenden Cache-Block 141 – 14n durch, in dem dieser Datenblock gespeichert
ist. Insbesondere wird in dem Fall eines Speichervorgangs der aktuellen
Wert für
das betreffende Datum modifiziert und in dem Fall eines Lese- bzw. Ladevorgangs
der aktuelle Wert für
das betreffende Datum an den den Zugriff Beantragenden, d.h. die CPU 10,
gesendet.
Daneben aktualisiert die Cache-Steuerung 16 und
genauer die Lade/Speicher-Steuerung 16a in einem Schritt
106 die LRU-Tabelle 22,
die ja durch die CPU 10 oder, alternativ, über den
Cache 14 über den
Zugriff informiert ist. Die LRU-Tabelle 22 wird hierbei
derart aktualisiert, dass sie jederzeit für jeden Cache-Block 141 – 14n anzeigt, auf welchen derselben zuletzt,
zuletzt, als vorletztes,... am längsten nicht
mehr zugegriffen worden ist.
Die Lade/Speicher-Steuerung 16a prüft in einem
Schritt 108 ferner, ob es sich bei dem Zugriff um einen Speichervorgang
handelt oder nicht, und markiert, falls dies der Fall ist, in einem
Schritt 110 den gespeicherten aktuellen Wert als modifiziert. Hierzu stellt
dieselbe das dem entsprechenden Cache-Block 141 – 14n , in welchem der aktuelle Wert gespeichert worden
ist, zugeordnete Dirty-Bit entsprechend ein. Beispielsweise zeigt
ein gesetztes bzw. auf den logischen Wert von 1 eingestelltes Dirty-Bit
an, dass der Inhalt des zugeordneten Cache-Blocks gegenüber dem
Inhalt in dem Speicher 12 modifiziert worden ist, während der
logische Wert von 0 einen unmodifizierten Zustand anzeigt. Eine
Einstellung kann ent fallen, falls das entsprechende Bit bereits
auf den die Modifikation anzeigenden Wert eingestellt ist.
Die Schritte 104 – 110 betrafen den einfachen
Fall, dass sich das betreffende Datum, auf den sich der Zugriff
in dem Schritt 100 bezog, in dem Datencache 14 befand und
beschäftigten
sich im wesentlichen lediglich mit der Durchführung des beschleunigt durchgeführten Zugriffs
und der Aktualisierung der LRU-Tabelle bzw. des entsprechenden Dirty-Bits.
In diesem Fall, dass sich das entsprechende Datum also in dem Cache 14 befindet,
sind durch die Schritte 104 – 110
alle notwendigen Steuermaßnahmen
durch die Cache-Steuerung 16 erledigt 112, 114, woraufhin
ein nächster
Speicherzugriff auf die Speicheranordnung 12, 14 durchgeführt werden kann.
Ergibt die Prüfung im Schritt 102, dass sich für das Datum
kein aktueller Wert in dem Cache 14 befindet, liegt also
eine Cache-Miss bzw. ein Cache-Fehlschlag vor, beantragt der Cache 14 über den Datenweg 18 den
Zugriff auf den Speicher 12, woraufhin in einem Schritt
114 der Zugriff auf das entsprechende Datum im Speicher 12 durchgeführt wird.
In dem Fall eines Ladezugriffs gibt der Speicher 12 den
Wert des Datums über
den Datenweg 18 an den Cache 14 weiter. In dem
Fall eines Speicherzugriffs speichert der Speicher 12 einen
neuen Wert anstelle eines alten Werts für das Datum in dem Speicher 12.
Alternativ könnte
im Speicherzugriffsfall der Schritt 114 entfallen, indem der neue
Wert in dem noch zu erörternden
Schritt 122 einfach nur in einen zu verdrängenden Cache-Block gespeichert
wird und dabei das entsprechende Dirty-Bit gleich auf einen eine
Modifikation anzeigenden Wert eingestellt wird.
In jedem Fall ist der Cache 14 nach
dem Schritt 114 in Kenntnis des aktuellen Wertes des betreffenden
Datums. Um denselben in den Cache 14 eintragen zu können, bestimmt
daraufhin in einem Schritt 116 die Ersetzungssteuerung 16b,
welcher der Cache-Blöcke 141 – 14n gemäß der LRU-Strategie verdrängt werden
soll. Hierzu bedient sich die Ersetzungssteuerung 16b der
LRU-Tabelle 22, die ja denjenigen Block 141 – 14n anzeigt, welcher die längste Zeit
nicht mehr verwendet worden ist. Dieser Block wird als der zu verdrängende Block
bzw. das zu verdrängende
Datum eingestuft. Freilich ist können auch
andere Verdrängungsstrategien
verwendet werden, wie z.B. die FIFO- (First-In-First-Out) Strategie,
nach welcher der zuerst eingelagerte Datenblock bzw. der entsprechende
Cache-Block verdrängt
wird, oder LFU- (least-frequently-used) Strategie, nach welcher
der Cache-Block verdrängt
wird, welcher laut mitprotokollierten Zählern am wenigsten oft verwendet
wurde.
Bevor jedoch das zu verdrängende Datum
in dem Cache 14 durch den aktuellen Wert des neuen Datums,
auf den sich der Zugriff bezieht, überschrieben werden kann, muss
sichergestellt sein, dass der Speicher 12 den aktuellen
Wert des zu verdrängenden
Datums enthält.
Zu diesem Zweck prüft
die Lade/Speicher-Steuerung 16a in
einem Schritt 118 das dem zu verdrängenden Datum zugeordnete Dirty-Bit 24,
ob dasselbe einen eine Modifikation anzeigenden Wert aufweist, um
festzustellen, ob der in dem Speicher 12 enthaltene Wert
für das
zu verdrängende
Datum noch aktuell ist, oder ob der Inhalt des entsprechenden Cache-Blocks
seit seiner letzten Eintragung in den Speicher 14 unter
Verdrängung
eines vorher dort gespeicherten Datums modifiziert worden ist und somit
von dem im Speicher 12 gespeicherten Wert abweicht. Wird
eine Modifikation angezeigt, weist die Lade/Speicher-Steuerung 16a den
Cache-Speicher 14 an,
den aktuellen Wert des zu verdrängenden
Datums aus dem Cache 14 über den Datenweg 18 in den
Speicher 12 zurückzuschreiben,
was der Cache 14 in einem Schritt 120 durchführt. Zeigt
das Dirty-Bit keine Modifikation an, unterbleibt das Zurückschreiben,
da der Wert des zu verdrängenden
Datums, wie er in dem Speicher 12 gespeichert ist, bereits
mit dem Wert in dem Cache 14 übereinstimmt.
In einem Schritt 122 wird daraufhin
das zu verdrängende
Datum durch den aktuellen Wert für das
interessierende Datum letzt endlich ersetzt bzw. verdrängt bzw.
das interessierende Datum in den durch die LRU-Strategie angezeigten
Cache-Block eingelagert, wonach die Cache-Steuerung 16 für den nächsten Zugriff
bereit ist (124). Im Schritt 122 werden ferner die LRU-Tabelle 22 und
das Dirty-Bit 24 aktualisiert bzw. vorinitialisiert, so
dass die LRU-Tabelle angibt, dass der soeben beschriebene Cache-Block
zuletzt verwendet wurde, und dass das zugeordnete Dirty-Bit angibt,
der Inhalt dieses Cache-Blocks
mit dem entsprechenden Inhalt für
das verdrängende
Datum übereinstimmt.
Wie bereits bezugnehmend auf Schritt 114 erwähnt, ist es im Fall einer Verdrängung eines
Datenblocks im Rahmen eines Speicherzugriffes auch möglich, anstelle
der sofortigen Eintragung des zu speichernden Wertes in dem Speicher 12 das
Dirty-Bit des zu verdrängenden Cache-Blocks
auf einen eine Modifikation anzeigenden Wert vorzuinitialisieren.
Es sind die Zurückschreibevorgänge 120, die
die Controlleranordnung von 1 anfällig gegenüber DPA-Angriffen
machen, da einerseits die Zugriffe auf den Speicher 12 einen
zu Speicherzugriffen auf den Cache 14 unterschiedlichen
Stromverbrauch aufweisen und damit im Stromprofil der Controlleranordnung
von 1 unterscheidbar
sind, und andererseits die Zurückschreibevorgänge 120 auf eine
wenngleich komplizierte, jedoch deterministische Weise von den handzuhabenden,
gegebenenfalls sicherheitskritischen Daten, wie z.B. einem Kryptoschlüssel, abhängen. Zur
Vermeidung der Zurückschreibevorgänge 120 und
zur Zerstörung
vorgenannter Korrelation ist in der Cache-Steuerung 16 die
Zufallszurückschreibesteuerung 16c vorgesehen, deren
Funktionsweise im folgenden Bezug nehmend auf 3 beschrieben wird.
Die Zufallszurückschreibesteuerung 16c,
deren Funktionsweise in 3 dargestellt
ist, führt
einen zu den in 2 dargestellten
Zugriffsprozessen unabhängigen
Prozess aus, der parallel zu denselben ständig ausgeführt wird. Sinn und Zweck der
Zurückschreibesteuerung 16c besteht
darin, durch randomi sierte bzw. unmotivierte, d.h. ohne Kollision
erzwungene, Rückschreibevorgänge bzw.
durch das Auslösen
von Rückschreibevorgängen unabhängig von
einer Verdrängungssituation
dafür zu
sorgen, dass deterministische Rückschreibevorgänge 120 (2) kaum oder sogar gar nicht
vorkommen.
Gemäß dem Ausführungsbeispiel von 3 wird zunächst in
einem Schritt 200 durch die Zufallszurückschreibesteuerung 16c überprüft, ob ein
den Datenpfad 18 bildendes Bussystem, über den Rückschreibevorgänge von
Datenblöcken
in den Cache-Blöcken 141 -14n stattfinden,
eine freie Zeitscheibe bzw. einen freien Timeslot hat. Eine freie
Zeitscheibe liegt vor, wenn für
die betreffende Zeitscheibe keine andere Einheit als die Steuerung 16c bei
einem Busmaster des Bussystems 18 einen Zugriff auf das
Bussystem 18 beantragt. Liegt keine freie Zeitscheibe vor,
würde der
Busmaster des Bussystems 18 eine Arbitrierung vornehmen,
in welcher er nach einem bestimmten Prioritätsschema einem der Zugriff
beantragenden Einheiten Vorzug vor den anderen geben und den Zugriff
auf das Bussystem für
diese Zeitscheibe erteilen würde,
während
die anderen auf die nächste
Zeitscheibe warten müssten,
um erneut einen Zugriff zu beantragen.
Liegt eine freie Zeitscheibe vor,
verwendet die Zufallszurückschreibesteuerung 16c in
einem Schritt 202 ein Ergebnis des Zufallsgenerators 26, um
eine zufällige,
von einer gewissen Zufallsverteilung abhängige Entscheidung darüber zu treffen,
ob nun ein randomisierter Rückschreibevorgang
durchzuführen
ist oder nicht, so dass nicht bei jeder freien Zeitscheibe einen
randomisierten Rückschreibevorgang
durchgeführt
wird. Zeigt der Zufallsgenerator 26 eine positiv ausfallende
Entscheidung bzw. ein positives Ergebnis an oder liegt keine freie
Zeitscheibe vor, so beginnt der Prozess der Zufallszurückschreibesteuerung 16c bei
der nächsten
Zeitscheibe des Bussystems 18 von neuem.
Erst wenn sowohl eine freie Zeitscheibe
vorliegt (200) und der Zufallsgenerator einen Rückschreibevorgang gewährt (202),
wählt die
Zufallszurückschreibesteuerung 16c in
einem Schritt 204 den zurückzuschreibenden
Daten-Block bzw. das zurückzuschreibende
Datum aus potentiellen Kandidaten von Blöcken bzw. Daten aus und schreibt
denselben in einem Schritt 206 über
das Bussystem 18 zurück in
den Speicher 12, um den Speicher 12 zu aktualisieren,
woraufhin in einem Schritt 208 das Dirty-Bit, das dem Cache-Block
zugeordnet ist, in welchem sich das unmotiviert zurückgeschriebene
Datum befindet, auf einen keine Modifikation anzeigenden Wert eingestellt
wird, um anzuzeigen, dass nun Inhalt dieses Cache-Blocks mit dem
entsprechenden Inhalt in dem Speicher 12 übereinstimmt.
Durch Markierung das soeben rückgeschriebene
Datums bzw. des soeben rückgeschriebenen
Cache-Blocks als nichtmodifiziert führt eine anschließende Verdrängung dieses
Cache-Blocks nicht mehr zu einem deterministischen Rückschreibevorgang
(siehe 2, 118 und 120).
Da durch die Abfrage 200 immer
gewährleistet
ist, dass das Bussystem einen freien Zeitschlitz hat, kann der randomisierte
Rückschreibevorgang 206 über den
Datenpfad 18 ohne Performance bzw. Leistungseinbußen durchgeführt werden,
da keine andere Einheit davon abgehalten wird, bei dieser Zeitscheibe
auf das Bussystem zuzugreifen. Die Zufallsabfrage 202 verringert
den deterministischen Zusammenhang zwischen dem Auftreten einer
freien Zeitscheibe und der Durchführung eines randomisierten
Rückschreibevorgangs 206,
wobei durch Einstellung der Zufallsverteilung auch die zeitlichen
Abstände
zwischen randomisierten Rückschreibevorgängen eingestellt
werden können.
Bevorzugterweise wird die Zufallsverteilung, d.h. die Wahrscheinlichkeit
für ein
positives Ergebnis in der Abfrage 202, an die Systemdetails
der Controlleranordnung von 1 angepasst,
so dass ein Kompromiss aus möglichst
wenig „unnützen" Rückschreibevorgängen, d.h. solchen,
die zwischen zwei Modifikationen ein und desselben Daten-Blocks
in dem Cache stattfinden, und der Vermeidung möglichst vieler deterministischer
Rückschreibevorgänge 120 getroffen
ist.
Die Auswahl im Schritt 204 wird bevorzugter Weise
unter den Cache-Blöcken 141 – 14n getroffen, die durch ihr Dirty-Bit 24 als
modifiziert markiert sind. Diese Datenblöcke werden in der vorliegenden
Anmeldung als Kandidaten bezeichnet. Alternativ zu dem vorliegenden
Fall, da die Cache-Steuerung 16 durch die Dirty-Bits 24 Referenzen
auf die modifizierten Cache-Blöcke
sammelt, könnte
ohne Implementierung einer extra Tabelle auch direkt im Cache 14, parallel
oder iterativ, nach solchen Dirty-Blöcken gesucht werden.
Die Auswahl 204 unter den
Kandidaten kann zufallsgesteuert und mit gleicher Wahrscheinlichkeit für die Kandidaten
unter Verwendung des Zufallsgenerators 26 erfolgen. Alternativ
oder zusätzlich
könnte
zur Optimierung der gewünschten
Wirkung der randomisierten Rückschreibevorgänge 206,
nämlich der
Reduktion der deterministischen, d.h. durch Kollision erzwungenen,
Rückschreibevorgänge (120 in 2), bzw. zur Steigerung
der Effizienz bei der Auswahl 204 unter den Kandidaten
eine Gewichtung verwendet werden, die die LRU-Informationen in der LRU-Tabelle 22 berücksichtigt,
so dass ältere
Blöcke in
dem Cache 14, d.h. Blöcke,
auf die schon seit längerer
Zeit nicht mehr zugriffen worden ist, mit höherer Wahrscheinlichkeit zurückgeschrieben
werden als andere, da jüngere
Blöcke
im allgemeinen eine höhere
Wahrscheinlichkeit dafür
haben, noch mal beschrieben bzw, modifiziert zu werden, in welchem Fall
eine zwischenzeitliche Rückschreibung „unnötig" wäre.
Durch Begrenzung der Kandidaten auf
den Kreis der als modifiziert markierten Cache-Blöcke würde die
durchschnittliche Anzahl der als modifiziert markierten Cache-Blöcke im Cache 14 deutlich
verringert werden, so dass die Wahrscheinlichkeit einer Kollision
mit einem als modifiziert markierten Cache-Block bzw. einer Verdrängung desselben
und eines dadurch erzwungenen deterministischen Rückschreibevorgangs 120 je nach
Cache-Architektur, wie z.B. der Assoziativität, der Anzahl der Sets bzw. Sätze, der
Direct-Mapping- bzw. Direktabbildungs-Eigenschaften usw. des Caches 14,
stark verringert wird.
Nach den bisher beschriebenen Teilsteuerungen
der Cache-Steuerung 16 verbleibt
immer noch ein Rest an möglichen
Kollisionen mit als dirty markierten Cache-Blöcken, also die Möglichkeit
der Verdrängung
von modifizierten Cache-Blöcken,
die seit ihrer Modifizierung nicht einem randomisierten Rückschreibevorgang
unterzogen worden sind. Um auch in diesem Fall einen zeitlich korrelierten
deterministischen Rückschreibevorgang 120 zu
vermeiden, kann die Ersetzungsstrategie, vorliegend die LRU-Strategie,
bzw. die dieselbe implementierende Ersetzungssteuerung 16b so
abgeändert
werden, dass in dem Fall, dass in dem Schritt 116 laut der LRU-Tabelle streng genommen
ein als modifiziert markierter Cache-Block zu verdrängen wäre, abweichend hiervon ein
anderer Cache-Block als der zu verdrängende Cache-Block bestimmt
wird, der nicht als modifiziert markiert ist. Auf diese Weise wird
ein zeitlich korrelierbarer Rückschreibevorgang
verhindert, da ja das Etikett bzw. das Dirty-Bit dieses ausnahmsweise
ausgewählten
Cache-Blockes keine Modifikation anzeigt (vergleiche 2).
Die Änderung der Ersetzungsstrategie
ist insbesondere bei voll-assoziativen Caches einfach möglich, bei
denen es mehr als einen Cache-Block gibt, in dem ein Speicherblock
abgelegt werden kann, sogenannte n-Weg-Caches, als welcher auch
der Cache 14 in 1 angedeutet
ist. In dem Falle eines Direct-Mapping-Caches
mit set-assoziativen Eigenschaften, also einer Parallelschaltung
mehrer Direct-Mapping-Caches, bei denen die Cache-Blöcke nur
für Datenblöcke aus
einem bestimmten Teil des Speichers 12 vorgesehen sind,
kann beispielsweise der Block in einem anderen Set abgelegt werden,
wobei alle Blöcke
dann mit einer eindeutigen Signatur markiert werden müssen.
Werden, wie oben beschrieben, bei
der Auswahl 204 die LRU-Informationen
berücksichtigt,
um ältere
Cache-Blöcke
mit höherer
Wahrscheinlichkeit einem randomisierten Rückschreibevorgang zu unterziehen,
und ist gleichzeitig die Ersetzungssteuerung 16b wie oben
modifiziert, verbleibt nur noch der völlig unwahrscheinliche Fall,
dass bei einer Kollision kein einziger freier Cache-Block existiert,
der nicht als modifiziert markiert ist, so dass die Kollision unmittelbar
zu einem deterministischen Rückschreibevorgang 120 führen muss,
da kein alternativer Cache-Block vorhanden ist, der nicht als modifiziert markiert
ist. Auch dieser Fall kann vollständig vermieden werden, indem
randomisierte Rückschreibevorgänge 206 gegenüber anderen
Zugriffen auf das Bussystem 18 durch andere beantragende
Einheiten derart priorisiert werden, dass randomisierte Rückschreibevorgänge 206 mindestens
so oft durchgeführt
werden, bis in jedem Fall in dem Cache 14 bzw. in dem Fall
eines set-assoziativen Caches, in jedem Set bzw. Satz mindestens
ein als nichtmodifiziert markierter Cache-Block vorhanden ist. Diese Priorisierung
würde dafür sorgen,
dass der Arbiter bzw. die Entscheidungssteuerung bzw. der Busmaster,
der bzw. die unter den einen Zugriff auf das Bussystem beantragenden
Einheiten entscheidet, welche der Einheiten den Zugriff auf das
Bussystem bekommt, in dem Fall, dass die Zurückschreibesteuerung 16c zu den
beantragenden Einheiten gehört,
auf jeden Fall diese bevorzugt würde,
bis zumindest ein Cache-Block als nichtmodifiziert markiert ist.
Obwohl im Vorhergehenden die Rückschreibesteuerung 16c die
Auswahl des rückzuschreibenden
Cache-Blocks lediglich unter als modifiziert markierten Blöcken vornahm,
könnte
die Auswahl auch aus allen Cache-Blöcken oder einem zumindest größeren Teil
derselben getroffen werden. Die Auswahl von Kandidaten für den Auswahlvorgang 204 könnte also
durchgeführt
werden, ohne zwischen als modifiziert und als nichtmodifiziert markierten
Blöcken
zu unterscheiden. Randomisiertes Zurückschreiben von als nichtmodifiziert
markierten Blöcken
könnte
zumindest zur Verrauschung des Stromprofiles und damit der Erschwerung
von DPA-Angriffen angewendet werden. Diese Variante hat jedoch den
Nachteil, dass die Anzahl von als modifiziert markierten Blöcken in dem
Cache 14 nur langsam oder unwesentlich verringert wird,
so dass die Wahrscheinlichkeit einer Kollision, die einen Rückschreibevorgang 120 erzwingt, nicht
wesentlich kleiner wird. Diese Variante ist deshalb aus sicherheitstechnischen Überlegungen
heraus weniger bevorzugt.
In bezug auf 3 wird darauf hingewiesen, dass die Abfrage 200 entfallen
könnte.
Unter geringen Leistungseinbußen
könnten
die Zurückschreibesteuerung 16c jedwede
Zeitscheiben für
Rückschreibevorgänge 206 in
Anspruch nehmen, die sonst auf dem Bussystem 18 für andere
Operationen benutzt würden.
Die Entscheidungssteuerung bzw. der Busmaster des Bussystems 18 würde dann
eine Arbitrierung bzw. eine Entscheidung unter den den Zugriff auf
das System 18 beantragenden Einheiten durchführen. Ferner
wäre es
möglich,
die Abfrage 202 wegzulassen und jeden freien Zeitschlitz
für einen randomisierten
Rückschreibevorgang 206 zu
nutzen.
Ferner wird in bezug auf 3 darauf hingewiesen, dass,
obwohl die Zufallszurückschreibesteuerung 16c im
Vorhergehenden als eine einen zu den Steuerungen 16a und 16b unabhängigen Prozess implementierende
Einheit beschrieben wurde, welcher Prozess parallel zu den anderen
abläuft,
eine Rückschreibemaßnahme nach
den Schritten 204 – 208
auch an geeigneter Stelle in das Abrufdiagramm von 2 eingebaut werden könnte, beispielsweise zwischen
die Schritte 100 und 102, zu welchen Zeitpunkten dann die Steuerung 16c aktiviert
wird.
Ferner wird darauf hingewiesen, dass
die Bezug nehmend auf die 2 und 3 beschriebene Funktionsweise
der Cache-Steuerung
in Hardware oder in Software implementiert werden könnte. Die Implementierung
kann auf einem digitalen Speichermedium, insbesondere einer Diskette
oder CD mit elektronisch auslesbaren Steuersignalen erfolgen, die
so mit einem programmierbaren Computersystem zusammenwirken können, dass
das entsprechende Verfahren ausgeführt wird. Allgemein besteht die
Erfindung somit auch in einem Computerprogrammprodukt mit auf einem
maschinenlesbaren Träger
gespeicherten Programmcode zur Durchführung des erfindungsgemäßen Verfahrens,
wenn das Computerprogrammprodukt auf einem Rechner abläuft. In
anderen Worten ausgedrückt
kann die Erfindung somit als ein Computerprogramm mit einem Programmcode
zur Durchführung
eines Verfahrens zur Steuerung einer Speicheranordnung mit einem Speicher
und einem dem Speicher zugeordneten Cache-Speicher realisiert werden,
wenn das Computerprogramm auf einem Computer abläuft.
Gemäß obiger Ausführungsbeispiele
wurden die Writebacks von dirty markierten Datenblöcken im Cache
durch einen unabhängigen
Zufallsprozess gesteuert. Auf diese Weise wird die Korrelation des
Writebacks mit dem Zeitpunkt des Schreibens des Datums in den Cache,
sowie dem Schreiben des Datums in den Cache sehr effektiv zerstört. In der
beschriebenen Form ist die Maßnahme
zudem performance-neutral oder sogar performance steigernd steigend
durch Vorsehen der Abfrage 200. Wie oben erwähnt ist
jedoch ebenfalls eine Ausführung
der Writebacks von dirty markierten Datenblöcken unabhängig von einer Verdrängung derselben
aus dem Cache auch auf rein deterministische Weise, also ohne Verwendung
des Zufallsgenerators 26, unter Verwendung äußerer Faktoren,
wie das Vorhandensein einer freien Zeitscheibe und der LRU-Tabelle,
möglich.
Obwohl im vorhergehenden eine Speicheranordnung
nach dem Look-through-Konzept verwendet wurde, wonach die Zugriffsanfrage
zunächst
an den Cache gestellt wird und erst dann, wenn die Daten dort nicht
vorhanden sind, die Anfrage an den Speicher der niedrigeren Hierarchieebene,
der auch ein weitere Cache-Speicher sein könnte, weitergereicht wird,
könnte
die vorliegende Erfindung auch bei einem Look-aside-Konzept verwendet
werden, bei dem die Zugriffsanfrage bezüglich eines Datums parallel
an Speicher und Cache gestellt wird.