DMB |
Barrière de mémoire de données |
|---|---|
| ARM | |
Syntaxe
| DMB{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 DMB complète. | |
| ST | Cette constante permet d'indiquer une opération DMB attendant seulement pour l'entreposage complète. | |
| ISH | Cette constante permet d'indiquer une opération DMB uniquement sur le domaine interne partageable. | |
| ISHST | Cette constante permet d'indiquer une opération DMB attendant uniquement que l'entreposage soit terminés et uniquement vers le domaine interne partageable. | |
| NSH | Cette constante permet d'indiquer une opération DMB seulement jusqu'au point d'unification. | |
| NSHST | Cette constante permet d'indiquer une opération DMB 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 DMB uniquement sur le domaine externe partageable. | |
| OSHST | Cette constante permet d'indiquer une opération DMB 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 mémoire de données.
Remarques
- DMB garantit l'ordre des accès mémoire : L'instruction DMB impose un ordre strict dans l'exécution des opérations mémoire. Elle s'assure que toutes les écritures (stores) et lectures (loads) de mémoire initiées avant elle sont visibles et effectuées avant toute opération mémoire lancée après elle. Cela évite les effets indésirables liés à l'exécution désordonnée.
- Essentielle dans les systèmes multiprocesseurs : Dans les environnements multi-coeurs ou multi-processus légers, DMB est utilisée pour synchroniser la mémoire partagée. Sans cette barrière, un cour pourrait voir les effets d'un autre coeur dans un ordre inattendu, menant à des bogues subtils ou des corruptions de données.
- L'option SY représente la barrière la plus forte : L'option SY (System) garantit que tous les accès mémoire de tous types et de tous domaines sont terminés. Elle est la plus sûre mais aussi la plus coûteuse en performance. On l'utilise quand on ne peut tolérer aucun réordonnancement dans tout le système.
- Des variantes plus ciblées pour améliorer les performances : Les options comme ISH, NSH, OSH,..., permettent d'appliquer la barrière à des domaines spécifiques : interne partageable, non partageable ou externe partageable. Cela permet de minimiser l'impact sur les performances en restreignant la portée de la synchronisation.
- Utilisable en code Thumb avec condition {cond} : La condition {cond} n'est autorisée qu'en mode Thumb, ce qui permet d'exécuter DMB uniquement si certaines conditions sont remplies (par exemple, si une interruption a été détectée). Cela permet d'intégrer la barrière dans des logiques conditionnelles sans branchements explicites.
- Différente de DSB et ISB, bien que souvent confondue : DMB ne vide pas les files d'attente d'exécution comme le fait DSB (Data Synchronization Barrier), et ne rafraîchit pas le pipeline comme ISB (Instruction Synchronization Barrier). Elle se limite à l'ordre des accès mémoire, ce qui en fait un outil plus léger et spécifique.
- Cruciale pour l'interaction avec les périphériques : Lorsqu'on communique avec des périphériques via des zones mémoire cartographiées (MMIO), DMB garantit que les écritures vers ces adresses sont bien visibles dans le bon ordre. Cela évite que certaines commandes envoyées au matériel soient exécutées dans un ordre incorrect.
- Instruction obligatoire dans certaines API système : Dans certains systèmes (par exemple les OS temps réel ou les SDK de microcontrôleurs ARM), l'usage de DMB est imposé avant ou après certaines opérations critiques, comme la mise à jour d'un registre de contrôle ou l'écriture d'un flag de synchronisation. Elle garantit la prédictibilité de l'exécution.
Dernière mise à jour : Dimanche, le 12 novembre 2017