¿Qué significa una condición de carrera?

10

Soy un nuevo ingeniero eléctrico, así que tengan paciencia conmigo. Escucho a algunos de los otros ingenieros con los que trabajo hablar sobre una condición de carrera que existe en uno de nuestros circuitos.

Qué significa eso?

Stihl Alighve
fuente
Si desea ver un ejemplo específico, "Escrituras de RAM de Glitching" y los dos artículos siguientes tienen una larga discusión sobre un error que, por lo que puedo decir, fue provocado por una condición de carrera.
davidcary

Respuestas:

16

Significa, muy simplemente que dos cosas al mismo tiempo "compiten" por el resultado.

Un ejemplo es un circuito con un pin Reset y un pin Set, si activa el reset, la salida se convierte en 0. Si activa set, la salida se convierte en 1. Si primero activa set y luego restablece muy, muy rápidamente después de restablecer se verá, por lo que la salida es 0.

Pero, si ambos se activan al mismo tiempo, ¿qué sucede?

Si el diseñador de circuitos prestó atención, debería haber una respuesta, si eso es importante para la función. Si no hay una respuesta segura a esa pregunta, el circuito tiene una condición de carrera, donde la señal del conjunto y el reinicio se "compiten" entre sí para ver cuál gana para determinar la salida.

La ruta con el menor retraso generalmente ganará, pero entonces podría ver la condición de la carrera como el disparador exacto en el que la ruta más retrasada se dispara exactamente tanto antes que la más rápida.

Muchos circuitos, incluidos los bloques de construcción lógicos dentro de los circuitos integrados, tienen ciertas condiciones de carrera, pero generalmente son tales que cuando usa el circuito de la manera prevista, no lo notará. Muy a menudo, cuando los ingenieros dicen "condición de carrera" en voz alta un par de veces, en realidad quieren decir que también es algo que podría suceder en el uso normal, lo que sería un problema, porque en una condición de carrera no se puede predecir el funcionamiento normal.

En software, el término también se usa, pero a menudo para indicar problemas de tiempo o bloqueos. Sin embargo, es un principio similar. A menudo, cuando tiene dos procesos en una computadora ejecutándose de forma independiente, pero utilizando la misma memoria, protege esa memoria de que uno la escriba, mientras que la otra la está utilizando. Si no lo que ellos llaman que una posible condición de carrera: Un proceso podría estar leyendo un valor que es sólo en el proceso de actualización, o ambos podría estar escribiendo a ella al mismo tiempo y luego no se sabe lo que hará ocurrir.

Asmyldof
fuente
2
Como complemento de esta buena respuesta, señalaría que el hardware puede comportarse muy mal en estas situaciones. El hardware real nunca cambia instantáneamente de 0 a 1. Siempre tiene que aumentar en un corto período entre ellos. La mayoría de la lógica supone que ha transcurrido suficiente tiempo desde tal transición que los transitorios han resuelto "muy cerca de 0" o "muy cerca de 1". Si el momento es ... desafortunado, puede estar más cerca de 0.5. Muchos circuitos se vuelven "metaestables" en este estado, lo que significa que pueden tomar una cantidad de tiempo indeterminada para la transición, desestabilizando todo el circuito
Cort Ammon
1
Incluso si su circuito está diseñado para manejar el caso en el que la configuración y el restablecimiento se activan simultáneamente, no puede activarlos de manera confiable simultáneamente, por lo que no sabrá cuál se activa primero.
user253751
Las operaciones no atómicas son un mejor ejemplo de las condiciones de carrera en el software. Un programa podría crear un nuevo archivo usando C fopen(), escribir datos en fclose()él, luego chmod(), para asegurarlo. Esa breve ventana entre fopen()y chmod()abre una posible condición de carrera donde el modo de archivo predeterminado podría permitir que un extraño no deseado trabaje con el archivo de una manera denegada después de la chmod()llamada. La solución es crear el archivo con open(), lo que permite establecer el modo como parte de la operación de creación de archivos.
Warren Young
6

