Foto de Federica Galli en UnsplashEl funcionamiento de los ordenadores es algo por lo que siempre he sentido curiosidad, pero nunca pensé que fuera a tener los conocimientos básicos reales para entenderlo, ni siquiera a alto nivel. Así que hacer la investigación para escribir esta entrada del blog y descubrir que no era tan difícil de entender ha sido muy gratificante, además, llegar a entender cómo funcionan los ordenadores, de nuevo incluso a un nivel alto, es bastante alucinante.
La forma más básica de pensar en un ordenador es como una máquina de Entrada/Salida. Esa es una idea bastante básica: los ordenadores toman información de fuentes externas (su teclado, ratón, sensores o Internet), la almacenan, la procesan y devuelven el resultado (Output) de ese proceso. Por cierto, si lo piensas, en el momento en que los ordenadores se conectan a través de internet se produce un bucle interminable de entradas y salidas, ya que la salida de un ordenador (digamos una página web) se convierte en la entrada de otro y así sucesivamente(!!).
Ahora, todos estamos bastante acostumbrados y familiarizados con las formas que tiene un ordenador para recibir entradas e imprimir alguna salida, todos hemos usado un ratón o un teclado, o incluso hemos hablado con un ordenador y todos hemos leído un artículo en una página web, escuchado música o mirado algunas fotos antiguas, etc. Con lo que no estamos tan familiarizados, y lo que normalmente nos cuesta entender es cómo un ordenador realmente procesa la información.
Así que sí, en un nivel muy fundamental todo lo que un ordenador entiende es 1’s y 0’s, lo que significa que cada entrada y salida se traduce en algún momento en o desde 1’s y 0s. Lo poderoso de los 1’s y 0’s (también llamados bits -de BInary digiT) es que nos permite transformar cualquier información en señales eléctricas (ON/OFF). Tómese un momento para pensar en ello: CUALQUIER cosa que veas, pienses o interactúes puede ser traducida y representada como señales eléctricas (!!!). Representar la información como señales eléctricas es lo que permite a los ordenadores procesar esa información y transformarla.
¿Entonces cómo funciona el sistema numérico binario? Los números binarios significan que todos los números se calculan con base 2. Como ejemplo, la mayoría de nosotros estamos acostumbrados a pensar en números con base 10. Si pensamos en un número cualquiera, digamos 2561, podemos ver cómo dependiendo de la posición que ocupe el número de derecha a izquierda, el número tiene un valor diferente que es un múltiplo de diez. En este ejemplo, por ejemplo, el 1 ocupa la posición 1s, el 6 ocupa la posición 10s, el 5 ocupa la posición 100s y el 2 ocupa la posición 1000. De este modo, (2×1000) + (5×100) + (6×10) + (1×1) = 2561. Los números binarios funcionan exactamente igual, pero cada paso incremental representa un incremento x2 sobre el anterior. He aquí un ejemplo de cómo representar el número 12:
Así, con 8 bits puedes representar cualquier número entre 0 y 255, y con 32 bits puedes representar cualquier número entre 0 y 4 mil millones. Puede que pienses, claro, pero ¿qué pasa con las cadenas y los signos de puntuación? Bueno, a día de hoy, seguimos el ASCII, American Standard Code for Information Interchange, que básicamente asigna cualquier carácter o signo de puntuación, incluidas las mayúsculas, a uno de los números de 8 bits. Y así es como utilizamos los números para representar las letras.
Seguro, pero ¿qué pasa con las imágenes? Bueno, en realidad una imagen también se puede reducir a 0’s y 1’s. Como sabes, cualquier pantalla tiene un número determinado de píxeles y cada píxel tiene un color y, como sabes, utilizando los códigos de color RGB o HEX podemos representar los colores como números, lo que significa que básicamente podemos decirle a un ordenador qué color debe tener cada píxel. Lo mismo ocurre con la música, el vídeo y cualquier otro tipo de información que se te ocurra.
¿Pero cómo demonios «computamos» las señales eléctricas? Ahí es donde entran los circuitos eléctricos. En un nivel muy básico y sobresimplificado, podemos utilizar los circuitos eléctricos para que se comporten como «máquinas lógicas». Podemos tener circuitos que, dada una entrada específica, devolverán una salida dependiendo de la lógica con la que hayan sido construidos (No, Y, O) pero también sumas, restas, multiplicaciones y divisiones. Lo interesante es que utilizando estas formas tan elementales de representar y procesar la información podemos conseguir realmente la «completitud funcional», que es un término utilizado en Lógica para referirse a un conjunto de operadores booleanos que son capaces de representar todas las tablas de verdad posibles, que es una forma elegante que tienen los matemáticos de decir que el cielo es el límite. Todos estos cálculos se realizan en una unidad dentro de la CPU llamada ALU (Unidad Lógica Aritmética).
Como probablemente sepas, las CPUs -Unidad Central de Procesamiento- son los cerebros de los ordenadores y es donde se realizan todos los cálculos. La parte interesante de las CPUs es que no tienen memoria, lo que significa que no pueden recordar absolutamente nada. Sin memoria, todos los cálculos se perderían justo después de realizarlos. A grandes rasgos, y como quizá ya sepas, hay dos tipos de memoria que utilizan nuestros ordenadores: La memoria RAM, que significa memoria de acceso aleatorio, y la memoria persistente. Puedes pensar en la memoria RAM como una inmensa cuadrícula (matriz) que almacena números de 8 bits. La memoria RAM mantiene un registro de las «direcciones» en la matriz de memoria de cualquier número de 8 bits para cuando la CPU lo necesite. ¿Y sabes qué? Para realizar estas operaciones, utilizamos exactamente la misma lógica de circuito que utilizábamos antes. Es decir, utilizamos exactamente la misma lógica para permitir que una entrada dada se almacene en un «lugar» determinado de la memoria o para acceder a cualquier pieza de información almacenada en ella.
Sé que apenas estoy arañando la superficie de cómo funcionan los ordenadores aquí, pero sólo llegar a entender esto me ha llevado bastante tiempo y ya me ha dejado boquiabierto más de un par de veces. Lo que me fascina de todo esto es lo poderosos que son los ordenadores y lo integrados que están en nuestra vida cotidiana, por eso creo que es importante tener al menos una intuición de cómo funcionan. Además, como siempre, si detectas algún error por favor házmelo saber.
Terminaré este post con un vídeo que me gusta mucho en el que Steve Jobs compara los ordenadores con las bicicletas aquí:
Aquí tienes una lista de recursos increíbles que he encontrado mientras investigaba para este post:
Khan Academy’s 5 short videos on how computers work: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work
Las series del Curso de Choque sobre Informática son absolutamente increíbles: https://www.youtube.com/watch?v=O5nskjZ_GoI
Una introducción a la Lógica y a las Tablas de la Verdad: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94
Lógica NAND, para entender mejor cómo los circuitos eléctricos pueden realizar operaciones lógicas: https://en.wikipedia.org/wiki/NAND_logic
La página de Wikipedia para ASCII: https://en.wikipedia.org/wiki/ASCII
La página de Wikipedia para Código Binario con una breve historia de la aritmética binaria: https://en.wikipedia.org/wiki/Binary_code
Si quieres profundizar, este es un buen lugar para empezar: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715
Gracias por leer hasta ahora.