J'ai du mal à comprendre quelle est la cache virtuelle. Je comprends la mémoire virtuelle.
Si la CPU veut accéder à la mémoire, celle-ci envoie une adresse virtuelle au MMU qui, utilisant des tables de page, des chiffres de la mémoire physique.
Maintenant ainsi que ceci, la CPU envoie une adresse différente (juste à la fin de l'adresse virtuelle), qui consiste en un nombre de points n °. Une balise et un décalage, au cache qui fonctionne ensuite s'il réside dans le cache.
Comment la cache virtuelle diffère-t-elle de cela?
Il existe quatre façons de répondre à un cache selon que les bits d'adresses virtuels ou physiques sont utilisés pour l'indexation et/ou pour le marquage.
Parce que l'indexation du cache est le plus de temps critique (puisque toutes les manières d'un ensemble peuvent être lues en parallèle et la manière appropriée sélectionnée sur la base d'une comparaison d'étiquettes), les caches sont généralement indexées avec l'adresse virtuelle, permettant à l'indexation de commencer avant l'adresse la traduction est terminée. Cependant, si seuls les bits de la page offset sont utilisés pour l'indexation (par exemple, sans plus grand nombre de la taille de la page et du modulo simple de la taille de la taille de l'indexation1), alors cette indexation utilise réellement l'adresse physique. Il n'est pas rare que l'associativité L1 soit augmenté principalement pour permettre une plus grande cache d'être indexée par l'adresse physique.
Tandis que l'indexation basée sur l'adresse physique est possible avec des moyens plus grands que la taille de la page (par exemple, en prévision des bits plus importants ou d'un mécanisme de traduction rapide fournissant à ces bits en utilisant le retard de l'indexation avec les bits d'adresse physique connus pour masquer la latence de la traduction), n'est pas couramment fait.
L'utilisation d'adresses virtuelles pour le marquage permet de déterminer un cache à déterminer avant que la traduction soit effectuée. Les autorisations doivent encore être vérifiées avant que l'accès ne puisse être commis, mais pour des charges, les données peuvent être transmises aux unités d'exécution et au calcul à l'aide des données commencées et pour les magasins, les données peuvent être envoyées à un tampon pour permettre l'engagement de l'État retardé. Une exception d'autorisation affleurerait le pipeline, de sorte que cela n'ajoutait pas de complexité de conception.
(Les Vhints utilisées par le cache de données Pentium 4 ont fourni cet avantage de latence en utilisant un sous-ensemble des bits d'adresses virtuelles disponibles tôt pour sélectionner de manière spéculativement.)
(Dans la journée des MMU externes en option, les étiquettes d'adresse virtuelle pourraient être particulièrement attrayantes pour pousser la traduction presque entièrement en dehors de la conception de cache.)
Bien que les caches pratiquement indexées et marquées puissent avoir des avantages significatifs de latence, ils introduisent également le potentiel d'aliasing dans lequel les mêmes cartes d'adresses virtuelles à différentes adresses physiques (homonymes) ou les mêmes cartes d'adresses physiques correspondent à différentes adresses virtuelles (synonymes). L'indexation et le marquage avec des adresses physiques évitent l'aliasing.
Le problème du homonyme est relativement facilement résolu en utilisant des identifiants d'espace adresse (ASID). (Rincer le cache lorsque le changement d'espaces d'adresse ne garantira également aucun homonymes, mais tel est relativement cher. Au moins une rinçage partielle serait nécessaire lorsqu'une ASID est réutilisée pour un espace d'adressage différent, mais une ASID de 8 bits peut éviter que la plupart des adresses Modifications de l'espace.) Les ASIDMES sont généralement gérées par le système d'exploitation, mais certains systèmes fournis des vérifications matérielles pour la réutilisation de l'ASID basée sur l'adresse de base de la table de page.
Le problème de synonyme est plus difficile à résoudre. Sur une cache Miss, les adresses physiques de tous les alias éventuels doivent être vérifiées pour déterminer si un alias est présent dans le cache. Si l'aliasing est évité dans l'indexation par indexation avec l'adresse physique ou par le système d'exploitation garantissant que les alias ont les mêmes bits dans l'index (coloration de la page) -, seul seul l'ensemble d'un jeu doit être sondé. En relocant tout synonyme de synonyme de l'ensemble indiqué par l'adresse virtuelle plus récemment utilisée, l'alias est évité à l'avenir (jusqu'à ce qu'un mappage différent de la même adresse physique ait lieu).
Dans un cache direct malfiché virtuellement marqué sans aliasing d'index, une simplification supplémentaire est possible. Étant donné que le synonyme potentiel entrera en conflit avec la demande et être expulsé, soit de toute ré-retour nécessaire d'une ligne sale peut être effectuée avant la gestion du cache Mlle (de sorte qu'un synonyme serait en mémoire ou un cache de niveau supérieur physiquement adressé) ou un cache de niveau supérieur physiquement) ou une personne physiquement adressée. Le tampon de réaffectation peut être sondé avant que la ligne de cache extraite de la mémoire (ou du cache de niveau supérieur) est installée. Un alias non modifié ne doit pas nécessairement être vérifié car le contenu de la mémoire sera identique à celui de la cache, simplement faire une manipulation manquante inutile. Cela évite le besoin de balises physiques supplémentaires pour tout le cache et permet une translation pour être relativement lente.
S'il n'y a pas d'évitement garanti d'aliasing dans l'index, même un cache étiqueté physiquement devra vérifier les autres ensembles pouvant contenir des alias. (Pour un bit non physique d'index, une seconde sondage du cache dans l'ensemble alternatif unique peut être acceptable. Ceci serait similaire à la pseudo-associativité.)
Pour un cache pratiquement étiqueté, un ensemble supplémentaire d'étiquettes d'adresse physique peut être fourni. Ces balises ne seraient accédées que sur des misses et peuvent être utilisées pour la cohérence de cache d'E/S et de multiprocesseur. (Étant donné que les demandes de misses et de cohérence sont relativement rares, ce partage n'est généralement pas problématique.)
AMD'S Athlon, qui a utilisé des étiquettes physiques avec une index virtuelle, à condition un ensemble séparé de balises pour les sondes de cohérence et la détection d'alias. Étant donné que trois bits d'adresses virtuels uniquement sont utilisés pour l'indexation, sept ensembles alternatifs devaient être sondés pour les éventuels alias sur une miss. Comme cela pourrait être fait en attendant une réponse du cache L2, cela n'a pas ajouté de latence et l'ensemble de balises supplémentaires pourrait également être utilisé pour des demandes de cohérence qui étaient plus fréquentes étant donné l'exclusivité du cache L2.
Pour un grand cache L1 indexé pratiquement indexé, une alternative à la recherche de nombreux ensembles supplémentaires serait de fournir un cache de traduction physique au viru. Sur une manche (ou une sonde de cohérence), l'adresse physique serait traduite à l'adresse virtuelle pouvant être utilisée dans le cache. Comme fournissant une entrée de cache de traduction pour chaque ligne de cache serait irréalisable, un moyen serait nécessaire d'invalider les lignes de cache lorsqu'une traduction est expulsée.
Si des aliasing (au moins des adresses écritibles) sont garantis ne se produisent pas, par exemple dans un système d'exploitation d'espace d'adresses typique, le seul inconvénient d'un cache pratiquement adressé est la surcharge d'étiquette supplémentaire du fait que des adresses virtuelles dans de tels systèmes sont plus grand que les adresses physiques. Matériel conçu pour un seul système d'exploitation d'adresse unique pourrait utiliser un tampon de lookaside de la permission au lieu d'un tampon de recherche de lookaside de traduction, retardant la traduction jusqu'à un dernier cache de niveau.
1 Une associativité asymétrique Indègre différentes manières du cache avec différents hayes basée sur plus de bits que nécessaire pour l'indexation de modulo de la même taille. Ceci est utile pour réduire les erreurs de conflit. Cela peut introduire des problèmes d'aliasing qui ne seraient pas présents dans un cache modulo-indexé de la même taille et de la même associativité.