ISB |
Barrière de synchronisation d'instruction |
| ARM |
Syntaxe
Paramètres
| Nom |
Description |
| cond |
Ce paramètre optionnel permet d'indiquer le code de condition. Ce paramètre n'est autorisé qu'en mode de code Thumb. |
| option |
Ce paramètre optionnel permet d'indiquer la limitation de l'opération d'indice à appliquer : |
| SY |
Cette constante permet d'indiquer une opération système ISB complète. |
Description
Cette instruction permet d'indiquer une barrière de synchronisation d'instruction.
Remarques
- ISB force la synchronisation du pipeline d'instructions : L'instruction ISB sert à vider et recharger le pipeline d'instructions du processeur. Cela
signifie que toutes les instructions suivantes dans le code seront rechargées à partir de la mémoire, garantissant que les modifications du contexte (comme un
changement de registre système) prennent effet immédiatement.
- Elle est essentielle après un changement de contexte système : Lorsqu'on modifie certains registres de contrôle (comme ceux affectant la MMU, les
permissions ou les caches), il est crucial d'exécuter ISB pour assurer que le processeur prenne bien en compte les changements. Sans cela, le comportement du programme
peut être imprévisible ou incohérent.
- Elle agit uniquement sur le flux d'instructions, pas sur les données : Contrairement à DMB ou DSB, l'instruction ISB ne synchronise pas l'accès aux
données en mémoire. Elle se concentre uniquement sur les instructions en attente dans le pipeline, ce qui est particulièrement utile dans les séquences sensibles
comme le passage d'un mode à un autre.
- Le paramètre cond n'est autorisé qu'en mode Thumb : Dans l'architecture ARM, l'instruction ISB peut être conditionnelle uniquement lorsqu'elle
est utilisée en mode Thumb, ce qui est une particularité intéressante. En mode ARM, ISB est toujours exécutée de façon inconditionnelle, ce qui reflète son importance
dans le contrôle du flot d'exécution.
- L'option SY est la plus couramment utilisée : L'option SY (System) dans ISB SY indique que la barrière s'applique à tout le système, assurant une
synchronisation complète. Il s'agit de l'option par défaut dans la majorité des cas, car elle garantit un comportement uniforme sur toutes les plateformes ARM.
- Indispensable après une modification du registre TTBR0 ou du SCTLR : Quand on change les registres qui définissent les tables de traduction de mémoire
(comme TTBR0) ou les contrôles système (SCTLR), ISB doit être appelée pour garantir que ces changements prennent effet avant l'exécution des instructions suivantes.
C'est une bonne pratique en développement bas niveau.
- Partie intégrante du triplet DSB → ISB pour la cohérence mémoire : Dans de nombreux cas, ISB est utilisée juste après une instruction DSB,
formant la séquence classique : DSB SY; ISB SY. DSB s'assure que toutes les opérations de mémoire précédentes sont complètes, et ISB garantit que les instructions
suivantes voient un état mémoire cohérent.
- Peut être coûteuse en performance si mal utilisée : L'instruction ISB provoque un flush complet du pipeline, ce qui peut ralentir significativement
l'exécution s'il est utilisé fréquemment ou de façon inutile. Il faut donc bien identifier les situations critiques où ISB est vraiment nécessaire, pour éviter des
pertes de performance.
Dernière mise à jour : Dimanche, le 12 novembre 2017