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

Contenu supprimé Contenu ajouté
Ligne 179 :
[[File:Victim Cache Implementation Example.svg|centre|vignette|upright=1|Cache de victime.]]
 
==Comportement d’allocationL’allocation sur écriture==
 
Que faire quand une écriture modifie une donnée qui n'est pas dans le cache ? Doit-on écrire la donnée dans le cache, ou non ? Si la donnée est écrite dans le cache, on dit que le cache fait une '''allocation sur l'écriture''' (ou ''write-allocate''). Certains caches effectuent une telle allocation sur écriture, mais d'autres ne le font pas ou du moins pas systématiquement.
Les écritures posent un autre problème : l'écriture ne va modifier qu'une portion d'une ligne de cache. Que faire quand l'écriture modifie une donnée qui n'est pas dans le cache ? Doit-on charger la ligne de cache correspondante, ou non ?
 
===AllocationAvec allocation sur écriture===
 
La première solution est simple : on alloue une ligne de cache pour l'écriture. On parle de stratégie d’allocationL’allocation sur écriture (ou write-allocate). Cette solution permet d'implémenter les écritures relativement facilement. Elle peut se décliner en deux sous-catégories : le '''chargement à la demande''' et l''''écriture immédiate'''. Dans le premier cas, on charge lela blocdonnée à modifier dans le cache, et on effectuela l'écritureremplace suravec la donnée chargée dans le cacheécrite. Dans l'écriture immédiate, lel'écriture bloca delieu mémoire n'est pas chargédirectement dans le cache. Uneet lignela dedonnée cacheà modifier n'est allouée,pas etchargée l'écrituredans ale lieu dedanscache. Évidemment, seule une portion de la ligne de cache contient la donnée écrite (valide), et le reste contient des données invalides. Le cache doit savoir quelles sont les portions du cache qui sont valides : cela demande d'utiliser un ''sector cache''.
 
[[File:Write-back with write-allocation.svg|centre|vignette|upright=2|Cache Write-back avec allocation sur écriture.]]
 
===PasSans d'allocation sur écriture===
 
SurSans certainsallocation caches,sur on ne réserve pas de ligne de cache pour effectuer l'écriture. Dans ce cas, l'écriture est transférée directement aux niveaux de cache inférieurs, ou à la mémoire. Lesi cachela nedonnée prendà modifier n'est pas endans chargele l'écriturecache. Certains caches de ce genre utilisent une petite optimisation : lors de toute écriture, ils supposent que l'écriture donnera un succès de cache. Si c'est le cas, la ligne de cache qui contient la donnée est mise à jour avec la donnée à écrire. Mais si ce n'est pas le cas, la ligne de cache est invalidée, et l'écriture est transférée directement à la mémoire ou aux niveaux de cache inférieurs.
 
[[File:Write-through with no-write-allocation.svg|centre|vignette|upright=2|Cache Write-through sans allocation sur écriture.]]
 
===Cohérence des caches===