• No se han encontrado resultados

Comparación de los procesadores INTEL XEON MP y AMD OPTERON

N/A
N/A
Protected

Academic year: 2020

Share "Comparación de los procesadores INTEL XEON MP y AMD OPTERON"

Copied!
143
0
0

Texto completo

(1)

COMPARACIÓN DE LOS PROCESADORES

INTEL XEON MP Y AMD OPTERON.

INFORME DE SUFICIENCIA

PARA OPTAR EL TÍTULO PROFESIONAL DE:

INGENIERO ELECTRÓNICO

PRESENTADO POR

CARLOS FERNANDO MALDONADO BOHORQUES

PROMOCIÓN 1991 - 1

(2)
(3)
(4)

PRÓLOGO 1

CAPÍTULO 1 3

INTRODUCCIÓN 3

1.1

Historia del ordenador

3

1.2

Orígenes y fundamentos del ordenador

4

1.3

Evolución de los ordenadores 6

CAPÍTULO 11 8

ESTRUCTURA BÁSICA DE UN ORDENADOR 8

2.1

La CPU

8

2.2

La memoria

10

2.3

La unidad de E/S

16

2.3.1

Funciones del módulo E/S

18

2.3.2

Técnicas de E/S

19

CAPÍTULO 111 26

ORGANIZACIÓN DEL PROCSADOR 26

3.1

Estructura del procesador

26

3.1.1

Registros del procesador

27

3.1.2

Unidad Aritmético-Lógica (ALU)

31

3.1.3

Unidad de Control

33

3.2

Estrategia de organización

42

3.2.1

Segmentación de instrucciones

42

(5)

3.2.3 Procesador superescalar 50

3.2.4 Procesamiento paralelo 60

3.2.5 Multiprocesadores simétricos (SMP) 64

3.2.6 Coherencia de cache 69

3.2.7 Clusters 75

3.2.8 Computación vectorial 80

3.2.9 Lo que nos depara el futuro 81

CAPÍTULO IV 84

PROCESADOR AMD OPTERON 84

4.1 Introducción 84

4.2 Principales Características 86

4.2.1 La arquitectura AMO 64 (Hammer ó x86-54) 88 4.2.2 Controlador de memoria ODR ORAM integrado 90

4.2.3 Otras características 92

4.3 Tecnología Hyper Transport 93

4.4 La serie chipset AMO-8000 96

4.5 Mainboards desarrolladas con AMO Opteron 98

4.6 Sistemas Operativos 100

CAPÍTULO V 101

PROCESADOR INTEL XEON MP 101

5.1 Introducción 101

5.2 Principales características 102

5.3 Tecnología Hyper Threading 107

5.4 Chipsets para servidores lntel 109

(6)

5.6 Sistemas Operativos

CAPÍTULO VI

COMPARACIÓN DE PROCESADORES 6.1 Introducción

6.2 Comparación de tecnologias

6.3 Comparación mediante benchmarks 6.4 Evaluación de estrategias de fabricantes

6.5 Tendencias del mercado en servidores de 64 bits

CONCLUSIONES Y RECOMENDACIONES

APÉNDICE A : OTROS BENCHMARKS SPEC

BIBLIOGRAFÍA

114

115 115

115

116

121

126 128 131

132

(7)

Figura 1.1 Estructura básica de la máquina de John von Neumann 5 Figura 2.1 Interacción entre memoria principal y cache 13

Figura 2.2 Diagrama de bloques de un módulo E/S 17

Figura 3.1 Ciclo de captación de una instrucción 35 Figura 3.2 Diagrama de estados de un ciclo de instrucción 42

Figura 3.3 Diagrama de tratamiento de saltos 49

Figura 3.4 Organización superescalar 51

Figura 3.5 Comparación de esquemas superescalar y super-segmentado 53

Figura 3.6 Procesamiento superescalar 60

Figura 3.7 Tipos de organización de computadores 63 Figura 3.8 Organización de un multiprocesador simétrico 66

Figura 3.9 Memoria multipuerto 67

(8)

No hay duda que el desarrollo alcanzado por los ordenadores en general, ha permitido su aplicación en casi todas las actividades del quehacer humano. Dentro de este desarrollo lo más representativo lo constituyen los microprocesadores, no sólo porque en ellos se emplean las técnicas más sofisticadas para su diseño y producción, sino porque marcan la pauta del desarrollo tecnológico en la implementación de nuevos ordenadores, desde los personales hasta los de rango medio y alto.

Pero, ¿en que consiste el desarrollo alcanzado?, es algo que se tratará de describir en el presente informe, exponiendo tan claro como sea posible, la tecnología y las características más saltantes de los procesadores hoy en día. A través de la comparación de los microprocesadores lntel Xeon MP y AMO Opteron, que son las principales opciones de procesadores que ofrecen sendos fabricantes al mercado para el diseño y fabricación de servidores, se podrá poner de manifiesto la incidencia que tienen cada una de las tecnologías empleadas en el rendimiento final de un computador.

(9)

describiendo cada una de sus partes y las tecnologías más saltantes empleadas en cada una de ellas. En este capítulo también se describen las estrategias de organización interna más empleadas hoy en día como, la segmentación de instrucciones, el tratamiento de saltos, el procesamiento paralelo, la coherencia de cache, entre otras.

(10)

1.1 Historia del ordenador

Es importante empezar el presente informe con una breve historia sobre la evolución de los ordenadores. Esta historia además de ser interesante por sí

misma, nos permitirá tener una visión general de la estructura y funcionamiento de los ordenadores. La evolución de los ordenadores ha estado siempre ligada al desarrollo de la electrónica y últimamente al de la microelectrónica, la que ha tenido como una de sus características más importantes, el incremento constante del número de componentes contenidos en un sólo chip de circuito integrado.

Dentro de los aspectos más saltantes de la evolución de los ordenadores están, el incremento de la velocidad del procesador, el aumento del tamaño de la memoria y el aumento de la capacidad de Entrada/Salida, siendo el primero de ellos el de mayor relieve. A su vez, el factor responsable del gran aumento de velocidad del procesador ha sido hasta hace poco la reducción del tamaño de sus componentes, siendo ahora los diseños cada vez más sofisticados de su arquitectura os que han permitido incrementar notablemente sus prestaciones.

(11)

de que, la velocidad del procesador ha aumentado más rápidamente que el tiempo de acceso a memoria, teniéndose que crear técnicas para compensar este desacople, como el uso de memorias caché, caminos de datos más anchos de la memoria al procesador y más circuitos de memoria inteligente. Asimismo, se ha tenido que modificar la organización del procesador incluyendo un fuerte uso de técnicas de encauzamiento, de ejecución paralela y de ejecución especulativa, todas ellas orientadas a mantener al procesador ocupado la mayor cantidad de tiempo posible.

1.2 Orígenes y fundamentos del ordenador

Con el descubrimiento de la válvula de vacío en el año 1904, Fleming dio inicio a la historia de la electrónica, pero fue tres décadas después que recién se hizo uso de la válvula en la primera generación de ordenadores. Por entonces cada máquina era construida y cableada para un propósito específico.

