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