¿Cómo se van ejecutando las operaciones en un Microprocesador?

El funcionamiento fundamental de la mayoría de las CPU,  independientemente de la forma física que adopten, es ejecutar una secuencia de instrucciones almacenadas que se denomina programa.

Las  instrucciones a ejecutar se guardan en algún tipo de memoria del ordenador.  Casi todas las CPUs siguen los pasos de obtención, decodificación y ejecución en su funcionamiento, que se conocen colectivamente como el ciclo  de instrucción.

¿Qué sucede tras esa ejecución de programas?

Después de la ejecución de una instrucción, todo el proceso se repite, y el  siguiente ciclo de instrucción normalmente busca la siguiente instrucción en  la secuencia debido al valor incrementado en el contador de programa.

Si se  ejecutó una instrucción de salto, el contador de programa se modificará para  contener la dirección de la instrucción a la que se saltó y la ejecución del  programa continúa normalmente.

En CPUs más complejas, se pueden  obtener, decodificar y ejecutar simultáneamente múltiples instrucciones.  Esta sección describe lo que generalmente se denomina “pipeline RISC clásico“, que es bastante común entre las CPUs simples utilizadas en  muchos dispositivos electrónicos (a menudo llamados microcontroladores).  Ignora en gran medida el importante papel de la caché de la CPU y, por  tanto, la etapa de acceso del pipeline.

Algunas instrucciones manipulan el contador del programa en lugar de  producir datos de resultado directamente; dichas instrucciones se  denominan generalmente “saltos” y facilitan el comportamiento del  programa como los bucles, la ejecución condicional del programa (mediante  el uso de un salto condicional) y la existencia de funciones. En algunos  procesadores, algunas otras instrucciones cambian el estado de los bits en  un registro de “banderas”.

Estas banderas pueden utilizarse para influir en el  comportamiento de un programa, ya que a menudo indican el resultado de  varias operaciones.

Por ejemplo, en estos procesadores una instrucción de  “comparación” evalúa dos valores y establece o borra bits en el registro de  banderas para indicar cuál es mayor o si son iguales; una de estas banderas  podría ser utilizada por una instrucción de salto posterior para determinar el  flujo del programa. 

Tareas básicas de un Procesador

Búsqueda

El primer paso, la búsqueda, consiste en recuperar una instrucción  (representada por un número o una secuencia de números) de la memoria  del programa. La ubicación (dirección) de la instrucción en la memoria de  programa está determinada por un contador de programa (PC), que 

almacena un número que identifica la dirección de la siguiente instrucción  que se va a obtener. Después de obtener una instrucción, el PC se  incrementa en la longitud de la instrucción para que contenga el

dirección de la siguiente instrucción de la secuencia. A menudo, la  instrucción que debe obtenerse debe recuperarse de una memoria  relativamente lenta, lo que hace que la CPU se detenga mientras espera que  se devuelva la instrucción. Este problema se resuelve en gran medida en los  procesadores modernos gracias a las memorias caché y las arquitecturas de  canalización (véase más adelante). 

Descodificar  

La instrucción que la CPU obtiene de la memoria determina lo que hará la  CPU. En el paso de decodificación, realizado por el circuito conocido como  decodificador de instrucciones, la instrucción se convierte en señales que  controlan otras partes de la CPU. 

La forma en que se interpreta la instrucción viene definida por la  arquitectura del conjunto de instrucciones (ISA) de la CPU. A menudo, un  grupo de bits (es decir, un “campo”) dentro de la instrucción, llamado  opcode, indica qué operación debe realizarse, mientras que los campos  restantes suelen proporcionar información complementaria necesaria para la  operación, como los operandos. Estos operandos pueden especificarse como  un valor constante (llamado valor inmediato), o como la ubicación de un  valor que puede ser un registro del procesador o una dirección de memoria,  según lo determine algún modo de direccionamiento. 

En algunos diseños de CPU, el decodificador de instrucciones se  implementa como un circuito inalterable. En otros, se utiliza un  microprograma para traducir las instrucciones en conjuntos de señales de  configuración de la CPU que se aplican secuencialmente a lo largo de  múltiples pulsos de reloj. En algunos casos, la memoria que almacena el  microprograma es reescribible, lo que permite cambiar la forma en que la  CPU decodifica las instrucciones. 

Ejecutar  

Después de los pasos de obtención y decodificación, se realiza el paso de  ejecución. Dependiendo de la arquitectura de la CPU, esto puede consistir  en una sola acción o en una secuencia de acciones. Durante cada acción,  varias partes de la CPU se conectan eléctricamente para que puedan realizar  toda o parte de la operación deseada y luego la acción se completa,  normalmente en respuesta a un pulso de reloj. Muy a menudo, los  resultados se escriben en un registro interno de la CPU para un acceso  rápido por parte de las instrucciones posteriores. En otros casos, los  resultados pueden escribirse en una memoria principal más lenta, pero  menos costosa y de mayor capacidad.

Por ejemplo, si se va a ejecutar una instrucción de suma, las entradas de la  unidad aritmética lógica (ALU) se conectan a un par de fuentes de  operandos 

(números a sumar), la ALU está configurada para realizar una operación de  adición de manera que la suma de sus entradas de operandos aparecerá en  su salida, y la salida de la ALU está conectada al almacenamiento (por  ejemplo, un registro o memoria) que recibirá la suma. Cuando se produce el  pulso de reloj, la suma se transferirá al almacenamiento y, si la suma  resultante es demasiado grande (es decir, es mayor que el tamaño de la  palabra de salida de la ALU), se activará una bandera de desbordamiento  aritmético.

Actualmente éste tipo de procesadore están psasndo a un segundo plano gracias a la utilización de CUDA, como procesadores múltiples y con varias ejecuciones como usan por ejemplo fakeapp.