¿Cómo ‘entiende’ el hardware de la computadora los dígitos binarios?

Me gusta la respuesta de John Colagiola y quiero ampliarla un poco.

Primero, imagine una lámpara realmente genial. La lámpara tiene muchos colores diferentes, por ejemplo. Puede volverse rojo, verde, azul y blanco. En lugar de tener un solo interruptor, necesita varias entradas diferentes para corresponder a los distintos modos.

Ahora, en lugar de un interruptor de palanca, usaremos un paquete de cables. Podemos poner diferentes voltajes en cada cable. Luego se nos ocurren códigos para los diferentes estados. Le decimos al diseñador de la lámpara “cuando ponga 0.5 voltios en el primer cable y cero voltios en el segundo, haga que la lámpara se ponga roja” y “cuando ponga 0 en el primero y 0.5 voltios en el segundo, se pondrá azul”.

Como John explicó, la lámpara no entiende el binario. Solo tiene una serie inteligente de cables en el interior que hacen cosas muy específicas cuando colocamos los voltajes correctos en el lugar correcto.

Ahora agreguemos otra función a la lámpara: le daremos a la lámpara una serie de cables de salida. Cuando la lámpara recibe la señal “roja”, se pondrá roja y pondrá la señal “azul” en los cables de salida. ¿Dónde debemos poner los cables de salida? ¡Conéctelos a los cables de entrada! Ahora la lámpara se auto modifica . Cuando comenzamos la cosa y la ponemos en un estado inicial, comienza a hacer cosas, ¡pero también modifica su propio estado de manera controlada!

Esto es todo lo que una computadora realmente hace. La CPU tiene muchos estados diferentes bien definidos. Cada estado se activa mediante una entrada muy específica y realiza una tarea muy específica, y luego, cuando está terminado, se coloca en un estado diferente. Estos estados pueden ser cosas como “colocar cualquier conjunto de voltajes en la dirección de memoria correspondiente a este conjunto de voltajes de entrada en este conjunto diferente de cables de salida” o “colocar estos dos conjuntos de voltajes de entrada y ponerlos a través de este circuito que hace binarios Además, coloque el resultado en este conjunto de cables de salida “o” mire este conjunto de voltajes de entrada para ver en qué estado debo entrar a continuación “.

Es realmente increíblemente simple y, sin embargo, puede hacer cosas asombrosamente complejas.

Algunas lecturas adicionales potencialmente útiles en Wikipedia:
Máquina de estados finitos
Arquitectura von Neumann

Tenga en cuenta que no estoy muy familiarizado con los microprocesadores, por lo que doy una comprensión general de lo que sé de los microcontroladores y los aplico a mi pequeño conocimiento de los procesadores.

Supongo que desea saber cómo las computadoras usan el código que se le da, o “entender” el código si lo desea.

Los procesadores tienen pines (las cosas metálicas que sobresalen de un procesador) que se puede pensar de manera abstracta para transferir y recibir información a través de señales eléctricas enviadas a través de estos pines. Las señales podrían representar un bajo lógico o un alto lógico (representando un 0 y 1 respectivamente).

Dependiendo del procesador, habrá algún mecanismo para cargar el código en la RAM enviando algún valor a través de los pines del procesador. Cada línea de código cargada en la RAM es una nueva “instrucción” para el procesador.

Una vez que se carga el código, también habrá un contador que rastrea la línea de código actual en la que se encuentra el procesador.
Como puede adivinar, el contador comienza en la primera línea de código. Cuando el procesador comienza la ejecución, ejecutará la instrucción en la línea de código en la que se encuentra actualmente su contador (que es el comienzo cuando se inicia por primera vez). En el siguiente ciclo de reloj, el procesador incrementará el contador de la línea de código para pasar a la siguiente línea de código y ejecutará la siguiente instrucción. Este proceso de incrementar el contador y ejecutar una nueva instrucción continúa hasta que no quedan más instrucciones para ejecutar. Una instrucción podría ser comparar dos bits entre dos registros (puede considerarse como una memoria de CPU incorporada), agregar dos números a través de la ALU, enviar un alto voltaje a un pin (que puede indicar algo importante para alguna placa externa), o incluso configurar el contador para ir a una línea de código completamente diferente.

Tenga en cuenta que un procesador moderno puede completar un ciclo en 0.5 nanosegundos.

