Es el corazón de tu PC, pero… ¿Sabes realmente qué es un procesador y cómo funciona

La Unidad Central de Procesamiento (CPU, por sus siglas en inglés) o también conocido como procesador, es uno de los componentes más importantes de cualquier sistema informático. Es el cerebro de la computadora, encargado de procesar las instrucciones y datos necesarios para el funcionamiento de cualquier programa o aplicación. En este artículo os hablaremos de cómo funciona todo procesador, independientemente de cuál sea el modelo que estemos hablando.

Todo sistema informático tiene un procesador o CPU en su interior, desde el teléfono móvil más simple hasta el superordenador más potente. Es más, incluso una calculadora lleva una, por muy sencilla que sea. Y te sorprenderá que hasta en tu lavadora hay una. Sin embargo, muchos usuarios no saben cómo funciona. Es por ello que os hemos preparado este artículo.

¿Qué es un procesador y cuál fue el primero de la historia?

Un procesador o también conocido como CPU, Unidad Central de Proceso (o Procesamiento) o microprocesador es el chip central de todo sistema informático y su trabajo es ejecutar las instrucciones de los diferentes programas informáticos para mostrarnos el resultado en pantalla o cualquier otro periférico con el que comunicar la información al usuario. En realidad, se trata de uno de los primeros chips integrados que aparecieron en la historia de la informática, es decir, que combina en una misma pieza la funcionalidad de varios circuitos integrados más simples.
La primera CPU de la historia fue el Intel 4004, pero esto no significa que la funcionalidad de un procesador no existiese antes en los sistemas informáticos de la época. Solo que, en vez de estar diseñada por un solo chip, como ocurriría a partir de ese momento, lo que se usó en aquel tiempo eran placas de varios chips TTL cuya funcionalidad en conjunto era la de un microprocesador al completo.
En realidad, fue la evolución en el tamaño de los transistores lo que hizo que los diferentes componentes se fuesen integrando entre sí poco a poco. De sistemas básicos a cosas más complejas como una ALU para terminar en los primeros microprocesadores en un chip.

¿Cómo funciona un procesador?

Antes de nada, hemos de entender que es lo que hace una CPU y lo mejor es describir su funcionamiento de forma ordenada y por partes. Desde el momento en que se trata de una máquina, electrónica, pero una máquina, al fin y al cabo, lo que hace un bucle de diferentes pasos que llamamos Fetch-Decode-Execute o Captación-Decodificación-Ejecución.

Fetch-Decode-Execute: el ciclo de instrucción de una CPU

Toda CPU, desde la más simple a la más compleja, sigue el siguiente proceso:

En primer lugar, La CPU recibe una instrucción desde la memoria RAM, que indica una operación a realizar. (Captación o Fetch)
A continuación, la instrucción se decodifica por la unidad de control de la CPU, que la traduce en señales eléctricas que indican a los componentes de la CPU qué operación realizar. Tras esto, la unidad de control envía las señales eléctricas a la unidad aritmético-lógica (ALU) de la CPU, que es responsable de realizar la operación matemática o lógica indicada en la instrucción. (Decodificación o Decode)
Ya para finalizar, la ALU ejecuta la instrucción y escribe el resultado en la memoria o registro correspondiente para empezar volver al primer punto. (Ejecución o Execute)

Claro está que esto es una simplificación y cada una de las tres etapas principales se puede dividir en otras más pequeñas. El motivo por el cual se hace esto es por el hecho de que cada etapa ha de durar un ciclo de reloj exacto, cuanto más simples sean estas en menos tiempo se hacen y, por tanto, se puede conseguir mayores velocidades de reloj en un procesador.

Se ha de aclarar que cuando una instrucción entra en el procesador, la siguiente no ha de esperar a que se complete, sino solo la etapa actual en la que se encuentra. Por ejemplo, una CPU simple con solo las tres etapas básicas como el 6502, cuando una instrucción se está ejecutando, la siguiente se está decodificando.

Componentes de un procesador

No vamos a entrar a hablar de arquitecturas en concreto a través de la historia, lo que nos interesa es daros a conocer cómo funciona un procesador. Si hacemos un símil con un motor es una tontería hablaros de un modelo concreto, si no entendéis cómo funciona uno básico y se ha de decir que a medida que ha ido evolucionando el tiempo se han ido añadiendo nuevas unidades y piezas, pero lo que es la estructura básica se ha mantenido intacta durante décadas sin cambios.
Obviamente, no podemos comparar un motor de un utilitario de los años 50 del siglo pasado con uno de la actualidad, ya que existe una evolución, pero tampoco se puede explicar el funcionamiento de algo usando una versión altamente compleja del mismo.
Sin embargo, la mayoría de explicaciones que hay por internet son una simplificación exagerada. No existe una unidad llamada ALU, sino varias unidades de ejecución distintas para cada tipo de dato o instrucción a procesar. De la misma manera que tampoco existe la unidad de control, sino que se le llama así a una serie de componentes en conjunto con una función concreta para cada uno de ellos dentro del ciclo de cada instrucción.

Bus

