« Fonctionnement d'un ordinateur/Architectures multiprocesseurs et multicœurs » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 104 :
===Le protocole à état Owned===
 
Les protocoles MESI et MSI ne permettent pas de transférer des données entre les caches sans passer par la mémoire. Si le processeur demande la copie valide d'une donnée, tous les caches ayant la bonne version de la donnée vont répondrerépondent en même temps :et la donnée est envoyée en plusieurs exemplaires ! Pour éviter ce problème, on doit rajouter un état supplémentaire : l'état Owned. Si un processeur écrit dans son cache, il mettra sa donnée en Owned., Lesmais les autres caches passeront leur donnée en version Modified, voire Shared une fois la mémoire mise à jour. : ainsiAinsi, un seul processeur pourra avoir une donnée dans l'état Owned. Seulet lec'est processeurlui qui possèdeest lachargé donnée en Owned vade répondre aux demandes de mise à jour (ceux possédant la donnée Shared ne répondant pas à la demande formulée par le processeur demandeur).
 
|[[File:MOSI Processor Transactions.png|400pxvignette|Protocole MOSI, transactions initiées par le processeur associé à la ligne de cache.]]
Divers protocoles de cohérences des caches utilisent cet état Owned. Le premier d’entre eux est le '''protocole MOESI''', un protocole MESI auquel on a jouté l'état O.
|[[File:MOSI Bus Transactions.png|350pxvignette|Protocole MOSI, transactions initiées par les autres processeurs.]]
 
Divers protocoles de cohérences des caches utilisent cet état Owned. Le premier d’entre eux est le '''protocole MOSI''', une variante du MESI où l'état exclusif est remplacé par l'état O. Lors d'une lecture, le cache va vérifiervérifie si la lecture envoyée sur le bus correspond à une de ses données. Mais cette vérification va prendre du temps, et le processeur va devoir attendre un certain temps. Si au bout d'un certain temps, aucun cache n'a répondu, le processeur postule qu'aucun cache n'a la donnée demandée et va lire la donnée en mémoire. Ce temps est parfois fixé une fois pour toute lors de la création des processeurs, mais il peut aussi être variable, qui est géré comme suit :
[[File:MOESI State Transaction Diagram.svg|centre|vignette|upright=2|MOESI State Transaction Diagram]]
 
Cependant, celui-ci n'est pas le seul. On peut notamment citer le '''protocole MOSI''', une variante du MESI où l'état exclusif est remplacé par l'état O.
 
{| class="flexible center"
|[[File:MOSI Processor Transactions.png|400px|Protocole MOSI, transactions initiées par le processeur associé à la ligne de cache.]]
|[[File:MOSI Bus Transactions.png|350px|Protocole MOSI, transactions initiées par les autres processeurs.]]
|}
 
Lors d'une lecture, le cache va vérifier si la lecture envoyée sur le bus correspond à une de ses données. Mais cette vérification va prendre du temps, et le processeur va devoir attendre un certain temps. Si au bout d'un certain temps, aucun cache n'a répondu, le processeur postule qu'aucun cache n'a la donnée demandée et va lire la donnée en mémoire. Ce temps est parfois fixé une fois pour toute lors de la création des processeurs, mais il peut aussi être variable, qui est géré comme suit :
* pour savoir si un cache contient une copie de la donnée demandée, chaque cache devra répondre en fournissant un bit ;
* quand le cache a terminé la vérification, il envoie un 1 sur une sortie spécifique, et un 0 sinon ;
* un ET logique est effectué entre tous les bits fournis par les différents caches, et le résultat final indique si tous les caches ont effectué leur vérification.
 
DiversOn protocolespeut deaussi cohérences des caches utilisent cet état Owned. Le premier d’entre eux estciter le '''protocole MOESI''', un protocole MESI auquel on a jouté l'état O.
 
[[File:MOESI State Transaction Diagram.svg|centre|vignette|upright=2|MOESI State Transaction Diagram]]
 
==Atomicité==