Maison >développement back-end >C++ >Les processeurs x86 modernes ne peuvent-ils vraiment pas stocker de manière atomique un seul octet en mémoire ?

Les processeurs x86 modernes ne peuvent-ils vraiment pas stocker de manière atomique un seul octet en mémoire ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-29 08:49:10628parcourir

Can Modern x86 CPUs Really Not Atomically Store a Single Byte to Memory?

Le matériel x86 moderne ne peut-il pas stocker un seul octet en mémoire ?

La déclaration de Stroustrup dans son livre fait référence au comportement potentiel d'un matériel hypothétique sans un modèle de mémoire bien défini. Il suggère qu'un tel matériel pourrait implémenter des magasins d'octets avec des mises à jour non atomiques, affectant potentiellement les octets voisins.

Comportement réel du matériel moderne

Cependant, le matériel moderne, y compris x86, ne se comporte pas de la manière décrite par Stroustrup :

  • Les magasins à un octet sur le matériel x86 sont atomiques et ne ne perturbe pas les octets environnants.
  • La mise en œuvre de magasins d'octets avec des cycles RMW atomiques (lecture-modification-écriture) est inutile et inefficace sur les processeurs hautes performances.
  • Certains processeurs non x86 peuvent utiliser du RMW atomique. cycles en interne pour implémenter les magasins d'octets, mais cela n'est pas visible en externe logiciel.

Contexte historique

La déclaration de Stroustrup peut avoir été basée sur le comportement des premiers processeurs Alpha AXP, qui ne prenaient pas initialement en charge les instructions de chargement/stockage d'octets. . Cependant, les versions ultérieures d'Alpha et tous les processeurs modernes prennent en charge des magasins d'octets sûrs et efficaces.

Implémentation matérielle

Les processeurs modernes utilisent généralement des caches qui stockent des segments de mémoire. Dans un système mis en cache :

  • Tous les magasins d'octets dans une ligne de cache sont atomiques.
  • Le processeur récupère l'intégralité de la ligne de cache, modifie l'octet et réécrit la ligne en mémoire.
  • Le contrôleur de cache reste sous le contrôle de la ligne pendant que la mise à jour des octets est effectuée, empêchant ainsi les modifications involontaires par d'autres cœurs.

Exceptions

Bien que les processeurs modernes fournissent des magasins d'octets atomiques, il peut y avoir des exceptions dans certaines situations :

  • Non mis en cache les régions de mémoire peuvent ne pas avoir les mêmes protections, permettant potentiellement des écritures d'octets non atomiques.
  • E/S les opérations sur les appareils peuvent ne pas être atomiques au niveau des octets.

Conclusion

En pratique, le matériel moderne prend en charge les magasins d'octets atomiques, ce qui rend la description de Stroustrup du matériel potentiel comportement moins pertinent pour les systèmes réels. Les garanties du modèle de mémoire fournies par les compilateurs C reposent sur le comportement fiable du matériel moderne pour garantir la sécurité des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn