Die Antwort auf Ihre Frage ist - es kommt darauf an. Das ist streng genommen eine CPU-Design-Entscheidung, die den Kompromiss zwischen Leistung und Komplexität ausgleicht.
Zum Beispiel aktuelle Intel Core Prozessoren - sie sind physikalisch markiert und virtuell indiziert (zumindest nach http://www.realworldtech.com/sandy-bridge/7/). Dies bedeutet, dass die Caches nur Nachschlagevorgänge im reinen physischen Adressraum abschließen können, um festzustellen, ob die Zeile vorhanden ist oder nicht. Da L1 jedoch 32k, 8-Wege assoziativ ist, bedeutet dies, dass es 64 Sätze verwendet, so dass Sie nur die Adressbits 6 bis 11 benötigen, um die richtige Menge zu finden. Wie es so ist, sind virtuelle und physikalische Adressen in diesem Bereich gleich, so dass Sie die DTLB parallel zum Lesen eines Cache-Sets suchen können - ein bekannter Trick (siehe - http://en.wikipedia.org/wiki/CPU_cache für eine gute Erklärung).
In der Theorie kann man einen virtuell indexierten + virtuell getaggten Cache erstellen, der die Anforderung der Adressübersetzung (TLB-Lookup und Seitenwanderungen im Falle von TLB-Misses) überflüssig macht. Dies würde jedoch zahlreiche Probleme verursachen, insbesondere beim Speicher-Aliasing - ein Fall, in dem zwei virtuelle Adressen dem gleichen physikalischen zugeordnet werden.
Say Core1 hat virtuelle Adr Eine Caches in einem solchen vollständig virtuellen Cache (es entspricht phys C, aber wir haben diese Prüfung noch nicht gemacht). core2 schreibt in virtuelles addr B, das dem gleichen phys addr C zugeordnet ist - das heißt, wir brauchen einen Mechanismus (normalerweise ein "snoop", ein Begriff, der von Jim Goodman geprägt wurde), der diese Zeile in core1 ungültig macht und die Datenzusammenführung und Kohärenzverwaltung verwaltet wenn benötigt. Jedoch kann core1 auf diesen Snoop nicht antworten, da er nicht über die virtuelle Adresse B weiß und die physikalische Adresse C nicht im virtuellen Cache speichert. Sie sehen also, dass wir ein Problem haben, obwohl dies hauptsächlich für strikte x86-Systeme relevant ist. Andere Architekturen sind möglicherweise laxer und ermöglichen eine einfachere Verwaltung solcher Caches.
In Bezug auf die anderen Fragen - es gibt keine echte Verbindung mit PAT, die ich mir vorstellen kann, ist der Cache bereits entworfen, und kann für verschiedene Speichertypen nicht ändern. Die gleiche Antwort für die andere Frage - die HW ist meistens unter der Unterscheidung zwischen Benutzer/Kernel-Modus (mit Ausnahme der Mechanismen, die es für die Sicherheitsprüfung bietet, meist die verschiedenen Ringe).
Sie können den Cache nicht adressieren. Sie können nur Speicher adressieren. Der Cache wird privat von der CPU gehandhabt. –
@Kerrek SB Ja, ich weiß, aber CPU-Cache verwendet TLB und alle Gemeinkosten der virtuellen Adressierung oder nicht? – Alex