Systèmes · C

Projet en action

SimulateurCache

Un simulateur de hiérarchie mémoire en C qui transforme des adresses 32 bits en tag, index et offset, puis compare LRU, FIFO et Random sur des traces d’accès.

CSystèmesMémoire cacheLRU / FIFO / Random
MODE DE DÉMOINTERACTIFReconstitution fidèle de l’exécution

Le projet, derrière l’écran

Le projet
sans détour.

Le sujet, le fonctionnement, le point difficile et les choix de code : tout ce qu’il faut pour comprendre le projet rapidement.

LE SUJETProjet de systèmes · BUT Informatique · programmation C

Le projet consistait à reconstruire, à l’échelle d’un programme, le cheminement d’un accès mémoire dans un cache processeur. Trois implémentations séparées permettent de comparer LRU, FIFO et Random sur les mêmes traces.

LE BESOINPourquoi je l’ai fait

L’objectif était de rendre observables des mécanismes normalement invisibles : une adresse 32 bits est découpée en offset, index et tag, puis confrontée à l’état courant des lignes du cache pour déterminer un hit, un miss ou une éviction.

EN DÉMOCe que vous pouvez tester

Le parcours principal est jouable ici. Le dépôt GitHub garde la version complète du projet et ses fichiers.

LE FONCTIONNEMENTComment l’idée devient un programme

Le programme lit des traces composées de lectures de données, écritures de données et références d’instructions. Il calcule dynamiquement le nombre d’ensembles à partir de la taille du cache, de la taille des lignes et de l’associativité, alloue les structures en mémoire, maintient les bits valid et dirty, puis comptabilise séparément hits, misses, accès mémoire, write-back et temps d’exécution. L’option -c active la politique Write Back ; les paramètres -s, -l, -a et -W sont exposés via getopt pour rejouer différentes configurations.

LE POINT DÉLICATCe qui demande de la rigueur

Maintenir un état cohérent de la hiérarchie mémoire tout en recalculant, pour chaque adresse, son ensemble, son tag, son hit ou son miss, sa politique d’éviction et son éventuel write-back.

DANS LE CODEComment les responsabilités sont rangées

Le dépôt sépare clairement les trois politiques dans leurs propres répertoires, avec un Makefile et un README par implémentation. Les traces d’entrée et le générateur de traces sont isolés du cœur du simulateur, ce qui permet de reproduire les comparaisons et de faire varier la charge sans modifier l’algorithme.

LE CHEMIN DU PROJETTrace mémoire Hits et misses
ENTRÉETrace mémoire
01Découpertag / index / offset
02Chercherensemble et lignes
03DéciderLRU / FIFO / Random
RÉSULTATHits et misses

Démonstration

Voir le projet
prendre vie.

Explorez les fonctionnalités, les interactions et le parcours principal du projet.

SimulateurCache / C · systèmes

Le simulateur lancé depuis un terminal

DÉMO LOCALE
lru/cache_simulatorC / STDIN TRACE
moncef@portfolio:~/SimulateurCache/lru$
$ make
gcc cache_lru.c -o cache_simulator -lm -Wall
$ ./cache_simulator -s 1 -l 8 -W -c -a 2 < ../traces/sample

Prêt à lire la trace mémoire depuis stdin.

POLITIQUE DE REMPLACEMENTLRU
64 sets · 2-way
SET —en attente d’un accès
LINE 0invalid
LINE 1invalid
HITS0
MISSES0
HIT RATE0%
WRITE-BACK0

Chaque accès est découpé en type, adresse, set et tag. Le simulateur maintient l’état des lignes, distingue lectures de données, écritures et instructions, puis expose hits, misses, évictions, write-back et accès mémoire.

Reconstitution fidèle de l’exécutionVoir le dépôt GitHub
i
Pour aller plus loin

La démo montre le résultat. Le dépôt GitHub contient le code complet et les fichiers du projet.