(12)

El matemático húngaro John von Neumann (1903-1957) que era asesor del proyecto ENIAC, en 1945 publica por primera vez su idea del concepto de programa-almacenado dentro de una propuesta para la construcción de un nuevo ordenador, el EDVAC (Electronic Discrete Variable Computer), pero fue en 1946 cuando Neumann y sus colegas del Instituto para Estudios Avanzados de Princeton, iniciaron el diseño de un ordenador de programa-almacenado que se convertiría en el prototipo de toda una serie de ordenadores de propósito general, el cual denominaron IAS y fuera culminado en 1952.

L.'nidml de Conln°'

LJnitlnd Arilmc:t ioo

Í.[\!!Íc:.'l

UC'P

�lr1111C1ru l'rim:ipnl

t:ni,lml

Figura 1.1 Estructura básica de la máquina de John von Neumann

(13)

imposible alterar la secuencia de las órdenes. Hasta ese momento no se almacenaba nada en memoria. Con Neumann se pasa a guardar el programa en memoria y se introducen los datos durante su ejecución. Dado que todas las instrucciones están disponibles en memoria, la siguiente instrucción a ejecutarse podría ser cualquiera de ellas.

Otro aporte muy importante fue la utilización del sistema de numeración binario que simplificaba enormemente los problemas de implementación electrónica de las operaciones y de las funciones lógicas, a la vez que proporcionaba una mayor inmunidad a los fallos (electrónica digital).

Salvo raras excepciones, los ordenadores de hoy en día mantienen la misma estructura y principios de funcionamiento.

1.3 Evolución de los ordenadores

Cuando en 1946se culmina la construcción del ENIAC, el circuito básico fue el flip-flop y la programación se hacía en lenguaje de máquina a través de cableado externo. Su construcción demoró 3 años y se utilizó durante 1 O años.

Como consecuencia del descubrimiento del transistor, en 1948, se da inicio a una nueva generación de ordenadores, reduciéndose de manera considerable el tamaño y consumo de energía. Aparecen los primeros elementos de soporte de las memorias, etapa en la que además de las cintas perforadas, se introdujeron las ferritas, los discos y las cintas magnéticas. Como lenguaje de programación se comienza a emplear el FORTRAN.

(14)

memorias con semiconductores, se reducen los ciclos de instrucción alcanzándose el orden de los nano-segundos, surgen la multiprogramación, la programación en tiempo real y aparecen los sistemas operativos.

(15)

2.1 La CPU

En su forma más simple, un sistema de computadora cuenta con una unidad que ejecuta instrucciones de programas. Esta unidad se comunica con otros subsistemas dentro de la computadora, y a menudo controla su operación. Debido al papel central de tal unidad se le conoce como unidad central de procesamiento, o CPU (Central Processing Unit). Dentro de muchas computadoras, un subsistema, como una unidad de entrada/salida, o un dispositivo de almacenamiento masivo, puede incorporar una unidad de procesamiento propia. Tal unidad de procesamiento, aunque es central para su propio subsistema, resulta claro que no es "central" para el sistema de computadora en su conjunto. Sin embargo, los principios del diseño y operación de una CPU son independientes de su posición en un sistema de computadora. La organización del hardware permite a una CPU realizar su función principal: traer instrucciones desde la memoria y ejecutarlas.

(16)

adicionales, que se dedican a realizar muy rápido trabajos parciales. De esta manera se descarga al procesador principal de parte del trabajo y se puede dedicar a las tareas más críticas como por ejemplo, proceso de datos en tiempo real.

Estructuras más complicadas pueden ser necesarias para garantizar sistemas tolerantes a fallas, en los que son necesarios grupos ("clusters") de procesadores redundantes, para garantizar que una falla en uno de los procesador no afecte al proceso global que se este ejecutando.

Las posibilidades actuales de integración hacen viable que tanto la CPU como la memoria estén prácticamente incluidos en el mismo circuito integrado ("chip"). De este modo se acelera el tratamiento de datos incorporando internamente una memoria de acceso rápido (cache de nivel 1 y 2, L 1 y L2, e incluso el nivel siguiente, L3) comunicada directamente con el microprocesador. Por otro lado, han desaparecido elementos externos que realizaban parte del trabajo de cálculo de la CPU y que se podían encontrar en ordenadores más antiguos, tales como los coprocesadores matemáticos. Estos componentes opcionales eran un complemento del microprocesador principal, y estaban especializados en realizar operaciones aritméticas con decimales. Actualmente ya están incluidos como una parte del procesador principal e integrado en el mismo circuito.

(17)

cada una de estas instrucciones se ejecuta realizando una secuencia de operaciones más rudimentarias.

En resumen el CPU, recibe instrucciones y datos, y tiene por misión ejecutar secuencialmente instrucciones, con datos almacenados en la memoria o tomados de la unidad de Entrada y Salida, para lo cual, debe efectuar las operaciones

aritmético-lógicas, gobernar el resto de componentes del sistema y controlar la transferencia de datos.

2.2 La memoria

La memoria brinda al procesador almacenamiento temporal para programas y datos, los cuales deben transferirse a la memoria desde un dispositivo de entrada o desde el almacenamiento secundario, antes de que puedan procesarse.

Aunque parezca sencilla, la memoria es quizás, la que presenta la más amplia diversidad tecnologías, estructuras, prestaciones y costos, que cualquier otra parte del ordenador. Ninguna tecnología es óptima, por lo que un ordenador debe contar necesariamente con una jerarquía de subsistemas de memoria, algunos internos (directamente accesibles por el computador) y otros externos

(accesibles por el ordenador a través de módulos de entrada/salida)

Una fo�ma práctica de abordar el tema de las memorias, es clasificándolas según sus características claves, como son:

Ubicación: Indica si la memoria es interna como los registros que necesita el procesador o la memoria que requiere la unidad de control, o externa como las unidades de cinta, disco magnético ó discos ópticos.

(18)

Unidad de transferencia: Es el número de bits que se leen o escriben en memoria a la vez. Para la memoria interna es el número de líneas de entrada/salida al módulo de memoria y para la externa generalmente es en bloques, que es de mayor dimensión que la palabra.

Método de acceso: Puede ser secuencial como en el caso de las cintas, directo como el de los discos, aleatorio como la memoria principal, y asociativa como en cierta memoria cache.

Prestaciones: Se utilizan tres parámetros de medida, tiempo de acceso que para el caso de memorias de acceso aleatorio es el tiempo que tarda en realizar una operación de lectura o escritura y para externas es el tiempo en el que el mecanismo de lectura/escritura se sitúa en la posición deseada. Otro parámetro es el ciclo de memoria, utilizado en las memorias de acceso aleatorio y es el tiempo necesario antes de que se pueda iniciar un siguiente acceso a memoria. La velocidad de transferencia es otro parámetro que establece a que velocidad se pueden transferir datos desde o hacia la memoria.

Medio físico: Los más usados actualmente son los semiconductores, los medios magnéticos y los ópticos. Un aspecto importante es que los medios magnéticos, los ópticos y algunas memorias semiconductoras son no volátiles, es decir no se pierde la información cuando se desconecta la alimentación eléctrica.

(19)

Una clasificación de las memorias semiconductoras es la que se muestra a continuación:

Tipo de Memoria Clase Mecanismos de escritura Borrado

PROM borrable (EPROM) Luz ultravioleta,

chip completo

PROM borrable Memoria de Eléctricamente

electricamente (EEPROM) sobretodo-lectura por bloques Eléctricamente

Electricamente Memoria FLASH

por bytes ROM programable

(PROM) Memoria de

No posible Memoria de sólo solo lectura

Mediante máscaras lectura (ROM)

Memoria de acceso Memoria de Eléctricamente Electricamente

aleatorio (RAM) lectura/escritura por bytes

Tabla 2. 1 Clasificación de memorias semiconductoras

Volatilidad

No Volátil

Volatil

(20)

Toda memoria semiconductora está sujeta a errores, permanentes (físicos) o transitorios u ocasionales, generalmente producidos por problemas en al fuente de alimentación o por la presencia de partículas alfa. La mayoría de los sistemas incluyen actualmente una lógica para detectar y corregir errores, la cual, cuando se van a escribir los datos en la memoria, realiza un cálculo con los datos cuyo resultado se almacena conjuntamente con los datos. Al momento de leer los datos, vuelve a realizar el cálculo y lo compara con el que estaba almacenado, pudiendo de esta manera detectar si hay un error y dependiendo de la lógica y el número de bits empleados, podrá corregir un máximo número de bits errados.

Un tipo de memoria semiconductora algo especial y crítica lo constituyen las memorias cache. Su objetivo es lograr que el sistema de memoria, compuesto por la memoria principal de gran tamaño pero lenta y la memoria cache más rápida pero pequeña, sea en conjunto lo más rápida posible. La cache contiene una copia de algunos bloques de la memoria principal. El procesador primero comprueba si la palabra que requiere está en la memoria cache, sino lo está, se transfiere el bloque que contiene la palabra requerida de la memoria principal a una línea de la memoria cache y desde ésta la palabra es entregada al procesador. Es probable que futuras referencias a memoria hechas por el procesador, sean a palabras contenidas en el mismo bloque.

CPU

Transferen::ia. de palabn:s

Transfere:n:i.a.de bloque:s

Memoria principal

(21)

Sin duda uno de los cuellos de botella más críticos de todo sistema ordenador que utiliza procesadores de altas prestaciones es la interfaz con la memoria principal, cuyo bloque básico de construcción por más de 20 años ha sido el chip DRAM asíncrono, durante los cuales su arquitectura interna no ha sufrido cambios significativos, por lo que como hemos visto, ha sido necesario insertar uno ó más bloques de memoria cache entre ésta y el procesador.

Sin embargo, en los últimos años se han experimentado y se encuentran en producción diversas versiones mejoradas de la arquitectura básica de la DRAM. Dentro de estas destacan, la DRAM Mejorada (EDRAM) que integra una pequeña cache SRAM de 2 Kbytes para almacenar la última fila leída y permite operaciones de refresco y escritura en paralelo con acceso de lectura al cache. La DRAM Cache (CDRAM), similar a la EDRAM, cuenta con una verdadera cache SRAM de 16 Kbytes que permite accesos aleatorios efectivos, pudiendo ser utilizada además como buffer para accesos en serie a un bloque de datos.

Otra versión de arquitectura mejorada, corresponde a la DRAM Síncrona (SDRAM), que intercambia datos con el procesador de manera sincronizada a través de la señal de reloj del sistema y a la velocidad tope del bus procesador / memoria sin estados de espera. Al conocerse el número de ciclos de reloj que le tomará responder a la SDRAM, el procesador podrá realizar sin riesgo otras tareas. Cuenta con un modo de ráfagas que es útil cuando los bits a acceder están en secuencia y en la misma fila, como en el procesamiento de textos, hojas de cálculo y multimedia.

(22)

botella, haciendo que la perfomance de todo el sistema decayera. Ha sido necesario desarrollar nuevas tecnologías de construcción de memorias para poder acortar las diferencias con la velocidad de los procesadores, que ha ido creciendo de manera más rápida. Dentro de éstas nuevas tecnologías tenemos, la Rambus DRAM (RDRAM), cuyos módulos son conocidos como RIMM (Rambus In-fine Memory Modules) y las DDR SDRAM (Double Data Rate Synchronous DRAM).

La RDRAM aborda el problema del ancho de banda llegando a velocidades de transferencia de datos de 800, 1066 y 1600 Mhz. Sus anchos de banda pico son de 3.2, 4.2, 9.5 y 12.8 GB/s. Su palabra es de 2 y 4 bytes en arreglos de 2 y 4 canales. Cuentan con encapsulado vertical y terminales en un lateral. Lo que hace posible esta velocidad en el bus es una especificación muy precisa de las impedancias, la temporización y las señales. A diferencia de las DRAM convencionales que utilizan señales explícitas RAS, CAS, R/W y CE, las peticiones de memoria las hace utilizando un protocolo asíncrono orientado a bloques, a través del bus de alta velocidad indicando, la dirección deseada, el tipo de operación y el número de bytes.

(23)

2.3 La Unidad de Entrada/ Salida

La unidad de E/S es la interfaz del ordenador con el mundo exterior y su arquitectura debe ser tal que le permita controlar de manera sistémica las interacciones con ese mundo exterior. Para esto debe proporcionar al sistema operativo la información que necesita, para que pueda gestionar de manera eficaz la actividad de E/S. Existen tres formas básicas de operar las E/S: la programada, mediante interrupciones y el acceso directo a memoria (DMA, Direct Memory Access).

Cada módulo de E/S se conecta al bus del sistema, por medio del cual puede comunicarse tanto con el procesador como con la memoria. Cada uno de estos módulos puede controlar a su vez uno o más dispositivos periféricos. Además de cumplir con ciertos estándares para las conexiones físicas y eléctricas, posee cierta inteligencia para permitir la comunicación entre el periférico y el bus del sistema.

La función de los módulos de E/S suele ser algo especializada para ciertos tipos de dispositivos y su existencia tiene como origen el hecho de que existen una gran variedad de periféricos con formas de funcionamiento diferentes, cuyas lógicas de control sería, por decir lo menos, poco eficiente que estuviera en manos directamente del procesador, entre otras razones, porque los periféricos suelen ser demasiado lentos para el procesador y tienen una variedad muy elevada de formatos y tamaños de palabra.

(24)

permiten la comunicación con dispositivos remotos, los cuales podrían ser un terminal u otro computador.

En términos generales un dispositivo externo realiza su conexión con el módulo E/S a través de señales de control, estado y datos, como se muestra en el diagrama de bloques de la Figura 3. Los datos se intercambian en conjunto de bits

denominados palabras que son enviados y recibidos desde el módulo. Las señales de control determinan la función que debe realizar el dispositivo, tal como enviar datos al módulo E/S o aceptar datos desde este, indicar el estado en que se encuentra, o realizar una función especifica del dispositivo como, srtuar el cabezal de un disco. Las señales de estado indican al módulo de E/Sel estado en que se encuentra el dispositivo.

Imemzal Bus debiste�

Bus de �tos

Bus de dü,ecc:iones

Busde c:orilrol

Buffer de datos Lógica.del interfaz a dispositivo Registro de esta.do' con1rol externo

. .

Lógica del

§}�l+

