Atlasingeniería

Arquitectura y sistemas operativosArquitectura del procesadorTema 1

Ciclo de instrucción y camino de datos

Buscar, decodificar, ejecutar, guardar. Ese lazo es todo lo que hace un procesador, y entenderlo explica qué es realmente un programa en ejecución.

Para este tema conviene tener claro:Flip-flops y circuitos secuenciales

Un procesador no hace nada más que repetir un lazo: traer la próxima instrucción, entender qué pide, hacerlo, guardar el resultado. Miles de millones de veces por segundo, sin excepción. Todo lo demás —sistemas operativos, navegadores, modelos de lenguaje— sale de ahí.

Las piezas mínimas de un procesador

Las piezas mínimas son pocas. El banco de registros: unas decenas de celdas rapidísimas donde se opera. La ALU, que hace las cuentas y las comparaciones. La unidad de control, que decide qué camino se abre en cada paso. Y dos registros especiales: el contador de programa, que apunta a la próxima instrucción, y el registro de instrucción, que guarda la actual.

El camino de datos es el cableado entre esas piezas, con multiplexores eligiendo de dónde viene cada operando.

Antes de seguir, predecí

El procesador ejecuta una instrucción que suma dos registros. ¿Cuántos accesos a memoria hace?

Las cinco etapas del ciclo

El ciclo clásico tiene cinco etapas. Búsqueda: leer de memoria lo que apunta el contador de programa e incrementarlo. Decodificación: interpretar los bits y leer los registros fuente. Ejecución: la ALU opera, o calcula una dirección. Memoria: si la instrucción lee o escribe, se accede ahí. Escritura: el resultado vuelve al registro destino.

El contador de programa se incrementa durante la búsqueda, antes de saber qué instrucción era. Por eso un salto tiene que corregirlo después: el procesador ya había asumido que seguía la siguiente.

Estado inicial. En la dirección 100 está «sumar r1, r2, r3» y el contador apunta ahí.

1 / 6
Seguí el contador de programa: se incrementa en la primera etapa, cuando todavía nadie sabe qué instrucción es. Esa apuesta es la que después hay que deshacer si la instrucción era un salto, y es de donde salen los problemas del pipeline.

El repertorio como contrato entre hardware y software

El repertorio de instrucciones es el contrato entre el hardware y el software: qué instrucciones existen, qué registros hay, cómo se codifican. Es la interfaz que permite que el mismo binario corra en procesadores distintos de la misma familia.

Hay dos filosofías. CISC —x86— tiene instrucciones numerosas y complejas, algunas de las cuales hacen varias cosas. RISC —ARM, RISC-V— tiene pocas instrucciones simples, de ancho fijo, donde sólo las de carga y almacenamiento tocan la memoria. RISC es más fácil de segmentar en etapas, y esa ventaja definió el diseño moderno; de hecho los x86 actuales traducen internamente a microoperaciones de estilo RISC.

La unidad de control: cableada o microprogramada

La unidad de control se implementa de dos maneras. Cableada: lógica combinacional que produce las señales directo del código de operación, rápida y rígida. Microprogramada: cada instrucción se expande en una secuencia de microinstrucciones guardadas en una memoria interna, más lenta pero modificable.

Lo segundo tiene una consecuencia práctica que se ve todos los días: el microcódigo se puede actualizar. Varias mitigaciones de vulnerabilidades de procesadores llegaron como actualizaciones de microcódigo, sin cambiar el chip.

Los saltos, que son lo interesante

Las instrucciones de salto son las que hacen interesante al ciclo. Un salto incondicional sólo reescribe el contador de programa. Un salto condicional depende de banderas que dejó una comparación anterior.

Y una llamada a función agrega guardar la dirección de retorno, típicamente en la pila. Ese mecanismo es lo que hace posible la recursión, y también es el que se ataca al sobrescribir la dirección de retorno con un desborde de buffer.

Un programa en ejecución es un estado

Puesto todo junto, un programa en ejecución es un estado: el contenido de los registros, el contador de programa y la memoria asociada. Nada más.

Eso es exactamente lo que el sistema operativo guarda y restaura al cambiar de proceso, y es lo que permite que decenas de programas parezcan correr a la vez sobre un puñado de núcleos. Entender el ciclo es entender por qué un cambio de contexto es una operación bien definida.

Lo que agregaron los procesadores reales

TécnicaQué haceQué se paga
Segmentaciónuna instrucción por cicloriesgos: hay que resolverlos
Superescalarvarias instrucciones por ciclológica de despacho compleja
Ejecución fuera de ordenno esperar a la que está trabadamuchísimo silicio
Predicción de saltosadivinar el camino y seguirsi se equivoca, descartar todo
Ejecución especulativatrabajar antes de saber si hacía faltaSpectre y Meltdown
La última fila es el ejemplo más caro de la historia reciente: una optimización de rendimiento que resultó ser un canal por el cual leer memoria que no correspondía.

Cierre

Buscar, decodificar, ejecutar, acceder a memoria, escribir. El contador de programa avanza solo y los saltos lo corrigen. El repertorio de instrucciones es el contrato con el software, y el estado de un programa —registros más contador más memoria— es justo lo que el sistema operativo guarda para cambiar de proceso.

Autoevaluación

¿Lo entendiste?

¿Por qué un salto tiene que corregir el contador de programa?
¿Cuáles son las cinco etapas del ciclo clásico?
¿Qué hace la unidad de control?
¿Por qué los registros son tan pocos?