= M2 SESI - Archi 3 = = TP2 : Machine d'états d'un cache L1 Write-Back MESI = L'objectif de ce TP est de comprendre l'implémentation d'un protocole de cohérence de cache de type write-back MESI. Pour cela, on demande l'écriture des machines d'états d'un controlleur de cache L1 write-back et du controlleur mémoire associé, comme lors du TP1. == 1. Spécification == Dans cette première partie, il vous est demandé de dessiner sur une feuille (ou sur un logiciel adapté) les machines d'état du cache L1 write-back à invalidations et du contrôleur mémoire associé. La liste des états vous est donnée ci-dessous, il faut donc remplir chaque état avec les actions qui y sont associées et représenter les transitions entre états. Pour représenter les actions, vous pouvez utiliser du français ou du pseudo-code. Liste des états du contrôleur de cache : {{{ IDLE, // Détecter les requêtes d'invalidation et du processeur, répondre aux lectures qui font hit WRITE_UPDATE, // Après une écriture : mettre à jour le cache, répondre au processeur MISS, // Envoyer une requête de miss (au sens large) WRITE_BACK, // Envoyer une requête d'écriture pour évincer une ligne dirty MISS_WAIT, // Attendre la réponse à un miss et la traiter INVAL // Traiter une requête d'invalidation }}} Liste des états du contrôleur mémoire : {{{ IDLE, // Traiter les requêtes qui arrivent READ_LINE, // Tester si l'envoi d'invalidation est requis GETM, // Tester si l'envoi d'invalidation est requis WRITE_LINE, // Répondre à une requête d'écriture, mettre à jour les données du cache (suite à une requête de write-back) INVAL, // Initialiser l'envoi d'invlidations INVAL_SEND, // Envoyer les invalidations INVAL_WAIT, // Attendre les réponses aux invalidations envoyées DIR_UPDATE, // Mettre à jour les meta-données du cache RSP_GETM, // Répondre à une requête GETM ou GETM_LINE RSP_READ // Répondre à une requête de MISS }}} Comme pour le TP1, ce schéma fera partie du rendu. == 2. Prise en main des sources == Vous pouvez réutiliser les packages importés pour le TP1. Il suffit de changer l'instance des contrôleurs de cache et mémoire dans les fichiers de topcell (par exemple, topcells/Top2Procs.java) : * `MemController memCtrl = new MemWtiController` -> `MemController memCtrl = new MemMesiController` * `L1Controller l1Ctrl = new L1WtiController` -> `L1Controller l1Ctrl = new L1MesiController` Le schéma du diagramme objet donné pour le TP1 est redonné ci-dessous : [[Image(diagramme_objet.svg)]] == 3. Écriture des machines d'état == Il faut compléter les classes L1MesiController et !MemMesiController à partir des machines d'état dessinées dans la partie 1. Il faudra bien sûr tester votre code au travers d'entrelacements de requêtes bien choisis. Vous pouvez soit créer ces requêtes dans la classe de la Topcell (conseillé), soit dynamiquement depuis l'interface en cours de simulation. == 4. Rendu == Vous devrez rendre un compte-rendu sommaire (électronique) comprenant le schéma, ainsi que les tests que vous avez effectués et leur justification (ce que vous avez voulu tester pour chaque test). De plus, si votre code n'est pas fonctionnel au moment du rendu, il faudra expliquer les fonctionnalités manquantes ou les tests qui ne marchent pas. Le code à rendre l'est sous la forme d'une archive comprenant les 2 fichiers écrits, à envoyer à l'adresse [MailAsim:quentin.meunier Quentin Meunier] au plus tard la veille de l'examen réparti 1.