« Fonctionnement d'un ordinateur/Les mémoires cache » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 85 :
 
[[File:Cache fabriqué avec une mémoire associative et une RAM.png|centre|vignette|upright=3|Cache fabriqué avec une mémoire associative et une RAM]]
 
En général, la mémoire RAM stocke les lignes de caches complète. Il arrive que l'on utilise deux mémoires RAM : une pour les tags et une pour les données, mais cette technique augmente le nombre de circuits et de portes logiques nécessaires, ce qui réduit la capacité du cache.
 
Il est cependant possible d'optimiser un tel cache, en fusionnant la mémoire CAM et la mémoire RAM, afin d'éliminer des circuits redondants. Pour comprendre pourquoi, rappelons que les mémoires CAM sont composées d'un plan mémoire, d'un paquet de comparateurs et d'un encodeur. Quant à la mémoire RAM, elle est composée d'un décodeur connecté au plan mémoire. En mettant une CAM suivie d'une RAM, on a un encodeur dont l'entrée est envoyée à un décodeur.
Ligne 102 ⟶ 100 :
===Les caches directement adressés===
 
Les caches directement adressés peuvent être vus comme un cache totalement associatif auquel on aurait ajouté des restrictions assez drastiques. LaPlus restrictionhaut, principaleon esta quevu lequ'un contenucache d'unetotalement adresse mémoireadressé est chargéeéquivalent dans une ligne de cache prédéfinie, toujoursà la même. L'accès au cache a donc l'avantagecombinaison d'êtreune trèsCAM rapide vu qu'il suffit de vérifieravec une seule ligne de cache : celle prédéfinieRAM. MaisLa cesmémoire cachesCAM neprend sonten cependantentrée pasun sansTag défauts.et Vutraduit quecelui-ci leen cacheune estadresse plusqui petit quecommande la mémoire, certainesRAM adressesinterne mémoires se partagent la même ligne deau cache. SiDans lece processeurqui a besoin d’accéder fréquemment à ces adressessuit, chaque accès à une adresse supprimera l'autre du cache : tout accès à l'ancienne adresse seinterne soldera par un défaut deau cache. Cesera genreappelé de défauts de cache causés par le fait que deux adresses mémoires ne peuvent utiliser la même ligne de cache sl'appelle un '''défaut par conflitindice''' (''conflictpour miss''). Ainsi, le taux de succès de ce genre de cache estéviter asseztoute faibleconfusion.
 
[[File:Cache adresséhash directementtable - 2.png|centre|vignette|upright=2|CacheFonctionnement interne du cache, expliquée sous forme abstraite, en utilisant la notion d'indice interne adresséau directementcache.]]
 
Les caches directement adressés cherchent à remplacer la mémoire CAM par un circuit combinatoire. Ce circuit traduit le Tag en indice, mais est beaucoup plus simple qu'une mémoire CAM. Mais qui dit circuit plus simple dit circuit plus limité. Un circuit combinatoire n'est pas aussi versatile que ce qui est permis avec une mémoire CAM. En conséquence, une restriction majeure apparait : toute adresse mémoire est associée dans une ligne de cache prédéfinie, toujours la même. L'association entre ligne de cache et adresse mémoire est faite par le circuit combinatoire, et ne peut pas changer.
Les concepteurs de caches s'arrangent pour que des adresses consécutives en mémoire RAM occupent des lignes de cache consécutives, par souci de simplicité. En conséquence, une partie de l'adresse mémoire sert à indiquer la position de la donnée dans le cache. Le reste de l'adresse sert encode le tag et la position de la donnée dans le ligne de cache. La position de la ligne de cache dans la mémoire RAM est appelé l'indice. On peut le voir comme une sorte d'adresse interne au cache qui permet de l'identifier et la sélectionner parmi toutes les autres lignes.
 
Les concepteurs de caches s'arrangent pour que des adresses consécutives en mémoire RAM occupent des lignes de cache consécutives, par souci de simplicité. EnTout conséquence,se unepasse partiecomme desuit l'adressela mémoire sertRAM àétait indiquerdécoupés laen positionblocs de la donnéemême danstaille que le cache. LeLa restepremière de l'adresse sertdu encodebloc leest tagassociée età la position de la donnée dans lepremière ligne de cache. La(celle positiond'indice de0), la ligneseconde de cache dans la mémoire RAMadresse est appeléassociée l'indice.à Onla peutseconde le voir comme une sorte d'adresse internedu_ aubloc, cacheet qui permetainsi de l'identifiersuite. etLe latout sélectionner parmi toutes lesest autresillustré lignesci-dessous.
[[File:Cache hash table - 2.png|centre|vignette|upright=2|Cache hash table - 2]]
 
[[File:Cache hashadressé table - 2directement.png|centre|vignette|upright=2|Cache hashadressé table - 2directement.]]
Avec cette implémentation, l'adresse mémoire doit permettre de spécifier l'index de la donnée. Le tag correspond aux bits de poids fort de l'adresse mémoire correspondant à notre ligne de cache. Le reste des bits de l'adresse représente l'index de notre ligne, et la position de la donnée dans la ligne.
 
Avec cette contrainte, le circuit de traduction de l'adresse en adresse mémoire pour la RAM interne au cache est drastiquement simplifié, et disparait même. Une partie de l'adresse mémoire sert à indiquer la position de la donnée dans le cache, le reste de l'adresse sert encode le tag et la position de la donnée dans le ligne de cache.
 
[[File:Cache line.png|centre|vignette|upright=2|Adresse d'une ligne de cache sur un cache adressé directement.]]
 
Un cache directement adressé est conçu avec une RAM, un comparateur, et un paquet de multiplexeurs. LaEn général, la mémoire RAM stocke les lignes de caches complète, mais. ilIl arrive que l'on utilise deux mémoires RAM : une pour les tags et une pour les données, mais cette technique augmente le nombre de circuits et de portes logiques nécessaires, ce qui réduit la capacité du cache. L'index à lire/écrire est envoyé sur l'entrée d'adresse de la RAM, la RAM réagit en mettant la ligne de cache sur sa sortie de donnée. Sur cette sortie, un comparateur compare le tag de la ligne de cache lue avec le tag de l'adresse à lire ou écrire. On saura alors si on doit faire face à un défaut de cache. Ensuite, un multiplexeur récupère la donnée à lire/écrire.
 
[[File:Direct mapped cache - french.png|centre|vignette|upright=2|Cache directement adressé.]]
 
L'accès à un cache directement adressé a l'avantage d'être très rapide vu qu'il suffit de vérifier une seule ligne de cache : celle prédéfinie. Mais ces caches ne sont cependant pas sans défauts. Vu que le cache est plus petit que la mémoire, certaines adresses mémoires se partagent la même ligne de cache. Si le processeur a besoin d’accéder fréquemment à ces adresses, chaque accès à une adresse supprimera l'autre du cache : tout accès à l'ancienne adresse se soldera par un défaut de cache. Ce genre de défauts de cache causés par le fait que deux adresses mémoires ne peuvent utiliser la même ligne de cache s'appelle un '''défaut par conflit''' (''conflict miss''). Ainsi, le taux de succès de ce genre de cache est assez faible.
 
===Les caches associatifs par voie===