Was bedeutet eine Rennbedingung?

10

Ich bin ein neuer Elektrotechniker. Ich höre einige der anderen Ingenieure, mit denen ich zusammenarbeite, über einen Rennzustand sprechen, der auf einer unserer Rennstrecken vorliegt.

Was bedeutet das?

Stihl Alighve
quelle
Wenn Sie sich ein bestimmtes Beispiel ansehen möchten, haben "De-Glitching RAM Writes" und die beiden folgenden Artikel eine lange Diskussion über einen Fehler, der, soweit ich das beurteilen kann, durch eine Rennbedingung ausgelöst wurde.
Davidcary

Antworten:

16

Es bedeutet ganz einfach, dass zwei Dinge gleichzeitig um das Ergebnis "rennen".

Ein Beispiel ist eine Schaltung mit einem Reset- und einem Set-Pin. Wenn Sie den Reset auslösen, wird der Ausgang 0. Wenn Sie den Set auslösen, wird der Ausgang 1. Wenn Sie den Set zuerst auslösen und danach sehr, sehr schnell zurücksetzen, setzen Sie ihn zurück wird gesehen, also ist die Ausgabe 0.

Aber was passiert, wenn beide genau zur gleichen Zeit ausgelöst werden?

Wenn der Schaltungsentwickler aufgepasst hat, sollte es eine Antwort geben, wenn dies für die Funktion wichtig ist. Wenn es keine sichere Antwort auf diese Frage gibt, hat die Rennstrecke eine Rennbedingung, bei der das Signal vom Satz und das Zurücksetzen sich gegenseitig "rennen", um zu sehen, welche gewinnt, um die Ausgabe zu bestimmen.

Der Pfad mit der geringsten Verzögerung gewinnt normalerweise, aber dann können Sie die Rennbedingung als den genauen Auslöser ansehen, bei dem der am meisten verzögerte Pfad genau so viel vor dem schnelleren ausgelöst wird.

Viele Schaltungen, einschließlich logischer Bausteine ​​in ICs, haben bestimmte Race-Bedingungen, aber normalerweise sind sie so, dass Sie es nicht bemerken, wenn Sie die Schaltung so verwenden, wie es beabsichtigt ist. So oft, wenn Ingenieure ein paar Mal laut "Rennzustand" sagen, meinen sie tatsächlich, dass dies auch bei normalem Gebrauch passieren könnte, was ein Problem wäre, da unter Rennbedingungen ein normaler Betrieb nicht vorhergesagt werden kann.

In der Software wird der Begriff ebenfalls verwendet, jedoch häufig, um Zeitprobleme oder Abstürze anzuzeigen. Es ist jedoch ein ähnliches Prinzip. Wenn Sie zwei Prozesse auf einem Computer haben, die unabhängig voneinander ausgeführt werden, aber denselben Speicher verwenden, schützen Sie diesen Speicher häufig davor, von einem geschrieben zu werden, während der andere ihn verwendet. Wenn Sie dies nicht tun, nennen sie dies eine mögliche Rennbedingung: Ein Prozess könnte darin bestehen, einen Wert zu lesen, der gerade aktualisiert wird, oder beide könnten gleichzeitig darauf schreiben, und dann wissen Sie nicht, was passiert geschehen.

Asmyldof
quelle
2
Als Ergänzung zu dieser guten Antwort möchte ich darauf hinweisen, dass sich Hardware in diesen Situationen sehr schlecht verhalten kann . Echte Hardware wechselt nie sofort von 0 auf 1. Sie muss immer über einen kurzen Zeitraum zwischen ihnen ansteigen. Die meiste Logik geht davon aus, dass seit einem solchen Übergang genügend Zeit vergangen ist, dass sich die Transienten entweder auf "wirklich nahe 0" oder "wirklich nahe 1" aufgelöst haben. Wenn das Timing ... unglücklich ist, kann es näher an 0,5 liegen. Viele Schaltkreise werden in diesem Zustand "metastabil", was bedeutet, dass der Übergang eine unbestimmte Zeit in Anspruch nehmen kann, wodurch der gesamte Schaltkreis destabilisiert wird
Cort Ammon,
1
Selbst wenn Ihre Schaltung für den Fall ausgelegt ist, dass Set und Reset gleichzeitig aktiviert werden, können Sie sie nicht zuverlässig gleichzeitig aktivieren, sodass Sie nicht wissen, welche zuerst aktiviert wird.
user253751
Nichtatomare Operationen sind ein besseres Beispiel für Rennbedingungen in Software. Ein Programm könnte eine neue Datei mit Cs erstellen fopen(), Daten darauf schreiben fclose(), dann chmod(), um sie zu sichern. Dieses kurze Fenster zwischen fopen()und chmod()öffnet eine mögliche Race-Bedingung, in der der Standard-Dateimodus es einem unerwünschten Außenstehenden ermöglichen könnte, mit der Datei auf eine Weise zu arbeiten, die nach dem chmod()Aufruf verweigert wird . Die Lösung besteht darin, open()stattdessen die Datei mit zu erstellen , wodurch der Modus im Rahmen der Dateierstellung festgelegt werden kann.
Warren Young
6

