Wird das Aliasing-Problem in einem virtuell indizierten, physisch markierten Cache angezeigt?

7

Grundsätzlich und als einfache Methode können wir auf den Cache mit der physischen Adresse zugreifen, die vom TLB stammt.

Als weitere Methode können wir jedoch mit der virtuellen Adresse auf den Cache zugreifen . In diesem Fall liegt jedoch ein Aliasing-Problem vor, wenn der Cache zwischen den Kontextwechseln nicht vollständig geleert ist (die Daten anderer Prozesse können im Cache vorhanden sein). Der gleiche Speicher kann von der unterschiedlichen virtuellen Adresse geleitet werden.

Aber in meinem Lehrbuch, einschließlich dieses Problems, können viele durch virtuell indiziertes, physisch gekennzeichnetes Problem gelöst werden . Ich denke, dies kann immer noch ein Aliasing-Problem verursachen.

Liege ich falsch?

A.Cho
quelle
Shubham hat die richtige Antwort gegeben. Weitere Details / Einblicke finden Sie in meinem Umfragepapier zu TLB, in dem mehr als 85 Artikel besprochen werden. In Abbildung 3a des Dokuments wird die Adressunterteilung erläutert, und in Abbildung 3b ist der Sonderfall dargestellt, in dem für bestimmte Cache-Größen kein Aliasing auftritt, da der Cache-Index vollständig aus dem Seitenversatz berechnet wird.
user984260

Antworten:

6

Das Aliasing-Problem kann gelöst werden, wenn wir die Cache-Größe klein genug auswählen. Wenn die Cache-Größe so ist, dass die Bits zum Indizieren des Caches alle von den Seitenversatzbits stammen, zeigen mehrere virtuelle Adressen auf dieselbe Indexposition im Cache, und das Aliasing wird gelöst.

Betrachten Sie beispielsweise die virtuelle 32-Bit-Adresse 0xFFFF FFFF. Dieses System verwendet eine Seitengröße von 64 KB, wobei angenommen wird, dass die Seitenversatzbits 16 Bit betragen. Wenn wir nun die Indexbits 10 (Anzahl der Sätze 1024) und die Blockgröße 64 Byte auswählen. Dann sind sowohl die Indexbits als auch die Blockversatzbits in den Seitenversatzbits der virtuellen Adresse untergebracht. Betrachten Sie eine andere Adresse 0xEEEE FFFF. Diese Adresse scheint Aliasing zu verursachen. Trotz unterschiedlicher virtueller Adressen zwingen die Bits niedrigerer Ordnung sie, sie derselben Position im Cache zuzuordnen, und es gibt kein Aliasing. Der einzige Nachteil dieses Ansatzes ist, dass die Cache-Größe durch die Seitengröße begrenzt ist.

Shubham Singh rawat
quelle
In Laienwörtern. Der gesamte Begriff des virtuellen Speichers basiert auf unterschiedlichen virtuellen und physischen Seitenzahlen. In VI-PT ist die physische Nummer DAS physische Tag. Also kein Aliasing-Problem (da die physische Adresse eindeutig ist). Die virtuelle Adresse wird verwendet, um mithilfe der Indizierung aus dem Offset-Teil (der für die physische / virtuelle Adresse sowieso gleich ist) auf einen Eintrag im Cache einzugrenzen. Diese Begrenzungsindizierung verwendet also die Nicht-Seitenzahl-Bits. Daher kleinere Cache-Größe.
Anup Buchke
1

Es gibt zwei Aspekte im Zusammenhang mit VIPT-Caches und Aliasing. Und die Probleme können zwischen Befehlssatzarchitekturen etwas unterschiedlich sein.

1)

Es gibt verschiedene Möglichkeiten, die virtuellen Adressen jedes Prozesses den externen physischen Adressen zuzuordnen.

Einige verwenden "Prozesskennungen" oder "Adressraumkennungen" (iirc ARM, SPARC, MIPS), wobei jedem laufenden Prozess ein anderer Wert zugewiesen wird, der zur Auswahl verschiedener Seitentabellen verwendet wird.

Einige verwenden "logische / physische" Adressen, bei denen die Adressen für jeden Prozess (= logisch) in einen größeren Adressraum (z. B. 32 bis 52 Bit) (= virtuell) übersetzt werden, der von allen Prozessen gemeinsam genutzt wird, und TLBs diese erweiterten virtuellen Adressen in transformieren physikalische Adressen. PowerPCs sind so.

Um zu vermeiden, dass während jedes Kontextwechsels alle TLBs und der gesamte Cache geleert werden müssen, können die Cache-Tags (und TLBs) die entsprechenden Adressraum-IDs oder erweiterten virtuellen Adressen speichern: Jede Adresse jedes Prozesses ist unterschiedlich, und es ist kein Aliasing möglich ( Nun, manchmal wird Aliasing erwartet, beispielsweise wenn privilegierter Kernel-Code ausgeführt wird, der im selben virtuellen Adressbereich aller Prozesse abgebildet ist.

2)

Ein subtileres Problem besteht darin, dass mehrere Prozesse denselben physischen Speicherbereich gemeinsam nutzen. Dieser Bereich des physischen Speichers kann von jedem Prozess in verschiedenen virtuellen Adressen abgebildet werden. Änderungen durch einen Prozess sind für den anderen möglicherweise nicht sichtbar. Insbesondere bei Rückschreibcaches, bei denen Schreibvorgänge nicht sofort an den Arbeitsspeicher weitergeleitet werden. Eine Lösung mit Unterstützung des Betriebssystems besteht darin, eine gewisse Ausrichtung zwischen Prozessen in Abhängigkeit von der Cache-Größe zu gewährleisten. Selbst wenn sich die virtuellen Adressen zwischen den verschiedenen Prozessen unterscheiden, werden sie in derselben Cache-Zeile als Alias ​​angezeigt und werfen sich automatisch gegenseitig aus.

Aufgrund dieser Aliasing-Probleme werden praktisch indizierte Caches hauptsächlich auf einfachen (alten) CPUs verwendet. Heutzutage ist es eine sehr verbreitete Technik, jeden Weg des L1-Caches auf die MMU-Seitengröße zu beschränken (normalerweise 4 KB oder 8 KB), so dass der Cache-Index zwischen physischen und virtuellen Adressen geteilt wird. Der Cache-Abruf erfolgt gleichzeitig mit der Auflösung der MMU-Adresse .

TEMLIB
quelle