interfaz a

s dispositivo externo

Figura 2.2 Diagrama de bloques de un módulo de E/S

Imrfaza D:ispositno exil!mo

Daros

...

Estado

Control

(25)

2.3.1 Funciones del módulo E/S

Las funciones de un módulo de E/S se pueden clasificar, en las siguientes categorías: (1) Control y temporización, para coordinar el trafico entre los recursos internos del ordenador y los dispositivos externos a través de un bus, lo que implica uno o más arbitrajes del bus. (2) Comunicación con el procesador, que implica decodificación de órdenes del procesador que le llegan por el bus de control como, leer un sector para el caso de un controlador de disco. (3) Intercambio de datos a través del bus de datos, informar sobre su estado o situaciones de error al procesador y el reconocimiento de la dirección de si mismo y de los periféricos que controla.

Otras funciones como: (a) Comunicarse con los dispositivos intercambiando órdenes, información del estado y datos, a través de una lógica más especifica y compleja que en su comunicación con el bus. (b) Almacenamiento temporal de datos (data buffering) debido a que tanto el procesador como la memoria principal poseen velocidades de varias órdenes de magnitud superior a la de los periféricos; como es el caso del envío de ráfagas rápidas que realiza la memoria cuando envía información al módulo de E/S, quien lo almacena temporalmente para después enviárselo al periférico a la velocidad de éste. (c) Responsable de la detección y comunicación de errores de sus periféricos al procesador, como papel atascado en una impresora, pista de disco en mal estado o detección de errores en transmisión de bits.

