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 .