Arquitectura de Computadores: Resumen de Conceptos
Enviado por Chuletator online y clasificado en Electricidad y Electrónica
Escrito el en español con un tamaño de 7,46 KB
Unidades Funcionales
IF (Fetch): Lugar donde residen las instrucciones del programa. Se corresponde con la caché L1 de instrucciones (L1I). Solo lectura.
- PC (Program Counter): Registro de 32 bits que contiene la dirección de la siguiente instrucción a leer y ejecutar.
- Sumador: Para calcular la dirección de la siguiente instrucción a ejecutar.
ID (Decode):
- Banco de Registros: 32 registros de 32 bits cada uno. Cada registro tiene un identificador de 5 bits.
EX (Execute):
- Concatenador: Para obtener la dirección destino de una instrucción J (Jump).
- Sumador: Calcular la dirección destino de un salto BEQ (Branch if Equal).
- ALU (Arithmetic Logic Unit): Tiene 2 entradas y produce un resultado de 32 bits y una señal Z que se activa cuando el resultado es 0. Según la instrucción, el segundo parámetro puede venir de un offset o de otro registro.
MEM (Memory):
- PC: Si la instrucción es de salto, se sobrescribe el PC con la dirección calculada en la fase anterior, proveniente del concatenador o sumador.
- MEM DATOS: Se almacenan los datos del programa. Se corresponde con la L1D, tiene 2 entradas y 1 salida. Si se va a leer, se usa la primera entrada y la salida, y si se va a escribir, se usan las dos entradas.
WB (Write Back):
- BANCO REG: El valor a guardar puede venir de la ALU (operaciones aritmético-lógicas) o de memoria (instrucciones de carga y descarga). El identificador del registro destino puede estar en 2 posiciones: bits 20-16 si es de carga, o bits 15-11 si es aritmético-lógica.
Señales de Control
- RegWrite: Controla cuándo se escribe en el banco de registros. Debe estar activa en el flanco de subida.
- RegDst: Determina de dónde proviene el identificador del registro. 1 si es aritmético-lógica, 0 si es de carga.
- RegSrc: Determina de dónde proviene el dato que se almacena en el registro destino. 1 si viene de memoria, 0 si viene de la ALU.
- PCSrc1: 1 si la siguiente instrucción es un salto J, 0 si no.
- PCSrc2: 1 si la siguiente instrucción es un salto BEQ, 0 si no (se suma +4 al PC).
- ALUSrc: Determina de dónde proviene el segundo operando de la ALU. 1 si viene de un offset (carga-almacenamiento), 0 si viene de un registro (aritmético-lógica y saltos).
- ALUop: Señal de 4 bits usada para seleccionar la operación de la ALU.
- MemRead: Controla cuándo leer de la memoria de datos. 1 si lee datos, 0 si no hace nada.
- MemWrite: Controla cuándo se realiza una escritura en la memoria de datos. 1 si escribe, 0 si no.
MemRead y MemWrite no pueden estar activas al mismo tiempo.
Tabla de Señales de Control
- LW: RegWrite, RegSrc y MemRead
- SW: ALUSrc y MemWrite
- ADD, SUB, AND, OR: RegWrite y RegDst
- BEQ: PCSrc2
- J: PCSrc1
Dependencias
RAW (Read After Write): La segunda instrucción no puede ejecutarse hasta que acabe la primera. Es una dependencia verdadera, ya que hay transferencia de datos entre instrucciones. Solución: Anticipar el resultado o reordenar el código. Si no, se produce un bloqueo.
WAR (Write After Read): La segunda instrucción no puede ejecutarse hasta que acabe la primera. Es una dependencia falsa, porque no hay transferencia entre instrucciones. Solución: Renombre de registros.
WAW (Write After Write): Dependencia falsa, ya que la instrucción 3 no puede acabar antes que la 1; de lo contrario, habrá valores inadecuados en los registros. Solución: Renombre de registros.
CISC vs. RISC
CISC (Complex Instruction Set Computer)
- Implementado en x86 e IA-32.
- Tamaño de instrucciones variable.
- Muchas instrucciones, muy específicas.
- Muchos modos de direccionamiento.
- Registros específicos de muchos tamaños.
- Paralelismo complicado.
- Muy optimizado para instrucciones.
- Compiladores más simples y menos costosos.
RISC (Reduced Instruction Set Computer)
- Implementado en MIPS y ARM.
- Tamaño de instrucción fijo y corto.
- Instrucciones simples y reducidas.
- Pocos modos de direccionamiento.
- Gran número de registros.
- Paralelismo simplificado.
- Muy simple y fácil manejo.
- CPU más rápida.
Modos de Operación x86
- Modo heredado:
- Modo real: sistema de 16 bits, registros de 16 bits.
- Modo virtual: sistema de 32 bits, registros de 16 bits.
- Modo protegido: sistema de 32 bits, registros de 32 bits.
- Modo extendido:
- Modo compatibilidad: sistema de 64 bits, registros de 16 o 32 bits.
- Modo 64: sistema de 64 bits, registros de 64 bits.
Registros x86 (64 bits/32 bits)
- RAX/EAX: Acumulador de operando y del resultado.
- RBX/EBX: Puntero a datos en el segmento de datos (DS).
- RCX/ECX: Contador para cadenas y bucles.
- RDX/EDX: Puntero de entrada y salida de datos.
- RSI/ESI: Puntero origen de operaciones con cadenas y a DS.
- RDI/EDI: Puntero al segmento de cadenas y destino de estas.
- RSP/ESP: Puntero de pila.
- RBP/EBP: Puntero a datos de pila.
Tipos de Instrucciones x86
- Destructivas: Ejemplo:
ADD EAX, EBX
- Acceso a memoria: Ejemplo:
ADD EAX, [etiqueta]
- Ambiguas: Ejemplo:
ADD EAX, [inmediato]
Tipos de Direccionamiento x86
- Registro: Permite usar un dato almacenado en un registro.
- Inmediato: Se especifica un operando en la propia instrucción.
- Implícito: Algunas operaciones llevan registros predeterminados.
- A memoria: Utiliza como operando un valor de memoria. Se accede a él con
[]
. Para obtener la dirección a la que hace referencia la etiqueta, se usaADDR
. Dentro de[]
puede ir un inmediato, una etiqueta, un registro de 32 bits o una operación (puntero base + desplazamiento):[EBX + (ECX * 4)]
. Se debe indicar el tamaño del dato.
Pila
El funcionamiento sigue la estructura LIFO (último en entrar, primero en salir). Los registros tienen un tamaño de doble palabra y la pila tiene un puntero que, al meter un dato, hace que su valor disminuya en 4, y si se saca un dato, aumenta en 4. Su uso principal es para pasar parámetros a subprogramas. Al iniciar un programa con la orden CALL
, se introduce EBP
en la pila con el valor de ESP
, y cuando se acaba el programa, se resta el valor de ESP
a EBP
. Para volver de un subprograma al programa principal, se usa RET
.