(26)

para la interfaz con los dispositivos que controla y la interfaz para cada uno de los dispositivos externos. El funcionamiento del módulo de E/S permite que el procesador vea de una forma simplificada una gran variedad de dispositivos con detalles de temporización, formatos de datos y elementos electromecánicos que son ocultados por el módulo E/S y de esta manera el procesador funcione

únicamente en términos de lectura y escritura u ordenes de abrir y cerrar archivos.

2.3.2 Técnicas de E/5

Se pueden distinguir tres técnicas para las operaciones de E/S como son: la E/S programada, en la que los datos se intercambian entre el módulo y el procesador con dedicación exclusiva del procesador; la E/S mediante interrupciones, en la que el módulo avisa al procesador en el momento en que ha terminado, por lo que la participación del procesador es parcial; y el acceso directo a memoria (DMA), en la que el módulo se encarga de cargar a la memoria desde el periférico sin la participación del procesador. A continuación se detallan cada uno de éstas técnicas.

E/5 programadas

(27)

esperando a que el módulo E/S termine la operación, tiempo en el cual el procesador podría haber realizado miles o millones de operaciones.

Al ejecutar una instrucción relacionada con una E/S, el procesador proporciona la dirección de un módulo de E/S y la del dispositivo externo, y una orden de E/S. Estas órdenes pueden ser: de control para activar el periférico e indicarle que hacer; de test para comprobar diversas condiciones de estado del módulo de E/S y sus periféricos; de lectura para que capte un dato de un periférico y lo sitúe en su buffer interno; de escritura para que capte un dato del bus de datos y posteriormente lo transmita al periférico.

Existe una estrecha correspondencia entre las instrucciones de E/S que el

procesador ejecuta o que el procesador capta de la memoria y las órdenes de E/S que envía al módulo E/S al ejecutar las instrucciones. Cada dispositivo tiene asociado un identificar único o dirección. Cuando el procesador envía una orden de E/S, ésta contiene la dirección del dispositivo deseado, la cual debe ser interpretada por el módulo de E/S para determinar si la orden es para él. Cuando el procesador, la memoria principal y los módulos de E/S comparten un bus común, se pueden dar dos modos de direccionamiento: el asignado en memoria, en el cual existe un único espacio de direcciones para las localidades de memoria y los dispositivos de E/S y el direccionamiento aislado en el que un rango completo de direcciones esta disponible para las localidades de memoria y otro para los módulos de E/S.

E/S mediante interrupciones

(28)

intercambiará información con el módulo y luego continuará con la siguiente instrucción del mismo programa o de otro programa.

El módulo de E/S, en el caso de una orden READ del procesador, lee desde el periférico asociado, lo coloca en su registro de datos y envía una interrupción al procesador a través de la línea de control. Cuando el procesador responde solicitándole su dato, el módulo lo coloca en el bus de datos y pasa al estado de preparado READY para otra operación de E/S.

Desde el punto de vista del procesador, una vez que envía la orden READ pasa a realizar otro trabajo, es decir podría estar ejecutando varios programas a la vez, pero al final de cada ciclo de instrucción comprueba las interrupciones. Al comprobar la existencia de alguna guarda el contexto del programa que está ejecutando, es decir el contador del programa y los registros del procesador, luego lee la palabra de datos del módulo de E/S y la almacena en memoria. A continuación recupera el contexto del programa que estaba ejecutando y continúa.

Cuando el módulo de E/S termina de ejecutar una orden y envía su interrupción al procesador, se disparan una serie de eventos en el procesador tanto a nivel de hardware como de software, los que se describen a continuación:

• El procesador termina la ejecución de la instrucción en curso y examina

si tiene interrupciones.

EL procesador al comprobar que hay interrupciones, envía una señal de

reconocimiento al dispositivo que originó la interrupción y este desactiva su señal de interrupción.

(29)

poder continuar donde se quedó. Ésta información es (a) la Palabra de Estado del Programa (PSW) y (b) posición de la siguiente instrucción. El procesador carga el contador de programa con la posición de inicio del

programa de gestión de la interrupción. Dependiendo de la arquitectura del procesador y del sistema operativo puede haber un programa por cada tipo de interrupción ó uno por cada dispositivo y tipo de interrupción.

• Además del PSW y el contador de programa interrumpido, el procesador guarda los contenidos de sus registros en la pila de control. Luego hará que el puntero de la pila apunte a una nueva cabecera de pila y que el contador de programa apunte al comienzo de la rutina de servicio de interrupción.

Durante la ejecución de la rutina de gestión de interrupción incluirá un

examen al estado de la operación de E/S que causó la interrupción. También puede enviar órdenes de reconocimiento adicionales.

Cuando termina el procesamiento de la interrupción, los valores de los

registros almacenados se recuperan de la pila y se vuelven a almacenar en los registros respectivos.

Como último paso recupera los valores del PSW y del contador de

programa desde la pila. Como resultado de esto se ejecutará la siguiente instrucción del programa que se interrumpió.

(30)

programas pueden no tener nada en común y pueden pertenecer a distintos usuarios.

Acceso directo a memoria

