Comment fonctionne un TLB et un cache de données?

15

J'essaie d'étudier pour un examen et j'ai réalisé que je suis confus quant au fonctionnement du TLB et du cache de données.

Je comprends que le TLB est essentiellement un cache des adresses physiques les plus récemment utilisées. Cependant, je regardais un diagramme dans mon manuel (illustré ci-dessous), et je ne comprends pas ce qui s'y passe. Il divise soudainement l'adresse physique et l'utilise pour indexer le cache, je suppose. Mais pourquoi affiche-t-il le cache et les données séparément? et pourquoi le décalage d'octet vient-il de flotter? Je suis sûr que le cache est également censé stocker des données. Je ne pense pas que son seul but soit de déterminer s'il y a ou non un coup sûr ou non à l'intérieur.

Je m'excuse à l'avance de mon ignorance, mais le livre couvre à peine les TLB (c'est comme un peu plus qu'une page) et il ne fait pas un très bon travail pour expliquer la relation entre un TLB et le cache.

Figure

audiFanatic
la source
Cette question est trop longue. Pouvez-vous extraire une question étroite et spécifique de cela, puis modifier votre question pour la réduire à une seule question spécifique? Une partie de la bonne question consiste à réfléchir soigneusement à l'essence minimale de ce que vous devez savoir et à n'inclure que ce qui est pertinent et essentiel à cette question. Par exemple, si vous avez une question spécifique sur le fonctionnement des TLB, au lieu de tout jeter, pourquoi ne pas essayer de cadrer une seule question étroitement conçue sur un TLB?
DW
Très bien, mon intention était de montrer ce que je comprends déjà sur le sujet, car la plupart des gens sur l'échange de pile n'aiment pas répondre aux questions sans que le demandeur fasse un effort (c'est compréhensible). Je suppose que je ne peux pas rendre tout le monde heureux. Peut-être que je vais juste le modifier avec ma question en gras ou quelque chose.
audiFanatic
@DW est-ce mieux?
audiFanatic
audiFanatic, vous avez peut-être mal interprété ou mal compris mes commentaires et l'état d'esprit "montrer un peu d'effort". Ma suggestion est que vous identifiez une question étroite - quelque chose comme "comment fonctionne un TLB? Je ne comprends pas très bien" - et que vous vous reconcentrez uniquement sur cette question. Oui, vous devez faire un effort sérieux pour répondre à cette question , et vous devez montrer l'effort que vous avez fait pour répondre à cette question spécifique , mais l'effort sur un sujet sans rapport n'est pas pertinent (par exemple, le fait que vous avez essayé de faire dur progrès sur une question de devoirs qui vous a fait penser à cette question).
DW
Permettez-moi de vous aider à comprendre le contexte derrière cela. Nous voulons constituer une archive de questions et réponses de haute qualité qui sera utile aux autres (pas seulement à vous). La meilleure chose que vous puissiez faire pour aider est d'extraire une question spécifique, étroite et bien posée, et de concentrer votre question sur cette seule question. Une question tentaculaire et ouverte qui n'est pas très ciblée est moins susceptible d'être utile à d'autres qui pourraient y trébucher (et il est également plus difficile pour les lecteurs d'aller au point et de comprendre le cœur de votre question, donc vous êtes moins susceptible d'obtenir une bonne réponse).
DW

Réponses:

23

Je pense que je vois votre confusion. Le TLB et le cache de données sont deux mécanismes distincts. Ce sont tous les deux des caches, mais ils mettent en cache des choses différentes:

  • Par conséquent, le TLB agit comme un cache dédié pour cette recherche. Le TLB a quelques entrées TLB, où chaque entrée TLB contient à la fois une adresse virtuelle et son adresse physique correspondante.

    Le TLB permet au processeur de convertir très rapidement des adresses virtuelles en adresses physiques. Si une instruction demande au processeur d'effectuer une opération de mémoire sur une adresse (virtuelle), le processeur vérifie d'abord si le TLB contient une entrée pour cette adresse virtuelle. Si c'est le cas, cela s'appelle un "hit cache" pour la recherche TLB, et puisque l'entrée TLB contient également l'adresse physique traduite, le processeur sait immédiatement quelle adresse physique utiliser. Si ce n'est pas le cas, c'est une erreur de cache pour la recherche TLB, et le processeur doit laborieusement effectuer la conversion virtuelle-physique en parcourant la table des pages. (Une fois qu'il a terminé cette conversion, il ajoute une entrée au TLB afin que les futures conversions de cette adresse virtuelle se produisent beaucoup plus rapidement.)

  • Le cache de données est un cache pour le contenu de la mémoire. La mémoire principale vous permet de spécifier une adresse physique et de lire la valeur à cette adresse physique. Cependant, la mémoire principale est lente. Si nous devions aller dans la mémoire principale chaque fois que nous voulions effectuer une opération de mémoire, notre processeur serait très lent.

    Par conséquent, le cache de données agit comme un cache dédié pour les lectures en mémoire. Le cache de données a des entrées de cache, où chaque entrée de cache contient une adresse physique et la valeur de la mémoire à cette adresse.

    Le cache de données permet au processeur de lire très rapidement à partir de la mémoire. Lorsque le processeur souhaite lire la mémoire à une adresse (physique), il vérifie d'abord le cache de données pour voir s'il contient une entrée de cache pour cette adresse. Si tel est le cas, ceci est connu sous le nom de "hit cache" (dans le cache de données), et le processeur peut immédiatement utiliser la valeur de données stockée dans cette entrée de cache, sans avoir besoin de contacter la mémoire principale. Si ce n'est pas le cas, il s'agit d'un «échec de cache» (pour le cache de données), et le processeur doit aller dans la mémoire principale. (Une fois que le processeur a reçu la valeur à cette adresse de la mémoire principale, il ajoute une entrée de cache au cache de données afin que les tentatives de lecture de cette même adresse aboutissent dans le cache de données.)

Ce sont tous les deux des caches, mais ils servent un objectif différent. Le processeur utilise les deux pour chaque opération de mémoire: il utilise d'abord le TLB pour convertir de l'adresse virtuelle en adresse physique, puis il vérifie le cache de données pour accélérer le processus de lecture de la valeur stockée en mémoire à cette adresse.

Pour plus de détails, vous pouvez lire l'article Wikipedia sur les TLB . Si vous effectuez une recherche, de nombreuses autres informations sont disponibles sur les TLB et les caches de données. Je suggère de rechercher "TLB" et "cache L1" ou "cache L2" (les 2 derniers sont des types de caches de données).

(Pour référence future: nous nous attendons à ce que vous fassiez des recherches sur votre question avant de poser ici, et que vous vérifiiez les sources Internet standard. Si la réponse peut être trouvée sur Wikipedia, vous n'avez pas fait suffisamment de recherches par vous-même. plus de chance si vous aviez vérifié les sources Internet pour savoir comment les TLB avant de demander ici. Voir aussi Combien d'efforts de recherche sont attendus des utilisateurs de Stack Overflow?. Alors, profitez-en pour utiliser cette leçon pour savoir comment vous pouvez améliorer votre propre compétences en recherche - quelque chose qui vous sera précieux tout au long de votre carrière.)

DW
la source
1
Je vous remercie! Cela a éclairci presque tout. J'ai passé beaucoup de temps à faire des recherches sur cela (plusieurs jours), je ne pouvais tout simplement pas trouver une information claire et concise qui lierait tout cela (et ma confusion n'a probablement pas aidé ma recherche). Par analogie, je me sentais comme si j'étais dans une pharmacie à la recherche d'un remède à une maladie non diagnostiquée; en utilisant uniquement les symptômes comme guide.
audiFanatic
Cela dit, j'ai une autre question. S'il s'agit de caches, pourquoi le livre sépare-t-il les données et les parties d'étiquette du cache (bon sang, la partie de données est encore plus grande que l'étiquette et la partie de bit valide)? Cela donne l'impression que le cache ne sert qu'à vérifier les balises (comme s'il ne stockait pas de données). Ce bloc de données se trouve-t-il dans le coin inférieur droit de la partie image du cache ou cette partie de la mémoire principale ou quoi?
audiFanatic
1
VPV+1P+1V+2P+2V+4095P+4095
iii
D'accord, super. Merci. Je suppose que c'est la séparation qui m'a le plus dérouté.
AudiFanatic