CPU
Dentro del procesador hay registros, una ALU y una unidad de control — y un reloj que los hace avanzar a todos a la vez.
Introducción
Un AMD Ryzen 9 9950X funciona a 4,3 GHz de frecuencia base.
Son 4300 millones de ciclos cada segundo.
Cada ciclo dura 0,23 nanosegundos: en ese tiempo la luz recorre unos 7 centímetros, menos de lo que mide la placa base de punta a punta.
Esta cifra es lo que manda dentro de un procesador, y explica casi todas las decisiones de diseño que verás en esta página.
Ya sabes qué hace una CPU: repetir el ciclo de búsqueda, descodificación y ejecución.
Ahora abriremos la caja.
Qué hay dentro
Los registros son la memoria de la CPU: pocos, pequeños e inmediatos.
La ALU (Arithmetic Logic Unit) es la parte que calcula.
La unidad de control es la que decide: lee el IR y activa las señales que hacen que el resto del circuito haga lo que corresponde.
Los registros
Un registro es un grupo de biestables (flip-flops), uno por bit.
Un registro de 8 bits son ocho biestables; uno de 64 bits, sesenta y cuatro.
Se distinguen dos clases según para qué sirven.
De propósito general
Son los que las instrucciones usan para trabajar: R1, R2, R3… o, en x86, RAX, RBX, RCX…
Cualquier instrucción aritmética puede leerlos y escribir en ellos.
Cuantos más haya, menos a menudo hace falta acudir a la memoria — y por eso las arquitecturas RISC tienen bastantes más que x86.
De propósito específico
Cada uno tiene un único cometido, y el programa no puede usarlos para nada más:
| Registro | Qué guarda |
|---|---|
PC (Program Counter) | la dirección de la próxima instrucción |
IR (Instruction Register) | la instrucción que se está ejecutando |
MAR (Memory Address Register) | la dirección que va al bus de direcciones |
MDR (Memory Data Register) | el dato que va o viene por el bus de datos |
SP (Stack Pointer) | la cima de la pila |
| Registro de estado (flags) | cómo ha ido la última operación |
| Acumulador | en máquinas sencillas, el operando y el resultado implícitos |
La diferencia entre las dos clases no es de tamaño ni de velocidad: es quién puede tocarlos.
Un registro específico lo gestiona la unidad de control, y el programa llega a él solo indirectamente — el PC cambia cuando haces un salto, el registro de estado cambia cuando haces una resta.
Un registro de 4 bits está formado por 4 biestables.
Al inicio del ciclo de reloj los biestables cambian de estado según lo que les llega por la entrada, pero bloquean esa entrada y no la dejan seguir hacia el resto del circuito hasta el ciclo siguiente.
¿Por qué tienen que hacer ese bloqueo?
Muestra la solución
Porque si no lo hicieran, por la salida del registro habría a la vez la información del ciclo anterior y la nueva que está entrando.
El resto del circuito todavía está calculando con el valor viejo; si la salida cambiara a media faena, el resultado sería una mezcla de dos ciclos y no sería ninguno de los dos.
Y hay una segunda razón, aún más grave: los registros y la ALU forman un bucle — la salida de la ALU vuelve a los registros, que vuelven a la ALU.
Sin un punto donde la señal se detenga y espere el próximo flanco, ese bucle nunca tendría ningún estado estable y el circuito oscilaría sin control.
El reloj es, por tanto, lo que convierte un montón de puertas lógicas en una máquina que da pasos.
La ALU
La ALU tiene dos entradas de datos, una entrada de operación y una salida, y pende del registro de estado.
Los elementos que encuentras son siempre los mismos:
- Las unidades de cálculo: un sumador, un restador, las puertas lógicas
AND,OR,XORyNOT, y en una CPU moderna también un multiplicador y un desplazador de bits. - El multiplexor de salida, que deja pasar solo el resultado de la unidad que has pedido.
- El registro de estado, donde cada unidad deja sus banderas.
Y aquí hay algo que sorprende la primera vez: la entrada de operación no le dice a la ALU qué tiene que calcular.
Le dice qué resultado tiene que dejar salir.
Por dentro, la ALU calcula la suma, la resta, el AND y el OR todas a la vez, cada vez, y el multiplexor elige una.
Suena a despilfarro, y es exactamente lo contrario: esperar a saber qué operación hace falta antes de empezar a calcular costaría tiempo, y el silicio sobra antes que el tiempo.
La unidad de suma de la ALU de una CPU de 8 bits recibe las entradas 10100011 y 10110001.
¿Cuál será la salida?
¿Se genera alguna otra señal?
Muestra la solución
En decimal las entradas son 163 y 177, y la suma es 340.
Pero 340 no cabe en 8 bits: el máximo es 255.
En binario:
1010 0011
+ 1011 0001
-----------
1 0101 0100La salida de 8 bits es 01010100, es decir 84 — un resultado que no tiene nada que ver con el correcto.
El 1 que sobra por la izquierda no se pierde: activa el bit de carry del registro de estado, que avisa de que el resultado no es válido.
Quien tiene que mirar ese bit es el programa. Si no lo mira, la CPU no se detendrá a avisarle.
El registro de estado
Guarda información sobre la última operación. Los bits más habituales son cuatro:
| Bandera | Se activa cuando |
|---|---|
| Z (zero) | el resultado es 0 |
| N (negative) | el resultado es negativo — de hecho, cuando el bit más significativo vale 1 |
| C (carry) | ha habido acarreo, como en el ejercicio |
| V (overflow) | el resultado se ha salido del rango con signo |
Y son estos bits los que hacen posible un if.
Una instrucción de salto condicional no mira ningún número: mira una bandera.
Cuando escribes if (a - b < 0), lo que se ejecuta es una resta y un salto que consulta la bandera N.
La unidad de control
Es la parte que lee la instrucción y mueve el resto del circuito.
Tiene cuatro piezas:
- El registro de instrucción (
IR), donde está la instrucción que se está ejecutando. - El descodificador, que es el circuito que interpreta el código de operación del
IRy activa una sola línea de salida: la que corresponde a esa instrucción. - El secuenciador, que reparte las señales de control a lo largo de los ciclos que la instrucción necesita, porque no todo pasa a la vez.
- El reloj, que le marca el ritmo.
Sus operaciones básicas son siempre estas:
- Ir a buscar la instrucción a la memoria y llevarla al
IR. - Descodificarla.
- Localizar los operandos, sean en registros o en memoria.
- Ordenar a la ALU la operación, o al sistema de E/S la transferencia.
- Guardar el resultado donde corresponda.
- Actualizar el
PCy volver a empezar.
Estás leyendo una vista previa.
Inicia sesión con Google para leer la página completa.
Inicia sesión con GoogleCon cualquier cuenta de Google. Solo te pediremos que aceptes las condiciones del servicio.