La computadora es solo un dispositivo electrónico que puede almacenar o interpretar la información en forma binaria (0 o 1). La razón por la que solo puede reconocer binario es que es fácil diferenciar entre esos dos valores mediante un simple pulso de voltaje. Si el pulso de voltaje es alto, ‘1’, si es bajo, entonces ‘0’. Estos pulsos se pueden transferir a través de buses a varios componentes dentro de él sin ninguna codificación especial o sobrecarga.
Si tuviéramos que usar más niveles en este pulso con más valores como 0,1,2,3..etc, entonces sería difícil diferenciar las transiciones.

Las computadoras realmente no “entienden” nada. Son impulsados ​​por impulsos eléctricos en cables (muy pequeños), ya sea que la señal esté encendida o apagada (o la transición entre ellos, pero ignoremos eso).

Por lo tanto, su computadora entiende un número exactamente de la misma manera que su lámpara comprende el estado del interruptor de la luz.

Todo lo que está más allá de eso es interpretación, ya sea por una persona o software.

Ahora de esas otras respuestas se obtiene la idea general. Las CPU actuales se construyen utilizando combinaciones de una compuerta NAND (bueno principalmente). Las combinaciones son las que hacen que una CPU “haga” lo que le dices enviándole 1s y 0s. El fabricante del chip diseñó esas combinaciones de tal manera que algunos “códigos” (leer grupos de 1s y 0s en secuencias específicas) hacen que algunas NAND pasen el voltaje mientras que otras no.

Si realmente desea comprender las complejidades involucradas en ese proceso de diseño, es posible que desee examinar un curso / tut de diseño de lógica de hardware. Una de las que he encontrado que es razonablemente fácil de comprender es: Los elementos de los sistemas de computación (de NAND a Tetris)

Los dígitos binarios son una abstracción que los humanos usan para comprender la representación de datos de la computadora. En realidad, la computadora no usa números como los reconocemos; pero, en cambio, trata con una serie de pulsos de encendido y apagado que pueden representarse como una diferencia de voltaje a través del circuito electrónico. Robotronics LLC | Facebook

Creo que Charles Petzold responde a esto y mucho más sobre las computadoras en su hermoso trabajo, que ya utilicé en algunas respuestas. ¿Es ‘From Nand to Tetris’ uno de los mejores cursos de informática que puedes tomar?

Aunque miles de dígitos binarios se ejecutan de un lado a otro en su computadora, no se entiende nada en ningún lado. Simplemente hace cosas a estos bits, en patrones predefinidos.

El patrón más importante es la interacción entre la CPU y la memoria. La CPU solicita bits de la memoria, y cuando llegan, estos bits especifican qué debe hacer la CPU a continuación. La instrucción podría ser sumar o restar dos números, o almacenar algún otro valor en otra parte de la memoria, y así sucesivamente.

Los programadores luego usan este proceso para hacer que la computadora haga lo que quieren, colocando la secuencia correcta de instrucciones en la memoria.

Bueno, pasa por esta cosa llamada transistor. Si la electricidad va a la base, lo que sea que fluya al colector irá al emisor. Base-ON = 1, Base-OFF = 0.

More Interesting

¿Podemos hacerlo mejor en complejidad de tiempo que el siguiente código para calcular la suma de los primeros 10 primos?

Cómo agregar números de dos listas vinculadas

¿Cuáles son algunos de los mejores algoritmos?

Si el tamaño de una matriz es 101 y el rango de números es de 0 a 99, solo un número viene 2 veces. ¿Cuál es ese número?

Cómo mostrar que la distancia más corta entre 2 curvas que no se cruzan siempre se encuentra a lo largo de su normal común

Para ubicarse dentro del top 3 en el próximo ICPC regional, ¿qué le sugeriría a un codificador de nivel medio que tenga suficiente conocimiento?

Cómo implementar un árbol de segmentos con treaps

Cómo generar una lista de todas las permutaciones de una matriz 4 × 4 con solo los números 1, 2, 3 y 4 en Python

¿Para qué se usan realmente los algoritmos?

¿Qué estructura de datos es mejor para implementar una guía telefónica: Trie o Hash? ¿Por qué?

Entre C # y Java, ¿cuál es el mejor lenguaje de programación para aprender programación orientada a objetos, estructuras de datos y algoritmos? ¿Por qué?

Un profesor me dijo que no me molestara en aprender muchos lenguajes de programación sino que me enfocara solo en C ++, estructuras de datos y algoritmos, ¿tiene razón?

¿Es posible aproximar el comportamiento asintótico de un algoritmo dado su tiempo de ejecución?

¿Por qué en Java, la memoria es liberada por el algoritmo Mark y Sweep y no por ningún otro algoritmo?

¿Cuál es el enfoque algorítmico para este problema de hackerrank?