La réponse à votre question est - cela dépend. C'est strictement une décision de conception de CPU, qui équilibre sur le compromis entre la performance et la complexité. Prenez par exemple les récents processeurs Intel Core - ils sont physiquement étiquetés et virtuellement indexés (au moins selon http://www.realworldtech.com/sandy-bridge/7/). Cela signifie que les caches ne peuvent effectuer des recherches dans l'espace d'adressage physique pur, afin de déterminer si la ligne est là ou non. Cependant, puisque le L1 est associatif à 32k, à 8 voies, cela signifie qu'il utilise 64 ensembles, donc vous n'avez besoin que des bits d'adresse 6 à 11 pour trouver l'ensemble correct. Comme il se trouve, les adresses virtuelles et physiques sont les mêmes dans cette plage, de sorte que vous pouvez rechercher le DTLB en parallèle avec la lecture d'un ensemble de cache - une astuce connue (voir - http://en.wikipedia.org/wiki/CPU_cache pour une bonne explication).
En théorie, on peut construire un cache étiqueté virtuellement index + virtualy, ce qui enlèverait l'obligation de passer par la traduction d'adresse (recherche TLB, et également marche de page en cas d'échec TLB). Cependant, cela causerait de nombreux problèmes, en particulier avec l'alias de mémoire - un cas où deux adresses virtuelles correspondent à la même physique.
Dites que le core1 a des caches A de mémoire virtuelle dans un tel cache totalement virtuel (il est mappé à l'addr C de Phys, mais nous n'avons pas encore fait cette vérification). core2 écrit dans l'addr B cette carte pour le même addr C - cela signifie que nous avons besoin d'un mécanisme (généralement un "snoop", terme inventé par Jim Goodman) qui va invalider cette ligne dans core1, gérant la gestion des données et la cohérence si besoin. Toutefois, core1 ne peut pas répondre à cet espionnage car il ne connaît pas l'addr B virtuel et ne stocke pas l'addr physique C dans le cache virtuel. Donc, vous pouvez voir que nous avons un problème, bien que cela soit surtout pertinent pour les systèmes x86 stricts, d'autres architectures peuvent être plus laxistes et permettre une gestion plus simple de tels caches.
En ce qui concerne les autres questions - il n'y a pas de véritable connexion avec PAT à laquelle je puisse penser, le cache est déjà conçu, et ne peut pas changer pour différents types de mémoire. Même réponse pour l'autre question - le HW est principalement sous la distinction entre mode utilisateur/noyau (à l'exception des mécanismes qu'il fournit pour la vérification de la sécurité, principalement les différents anneaux).
Vous ne pouvez pas traiter le cache. Vous pouvez uniquement adresser la mémoire. Le cache est géré par le processeur en privé. –
@Kerrek SB Oui, je sais, mais le cache CPU utilise-t-il le TLB et tous les overheads de l'adressage virtuel ou non? – Alex