Aunque la E/S con interrupciones es más eficiente que la programada lo hace a costa de una intervención activa del procesador en la transferencia de datos. Por tanto, en ambas formas de E/S existen los inconvenientes de que la velocidad de transferencia de E/S está limitada por la velocidad a la cual el procesador puede comprobar y dar servicio a un dispositivo, y de que el procesador debe dedicarse a

la gestión de las transferencias. Si considerásemos la transferencia de un bloque de datos, la E/S sería la más rápida pero el procesador no haría nada más; la E/S con interrupciones libera en parte al procesador a expensas de reducir la velocidad de E/S.

El módulo DMA es capaz de imitar al procesador y recibir el control del sistema. Dicho control lo necesita para transferir datos desde y hacia la memoria a través del bus del sistema, y hará uso de él solo cuando el procesador no lo

necesite ó forzándolo a que suspenda temporalmente su funcionamiento. Esta última es la más común y se denomina 'robo de ciclo'. El procesador se detiene justo antes de necesitar el bus, el módulo DMA transfiere una palabra y devuelve el control al procesador. Obsérvese que no se trata de una interrupción pues el procesador no guarda el contexto ni nada por el estilo, sino que simplemente espera un ciclo de bus, lo que implica que el procesador se vuelva un poco más lento ejecutando programas, no obstante es mucho más eficiente que la E/S mediante interrupciones o la programada.

(31)

través de la línea de control, b) la dirección del dispositivo de E/S a través de de la línea de datos, c) la posición inicial de memoria desde donde se leerá o escribirá, indicada a través de la línea de datos y almacenada por el DMA en su registro de direcciones y d) el número de palabras indicado a través de la línea de datos y almacenado en el registro de cuenta de datos. Una vez que el módulo e DMA termina la transferencia del bloque de datos hacia o desde la memoria envía una señal de interrupción al procesador.

Existen muchas formas de configurar los módulos de E/S y el módulo DMA para que intercambien información entre sí, ya sea haciendo uso del bus del sistema o de un bus de E/S particular. Una primera forma sería que cada uno de los módulos se conecte directamente al bus del sistema, resultando una configuración económica pero totalmente ineficiente pues, se necesitarían dos ciclos del bus del sistema para pasar información desde un periférico a la memoria. Una segunda forma podría ser integrando las funciones de DMA y de módulo de E/S, con lo cual se reduce sustancialmente el número de ciclos de bus del sistema necesarios, pues existiría un camino directo entre un módulo de DMA y uno o más módulos de E/S. Una tercera forma sería un módulo de DMA por separado que se comunica a varios módulos de E/S a través de un bus de E/S, con lo que se reduce el número de interfases de E/S en el módulo DMA y permite que sea fácilmente ampliable.

(32)
(33)

3.1 Estructura del procesador

La CPU, llamada microprocesador cuando es fabricada en un chip, es como se dijo, el responsable de controlar el flujo de datos (de Entrada y Salida E/S) y de la

ejecución de las instrucciones de los programas sobre los datos. Realiza todos los

cálculos (suma, resta, multiplicación, división y comparación de números y

caracteres).

Se divide en 2 componentes principalmente:

1. Unidad de Control (UC)

2. Unidad Aritmético/Lógica (UAL)

Una forma de comprender la organización del procesador (CPU) es tener en cuenta las funciones que realiza. Dentro de éstas tenemos:

• Captar instrucciones: las instrucciones son leídas desde la memoria

• Interpretar instrucciones: las instrucciones se decodifican para

(34)

Procesar datos: la ejecución de una instrucción puede requerir una

operación aritmética o lógica con los datos.

Escribir datos: los resultados de ejecución de una instrucción pueden

exigir escribir los datos en la memoria ó en un módulo E/S.

3.1.1 Registros del procesador

Para poder realizar estas operaciones el procesador emplea un conjunto de

registros internos que funcionan como un nivel de memoria por encima de la memoria principal y de la memoria cache en la jerarquía. Estos registros pueden ser de dos tipos:

Registros visibles para el usuario: pues permiten al programador de

lenguaje de máquina o ensamblador, hacer uso de los registros para minimizar las referencias a la memoria principal.

Registros de control y estado: son utilizados solo por la unidad de control

para conducir el funcionamiento del procesador y por programas privilegiados del sistema operativo para controlar la ejecución de programas.

Registros visibles para el usuario

(35)

Igualmente en algunos casos pueden ser utilizados para funciones de direccionamiento.

En otros casos hay una separación parcial o total de registros de datos y de

direcciones. Los registros de datos pueden usarse únicamente para contener datos y no pueden ser empleados en el cálculo de una dirección de operando. Los

registros de dirección en cambio pueden ser de uso más o menos general o pueden estar dedicados a un modo de direccionamiento particular; entre estos tenemos:

• Puntero de segmento: para una máquina con direccionamiento

segmentado este registro contiene la dirección de la base del segmento. Puede haber uno para el sistema operativo y otro para el proceso actual.

• Registro índice: se usa para el direccionamiento indexado y pueden ser

auto-indexados.

• Puntero de pila: para los casos en que la pila sea visible al usuario, y

ésta está normalmente en memoria y hay un registro dedicado que apunta a la cabecera de esta. Esto permite un direccionamiento implícito.

(36)

visibles por el usuario. En algunas máquinas esto lo realiza la cpu de manera automática y en otras es responsabilidad del programador.

Registros de control y de estado

Existen diversos registros en el procesador que se emplean para controlar su funcionamiento. La mayoría de ellos, en la mayor parte de las máquinas no son visibles para el usuario, aunque podrían ser visibles a instrucciones de máquina ejecutadas en modo de control o de sistema operativo. Si bien existen diferentes organizaciones de registros con distinta terminología, a continuación se muestra una lista razonablemente completa de tipos de registro con una breve descripción

• Contador de programa (Program Counter, PC): contiene la dirección de

la siguiente instrucción.

• Registro de instrucción (lnstruction Register, IR): contiene la última

instrucción captada.

• Registro de dirección de memoria (Memory Address Register, MAR):

contiene la dirección de una posición de memoria.

• Registro intermedio de memoria (Memory Buffer Register, MBR): contiene la palabra de datos a escribir en memoria o la palabra leída más recientemente.

(37)

directamente al bus de direcciones, y MBR directamente al bus de datos. Los

registros visibles por el usuario intercambian constantemente datos con MBR.

Dentro del procesador, los datos tienen que ofrecerse al ALU para su procesamiento. La ALU pude tener acceso directo a MBR y a los registros visibles para el usuario. Como alternativa pueden haber registros intermedios adicionales, como registros de entrada y salida de la ALU.

Todos los procesadores incluyen un registro o conjunto de registros conocidos como 'Palabra de estado del programa' (Program Status Word, PSW), que contiene información sobre códigos de condición y otra información de estado. Entre los campos o indicadores más comunes se incluyen los siguientes:

• Signo: contiene el bit de signo del resultado de la última operación aritmética.

Cero: puesto a uno cuando el resultado es cero.

• Acarreo: puesto a uno si una operación da lugar a acarreo en sumas o a

deudo en restas, para el bit más significativo. Se usa en operaciones aritméticas multi-palabra.

