Manipulación de Datos La unidad central de procesamiento (CPU). Codificación y almacenamiento de programas. Lenguaje de máquina. Ejecución de programas. Máquina ideal. 75.40 Algoritmos y programación I Curso Prof. Servetto 1 La unidad central de procesamiento (CPU) • La CPU consiste de tres partes: • La unidad aritmético-lógica (UAL), que realiza operaciones con datos. • La unidad de control (UC), que contiene circuitos para coordinar las actividades de la máquina. • La unidad de registros, que contiene celdas de almacenamiento de datos (similares a las de la memoria principal), llamadas registros, que se usan para almacenar temporalmente información dentro de la CPU. Algunos registros son de propósito general, mientras que otros son de propósito especial. Los de propósito general sirven para almacenar temporalmente los datos de entrada y los resultados para operaciones de la UAL. 75.40 Algoritmos y programación I Curso Prof. Servetto 2 La unidad central de procesamiento (CPU) • Para realizar una operación con datos almacenados en la memoria principal, la UC debe transferirlos desde celdas de la memoria a registros de propósito general, informar a la UAL cuáles registros contienen los datos de entrada y cuál recibirá el resultado, y activar la circuitería adecuada dentro de ella para que realice la operación. • Para la transferencia de patrones de bits entre celdas de la memoria principal y registros de la CPU, éstas están conectadas mediante una colección de cables llamada bus, a través del cual la CPU extrae (lee) datos proveyendo la dirección de una celda y la señal de lectura, y almacena (escribe) datos proveyendo tanto un dato como la dirección de una celda y la señal de escritura. 75.40 Algoritmos y programación I Curso Prof. Servetto 3 CPU Memoria Principal Bus Registros 75.40 Algoritmos y programación I Curso Prof. Servetto 4 La unidad central de procesamiento (CPU) Ejemplo La suma de dos valores almacenados en la memoria principal requiere mucho más que la mera ejecución de la operación de suma: los valores deben transferirse desde la memoria principal a registros de la CPU, sumarse ubicando el resultado en un registro, y luego transferirse el resultado a una celda de memoria. 75.40 Algoritmos y programación I Pasos del proceso 1. Tomar uno de los valores a sumar de la memoria y ubicarlo en un registro. 2. Tomar el otro valor a sumar de la memoria y ubicarlo en otro registro. 3. Activar el circuito de suma con los registros usados en 1 y 2 y designar otro registro para mantener el resultado. 4. Almacenar el resultado en memoria. Curso Prof. Servetto 5 Memoria Caché • Los registros se usan para mantener datos inmediatamente requeridos por un programa para ordenar una operación; la memoria principal se usa para mantener datos que un programa requerirá en un futuro cercano; la memoria secundaria se usa para mantener datos que un programa probablemente no requiera en un futuro cercano. • La memoria caché es una porción de memoria de alta velocidad (varios cientos de KB) localizada dentro de la CPU donde ésta intenta mantener copia de una parte de la memoria principal de interés actual. • La transferencia de datos que normalmente debe hacerse entre registros y la memoria principal se hace entre registros y la memoria caché, y los cambios realizados en la memoria caché se transfieren colectivamente a la memoria principal en momentos más oportunos. De esta forma la CPU ejecuta sus operaciones más rápidamente, ya que no debe demorarse en la comunicación con la memoria principal. 75.40 Algoritmos y programación I Curso Prof. Servetto 6 Codificación y almacenamiento de programas • En las primeras computadoras, los datos se almacenaban en la memoria principal y los pasos que cada dispositivo de la CPU debía ejecutar debían ir indicándose en un tablero de clavijas. • La unidad de control de las computadoras actuales está diseñada para extraer programas codificados en patrones de bits de la memoria principal, decodificar las instrucciones, y ejecutarlas. • El programa que una máquina ejecute puede cambiarse tan sólo cambiando el contenido de la memoria principal. • La colección de instrucciones que comprende el sistema de codificación se denomina lenguaje de máquina. Una instrucción expresada en este lenguaje se llama instrucción de máquina. 75.40 Algoritmos y programación I Curso Prof. Servetto 7 Lenguaje de Máquina Repertorio de instrucciones. Instrucciones aritmético-lógicas. Comunicación con otros dispositivos. 75.40 Algoritmos y programación I Curso Prof. Servetto 8 Repertorio de instrucciones • La lista de instrucciones de máquina que una CPU puede decodificar y ejecutar es bastante corta: con muy pocas tareas elementales se puede conseguir toda la capacidad teórica de una computadora. Se puede agregar instrucciones para abreviar tareas complejas, pero que no incrementan las capacidades fundamentales de la máquina. • Hay dos filosofías de diseño de CPU: las diseñadas con un conjunto mínimo de instrucciones originan las RISC (reduced instruction set computers –computadoras con conjunto reducido de instrucciones), y las que incluyen un gran número de instrucciones complejas, dan nombre a las CISC (complex instruction set computers –computadoras con conjunto complejo de instrucciones). 75.40 Algoritmos y programación I Curso Prof. Servetto 9 Repertorio de instrucciones Arquitecturas RISC Arquitecturas CISC • Son eficientes (bajo consumo), rápidas y menos costosas de producir. • Las CISC lidian mejor con las crecientes complejidades del software actual, pero aunque sus costos de producción se han ido reduciendo con el tiempo, consumen mucha energía eléctrica. • Ejemplos de esta arquitectura son los procesadores PowerPC, desarrollados por una alianza entre Apple, IBM y Motorola, y usados en la Apple Macintosh; la compañía Advanced Risc Machine (ARM) diseñó una arquitectura RISC en la que se basan procesadores (producidos por Qualcomm y Texas Instrument) que se encuentran en controladores de juegos, televisores digitales, sistemas de navegación, computadoras de automóviles, teléfonos celulares e inteligentes, etc. 75.40 Algoritmos y programación I • Un ejemplo de arquitectura CISC son los procesadores Intel, o sus equivalentes de AMD (Advanced Micro Devices, Inc.), que se encuentran en casi todas las computadoras de escritorio y laptop (Apple está desarrollando actualmente computadoras basadas en productos Intel). Curso Prof. Servetto 10 Repertorio de instrucciones • Independientemente de la arquitectura del procesador, las instrucciones de máquina se pueden categorizar en tres grupos: • De transferencia de datos: implican mover datos de un lugar a otro mediante un proceso de copia o clonación de patrones. El pedido de llenar un registro de propósito general con el contenido de una celda de memoria se denomina “cargar” (load), y el inverso, “almacenar” (store). En este grupo se distinguen también los comandos de comunicación con periféricos, llamados instrucciones de entrada/salida (I/O –input/output). • Aritmético-lógicas: implican pedir a la UC que requiera a la UAL operaciones aritméticas básicas u operaciones booleanas con los contenidos de dos registros, o el corrimiento (shift) o rotación (rotate) del contenido de un registro. • De control: dirigen la ejecución de un programa en vez de manipular datos, indicando saltos (jumps) condicionales o incondicionales a una instrucción distinta de la siguiente del programa. 75.40 Algoritmos y programación I Curso Prof. Servetto 11 Instrucciones aritmético-lógicas Operaciones lógicas • Combinan dos cadenas de bits para producir otra cadena como resultado, todas del tamaño de registros de propósito general. • Generalmente se utilizan para aislar o alterar parte de la cadena de bits contenida en un registro, configurando un patrón en otro registro denominado máscara. Por ejemplo: • Para conocer o cambiar el signo de un número en complemento a 2 • Para conocer o cambiar el signo de un número en punto flotante • Para aislar el exponente en exceso o la mantisa de un número en punto flotante 75.40 Algoritmos y programación I Curso Prof. Servetto 12 Instrucciones aritmético-lógicas Operaciones lógicas - Ejemplos • Conocer el signo de un número en complemento a 2 de 8 bits: bbbbbbbb AND 10000000 b0000000 00001010 (10) 10000000 00000000 (0 +) 11110110 (-10) 10000000 10000000 (128 -) • Cambiar el signo de un número en complemento a 2 de 8 bits: 1. Se invierten los bits de la cadena 2. Se suma 1 a la cadena invertida 00001010 (10) XOR 11111111 11110101 (-11) + 00000001 ( 1) 11110110 (-10) 75.40 Algoritmos y programación I 11110110 (-10) 11111111 00001001 ( 9) 00000001 ( 1) 00001010 (10) Curso Prof. Servetto 13 Instrucciones aritmético-lógicas Operaciones lógicas - Ejemplos • Conocer el signo de un número en punto flotante de 8 bits: bbbbbbbb AND 10000000 b0000000 01101010 (2.5) 10000000 00000000 (0 +) 11101010 (-2.5) 10000000 10000000 (128 -) • Cambiar el signo de un número en punto flotante de 8 bits: 01101010 ( 2.5) XOR 10000000 11101010 (-2.5) 75.40 Algoritmos y programación I 11101010 (-2.5) 10000000 00001001 ( 2.5) Curso Prof. Servetto 14 Instrucciones aritmético-lógicas Operaciones lógicas - Ejemplos • Aislar el exponente en exceso de 4 de un número en punto flotante de 8 bits: bbbbbbbb AND 01110000 0bbb0000 01101010 (2.5) 10000000 01100000 • Aislar la mantisa de un número en punto flotante de 8 bits: bbbbbbbb AND 00001111 0000bbbb 75.40 Algoritmos y programación I 01101010 ( 2.5) 00001111 00001010 Curso Prof. Servetto 15 Instrucciones aritmético-lógicas Operaciones de rotación y corrimiento de bits • Mueven bits dentro de un registro de propósito general y se clasifican según él sentido del movimiento (derecha o izquierda) y según el proceso sea circular (rotación) o no (corrimiento). • Generalmente se utilizan para alinear patrones o para efectuar multiplicaciones o divisiones de números en complemento a 2 por potencias de 2. Por ejemplo: • Para justificar a derecha exponentes en exceso de números en punto flotante • Para alinear una mantisa de un número en punto flotante según su exponente • Para multiplicar o dividir un número en complemento a 2 por una potencia de 2 • Las operaciones de corrimiento a derecha pueden ser lógicas, si introducen ceros a izquierda, o aritméticas (para números en complemento a 2), si introducen bits iguales al del signo a izquierda. 75.40 Algoritmos y programación I Curso Prof. Servetto 16 Instrucciones aritmético-lógicas Ejemplo de rotación del patrón 65 (hexadecimal) un bit a la derecha Patrón de bits original (65)16 Los bits se mueven una posición a la derecha. El bit menos significativo se cae del extremo derecho y se ubica en el hueco que queda en el extremo opuesto. Patrón de bits final (B2)16 75.40 Algoritmos y programación I Curso Prof. Servetto 17 Instrucciones aritmético-lógicas Operaciones de rotación y corrimiento de bits - Ejemplos • Para justificar a derecha exponentes en exceso de números en punto flotante de 8 bits, el patrón 0bbb0000 (previamente aislado) se rota o corre a derecha 4 bits con igual resultado: 00000bbb • Para multiplicar un número en complemento a 2 de 8 bits por una potencia de 2, se corre a izquierda el patrón tantos bits cuantos indique el exponente de la potencia: 00000111 1010 = 00011100 (7 4 = 28) 11111001 1010 = 11100100 (-7 4 = -28) • Para dividir un número en complemento a 2 de 8 bits por una potencia de 2, se corre aritméticamente a derecha el patrón tantos bits cuantos indique el exponente de la potencia: 00010100 / 1010 = 00000101 (20 / 4 = 5) 11101100 / 1010 = 11111011 (-20 / 4 = -5) 11111001 / 101 = 11111100 (-7 / 2 = -3 ) es división entera 75.40 Algoritmos y programación I Curso Prof. Servetto 18 Instrucciones aritmético-lógicas Operaciones aritméticas • Los procesadores con arquitectura RISC suelen incluir sólo a la suma, ya que la resta se resuelve cambiando el signo del sustraendo y luego sumando, la multiplicación se resuelve con sumas sucesivas, y la división con restas; los procesadores CISC suelen incluir suma, resta, multiplicación y división. • Como las representaciones de los números varían según sean en complemento a 2 o en punto flotante, los procesadores incluyen operaciones aritméticas específicas para cada representación. 75.40 Algoritmos y programación I Curso Prof. Servetto 19 Comunicación con otros dispositivos Controladores • La comunicación con otros dispositivos normalmente se maneja por intermedio de otros aparatos denominados controladores, que suelen ser placas de circuitos que se insertan en ranuras en la placa madre (motherboard) y que se conectan vía cables al dispositivo periférico dentro de la computadora o a un conector externo llamado puerto. • Los controladores suelen ser computadoras en sí, que se llaman “dedicadas” o “esclavas”, con sus memorias principales y unidades centrales de procesamiento, que ejecutan programas para dirigir las actividades del dispositivo que controlan. 75.40 Algoritmos y programación I Curso Prof. Servetto 20 Comunicación con otros dispositivos Conexión de controladores con la computadora Los controladores se comunican con la CPU de la computadora mediante conexiones al bus que conecta a la CPU con la memoria principal. La CPU se comunica con los controladores conectados al bus de la misma manera que se comunica con la memoria principal, con instrucciones equivalentes a las de “cargar” y “almacenar”. En las máquinas RISC, cada controlador responde a referencias a un único conjunto de direcciones reservadas para sí, en un mecanismo que se denomina entrada/salida mapeada en memoria y que emplea las mismas instrucciones para cargar y escribir registros desde o en celdas de memoria. Las máquinas CISC incluyen instrucciones específicas de entrada/salida. 75.40 Algoritmos y programación I Entrada/salida mapeada en memoria: Curso Prof. Servetto 21 Comunicación con otros dispositivos Interfaces • Actualmente existen estándares como el universal serial bus (USB) y el FireWire, para los cuales un solo controlador puede manejar diversos dispositivos compatibles con estas interfaces. Por ejemplo ratones, teclados, impresoras, escáneres, dispositivos portables de almacenamiento masivo, cámaras digitales y teléfonos inteligentes suelen ser compatibles con puertos USB, y grabadoras de video y dispositivos de almacenamiento masivo en línea suelen ser compatibles con puertos FireWire (soportan tasas de transferencia más rápidas). • Hay controladores que además de comunicarse con la CPU pueden comunicarse con la memoria principal directamente cuando la CPU no usa el bus (durante nanosegundos), y que se conocen como de acceso directo a memoria o DMA (por direct memory access); por ejemplo, los controladores de sistemas de almacenamiento magnético pueden tomar el contenido a escribir en un sector directamente de la memoria principal o depositar en ella el contenido de la lectura de un sector. 75.40 Algoritmos y programación I Curso Prof. Servetto 22 Comunicación con otros dispositivos Sincronización • La transferencia de datos entre la computadora y los dispositivos periféricos, aún aquellos que son sólo de entrada o sólo de salida, es en realidad bidireccional, para intercambiar información sobre el estado del dispositivo y coordinar sus actividades. Este diálogo bidireccional se conoce como saludo (handshaking). • El saludo a menudo involucra una palabra de estado (status word), que es un patrón de bits generado por el dispositivo periférico para reflejar su estado. Por ejemplo, en el caso de una impresora, la palabra de estado puede reservar bits específicos para indicar si la impresora está en línea, si no tiene papel, si tiene papel atascado y si está lista para recibir datos. 75.40 Algoritmos y programación I Curso Prof. Servetto 23 Comunicación con otros dispositivos Formas de comunicación • La transferencia de datos entre dispositivos de una computadora puede realizarse sobre dos tipos de vías: paralelas y seriales. • En la comunicación paralela se transfieren varias señales al mismo tiempo, cada una en una línea separada; por ejemplo, el bus interno, que transfiere simultáneamente direcciones, datos y señales de control. • La comunicación serial se basa en la transferencia de señales una después de otra sobre una línea simple; por ejemplo, USB y FireWire ofrecen transferencia de datos a alta velocidad en distancias cortas, y para distancias un poco más largas se usan conexiones Ethernet, bien por alambre o por ondas de radio. Para comunicaciones rápidas de larga distancia se emplean líneas telefónicas con un servicio conocido como DSL (digital suscriber line), que utiliza frecuencias sobre el rango audible para transmitir datos digitalizados y deja el espectro de baja frecuencia para la comunicación por voz, también la infraestructura de televisión por cable con cablemódem, o enlaces satelitales vía transmisión de radio de alta frecuencia. 75.40 Algoritmos y programación I Curso Prof. Servetto 24 Comunicación con otros dispositivos Formas de comunicación • Las comunicaciones seriales de larga distancia emplean una técnica de multiplexación, que codifica los datos de manera que una vía simple de comunicación sirve como si fuera una vía múltiple: los modem (acrónimo de modulador-demodulador) convierten patrones de bits en tonos que transmiten serialmente. • La velocidad de transferencia de datos entre componentes de una computadora se mide en bits por segundo (bps). USB y FireWire proveen tasas de transferencia de varios cientos de Mbps, lo cual es suficiente para la mayoría de las aplicaciones de multimedia. Los enlaces DSL, por cable o satelitales ofrecen velocidades del orden de los 54 Mbps. 75.40 Algoritmos y programación I Curso Prof. Servetto 25 Ejecución de Programas Registros de propósito especial. Ciclo de máquina. 75.40 Algoritmos y programación I Curso Prof. Servetto 26 Registros de propósito especial • Para que una computadora pueda seguir un programa almacenado en su memoria, la CPU necesita cargar instrucciones, decodificarlas y obedecerlas. El orden en que la CPU carga las instrucciones es el mismo en el que están almacenadas en la memoria, a menos que el mismo se vea alterado por una instrucción de salto. • Para almacenar instrucciones, la CPU tiene un registro de propósito especial llamado registro de instrucción, y para seguir el orden en que ejecuta las instrucciones, otro llamado contador de programa, que contiene la dirección de la próxima instrucción a ejecutarse. 75.40 Algoritmos y programación I Curso Prof. Servetto 27 Ciclo de máquina La CPU realiza su trabajo repitiendo continuamente un algoritmo de tres pasos denominado ciclo de máquina, consistente en 1. Traer una instrucción (fetch): carga la instrucción almacenada en la dirección que indica el contador de programa en el registro de instrucción, e incrementa el contador de programa de manera que indique la dirección de la siguiente instrucción. 2. Decodificar la instrucción: descompone la instrucción en los operandos que implique su código de identificación. 3. Ejecutar la instrucción: activa los circuitos adecuados para realizar la tarea requerida. Si la instrucción es de salto, carga en el contador de programa la dirección de la próxima instrucción. 75.40 Algoritmos y programación I Curso Prof. Servetto 28 Máquina Ideal Arquitectura y lenguaje de máquina 75.40 Algoritmos y programación I Curso Prof. Servetto 29 Arquitectura (RISC) • Memoria principal con 256 celdas de 1 byte con direcciones representadas en patrones hexadecimales desde el 00 al FF. • CPU con 16 registros de propósito general de 1 byte, numerados de 0 a F con patrones hexadecimales. • Contador de programa de 1 byte y registro de instrucción de 2 bytes. • Valores enteros representados en complemento a 2 en 8 bits, y fraccionarios representados en punto flotante en 8 bits. • Entrada/salida en correspondencia con la memoria: • Puerto de entrada en celdas FC (control: 00 no hay dato, 01 dato disponible) y FD (datos) • Puerto de salida en celdas FE (control: 00 dato no tomado, 01 dato tomado) y FF (datos) 75.40 Algoritmos y programación I Curso Prof. Servetto 30 Lenguaje de máquina Código Operandos Descripción 1 RXY Cargar en el registro R el contenido de la celda con dirección XY 2 RXY Cargar en el registro R el patrón XY 3 RXY Almacenar el contenido del registro R en la celda con dirección XY 4 0RS Copiar el contenido del registro R en el registro S 5 RST Sumar en complemento a 2 los contenidos de los registros S y T y dejar el resultado en R 6 RST Sumar en punto flotante los contenidos de los registros S y T y dejar el resultado en R 7 RST Disyunción (OR) de los contenidos de los registros S y T con resultado en registro R 8 RST Conjunción (AND) de los contenidos de los registros S y T con resultado en registro R 9 RST Disyunción exc. (XOR) de los contenidos de los registros S y T con resultado en registro R A R0X Rotar a derecha el contenido del registro R, X veces B RXY Saltar a la instrucción con dirección XY si el contenido del registro R es igual al del reg. 0 C 000 Parar la ejecución 75.40 Algoritmos y programación I Curso Prof. Servetto 31