Se trata de un canal de comunicación por el cual los diferentes componentes del procesador se comunican de forma interna. No procesan nada y tampoco almacenan nada. Sin embargo, a medida que las CPU se han ido haciendo más complejas, el bus de datos ha ido evolucionando hasta el punto de adoptar configuraciones de red del mundo de las telecomunicaciones. Son una parte muy básica, al igual que los transistores, pero la organización del bus en un procesador es una parte muy importante que se suele obviar.

Registros de la unidad de control

Los registros son secciones de memoria muy pequeña, pero muy rápida y con funcionalidades específicas. Por cada instrucción que ha de ejecutar la CPU, el contenido de los mismos cambia. Podemos dividir los registros en dos tipos. Por un lado, los que participan en el proceso de captación de la información desde la memoria RAM, por el otro los encargados de ayudar en la ejecución de las mismas. Empezando por los del primer tipo tenemos:

El contador de programa contiene la dirección a la memoria RAM de la siguiente instrucción a ser ejecutada. Este siempre se incrementa en 1 porque estos se almacenan de forma secuencial, pero es posible cambiar el valor, lo que permite crear bucles e instrucciones de salto.
El registro de direccionamiento a memoria (MAR) contiene la dirección obtenida del contador de programa, la cual será enviada a la RAM a través del controlador de memoria para obtener el contenido de dicha instrucción.
Dicha información es copiada en el registro de datos de memoria o MDR, para ser rápidamente copiado al registro de instrucción qué es de donde leerá el decodificador para la segunda etapa del ciclo de instrucción.
Los FLAGS son una serie de registros de estado donde cada bit indica una situación especial, estos pueden marcar, entre muchas otras cosas:

Un acarreo en una operación matemática.
Indicar que la comparación entre dos números da 0.
Hay una petición de interrupción por parte de un periférico o una rutina concreta.
La instrucción se ejecuta en modo protegido o no.

Acumuladores y otros registros temporales

Otro tipo de registros son los acumuladores, estos se utilizan para almacenar los valores numéricos con los que operaran las unidades aritmético-lógicas para poder realizar sus operaciones correspondientes y poder devolver un resultado. Una ALU puede usar uno o varios registros de este tipo, pero cuando esto se suele hacer se suelen llamar a los registros auxiliares como base.

Decodificador

El decodificador de instrucciones de una CPU es una de las piezas más importantes del mismo, ya que su trabajo es leer una instrucción y derivarla a la unidad de ejecución correspondiente, así como escribir en los registros relacionados con cada una de ellas. Lo que hacen es leer los primeros bits de la instrucción, el cual es el código de la misma, y enviarla a los planificadores correspondientes, desde donde serán procesadas en el orden más adecuado para poder ejecutarlas lo más rápido posible.

Búfer de reordenamiento

Una vez las instrucciones han sido decodificadas se envían al búfer de reordenamiento donde se clasifican según el tipo de instrucción. Es decir, si son enteros o coma flotante, una instrucción de salto o de lectura de memoria, etcétera.

Planificadores

Los planificadores se encargan de coger las instrucciones ordenadas por tipo en el búfer de reordenamiento y enviarlas a las unidades de ejecución correspondiente para su resolución final. Se les llama así por el hecho que ordenan las instrucciones no según el orden de ejecución del programa, sino en el orden en el que están disponibles las diferentes unidades de ejecución.

Unidades de ejecución

Las unidades de ejecución son las encargadas de resolver las instrucciones y enviar el resultado al registro o dirección de memoria correspondiente. Tradicionalmente, se las llama ALU, pero no solamente existen instrucciones de lógica aritmética en un programa, sino también otro tipo de unidades. En todo caso, empezando por las ALU, no existe una unidad de este tipo, ya que en un procesador nos podemos encontrar de diferentes, las cuales las podemos clasificar de tres maneras distintas:

Por su tipo: escalares, vectoriales o tensoriales.
Si pueden operar con enteros o coma flotante.
Su rango de precisión, es decir, cuantos bits operan simultáneamente y qué formato estándar de numeración binaria soportan.
El tipo de operación que ejecutan, algunas ALU son simples y pueden realizar operaciones de suma o resta, pero otras son más complejas.

Sin embargo, existen otras unidades encargadas de otro tipo de operaciones que son clave para ejecutar los programas:

Las unidades de generación de direcciones lo que hacen es calcular la dirección virtual y/o física, según sea necesario, tanto de la RAM externa como de los periféricos para que el procesador se pueda comunicar con ellos. Son conocidas también como AGU y trabajan en colaboración con las unidades Load Store para leer y escribir datos en las direcciones de memoria correspondientes.
La Branch Unit es la encargada de gestionar las instrucciones de salto, las cuales se encargan de cambiar el valor del contador de programa para representar bucles y saltos en el código.
Por último, tenemos las unidades Load y Store, las cuales se encargan de escribir y leer la información de la memoria RAM, así como de actualizar el contenido de las líneas de caché que contienen una copia de esos datos en memoria, tengan el nivel que tengan.

La entrada Es el corazón de tu PC, pero… ¿Sabes realmente qué es un procesador y cómo funciona aparece primero en El Chapuzas Informático.