Igual: puesto a uno si el resultado de una comparación lógica es la

igualdad.

Desbordamiento: usado para indicar un desbordamiento aritmético.

Interrupciones habilitadas/inhabilitadas: usado para permitir o inhabilitar

interrupciones.

• Supervisor: indica si el procesador funciona en modo supervisor o

(38)

instrucciones privilegiadas y se puede acceder a ciertas áreas de memoria.

Es posible encontrar otros registros de estado además de PSW, como, un puntero a un bloque de memoria que contenga información sobre control de procesos. En máquinas que usan interrupciones sectorizadas, puede existir un registro de vector de interrupción. Si se utiliza una pila para llevara a cabo ciertas funciones, como una llamada a subrutina, se necesita un puntero de pila del sistema. En un sistema de memoria virtual se usa un puntero a la tabla de páginas. Pueden emplearse registros para el control de operaciones de E/S

3.1.2 Unidad Aritmético Lógica (ALU)

La ALU es la parte del computador que realiza realmente las operaciones aritméticas y lógicas con los datos. El resto de los elementos del computador (unidad de control, registros, memoria y E/S) están principalmente para suministrar datos a la ALU, a fin de que esta los procese, llegando a lo que puede considerarse el núcleo o esencia del computador. Tanto la ALU como los demás componentes electrónicos del computador, se basan en el uso de dispositivos lógicos digitales sencillos que pueden almacenar dígitos binarios y realizar operaciones lógicas booleanas elementales.

(39)

debe almacenarse. La unidad de control proporciona las señales que gobiernan el

funcionamiento de la ALU y la transferencia de datos dentro y fuera de la ALU.

Dos aspectos fundamentales de la aritmética del computador son la forma

de representar los números (formato binario) y los algoritmos utilizados para realizar

las operaciones aritméticas básicas (suma. resta, multiplicación, división). La

aritmética de un computador es realizada normalmente con dos tipos de números

muy diferentes: enteros y de coma flotante. En ambos casos, la representación

elegida es un aspecto de diseño crucial. Las cantidades en coma flotante se

expresan como un número (mantisa) multiplicado por una constante (base) elevada a una potencia entera (exponente) y se utilizan para representar cantidades muy

grandes o muy pequeñas. La mayoría de los procesadores implementan la

normalización o estándar IEEE 754, para la representación de números y aritmética

en coma flotante. Esta norma define el formato para 32 bits así como para 64 bits.

A continuación se describen los componentes típicos de la ALU:

Banco de registros (BR). Está constituido por 8, 16 ó 32 registros de tipo general que sirven para situar datos antes de cada operación, para almacenar datos intermedios en las operaciones y para operaciones internas del procesador.

Circuitos operadores (CIROP). Compuesto de uno o varios circuitos electrónicos que realizan operaciones elementales aritméticas y lógicas (sumador, complementador, desplazador, etc).

(40)

Señalizadores de estado (SE). Registro con un conjunto de bi-estables en los que se deja constancia de algunas condiciones que se dieron en la última operación realizada.

3.1.3 Unidad de control

La ejecución de una instrucción implica la ejecución de una secuencia de

pasos más pequeños, llamados ciclos. Estos ciclos suelen ser de captación, acceso indirecto a memoria, ejecución e interrupción. Además cada ciclo se compone de

una serie de operaciones más elementales, llamadas micro-operaciones. Una única

micro-operación, implica por lo general, una transferencia de datos entre registros,

una transferencia entre un registro y un bus externo o una sencilla operación de la ALU.

La unidad de control de un procesador realiza dos tareas: (1) hace que el procesador ejecute las micro-operaciones en la secuencia correcta, determinada por el programa que se está ejecutando, y (2) genera las señales de control que provocan a la ejecución de cada micro-operación. Las señales de control generadas por la unidad de control causan la apertura y cierre de ciertas puertas lógicas, lo que da como resultado una transferencia de datos hacia, o desde, los registros, y una operación de la ALU. Una técnica para construir la unidad de control es la implementación cableada, en la cual ésta es un circuito combinacional. Sus señales lógicas de entrada, gobernadas por la instrucción de máquina en curso, se transforman en un conjunto de señales de control de salida.

(41)

de los ciclos implica una serie de pasos, cada uno de los cuales involucra a ciertos registros del procesador, a estos pasos se les conoce como micro-operaciones.

Ciclo de captacion

Tiene lugar al principio de cada ciclo de instrucción y hace que una

instrucción sea captada de la memoria. Para un caso típico hay cuatro registros

implicados:

MAR: conectado a las líneas de dirección del bus del sistemas.

Especifica una dirección de memoria en una operación de lectura escritura.

MBR: conectado a las líneas de datos del bus del sistema. Contiene el

valor a almacenar en memoria, o el último valor leído de memoria.

PC: contiene la dirección de la siguiente instrucción a captar.

IR: contiene la instrucción captada.

El primer paso es llevar la dirección del PC al MAR, ya que este es el único registro conectado a la línea de dirección del bus del sistema. El segundo paso es traer la instrucción para lo cual la unidad de control emite una orden READ por el bus de control; el resultado aparece en el bus de datos y se copia en el MBR. Incrementar PC en 1 (longitud de la instrucción). Como estas dos últimas acciones no interfieren entre si, se pueden realizar simultáneamente para ahorrar tiempo. El tercer paso es transferir el contenido de MBR al IR. Esto libera al MBR para su uso durante un posible ciclo indirecto.

(42)

de tiempo o pulso de reloj. La tercera micro-operación puede tener lugar durante la segunda unidad de tiempo o durante la cuarta sin afectar a la operación de captación. A esto se le denomina agrupación de micro-operaciones, las cuales deben cumplir dos reglas sencillas: (1) debe seguirse la secuencia correcta de eventos, y (2) deben evitarse los conflictos, como intentar leer y escribir en el mismo registro en una misma unidad de tiempo.

PC

¿�

IR

k:

CPU

>

MAR

Uniood de control

MBR

<-.

" .)

<

Bus de Bus de direcciones ootos

... "

V

Bus de control

Figura 3.1 Ciclo de captación de una instrucción

Ciclo indirecto

Memoria

Una vez que se capta una instrucción el siguiente paso es captar los

operandos fuente. Suponiendo un formato de instrucción que permite direccionamiento indirecto, dará lugar a un ciclo indirecto que ha de preceder al

(43)

contenido de MBR, de modo que contenga una dirección directa en lugar de una

indirecta. IR tiene ahora el mismo estado que si no se hubiera usado

direccionamiento indirecto y está listo para el ciclo de ejecución.

Ciclo de ejecución

Los ciclos de captación, indirecto y de interrupción son sencillos y predecibles, pues cada uno implica una secuencia pequeña y fija de micro­ operaciones, repitiéndose en todos los casos las mismas micro-operaciones en la

ejecución de cualquier operación. Esto no ocurre así en el ciclo de ejecución. En

una máquina con n códigos de operación diferentes pueden ocurrir n secuencias

diferentes de micro-operaciones. Consideremos una instrucción de suma:

