clase:daw:si:1eval:tema03
Diferencias
Muestra las diferencias entre dos versiones de la página.
| — | clase:daw:si:1eval:tema03 [2025/11/03 11:37] (actual) – creado - editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== 03. Procesadores ====== | ||
| + | |||
| + | |||
| + | ===== Procesador ===== | ||
| + | |||
| + | El procesador ejecuta una serie de instrucciones en código máquina. Estas instrucciones no son mas que " | ||
| + | |||
| + | El resultado de los cálculos del procesador se puede almacenar en la RAM, en el sistema de Entrada/ | ||
| + | |||
| + | ===== Arquitectura del Conjunto de Instrucciones (ISA) ===== | ||
| + | |||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | Una Arquitectura del Conjunto de Instrucciones (ISA) especifica las instrucciones que " | ||
| + | |||
| + | <note tip> | ||
| + | A la ISA también se le llama a veces simplemente " | ||
| + | </ | ||
| + | |||
| + | ^ 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, | ||
| + | | ARMv7 | ARM | Móviles, | ||
| + | | ARMv8 | ARM | Móviles, | ||
| + | | 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. [[https:// | ||
| + | |||
| + | 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, | ||
| + | |||
| + | Información sobre cada una de las ISAs | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | ===== Ensamblador ===== | ||
| + | El lenguaje ensamblado es el lenguaje que usamos las personas para escribir programas para un procesador. Prácticamente es como indicar los " | ||
| + | |||
| + | 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 " | ||
| + | * Una ALU | ||
| + | |||
| + | Veamos el siguiente programa | ||
| + | <sxh as3> | ||
| + | LD A,(#F2A3) | ||
| + | LD B,A | ||
| + | LD A,(#F2A4) | ||
| + | ADD A,B | ||
| + | LD (#F2A5),A | ||
| + | </ | ||
| + | |||
| + | |||
| + | Vamos a explicar línea por línea: | ||
| + | * **LD A, | ||
| + | * **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, | ||
| + | * **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 (# | ||
| + | |||
| + | ¿Que hace realmente eso? Simplemente **suma** el contenido de las celdas de memoria " | ||
| + | |||
| + | 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 (# | ||
| + | |||
| + | |||
| + | 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:// | ||
| + | <sxh> | ||
| + | start: | ||
| + | MOV A, [13] | ||
| + | MOV B, [14] | ||
| + | ADD A,B | ||
| + | MOV [15], A | ||
| + | HLT | ||
| + | |||
| + | DB 3; | ||
| + | DB 5; | ||
| + | DB 0; | ||
| + | </ | ||
| + | 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 | ||
| + | |||
| + | <note tip>Si te interesa mas el lenguaje ensamblador. Puedes leerte el libro {{: | ||
| + | |||
| + | <note tip> | ||
| + | |||
| + | ===== 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**: | ||
| + | * **ALU**: Realiza operaciones aritméticas sin decimales (sumas, restas, etc) | ||
| + | * **FPU**: Realiza operaciones aritméticas **CON** decimales (sumas, restas, | ||
| + | * **Unidad de predicción de saltos**: En caso de un salto (instrucción de '' | ||
| + | * **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 [[https:// | ||
| + | |||
| + | |||
| + | ^ 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 " | ||
| + | |||
| + | ===== 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): [[https:// | ||
| + | |||
| + | Y usando los conceptos que hemos visto en este tema explica que es " | ||
| + | |||
| + | ==== Ejercicio 7 ==== | ||
| + | Lee el siguiente artículo [[https:// | ||
| + | |||
| + | ==== 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 [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
