La mémoire est un ensemble d'emplacements qui contiennent des données, où la lecture d'un emplacement renvoie la dernière valeur écrite dans cet emplacement. Cette vision de la mémoire est l'abstraction retenue pour le développement de programmes séquentiels, et la présence de caches ne modifie en rien cette vision, car les processus voient la hiérarchie mémoire tous de la même façon. Une donnée est créée en un point du programme, écrite en mémoire, puis lue et utilisée plus loin dans le programme. Cette propriété se retrouve dans le cas de threads ou de processus s'exécutant sur un seul processeur, la mémoire étant utilisée pour passer des données : une lecture renvoie la dernière valeur écrite quelque soit le processus qui a fait cette écriture. On aimerait retrouver cette propriété lorsque deux processus s'exécutent sur deux processeurs différents. Mais les deux processeurs voient la mémoire à travers des caches différents, et, sans précaution, il peut arriver qu'un processus voie une nouvelle valeur dans son cache tandis qu'un autre processus voit encore l'ancienne, ce qui conduit à des caches incohérents (ce problème existe aussi dans un monoprocesseur entre le cache du processeur et les E/S traitées en DMA).
[...] 4/7 Ces transitions d'états peuvent aussi être implémentées simplement par un automate avec le diagramme d'états suivant : PrRd/- PrWr/- M PrWr/BusRdX PrWr/BusRdX BusRd/purge BusRdX/Purge Transaction lancée par un processeur Transaction lancée par un espion du bus S PrRd/BusRd/PrRd/BusRd BusRdX/- I Avec cet algorithme, toutes les écritures n'apparaissent pas sur le bus. Mais lorsque cette opération se produit, elle est signalée par un BusRdX qui garantit que tous les processeurs voient cette écriture en même temps : le principe de propagation est respecté. Entre deux actions bus pour ce bloc, les écritures sont faites localement par un seul processeur, et ce dans l'ordre de son programme : le principe de sérialisation est aussi respecté. [...]
[...] Que se passe-t-il en présence de caches? Imaginons que le processus P1 passe le premier: l'exécution du TEST-AND-SET amène le bloc contenant le drapeau dans le cache C1. P2 arrive ensuite et demande donc le bloc en écriture, ce qui provoque une invalidation dans C1. Le verrou étant poussé, P2 se met à boucler en attente active sur le drapeau. Pendant ce temps P3, puis les autres arrivent et font de même: le bloc contenant le drapeau se met à aller de cache en cache, provoquant à chaque cycle une invalidation, et tout ceci pour rien, puisque le verrou est bloqué. [...]
[...] Lors de la demande, la ligne est activée si au moins un processeur a déjà une copie du bloc), on le note E. Ainsi la prochaine écriture sur ce bloc pourra se faire localement en passant en même temps de bloc de l'état E à l'état M. Bien sûr il faut surveiller le bus pour observer les autres demandes sur ce bloc. Par exemple si un autre processeur le demande en lecture par un BusRd, il faut activer la ligne shared et le passer de E à tandis que le processeur qui en reçoit une copie le marque M. [...]
[...] En environnement multiprocesseur, La mise à jour différée conduit naturellement à une politique d'invalidation et des actions sur les divers caches sont donc à prendre dans certaines transitions d'états. Dans la littérature l'état V pour valide est plutôt noté S pour Shared c'est à dire partagé. Cas de la lecture. Succès (Hit) : la donnée est lue dans le cache, suite à une demande de lecture processeur PrRd. Cette opération se fait localement : pas d'accès au bus commun et l'état S ou M du bloc n'est pas changé. Echec (Miss) : le bloc est amené dans le cache. [...]
[...] Que devient le fonctionnement de ce cache en environnement multiprocesseur à bus commun ? 5. CACHE GERE EN MISE A JOUR IMMEDIATE EN MULTIPROCESSSEUR On va considérer le cas Write No-Allocate Le contrôleur du cache (c'est à dire la logique chargée de modifier les bits d'états dans le répertoire) doit maintenant réaliser des actions demandées par le processeur et l'espion du bus. Comme toute écriture se fait dans le cache ET la mémoire, elle est donc vue par tous les autres processeurs en même temps et deux stratégies sont alors possibles : - soit les processeurs qui ont une copie de la donnée dans leur cache la mettent à jour (stratégie de mise à jour), - soit les processeurs qui ont une copie de la donnée dans leur cache invalident la donnée (stratégie d'invalidation). [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture