1.2. Jerarquía de niveles de un computador ¿Qué es un computador? Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria. Sistema complejo Æ se estudia desde distintos puntos de vista. Su estudio se divide en niveles (puntos de vista) que forman una jerarquía: - en cada nivel se hace una abstracción de los detalles definidos en el nivel inmediatamente inferior. - en cada nivel se estudian solamente los aspectos que interesan en este nivel. 1 Al principio solo había dos niveles totalmente dependientes*1: - hardware: los circuitos digitales y su construcción. - software: los programas de instrucciones (lenguaje máquina). (*1) Esto fue así hasta 1964. IBM desarrolla el sistema 360 (family of business mainframe computers) Introduce el término “arquitectura de computadores” = conjunto de instrucciones y elementos hardware visibles al programador. Construyó 6 realizaciones de la arquitectura que variaban en precio y rendimiento. Máquinas que ejecutaban el mismo software independientemente de su implementación hardware. 2 La jerarquía de niveles de abstracción para el estudio del computador que veremos es Los niveles por debajo del ISA son hardware. Los niveles por encima del ISA son software. 3 Niveles software Evolución del software: - al principio: programar en lenguaje máquina (con 0’s y 1’s), teniendo que cargar en memoria y ejecutar cada programa. - hoy en día: entornos gráficos. Los pasos de esta evolución fueron la aparición de: (1) Lenguaje máquina (2) Lenguaje ensamblador (3) Lenguaje de alto nivel (4) Sistema operativo (5) Aplicaciones 4 (1) Lenguaje máquina El lenguaje que realmente entiende la máquina (sistema digital) está formado por ceros y unos (bits). Ejemplo real (MIPS) de programa en lenguaje máquina: Este conjunto de bits (programa) puede ser cargado en memoria y ejecutado. Como resultado de la ejecución se produce un proceso de datos. 5 Cada línea de este conjunto de bits es una instrucción. Una instrucción es una orden individual al computador para realice una operación determinada. Una instrucción será un número binario almacenado en memoria. Por ejemplo, el número (00000000100011100001100000100001)2 que es la segunda instrucción del programa, indica al computador que sume dos números. El programador de lenguaje máquina, utiliza secuencias de bits para escribir sus programas. 6 (2) Lenguaje ensamblador Programar usando números binarios es muy laborioso. Se inventó notación simbólica (caracteres alfanuméricos) para representar cada instrucción máquina Por ejemplo, la segunda instrucción del programa ejemplo visto se escribiría add $2, $4, $2. Al principio traducción se hacía a mano, pero luego se creó un software traductor: el programa ensamblador. El ensamblador traduce un programa escrito en lenguaje ensamblador a el programa equivalente en lenguaje máquina. 7 Por ejemplo, el programador escribiría su programa en lenguaje ensamblador: muli $2, $5, 4 add $2, $4, $2 lw $16, 4($2) sw $16, 0($2) jr $31 sw $15, 3($3) lw $15, 0($4) y el ensamblador generaría el programa a lenguaje máquina: 8 (3) Lenguaje de alto nivel Expresar resolución de problemas es difícil en lenguaje ensamblador (ya lo comprobarán). Fuerza al programador a pensar como funciona la máquina: movimiento de datos, operaciones aritméticas y lógicas básicas y saltos (cambios de secuencia). Solución: tener un lenguaje de alto nivel (algorítmico) que se traduzca a lenguaje ensamblador. Programa traductor: compilador. 9 10 (4) Sistema operativo Con el desarrollo de la programación surgió la idea de reutilizar programas para tareas rutinarias Æ bibliotecas de subrutinas. Las primeras para entrada/salida de datos: controlar los distintos periféricos impresoras, cintas magnéticas… También surgió la necesidad de un programa independiente que supervisara la ejecución del conjunto de programas de los distintos programadores. Programa supervisor + bibliotecas de subrutinas de entrada/salida = base de un sistema operativo (programa para la gestión de los recursos del computador) (5) Aplicaciones Programas que realizan tratamientos de datos específicos: procesadores de texto, hojas de cálculo, bases de datos,… 11 Jerarquía de niveles para estudiar un computador El modelo de computador que tenemos es: Veamos cada uno de los niveles: 12 (0) Nivel físico Cómo construir diodos, transistores, resistencias condensadores con semiconductores de tipo n y p. y Se aplican las leyes de la física electrónica. Por ejemplo, un transistor se construiría 13 (1) Diseño de circuitos Cómo implementar puertas lógicas y biestables con transistores, diodos, resistencias, y capacitores. Se aplican las leyes de la electricidad: descripción del circuito en términos de corriente, tensión, etc. Por ejemplo la construcción de una puerta NOR sería: 14 (2) Diseño digital (FCI) Definir circuitos combinacionales y secuenciales a partir de puertas lógicas y biestables. Estos circuitos serán los bloques digitales básicos para diseñar un procesador. Las leyes que se aplican son las del Álgebra de Boole. Por ejemplo, multiplexor de 2 entradas de control: 15 (3) Procesador del repertorio de instrucciones Diseño de un sistema digital complejo que ejecuta instrucciones a partir de buses, registros, bloques combinacionales, memorias… El procesador se compone de: - la ruta de datos: flujo de datos y su transformación a través de circuitos combinacionales y elementos de memoria. - la unidad de control: generación sincronizada de señales para controlar la ruta de datos. Veremos las formas de realizar cada uno. 16 Ruta de datos multiciclo de la MIPS (en negro) 17 Control multiciclo de la MIPS 18 (4) Arquitectura del repertorio de instrucciones Es el nivel fundamental que define cómo es un computador. Este nivel está definido por: - el repertorio de instrucciones. - los modos de direccionamiento de los operandos. - los tipos de datos. - los registros del procesador. Es la interface entre el hardware y el software y veremos pautas de diseño de este nivel. También describiremos y utilizaremos (creando programas) este nivel para el procesador MIPS. 19 (5) Sistema operativo Este nivel es el que realiza la gestión de los recursos que ofrecen los niveles inferiores del sistema computador: CPU, memoria… Para obtener un uso fácil, eficiente, compartido y seguro de los mismos: gestión de archivos, procesos, memoria virtual… Proporciona a los usuarios una máquina más manejable. 20 (6) Compilador Permite al programador expresar los programas en un lenguaje cercano a su descripción algorítmica Traduce estos programas escritos en lenguajes de alto nivel a programas especificados en lenguaje máquina 21 (7) Aplicaciones Programas que se ejecutan para realizar funciones útiles al usuario: bases de datos, las hojas de cálculo o los procesadores de texto Son programas escritos en lenguajes de alto nivel Su objetivo es crear un entorno amigable para el usuario del sistema computador 22 ¿Desde que puntos de vista estudiaremos el computador en esta asignatura? (1) Arquitectura del repertorio de instrucciones Estudiaremos: (a) Cómo diseñar este nivel ‘mirando’ (en la jerarquía de niveles) hacia: - arriba: ‘sostener’ los lenguajes de alto nivel - abajo: fácil implementación hardware (Cuestión de compromiso) (b) Descripción de este nivel de una máquina en concreto: la MIPS (c) Además escribirán programas de este nivel para la MIPS 23 (2) Procesador del repertorio de instrucciones y subsistema de entrada y salida Estudiaremos: (a) Cómo diseñar un procesador con circuitos lógicos (sumadores, multiplexores, registros, memoria,…) que ejecute un repertorio de instrucciones determinado (implementación del nivel ISA) (b) Organización de la memoria (c) Gestión de la entrada/salida 24