He leído un poco sobre la construcción de una computadora digital en Shocken / Nisan: The Elements of Computing Systems . Pero este libro no dice nada sobre ciertos aspectos eléctricos en las computadoras, por ejemplo: a menudo se dice que 0 y 1 están representados por voltaje, si el voltaje está en el intervalo [0, 0.9), entonces es un 0. Si el voltaje es en el intervalo [0.9, 1.5), entonces es un 1 (los voltajes pueden variar, solo estoy dando un ejemplo).
Pero nunca leí lo que mantiene el buen comportamiento de los voltajes eléctricos de una manera que un 0 nunca podría convertirse accidentalmente en un 1 debido a la volatilidad eléctrica [1] dentro de la computadora. Quizás es posible que el voltaje esté muy cerca de 0.9, entonces, ¿qué se hace para evitar que pase el umbral?
[1]: suponiendo que exista.
fuente
Respuestas:
Hasta cierto punto, en su mayoría ha creado este problema utilizando un ejemplo poco realista. Hay una brecha mucho más grande entre lógico bajo y alto en circuitos reales.
Por ejemplo, la lógica CMOS de 5V emitirá 0-0.2V para lógica baja y 4.7-5V para lógica alta, y aceptará consistentemente cualquier cosa por debajo de 1.3V como baja o cualquier cosa por encima de 3.7V como alta. Es decir, hay márgenes mucho más estrechos en las salidas que en las entradas, y queda una gran brecha entre los voltajes que podrían usarse para señales lógicas bajas (<1.3V) y las que podrían usarse para altas lógicas (> 3.7V) . Todo esto está específicamente diseñado para tener en cuenta el ruido y para evitar el tipo de cambio accidental que está describiendo.
Aquí hay una representación visual de los umbrales para una variedad de estándares lógicos, que tomé prestados de interfacebus.com :
Cada columna representa un estándar lógico, y el eje vertical es el voltaje. Esto es lo que representa cada color:
fuente
No podemos Simplemente estamos disminuyendo la probabilidad de errores al agregar cheques a los datos. Dependiendo de qué tipo de datos se verificará, se puede hacer a través de hardware o software, y puede tomar cualquier forma, desde simples bits de suma de verificación en flujos en serie hasta máquinas de estado cíclicas, permitiendo que solo se realicen transiciones específicas en un momento dado.
Pero es un círculo vicioso, ¿no? ¿Cómo podemos asegurar que el circuito a cargo de verificar los datos no se vea afectado por las mismas perturbaciones que los datos y dar un falso positivo? ¿Agregar otro? Puedes ver cómo esto puede ser bastante costoso para muy poca ganancia al final.
La pregunta es: ¿qué tan confiable desea que sea su sistema? Los satélites, que incorporan algunos de los sistemas informáticos más confiables disponibles, por ejemplo, a veces recurren a la redundancia cruzada de sistemas no idénticos, así como a los votos: tres computadoras diferentes ejecutan el mismo algoritmo codificado por tres personas diferentes de tres maneras diferentes, y si una de las computadoras da un resultado diferente de las otras dos, se reinicia (y si vuelve a ocurrir, se aísla). Pero nuevamente, si dos computadoras están defectuosas al mismo tiempo, entonces la computadora incorrecta se reiniciará / aislará. Por lo general, la "redundancia en frío" es suficiente: se implementan un circuito primario y uno secundario, el primario se ejecuta hasta que un tipo de circuito de monitoreo (no protegido) detecta un error y se intercambia el circuito secundario. Si es solo un error en RAM El código se puede volver a ejecutar para actualizar los datos. Solo tiene que decidir sabiamente dónde dibujar la línea, es imposible hacer un circuito de detección de errores 100% confiable.
Los satélites (especialmente a gran altitud o en el cinturón de Van Allen) y las computadoras en las plantas nucleares u otros entornos radiactivos están particularmente sujetos a (palabras clave :) Eventos de solapamiento o enganches debido a partículas de alta energía que chocan o son absorbidas por las redes cristalinas de semiconductores . Los libros que cubren estos campos sin duda serán su mejor apuesta. La pintura se degrada por el daño por desplazamiento de la radiación, por lo que es totalmente comprensible que los semiconductores también puedan dañarse o alterarse por la radiación entrante.
fuente
Las perturbaciones de un solo evento ya no son una cuestión de espacio ni de avión; Los hemos estado viendo en la superficie por más de una década, tal vez dos por ahora.
Sin embargo, como se mencionó, al menos en las aplicaciones espaciales tratamos las molestias mediante la votación triple (cada bit es realmente tres y gana un voto de dos tercios, por lo que si hay uno que cambia, los otros dos lo cubrirán). Y luego, ECC o EDAC , con depuradores que pasan por la RAM a una velocidad superior a la tasa de actualización de evento único prevista para limpiar las perturbaciones de eventos individuales (las que realmente empujan a los dos tercios a votar mal).
Luego está la dosis total; Con el tiempo, el material se vuelve demasiado radiactivo para funcionar, por lo que utiliza suficiente material para exceder la vida útil del vehículo. No es algo de lo que nos preocupemos en la superficie normalmente. (Y latchup) Usar tres / múltiples conjuntos de lógica en paralelo es / era una forma de tratar de no tener que usar la tecnología tradicional de rad-hard, y bueno, puedes encontrar qué tan bien está funcionando.
Las personas que solían saber cómo hacer cosas para el espacio en su mayoría se retiraron o se mudaron, por lo que ahora tenemos una serie de programas que hacen basura espacial. O tratando el espacio como productos terrestres, en lugar de tratar de hacer que todos trabajen y tener un reingreso y quemado controlados, ahora esperamos una cierta cantidad de basura espacial de cada constelación.
Vemos molestias en la superficie. Cualquier tarjeta de memoria ( DRAM ) que compre tiene un FIT, Failures In Time, y cualquier chip con RAM (todos los procesadores, muchos otros), también tendrá una especificación FIT (para los bloques RAM (SRAM)). La RAM es más densa y utiliza transistores más pequeños, por lo que es más susceptible a molestias, creadas internamente o externas. La mayoría de las veces no nos damos cuenta o no nos importa, ya que la memoria que usamos para datos, mirar un video, etc., se escribe, se lee y no se vuelve a usar antes de que permanezca el tiempo suficiente como para molestarla. Alguna memoria, como la que tiene un programa o el núcleo, es más arriesgada. Pero hace tiempo que estamos acostumbrados a la idea de reiniciar nuestra computadora o reiniciar / reiniciar nuestro teléfono (algunos teléfonos / marcas tendrían que quitar la batería periódicamente). ¿Fueron estas molestias o mal software o una combinación?
Los números FIT para su producto individual pueden exceder la vida útil de ese producto, pero en una gran granja de servidores, tiene en cuenta toda la RAM o los chips o lo que sea, y el MTBF pasa de años u órdenes más allá de eso, a días u horas, en algún lugar la granja. Y tiene ECC para cubrir lo que pueda de ellos. Y luego distribuye la carga de procesamiento con failovers para cubrir las máquinas o el software que no puede completar una tarea.
El deseo de almacenamiento en estado sólido y el movimiento de los medios giratorios ha creado un problema relacionado con esto. El almacenamiento utilizado para SSD (y otro almacenamiento no volátil) para ser más rápido y más barato, es mucho más volátil de lo que nos gustaría y depende de EDAC, porque estaríamos perdiendo datos sin él. Tiran muchos bits adicionales y eccúan todo, haciendo los cálculos para equilibrar la velocidad, el costo y la longevidad del almacenamiento. No nos veo volviendo atrás; la gente quiere más almacenamiento no volátil en todas partes que quepa en un paquete pequeño y no domine el precio del producto.
En lo que respecta a los circuitos normales, desde los primeros días de usar transistores para circuitos digitales hasta el presente, pasamos a través de la porción lineal del transistor y lo usamos como un interruptor, lo golpeamos entre los rieles con un poco de exceso para asegurar que se pegue. . Al igual que el interruptor de la luz en su pared, lo gira más de la mitad de un resorte para ayudar al resto y mantenerlo allí. Es por eso que usamos digital y no tratamos de vivir en la región lineal; Lo intentaron desde el principio, pero fracasaron. No pudieron permanecer calibrados.
Entonces, simplemente golpeamos el transistor en sus rieles y ambos lados de una señal se asentarán en el siguiente ciclo de reloj. Se toman grandes esfuerzos, y las herramientas actuales son significativamente mejores de lo que solían ser, al hacer el análisis del diseño del chip, para ver que por diseño hay margen en el tiempo. Luego pruebe cada troquel en cada oblea (eso y / o después del empaque), para ver que cada chip es bueno.
La tecnología de chips depende en gran medida de estadísticas basadas en experimentos. Cuando overclockea su CPU, está presionando ese margen, se mantiene dentro de la frecuencia de reloj, temperatura, etc. anunciadas y sus posibilidades son significativamente menores de tener problemas. Un procesador xyz de 3 GHz es simplemente un chip de 4 GHz que falló a 4 GHz pero pasó a 3 GHz. Las partes se clasifican por velocidad básicamente desde una línea de producción.
Luego están las conexiones entre chips o placas, y también están sujetas a problemas, y se necesita mucho tiempo y esfuerzo para hacer estándares y diseños de placa, etc., para mitigar el error en esas interfaces. USB , teclado, mouse, HDMI , SATA , etc. Así como todos los rastros en el tablero. Dentro y fuera del tablero tiene problemas de diafonía; una vez más, hay muchas herramientas disponibles si las usa, así como experiencia para evitar los problemas en primer lugar, pero otra forma en la que es posible que no veamos los unos y los ceros completamente comprometidos.
Ninguna de las tecnologías, ni siquiera el espacio, es perfecta. Solo tiene que ser lo suficientemente bueno, un porcentaje suficiente del producto debe cubrir la vida útil esperada del producto. Algún porcentaje de los teléfonos inteligentes tiene que durar al menos dos años, y eso es todo. Las fundiciones o tecnologías más antiguas tienen datos más experimentales y pueden producir un producto más confiable, pero es más lento y es posible que no sean diseños nuevos, así que ahí lo tienes. La vanguardia es solo eso, una apuesta para todos.
Para su pregunta específica, los transistores en cada extremo de una señal se empujan rápidamente a través de su región lineal y se inclinan hacia uno de los rieles. El análisis se realiza en cada ruta combinacional para determinar que se asentará antes de que el reloj al final de la ruta lo bloquee, de modo que realmente se convierta en cero o uno. El análisis se basa en experimentos. Los primeros chips de una línea de productos se empujan más allá de los límites del diseño, los gráficos schmoo se hacen para determinar si hay margen en el diseño. Se realizan variaciones en el proceso y / o se encuentran candidatos individuales que representan los chips lentos y rápidos. Es un proceso complicado y algunos tienen más material, otros tienen menos, corren más rápido pero usan más energía o corren más lento, etc.
Los empujas a los márgenes también. Y básicamente tiene una cálida sensación de que el diseño está bien para entrar en producción. La exploración JTAG / límite se utiliza para ejecutar patrones aleatorios a través de los chips entre cada estado bloqueado para ver que las rutas combinacionales son sólidas para un diseño. Y donde hay preocupaciones, algunas pruebas funcionales dirigidas también pueden ocurrir. Pruebas adicionales del primer silicio y quizás pruebas aleatorias para asegurarse de que el producto sea bueno. Si / cuando ocurren fallas, eso puede empujarlo de regreso a más pruebas funcionales en la línea de producción. Depende en gran medida de las estadísticas / porcentajes. 1/1000000 de los malos que salen pueden estar bien o 1/1000 o lo que sea; depende de cuántos creas que producirás de ese chip.
Las vulnerabilidades son como se mencionan aquí y con otros. Primero el chip en sí, qué tan bueno fue el diseño y el proceso, qué tan cerca del margen es la ruta más débil de un chip específico en el producto que compraste. Si está demasiado cerca del borde, el cambio de temperatura u otro puede causar problemas de temporización y los bits atraparán los datos que no se hayan asentado en uno o cero. Luego están los eventos individuales molestos. Y luego hay ruido. de nuevo cosas ya mencionadas ...
fuente
Si buscas una respuesta simple:
Cada componente digital de una computadora está más restringido en las salidas que produce que en las entradas que acepta. Por ejemplo, cualquier valor de "entrada" de 0V a 2V será aceptado como 0, pero una "salida" de 0 siempre estará en el rango de 0 a 0.5V. (Ver la respuesta de duskwuff para algunos valores reales).
Esto significa que cada componente ayuda a "corregir" algunas de las desviaciones o ruidos que se han producido a lo largo de la línea. Por supuesto, si el ruido es lo suficientemente grande, el sistema no puede compensarlo. Las computadoras en entornos de alta radiación pueden verse frecuentemente afectadas por 1s que cambian a 0s y viceversa.
Básicamente, las computadoras están diseñadas para tolerar ciertos niveles de ruido / interferencia , lo cual es lo suficientemente bueno para la mayoría de los propósitos prácticos.
fuente
Teóricamente es posible que las señales cambien entre un 0 y un 1 debido al ruido térmico (y otros), sin embargo, es extremadamente improbable.
Los circuitos digitales están diseñados con un atributo llamado 'margen de ruido'. Esta es la cantidad en que su entrada tiene que cambiar antes de que la salida cambie de estado. Generalmente en los circuitos CMOS esto es aproximadamente el 50% de la tensión de alimentación. El ruido térmico inevitable (proviene de electrones que se mueven a cualquier temperatura por encima de 0 kelvin) en estos circuitos genera << 1 mV de ruido, y la probabilidad de que estos picos puedan exceder (digamos) 500 mV, es extremadamente pequeña.
Las puertas digitales (por ejemplo, CMOS) tienen características de ganancia y saturación. Lo que esto significa es que cuando la señal de entrada está cerca del medio del rango, la salida cambia rápidamente (ganancia alta), pero cuando está cerca de los extremos del rango, cambia lentamente. El resultado de esto es que cuando una señal de entrada está 'cerca' de los rieles, la salida está aún más cerca, esto significa que el ruido no se amplifica.
Otras características mencionadas anteriormente (corrección de errores, etc.) significan que los errores, incluso si ocurren, no se propagan.
fuente
En los sistemas que son propensos a errores, como los canales de comunicación y el almacenamiento magnético (y a veces incluso la RAM), se almacena una suma de verificación, CRC o ECC para rechazar datos incorrectos o corregir pequeños errores.
En general, los sistemas binarios están diseñados para que esto no sea posible, pero una vez cada pocos millones o miles de millones * de veces un rayo cósmico o un destello de ruido empujarán las cosas sobre la línea, la detección / corrección de errores es necesaria para mantener la corrupción. de afectar la computadora de una manera seria.
* ¡Los canales de comunicación pueden tener una tasa de error mucho, mucho más alta!
fuente
El hardware de la computadora se ha vuelto más robusto y confiable. Pero el hardware es demasiado amplio para una respuesta simple. Sin embargo, puede ser interesante saber que existe una diferencia de confiabilidad entre una computadora de escritorio común y una computadora de servidor empresarial. Encontré este hilo de preguntas / respuestas sobre el hardware del servidor. Un servidor costará muchas veces más que un escritorio comparable. El costo es el resultado de un mejor hardware que posiblemente sea varias veces menos probable que inesperadamente "cambie un 1 y 0".
Pero el hardware es solo la mitad de la historia. Las computadoras también pueden proteger los datos de errores inesperados mediante el uso de software. El código de Hamming es un ejemplo en el que, al agregar una pequeña cantidad de datos adicionales, una pequeña cantidad de errores no solo se pueden detectar sino también corregir.
fuente
Hay dos formas que se usan comúnmente para minimizar la probabilidad de que un bit lógico se cambie accidentalmente (0 a 1 o 1 a 0).
La primera es proporcionando como grande un hueco , entre los niveles de tensión definidos para un 0 y un 1, como sea posible . Como usted menciona, un 0 se define como un nivel de voltaje <.9v, mientras que el 1 se define como un nivel de voltaje> 2.9v (no como usted dice .9 a 1.5). Esto deja una brecha de voltaje de 2v. Esto significa que el voltaje de la señal tendría que variar en un 200% , antes de cambiar "accidentalmente" el estado del bit (muy poco probable).
El segundo es "cronometrando"Las señales lógicas. Dado que el voltaje / ruido "accidental" es aleatorio y de corta duración, al permitir cambios de estado solo a intervalos particulares (y cortos), se minimiza la probabilidad de que la "variación" golpee en el momento del reloj.
Por supuesto, existen otros medios y métodos utilizados, dependiendo del grado de confiabilidad requerido (ECD, ECC, etc.).
fuente
Buena ingeniería
Se requiere mucho esfuerzo en un diseño para evitar la corrupción de datos o para corregirlo cuando no se puede evitar lo suficiente (por ejemplo, la memoria ECC ).
Las cosas que pueden causar corrupción de datos incluyen:
En resumen, se ha invertido mucha ingeniería en diseños digitales para que los ingenieros de software puedan suponer que '0' significa '0' y '1' significa '1'.
fuente
Los dos aspectos fundamentales de las computadoras electrónicas prácticas son:
Una fuente de alimentación muy estable
Tiempo (generalmente definido como frecuencia de reloj o retraso)
Las fuentes de alimentación para sistemas informáticos están muy estrictamente especificadas y reguladas. De hecho, para cualquier sistema informático, la fuente de alimentación generalmente se regula varias veces: en la fuente de alimentación (o cargador de batería), en la entrada principal de la placa base, en la entrada de las tarjetas secundarias y finalmente en el chip.
Esto elimina mucho ruido (volatilidad eléctrica). Lo que ve la CPU es una fuente de voltaje muy estable y no volátil que puede usar para procesar la lógica.
La siguiente fuente principal de valores intermedios (voltajes entre lo que se considera 0 o 1) viene cuando los valores hacen la transición. 1 cambiando a 0 (tiempo de caída) o 0 cambiando a 1 (tiempo de subida). Realmente no puede hacer mucho al respecto, excepto esperar a que termine la transición antes de aceptar la salida del circuito. Antes de que se complete la transición, la salida del circuito se considera basura.
En ingeniería, la solución a este problema es simplemente escribir cuánto tiempo debe esperar para que los resultados sean correctos en papel. Este es el origen de la frecuencia del reloj de la CPU. La cantidad de GHz a la que puede ejecutar la CPU depende del tiempo que tarden en estabilizarse los cambios de estado en la CPU.
En realidad, hay una tercera fuente de volatilidad: las entradas al circuito. La solución a ese problema es similar al problema general anterior: asegúrese de que la señal (voltaje o corriente) que ingresa al sistema sea estable y asegúrese de que la señal tenga suficiente tiempo para estabilizarse.
La segunda parte del problema es por qué muestreamos entradas en latches o registros antes de procesar. La señal puede ser basura. Pero serán 0 o 1 basura en el interior de los registros cuando se procesen. La primera parte del problema es para qué son las garantías.
fuente
La retroalimentación es lo que evita que se acerque al umbral de voltaje y lo obliga a comportarse bien.
Esto generalmente tiene la forma de un circuito de retención de algún tipo, a menudo un circuito de retención sincronizado.
Como un ejemplo simple, considere el flip-flop . Está diseñado para que la salida sea realimentada en el circuito lógico como una entrada adicional. La lógica dentro del elemento, por lo tanto, sabe lo que está produciendo y seguirá emitiendo el mismo valor hasta que las otras entradas lo fuercen al estado opuesto.
Dado que el circuito está diseñado para que los transistores estén completamente encendidos o completamente apagados, siempre saldrá cerca de la fuente de alimentación y los límites de tierra; no se acercará al nivel de 0.9v, y cuando haga la transición, se moverá rápida y completamente al otro estado Los circuitos están diseñados específicamente para evitar operar en la región analógica entre los dos estados.
fuente
En condiciones de funcionamiento normales, los 0 y 1 rara vez fallan, pero en malas condiciones de funcionamiento (es decir, batería baja o ese breve tiempo después de que se desconecta la alimentación de CA y el voltaje en el condensador está cayendo), suceden cosas extrañas y se confunden 0s y 1s todo el tiempo.
Por esta razón, si está escribiendo un código defensivo (software o HDL) que no desea bloquear, siempre debe considerar el caso en el que un número podría fallar. Por ejemplo,
es mejor cambiar
==
a>=
solo en caso de que el valor dei
saltos de 9 a 11 o cualquier número mayor que 10, lo que haría que nunca salga del ciclo hasta que sei
ajuste a 0 (digamos después de 4 mil millones de iteraciones).Sucede, confía en mí ...
fuente
i
pasa si salta a algún número negativo grande?