ADD R1, X

suma el contenido de la posición X al registro R1. Puede darse la siguiente

secuencia de micro-operaciones:

t1: MAR - (IR(Dirección))

t2: MBR - Memoria

t3: R1 - (R1) + (MBR)

(44)

Examinemos ahora una instrucción de llamada a subrutina. Como ejemplo

consideraremos la instrucción 'saltar y guardar la dirección' (Branch and save

address)

BSAX

La dirección de la instrucción que viene a continuación de la instrucción BSA, se guarda en la posición de memoria X, y la ejecución continua en la posición X +l. la dirección guardada se utilizará más adelante en el retorno. Esta es una técnica sencilla para proporcionar llamadas a subrutinas. Las micro-operaciones necesarias son las siguientes:

t1: MAR - (IR (Dirección))

MBR-(PC)

t2: PC -. (IR(Dirección))

Memoria -. (MBR)

t3: PC -. (PC) + 1

La dirección que hay en PC al comienzo de la instrucción es la dirección de

la siguiente instrucción secuencial. Esta se guarda en la dirección señalada por IR.

Esta última dirección también se incrementa para obtener la dirección de la

instrucción correspondiente al siguiente ciclo de instrucción. Esto no significa que

sea lo único necesario que deba realizar el procesador para poder realizar el salto a

una subrutina, pues, es indispensable que se guarde en la pila el espacio de

(45)

Ciclo de interrupción

Cuando termina el ciclo de ejecución, el procesador realiza una comprobación para determinar si ha ocurrido alguna interrupción habilitada. Si es así tiene lugar un ciclo de interrupción. La naturaleza de este ciclo varía mucho de una máquina a otra. A continuación se presenta una secuencia muy simple de eventos a fin de ilustrarlo:

t1: MBR - (PC)

t2: MAR - Dirección de salvaguarda

PC - Dirección de la rutina

t3: Memoria _. (MBR)

En el primer paso, el contenido de PC se transfiere a MBR, de modo que pueda gúardarse para el retorno de la interrupción. Luego, MAR se carga con la dirección en la cual se va a guardar el contenido de PC, y PC se guarda con la dirección de comienzo de la rutina de procesamiento de la interrupción. Ya que la mayoría de procesadores tienen múltiples tipos y o niveles de interrupción, podrían hacer falta una o más micro-operaciones adicionales para obtener la dirección de salvaguarda y la dirección de la rutina, antes de que puedan transferirse a MAR y a PC respectivamente. El paso final es almacenar MBR, que contiene al antiguo valor de PC, en la memoria. Quedando el procesador preparado para iniciar el siguiente ciclo de instrucción.

Requisitos funcionales

(46)

elementales llamadas micro-operaciones, reduciendo su funcionamiento a su nivel

más básico, pudiéndose entonces definir exactamente que es lo que la unidad de

control tiene que hacer que ocurra. Se definen como requisitos funcionales de la

unidad de control a aquellas funciones que debe de llevar a cabo. Una definición de

estos requisitos funcionales es la base para el diseño e implementación de la

unidad de control. El siguiente proceso de tres pasos nos lleva a la caracterización

de la unidad de control:

Definir los elementos básicos del procesador

Describir las micro-operaciones que ejecuta el procesador

Determinar las funciones que debe realizar la unidad de control para que

se ejecuten las micro-operaciones

Los dos primeros pasos ya han sido desarrollados por lo que podemos en

primer lugar establecer los elementos básicos del procesador como son la ALU, Registros, Caminos de datos internos, Caminos de datos externos y la Unidad de control. Asimismo se observa que la ejecución de un programa consta de operaciones que consisten en una secuencia de micro-operaciones, pudiendo establecerse que todas ellas obedecen a una clasificación en una de las siguientes categorías:

Transferir datos de un registro a otro.

Transferir datos de un registro a una interfaz externa (por ejemplo al bus

del sistema).

Transferir datos de una interfaz externa a un registro.

Realizar una operación aritmética o lógica, usando registros para entrada

(47)

Podemos ser ahora algo más explícitos acerca de la forma en que funciona la unidad de control. La unidad de control realiza 2 tareas básicas:

Secuenciamiento: la unidad de control hace que el procesador avance a

través de una serie de micro-operaciones en una secuencia adecuada, basada en el programa que se está ejecutando.

Ejecución: la unidad de control hace que se ejecute cada micro­

operación.

Lo antes indicado es una descripción funcional de lo que hace la unidad de control. La clave de como funciona la unidad de control es la manera en que utiliza las señales de control.

Señales de control

Para que la unidad de control realice su función, debe tener entradas que le

permitan determinar el estado del sistema y las salidas que le permitan controlar el comportamiento del mismo. Internamente la unidad de control ha de tener la lógica

necesaria para realizar sus funciones de secuenciamiento y ejecución. Dentro de

las principales entradas y salidas tenemos:

Reloj: es el encargado de establecer la temporización y el sincronismo

para la ejecución de las micro-operaciones.

Registro de instrucción: el código de operación de la instrucción en curso

se usa para determinar que micro-operaciones hay que realizar durante el ciclo de ejecución.

Indicadores: se requieren para determinar el estado del procesador y el

(48)

• Señales de control del bus de control: el control del bus del sistema suministra señales a la unidad de control, tales como, señales de interrupción y de reconocimiento.

• Señales de control internas al procesador: son las que hacen que los datos se transfieran de u registro a otro y las que activan funciones

específicas de la ALU.

• Señales de control hacia el bus de control: señales de control de la memoria, y señales de control de los módulos de E/S.

Consideramos un ciclo de captación para entender como la unidad de control realiza su función a través de las siguientes señales de control simultáneamente:

• Una señal de control abre las puertas que permiten que el contenido de MAR aparezca en el bus de direcciones.

• Una señal de control de lectura de memoria, en el bus de control.

• Una señal de control, que abre las puertas que permite almacenar el contenido del bus de datos en MBR.

• Señales de control de la lógica, que suman 1 al contenido de PC y almacenan el resultado de nuevo en PC.

(49)

3.2 Estrategias de organización

3.2.1 Segmentación de instrucciones

Aprovechando los progresos en la tecnología de fabricación de circuitos integrados, los avances en la organización de los procesadores han permitido mejorar sus prestaciones. Dentro de estos tenemos el empleo de múltiples registros

en lugar de un único acumulador y el uso de una memoria caché. Otro adelanto es el que se refiere a la segmentación de instrucciones, cuyo uso es similar al de una línea de producción en una fábrica de manufacturas. El concepto se basa en el hecho de que el producto pasa a través de varias etapas de producción. Por lo que

en una misma línea de producción varios productos están siendo procesados en distintas etapas simultáneamente, entendiéndose que cada etapa de la línea de producción procesa un solo producto. A este proceso se le conoce como segmentación de cauce o pipelining, porque, como en una tubería o cauce, en un extremo se aceptan nuevas entradas antes que algunas entradas aceptadas con anterioridad aparezcan como salida.

mswc:ci6nfinalizada,

Captu la imlnxcién ,igui.eria Vclvu a.poz otro da.to de Umcadena. ounvecb>r Noinb,nupción

