| 25 | Mais en pratique, dans les architectures à base de bus permettant le scoop (c'est à dire la possibilité pour n'importe quel maître de surveiller ce que font les autres maîtres), l'enregistrement des requêtes de mise sous surveillance peur être distribuée dans chacun des contrôleurs de cache L1, et c'est ce qui est fait par le contrôleur de cache L1 utilisé dans l'UE Multi, comme cela peut être vérifié |
| 26 | en analysant le comportement des 4 automates contenus dans ce composant matériel. |
| 27 | |
| 28 | Plus précisément, l'exécution d'une instruction ''ll(X)'' par un coeur se traduit par une requête de type LL vers l'automate DCACHE_FSM du contrôleur de cache. Cet automate enregistre l'adresse X dans un registre spécifique LLSC_ADDR, ainsi que la validité de cette requête dans une bascule LLSC_VALID, envoie une requête de lecture non cachable vers l'automate PIBUS_FSM, et gèle le coeur en attendant la réponse de la mémoire. Si l'automate SNOOP_FSM détecte qu'un autre coeur effectue une écriture à une adresse X enregistrée dans les registres LLSC_ADDR et LLSC_VALID, celle ci est invalidée. |
| 29 | Par ailleurs, l'exécution d'un instruction ''sc(X)'' par un coeur se traduit par une requête de type LL vers l'automate DCACHE_FSM du contrôleur de cache. Si il existe une requête LLSC valide dans les registres LLSC_ADDR et LLSC_VALID, c'est un succès, et cet automate envoie une requête d'écriture vers l'automate PIBUS_FSM. Sinon, l'automate DCACHE_FSM retourne directement une réponse d'échec au coeur demandeur. |