Der Begriff "Rennbedingung" impliziert, dass (1) zwei oder mehr Signale in beliebiger Reihenfolge und willkürlich nahe beieinander ankommen können und (2) es nicht möglich ist, analytisch zu zeigen, dass es im Wesentlichen keine Wahrscheinlichkeit für eine mögliche Kombination von Ankunft gibt mal ein Problem aufwerfen.

Unter dem Gesichtspunkt eines einzelnen Flip-Flops, dessen Dateneingabe sich jederzeit in Bezug auf die Uhr ändern kann, können nahezu gleichzeitige Übergänge auf der Uhr und Dateneingaben eine Rennbedingung darstellen. Unter dem Gesichtspunkt des Gesamtverhaltens der Schaltung würden sie jedoch keine Rennbedingung darstellen, wenn sie nur zu Zeiten auftreten könnten, in denen sich keine nachgeschaltete Schaltung darum kümmern würde, was der Latch hielt, und keine nachgeschaltete Schaltung sich darum kümmern würde, was der Latch hielt bis nach dem Eintreffen eines Taktimpulses, der nicht in der Nähe von Übergängen am Dateneingang sein konnte.

Da es oft nicht möglich ist, alle Möglichkeiten problematischer Eingabezeiten vollständig auszuschließen, wird in vielen Analysen der Rennbedingungen festgestellt, dass das zweite Register immer einrastet, wenn der Ausgang eines Registers in ein anderes Register eingespeist wird, das von demselben Takt gesteuert wird ein "sauberes" Hoch oder ein "sauberes" Tief, selbst wenn die Eingänge des ersten Registers dazu führten, dass ein Eingangspegel erfasst wurde, der genau an der Schaltschwelle lag. Theoretisch wäre es möglich, dass der erste Latch einen Pegel erfasst, der gerade genug über oder unter seiner exakten Schaltschwelle liegt, dass der Ausgangspegel genau schaltet, wenn der nächste Taktimpuls eintrifft.

Wenn man beispielsweise einen Eingang nimmt und ihn in eine Folge von drei Flip-Flops weiterleitet und eine Schaltung hat, die hoch ausgibt, wenn das zweite Flop hoch, aber das dritte niedrig ist, dann tritt jede ansteigende Flanke auf Die Dateneingabe, der eine volle Taktperiode mit niedriger Zeit vorausgeht, gefolgt von einer vollen Taktperiode mit hoher Zeit, würde im Wesentlichen garantiert, dass die Ausgabe der Schaltung für genau eine Taktperiode hoch ist.

schematisch

simulieren Sie diese Schaltung - Schema erstellt mit CircuitLab

In diesem Schema wird ein Signal mit etwas unregelmäßigem Timing auf drei Arten auf einen Takt normiert, so dass nach jeder ansteigenden Flanke ein Ausgang erzeugt wird, der für einen Taktzyklus hoch ist. Der erste Versuch, das Signal zu normalisieren, erzeugt einen Ausgang, der böse aussieht und eine offensichtliche Racebedingung aufweist, wenn sich Eingang und Takt gleichzeitig ändern. Der zweite Ansatz ist viel besser, hat aber immer noch eine Race-Bedingung (die der Simulator nicht auslösen kann), wenn das Timing der Uhr und der Daten bewirkt, dass das erste Register einen Zwischenwert erfasst. Der dritte Ansatz stellt gängige Praxis dar und wird im Allgemeinen als sicher angesehen, da selbst wenn das erste Register kein sauberes Hoch oder kein sauberes Tief erfasst, Es ist sehr unwahrscheinlich, dass die Ausgabe des ersten Registers genau das richtige Verhalten aufweist, damit das zweite Register nicht sauber greift. Wenn sich die Daten sehr nahe an der Uhr ändern, werden sie möglicherweise im aktuellen Zyklus erfasst oder erst im nächsten Zyklus erfasst. Wenn jedoch eine der beiden Situationen akzeptabel wäre, gibt es keine Rennbedingung.

Superkatze
quelle
Sie sagten: "... eine Ausgabe, die böse aussieht." Ist das eine andere Art, "metastabiler Zustand" zu sagen?
Solomon Slow
@jameslarge: Der Simulator verarbeitet keine metastabilen Zustände. Ich beschreibe den ersten Ausgang als hässlich, weil es keine minimale Impulsbreite gibt, und den zweiten Ausgang als riskant wegen der Möglichkeit metastabiler Zustände.
Supercat
2

Kurz gesagt bedeutet dies, dass das Ergebnis eines Prozesses durch die Reihenfolge des Eintreffens zweier Eingaben beeinflusst wird und diese Reihenfolge unbestimmt ist (kann nicht garantiert werden).

JRobert
quelle