Estructura de Computadores Introducción Perpectiva Histórica Pasado y Presente Avances Tecnológicos Introducción Primer computador Electrónico University of Pennsylvania ENIAC (Electronic Numerical Integrator and Calculator, 18.000 tubos al vacío). Introducción Ejemplo Tubos Vacío 12AT7 amplificador 9-pin (medium-gain dual triode vacuum tube). Introducción Transistor Tres regiones semiconductoras Introducción Junio 1951, UNIVAC I Primer Computador Comercial en EEUU Introducción En 1952 esta a la venta el primer computador IBM computer (IBM 701), se venden 19 unidades. En 1964 IBM anuncia System/360 Introducción Un año después Digital Equipment Corporation (DEC) PDP-8, el primer micro computador comercial. En 1971 — Intel entrega el primer microprocesador Intel 4004. CPU de 4bits. Contiene 2.300 transistores. Introducción Intel 4004 Introducción 1976 Cray-1, el primer supercomputador comercial. Introducción 1977 personal computer, Apple IIe (Steve Jobs y Steve Wozniak) inicia un estándar en los computadores personales de bajo costo y alto desempeño. 1981 primer computador portátil de la historia, Osborne-1 Memoria era de 64 Kb. Tenía una pantalla monocromática de 25 x 52 caracteres que medía 5 pulgadas. Contaba con dos unidades de disco de 5.25 pulgadas (los discos podían almacenar hasta 91Kb cada uno). Tenía un puerto serial RS-232. Un puerto para módem y un teclado desprendible. Dimensiones eran: 32.5 x 50 x 36.5 cms. Peso de casi 13 kilogramos. 1981 primer computador portátil de la historia, Osborne-1 Introducción The Xerox Alto, inspiración Desktop Introducción Progreso en medio siglo. Introducción En la actualidad Intel (Nehalem) Introducción En la actualidad Intel (Nehalem) Introducción En la actualidad Intel (Nehalem) Introducción En la actualidad AMD Introducción En la actualidad AMD Introducción En la actualidad AMD Introducción En la actualidad UltraSPARC T2 (Niagara 2) Introducción En la actualidad IBM Power 6 Introducción Introducción Placas Madres Introducción Crecimiento de DRAM(Dynamic Random Access Memory) Introducción Reloj y Consumo. Introducción Crecimiento CPU Introducción Arquitectura de Computadores Coordinar diferentes niveles de abstracción con: Cambios tecnológicos De programación. Aplicaciones. Sistemas Operativos. Introducción Arquitectura de Computadores Aplicaciones Compilador Sistema Operativo Assembler Firmware Repertorio de Instrucciones Memoria Sistema Entrada/Salida Camino de Datos y Control Diseño Digital Diseño Circuitos Lógicos Introducción Arquitectura de Computadores Arquitectura del repertorio de Instrucciones. Organización de Máquina. Introducción Arquitectura Instrucciones del repertorio de Vista que poseen los diseñadores de compiladores y sistemas operativos de un computador. Establece los atributos del sistema computacional vistos por el programador. Introducción La elección de la Arquitectura repertorio se refleja en: La organización del almacenamiento. Tipos de Datos. Estructuras de Datos. Codificación y Representaciones. Repertorio de Instrucciones. Formatos de Instrucciones del Introducción La elección de la Arquitectura repertorio se refleja en: Modos del de direccionamiento y formas de acceder a los datos y a las instrucciones. Tratamiento de Excepciones. Introducción El repertorio de instrucciones establece la interfaz software-hardware. Existen variados tipos de arquitecturas de repertorios, las cuales han ido evolucionando en el tiempo: Digital Alpha. HP PA-RISC. Sun Sparc, UltraSPARC. SGI MIPS. Intel. Etc. Introducción Tipos de Repertorios Se clasifican de acuerdo a cómo se especifican los operandos de entrada y salida. Una instrucción requiere especificar: Donde se encuentran los operandos de entrada. La operación a realizar. Dónde se depositará el resultado, La próxima instrucción a realizar. Introducción Tipos de Repertorios Una instrucción es una secuencia de unos y ceros Si el número de bits necesarios es menor o igual a de una palabra de memoria, puede ensamblarse los distintos campos en una celda de memoria. Si el número de bits es mayor, puede emplearse dos o más palabras para especificar una instrucción (tendrá que accesarse en más de una oportunidad a la memoria para procesar la instrucción). Introducción Tipos de Repertorios Suele emplearse una notación simbólica para describir los campos de la instrucción. Se describe cada instrucción en una línea con los campos separados por espacios y pueden incluirse comentarios (lenguaje simbólico de máquina o assembler) Operación op1, op1 ;comentario Introducción Tipos de Repertorios. Ejemplos: Máquinas de Stack add M[tope-1] ⇐ M[tope-1] + M[tope] ; tope--; Suele solo especificar la operación, se asume que los operandos están en posiciones fijas de memoria. Tope pila Memoria Operando 1 Operando 2 … … … Introducción Tipos de Repertorios Ejemplos Máquinas add A add x(A) con acumulador acc ⇐ acc + M[A] acc ⇐ acc + M[A + x] Registro especial acumulador denominado Introducción Tipos de Repertorios Ejemplos Máquinas de Registro-Memoria add opA, opB add opA, opB, opC opA ⇐ opA + opB opA ⇐ opB + opC Los operandos pueden ser direcciones de memoria o registros internos. Introducción Tipos de Repertorios Ejemplos Máquinas de Carga-Almacenamiento add Ra, Rb, Rc load Ra, Rb store Ra, Rb Ra ⇐ Rb + Rc Ra ⇐ M[Rb] M[Rb] ⇐ Ra Las operaciones de solamente entre registros. efectúas Introducción Tipos de Repertorios Las diferentes arquitecturas de repertorios suelen compararse, observando: El número de bytes por instrucción. El número de instrucciones que se requieren para efectuar una acción determinada. El número de ciclos de reloj por instrucción Introducción Tipos de Repertorios Ejemplo, para realizar C = A + B Siendo A, B, C variables en memoria se requieren las siguientes secuencias de instrucciones dependiendo del tipo de repertorio: Máquina Stack: Push A Push B Add Pop C ; tope++,M[tope] = M[A] ; tope++, M[tope] = M[B] ; M[tope-1] += M[tope], tope-; M[C] = M[tope], tope— Introducción Tipos de Repertorios Ejemplo, para realizar C = A + B Máquina con acumulador LoadA ; acc = M[A] Add B ; acc = acc + M[B] Store C ; M[C] = acc Introducción Tipos de Repertorios Ejemplo, para realizar C = A + B Máquina con operandos registro-memoria Load R1, A ; R1 = M[A] Add R1, B ; R1 = R1 + M[B] Store R1, C ; M[C] = R1 Introducción Tipos de Repertorios Ejemplo, para realizar C = A + B Máquina con almacenamiento Load R1, A Load R2, B Add R3, R1, R2 Store R3, C registros ; R1 = M[A] ; R2 = M[B] ; R3 = R1 + R2 ; M[C] = R3 carga- Introducción Instrucciones típicas de un repertorio Son las operaciones que se encuentran en casi todos los repertorios de instrucciones. No todas están presentes en un repertorio determinado. Si no están pueden implementarse con las primitivas existentes. Introducción Instrucciones típicas de un repertorio Movimientos de Datos: Cargar registro desde la memoria. Almacenar registro en la memoria. Movimiento entre celdas de memoria. Movimiento entre registros. Desde registro hacia dispositivo de salida (output). Desde dispositivo de entrada hacia registro (input). Push, pop. Operaciones en stack (pila). Introducción Instrucciones típicas de un repertorio Aritméticas: Suma, resta, multiplicación, división. En binario, con y sin signo. Suma, resta, multiplicación, división. En BCD, con y sin signo. Suma, resta, multiplicación, división. En punto flotante (reales binarios), con y sin signo. Suma, resta, multiplicación, división de precisión extendida. En binario, con y sin signo. Introducción Instrucciones típicas de un repertorio Corrimientos: Aritméticos hacia la izquierda y derecha. Lógicos hacia la izquierda y derecha. Rotaciones hacia la izquierda y derecha. Introducción Instrucciones típicas de un repertorio Control de Secuencia de ejecución: Comparaciones. Saltos condicionales e incondicionales. Bifurcaciones condicionales. Introducción Instrucciones típicas de un repertorio Enlace a Subrutinas: Llamado y retorno de subrutinas. Interrupciones: Seteo del sistema de prioridades, habilitación y deshabilitación de las interrupciones, retorno de interrupciones enmascaradas y no enmascaradas. Sincronización: Test and set. Operación para manejar procesos. Introducción Instrucciones típicas de un repertorio Control del procesador: Halt, manejo de memoria virtual y caché, llamados al sistema, entrada y salida de modo supervisor. String: Traducir, buscar, etc. Gráficas: Operaciones para el manejo gráfico. Introducción Instrucciones típicas de un repertorio Estadística de la frecuencia de uso de instrucciones de un procesador Intel(8086). (Justifica empíricamente los repertorios reducidos de instrucciones (RISC) ). load 22 % bifurcación condicional 20 % compare 16 % store 12 % add 8% and 6% sub 5% movimiento entre registros 4% llamados a subrutinas 1% retornos de subrutinas 1% Introducción Modos de Direccionamiento (no todos están presentes en los diferentes repertorios) Modo Ejemplo Significado Registro Add R4, R3 R4 ⇐ R4 + R3 Inmediato Add R4, #3 R4 ⇐ R4 + 3 Desplazamiento Add R4, 100(R1) R4 ⇐ R4 + M[100 + R1] Registro indirecto Add R4, (R1) R4 ⇐ R4 + M[R1] Indice / Base Add R3, (R1+R2) R3 ⇐ R3 + M[R1 + R2] Directo o absoluto Add R1, (1001) R1⇐ R1 + M[1001] Introducción Modos de Direccionamiento (no todos están presentes en los diferentes repertorios) Modo Ejemplo Significado Memoria indirecto Add R1, @(R3) R1 ⇐ R1+ M[M[R3]] Auto-incremento Add R1, (R2)+ R1⇐ R1 + M[R2]; R2 ⇐ R2 +d Auto-decremento Add R1, –(R2) R2 ⇐ R2 – d; R1 ⇐ R1+ M[R2] Escalado Add R1, 100(R2)[R3] R1⇐R1+ M[100+R2+R3*d] Introducción Uso de Registros. Todas las máquinas modernas usan múltiples registros. Los registros son más rápidos que la memoria principal y que la memoria cache. Permiten mantener variables de uso frecuente, rápidamente accesibles reduciendo los accesos a memoria Introducción Uso de Registros. En el lenguaje C existe la posibilidad de indicar al compilador cuales variables deben ser almacenadas en registros ( se agrega la palabra register a variable). Se requiere menos bits para especificar registros de direcciones de memoria. Debido a técnicas de segmentación suelen emplearse repertorios tipo cargaalmacenamiento. Introducción Estadística de uso direccionamiento. de modos A de través de mediciones, en máquinas que tienen todos los modos de direccionamiento, y con diversos programas, se llegó a que: 42% de los modos usados son con offset. 33% inmediatos. 13% son con registro indirecto. 12% de otros modos. Introducción Organización de Máquina Describe la forma en que están organizados: Flujos de datos. La estructura del control. La ejecución de microinstrucciones. Diseño lógico. Implementación física. Introducción Organización de Máquina Desde un punto de vista del diseñador lógico, interesan: Las capacidades y comportamiento característico de las principales unidades funcionales. (Registros, ALU, Shifters, Unidad de control ...) Las formas en que esas componentes están interconectadas. Los flujos de información entre las componentes. Introducción Organización de Máquina Desde un punto de vista del diseñador lógico, interesan: Medios lógicos por los cuales se controlan los flujos de datos. Cómo las unidades funcionales (o recursos) realizan el repertorio de instrucciones. Lenguaje de transferencia entre registros. Introducción Organización de Máquina Todos los computadores consisten de 5 partes: Procesador: Camino de datos. Control. Memoria Dispositivo de entrada Dispositivo de salida Introducción Niveles de Representación Lenguaje C Assembler MIPS Lenguaje Máquina Introducción Niveles de Representación Programación Lenguaje C Diseñado considerando que sus elementos pudieran se eficientemente traducidos a assembler. Se verá como se desglosa cada instrucción de C mediante una o varias instrucciones de un determinado assembler. Introducción Niveles de Representación Programación Assembler. Representación simbólica de la codificación binaria de las instrucciones o lenguaje de máquina El procesador decodifica los campos binarios y ejecuta la secuencia de transferencias que realizan las acciones que interpretan la instrucción Introducción Programa de alto nivel (en C) swap (int v[], int k) (int temp; temp = v[k]; v[k] = v[k+1]; v[k+1] = temp; ) Programa en assembler (para MIPS) swap: sll $2, $5, 2 add $2, $4,$2 lw $15, 0($2) lw $16, 4($2) sw $16, 0($2) sw $15, 4($2) jr $31 Código Máquina (object code) (para MIPS) 000000 00000 00101 0001000010000000 000000 00100 00010 0001000000100000