Que signifie une condition de concurrence?

10

Je suis un nouvel ingénieur électricien alors soyez indulgent avec moi. J'entends certains des autres ingénieurs avec qui je travaille parler d'une condition de concurrence qui existe dans l'un de nos circuits.

Qu'est-ce que ça veut dire?

Stihl Alighve
la source
Si vous voulez regarder un exemple spécifique, "De-Glitching RAM Writes" et les deux articles suivants ont une longue discussion sur un bogue qui, pour autant que je sache, a été déclenché par une condition de concurrence critique .
davidcary

Réponses:

16

Cela signifie, tout simplement, que deux choses en même temps "course" pour le résultat.

Un exemple est un circuit avec une réinitialisation et une broche de réglage, si vous déclenchez la réinitialisation, la sortie devient 0. Si vous déclenchez le réglage, la sortie devient 1. Si vous déclenchez d'abord le réglage puis réinitialisez très, très rapidement après, réinitialisez sera vu, donc la sortie est 0.

Mais s'ils se déclenchent tous les deux en même temps, que se passe-t-il?

Si le concepteur du circuit a fait attention, il devrait y avoir une réponse, si cela est important pour la fonction. S'il n'y a pas de réponse certaine à cette question, le circuit a une condition de course, où le signal de l'ensemble et la remise à zéro se "font la course" pour voir lequel gagne pour déterminer la sortie.

Le chemin avec le moins de retard gagnera généralement, mais alors vous pourriez voir la condition de course comme le déclencheur exact dans lequel le chemin le plus retardé est déclenché exactement avant le plus rapide.

De nombreux circuits, y compris les blocs de construction logiques à l'intérieur des circuits intégrés, ont certaines conditions de concurrence, mais ils sont généralement tels que lorsque vous utilisez le circuit comme il est prévu, vous ne le remarquerez pas. Si souvent, lorsque les ingénieurs disent à haute voix «condition de course» plusieurs fois, cela signifie en fait que cela peut également se produire en utilisation normale, ce qui serait un problème, car dans une condition de course, un fonctionnement normal ne peut pas être prévu.

Dans le logiciel, le terme est également utilisé, mais souvent pour désigner des problèmes de synchronisation ou des blocages. C'est un principe similaire, cependant. Souvent, lorsque vous avez deux processus sur un ordinateur fonctionnant indépendamment, mais en utilisant la même mémoire, vous protégez cette mémoire contre l'écriture par l'un, tandis que l'autre l'utilise. Si ce n'est pas le cas, ils appellent cela une condition de concurrence possible: un processus pourrait lire une valeur qui est juste en cours de mise à jour, ou les deux pourraient y écrire en même temps et alors vous ne savez pas ce qui va se produire.

Asmyldof
la source
2
En complément de cette bonne réponse, je voudrais souligner que le matériel peut très mal se comporter dans ces situations. Le matériel réel ne passe jamais instantanément de 0 à 1. Il doit toujours augmenter sur une courte période entre eux. La plupart des logiques supposent que suffisamment de temps s'est écoulé depuis une telle transition que les transitoires se sont résolus à "vraiment proche de 0" ou "vraiment proche de 1." Si le timing est ... malheureux, il peut être plus proche de 0,5. De nombreux circuits deviennent "métastables" dans cet état, ce qui signifie qu'ils peuvent prendre un temps indéterminé pour la transition, déstabilisant l'ensemble du circuit
Cort Ammon
1
Même si votre circuit est conçu pour gérer le cas où Set et Reset sont activés simultanément, vous ne pouvez pas les activer de manière fiable simultanément, vous ne saurez donc pas lequel est activé en premier.
user253751
Les opérations non atomiques sont un meilleur exemple de conditions de concurrence dans les logiciels. Un programme pourrait créer un nouveau fichier à l'aide de C fopen(), y écrire des données fclose(), puis chmod()le sécuriser. Cette brève fenêtre entre fopen()et chmod()ouvre une condition de concurrence possible où le mode de fichier par défaut pourrait permettre à un étranger indésirable de travailler avec le fichier d'une manière refusée après l' chmod()appel. La solution consiste à créer le fichier avec à la open()place, ce qui permet de définir le mode dans le cadre de l'opération de création de fichier.
Warren Young
6

