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?
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?
Antworten:
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.
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.
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.
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.