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

Contenu supprimé Contenu ajouté
Ligne 11 :
===Le tag d'une ligne de cache===
 
Les données présentes dans le cache sont (pré)chargées depuis la mémoire, ce qui fait que toute donnée dans le cache est la copie d'une donnée en mémoire RAM. Faire la correspondance entre une ligne de cache et l'adresse mémoire correspondante se fait en mémorisant, pour chaque ligne de cache, l'adresse RAM associée que ce soit en totalité ou seulement partiellement. Le cache contient donc des paires adresse-donnée qui lui permettent de faire le lien entre ligne de cache et adresse. En général, on ne mémorise pas la totalité de l'adresse, ce qui serait inutile. En effet, les lignes de cache sont des blocs de plusieurs centaines de bytes, sans compter que les lignes de cache sont alignées en mémoire. Dans ces conditions, on mémorise seulement une partie de l'adresse mémoire correspondante, qui forme ce qu'on appelle le '''tag'''. le cache est donc une grande table de correspondance entre tags et lignes de cache.
 
[[File:FonctionnementTag d'une mémoireligne associativede à correspondancecache.png|centre|vignette|upright=2|FonctionnementTag d'une mémoire cache : les tags sont dans la colonne de gauche, les données des lignesligne de cache sont dans la colonne de droite.]]
 
le cache est donc une grande table de correspondance entre tags et lignes de cache. Lors d'un accès mémoire, le cache extrait le tag de l'adresse à lire ou écrire, et compare celui-ci avec les tags de chaque ligne de cache. Si une ligne contient ce tag, alors c'est que cette ligne correspond à l'adresse, et c'est un défaut de cache sinon.
 
[[File:Fonctionnement d'une mémoire associative à correspondance.png|centre|vignette|upright=2|Fonctionnement d'une mémoire cache : les tags sont dans la colonne de gauche, les données des lignes de cache sont dans la colonne de droite. On voit qu'on envoie le tag au cache, que celui-ci répond en renvoyant la donnée associée.]]
[[File:Tag d'une ligne de cache.png|centre|vignette|upright=2|Tag d'une ligne de cache.]]
 
Sur certains caches assez anciens, on pouvait transférer les lignes de caches morceaux par morceaux. Ces caches avaient des lignes de cache divisées en sous-secteurs, ces sous-secteurs étant des morceaux de ligne de cache qu'on pouvait charger indépendamment les uns des autres (mais qui sont consécutifs en RAM). Chaque secteur avait ses propres bits de contrôle, mais le tag était commun à tous les secteurs.