Descargar

Conceptos de Arquitectura de Computadoras (resumido de William Stallings) (página 2)

Enviado por Juan Ramallo


Partes: 1, 2

  • Segmentación de cauce, introducción del paralelismo en un programa secuencial constituido por instrucciones de máquina

  • Múltiples procesadores, cubre diferentes organizaciones y objetivos

  • Arquitectura de computador de repertorio reducido de instrucciones

  • Elementos principales de los diseños de un RISC son:

    Características de la ejecución de instrucciones y los partidarios RISC:

    • Operaciones realizadas, funciones que lleva a cabo el procesador y su interacción con la memoria, algunas instrucciones HLL conducen a muchas operaciones de código máquina

    • Operandos, mayor cantidad de variables escalares locales que constantes enteras y matrices/estructuras

    • Llamadas a procedimientos, son las operaciones que consumen más tiempo en programas HLL compilados, el número de parámetros y variables que manejan un procedimiento y la profundidad de anidamiento son aspectos importantes; según el estudio de Tanenbaum, el 98 por ciento de los procedimientos llamados dinámicamente se les pasaba menos de seis argumentos y el 92 por ciento de ellos usaban menos de seis variables escalares locales

    Al utilizar un amplio banco de registros existieron dos aproximaciones:

    • Aproximación por software, consiste en confiar al compilador la maximización del uso de los registros el compilador intentará asignar registros a las variables que se usen más en un período de tiempo dado; requiere el uso de sofisticados algoritmos de análisis de programas.

    • Aproximación por hardware, consiste en usar más registros de manera que puedan mantenerse en ellos más variables durante períodos de tiempo más largos.

    Ventanas de registros

    El uso de muchos registros debería reducir la necesidad de acceder a memoria, el objetivo del diseño es organizar los registros de tal modo que se alcance esa meta. En un procedimiento típico, se emplean pocos parámetros de llamada y variables locales, y la profundidad de activación de procedimientos es pequeña. Para aprovechar estas propiedades se usan múltiples conjuntos pequeños de registros, cada uno asignado a un procedimiento distinto. Una llamada a un procedimiento hace que el procesador conmute automáticamente a una venta de registros distinta de tamaño fijo en lugar de salvaguardar los registro en memoria. Las ventanas de procedimientos adyacentes están parcialmente solapadas para permitir el paso de parámetros. La ventana se divide en tres partes o áreas de tamaño fijo:

    • 1. Registros de parámetros que contienen parámetros pasados al procedimiento actual desde el que lo llamó y los resultados a devolver al que lo llamó

    • 2. Registros locales que se usan para variables locales

    • 3. Registros temporales que se usan para intercambiar parámetros y resultados con el siguiente nivel más bajo (el procedimiento llamado por el procedimiento en curso)

    Los registros temporales de un nivel son físicamente los mismos que los registros de parámetros del nivel más bajo adyacente. Este solapamiento posibilita que los parámetros se pasen sin que exista una transferencia de datos real. Se deduce que en un banco de registros de N ventanas puede contener solo N-1 activaciones de procedimientos, para N no muy grande.

    Variables globales

    • El compilador asigna posiciones de memoria a las variables declaradas como globales en un HLL y todas las instrucciones de máquina que referencien a esas variables usen operandos referenciados en memoria. Esto es ineficiente si se accede frecuentemente.

    • Incorporar al procesador un conjunto de registros globales, registros fijos en cuanto a su número y accesibles por todos los procedimientos, conlleva un hardware añadido que se encarga de adaptar la división en el direccionamiento de los registros ya que se consideran que desde el 0 al 7 indican registros globales únicos y el resto pueden transformarse para seleccionar los registros físicos de la ventana en curso. El compilador debe decidir qué variables globales deben ser asignadas a registros.

    Amplio banco de registros frente a una caché

    El banco de registros organizado en ventanas funciona como un buffer pequeño y rápido que contiene un subconjunto de todas las variables que probablemente se usen más, se comporta muy similar que una memoria caché (aunque este banco es más rápido)

    Banco de registros amplio

    Caché

    Todos los datos escalares locales

    Datos escalares locales recientemente usados

    Variables individuales

    Bloques de memoria

    Variables globales asignadas por el compilador

    Variables globales usadas recientemente

    Salvaguarda/restauración basadas en la profundidad de anidamiento

    Salvaguarda/restauración basadas en el algoritmo de reemplazo

    Direccionamiento a registros

    Direccionamiento a memoria

    Incluso en el caso de que la caché sea tan rápida como el banco de registros, el tiempo de acceso será considerablemente mayor, porque para referenciar una posición de memoria en la caché se necesita un dirección de memoria completa y la complejidad de estar operación depende del modo de direccionamiento. En conclusión, el banco de registros basado en ventanas es superior para datos escalares locales, no tanto para los registros globales dado que la caché es capaz de manipular tanto variables globales como locales. Un banco de registros puede hacer un uso ineficiente del espacio ya que no todos los procedimientos necesitarán todo el espacio de ventana asignado a ellos, así mismo la caché tiene el problema de que los datos se leen por bloques que tienen algo o mucho que no se usará.

    Optimización de registros basada en el compilador P497

    Cuando se dispone de un pequeño número de registros (16-32), el uso optimizado de ellos es responsabilidad del compilador. En HLL no se tiene referencias explícitas a los registros. El objetivo del compilador es mantener en registros en lugar de en memoria los operandos necesarios para tantos cálculos como sea posible y minimizar las operaciones de carga y almacenamiento. Cada cantidad del programa candidata para residir en un registro se asigna a un registro simbólico o virtual, el compilador entonces asigna el número ilimitado de registros simbólicos a un número fijo de registros reales. Los registros virtuales cuya utilización no se solape pueden compartir el mismo registro real. Si en una parte del programa hay más cantidades a tratar que registros reales, algunas de las cantidades se asignan a posiciones de memoria. Lo esencial de la optimización es decidir qué cantidades tienen que ser asignadas a registros en un determinado punto del programa, la técnica más usada en RISC se conoce como coloreado de grafos, la cual procede de la topología.

    ¿Por qué CISC?

    Repertorios de instrucciones más ricos, instrucciones más complejas, todo esto motivado por el deseo de simplificar los compiladores y de mejorar las prestaciones. Si existen instrucciones máquina que se parezcan a sentencias del HLL la tarea del escritor de compiladores se simplifica. Pero es difícil descubrir casos que se ajusten perfectamente a la construcción. Otra esperanza era que los CISC produzcan programas más pequeños y más rápidos. Los programas más pequeños ocupan menos memoria, pero como la memoria es tan barata hoy, esto no es una gran ventaja. Tiene mayor importancia el hecho de que programas más pequeño mejoren las prestaciones: hay que captar menos bytes de instrucciones y los programas más pequeños ocupan menos páginas reduciendo los fallos de página. Comparando con un RISC, el programa para CISC puede ser más corto (tiene menos instrucciones) pero no necesariamente debe ocupar menos bits de memoria. El otro factor que motivaba a CISC era que le ejecución de instrucciones fuera más rápida, pero debido a que la unidad de control completa debe hacerse más compleja, y/o la memoria de control del microprograma ha de hacerse más grande, para acomodar un repertorio más rico, todo esto aumenta el tiempo de ejecución de las instrucciones sencillas.

    Características del RISC P501

    Características comunes del RISC:

    • Una instrucción por ciclo, esto es una instrucción máquina cada ciclo máquina; el ciclo máquina es el tiempo que se tarda en captar dos operandos desde dos registros, realizar una operación de la ALU y almacenar el resultado en un registro. Como no hay que acceder a la memoria de control de microprograma durante la ejecución esto hace más rápida la ejecución.

    • Operaciones registro a registro, menos LOAD y STORE para acceder a memoria, el resto de operaciones son todas entre registros. Un repertorio RISC puede incluir sólo una o dos instrucciones ADD

    • Modos de direccionamiento sencillos, casi todas las instrucciones RISC usan direccionamiento sencillo a registro, aunque se pueden incluir varios modos adicionales y otros modos más complejos se pueden sintetizar por un software a partir de los simples

    • Formato de instrucción sencillos, generalmente se usa un formato o unos pocos, la longitud de las instrucciones es fija y alineada en los límites de una palabra.

    Características CISC frente a RISC P504

    Un RISC clásico:

    • 1. Un único tamaño de instrucción

    • 2. Ese tamaño es típicamente cuatro bytes

    • 3. Pocos modos de direccionamiento de datos, típicamente menor que cinco.

    • 4. No se usa direccionamiento indirecto

    • 5. No hay operaciones que combinen carga/almacenamiento con cálculos aritméticos

    • 6. No se direcciona más de un operando de memoria por instrucción

    • 7. Las operaciones de carga/almacenamiento no admiten una alineación de datos arbitraria

    • 8. Un número máximo de usos de la unidad de gestión de memoria de una dirección de dato en cada instrucción

    • 9. El número de bits de un campo designador de registro entero es de cinco o más bits.

    • 10. El número de bits de un campo designador de registro de coma flotante es de cuatro o más

    Muchos diseños incluyen características de RISC y CISC: PowerPC y Pentium II

    Clase 7

    Memoria P104

    La memoria de un computador tiene una organización jerárquica. En el nivel superior (el más cercano al procesador) están los registros del procesador, luego uno o más niveles de caché (L1, L2, etc.), le sigue la memoria principal (construida de memoria dinámicas de acceso aleatorio (DRAM). Todas estas son memorias internas del computador. La jerarquía sigue con la memoria externa, siendo el siguiente nivel un disco duro fijo y uno o más niveles de soportes extraíbles como discos ópticos, cintas, entre otros. A medida que descendemos en la jerarquía de memoria disminuye el coste por bit, aumenta la capacidad y crece el tiempo de acceso. La estrategia es organizar los datos y los programas en memoria de manera que las palabras de memoria necesarias estén normalmente en la memoria más rápida.

    Características de los sistemas de memoria

    Ubicación indica si la memoria es interna o externa al computador.

    Capacidad se expresa en términos de bytes o de palabras para las memorias internas.

    Unidad de transferencia es igual al número de líneas de entrada/salida de datos del módulo de memoria, para memorias internas.

    • Palabra, es la unidad natural de organización de la memoria. Su tamaño suele coincidir con el número de bits utilizados para representar números y con la longitud de las instrucciones.

    • Unidades direccionables, es la palabra. Sin embargo muchos de los sistemas permiten direccionar a nivel de bytes.

    • Unidad de transferencia, para la memoria principal es el número de bits que se leen o escriben en memoria a la vez. No tiene por qué coincidir con una palabra o con una unidad direccionable. Para la memoria externa los datos se transfieren en bloques, unidades más grandes que la palabra.

    Método de acceso con las siguientes variantes:

    • Acceso secuencial, la memoria se organiza en unidades de datos llamadas registros, el acceso deber realizarse con una secuencia lineal específica. Utiliza mecanismo de lectura/escritura. Tiempo de acceso variable.

    • Acceso directo, los bloques individuales o registros tienen una dirección única basada en su dirección física. Utiliza un mecanismo de lectura/escritura. Tiempo de acceso variable.

    • Acceso aleatorio, cada posición direccionable de memoria tiene un único mecanismo de acceso cableado físicamente. El tiempo de acceso es constante e independiente de la secuencia de accesos previos. La memoria principal y algunos sistemas de caché son de acceso aleatorio.

    • Asociativa, es del tipo de acceso aleatorio que permite comparar ciertas posiciones de bits dentro de una palabra en busca de hacer coincidir unos valores dados y hacer esto para todas las palabras simultáneamente. Por tanto, una palabra es recuperada basándose en una porción de su contenido en lugar de su dirección. Lo usan las memorias caché.

    Prestaciones y sus tres parámetros de medida:

    • Tiempo de acceso (latencia), es el tiempo que tarda en situar el mecanismo de lectura/escritura en la posición deseada; en el acceso aleatorio es el tiempo que transcurre desde el instante en que se presenta un dirección a la memoria hasta que el dato, está disponible para su uso, o ha sido memorizado.

    • Tiempo de ciclo de memoria, se aplica a las de acceso aleatorio, consiste en el tiempo de acceso y algún tiempo más que se requiere antes de que pueda iniciarse un segundo acceso a memoria. Depende de las características del bus del sistema y no del procesador.

    • Velocidad de transferencia, es la velocidad a la que se pueden transferir datos a, o desde, una unidad de memoria.

    Soportes físicos para las memorias como ser semiconductoras, memorias de superficie magnética, memorias ópticas y magneto-ópticas.

    Características físicas, en memorias volátiles la información se va perdiendo o desaparece cuando se desconecta la alimentación. En las no volátiles la información, una vez grabada, permanece sin deteriorarse hasta que se modifique intencionadamente, no se necesita fuente de alimentación para retener la información.

    Organización es su disposición o estructura física en bits para formar palabras.

    Jerarquía de memoria

    Memorias con muchas capacidad son más baratas pero a su vez más lentas. Las más rápidas son más caras y de menor capacidad. La solución a este dilema es no contar con un solo componente de memoria sino emplear una jerarquía de memoria. Cuando se desciende en la jerarquía ocurre:

    • a. Disminuye el coste por bit

    • b. Aumenta la capacidad

    • c. Aumenta el tiempo de acceso

    • d. Disminuye la frecuencia de acceso a la memoria por parte del procesador

    La base para la condición d. es conocido como localidad de las referencias que implica lo siguiente: como el procesador trabaja principalmente con agrupaciones fijas de referencias a memoria en periodos de tiempo cortos, es posible organizar los datos a través de la jerarquía de tal manera que el porcentaje de accesos a cada nivel siguiente más bajo sea menor que al nivel anterior; las agrupaciones actuales pueden ubicarse temporalmente en el nivel 1, de vez en cuando una de las agrupaciones del nivel 1 tendrá que ser devuelta al nivel 2 a fin de que deje sitio para que entre otra nueva agrupación al nivel 1. Se puede aplicar a más de dos niveles de memoria. Memoria caché P111

    Su objetivo es lograr que la velocidad de la memoria sea lo más rápida posible, consiguiendo al mismo tiempo un tamaño grande al precio de memorias semiconductoras menos costosas. La caché contiene una copia de partes de la memoria principal. Cuando el procesador intenta leer una palabra de memoria, se hace una comprobación para ver si la palabra está en la caché; si es así, se entrega dicha palabra al procesador, si no, un bloque de memoria principal (un cierto número de palabras) se transfiere a la caché y luego la palabra es entregada al procesador. La caché consta de C líneas, cada línea contiene K palabras, más una etiqueta de unos cuantos bits. Tamaño de línea es el número de palabras que hay en la línea.

    Elementos de diseño de la caché P114

    Tamaño de caché: cuanto más grande es la caché, mayor es el número de puertas implicadas en direccionarla; Cachés más grandes tienden a ser ligeramente más lentas que las pequeñas. Imposible predecir un tamaño óptimo.

    Función de correspondencia: Como hay menos líneas de caché que bloques de memoria principal, se necesita un algoritmo que haga corresponder bloques de memoria principal a líneas de caché. Esto determina cómo se organiza la caché, se pueden utilizar tres técnicas:

    • Correspondencia directa, consiste en hacer corresponder cada bloque de memoria principal a solo una línea posible de caché. Usa una parte de la dirección del bloque de memoria principal como número de línea en la caché y esto proporciona una correspondencia o asignación única de cada bloque de memoria principal en la caché. Desventaja, hay una posición concreta de caché para cada bloque dado, por ello si un programa referencia repetidas veces a palabra de dos bloques diferentes asignado en la misma línea, dichos bloques se estarían intercambiando continuamente en la caché, provocaría una tasa de aciertos baja (vapuleo o trashing).

    Etiqueta

    Índice, línea de caché

    Palabras

    • Correspondencia asociativa, permite que cada bloque de memoria principal pueda cargarse en cualquier línea de la caché. Hay flexibilidad para que cualquier bloque sea reemplazado cuando se va a escribir uno nueva en la caché. Desventaja, requiere una compleja circuitería para examinar en paralelo las etiquetas de todas las líneas de caché.

    Etiqueta

    Palabras

    • Correspondencia asociativa por conjuntos, la caché se divide en v conjuntos, cada uno de k líneas. La lógica de control de la caché interpreta un dirección de memoria como tres campos: etiqueta, conjunto y palabra. La etiqueta de una dirección de memoria es mucho más corta y se compara solo con las k etiquetas dentro de un mismo conjunto.

    Etiqueta

    Conjunto

    Palabra

    Algoritmos de sustitución: una vez llena la caché, para introducir un nuevo bloque debe sustituirse uno de los boques existentes. Para el caso de correspondencia directa, solo hay una posible línea para cada bloque particular y no hay elección posible. Para las técnicas asociativas se requieren algoritmos de sustitución. Tales algoritmos se implementan en hardware, para así conseguir alta velocidad.

    • 1. "Utilizado menos recientemente", LRU (least-recently used): probalbmente el más efectivo, se sustituye el bloque que se ha mantenido en la caché por más tiempo sin haber sido referenciado. Cuando una línea es refernciada se pone a 1 su bit de USO y a 0 el de la otra línea del mismo conjunto (para la asociativa por conjunto de dos vías). Cuando va a transferirse un bloque al conjunto se utiliza la línea cuyo bit de USO es 0.

    • 2. "Primero en entrar-primero en salir", FIFO: se sustituye aquel bloque que ha estado más tiempo en la caché. Se puede implementar mediante un técnica cíclica o buffer circular.

    • 3. "Utilizado menos frecuentemente", LFU (least-frequently used): se sustituye aquel bloque del conjunto que ha experimentado menos referencias. Se puede implementar asociando un contador a cada línea.

    • 4. Aleatoria: no se basa en el grado de utilización, simplemente selecciona una línea al azar entre las posibles candidatas. Presenta prestaciones ligeramente inferiores a un algoritmo basado en la utlización.

    Política de escritura:

    En acierto, cuando el dato es existente:

    • 1. Escritura inmediata: todas las operaciones de escritura se hacen tanto en caché como en memoria principal, asegurando que el contenido de la memoria principal siempre sea válido. Desventaja, genera un tráfico sustancial con la memoria que puede originar un cuello de botella.

    • 2. Post-escritura: minimiza las escrituras en memoria. Las actualizaciones se hacen solo en la caché. Se activa un bit ACTUALIZAR asociado a la línea cuando se tiene una actualización. Luego, cuando el bloque es sustituido, es escrito en memoria principal si y solo si el bit ACTUALIZAR está activo. Problema, se tienen porciones de memoria principal que no son válidas, y los accesos por parte de los módulos de E/S tendrán que hacerse solo a través de la caché; esto complica la circuitería y genera un cuello de botella potencial.

    En fallo, cuando el dato se crea:

    • 1. Write-allocate, la información se lleva de la memoria principal a la caché. Se sobrescribe en la caché

    • 2. No write-allocate, El bloque no se lleva a la memoria caché. Se escribe directamente en la memoria principal

    Clase 8

    Buses del sistema P75

    Un computador está constituido por un conjunto de unidades o módulos de tres tipos elementales que se comunican entre sí (procesador, memoria, E/S). La estructura de interconexión es el conjunto de líneas que conectan los diversos módulos.

    • Memoria, generalmente constituidos por N palabras de la misma longitud. Una palabra puede leerse de, o escribirse en la memoria. Se indican mediante señales de control, leer y escribir.

    • Módulo de E/S, puede controlar un dispositivo externo, operaciones de lectura y escritura. Puede enviar señales de interrupción al procesador.

    • Procesador, lee instrucciones y datos, escribe datos una vez los ha procesado, utiliza ciertas señales para controlar el funcionamiento del sistema. Puede recibir señales de interrupción

    Tipos de transferencia necesarias:

    • Memoria a procesador, el procesador lee una instrucción o un dato desde la memoria

    • Procesador a memoria, el procesador escribe un dato en la memoria

    • E/S a procesador, el procesador lee datos de un dispositivo de E/S a través de un módulo de E/S

    • Procesador a E/S, el procesador envía datos al dispositivo de E/S

    • Memoria a E/S y viceversa, un módulo de E/S puede intercambiar datos directamente con la memoria, sin pasar por el procesador utilizando el acceso directo a memoria (DMA)

    Interconexión con buses P77

    Un bus es un camino de comunicación entre dos o más dispositivos. Al bus se conectan varios dispositivos y cualquier señal transmitida por uno de esos dispositivos está disponible para que los otros dispositivos conectados al bus puedan acceder a ella. Solo un dispositivo puede transmitir con éxito en un momento dado, sino podrían las señales solaparse y distorsionarse. Un bus está constituido por varios caminos de comunicación o líneas. Cada línea es capaz de transmitir señales binarias representadas por 1 y por 0. Se puede transmitir una secuencia de dígitos binario a través de una única línea. Se pueden utilizar varias líneas del bus para transmitir dígitos binarios simultáneamente (en paralelo, un dato de 8 bits con ocho líneas del bus). Los computadores poseen diferentes tipos de buses. El bus que conecta los componentes principales del computador se denomina bus del sistema.

    Estructura del bus

    Constituido usualmente por entre cincuenta y cien líneas. A cada línea se le asigna un significado o una función particular. Se clasifican tres grupos funcionales de líneas: líneas de datos, de direcciones y de control. Pueden existir líneas de alimentación para suministrar energía a lo módulos conectados al bus.

    Líneas de datos, proporcionan un camino para transmitir datos entre los módulos del sistema. El conjunto de estas líneas se le llama bus de datos. La anchura del bus de datos es la cantidad de líneas que incluye (32 o cientos de líneas). El número de líneas determina cuántos bits se pueden transferir al mismo tiempo.

    Líneas de dirección, se utilizan para designar la fuente o el destino del dato situado en el bus de datos.

    Líneas de control, se utilizan para controlar el acceso y el uso de las líneas de datos y de direcciones. Las señales de control transmiten tanto ordenes como información de temporización entre los módulos del sistema. Estas señales indican la validez de los datos y las direcciones. Por ejemplo, señal de escritura/lectura en memoria, petición de interrupción, señales de reloj.

    Jerarquía de buses múltiples P80

    Si se conectan muchos dispositivos al bus las prestaciones pueden disminuir, por dos causas principales:

    • A más dispositivos conectados al bus, mayor es el retardo de propagación. Este retardo determina el tiempo que necesitan los dispositivos para coordinarse en el uso del bus

    • El bus puede convertirse en un cuello de botella a medida que las peticiones de transferencia acumuladas se aproximan a la capacidad del bus. Se puede resolver usando buses más anchos e incrementando la velocidad a la que el bus transfiere los datos

    La mayoría de los computadores utilizan varios buses, organizados jerárquicamente. Un bus local conecta el procesador a una memoria caché y se pueden conectar también uno o más dispositivos locales. El controlador de memoria caché conecta la caché no solo al bus local sino también al bus de sistema. Se usan buses de expansión para conectar controladores de E/S al bus de sistema. La interfaz del bus de expansión regula las transferencias de datos entre el bus de sistema y los controladores conectados al bus de expansión. Esto permite conectar al sistema una amplia variedad de dispositivos de E/S y al mismo tiempo aislar el trafico de información entre la memoria y el procesador del tráfico correspondiente a las E/S.

    Elementos de diseño de un bus P82

    Tipos de buses: se dividen en dedicadas y multiplexadas. Una línea de bus dedicada está permanente asignada a una función o a un subconjunto físico de componente del computador. El multiplexado en el tiempo es un método que usa las mismas líneas para distintos usos. Ventaja del multiplexado es que usa menos líneas, cosa que ahorra espacio y costes; la desventaja es que se necesita una circuitería más compleja en cada módulo, puede producirse una reducción de las prestaciones por que cuando deben compartir las mismas líneas no pueden producirse en paralelo. La dedicación física se refiere al uso de múltiples buses, cada uno de los cuales conecta solo un subconjunto de módulos; una ventaja es su elevado rendimiento por haber menos conflictos por el acceso al bus, y una desventaja es el incremento en el tamaño y el costo del sistema.

    Método de arbitraje, se da porque más de un módulo puede necesitar el control del bus y solo una unidad puede transmitir a través del bus en un instante dado. Se clasifican en centralizados o distribuidos.

    • Centralizado, un único dispositivo hardware (controlador del bus o árbitro) es responsable de asignar tiempos en el bus. El dispositivo puede estar en un módulo separado o ser parte del procesador.

    • Distribuido, no existe un controlador central, en su lugar, cada módulo dispone de lógica para controlar el acceso y los módulos actúan conjuntamente para compartir el bus

    En ambos métodos de arbitraje el propósito es designar un dispositivo, el procesador o un módulo de E/S como maestro del bus.

    Temporización, hace referencia a la forma en la que se coordinan los eventos en el bus. Pueden ser síncrona o asíncrona.

    • Síncrona, la presencia de un evento en el bus está determinada por un reloj. El bus incluye una línea de reloj a través de la que se transmite una secuencia en la que se alternan intervalos regulares de igual duración a uno y a cero. Un único intervalo a uno seguido de otro a cero se conoce como ciclo de reloj o ciclo de bus. Todos los dispositivos del bus pueden leer la línea de reloj y todos los eventos empiezan al principio del ciclo de reloj. Es más fácil de implementar y comprobar, pero es menos flexible que la asíncrona.

    • Asíncrona, la presencia de un evento en el bus es consecuencia y depende de que se produzca un evento previo. Pueden compartir el bus una mezcla de dispositivos lentos y rápidos, utilizando tanto las tecnologías mas antiguas como las más recientes, que en la síncrona no se puede ya que todos los dispositivos debe utilizar la misma frecuencia de reloj.

    Anchura del bus, afecta a las prestaciones del sistema: cuanto más ancho es el bus de datos, mayor es el número de bits que se transmiten a la vez. La anchura del bus de direcciones afecta a la capacidad del sistema: cuanto más ancho es el bus de direcciones, mayor es el rango de posiciones a las que se puede hacer referencia.

    Tipo de transferencia de datos, todos los buses permiten tanto transferencias de escritura (dato de maestro a esclavo) como de lectura (dato de esclavo a maestro). En el caso de un bus con direcciones y datos multiplexados, el bus se utiliza primero para especificar la dirección y luego para transferir el dato. En una operación de lectura, hay un tiempo de espera mientras el dato se está captando del dispositivo esclavo para situarlo en el bus. Tanto para lectura como escritura, puede haber también un retardo si se usa algún procedimiento de arbitraje para acceder al control del bus en el resto de la operación. Algunos buses también permiten transferencias de bloques de datos.

    PCI P87

    El bus PCI (Interconexión de Componente Periférico) es un bus muy popular de ancho de banda elevado, independiente del procesador, que se puede utilizar como un bus de periféricos. El PCI proporciona mejores prestaciones para los subsistemas de E/S de alta velocidad. El PCI ha sido diseñado específicamente para ajustarse, económicamente a los requisitos de E/S de los sistemas actuales. Se implementa con muy pocos circuitos integrados y permite que otros buses se conecten al bus PCI. Utiliza temporización síncrona y un esquema de arbitraje centralizado. Puede configurarse como un bus de 32 o 64 bits. Tiene 49 líneas de señal obligatorias, las cuales se dividen en grupos funcionales:

    • Terminales de sistema, conformadas por los terminales de reloj y de inicio.

    • Terminales de direcciones y datos, incluye 32 líneas para datos y direcciones multiplexadas en el tiempo. Las otras líneas se usan para interpretar y validar las líneas de señal correspondientes a los datos y las direcciones

    • Terminales de control de interfaz, controlan la temporización de las transferencias y proporcionan coordinación entre los que inician y los destinatarios.

    • Terminales de arbitraje, no son líneas compartidas, cada maestro del PCI tiene su par propio de líneas que lo conectan directamente al arbitro del bus PCI

    • Terminales para señales de error, usadas para indicar errores de paridad u otros

    Además de 51 señales opcionales:

    • Terminales de interrupción

    • Terminales de soporte de caché

    • Terminales de ampliación a bus de 64 bits

    • Terminales de test

    Ordenes, transferencia de datos y arbitraje del PCI

    La actividad del bus consiste en transferencias entre elementos conectados al bus. Maestro es el que inicia la transferencia.

    La transferencia de datos en el bus PCI es una transacción única que consta de una fase de direccionamiento y una o más fases de datos.

    Utiliza un arbitraje centralizado síncrono en el que cada maestro tiene una única señal de petición y cesión del bus, estas se conectan a un árbitro central. El arbitraje se produce al mismo tiempo que el maestro del bus actual está realizando una transferencia de datos, por tanto no se pierden ciclos de bus en realizar el arbitraje; esto es conocido como arbitraje oculto o solapado.

    Clase 9

    Procesadores superescalares P528

    Un procesador superescalar es aquél que usa múltiples cauces de instrucciones independientes. Varios flujos de instrucciones se procesan simultáneamente.

    La supersegmentación aprovecha el hecho de que muchas etapas del cauce realizan tareas que requieren menos de medio ciclo de reloj.

    La aproximación superescalar depende de la habilidad para ejecutar múltiples instrucciones en paralelo. El paralelismo en las instrucciones se refiere al grado en el que, en promedio, las instrucciones de un programa se pueden ejecutar en paralelo. Para maximizar el paralelismo se usan técnicas de hardware u optimizaciones por el compilador. Presenta cinco limitaciones:

    • Dependencia de datos verdadera, cuando una instrucción necesita un dato que aún no terminó de usar/resolver la anterior instrucción

    • Dependencia relativa al procedimiento, presencia de saltos, uso de instrucciones de longitud variable

    • Conflicto en los recursos, es una pugna de dos o más instrucciones por el mismo recurso al mismo tiempo

    • Dependencia de salida

    • Antidependencia

    Paralelismo en las instrucciones y paralelismo de la máquina

    Paralelismo en las instrucciones cuando las instrucciones de una secuencia son independientes y por tanto pueden ejecutarse en paralelo solapándose. Depende de la frecuencia de dependencias de datos verdaderas y dependencias relativas al procedimiento que haya en el código. El paralelismo de la máquina es una medida de la capacidad del procesador para sacar partido al paralelismo en las instrucciones. Depende del número de instrucciones que pueden captarse y ejecutarse al mismo tiempo (número de cauces paralelos) y de la velocidad y sofisticación de los mecanismo que usa el procesador para localizar instrucciones independientes. El empleo de instrucciones con longitud fija, como en un RISC, aumenta el paralelismo en las instrucciones.

    Políticas de emisión de instrucciones

    El procesador tiene que ser capaz de identificar el paralelismo en las instrucciones y organizar la captación, decodificación y ejecución de las instrucciones en paralelo. El procesador intenta localizar instrucciones más allá del punto de ejecución en curso, que puedan introducirse en el cauce y ejecutarse, hay tres ordenaciones importantes:

    • El orden en que se captan las instrucciones

    • El orden en que se ejecutan las instrucciones

    • El orden en que las instrucciones actualizan los contenidos de los registros y de las posiciones de memoria

    La única restricción del procesador, con respecto a la alteración de estos ordenes, es que el resultado debe ser correcto. Categorías de las políticas de emisión de instrucciones en los procesadores superescalares:

    • Emisión en orden y finalización en orden, emite instrucciones en el orden exacto en que lo haría una ejecución secuencial y escribe los resultados en ese mismo orden.

    • Emisión en orden y finalización desordenada, se usa en los procesadores RISC escalares para mejorar la velocidad de las instrucciones que necesitan ciclos. Con la finalización desordenada puede haber cualquier número de instrucciones e la etapa de ejecución en un momento dado, hasta alcanzar el máximo grado de paralelismo de la máquina. La finalización desordenada necesita una lógica de emisión de instrucciones más compleja que la finalización en orden. Además es más difícil ocuparse de las interrupciones y excepciones. El procesador debe asegurarse que la reanudación tiene en cuenta que, en el omento de la interrupción, algunas instrucciones posteriores a la instrucción que provocó dicha interrupción pueden haber finalizado ya.

    • Emisión desordenada y finalización desordenada: con la emisión en orden, el procesador solo decodificará instrucciones hasta el punto de dependencia o conflicto. Un buffer llamado ventana de instrucciones desacopla las etapas del cauce de decodificación y ejecución, entonces cuando un procesador termina de decodificar un instrucción, la coloca en la ventana de instrucciones. Ventajas, el procesador tiene capacidad de anticipación, las instrucciones se emiten desde la ventana de instrucciones sin tener en cuenta su orden en el programa. El programa debe funcionar correctamente, única restricción. Antidependencia, la segunda instrucción destruye un valor que usa la primera instrucción.

    Renombramiento de registros

    Las dependencias de salida y las antidependencias, por su parte, surgen porque los valores de los registros no pueden reflejar ya la secuencia de valores dictada por el flujo del programa; con el renombramiento de registros, el hardware del procesador asigna dinámicamente los registros, que están asociados con los valores que necesitan las instrucciones en diversos instantes de tiempo. Cuando la ejecución de una instrucción guarda un resultado en registro, se almacena en un registro nuevo, se asignan dinámicamente.

    Predicción de saltos, ejecución e implementación superescalar

    Con la llegada de RISC se exploró la estrategia de salto retardado, la cual mantiene lleno el cauce mientras el procesador capta un nueva secuencia de instrucciones. Ocasiona problemas con la dependencias entre instrucciones, en el ciclo de retardo. Los superescalares volvieron a las técnicas de predicción de saltos anteriores a las de los RISC, como la predicción de saltos estática, o una predicción dinámica de saltos basada en el análisis de la historia de los saltos.

    El programa a ejecutar es una secuencia lineal de instrucciones. El proceso de captación de instrucciones, que incluye la predicción de saltos, se usa para formar un flujo dinámico de instrucciones. Se examinan las dependencias de este flujo, u el procesador puede eliminar las que sean artificiales. El procesador envía entonces las instrucciones a una ventana de ejecución. En esta ventana, las instrucciones ya no forman un flujo secuencial sino que están estructuradas de acuerdo a sus dependencias de datos verdaderas. El procesador lleva a cabo la etapa de ejecución de cada instrucción en un orden determinado por las dependencias de datos verdaderas y la disponibilidad de los recursos hardware. Por último las instrucciones se vuelven a poner conceptualmente en un orden secuencial y sus resultados se almacenan.

    Elementos principales de un procesador superescalar:

    • Estrategias de captación de instrucciones que capten múltiples instrucciones al mismo tiempo, prediciendo los resultados de los saltos condicionales y captando más allá de ellas.

    • Lógica para determinar dependencias verdaderas entre valores de registros y mecanismo para comunicar esos valores a donde sean necesarios durante la ejecución

    • Mecanismos para iniciar o emitir múltiples instrucciones en paralelo

    • Recursos para le ejecución en paralelo de múltiples instrucciones, que incluyan múltiples unidades funcionales segmentadas y jerarquías de memoria capaces de atender múltiples referencias a memoria

    • Mecanismos para entregar el estado del procesador en el orden correcto

    Clase 10

    Procesamiento paralelo P669

    El uso de varios procesadores que puedan ejecutar en paralelo una carga de trabajo data incrementa las prestaciones de un sistema. Multiprocesadores simétricos y los clusters, más comunes; sistemas de acceso no uniforme a memoria, nuevo. Un SMP es un computador constituido por varios procesadores similares interconectados mediante un bus o algún tipo de estructura de conmutación. Cuando en un único chip se implementan varios procesadores, se habla de multiprocesador monochip. Los procesadores multihebra consisten en repetir algunos componentes de un procesador para que este pueda ejecutar varias hebras concurrentemente. Un cluster es un grupo de computadoras completos interconectados y trabajando juntos como un solo recurso de cómputo. Computador completo significa que puede funcionar autónomamente, fuera del cluster. Un sistema NUMA es un multiprocesador de memoria compartida en el que el tiempo de acceso de un procesador a una palabra de memoria varía con la ubicación de la palabra en memoria. Los procesadores vectoriales son procesadores paralelos de propósito especifico, diseñados para procesar eficientemente vectores o matrices de datos.

    Tipos de sistemas paralelos

    • Una secuencia de instrucciones y una secuencia de datos (SISD): un único procesador interpreta una única secuencia de instrucciones para operar con los datos almacenados en una única memoria. Los monoprocesadores.

    • Una secuencia de instrucciones y múltiples secuencias de datos (SIMD): una única instrucción máquina controla paso a paso la ejecución simultánea y sincronizada de un cierto número de elementos de proceso. Cada elemento de proceso tiene una memoria asociada, de forma que cada instrucción es ejecutada por cada procesador con un conjunto de datos diferentes. Los procesadores vectoriales y los matriciales.

    • Múltiples secuencias de instrucciones y una secuencia de datos (MISD): se transmite una secuencia de datos a un conjunto de procesadores, cada uno de los cuales ejecuta una secuencia de instrucciones diferente. Nunca ha sido implementada.

    • Múltiples secuencias de instrucciones y múltiples secuencias de datos (MIMD): un conjunto de procesadores ejecuta simultáneamente secuencias de instrucciones diferentes con conjuntos de datos diferentes. Los SMP, clusters y los sistemas NUMA.

    Multiprocesadores simétricos P672

    • 1. Hay dos o más procesadores similares de capacidades comparables.

    • 2. Estos procesadores comparten la memoria principal y las E/S y están interconectados mediante un bus u otro tipo de sistema de interconexión (tiempo de acceso a memoria aproximadamente el mismo para todos los procesadores)

    • 3. Todos los procesadores comparten los dispositivos de E/S, bien a través de los mismos canales o mediante canales distintos que proporcionan caminos de acceso al mismo dispositivo.

    • 4. Todos los procesadores pueden desempeñar las mismas funciones.

    • 5. El sistema está controlado por un sistema operativo integrado que proporciona la interacción entre los procesadores y sus programas a los niveles de trabajo, tarea, fichero y datos.

    Ventajas de un SMP frente a un monoprocesador:

    • Prestaciones: si el trabajo puede organizarse para ejecutarse en paralelo, entonces un sistema con varios procesadores mejorará las prestaciones que con uno solo del mismo tipo.

    • Disponibilidad: debido a que todos los procesadores pueden realizar las mismas funciones, un fallo en un procesador no hará que el computador se detenga.

    • Crecimiento incremental: se aumentan las prestaciones añadiendo más procesadores

    • Escalado: los fabricantes pueden ofrecer una gama variada de productos con precios y prestaciones diferentes en función del número de procesadores que configuran el sistema.

    Bus de tiempo compartido

    Es el mecanismo más simple para construir un sistema multiprocesador.

    • Direccionamiento: debe ser posible distinguir los módulos del bus par determinar la fuente y el destino de los datos

    • Arbitraje: cualquier módulo de E/S puede funcionar temporalmente como un maestro. Utiliza algún tipo de esquema de prioridad.

    • Tiempo compartido: cuando un módulo está controlando el bus, los otros módulos no tienen acceso al mismo y deben, si es necesario, suspender su operación hasta que dispongan del bus.

    La organización del bus:

    • Simplicidad: la interfaz física y la lógica de cada procesador para el direccionamiento, el arbitraje y para compartir el tiempo del bus es el mismo que el de un sistema con un solo procesador

    • Flexibilidad: es sencillo expandir el sistema conectando más procesadores al bus

    • Fiabilidad: el bus es un medio pasivo, y el fallo de cualquiera de los dispositivos conectados no provocaría el fallo de todo el sistema.

    Principal desventaja, las prestaciones. Todas las referencias a memoria pasan por el bus. La velocidad del sistema está limitada por el tiempo de ciclo. Para mejorar las prestaciones, es deseable equipar a cada procesador de una memoria caché. Surge el problema de coherencia de caché, resuelto por el hardware.

    Coherencia de caché

    Las soluciones software de coherencia de caché intentan evitar la necesidad de circuitería y lógica hardware adicional dejando que el compilador y el sistema operativo se encarguen del problema. Los mecanismo de coherencias basados en el compilador realizan un análisis del código y marcan los datos que pueden dar problemas al pasar a caché; después el sistema operativo o el hardware impiden que se pasen a caché los datos marcados como no almacenables en caché. El enfoque más sencillo es impedir que cualquier dato compartido se pase a caché.

    Las soluciones hardware se denominan protocolos de coherencia de caché. Permiten reconocer en tiempo de ejecución las situaciones de inconsistencias potenciales. El problema se considera solo en el momento que aparece. Uso más efectivo de las cachés. Mejora las prestaciones en relaciones a las aproximaciones software. Reduce la complejidad en el desarrollo del software.

    • Protocolos de directorio: Recogen y mantienen la información acerca de dónde residen las copias de las líneas. Tiene un controlador centralizado que es parte del controlador de memoria principal, y un directorio que se almacena en la memoria principal, el cual contiene información de estado global en relación con los contenido de las diferentes cachés locales. Presentan un cuello de botella central y el coste de comunicación entre los controladores de las distintas cachés y el controlador central es otra desventaja. Son efectivos en sistemas de gran escala con múltiples buses.

    • Protocolos de sondeo: Distribuyen la responsabilidad de mantener la coherencia de caché entre todos los controladores de caché del multiprocesador. Una caché debe reconocer cuando un alinea de las que contiene está compartida con otras cachés. Cuando se actualiza una línea de caché compartida, debe anunciare a todas las otras cachés mediante un mecanismo de difusión. Cada controlador de caché es capaz de sondear o espiar la red para observar las notificaciones que se difunden, y reaccionar adecuadamente. Se usa la aproximación de invalidar-si-escritura en multiprocesadores comerciales, se marca el estado de cada línea de caché: modificado, exclusivo, compartido o no-válido (se usan dos bits adicionales).

    Procesamiento multihebra y multiprocesadores monochip

    Con el procesamiento multihebra, la secuencia de instrucciones se divide en secuencias más pequeñas, denominadas hebras, que pueden ejecutarse en paralelo. Un proceso es un programa en ejecución en un computador:

    • Propiedad de recursos: dispone de un espacio de direcciones virtuales para almacenar la imagen del proceso, que consta del programa, los datos, la pila, entre otros. En ocasiones, pueden poseer recursos como la memoria principal, canales de E/S, dispositivos de E/S y ficheros.

    • Planificación/ejecución: sigue un camino de ejecución a través de uno o más programas. Esta ejecución puede entremezclarse con la de otros procesos

    Conmutación de proceso, es la operación que cambia el proceso que se está ejecutando en el procesador por otro proceso. Almacena todos los datos del primero y los reemplaza con la información del segundo.

    Hebra, es una unidad de trabajo dentro de un proceso que se puede asignar al procesador. Se ejecuta secuencialmente y puede interrumpirse para que el procesador pase a ejecutar otra hebra.

    Conmutación de hebra: el control del procesador pasa de una hebra a otra dentro de un mismo proceso. Es menos costosa que la conmutación de procesos.

    El procesamiento multihebra explícito ejecutan concurrentemente instrucciones de hebras explícitas diferentes, entremezclando instrucciones de hebras diferentes en cauces compartidos o mediante ejecución paralela y cauces paralelos. Y el procesamiento multihebra implícito hace referencia a la ejecución concurrente de varias hebras extraídas de un único programa secuencial. Estas pueden ser definidas estáticamente por el compilador o dinámicamente por el hardware.

    Un procesador multihebra debe proporcionar un contador de programa distinto para cada una de las hebras que puedan ejecutarse concurrentemente. Se trata cada hebra separadamente y usa técnicas superescalares para optimizar la ejecución de una hebra.

    Clusters P694

    Un cluster es un grupo de computadores completos interconectados que trabajan conjuntamente como un único recurso de cómputo, creándose la ilusión de que se trata de una sola máquina. Computador completo hace referencia a un sistema que puede funcionar por sí solo, independientemente del cluster. Beneficios:

    • Escalabilidad absoluta: un cluster puede tener decenas de máquinas, cada una de las cuales puede ser un multiprocesador. Es posible configurar clusters grandes que incluso superan las prestaciones de los computadores independientes más potentes.

    • Escalabilidad incremental: un cluster se configura de forma que sea posible añadir nuevos sistemas al cluster en ampliaciones sucesivas.

    • Alta disponibilidad: puesto que cada nodo del cluster es un computador autónomo, el fallo de uno, no significa la pérdida del servicio.

    • Mejor relación precio-prestaciones: es posible configurar un cluster con mayor o igual potencia de cómputo que un computador independiente a mucho menos costo.

    Clusters frente a sistemas SMP P700

    Ambos constituyen configuraciones con varios procesadores que pueden ejecutar aplicaciones con una alta demanda de recursos.

    Ventajas de un SMP:

    • Más fácil de gestionar y configurar que un cluster

    • Está mucho más cerca del modelo de computador de un solo procesador para el que están disponibles casi todas las aplicaciones

    • Necesita menos espacio físico

    • Consume menos energía que un cluster comparable

    • Son plataformas estables y bien establecidas

    Ventajas de los Clusters:

    • Superiores a los SMP en términos de escalabilidad absoluta e incremental

    • Superiores en términos de disponibilidad, todos los componentes del sistema pueden hacerse altamente redundantes

    Acceso no uniforme a memoria

    Acceso uniforma a memoria (UMA): todos los procesadores pueden acceder a toda la memoria principal utilizando instrucciones de carga y almacenamiento. El tiempo de acceso es el mismo para cualquier región de la memoria. El tiempo de acceso a memoria por parte de todos los procesadores es el mismo. SMP es UMA.

    Acceso no uniforme a memoria (NUMA): todos los procesadores tienen acceso a todas las partes de memoria principal utilizando instrucciones de carga y almacenamiento. El tiempo de acceso a memoria depende de la región a la que se acceda. Para procesadores distintos, las regiones de memoria que son más lentas o más rápidas son diferentes.

    NUMA con coherencia de caché (CC-NUMA): un computador NUMA en el que la coherencia de caché se mantiene en todas las cachés de los distintos procesadores.

    Motivación

    En un SMP existe un límite práctico en el número de procesadores que pueden utilizarse. Un esquema de caché reduce el tráfico en el bus. A medida que aumentan los procesadores, el tráfico en el bus también aumenta. A partir de cierto momento, el bus pasa a ser el cuello de botella para las prestaciones. En un cluster cada nodo tiene su propia memoria principal privada y las aplicaciones no ven la memoria global. NUMA retiene las características SMP y brinda multiprocesamiento a gran escala. El objetivo de un computador NUMA es mantener una memoria transparente desde cualquier parte del sistema, al tiempo que se permiten varios nodos del multiprocesador, cada uno con su propio bus u otro sistema de interconexión interna.

    Organización CC-NUMA

    Hay varios nodos independientes, cada uno de los cuales es un SMP. Así cada nodo contiene varios procesadores, cada uno con sus cachés L1 y L2, más memoria principal. Los nodos se interconectan a través de un medio de comunicación que podría ser algún mecanismo de conmutación, un anillo o algún tipo de red. Orden de acceso a memoria, cache L1 y caché L2 son locales al procesador; memoria principal es local al nodo. Toda la actividad de accesos a memoria es automática y transparente al procesador y su caché.

    Organización y arquitectura de computadoras – William Stallings – 7ma. Edición

    P234 = Página 234

     

     

    Autor:

    Juan Ramallo

     

    Partes: 1, 2
     Página anterior Volver al principio del trabajoPágina siguiente