"InmersiVer"Buenas, si hay algún experto en la materia, por favor, que me diga si es posible comprender cómo un circuito integrado con microchips, resistencia y demás se traduce en algo tan maravilloso como las cosas que puedo hacer en un PC. Por mucho que he buscado no encuentro una explicación sencilla e ilustrativa del tema (la analogía del interruptor para los transistores me parece más que insuficiente). Con el tiempo y recordando estas mismas inquietudes expuestas a primos lejanos tiempo atrás (¿quién no tiene un primo informático?) que no supieron responder satisfactoriamente, me pregunto si voy a tener que comprender antes todos los fundamentos de matemáticas, física, electricidad, química y demás para alcanzar esa sabiduría.
Por otra parte sigo convencido de que alguna metáfora podría iluminarme y alcanzar a saber cómo de unas misteriosas interacciones entre "interruptores diminutos" surje todo esto. Seguramente sea algo largo de contar y si existe algún libro que lo explique para que lo entiendas, y lo comprendas (en ese orden o en el inverso), decídmelo porfavor, que soy de los que mueren de curiosidad insatisfecha
Por favor perdonadme por la inminente chapa, si digo bastantes cosas obvias o si me como también alguna cosilla. Estoy abierto a críticas constructivas. Por contestar un poco a la pregunta principal y aunque enormemente simplificado voy a intentar dar un poco de perspectiva sobre una máquina muy sencilla e hipotética. Del nivel más bajo "voltajes y bits" a los programas que usamos (Divido la explicación en 2 partes una para el hardware y otra para el software por que es bastante larga):
=== HARDWARE ===
-- Voltaje y bits --
En electrónica todo funciona en binario, un bit corresponde a un dígito en notación binaria donde solo existe el 0 y el 1. Y en el panorama físico utilizamos voltajes para representar estos ceros y unos. Por poner un ejemplo podemos asumir que un voltaje de 0 significa un 0 y un voltaje de X significa un 1 o viceversa.
*Hasta ahora tenemos: como se representan 1 y 0 en un circuito
-- Datos binarios --
Con el "lenguage" binario podemos representar multitud de cosas, números enteros, números decimales (en coma flotante), letras (almacenando valores que más tarde haremos se corresponderán a caracteres) etc. Para manejar más cómodamente números grandes de valores binarios se suele utilizar por convención el sistema hexadecimal para referirse a éstos [1]
Para representar el número entero 10(decimal) = (2^3)*1 + (2^2)*0 + (2^1)*1 + (2^0)*0 ==> 1010 (binario)
*Hasta ahora tenemos: que con binario podemos representar números enteros, decimales o incluso podríamos representar letras si asignásemos un caracter a un valor numérico dado.
-- Circuitos y puertas lógicas --
Hasta ahora tenemos la forma de representar ceros y unos, ¿que se puede hacer con ellos? Crear pequeños circuitos llamados puertas lógicas que se comportan cada uno de una manera determinada. Estas puertas lógicas AND[2], OR, XOR, NOT tienen una o varias entradas y una salida generalmente. Para los que no sepan que es esto de las puertas lógicas
- una puerta NOT por ejemplo toma lo que hay en la entrada y lo invierte en la salida. Si hay un 1 devuelve un 0 y viceversa.
- una puerta AND devuelve un 1 si y solo si las entradas son todas un 1 también. etc etc
También existe otro tipo de puertas que sirven para que dados unos bit de entrada decidamos con un selector (también binario) cual de las posibles entradas queremos que pueda salir por una única salida (multiplexor[3]) y circuitos que hacen lo contrario, una entrada y varias posibles salidas (demultiplexor). Creando así circuitos combinacionales donde se puede en cierto modo decidir las rutas que los bits recorren en el circuito.
Con estas puertas lógicas básicas se pueden construir otros circuitos lógicos más complejos como sumadores/restadores[4] binarios. Pequeños componentes capaces de realizar sumas en sistema binario recibiendo varios bit para cada argumento de la operación y devolviendo el resultado.
*Hasta ahora tenemos: operaciones lógicas con números binarios y el poder de decisión de utilizar diferentes caminos para los bits(datos)
-- Memoria --
Podemos tambien realizar circuitos que recrean un comportamiento para "recordar" los bits introducidos en un circuito. Los circuitos más sencillos que pueden reproducir este efecto son los biestables[5] que a su vez se pueden agrupar para crear registros[6]. Estos circuitos son capaces de almacenar los bits de memoria para guardar datos. Son capaces de "recordar" estos bits de infomación manteniendolos en una especie de "bucle" por decirlo de alguna manera, hasta que se les modifica el valor, y permiten también que la información sea accedida. Ver la referencia a los biestables.
*Hasta ahora tenemos: formas de operar logicamente con bits, selecionar posibles caminos para el circuito y almacenar datos
-- Componentes de una cpu básica [7] --
Unidad de proceso[8]: Es la parte del procesador encargada de ejecutar las instrucciones que queremos, sería algo así como el core/nucleo de la cpu en si misma. Se descompone a su vez en más partes. Dispone de unos pequeños registros (mucho más rápidos que la memoria principal) para almacenar ciertos datos recurrentes o recientemente utilizados. Los procesadores reales disponen también de memoria caché, que viene a ser una memoria intermedia entre el procesador y la memoria principal o ram, y que aumenta la eficiencia al almacenar y obtener datos recurrentes. Pero la parte más importante es la ALU.
ALU[9]: A una nueva escala podemos crear nuevos componentes como la ALU (Unidad aritmetico lógica) en la que podemos aunar varios circuitos como sumadores/restadores multiplicadores y multitud de operaciones. Esta ALU simplificada puede recibir 2 números binarios de longitud N y operar con ellos seleccionando el tipo de operación a través de un selector.
FPU[10]: Para los datos binarios que representan numeros reales se utiliza este componente que opera especificamente con este tipo de datos ya que su codificación es diferente a la de los enteros.
Buses: Los buses son como los caminos que conectan la unidad de proceso con el resto de componentes. Con la memoria principal permiten "coger" datos de la memoria al procesador y viceversa guardarlos para almacenar los resultados. Aunque también hay buses para gestionar la entrada y salida de datos a periféricos, como puede ser la pantalla, teclado, ratón o cualquier periferico.
Unidad de control[11]: La unidad de control es la encargada de preparar todos los selectores del procesador, para que en un momento determinado se ejecute una operación en la ALU u otra o se seleccione si lo que se quiere es obtener o guardar un dato en memoria. Los procesadores incluso los que no existen y se estudian solo para enseñar pueden tener una enorme cantidad de selectores, con lo cual no es factible seleccionar manualmente todos éstos. Lo que se hace es utilizar "instrucciones" de procesador.
*Funcionamiento: Se lee de memoria una instrucción previamente guardada. Y se interpreta utilizando la unidad de control, es decir, se decodifica una instrucción sirve que sirve a modo de selector para obtener el valor del resto de selectores del procesador y que en conjunción acaban seleccionando un camino de datos y realizando una operación.
Por ejemplo: la instrucción sumar puede activar los selectores del circuito que permiten sumar un registro A y otro B y almacenar el resultado en un registro C.
*Hasta ahora tenemos: una unidad que puede realizar distintos tipos de operaciones, unos buses que nos permiten comunicar la memoria y posibles perifericos con el procesador y una unidad que se encarga de controlar que cada en cada tipo de instrucción se utilicen los selectores que hacen lo hacen posible
-- El procesador y las instrucciones --
¿Para que sirven estas instrucciones y cálculos que hemos nombrado? pues esas instrucciones pueden ser perfectamente el resultado de una operación que queramos, o el cálculo del color final de uno de los pixel de tu pantalla (muy a groso modo), también puede ser el resultado de pulsar una tecla que a su vez se traduce a un código que se envía por el bus de entrada salida (E/S) y se almacena en la memoria para tratarlo luego. La cuestión es que a partir de aquí ya no solo es el hardware (los componentes físicos) si no los programas y la secuencia de instrucciones que se almacenan para que el ordenador realice una tarea. Aquí es donde entra el software.
*Hasta ahora tenemos: una cpu muy muy básica y la posibilidad de utilizar ciertas instrucciones, es decir, podemos programar en código máquina
-- EN LA VIDA REAL --
Los procesadores realmente son algo años luz más sofisticados de lo que suena este desafortunado ejemplo:
-contienen multiples procesadores, con caches propias para cada core lo cual implica protocolos de coherencia de memoria
-el propio procesador además provee una cierta gestión de la memoria virtual
-la cpu tiene mecanismos propios de protección de memoria
-los procesadores reales tiene varios cauces para el proceso de datos, y dividen su ejecución en diferentes etapas (cauce segmentado) con las que pueden estar ejecutando una instrucción y buscando decodificando la siguiente al mismo tiempo.
-proveen multitud de mecanismos de gestión y planificación de los cauces frente a posibles saltos etc
-gestión de interrupciones hardware
... etc etc
en definitiva una burrada de cosas del copón de la baraja, y aun así lo máximo que he estudiado y he visto ha sido la arquitectura del P54c[12]
[1] es.wikipedia.org/wiki/Binario
[2] es.wikipedia.org/wiki/Puerta_AND
[3] es.wikipedia.org/wiki/Multiplexor
[4] es.wikipedia.org/wiki/Sumador
[5] es.wikipedia.org/wiki/Biestable (flip-flop)
[6] es.wikipedia.org/wiki/Registro_de_desplazamiento
[7] es.wikipedia.org/wiki/Unidad_cen ... cesamiento (cpu)
[8] es.wikipedia.org/wiki/Unidad_de_proceso - (lo que llamamos core)
[9] es.wikipedia.org/wiki/Unidad_aritmetico_logica (ALU)
[10] es.wikipedia.org/wiki/Unidad_de_coma_flotante (FPU)
[11] es.wikipedia.org/wiki/Unidad_de_control
[12] en.wikipedia.org/wiki/P5_(microarchitecture)#P54C
I7 6700K / MSI 1070 Gaming X / MSI Z170 Gaming M5 / 16GB RAM DDR4 3000Mhz / Aerocool X-Strike 800W Gold