Je ne comprends pas très bien les principales différences entre les deux caches et je me demandais si quelqu'un pouvait m'aider?
Je sais qu'avec un cache entièrement associatif, une adresse peut être stockée sur n'importe quelle ligne du tableau de balises et un cache à mappage direct ne peut avoir qu'une seule adresse sur une ligne.
Mais c'est à peu près tout ce que je sais.
Bref, vous avez essentiellement répondu à votre question. Ce sont deux façons différentes d'organiser un cache (une autre serait associative à n paramètres , qui combine les deux, et le plus souvent utilisée dans le CPU du monde réel ).
Le cache à mappage direct est plus simple (nécessite un seul comparateur et un multiplexeur), par conséquent, il est moins cher et fonctionne plus rapidement. Étant donné n'importe quelle adresse, il est facile d'identifier la seule entrée dans le cache, où elle peut être. Un inconvénient majeur lors de l'utilisation de DM cache est appelé un conflit manqué , lorsque deux adresses différentes correspondent à une entrée dans le Même si le cache est volumineux et contient de nombreuses entrées périmées, il ne peut pas simplement les supprimer, car la position dans le cache est prédéterminée par l'adresse.
Le cache associatif complet est beaucoup plus complexe et permet de stocker une adresse dans n'importe quelle entrée. Il y a un prix pour ça. Afin de vérifier si une adresse particulière se trouve dans le cache, il doit comparer toutes les entrées actuelles (les balises pour être exact). En outre, afin de maintenir la localité temporelle, il doit avoir une politique d'expulsion. Habituellement, l'approximation de LRU ( la moins récemment utilisée ) est implémentée, mais elle ajoute également des comparateurs et des transistors supplémentaires dans le schéma et prend bien sûr un certain temps.
Les caches entièrement associatifs sont pratiques pour les petits caches (par exemple, les caches TLB sur certains processeurs Intel sont entièrement associatifs) mais ces caches sont petits, vraiment petits. Nous parlons de quelques dizaines d'entrées tout au plus.
Même les caches L1i et L1d sont plus gros et nécessitent une approche combinée: un cache est divisé en ensembles, et chaque ensemble se compose de "voies". Les ensembles sont directement mappés et en eux-mêmes sont entièrement associatifs. Le nombre de "voies" est généralement faible, par exemple dans le processeur Intel Nehalem, il existe des ensembles 4 voies (L1i), 8 voies (L1d, L2) et 16 voies (L3). Le cache associatif à N voies résout à peu près le problème de la localité temporelle et non le complexe à utiliser dans la pratique.
Je recommanderais fortement un cours 2011 par UC Berkeley, "Computer Science 61C", disponible gratuitement sur YouTube . En plus d'autres choses, il contient 3 conférences sur la hiérarchie de la mémoire et les implémentations de cache.
Cache mappé direct dans ce type de cache, il y a une ligne par ensemble, ce qui signifie que ex dans la première ligne A est assis dans une autre ligne B est assis et ainsi de suite, mais dans le cache entièrement associatif, il n'y a qu'un seul ensemble et tous sont assis au hasard, nous le faisons Je ne sais pas dans quelle ligne du bloc A est assis et B est assis j'espère que vous comprenez sinon référez-vous aux programmeurs RE BRYANT potentiels