570 likes | 794 Views
CLASE 10. QUE ES UN COMPUTADOR. Niveles de abstracción. Todos los computadores consisten de 5 componentes: Procesador: (1) Datapath y (2) el control. (3) Memoria. (4) Dispositivos de entrada y (5) dispositivos de salida. MODELOS VON-NEWMAN Y HARDVARE. NIVELES DE ABSTRACCION.
E N D
QUE ES UN COMPUTADOR Niveles de abstracción • Todos los computadores consisten de 5 componentes: • Procesador: (1) Datapath y (2) el control. • (3) Memoria. • (4) Dispositivos de entrada y (5) dispositivos de salida
NIVELES DE ABSTRACCION PARTE 2 DEL CURSO PARTE 1 DEL CURSO
¿QUE ES ARQUITECTURA DE COMPUTADORES? Arquitectura de la maquina Organización de la maquina
TIPO DE ALMACENAMIENTO DE LA CPU • Las ISAs se diferencian por el tipo de almacenamiento interno que usa el procesador, definiendo a la vez su tipo de operandos.
ARQUITECTURAS DE PILA (STACK ARCHITECTURES) Los operandos están implícitos en el tope de la pila Procesador • El registro TOS (Top of stack) apunta al primer operando de entrada. • El segundo operando de entrada es el que está una posición más abajo. • El primer operando se descarta de la pila, el resultado ocupa el lugar del segundo y el registro TOS se actualiza para que apunte al resultado. • Se emplean instrucciones push y pop: • Push: mete datos a la pila. • Pop: Saca datos de la pila. Stack TOS ALU Memoria Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de pila? Declaración en bajo nivel push A push B add pop C Declaración en alto nivel C = A + B;
ARQUITECTURAS DE ACUMULADOR (ACCUMULATOR ARCHITECTURES) Un operando implícito en el acumulador Procesador Acumulador • El acumulador es el primer operando de entrada (implícito). • El segundo operando es una posición dememoria. • El resultado se escribe en el acumulador. ALU Memoria Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de acumulador? Declaración en bajo nivel Declaración en alto nivel load A add B store C C = A + B;
ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) – ARQUITECTURA REGISTRO A MEMORIA Procesador Operandos explícitos (en registros o posiciones de memoria) • Un operando de entrada está en un registro, el segundo operando están en memoriay el resultado se escribe en un registro. Registros ALU Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de registro a memoria? Memoria Declaración en bajo nivel Declaración en alto nivel C = A + B; load R1,A add R3,R1,B store R3
ARQUITECTURAS DE REGISTROS DE PROPOSITO GENERAL (GENERAL-PURPOSE REGISTER ARCHITECTURES) – ARQUITECTURA REGISTRO A REGISTRO Operandos explícitos (en registros o posiciones de memoria) Procesador • Todos los operandos están en registros (de entrada y resultado). • Para cargar un registro con un valor desde memoria se emplean instrucciones load. • Para transferir el resultado contenido en un registro a memoria se usan instrucciones store. Registros ALU Ejemplo: ¿Como se codificara la instrucción de código en alto nivel C = A + B en una arquitectura de registros de propósito general? Memoria Declaración en bajo nivel Declaración en alto nivel C = A + B; load R1,A load R2,B Add R3,R1,R2 store R3,C
CLASES DE ISA (RESUMEN) C = A + B; push A push B add pop C load R1,A load R2,B Add R3,R1,R2 store R3,C load R1,A add R3,R1,B store R3 load A add B store C • Los operandos explícitos pueden ser accedidos directamente desde memoria o puede ser necesario cargarlos primero en un almacenamiento temporal, dependiendo de la arquitectura y de la instrucción específica.
LENGUAJE ENSAMBLADOR • Los lenguajes de los procesadores corresponden a un nivel de abstracción bajo “Lenguajes de Bajo Nivel (LBN)” • Ensamblador: Lenguaje de bajo nivel utilizado para escribir programas. • Los LBN son definidos por una serie de Mnemónicos, símbolos alfabéticos que representan un código binario. • Constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador. adda,b,c Operandos Mnemonico de la operacion a = b + c add a,b,c 00000010001100100100000000100000
COMPONENTES DE UN ISA • Organización de la estructuras de almacenamiento programables • Registros • Modos de direccionamiento y de acceso a datos e instrucciones. • Tipos de datos y estructuras de los datos • Codificación y representación • Formatos de instrucciones. • Conjunto de instrucciones (o código de operación) • ULA, transferencia de control, tratamiento de excepciones.
RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000 • Conjuntos de registros: • 32 registros de 32 bits. • El registro cero ($R0) siempre es 0. • Hi/Lo para multiplicación y división • Instrucciones: • Todas las instrucciones son de 32 bits • Clases: • Load/Store. • Computacional. • Salto y ramificación. • Punto flotante (coprocesador). • Manejo de memoria. • Especial. • Formatos: 3 formatos de instrucciones todos de 32 bits.
RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000 Modos de direccionamiento y de acceso a datos e instrucciones Registro (directo) Inmediato Indexado Relativo al PC
RESUMEN INSTRUCTION SET ARCHITECTURE DEL MIPS R3000 Conjunto de instrucciones • Formatos: 3 formatos de instrucciones todos de 32 bits.
Y ESTO QUE TIENE QUE VER CON EL CURSO • Objeto de estudio del curso: MIPS ISA 32 bits • Arquitectura registro a registro (load/store). • Quienes usan el MIPS? NEC, Nintendo, Sony, Silicon Graphics, Texas Instruments, Cisco, … ¿Qué aspectos se tienen que tener en cuenta a la hora de diseñar un ISA?
PRINCIPIOS DE DISEÑO DE UN ISA • Principio de diseño #1: La simplicidad favorece la regularidad • Instrucciones de tres operandos. • El HW para un número variable de operandos es más complejo que para un número de operandos fijo. • Principio de diseño #2: Más pequeño, más rápido • 32 registros de propósito general de 32 bits cada uno (MIPS word: 32 bits) • Los operandos de una instrucción se eligen entre los 32 registros de propósito general. • Un número de registros elevado incrementa el ciclo de reloj (existe un compromiso entre el numero de registros y el ciclo de reloj). • El número de registros influye en el número de bits necesarios para su codificación en el formato de instrucción.
OPERACIONES DEL HARDWARE DEL COMPUTADOR Todo computador debe ser capaz de realizar operaciones aritméticas add a,b,c a = b + c; Lenguaje C Formato MIPS ¿Cómo seria la codificación en lenguaje MIPS de la siguiente instrucción? Restricción Las instrucciones aritméticas en el MIPS tienen formato fijo realizando solamente una operación y teniendo 3 variables Lenguaje C a = b + c + d + e; Formato MIPS comentarios instrucciones add a,b,c # a = b + c add a,a,d# a = b + c + d add a,a,e# a = b + c + d + e
OPERACIONES DEL HARDWARE DEL COMPUTADOR Ejemplo ¿Cuál será el código generado por un compilador para la siguiente porción de programa? a = b + c; d = a - e; add a,b,c # a = b + c sub d,a,e # a = a - e Ejemplo ¿Cuál será el código generado por un compilador para la siguiente porción de programa? f = (g + h) – (i + j); Solamente una operación es hecha por instrucción. Necesidad de variables temporales (t0,t1). add t0,g,h # t0 = g + h add t1,i+j # t1 = i – j Sub f,t0,t1 # f= t0 – t1
OPERANDOS Y REGISTRADORES int a,b,c;
REGISTROS • Registros MIPS • El ISA del MIPS tiene 32 registros (el x86 tiene 8 registros). • Cada registro tiene 32 bits de tamaño (en las arquitecturas mas modernas de 64 bits el tamaño de estos es de 64 bits). • Word Entidad de 4 bytes (32 bits). • En MIPS existe una convención de nombres para referirnos a los registros, la convención de $xy, donde: • $s0 - $s7: para variables en C y java. • $t0 - $t9: para variables temporales.
OPERACIONES DEL HARDWARE DEL COMPUTADOR Ejemplo Según lo anterior, ¿Cuál será el código generado por un compilador para la siguiente porción de programa? f =(g + h)-(i + j); Solución: Supongamos que las variables f, g, h, i y j, son asignadas a los registros $s0, $s1, $s2, $s3 y $s4 respectivamente. add $t0,$s1,$s2 # temporal t0 = g + h add $t1,$s3,$s4 # temporal t1 = i – j Sub $s0,$t0,$t1 # f= (g + h) – (i + j)
OPERANDOS DE MEMORIA • Además de variables simples, los lenguajes de alto nivel poseen estructuras de datos complejas (estructuras, arreglos). • Por su tamaño, estas estructuras no se pueden almacenar en los GPRs, sino en memoria. • Las operaciones aritméticas MIPS son posibles sólo entre registros. • Instrucciones de transferencia de datos: • Transfieren datos entre la memoria y los registros • Para acceder a una palabra en memoria, la instrucción debe suministrar su dirección en memoria. Dirección Contenido 3 64 2 72 Memoria[2] = 72 ATENCIÓN: esta idea será refinada más adelante 1 148 0 234 Dirección Dato Memoria (Vista como un vector)
DISPOSICION DE MEMORIA • La mayor parte de las arquitecturas pueden direccionar bytes individuales. • ¿Cómo se disponen en memoria los bytes de un valor escalar de múltiples bytes? • Ejemplo: • Dato (32 bits): 0x12345678 • MostSignificant Byte (MSB): 0x12. LeastSignificant Byte (LSB): 0x78 • Dirección: 0x184 • Memoria direccionable por bytes IBM360/370, Motorola 68K, SPARC, MIPS, ARM9 Intel 80x86, Pentium, VAX, Alpha, MIPS, ARM9
OPERANDOS DE MEMORIA RECAPITULANDO Se tiene un vector A = [0,0,0,0,15], con 5 posiciones, comenzando en la dirección de memoria 102. Esta dirección es llamada de dirección base del vector. Así, 102 es la dirección de A[0],103 y de A[1], ...,106 y de A[4]. Datos Direcciones Dirección base de A
OPERANDOS DE MEMORIA • Los valores deben ser traídos (fetched) de memoria antes de que las instrucciones (add y sub) puedan operar sobre ellos. Load word lw $t0, memory-address lw $t0, offset(registro_base) Memory Register Memory Store word sw $t0, memory-address sw $t0, offset(registro_base) Register • Dirección de la memoria accedida es dada por la suma del offset (valor constante) con el contenido del registrador base.
OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW) Compilación usando instrucciones de transferencia de datos • Suposiciones: • Aes un arreglo de 100 posiciones • El compilador asocia h con el registro $s2 • La dirección base de A está en $s3 • Cómo se compilaría: g = h+A[8]; • Solución: • Un operando está en memoria. Es necesario transferirlo a un registro mediante la instrucción load word, lw lw $t0, 8($s3) # registro $t0 almacena A[8] # el offset será refinado en breve Offset Base register • Ambos operandos de la suma están en registros add $s1, $s2, $t0 # g = h+A[8]
COMENTARIOS SOBRE LA TRADUCCION ANTERIOR lw $t0, 8($s3) add $s1,$s2,$t0 g = h+A[8]; • La traducción anterior no toma en cuenta el hecho de como el MIPS direcciona las palabras de la memoria. • La dirección de una palabra corresponde a la dirección de uno de sus 4 bytes (MIPS word: 32 bits). • Las direcciones de palabras contiguas difieren en 4 • Las palabras se ubican en direcciones múltiplo de 4 (restricción de alineamiento que garantiza transferencias de datos más rápidas)
RESTRICCIONES DE ALINEAMIENTO • El acceso a objetos de tamaño mayor a un byte debe ser alineado • El acceso a un objeto con tamaño de s bytes en la dirección de byte A está alineado si A mod s = 0 • ¿Por qué se diseñan procesadores con restricciones de alineamiento? • Soportar accesos desalineados eleva la complejidad del HW. • El acceso a una dirección desalineada toma varias referencias alineadas a memoria. • Los programas con accesos alineados tienen mejor rendimiento.
OPERANDOS DE MEMORIA (INSTRUCCIÓN STORE WORD, SW) Compilación usando instrucciones de transferencia de datos • Suposiciones: • Aes un arreglo de 100 palabras (word). • El compilador asocia g y h con los registros $s1 y $s2 . • La dirección base de A está en $s3 • Cómo se compilaría: g = h+A[8]; • Solución: • Un operando está en memoria. Es necesario transferirlo a un registro mediante la instrucción load word, lw lw $t0, 32($s3) # registro $t0 almacena A[8] # el offset será refinado en breve Offset Base register • Ambos operandos de la suma están en registros add $s1, $s2, $t0 # g = h+A[8]
OPERANDOS DE MEMORIA (INSTRUCCIÓN LOAD WORD, LW) Compilación de una sentencia en C cuando un operando está en memoria • Suposiciones: • Aes un arreglo de 100 palabras. • El compilador asocia h con el registro $s2 • La dirección base de A está en $s3. • Cómo se compilaría: A[12] = h+A[8]; • Solución: • Una sentencia en C con dos operandos en memoria lw $t0, 32($s3) # registro $t0 almacena A[8] # Offset correcto add $t0, $s2, $t0 # registro $t0 almacena h+A[8] • El resultado se lleva a memoria con la instrucción store word, sw sw$t0, 48($s3) # almacena h+A[8] en A[12]
DIRECCION ABSOLUTA DE LA POSICION 3 DEL VECTOR (i = 3) Variable i (i=3) ($s4) 0 1 2 3 4 5 6 7 8 9 ... A Desplazamiento (offset): 4*i = 12 Dirección A[3]: ($s2)+12 Registrador base $s2
EJEMPLO: MEMORIA Y VECTORES • Suposiciones: • Aes un arreglo de 100 palabras. • El compilador asocia g,he icon los registros $s1, $s2y $s4 . • La dirección base de A está en $s3. • Cómo se compilaría: g= h+A[i]; • Solución: • Requerimos primero calcular la dirección de A[i]. Antes de sumar i a la dirección base de A, debemos multiplicar i por 4. Vamos hacer esto por ahora de la siguiente forma: add $t1, $s4, $s4 # $t1=i+i=2*i add $t1, $t1, $t1 # $t1=2*i+2*i=4*i • Para coger A[i], sumamos $t1 con la dirección base de A, dada en $s3 (Recordar diapositiva anterior): add $t1, $t1, $s3 # $t1 = Dirección A[i]
EJEMPLO: MEMORIA Y VECTORES • Solucióncontinuación: • Ahora podemos cargar A[i] para un registrador temporal, y realizar la suma, que será almacenada en g: lw $t0, 0($t1) # temporal $t0=A[i] add $s1, $s2, $t0 # g = h + A[i]
OPERANDOS INMEDIATOS • Más del 50% de las instrucciones aritméticas del MIPS tienen como uno de sus operandos una constante. • Una instrucción inmediata usa un numero constante como una de sus entradas (en vez de un registro) Instrucción suma inmediata addi $s3, $s3, 4 # $s3 = $s3 + 4 Principio de diseño #3: Hacer el caso mas común mas rápido Como los operandos constantes son muy comunes, el permitir su uso en las instrucciones las hace más rápidas que si las constantes fueran cargadas desde memoria
EXTENCION DE SIGNO • Busca que cuando se represente un número usando un número mayor de bits se conserve su valor numérico • En la arquitectura MIPS varias instrucciones involucran extensión de signo: • addi: extiende el valor inmediato • lb, lh: extienden el dato (byte, media palabra) cargado • beq, bne: extienden el desplazamiento • La extensión de signo consiste en replicar el bit de signo hacia la izquierda • Los valores sin signo se extienden con ceros • Ejemplo: extensión de 8 a 16 bits • +2: 0000 0010 => 0000 0000 0000 0010 • –2: 1111 1110 => 1111 1111 1111 1110
CONCEPTO DE PROGRAMA ALMACENADO • Termino usado para referirse al modelo de von Neumann • Las instrucciones se representan como números, y como tales son indistinguibles de los datos • Los programas se almacenan en una memoria modificable (que puede ser escrita y leída) justo como los datos. • Ciclo de búsqueda y ejecución: • Las instrucciones son buscadas y colocadas en un registro especial. • Los bits en el registro controlan las acciones subsecuentes. • Se busca la próxima instrucción y se continua.
REPRESENTACION DE LAS INSTRUCCIONES • Tanto las instrucciones como los datos se representan como cadenas de dígitos binarios. • Cada instrucción está conformada por campos numéricos puestos uno tras otro. • Como los registros son los operandos de casi todas las instrucciones, existe una convención para asociar sus nombres con números.
REPRESENTACION DE LAS INSTRUCCIONES • Representación simbólica de una instrucción (ensamblador) add $t0, $s1, $s2 • Representación decimal campo • Representación binaria (lenguaje de maquina) Formato de instrucción • Las instrucciones MIPS son de 32 bits, al igual que los datos (Principio de diseño #1: la simplicidad favorece la regularidad)
REPRESENTACION DE LAS INSTRUCCIONES campo • ¿Qué pasa si una instrucción requiere campos más grandes que estos? • Instrucción load: dos registros y una constante (offset) • Campo de 5 bits Offset [0..31] Demasiado pequeño para ser útil!!! • Tenemos un conflicto entre el deseo de mantener todas las instrucciones de la misma longitud y el deseo de tener un solo formato de instrucción • Principio de diseño #4: Un buen diseño requiere buenos compromisos • Conservar las instrucciones MIPS de 32 bits • Crear diferentes formatos de instrucción para diferentes categorías de instrucciones
FORMATOS DE INSTRUCCIÓN MIPS Formato R (register) • Operaciones ALU registro-registro: rdrsfunctrt opcode: operación básica de la instrucción rs: primer registro de origen rt: segundo registro de origen rd: registro de destino (resultado de la operación) shamt: cantidad de desplazamiento funct: función (define la variante especifica de la operación descrita en el opcode)
FORMATOS DE INSTRUCCIÓN MIPS Formato I (immediate) • Operaciones con valores inmediatos: rtrsop{constantoraddress} • Instrucciones de transferencia de datos (load/store) opcode: operación básica de la instrucción rs: primer registro de origen rt: registro de destino (resultado de la operación) constantoraddress: constante o dirección de 16 bits (este valor puede ser tratado como un valor con o sin signo, de acuerdo con la instrucción)
FORMATOS DE INSTRUCCIÓN MIPS • Demasiados formatos de instrucción hacen más complejo el HW • La complejidad se puede reducir si los formatos son similares • Estos dos formatos se diferencian por el valor del opcode • De esta forma el HW sabe como tratar la parte restante de la instrucción Formato R Formato I
FORMATOS DE INSTRUCCIÓN MIPS Ejercicio: Si $t1 apunta a la base del vector A y $s2 corresponde a la variable h, compile la siguiente declaración en lenguaje C en instrucciones ensamblador del MIPS. Luego escriba las instrucciones de código de máquina correspondientes a las instrucciones ensamblador A[300] = h+A[300];
FORMATOS DE INSTRUCCIÓN MIPS Solucion: A[300] = h+A[300]; Instrucciones ensamblador MIPS: lw $t0, 1200($t1) # registro $t0 almacena A[300] add $t0, $s2, $t0 # registro $t0 almacena h+A[300] sw$t0, 1200($t1) # almacena h+A[300] en A[300] Instrucciones de código de máquina: Escritas en decimal: Escritas en binario:
OPERACIONES LOGICAS Proporcionan la capacidad de operar sobre campos de bits o bits individuales dentro de una palabra.