(50)

Para poder aplicar este concepto partiremos del hecho de que una instrucción tiene varias etapas durante su ciclo de instrucción. Como podemos observar en el diagrama anterior un ciclo de instrucción puede contar hasta con diez tareas o etapas, las cuales tienen lugar secuencialmente.

Hay periodos durante la ejecución de una instrucción en los que no se

accede a memoria principal, este tiempo se podría utilizar en captar la siguiente instrucción durante el periodo de tiempo en que se está ejecutando otra instrucción, es decir mientras la segunda etapa ejecuta una instrucción, la primera etapa utiliza algún ciclo de memoria no usado para captar y almacenar la siguiente instrucción a esto se conoce como prebúsqueda (prefetch) o solapamiento de la captación (fetch overlap). Para un ciclo de dos etapas (captación y ejecución) el ciclo de instrucción se reduciría a la mitad, sin embargo, esto es poco probable por dos razones:

• El tiempo de ejecución generalmente será más largo que el tiempo de

captación, por lo que esta última deberá esperar algún tiempo antes de que pueda vaciar su buffer.

• Una instrucción de bifurcación condicional hace que la dirección de la

siguiente instrucción a captar sea desconocida.

La pérdida de tiempo debida a la segunda razón puede reducirse haciendo

que la etapa de captación capte la instrucción desde memoria que sigue a la

instrucción de bifurcación; entonces sino se produce el salto no habría pérdida de

tiempo; si el salto se produce, debe desecharse la instrucción pre-captada y

captarse una nueva. Aunque estos factores reduzcan la efectividad potencial del

cauce, de todos modos se logra alguna aceleración. Para conseguir una mayor

aceleración, el cauce debe contar con más etapas. Consideremos otro conjunto de

(51)

• Captar instrucción (fetch instruction, FI): leer la siguiente instrucción y

cargarla en un buffer.

• Decodificar instrucción (decode instruction, DI): determinar el código de

operación y los campos de operando.

• Calcular operandos (calculate operands, CO): calcular la dirección

efectiva de cada operando fuente. Esto puede involucrar distintas formas

de calcular la dirección.

• Captar operandos (fetch operands, FO): captar cada operando desde la

memoria. Los operandos en registros no tienen que ser captados.

• Ejecutar instrucción (excecute instruction, El): realizar la operación

indicada y almacenar el resultado, si lo hay, en la posición de operando

destino especificada.

• Escribir operando (write operand, WO): almacenar resultado en memoria.

Con esta descomposición, las diversas etapas tendrán casi igual duración.

En el siguiente diagrama se muestra que para un cauce con las seis etapas antes

descritas se puede reducir el tiempo de ejecución de siete instrucciones, de 42 a 12

unidades de tiempo.

(52)

separado, o las etapas FO o WO pueden ser nulas. De este modo, casi siempre, los conflictos de memoria no reducirán la velocidad del cauce.

Otros factores contribuyen a limitar la efectividad del pipelinning. Si las seis etapas no son de igual duración, habrá cierta espera en alguna de ellas. Otra dificultad es la bifurcación condicional que puede invalidar varias captaciones de instrucción. Un evento impredecible similar es la llegada de una interrupción. Otro problema se presenta con al etapa CO que puede depender del contenido de un registro que podría verse alterado por una instrucción previa que aún está en el cauce. El sistema tiene que incluir una lógica para poder manejar este tipo de conflictos. Al margen de los factores antes descritos que limitan la efectividad del pipelinning, pareciera que cuanto mayor sea el número de etapas en el cauce, más rápida será de ejecución de instrucciones. Sin embargo se han observado dos factores que frustran este patrón de diseño de altas prestaciones:

En cada etapa del cauce, hay un gasto extra debido a la transferencia de

datos de buffer a buffer, y a la realización de varias funciones de realización y distribución. Este gasto adicional puede prolongar sensiblemente el tiempo de ejecución total de una instrucción aislada, sobre todo cuando las instrucciones son lógicamente dependientes ya sea por el uso abundante de bifurcaciones o dependencias de acceso a memoria.

(53)

La segmentación de instrucciones es una poderosa técnica para aumentar las prestaciones pero requiere un diseño cuidadoso, para obtener resultados óptimos con una complejidad razonable.

3.2.2 Tratamiento de Saltos

Uno de los mayores problemas del diseño de un cause de instrucciones es,

asegurar un flujo estable de instrucciones a las etapas iniciales del cause. El principal obstáculo para esto es, la bifurcación condicional, ya que es imposible determinar si el salto se producirá o no. Para el tratamiento de estas bifurcaciones se plantean varias opciones.

Flujos múltiples.- Consisten en duplicar las etapas iniciales del cause, para que este capte dos instrucciones utilizando dos caminos. Tiene como inconvenientes los retardos debidos a la competencia por el acceso a los registros y a la memoria, además, pueden entrar en el cause otras instrucciones de bifurcación antes de que se resuelva la bifurcación original.

Pre-captar el destino del salto.- En este caso se pre-captan tanto la

instrucción destino del salto como la siguiente a la bifurcación. Ambas instrucciones se guardan hasta que se ejecute la instrucción de bifurcación.

Buffer de bucles.- Es una memoria pequeña de gran velocidad gestionada por la etapa de captación de instrucción del cause, la cual contiene, secuencialmente, las n instrucciones captadas más recientemente. Al producirse un salto el hardware comprueba primero, si el destino del salto esta en el buffer y lo capta desde este. El buffer de bucles tiene tres utilidades:

(54)

dirección de donde se capta la instrucción actual. De este modo las instrucciones estarán disponibles sin el tiempo de acceso a memoria habitual.

Si ocurre un salto a pocas posiciones de la dirección de la instrucción de

bifurcación, el destino ya -estará en el buffer. Esto es muy útil para el

caso de las sentencias IF-THEN-ELSE.

Si el buffer es lo suficientemente grande para contener todas las

instrucciones de un bucle, entonces esas instrucciones solo necesitan

ser captadas de la memoria una sola vez durante la primera iteración.

El buffer de bucles es similar, en principio, a una cache de instrucciones. La diferencia esta en que solo guarda instrucciones consecutivas y que es mucho más pequeña y por lo tanto de menor costo.

Predicción de saltos.- en este caso se pueden usar varias técnicas para predecir si un salto se va a producir. Entre las mas usuales se encuentran: (1) predecir q nunca se salta; (2) predecir q siempre se salta; (3) predecir salto según el código de operación; (4) conmutador saltar/no saltar; (5) tabla de historia de saltos. Las tres primeras son estáticas, pues no dependen de la historia de resultados de bifurcaciones anteriores. Las dos últimas técnicas son dinámicas, pues si dependen de la historia de ejecución.

Figure

Figura  1.1  Estructura básica de la máquina de John von Neumann
Tabla  2. 1  Clasificación de memorias semiconductoras
Figura  2.  1  Interacción entre memoria principal y cache
Figura  2.2  Diagrama de bloques de un módulo de  E/S
+7

Referencias

Documento similar