Le terme "condition de concurrence" implique que (1) deux signaux ou plus peuvent arriver dans n'importe quel ordre, arbitrairement proches l'un de l'autre, et (2) il n'est pas possible de montrer analytiquement qu'il y a essentiellement une probabilité nulle de toute combinaison possible d'arrivée posant parfois un problème.

Du point de vue d'une seule bascule dont l'entrée de données pourrait changer à tout moment par rapport à l'horloge, des transitions quasi simultanées sur l'horloge et les entrées de données pourraient poser une condition de concurrence. Du point de vue du comportement global du circuit, cependant, ils ne poseraient pas de condition de concurrence s'ils ne pouvaient se produire qu'à des moments où aucune circuité en aval ne se soucierait de ce que le verrou a tenu, et aucun circuit en aval ne commencerait à se soucier de ce que le verrou a tenu qu'après l'arrivée d'une impulsion d'horloge qui ne pouvait se trouver à proximité d'aucune transition sur l'entrée de données.

De plus, comme il n'est souvent pas possible d'éliminer complètement complètement toute possibilité de temporisations d'entrée problématiques, de nombreuses analyses des conditions de concurrence diront que si la sortie d'un registre est alimentée dans un autre qui est contrôlé par la même horloge, le deuxième registre se verrouille toujours un «propre» haut ou un «propre» bas même si les entrées du premier registre l'ont fait capturer un niveau d'entrée qui était juste au seuil de commutation. En théorie, il serait possible pour le premier verrou de capturer un niveau juste au-dessus ou en dessous de son seuil de commutation exact pour que le niveau de sortie commute précisément à l'arrivée de l'impulsion d'horloge suivante.

En conséquence, si l'on devait par exemple prendre une entrée et la passer dans une séquence de trois bascules, et avoir un circuit qui sort haut chaque fois que le deuxième bascule était haut mais le troisième était bas, alors tout front montant qui se produit sur l'entrée de données qui est précédée d'une période d'horloge complète d'une valeur de temps faible, et suivie d'une période d'horloge complète de temps élevé, serait essentiellement garantie de faire en sorte que la sortie du circuit soit élevée pendant exactement une période d'horloge.

schématique

simuler ce circuit - Schéma créé à l'aide de CircuitLab

Dans ce schéma, un signal avec une synchronisation quelque peu irrégulière est normalisé à une horloge de trois manières de manière à générer une sortie qui est élevée pour un cycle d'horloge après chaque front montant. La première tentative de normalisation du signal génère une sortie d'aspect désagréable et présente une condition de concurrence évidente si l'entrée et l'horloge changent simultanément. La deuxième approche est bien meilleure, mais a toujours une condition de concurrence (que le simulateur ne peut pas déclencher) si le timing de l'horloge et des données amène le premier registre à capturer une valeur intermédiaire. La troisième approche représente une pratique courante et serait généralement considérée comme sûre, car même si le premier registre ne parvient pas à capturer un haut propre ou un bas propre, il est très peu probable que la sortie du premier registre ait exactement le bon comportement pour empêcher le deuxième registre de saisir proprement. Si les données changent très près de l'horloge, elles peuvent être saisies sur le cycle en cours, ou ne pas être saisies avant la suivante, mais si l'une ou l'autre situation est acceptable, il n'y a pas de condition de concurrence.

supercat
la source
Vous avez dit: "... une sortie qui a l'air désagréable." Est-ce une autre façon de dire «état métastable»?
Solomon Slow
@jameslarge: le simulateur ne gère pas les états métastables. Je décris la première sortie comme laide car il n'y a pas de largeur d'impulsion minimale, et la deuxième sortie comme risquée en raison de la possibilité d'états métastables.
supercat
2

En bref, cela signifie que le résultat d'un processus sera affecté par la séquence d'arrivée de deux entrées, et que cette séquence est indéterminée (ne peut être garantie).

JRobert
la source