DSB |
Barrière de synchronisation de données |
|---|---|
| ARM | |
Syntaxe
| DSB{cond} {option} |
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 : | |
| Constante | Description | |
| SY | Cette constante permet d'indiquer une opération système DSB complète. | |
| ST | Cette constante permet d'indiquer une opération DSB attendant seulement pour l'entreposage complète. | |
| ISH | Cette constante permet d'indiquer une opération DSB uniquement sur le domaine interne partageable. | |
| ISHST | Cette constante permet d'indiquer une opération DSB attendant uniquement que l'entreposage soit terminés et uniquement vers le domaine interne partageable. | |
| NSH | Cette constante permet d'indiquer une opération DSB seulement jusqu'au point d'unification. | |
| NSHST | Cette constante permet d'indiquer une opération DSB n'attendant pas que l'entreposage soit terminés et seulement jusqu'au point d'unification. | |
| OSH | Cette constante permet d'indiquer une opération DSB uniquement sur le domaine externe partageable. | |
| OSHST | Cette constante permet d'indiquer une opération DSB n'attendant que la fin de l'entreposage et uniquement vers le domaine externe partageable. | |
Description
Cette instruction permet d'indiquer une barrière de synchronisation de données.
Remarques
- DSB garantit l'achèvement complet des accès mémoire précédents : L'instruction DSB force le processeur à attendre que tous les accès mémoire précédents soient entièrement terminés avant de continuer l'exécution. Contrairement à DMB qui garantit uniquement l'ordre, DSB garantit également l'achèvement, ce qui est indispensable pour certaines opérations critiques.
- Indispensable pour la cohérence lors de l'accès aux périphériques : Quand un processeur écrit dans des registres matériels ou envoie des commandes via des ports mémoire-cartographiés, l'usage de DSB garantit que ces accès sont effectivement réalisés avant de continuer. Cela évite des effets de course entre le processeur et les périphériques.
- La variante SY assure une synchronisation totale du système : L'option SY est la forme la plus complète de DSB. Elle attend que tous les accès mémoire de tous types et dans tous les domaines soient finis. C'est la plus sûre, mais elle a un impact sur les performances, et doit être utilisée judicieusement.
- Les autres options permettent de limiter la portée : Les options comme ISH, OSH, NSH,..., limitent la portée de la synchronisation à des zones spécifiques du système (interne/externe partageable,...). Cela permet d'optimiser les performances tout en assurant une synchronisation appropriée selon le contexte.
- Elle se distingue de DMB par son effet bloquant : Alors que DMB impose un ordre logique entre les opérations mémoire, DSB est bloquante : le processeur attend réellement que toutes les opérations soient terminées. Ce comportement est vital dans des séquences critiques comme l'invalidation de cache ou l'activation d'un périphérique.
- Utilisée dans les séquences critiques système : On retrouve DSB dans des routines système sensibles : activation de MMU, configuration de caches, changement de niveau de privilège, etc. Son rôle est de garantir que tous les effets précédents sont visibles et stabilisés avant de passer à l'étape suivante.
- L'utilisation du {cond} est restreinte au mode Thumb : Comme pour DMB, la condition {cond} n'est autorisée qu'en mode Thumb. Cela permet d'insérer une barrière conditionnelle sans branchement explicite. En mode ARM, la version conditionnelle directe de DSB n'est pas permise.
- DSB est essentielle dans le respect du modèle mémoire ARM : ARM utilise un modèle mémoire faible, qui autorise les réordonnancements d'instructions mémoire. DSB est un outil permettant de restaurer un comportement déterministe, conforme aux attentes d'un programmeur C/C++ ou d'un système d'exploitation, en forçant une synchronisation complète.
Dernière mise à jour : Dimanche, le 12 novembre 2017