03. Procesadores

Contenidos

Procesadores

Arquitectura del Conjunto de Instrucciones (ISA)

Ensamblado y código máquina

Microarquitectura

Fabricantes de Procesadores

ISA vs Microarquitectra vs Fabricantes

Unidades Funcionales

Unidad de Control

Registros de Propósito General

ALU y FPU

Cache

Material

El procesador ejecuta una serie de instrucciones en código máquina. Estas instrucciones no son mas que "números" en binario que entran a través del Bus desde la RAM. Cuando llegan esos "números" se realizan una serie de cálculos.

El resultado de los cálculos del procesador se puede almacenar en la RAM, en el sistema de Entrada/Salida o dentro del procesador en una pequeña memoria llamada "REGISTROS". Estos registros los usa el programador para almacenar datos temporales y no tener que almacenarlos en la RAM.

Arquitectura del Conjunto de Instrucciones (ISA)

Instruction set architecture

Una Arquitectura del Conjunto de Instrucciones (ISA) especifica las instrucciones que "entiende" el procesador y los registros que posee dicho procesador. Por lo que para un programador , lo importante de un procesador es su ISA ya que indica como va a poder el programador , programar ese procesador. Esas instrucciones son los "números" que hemos dicho que se leen de la RAM y que cada "número" significa una instrucción distinta.

A la ISA también se le llama a veces simplemente "Arquitectura", pero no confundir con la "Microarquitectura" (Que vamos a ver también en este tema)
Nombre ISA	Empresa que la ha creado	Ámbito
x86 (tambien llamada IA32)	Intel	PC de hasta de 4 GB de RAM
x64 (tambien llamada AMD64, EM64T,x86-64 o Intel 64)	AMD	PC con mas de 4 GB de RAM
ARMv7	ARM	Móviles,tablet,etc de hasta de 4 GB de RAM
ARMv8	ARM	Móviles,tablet,etc con mas de 4 GB de RAM
Power	IBM	Estaciones de trabajo RISC, Antiguos Mac y en consolas como PS3 y XBox 360
SPARC	Oracle/Sun	Estaciones de trabajo RISC
RISC-V	RISC-V Fundation	Pretende ser una alternativa a ARM que no pueda ser censurada por los gobiernos. RISC-V pude ser la clave para que Huawei no sea afectado por el veto comercial y RISC-V cambiara su sede de USA a Suiza por temores comerciales

Lo importante de una ISA es que un programa de ordenador solo puede ser escrito para una ISA concreta y no funcionará para otra ISA. Aunque también un programa, debido a que funciona sobre un sistema operativo, debe ser programado pensando tanto en la ISA como en el Sistema Operativo.

Información sobre cada una de las ISAs

https://es.wikipedia.org/wiki/X86

https://es.wikipedia.org/wiki/X86-64

https://en.wikipedia.org/wiki/ARM_architecture

https://en.wikipedia.org/wiki/Power_ISA

https://en.wikipedia.org/wiki/SPARC

https://en.wikipedia.org/wiki/RISC-V

Ensamblador

El lenguaje ensamblado es el lenguaje que usamos las personas para escribir programas para un procesador. Prácticamente es como indicar los "números" directamente al procesador pero de una forma mas legible para una persona. El código máquina se refiere a los números directamente que entiende el ordenador.

Como ejemplo de ensamblador vamos a usar el procesador Z-80 (un procesador de 8 bits) ya que es muy sencillo.

El Z-80 tiene:

Entre otros dos registros llamados "A" y "B"

Una ALU

Veamos el siguiente programa

Vamos a explicar línea por línea:

LD A,(#F2D3): Lee el valor de la celda de memoria "F2D3" y la carga en el registro A . Notar que el Nº de la celda está en hexadecimal

LD B,A: Carga en el registro B el valor del registro A. Es realmente copiar el valor de un registro en otro.

LD A,(#F2D4): Lee el valor de la celda de memoria "F2D4" y la carga en el registro A. Notar que el Nº de la celda está en hexadecimal

ADD A,B: Usando la ALU,suma el valor del registro A y el registro B y deja el resultado en el registro A

LD (#F2D5),A: Guarda en la posición de memoria "F2D5" el valor del registro A

¿Que hace realmente eso? Simplemente suma el contenido de las celdas de memoria "F2D3" y "F2D4" dejando el resultado en "F2D5".

Ahora veamos ese programa como sería en código máquina

Instrucción en ensamblador	Instrucción en código máquina
LD A,(#F2D3)	3AF2D3
LD B,A	47
LD A,(#F2D4)	3AF2D4
ADD A,B	88
LD (#F2D5),A	32F2D5

Es decir que en la RAM, en las celdas realmente lo que se guardan son los siguientes bytes de forma consecutiva: 3A F2 D3 47 3A F2 D4 88 32 F2 D5

Posición de la RAM	Valor
0000	3A
0001	F2
0002	D3
0003	47
0004	3A
0005	F2
0006	D4
0007	88
0008	32
0009	F2
000A	D5
...
...
F2D3	3
F2D4	5
F2D5
...
...
FFFE
FFFF

Cuando vemos ese números , no tiene mucho significado pero como acabamos de ver , son las instrucciones que se dan al procesador.

Hemos dicho que los programa de ordenador son distintos para cada ISA ya que en cada ISA los registros son distintos y además el código máquina también es totalmente distinto.

En la siguiente página: http://schweigi.github.io/assembler-simulator/, podemos ejecutar el siguiente programa que es muy similar de una ISA distinta: Que suma los valores 3 y 5 que hay en las posiciones de memoria 13 y 14. Dejan el resultado en la posición de memoria 15

Si te interesa mas el lenguaje ensamblador. Puedes leerte el libro x86-64 Assembly Language Programming with Ubuntu

Unidades Funcionales

Ahora vamos a ver como es el procesador por dentro, como ya hemos indicado , el procesador tiene una serie de registros que vienen determinados por la ISA. Junto con ellos dentro del procesador están las siguientes unidades funcionales:

Unidad de Control: Es que la que organiza todo el procesador para que realice cada unidad su trabajo . Es el verdadero cerebro de la CPU

Registros: Son como variable dentro del procesador. Ocupan unos pocos bytes cada uno de ellos.

ALU: Realiza operaciones aritméticas sin decimales (sumas, restas, etc)

FPU: Realiza operaciones aritméticas CON decimales (sumas, restas,divisiones,multiplicaciones, etc)

Unidad de predicción de saltos: En caso de un salto (instrucción de if o for) aquí predice cual es el siguiente código a ejecutar.

Cache: Es una copia de la RAM con los datos que mas se usan. Cuanto mayor tamaño mejor ya que la RAM es muy lenta y sin datos o programa , la CPU debe esperar a leer de la RAM. Existen 3 tipos de cache. L1, L2 y L3.

En la siguiente imagen podemos ver las unidades en un procesador Zen de AMD:

Decode y Scheduler: Forma parte de la Unidad de control.

Registros: No aparecen los registro en el esquema ya que físicamente ocupan poquísimo

ALU: Es la ALU

Floating Point: Es la FPU

Branch Prediction: Es la Unidad de predicción de saltos

Data cache: Es la cache L1 con datos

ICache: Es la cache L1 con instrucciones

Load/Store: Leer y escribe los datos en la RAM

L2: Junto al procesador se encuentra otra cache llamada L2 que es mas grande que la L1 pero mas lenta.

Microarquitectura

Es como los ingenieros diseñan el procesador para ser lo mas rápido posible. En los procesadores de Intel son cada una de las generaciones. 1º Gen, 2º Gen , etc. En los procesadores AMD tenemos Zen, Zen+ , Zen 2, Zen 3.

Cada año que pasa , se diseñan mejores microarquitecturas para hacer mas rápido el procesador pero su ISA es la misma para de esa forma que los programas sigan sirviendo en el nuevo procesador. Por lo tanto al comprar un procesador lo que nos interesa saber es su microarquitectura ya que eso determina el rendimiento.

Fabricante

Es el que finalmente fabrica el procesador (o cualquier otro chip) en las fábricas de procesadores. No tiene porque ser la misma empresa que diseña la microarquitectura o crea la ISA.

Hay pocas fabricas de chips en el mundo. En la siguiente página de la Wikipedia podemos ver las fábricas que hay Lista de plantas de fabricación de semicondictores

Modelo de Procesador	ISA	Empresa que diseña la ISA	Empresa que diseña la microarquitectura	Empresa que fabrica el procesador
Intel i486DX	x86	Intel	Intel	Intel
AMD Am486	x86	Intel	AMD	AMD
Intel Core i7-10700K	x64	AMD	Intel	Intel
AMD Ryzen 9 3900X 3.8 GHz	x64	AMD	AMD	TSMC
Snapdragon 800	ARMv7	ARM	Qualcomm	TSMC
A5	ARMv7	ARM	Apple	Samsung
Snapdragon 865	ARMv8	ARM	Qualcomm	TSMC
A11	ARMv8	ARM	Apple	TSMC

Realmente no nos interesa mucho saber la empresa que fabrica el procesador.Aunque cuando decimos que un procesador es de la empresa "A", estamos diciendo que dicha empresa ha diseñado la microarquitectura de dicho procesador, aunque no haya creado ni la ISA ni lo haya finalmente fabricado.

Ejercicios

Ejercicio 1

Busca 2 procesadores de Intel y 2 de AMD e indica el tamaño de su cache.

Ejercicio 2

Usando los conceptos aprendidos en clase, explica las diferencias entre una CPU y los siguientes tipos de procesadores:

GPU

iGPU

APU

IPU

Ejercicio 3

Escribe un programa en ensamblado para el Z-80 que sume el valor de las posiciones de memoria 68A3 y DDF2 y deje el resultado en la posición de memoria ABCD.

Indica el código máquina de dicho programa.

Ejercicio 4

Si un programa funciona en un procesador de Sansung con ISA ARMv8, ¿funcionará dicho programa con un procesador Qualcomm cuya ISA es ARMv8? Es decir , si funcionará con dos procesadores de marcas distintas. ¿Explica porque?

Ejercicio 5

Busca la ISA que van a usarse en los procesadores de las nuevas consolas de Sony y Microsoft

Ejercicio 6

La FPU es una de las partes mas importantes de un procesador ya que determina mucho su velocidad, por ello las CPUs actuales suelen llevar varias FPUs y además de que en cada microarquitectura se mejora su velocidad.

Lee el siguiente artículo de Linus Torvalds (el creador de Linux): Linus Torvalds le desea una muerte dolorosa a AVX-512 de Intel

Y usando los conceptos que hemos visto en este tema explica que es "AVX-512" y que opina de las FPUs

Ejercicio 7

Lee el siguiente artículo Linux 5.4 cesa soporte para la arquitectura IA-64 y usando los conceptos que hemos visto en este tema, explica de que está hablando.

Ejercicio 8

Indica para las siguientes ISA de ARM si son ISAs de 32 bits o 64 bits:

ARMv6

ARMv7

ARMv8

Y indica también la máxima RAM a la que puede acceder cada uno de ellos.

Ejercicio 9

En la página de descarga de Java del JDK 8 y de Java del JDK 14, indica para que combinación de ISA y Sistemas operativos están disponibles cada una de las versiones.