El término "condición de carrera" implica que (1) dos o más señales pueden llegar en cualquier orden, arbitrariamente cerca una de la otra, y (2) no es posible mostrar analíticamente que existe una probabilidad esencialmente cero de cualquier combinación posible de llegada veces planteando un problema.

Desde el punto de vista de un solo flip flop cuya entrada de datos puede cambiar en cualquier momento con respecto al reloj, las transiciones casi simultáneas en el reloj y las entradas de datos podrían presentar una condición de carrera. Sin embargo, desde el punto de vista del comportamiento general del circuito, no plantearían una condición de carrera si solo pudieran ocurrir en momentos en que a ningún circuito aguas abajo le importaría lo que sostenía el pestillo, y ningún circuito aguas abajo comenzaría a preocuparse por lo que sostenía el pestillo. hasta después de la llegada de un pulso de reloj que no podría estar cerca de ninguna transición en la entrada de datos.

Además, dado que a menudo no es posible eliminar completamente por completo toda posibilidad de tiempos de entrada problemáticos, muchos análisis de las condiciones de carrera dirán que si la salida de un registro se alimenta a otro controlado por el mismo reloj, el segundo registro siempre se bloqueará un "limpio" alto o un "limpio" bajo, incluso si las entradas al primer registro hicieron que capturara un nivel de entrada que estaba justo en el umbral de conmutación. En teoría, sería posible que el primer pestillo capturara un nivel que estuviera lo suficientemente por encima o por debajo de su umbral de conmutación exacto para que el nivel de salida cambiara precisamente cuando llegara el siguiente pulso de reloj.

Como consecuencia, si uno tomara, por ejemplo, una entrada y la pasara a una secuencia de tres flip flops, y tuviera un circuito que saliera alto siempre que el segundo flop fuera alto pero el tercero fuera bajo, entonces cualquier borde ascendente que ocurra en la entrada de datos que está precedida por un período de reloj completo de poco tiempo, y seguido por un período de reloj completo de tiempo alto, esencialmente garantizaría que la salida del circuito sea alta durante exactamente un período de reloj.

esquemático

simular este circuito : esquema creado con CircuitLab

En este esquema, una señal con temporización algo irregular se normaliza a un reloj de tres maneras de tal manera que genera una salida que es alta para un ciclo de reloj después de cada flanco ascendente. El primer intento de normalizar la señal genera una salida que tiene un aspecto desagradable y tiene una condición de carrera obvia si la entrada y el reloj cambian simultáneamente. El segundo enfoque es mucho mejor, pero aún tiene una condición de carrera (que el simulador no puede activar) si el tiempo del reloj y los datos hacen que el primer registro capture un valor intermedio. El tercer enfoque representa una práctica común, y generalmente se consideraría seguro, ya que incluso si el primer registro no logra capturar un máximo limpio o un mínimo limpio, Es muy poco probable que la salida del primer registro tenga exactamente el comportamiento correcto para hacer que el segundo registro no se agarre limpiamente. Si los datos cambian muy cerca del reloj, pueden capturarse en el ciclo actual o no capturarse hasta el siguiente, pero si cualquiera de las dos situaciones fuera aceptable, no hay condición de carrera.

Super gato
fuente
Usted dijo: "... un resultado que tiene un aspecto desagradable". ¿Es esa otra forma de decir "estado metaestable"?
Solomon Slow
@jameslarge: el simulador no maneja estados metaestables. Describo la primera salida como fea porque no hay un ancho de pulso mínimo, y la segunda salida como riesgosa debido a la posibilidad de estados metaestables.
supercat
2

En resumen, significa que el resultado de un proceso se verá afectado por la secuencia de llegada de dos entradas, y esa secuencia es indeterminada (no se puede garantizar).

JRobert
fuente