Simulateur de Cache - Version LRU
📖 Description
Le programme cache_lru.c
simule le comportement d'un cache de processeur. Il permet de suivre les hits et les misses ainsi que d'analyser les performances du cache en fonction des références mémoire fournies.
📦 Compilation
Pour compiler le programme, utilisez la commande suivante :
gcc -o cache_simulator cache_lru.c -lm
ou
make
⚙️ Exécution
Pour exécuter le programme, utilisez la ligne de commande suivante :
./cache_simulator -s <cache_size(KB)> -l <line_size> -a <associativity> [-c] [-W] < <trace_file>
📝 Arguments
-
-s <cache_size(KB)>
: Taille du cache en kilooctets. (Obligatoire)
Exemple : -s 64 -> taille du cache de 64 KB -
-l <line_size>
: Taille de la ligne de cache en octets. (Obligatoire)
Exemple : -l 16 -> taille de ligne de 16 octets -
-a <associativity>
: Associativité du cache (nombre de lignes par ensemble). (Obligatoire)
Exemple : -a 4 -> associativité de 4 lignes -
-c
: Activer l'écriture en mode Write Back. (Optionnel)
Exemple : -c -> active le mode Write Back -
-W
: Activer la stratégie d'allocation d'écriture (Write Allocate). (Optionnel)
Exemple : -W -> active l'allocation d'écriture
📚 Fonctionnement de LRU (Least Recently Used)
La politique de remplacement Least Recently Used (LRU) est une méthode utilisée pour gérer les lignes de cache lorsque le cache est plein et qu'il est nécessaire de remplacer une ligne. L'objectif principal de LRU est de garder dans le cache les données qui ont été utilisées le plus récemment, en supposant que les données utilisées récemment seront également utilisées à nouveau dans un avenir proche.
Principe de Fonctionnement
-
Gestion de l'Usage: Chaque fois qu'une ligne de cache est accédée (que ce soit une lecture ou une écriture), la ligne est marquée comme la plus récemment utilisée. Cela est effectué en mettant à jour une valeur associée à la ligne, qui indique le temps ou le nombre d'accès récents.
-
Incrémentation de Valeurs LRU: Lorsque l'une des lignes de cache est accédée, sa valeur LRU est réinitialisée à zéro, tandis que les autres lignes de l'ensemble voient leurs valeurs LRU incrémentées. Cela signifie que plus la valeur LRU d'une ligne est élevée, plus il a été longtemps depuis qu'elle a été utilisée.
-
Remplacement: Lorsque le cache atteint sa capacité maximale et qu'un nouvel accès nécessite l'allocation d'une ligne de cache, LRU remplace la ligne ayant la valeur LRU la plus élevée (la moins récemment utilisée). Cela garantit que les lignes de cache qui sont les plus susceptibles d'être utilisées à nouveau restent disponibles.
Avantages et Inconvénients
-
Avantages:
- LRU tend à offrir un bon taux de hit dans de nombreuses applications, car il prend en compte l'historique des accès.
- La méthode est relativement simple à comprendre et à mettre en œuvre.
-
Inconvénients:
- La mise à jour des valeurs LRU peut nécessiter un temps supplémentaire, en particulier pour les caches avec une grande associativité.
- Si la charge de travail a une taille de référence plus grande que le cache, cela peut conduire à un comportement inefficace, car de nombreuses lignes seront remplacées.
🛠️ Auteur
- Moncef STITI