ELO311 Estructuras de Computadores Digitales Introducción Tomás Arredondo Vidal Objetivos del Curso Introducción a los componentes principales de un sistema de computación, como funcionan en conjunto para ejecutar un programa y como se diseñan. Aprender los elementos que determinan las capacidades de sistemas computacionales. Entender la interacción entre la arquitectura, el hardware y el software de una computadora. Para que como arquitectos y diseñadores de software y hardware (compiladores, sistemas operativos, bases de datos, sistemas embebidos, procesadores, ...) podamos entender los efectos de diferentes diseños en su capacidad y desempeño. Conocimientos Previos Escribir, compilar y correr programas en un lenguaje como C, C++ o Java. Como representar y operar en números positivos y negativos binarios. Diseño y análisis de componentes combinacionales y secuenciales (álgebra Booleana, minimización lógica, decodificadores, multiplexores, latches y flipflops, registros, maquinas de estados finitos Mealy/Moore, asignación de estados y minimización etc.). Hardware: Algunas Definiciones MSI: Medium Scale Integration, tipo de integración de chip capaz de albergar entre 10 y 500 transistores. LSI: Large Scale Integration, tipo de integración de chip capaz de albergar entre 1.000 y 10.000 transistores. ULSI: Ultra Large Scale Integration, tipo de integración de chip capaz de albergar sobre 10.000 circuitos. VLSI: Very Large Scale Integration, tipo de integración de chip capaz de albergar sobre 100.000 transistores. Hoy en día prácticamente solo se utiliza el término VLSI. Hardware: Algunas Definiciones II Die Size: Corresponde al largo y ancho del circuito en la oblea de silicio que contiene muchos circuitos integrados. ASIC: Application Specific Integrated Circuit, circuito diseñado para una aplicación específica en oposición a los circuitos de propósito general como los microprocesadores. Síntesis lógica: el procesos por el cual las descripciones algorítmicas de circuitos son convertidas en un diseño de hardware. Ejemplos de este proceso incluyen la síntesis de Lenguajes de Descripción de Hardware (HDL) tales como VHDL y Verilog. El resultado de un proceso de síntesis puede ser un PAL, un FPGA o un ASIC. Compilador de silicio (silicon compiler): un software que a partir de una especificación del usuario genera un circuito integrado. Die die wafer El Primer Computador Programable (Mecánico) The Babbage Difference Engine (1832) 25,000 parts cost: £17,470 Tubos al Vacío Ejemplo 12AT7 amplificador 9-pin (medium-gain dual triode vacuum tube). ENIAC – El Primer Computador Electrónico (1946) Maquina general programable (general purpose) y por ende Turing complete (emulable por una maquina de Turing) de la University of Pennsylvania. ENIAC (Electronic Numerical Integrator and Calculator, 18.000 tubos al vacío). Primer Computador Comercial en EEUU Junio 1951, UNIVAC I de la Remington Rand Corp fue disenada pro J. Prespert Eckert y John Mauchly (los inventores de la ENIAC). Primer Transistor (point contact transistor) Bardeem, Brattain, Shockley (Bell Labs, 1948) BJT: tres regiones semiconductoras Suma de corrientes: IE = IB + IC BJTs empaquetados Primer Computador de Transistores En 1953 se desarrollo en University of Manchester el primer computador con transistores. Tambor de almacenamiento magnético Usaba un tambor como almacenamiento de 64 palabras, requería de media revolución (30ms/rev) para acceder a cada palabra de 44 bits. Usaba un acumulador y tenia 200 point contact transistors y 1300 diodos y consumía 150 watts. http://www.computer50.org/kgill/transistor/trans.html Primer Microprocesador – Intel 4004 Primer CPU Comercial Introducido en 1971 con 2300 transistores @ 1 MHz Ancho de sus circuitos de 10 micrones (1 pelo humano = 100 micrones) Wafers de 3” diametro, 5 capas Busicom calculator http://www.intel.com/museum/archives/4004.htm Primer Supercomputador En 1976 se introdujo el Cray-1, usando CPUs vectoriales @ 80Mhz, datapath de 64bits, 8MB RAM, usaba alrededor de 200000 compuertas para obtener 136-250megaflops. Primer Computador Personal Masivo En 1977 se introduce la Apple II (Steve Jobs y Steve Wozniak) inicia un estándar en los computadores personales de bajo costo y alto desempeño. Procesador MOS 6502 (4000 transistores), 64KB máximo RAM, pantalla de 24x40 pixeles. MOS 6502 en paquete DIP-40 IBM Personal Computer (PC) Introducida como lo 5150 PC en 1981 bajo la direccion de Don Estridge de la Entry Systems Division de IBM Intel 8088 @ 4.77Mhz, 256KB de RAM, 5¼” floppy de 160KB (SSDD) o 360KB (DSDD), PC-DOS 1.0 o CP/M-86 Intel 8088: 8 bit data bus, 16 bit registers, bus direcciones 1MB (220 bits = 1048576 ), 29000 transistores Usaba segmentos de 64KB Primer Portatil 1981 primer computador portátil, Osborne-1 CPU: Zilog Z80 @ 4Mhz, RAM 64 KB, CP/M 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. Pentium 4 Introducido el 2000 tiene 43 millones de transistores y un core Intel Nehalem CPU Intel actual con 731 millones de transistores y cuatro cores (núcleos) AMD Quad-Core Opteron Processors SUN UltraSPARC T2 (Niagara 2) IBM Power 6 Comparación de CPUs Organización de la Máquina Capacidades y características de las principales unidades funcionales (FUs) e.g., registros, ALU, multiplexores, memorias, ... Como se interconectan esas unidades e.g., buses Lógica y las maneras en el cual el flujo de información entre las unidades funcionales se controla La arquitectura de instrucciones o Instruction Set Architecture (ISA) Descripción de la máquina a nivel registros o Register Transfer Level (RTL) machine description Placa Madre de una PC Pentium4 Placa Madre de la Sun SPARCstation20 CPU es un TI SuperSPARCtm TMS390Z50 CPU RISC (Reduced Instruction Set Computing) @ 33Mhz MBus Module SuperSPARC Floating-point Unit L2 $ Integer Unit Inst Cache Ref MMU Data Cache CC MBus L64852 MBus control M-S Adapter SBus Store Buffer Bus Interface DRAM Controller SBus DMA SBus Cards SCSI Ethernet STDIO serial kbd mouse audio RTC Boot PROM Floppy Impactos de los Avances en Tecnología Procesador capacidad lógica: incrementa 30% por año performance: 2x cada 1.5 años Frecuencia Reloj = 1 / Periodo 500 MHz Frecuencia = 2 nsec Periodo 1 GHz Frecuencia = 1 nsec Periodo 4 GHz Frecuencia = 250 psec Periodo ...etc... Memoria capacidad DRAM: velocidad de memoria: costo por bit: 2x cada 2 años 1.5x cada 10 años baja aprox. 25% cada año Disco capacidad: incrementa aprox. 60% cada año Ley de Moore En 1965, Gordon Moore, co-fundador de Intel observó que el número de transistores en un chip se duplicaba cada 18 a 24 meses. A partir de esta observación predijo que la tecnología de semiconductores duplicaría su efectividad cada 18 meses. Ley de Moore: DRAM Ley de Moore: Reloj y Consumo Ley de Moore: Tamaño Ley de Moore: Velocidad de la CPU Performance (SPEC Int) 10000 Intel Pentium 4/3000 DEC Alpha 21264A/667 DEC Alpha 21264/600 Intel Xeon/2000 1000 DEC Alpha 4/266 100 DEC AXP/500 DEC Alpha 5/500 DEC Alpha 5/300 IBM POWER 100 HP 9000/750 10 SUN-4/260 IBM RS6000 MIPS M2000 MIPS M/120 1 1987 1989 1991 1993 1995 Year 1997 1999 2001 2003 Ley de Moore: Velocidad de la CPU Turing Machine: Modelo de una Computadora En 1936 Alan Turing presento un modelo abstracto para una maquina de computación llamada Turing Machine. La Máquina de Turing a pesar de ser muy simple es capaz de ejecutar (o simular) cualquier algoritmo computacional. Una maquina que puede ejecutar los programas de cualquier maquina de Turing se llama Universal Turing Machine (o UTM). Estudiando sus propiedades se pueden entender muchos conceptos sobre la informática y la complejidad. La Máquina de Turing consiste de: una cinta con celdas (cells) en la cual se escriben símbolos que la maquina puede leer y escribir uno a la vez una cabeza (tape head) que puede leer o escribir símbolos y puede moverse una celda a la vez a la izquierda o derecha un registro con el estado (símbolo) mas reciente que fue leído una tabla de acciones o transiciones (i.e. tabla de estados) inicialmente parte en el start state y apunta al start cell Alan Turing Turing Machine: Modelo de una Computadora Las operaciones están completamente determinadas por un conjunto de instrucciones (una maquina de estados) como: “en el estado 42, si se lee un 0, escribir un 1; si se lee un 1, moverse a la izquierda y cambiar al estado 17” En el paper original de Turing: “On computable numbers, with an application to the Entscheidungsproblem (problema de decisión)”, Turing se imagina no una maquina mecánica o eléctrica si no una persona (“computador”) que ejecuta estas tareas manualmente. Turing Machine: Modelo de una Computadora Una computadora se llama Turing complete si es que puede calcular cualquier función que una Máquina de Turing puede calcular. Estas son las acciones de la Maquina (parecido al esquema Mealy) Leer el símbolo en la celda actual Buscar la regla asociada al estado actual y símbolo leído Escribir un nuevo símbolo en la celda actual Mover la cabeza de lectura a la izquierda o la derecha dependiendo del estado actual y símbolo leído Cambiar el estado actual X:# / << Le El formato de las transiciones es: símbolo leído : símbolo escrito / dirección #:# / << Ejemplo: Conversor de unario a binario Alfabeto: 0, 1, A, X, # Parte en el estado amarillo #:1 / >> X:X / << / << X:X / >> 0:0 / >> 1:1 / >> Convierte el numero de A’s (6) a su representación binaria (110) correspondiente http://www.cs.princeton.edu/introcs/74turing/ Rf Li 0:1 / >> 1:0 / << Componentes de una Computadora Processor Control Datapath Devices Memory Input Output Dispositivo de Input Lee el Código Objeto 000000 000000 100011 100011 101011 101011 000000 Processor Control Datapath Devices Memory Input Output 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 Código Objeto se Almacena en Memoria Memory Processor Control Datapath 000000 000000 100011 100011 101011 101011 000000 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 Devices Input Output Procesador Lee (Fetches) una Instrucción Procesador lee una instrucción de la memoria Memory Processor Control Datapath 000000 000000 100011 100011 101011 101011 000000 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 Devices Input Output Control Decodifica la Instruccion Control decodifica la instrucción para ver que hacer con ese comando y datos Processor Devices Control 000000 00100 00010 0001000000100000 Memory Input Datapath Output Camino de Datos Ejecuta la Instrucción Camino de datos (datapath) ejecuta la instrucción siguiendo las direcciones de control Processor Devices Control 000000 00100 00010 0001000000100000 Memory Input Datapath contents Reg #4 ADD contents Reg #2 results put in Reg #2 Output Organizacion del Procesador Control tiene que tener la Habilidad de traer instrucciones de la memoria Lógica para controlar la secuenciación de instrucciones Lógica para generar señales que controlan el flujo de información entre los componentes del camino de datos Lógica para controlar las operaciones hechas por las unidades funcionales del camino de datos Camino de datos (Datapath) tiene que tener Componentes – unidades funcionales (e.g., sumador) y almacenamiento (e.g., registros) – necesarios para ejecutar instrucciones Componentes interconectados para que las instrucciones puedan ser completadas Capacidad de cargar y almacenar datos de la memoria Como es el ciclo completo? Memory Processor Control Datapath 000000 000000 100011 100011 101011 101011 000000 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 Devices Input Output Como es el ciclo completo? Memory Processor Control Datapath 000000 000000 100011 100011 101011 101011 000000 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 Devices Input Output Leer Exec Decode Datos de Output se Almacenan en Memoria Al terminar el programa los datos de output están en la memoria Processor Memory Control Datapath Devices Input 00000100010100000000000000000000 00000000010011110000000000000100 00000011111000000000000000001000 Output Dispositivo de Output Saca Datos Processor Control Datapath Devices Memory Input Output 00000100010100000000000000000000 00000000010011110000000000000100 00000011111000000000000000001000 Arquitectura del Set de Instructciones (ISA) software instruction set architecture hardware La descripción del interfaz que separa el software y el hardware. MIPS R3000 Instruction Set Architecture El MIPS ISA se usa mucho en sistemas embebidos (e.g. routers Cisco, Sony Playstation), ~1/3 de los procesadores RISC usan MIPS Registers R0 - R31 Categorías de Instrucciones Load/Store Computacional Jump and Branch Floating Point (Punto Flotante), CoProc. Manejo de Memoria Especial PC HI LO 3 Formatos de Instrucciones: todos son de 32 bits ancho (hay un MIPS64) OP rs rt OP rs rt OP rd sa immediate jump target funct Compiladores y Ensambladores de Programas Programas 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 assembly (para MIPS) swap: sll add lw lw sw sw jr C compiler $2, $5, 2 $2, $4,$2 $15, 0($2) $16, 4($2) $16, 0($2) $15, 4($2) $31 Código Maquina (object code) (para MIPS) 000000 00000 00101 0001000010000000 000000 00100 00010 0001000000100000 . . . assembler spim Assembler / Simulador y compilador lcc spim es un assembler y simulador para MIPS R2000/R3000 Provee un assembler, depurador y un grupo de servicios del sistema operativo Incluye un interfaz simple tipo terminal y otro grafico xspim en UNIX PCSpim en Windows lcc es un compilador cruzado para generar código assembler MIPS Compiladores y Ensambladores de Programas Programas de alto nivel (en C) swap (int v[], int k) . . . C compiler Programa en assembly (para MIPS) swap: uno a muchos sll add lw lw sw sw jr $2, $5, 2 $2, $4, $2 $15, 0($2) $16, 4($2) $16, 0($2) $15, 4($2) $31 uno a uno Código Maquina (object code) (para MIPS) 000000 000000 100011 100011 101011 101011 000000 00000 00100 00010 00010 00010 00010 11111 00101 00010 01111 10000 10000 01111 00000 0001000010000000 0001000000100000 0000000000000000 0000000000000100 0000000000000000 0000000000000100 0000000000001000 assembler Como se relacionan las diferentes piezas? Aplicación Sistema Operativo Compilador Firmware Instruction Set Sistema Procesador de Sistema de Architecture Memoria Set de Instrucciones I/O Datapath y Control Diseño Digital Diseño de Circuitos Coordinación de muchas capas de abstracción Con elementos que cambian rápidamente Requiere de diseño, medición y evaluación Referencias David Patterson, John Hennessy, "Computer Organization & Design", (segunda – cuarta edicion), Morgan Kaufmann, CA. 2009 Material del curso CSE331 de Mary Jane Irving de Penn State www.wikipedia.org www.cs.princeton.edu/introcs/74turing/ Material del curso ELO311 del Prof. Leopoldo Silva Material del curso ELO311 del Prof. Rudy Malonnek