| Assembleur 370 |
CS |
| Compare and Swap |
Syntaxe
Paramètres
| Nom |
Description |
| R1 |
Ce paramètre permet d'indiquer la valeur à comparer avec le contenu mémoire. |
| R3 |
Ce paramètre permet d'indiquer la valeur à stocker (si la comparaison réussit). |
| D2(B2) |
Ce paramètre permet d'indiquer l'adresse mémoire à laquelle on accède : D2 = déplacement, B2 = registre de base. → adresse effective = B2 + D2. |
Description
Cette instruction permet d'effectuer la comparaison d'une opérande et d'un registre. S'ils sont égales, alors l'autre registre est copié dans l'opérande.
Remarques
- L'instruction CS est utilisée pour les opérations atomiques : elle compare une valeur mémoire à celle d'un registre, et en cas d'égalité, elle remplace la mémoire par
une nouvelle valeur. Cela évite les conflits d'accès entre processus ou processus légers. C'est une base essentielle des mécanismes de synchronisation.
- CS prend trois opérandes : la valeur de comparaison (R1), la valeur de substitution (R3), et une adresse mémoire calculée à partir de D2(B2). Elle travaille sur un
double mot (8 octets), assurant une bonne couverture de données. Cela la rend adaptée aux systèmes 32 ou 64 bits.
- Si la valeur en mémoire est égale à celle de R1, le contenu de R3 est entreposé à la même adresse. Sinon, le contenu mémoire est copié dans R1, indiquant l'échec de
l'opération. Cela permet au programme de détecter un conflit d'accès concurrent.
- L'instruction CS est non destructive en cas d'échec : rien n'est modifié en mémoire. Elle évite donc tout effet de bord imprévu lors de son utilisation. Cela garantit
une exécution sécurisée et contrôlable.
- CS est largement utilisée pour implémenter des verrous (locks) sans avoir besoin d'instructions système complexes. Elle est à la base des primitives telles que
test-and-set, spinlocks,... C'est une construction clé pour le traitement parallèle.
- Cette instruction n'utilise pas de masque : les 64 bits complets doivent correspondre exactement pour que le remplacement ait lieu. Cela renforce la rigueur de la
vérification avant toute mise à jour. Le moindre bit de différence empêche l'échange.
- En cas d'échec de la substitution, le programme peut boucler et réessayer jusqu'à réussite. C'est une méthode de contrôle classique en programmation concurrente non
bloquante. Elle permet d'assurer l'intégrité des données partagées.
- L'utilisation de CS suppose que la zone mémoire ciblée est bien alignée sur 8 octets. Sinon, des erreurs ou comportements indéfinis peuvent survenir. Cela demande une
discipline de codage rigoureuse au niveau bas.
Dernière mise à jour : Mardi, le 22 août 2017