resumen teoría de null - orga 1

Upload: facundo

Post on 07-Jul-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    1/57

    THE VON NEUMANN MODEL

    En las primeras computadoras electrónicas, programar era sinónimo de conectar

    cables. No existía la arquitectura en capas (layered architecture), por lo que

    programar una computadora era más una hazaña de ingeniería eléctrica que un

    ejercicio de diseño de algoritmos. Antes de que su trabajo en la ENIAC estuviera

    completo, John W. Mauchly and J. Presper Eckert concibieron una manera más fácil

    de cambiar el comportamiento de su máquina calculadora.

    Ellos estimaron que los dispositivos de memoria, en la forma de líneas de

    retardo de mercurio, podían proveer una manera de almacenar instrucciones de

    programa. Esto terminaría por siempre con el tedio de recablear el sistema cada

    vez que hubiera un nuevo problema por resolver, o uno viejo por depurar.

    Mauchly y Eckert documentaron su idea proponiéndola como el fundamento de su

    próxima computadora, la EDVAC. Desafortunadamente, mientras estaban envueltos en

    el proyecto altamente secreto de ENIAC durante la segunda guerra mundial,

    Mauchly y Eckert no podían publicar inmediatamente su revelación.

    Tales prohibiciones, no se aplicaban a un número de personas trabajando en la

    periferia del proyecto ENIAC. Una de estas personas era un famoso matemático

    llamado John von Neumann. Después de leer la propuesta de Mauchly y Eckert para

    el EDVAC, von Neumann publicó y publicitó la idea. Expresó el concepto de maneratan efectiva que la historia le ha acreditado su invención. Todas las

    computadoras de programas almacenados han llegado a conocerse como sistemas von

    Neumann usando la arquitectura von Neumann.

    La versión actual de la arquitectura de las computadoras de programas

    almacenados (stored-program), satisface al menos las siguientes características:

    · Consiste de tres sistemas de hardware: una unidad central de proceso (CPU) con

    una unidad de control, una unidad aritmético lógica (ALU), registros (pequeñas

    áreas de almacenamiento), un program counter, un sistema de memoria principal,

    que almacena programas que controlan las operaciones de la computadora, y un

    sistema de entrada y salida I/O).

    · Capacidad para llevar a cabo procesamiento secuencial de instrucciones.· Contiene un solo camino (path), ya sea físico o lógico, entre la memoria

    principal del sistema y la unidad de control del CPU, forzando la alternación de

    ciclos de instrucción y ejecución. Este camino es referido a menudo como el

    cuello de botella von Neumann.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    2/57

     La figura muestra como estas características trabajan juntas en los sistemas de

    computadoras modernos. El sistema pasa todas sus I/O a través de la ALU (en

    realidad a través del acumulador, que es parte de la ALU). Esta arquitectura

    corre programas en lo que se conoce como el ciclo de ejecución von Neumann(también llamado fetch-decode-execute cycle), el cual describe cómo trabaja lamáquina.

    Una iteración de este ciclo es la siguiente:

    1. La unidad de control hace un fetch de la siguiente instrucción del programa dela memoria, usando el PC para determinar la ubicación de la misma.

    2. La instrucción se decodifica en un lenguaje que la ALU puede comprender.3. Cualquier dato (operando) requerido para ejecutar la instrucción es traído dela memoria y ubicado en registros dentro de la CPU.

    4. La ALU ejecuta la instrucción y ubica los resultados en registros o en lamemoria.

    Las ideas presentes en la arquitectura de von Neumann han sido extendidas de

    modo que los programas almacenados en medios de almaceniamento de acceso lento,

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    3/57

    como discos duros, puedan ser copiados a medios de rápido acceso, volátiles,

    como RAM, previo a la ejecución. Esta arquitectura también se ha simplificado en

    lo que actualmente se llama el modelo de sistema de bus system bus model) que

    se muestra en la figura 1.5. El bus de datos mueve datos de la memoria principal

    a los registros del CPU y viceversa. El bus de direcciones contiene la dirección

    del dato a la que el bus de datos está accediendo actualmente. El bus de control

    lleva las señales de control necesarias que especifican cómo debe llevarse a

    cabo la transferencia de la información.

    Otras mejoras a la arquitectura de von Neumann incluyen utilizar registros

    indexados para direccional, agregar datos de punto flotante, usar interruciones

    y I/O asíncronos, agregar memoria virtual y registros generales.

    1.8 NON–VON NEUMANN MODELSHasta recientemente, casi todas las computadoras de propósito general utilizaban

    el dieño de von Neumann. Sin embargo, el cuello de botella de von Neumann

    continúa frustrando a los ingenieros que buscan maneras de construir sistemasmás rápidos que sean económicos y compatibles con el basto cuerpo de software

    comercial disponible. Los ingenieros que no están obligados a mantener

    compatibilidad con los sistemas de von Neumann son libres de usar muchos modelos

    distintis de computar. Un número de subáreas cae en la categoría no-von Neumann,

    incluyendo redes neurales (usando ideas de modelos del cerebro como paradigma de

    computación), algoritmos genéticos (explotando ideas de la biología y la

    evolución del ADN), computación cuántica y computadoras paralelas. Hoy, el

    procesamiento paralelo resuelve algunos de los problemas más grandes casi en el

    mismo modo que los colonos del viejo oeste resolvían sus problemas usando bueyes

    paralelos. Si estaban usando a un buey para mover un árbol y el buey no era lo

    suficientemente grande o fuerte, ciertamente no necesitaban tratar de criar un

    buey más grande, usaban dos bueyes. Si una computadora no es lo suficientementerápida o poderosa, en lugar de tratar de desarrollar una computadora más rápida

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    4/57

    y poderosa, por qué no usar simplemente múltiples computadoras. Esto es

    precisamente lo que hace la computación paralela. Los primeros sistemas de

    procesamiento paralelo se construyeron en los 60 y solo tenían dos procesadores.

    Los 70s vieron la introducción de las supercomputadoras con 32 procesadores y

    los 80s trajeron los primeros sistemas con más de 1000 procesadores. Finalmente

    en 1999, IBM anunció la construcción de una super computadora llamada Blue Gene.

    Este masivo computador paralelo contiene más de un millón de procesadores, cada

    uno con su memoria dedicada. Su primera tarea es analizar el comportamiento de

    moléculas de proteínas.

    Sin embargo, incluso la computación paralela tiene sus límites. A medida que

    aumenta el número de procesadores, también lo hace la sobrecarga de manejar cómo

    las tareas se distribuyen a esos procesadores. Algunos sistemas de procesamiento

    paralelo requieren procesadores extra sólo para manejar el resto de los

    procesadores y los recursos que se les asignan.

    Sin importar cuantos procesadores se pongan en un sistema, o cuantos recursos se

    les asignen, de alguna manera, en algun lugar, un cuello de botella es propenso

    a desarrollarse. Lo mejor que se puede hacer para remediar esto es asegurarse de

    que las partes más lentas del sistema sean las menos utilizadas. Esta es la idea

    detrás de laley de Amdahl,

    que asegura que la mejora obtenida en el rendimiento

    de un sistema debido a la alteración de uno de sus componentes está limitada porla fracción de tiempo que se utiliza dicho componente. La premisa subyacente es

    que cada algoritmo tiene una parte secuencial que en última instancia limita el

    aumento de velocidad que puede ser alcanzado por la implementación del

    multiprocesador.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    5/57

    CAPITULO 6  –  MEMORIA

    La mayoría de las computadoras se constuyen utilizando el modelo de Von Neumann,

    el cual está centrado en la memoria. Los programas que desempeñan el

    procesamiento están almacenados en memoria.

    Examinamos una pequeña memoria de 4x3 bits en el capítulo 3 y aprendimos a

    direccional memoria en los capítulos 4 y 5. Sabemos que la memoria está 

    lógicamente estructurada como un arreglo lineal de locaciones, que se

    direccionan desde 0 hasta la máxima dirección de memoria que el procesador pueda

    direccionar.

    ETC… 

    6.2 TIPOS DE MEMORIAContinuamente se introducen nuevas tecnologías de memoria que tratan de igualar

    las mejoras en el diseño de la CPU  –  la velocidad de la memoria tiene que, de

    alguna forma, mantener el ritmo de la CPU, o la memoria se convierte en un

    cuello de botella.

    Las mejoras en la memoria principal para mantener el ritmo de la CPU no son tan

    críticas debido a la memoria caché. La memoria caché es un tipo de memoria

    pequeña, de alta velocidad (y por lo tanto alto costo), que sirve como buffer

    para datos frecuentemente accedidos. El costo extra de usar tecnologías muyrápidas para la memoria, no siempre puede ser justificado porque memorias más

    lentas pueden “esconderse” detrás de sistemas de caché de alta performance.

    Sin embargo, antes de discutir la memoria caché vamos a ver las diversas

    tecnologías de memoria.

    Aunque existe un largo número de tecnologías de memoria, solo hay dos tipos

    básicos: RAM (random access memory) y ROM (read-only

    memory). RAM es un nombre poco apropiado, más apropiado sería llamarla de

    lectura-escritura. RAM es la memoria a la que se refieren las especificaciones

    de las computadoras. Es también la “memoria principal” a la que continuamente

    hacemos referencia. Frecuentemente llamada memoria primaria, la RAM se utiliza

    para almacenar programas y datos que la computadora necesita al ejecutar

    programas, pero es volátil, y pierde su información una vez que se apaga. Haydos tipos generales de chips que se usan para construir el cuerpo de la memoria

    RAM en las computadoras de hoy: SRAM y DRAM (static y dynamic RAM)

    La RAM dinámica está construida de pequeños capacitores que pierden electricidad.

    La DRAM requiere una recarga cada tantos milisegundos para mantener sus datos.

    En contraste, la tecnología estática, mantiene su contenido mientras haya

    electricidad. La SRAM consiste en circuitos similares a los flip-flops D, es más

    rápida y mucho más cara que la DRAM, sin embargo, los diseñadores usan DRAM

    porque tiene mayor densidad (puede almacenar más bits por chip), usa menos

    energía, y genera menos calor que la SRAM. Por estas razones, ambas tecnologías

    usualmente se combinan: DRAM para memoria principal y SRAM para caché. La

    operación básica de todas las memorias DRAM es básicamente la misma, pero hay“muchos sabores” incluyendo:

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    6/57

    Multibank DRAM (MDRAM), Fast-Page Mode (FPM) DRAM, Extended

    Data Out (EDO) DRAM, Burst EDO DRAM (BEDO DRAM), Synchronous

    Dynamic Random Access Memory (SDRAM), Synchronous-Link (SL) DRAM,

    Double Data Rate (DDR) SDRAM, and Direct Rambus (DR) DRAM.

    Los diferentes tipos de SRAm incluyen SRAM sincrónica, asincrónica y pipeline

    Bursa SRAM.

    Además de la RAM, la mayoría de las computadoras contienen una pequeña cantidad

    de ROM que almacena información crítica necesaria para operar el sistema como la

    lo necesario para arrancar la computadora. ROM no es volátil y siempre mantiene

    los datos. Este tipo de memoria es utilizada también en sistemas embebidos o

    cualquier sistema donde la programación no necesita cambiar. Muchos

    electrodomésticos, juguetes y la mayoría de los automóviles utilizan chips de

    ROM para mantener la información cuando no hay energía. Las ROM se utilizan

    también en calculadoras y periféricos, como impresoras laser que almacenan sus

    fuentes en ROMs. Hay cinco tipos básicos diferentes de ROM:

    ROM, PROM, EPROM, EEPROM y memoria flash.

    PROM (programmable read-only memory) es una variante de la ROM. PROMs pueden

    ser programadas por el usuario con el equipo apropiado, mientras que las ROMS

    son hardwired, las PROMs tienen fusibles que pueden fundirse para programar elchip. Una vez programado, los datos e instrucciones en los PROM no pueden

    cambiarse.

    EPROM (erasable PROM) es programable, con la ventaja de que es reprogramable

    (borrar una EPROM requiere una herramienta especial que emite luz ultravioleta).

    Para reprogramar la EPROM, todo el chip tiene que ser borrado primero.

    EEPROM (electrically erasable PROM) elimina muchas de las desventajas de la

    EPROM: no se requieren erramientas especiales para borrarla (esto se realiza

    aplicando un campo eléctrico) y se pueden borrar solo porciones del chip, un

    byte por vez.

    Flash memory es escencialmente EEPROM con el beneficio agregado de que lainformación puede ser escrita o borrada en bloques, eliminando la limitación de

    “un byte por vez”. Esto hace que la memoria flash sea más rápida que la EEPROM.

    6.3 JERARQUIA DE LA MEMORIAUna de las consideraciones más importantes para comprender las capacidades de

    performance de un procesador moderno es la jerarquía de la memoria.

    Desafortunadamente, como hemos visto, no toda la memoria se crea de la misma

    manera, y algunos tipos son mucho menos eficientes y por lo tanto más baratos

    que otros. Para manejar esta disparidad, los sistemas de las computadoras

    actuales usan una combinación de tipos de memoria para proveer la mejor

    performance al mejor costo. Este enfoque se llama memoria jerárquica

    Como regla, cuando más rápida es la memoria, más caro es su costo por bit dealmacenamieto. Utilizando una jerarquía de memorias, cada una con distintas

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    7/57

    velocidades de acceso y capacidades de almacenamiento, un sistema de computadora

    puede exhibir performance por sobre lo que sería posible sin una combinación de

    los varios tipos. Los tipos básicos que normalmente constituyen la memoria

    jerárcica incluyen registros, caché, memoria principal y memoria secundaria. En

    cada una de las computadoras actuales hay una pequeña porción de memoria de muy

    alta velocidad llamada caché, donde los datos de locaciones de memoria

    frecuentemente utilizados pueden estar temporalmente almacenados. Esta caché es

    conectada a una mucho más grande memoria principal, la cual es típicamente de

    mediana velocidad. Esta memoria es complementada por una más grande aún memoria

    secundaria, compuesta de un disco rígido y varios medios removibles. Utilizando

    un sistema jerárquico, uno puede mejorar la velocidad de acceso efectiva de la

    memoria, usando solo un pequeño número de chips rápidos (y caros). Esto permite

    a los diseñadores crear una computadora con performance aceptable a un costo

    razonable.

    Clasificamos la memoria de acuerdo a su “distancia” del procesador, con la

    distancia medida por el número de ciclos de máquina requeridos para el acceso.

    Cuando más cerca está la memoria del procesador, más rápido debería ser. A

    medida que la memoria se aleja del procesador principal, podemos afrontar

    tiempos de acceso más largos.

    De este modo, las tecnologías más lentas se utilizan para estas memorias, y lasmás rápidas se utilizan para memorias más cerca de la CPU. Cuanto mejor es la

    tecnología, más rápida y más cara se vuelve la memoria. Así, las memorias más

    ràpidas tienden a ser más pequeñas que las más lentas, debido al costo.

    La siguiente terminología se utiliza para referirse a esta jerarquía de memoria:

    • Hit—El dato requerido reside en un nivel de memoria dado (típicamente, nos

    importa el hit-rate solo en niveles más altos de memoria)

    • Miss—El dato requerido no se encuentra en el nivel dado de memoria.

    • Hit rate—El porcentaje de accesos a memoria encontrados en un nivel de memoria

    dado.

    • Miss rate—El porcentaje de accesos a memoria no encontrados en un nivel de

    memoria dado. Miss Rate = 1 - Hit Rate.

    • Hit time—El tiempo requerido para acceder a la información en un nivel dado dememoria.

    • Miss penalty—El tiempo requerido para procesar un miss, el cual incluye

    remplazar un bloque en un nivel de memoria superior, más el tiempo adicional

    para entregar los datos solicitados al procesador. (El tiempo para procesar un

    miss es típicamente significantmente más largo que el tiempo para procesar un

    hit.)

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    8/57

     

    Este dibujo en forma de pirámide nos ayuda a indicad los tamaños relativos de

    estas varias memorias. Las memorias más cercanas al tope tienden a ser menores

    en tamaño, sin embargo, estas memorias más pequeñas tienen mayor performance y

    por lo tanto mayor costo (por bit) que las memorias que se encuentran más abajo

    en la pirámide.

    Los números a la izquierda indican tiempos de acceso típicos. Para cualquier

    dato dado, el procesador envía su pedido a la partición más rápida y pequeña de

    memoria (típicamente caché, porque los registros tienden a ser de propósito más

    especial). Si el dato se encuentra en caché, puede ser cargado rápidamente en la

    CPU. Si no, el pedido es reenviado al siguiente nivel más abajo en la jerarquía

    y el proceso de búsqueda comienza nuevamente. Si el dato se encuentra en este

    nivel, todo el bloque en el que reside el dato es transferido a caché. Si no, el

    pedido se reenvía al siguiente nivel más abajo, y así sucesivamente.

    La idea clave es que cuando el más bajo (lento, grande, y barato) de los niveles

    de jerarquía responde a un pedido de más altos niveles por el contenido de la

    locación X, también envíe, al mismo tiempo, los datos localizados en las

    direcciónes X+1, X+2… devolviendo de este modo un bloque completo de datos al

    nivel mayor de memoria. La esperanza es que estos datos extras sean

    referenciados en el futuro cercano, lo cual, en la mayoría de los casos, sucede

    así.

    La jerarquía de la memoria es funcional porque los programas tienden a presentar

    una propiedad conocida comolocalidad

    la cual frecuentemente permite al

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    9/57

    procesador acceder a los datos devueltos por las direcciones X+1, X+2 y así 

    sucesivamente. De este modo, aunque haya un miss para el, digamos caché, para X,

    puede que haya varios hits en caché con el recientemente devuelto bloque, debido

    a la localidad.

    6.3.1 Localidad de las referenciasEn la práctica, los procesadores tienden a acceder a la memoria en siguiendo unpatrón. Por ejemplo, en ausencia de bifurcaciones, el PC en MARIE es

    incrementado en uno después de cada fetch. De este modo, si se accede a la

    posición de memoria X en un tiempo t, hay una alta probabilidad que la posición

    de memoria X+1 sea accedida en un futuro cercano. Esta agrupación de referencias

    a memoria es un ejemplo de localidad de referencias. Esta localidad puede ser

    explotada implementando la memoria como jerarquía; cuando se procesa un miss, en

    lugar de simplemente transferir el dato solicitado a un nivel más alto, el

    bloque completo que contiene el dato es transferido. Debido a la localidad de

    referencia, es probable que los datos adicionales en el bloque se necesiten en

    un futuro cercano, y de ser así, estos datos pueden ser cargados rápidamente de

    la memoria más rápida.

    Hay tres formas básicas de localidad:

    • Temporal locality—Localidad temporal: Datos accedidos recientemente tienden aser accedidos nuevamente en el futuro cercano.

    • Spatial locality—Localidad espacial: Los accesos tienden a estar agrupados en elespacio de direcciones (por ejemplo en arreglos o loops)

    • Sequential locality—Localidad secuencial: las instrucciones tienden a seraccedidas secuencialmente.

    El principio de localidad provee la oportunidad para un sistema de usar una

    pequeña cantidad de memoria muy rápida para efectivamente acelerar la mayoría de

    los accesos a memoria.

    Típicamente, solo una pequeña cantidad del espacio completo de memoria está 

    siendo accedido en un tiempo dado, y los valores en ese espacio se accedenrepetidamente. De esta forma, podemos copiar esos valores de una memoria más

    lenta a una más pequeña pero más rápida que se encuentra más alta en la

    jerarquía. Esto resulta en un sistema de memoria que puede almacenar una larga

    cantidad de información en una gran memoria de bajo costo, y aún provee casi las

    mismas velocidades de acceso que resultarían de usar una memoria muy rápida pero

    muy cara.

    6.4 MEMORIA CACHÉEl procesador de una computadora es muy rápido y está constantemente leyendo

    información de la memoria, lo que significa que frecuentemente tiene que esperar

    a que llegue la información, porque los tiempos de acceso de la memoria son máslentos que la velocidad del procesador. Una memoria caché es una pequeña,

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    10/57

    temporaria, pero rápida memoria que el procesador usa para información que es

    probable que necesite en un futuro muy cercano.

    Existen muchísimos ejemplos de caching fuera de las computadoras. Mantenerlos en

    mente ayuda a entender el caching de la memoria de la computadora.

    Pensemos en el dueño de una casa con un baúl muy grande de herramientas en el

    garage. Supongamos que tenemos que hacer un arreglo en el sótano. Sabemos que

    este arreglo va a requerir taladros, llaves inglesas, martillos, cinta métrica,

    varios tipos de sierras y varios tipos y tamaños de destornilladores. Lo primero

    que hay que hacer es medir y cortar madera. Vamos a la cochera, tomamos la cinta

    métrica del baúl de herramientas, volvemos corriendo al sótano, medimos la

    madera, volvemos al garage, dejamos la cinta, agarramos la sierra, volvemos al

    sótano, cortamos la madera. Ahora decidimos atornillar las maderas. Vamos al

    garage, agarramos el taladro, volvemos al sótano, agujereamos la madera,

    volvemos al garage, dejamos el taladro agarramos una llave, volvemos al sótano,

    vemos que la llave es del tamaño equivocado, volvemos al garage, agarramos otra,

    volvemos a bajar…. ¿Trabajarías de este modo? No!

    Siendo una persona razonable pensas “si necesito una llave, es posible que

    necesite una de otro tamaño muy pronto, así que agarramos todo el set de llaves”,

    mejor aún “una vez que haya terminado con cierta herramienta seguramentenecesitaré otra, así que juntamos una pequeña caja de herramientas y la llevamos

    al sótano”. De este modo, mantenemos las herramientas que necesitamos más cercas,

    para tenerlas rápido. Hemos agarrado algunas de las herramientas para fácil y

    rápido acceso. Las herramientas que es menos probable que usemos, permanecen

    almacenadas en el lugar que está más lejos y requiere más tiempo de acceso.

    Esto es lo que hace la memoria caché: almacena datos que han sido accedidos y

    datos que es posible que sean accedidos por el CPU en una memoria más rápida y

    más cercana.

    Otra analogía del caché está en la compra de comestibles: Rara vez vamos a

    comprar un solo item, compramos los que vamos a requerir de inmediato y los que

    posiblemente necesitemos en el futuro. La tienda es similar a la memoria

    principal, tu casa es el caché.Más ejemplos: guía telefónica y agenda; cuando los estudiantes hacen

    investigaciones, van a la librería (memoria principal) y traen a su casa

    (memoria caché) todos los libros que podrían llegar a necesitar; oficina cajones

    (memoria principal) escritorio desorganizado (memoria caché)

    La memoria caché trabaja con los mismos principios básicos que los ejemplos

    anteriores, copiando datos utilizados frecuentemente en el caché, más que

    requiriendo accesos a memoria para obtener los datos. La caché puede ser tan

    desorganizada como un escritorio y organizada como una agenda. De cualquier

    forma, los datos deben ser accesibles (locatable). La memoria caché en unacomputadora difiere de los ejemplos cotidianos en un modo muy importante: La

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    11/57

    computadora realmente no tiene forma de saber, a priori, cuales son los datos

    más probables de ser accedido, así que usa los principios de localidad y

    transfiere bloques enteros de la memoria principal al caché siempre que tiene

    que hacer accesos a memoria. Si la probabilidad de usar algo más en ese bloque

    es alta, entonces, tranferir el bloque completo ahorra tiempos de acceso. La

    ubicación de este bloque en memoria caché depende de dos cosas: La política de

    mapeo del caché, y el tamaño (que afecta al espacio que hay para el nuevo

    bloque).

    El tamaño de la memoria caché varía enormemente. En una computadora personal

    típica, el caché de nivel 2 (L2) es de 256K o 512K. La caché de nivel 1 (L1) es

    más pequeña, típicamente 8K o 16K. L1 se encuentra en el procesador, mientras

    que la L2 reside entre el CPU y la memoria principal. L1, por lo tanto, es más

    rápida que L2. La relación entre estas dos puede ilustrarse usando el ejemplo

    del almacén, si el almacén es la memoria principal, la heladera es la caché L2 y

    la mesa la caché L1.

    El propósito de la caché es acelerar los accesos a memoria almacenando data

    recientemente utilizada más cerca al CPU, en lugar de almacenarlo en memoria

    principal. Aunque la caché no sea tan larga como la memoria principal es

    considerablemente más rápida. Mientras que la memoria principal está compuesta

    típicamente de DRAM con, digamos, 60ns de tiempo de acceso, la caché está típicamente compuesta de SRAM, proveyendo más rápido acceso con un ciclo mucho

    más corto de tiempo que la DRAM (un típico tiempo de acceso a caché es de 10ns).

    La caché no nececesita ser muy grande para desempeñarse bien. La regla de oro

    general es hacer la caché lo suficientemente pequeña para que el costo por bit

    se acerque a la memoria principal, pero lo suficientemente grande para ser

    beneficiosa. Como esta memoria más rápida es más cara, no es viable usar la

    tecnología encontrada en la memoria caché para construir toda la memoria

    principal.

    ¿Qué hace “especial” a la caché? La caché no se accede por direcciones si no por

    su contenido. Por esta razón a veces se la llama “memoria de contenido

    direccionable” (content addressable memory o CAM). Bajo la mayoría de los

    esquemas de mapeo de la caché, las entradas deben ser chequeadas o buscadas paraver si el valor que se requiere está almacenado en la caché. Para simplificar

    este proceso de encontrar el dato deseado, se utilizan muchos algoritmos de

    mapeo.

    6.4.1 Esquemas de mapeo de la cachéPara que la caché sea funcional, debe almacenar datos útiles. Sin embargo, estos

    datos se vuelven inútiles si el CPU no puede encontrarlos. Cuando accede a datos

    o instrucciones, el CPU primero genera una dirección de memoria principal. Si el

    dato se ha copiado en el caché, la dirección del dato en el caché no es la misma

    que en la memoria principal. Por ejemplo, el dato que se encuentra en la

    dirección de memoria principal 2E3 podría estar ubicado en la primer ubicación

    del caché. ¿Cómo encuentra entonces el CPU los datos cuando han sido copiados

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    12/57

    al caché? El CPU utiliza un esquema de mapeo específico que “convierte” las

    direcciones de memoria principal en una ubicación de caché.

    Esta conversión se hace dando especial significado a los bits en la dirección de

    memoria principal. Primero dividimos los bits en distintos grupos que llamamos

    campos. Dependiendo del esquema de mapeo puede haber dos o tres campos. Cómo los

    utilizamos depende de el esquema de mapeo particular que estemos usando. El

    esquema de mapeo determina donde se ubica el dato cuando es copiado

    originalmente al caché y también provee un método para que la CPU encuentre

    datos previamente copiados cuando busca en el caché. La memoria principal y el

    caché están ambos divididos en el mismo tamaño de bloques (el tamaño de estos

    bloques varía). Cuando se genera una dirección de memoria principal, primero se

    busca en el caché para ver si la palabra solicitada está ahí. Cuando la palabra

    no es encontrada en caché, todo el bloque de memoria en el que reside la palabra

    es cargado en el caché. Como se mencionó anteriormente, este esquema es existoso

    por el principio de localidad  –  si una palabra ha sido referenciada, hay una

    alta probabilidad de que las palabras en la misma vecindad general sean

    referenciadas también. De esta forma, una palabra perdida usualmente resulta en

    muchas palabras encontradas.

    Por ejemplo, cuando estás en el sótano y necesitás herramientas por primera vez,tenés un “miss” y tenes que ir al garage. Si juntás un grupo de herramientas que

    podrías necesitar y volvés al sótano, esperas tener varios “hits” mientras

    trabajás en tu proyecto, y no tener que hacer muchos viajes más al garage.

    Como acceder a una palabra en caché es más rápido que acceder a una palabra en

    memoria principal, la memoria caché acelera el tiempo total de acceso.

    Así que ¿cómo utilizamos los campos en la dirección de memoria principal? Uno de

    los campos apunta a la ubicación en caché en donde reside el dato si es que está 

    en caché (caché hit), o donde tiene que ser ubicado si no está (caché miss).

    Esto es un poco diferente para el mapeo asociativo.

    El bloque de caché referenciado se chequea para ver si es válido. Esto se hace

    asociando un valid bit a cada bloque de caché. Si el bit es 0 significa que esebloque no es válido (tenemos un miss) y debemos acceder a la memoria. Si es 1

    significa que es válido (podríamos tener un hit pero falta un paso más para

    estar seguros). Entonces, comparamos el tag en el bloque de caché a el campo tag 

    de nuestra dirección. (El tag es un grupo especial de bits que se deriva de la

    dirección de memoria principal y es almacenado con su correspondiente bloque en

    caché). Si los tags son iguales entonces encontramos el bloque deseado (tenemos

    un hit). En este punto, tenemos que encontrar la palabra deseada en el bloque.

    Esto puede hacerse utilizando una porción diferente de la dirección de memoria

    principal llamadacampo de palabra.

    Todos los mapeos de caché requieren un campo

    de palabra; sin embargo, los campos restantes son determinados por el esquema de

    mapeo. Veremos tres de estos posibles esquemas:

    Caché de mapeo directo

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    13/57

    La caché de mapeo directo asigna “caché mappings” utilizando un enfoque modular.

    Como hay más bloques en memoria principal que en Caché, debería quedar claro que

    los bloques de memoria principal compiten por ubicaciones de caché. El mapeo

    directo mapea el bloque X de memoria principal al bloque Y de caché, mod N donde

    N es el número total de bloques en caché. Por ejemplo, si el caché tiene 10

    bloques entonces el bloque 0 de memori principal mapea al bloque 0 de caché, el

    1 al 1,…, el 9 al 9, y el 10 al 0. Esto se ilustra en la figura 6.2 De este

    modo, los bloques 0 y 10 (y 20, 30, etc) todos compiten por el bloque 0. ¿Cómo

    sabe la caché que bloque se encuentra residiendo en el bloque de caché 0 en un

    tiempo dado? La respuesta es que cada bloque se copia a la caché y se identifica

    con el tag previamente descripto. Si miramos más de cerca la caché, almacena más

    que solo los datos copiados por la memoria. Como se indica en la figura 6.3. En

    esta figura hay dos bloques válidos, el bloque 0 contiene multiples palabras de

    la memoria principal identificadas usando el tag “00000000”. El bloque 1 tiene

    las palabras identificadas con el tag“11110101”. Los otros dos bloques de

    caché no son válidos.

    Comentario:Buscar trad

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    14/57

     

    Para realizar el mapeo directo, la dirección de memoria principal en binario es

    particionada en los campos que muestra la figura 6.4.

    El tamaño de cada campo depende de las características físicas de la memoria

    principal y del caché. El campopalabra

    (a veces llamado el campooffset

    )

    identifica unívocamente una palabra de un bloque específico; de este modo, debe

    contener el número de bits apropiado para hacer esto. Esto también es cierto

    para el campobloque

      –  debe seleccionar un bloque único en la caché. El campo

    tag son los bits restantes. Cuando un bloque de memoria principal se copia al

    caché, este tag es almacenado con el bloque y unívocamente identifica a estebloque. El total de los tres campos debe por supuesto sumar el número de bits en

    una dirección de memoria principal.

    Ejemplo: supongamos que la memoria tiene 214 palabras, el caché 16 bloques y cada

    bloque 8 palabras. De esto determinamos que la memoria tiene 211 bloques. Sabemos

    que cada dirección de memoria requiere 14 bits. De estos 14 bits los 3 que están

    más a la derecha reflejan el campo de la palabra (necesitamos 3 bits para

    identificar unívocamente a las 8 palabras del bloque). Necesitamos 4 bits para

    seleccionar un bloque específico en la caché, por lo que el campo del bloque

    consiste en los 4 bits del medio. Los restantes 7 son el campo tag.

    Como se mencionó anteriormente, el tag para cada bloque se almacena con ese

    bloque en caché. En este ejemplo, como los bloques de memoria principal 0 y 16

    ambos mapean al bloque 0 del cache, el campo tag le permite al sistema

    diferenciar entre los bloques 0 y 16. Las direcciones binarias del bloque cero

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    15/57

    difieren de las del blque 16 en los 7 bits más a la izquierda, por loque los

    tags son diferentes y únicos.

    Para ver como difieren estas direcciones, miremos un ejemplo más pequeño.

    Supongamos que tenemos un sistema que usa mapeo directo con 16 palabras en

    memoria principal dividido en 8 bloques (2 palabras por bloque). Asmiendo que la

    caché es de 4 bloques en tamaño (total 8 palabras), sabemos:

    - Una dirección de memoria tiene 4 bits

    - Los cuatro bits se dividen en tres campos. El de la palabra es de un bit (solo

    necesitamos un bit para diferenciar las dos palabras del bloque); el campo del

    bloque es de 2 bits (para diferencias 4 bloques en memoria principal); el tag es

    de 1 bit (el restante).

    Supongamos que generamos la dirección de memoria principal 9. Podemos ver por el

    mapeo que está en el bloque 4 de memoria principal y debería mapear al bloque 0

    (lo cual significa que los contenidos en el bloque de memoria principal 4

    deberían copiarse al bloque de caché 0). La computadora, sin embargo, utiliza la

    dirección actual de memoria para determinar el bloque de mapeo del cache. Este

    dirección en binario es: 1001. Cuando el CPU genera esta dirección primero toma

    los bits del campo de bloque 00 y los usa para dirigirlo al bloque apropiado en

    caché. 00 indica bloque 0. Si el tag del caché es 1, entonces el bloque 4 ya se

    encuentra actualmente en el bloque de caché. Si el tag es 0 entonces el bloque 0

    de memoria principal se encuentra en el bloque 0 de caché. Asumiendo que lostags son iguales, lo cual significa que el bloque 4 de memoria principal con las

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    16/57

    direcciones 8 y 9 reside en el bloque de caché 0, el campo de la palabra, 1, se

    usa para seleccionar una de las dos palabras del bloque. Como el bit es uno

    seleccionamos la palabra con offset 1 lo cual resulta en la devolución de los

    datos copiados de la dirección de memoria principal 9.

    Si tenemos un sistema con direcciones de memoria de 15 bits y 64 bloques de

    caché cada uno de 8 palabras. Tenemos un campo de palabra de 3 bits, un campo de

    bloque de 6 bits y un campo de tag de 6 bits.

    2

    15

     direcciones, direccionamiento a palabra, 2

    6

     bloques/lineas en caché cada uno

    con 2

    3

     palabras => 2

    9

     palabras en cach

    é => 2

    15

    /2

    9

     = 2

    6

     bloques de memoria

    principal ¿? Tag 6)

    Fully Assoc iative CacheLa caché de mapeo directo no es tan cara como otras porque el esquema de mapeo

    no requiere de ninguna búsqueda. Cada bloque de memoria principal tiene una

    ubicación específica a la que se mapea en caché; cuando una dirección de memoria

    principal se convierte en una dirección de caché, el CPU sabe exactamente donde

    buscar en el caché ese bloque de memoria, simplemente examinando el campo del

    bloque. Esto es similar a las agendas, donde las páginas tienen un índicealfabético.

    En lugar de especificar una dirección única para cada bloque de memoria, podemos

    ver el extremo opuesto: permitir que un bloque de memoria principal de aloje en

    cualquier parte del caché. El único modo de encontrar un bloque mapeado de este

    modo, es buscar en toda la caché. Esto requiere que toda la caché sea construida

    de memoria asociativa así puede buscarse en paralelo. Esto es, una simple

    búsqueda debe comparar el tag solicitado con todos los tags en caché para

    determinar si el bloque deseado está en caché. La memoria asociativa requiere

    hardware especial para permitir la búsqueda asociativa y, por lo tanto, es

    bastante cara. Usando mapeo asociativo, la dirección de memoria principal se

    particiona en dos, el tag y la palabra.

    Por ejemplo con una memoria principal de 214 palabras, una caché con 16 bloquesde 8 palabras cada uno, el campo de palabra es 3, pero ahora el campo tag es de

    11 bits.

    Este tag debe ser almacenado con cada bloque en caché. Cuando se busca en caché 

    por un bloque especifico de memoria principal, el campo tag de la dirección se

    compara con todos los tags válidos en caché; si se encuentra una coincidencia el

    bloque ha sido encontrado (el tag identifica unívocamente a un bloque de memoria

    principal). Si no hay coincidencias, entonces tenemos un miss y el bloque debe

    ser transferido de memoria principal.

    Con el mapeo directo, si un bloque ya esta ocupando la posición de caché en la

    que un nuevo bloque debería ser ubicado, el bloque que está en caché debe

    eliminarse (escribirse devuelta a memoria principal si fue modificado, o

    sobrescribirlo si no fue modificado). Con el mapeo totalmente asociativo, cuandose llena la caché, necesitamos un algoritmo de reemplazo para decidir qué bloque

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    17/57

    vamos a sacar del caché (lo llamamos elvictim block

    ). Un sencillo algoritmo

    FIFO podría funcionar, como también LRU. Existen muchos algoritmos de reemplazo

    que pueden utilizarse.

    Set Associative CacheDevido a su velocidad y complejidad, la caché asociativa es muy cara. Aunque el

    mapeo directo no es caro es muy restrictivo. Para ver como el mapeo directo

    limita el uso de la caché, supongamos que estamos corriendo un programa en laarquitectura descripta en ejemplos anteriores. Supongamos que el programa está 

    usando el bloque 0, después el 16, después el 0 después el 16 y así sucesivamente

    cuando ejecuta instrucciones. Como ambos bloques mapean a la misma dirección,

    significa que el programa repetidamente va a tirar el 0 para traer el 16 y

    viceversa, aunque el resto de los bloques de la caché no estén siendo utilizados.

    La caché totalmente asociativa soluciona este problema permitiendo que el bloque

    de memoria se ubique en cualquier lado. Sin embargo, requiere que un tag más

    largo se almacene con el bloque (lo cual resulta en una caché más grande) además

    de requerir hardware especial para buscar simultáneamente en todos los bloques

    de la caché (lo que implica una caché mucho más cara). Necesitamos un esquema

    intermedio.

    El tercer esquema de mapeo que introducimos es el de mapeo de caché asociativopor conjuntos de n vias

    (N-way set associative cache mapping), una combinación de

    los dos anteriores. Este esquema es similar al mapeo directo ya que usa la

    dirección para mapear el bloque a una cierta ubicación de caché.

    La diferencia importante es que en lugar de mapear a un único bloque de caché,

    las direcciones mapean a un conjunto de varios bloques de caché. Por ejemplo, en

    el caché asociativo por conjuntos de dos vías, hay dos bloques de caché por set.

    La caché de mapeo directo es un caso especial de asociatia por conjuntos de N-

    vías donde el tamaño del set es 1.

    En el mapeo asociativo por conjuntos la memoria principal se particiona en tres:

    el campo tag, el campo set y el campo palabra. El tag y la palabra tienen el

    mismo rol que en los ejemplos anteriores. El campo set indica a que set de la

    caché mapea el bloque de memoria principal. Supongamos que estamos usando mapeo

    asociativo por conjuntos de dos vias. Con una memoria principal de 214 palabras,

    una caché de 16 bloques cada bloque con 8 palabras. Si cada set tiene dos

    bloques entonces hay 8 sets en caché, por lo tanto, el campo set es de 3 bits,el campo palabra es de 3 bits y el tag de 8 bits.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    18/57

    6.4.2 Políticas de reemplazoEn la caché de mapeo directo, si hay disputa por un bloque en caché hay una

    única acción posible: eliminar el bloque existente para hacer espacio para el

    nuevo. Este proceso se llama reemplazo. Con el mapeo directo, no se necesitan

    políticas de reemplazo porque la ubicación para cada nuevo bloque está 

    predeterminada.

    Sin embargo, para la caché totalmente asociativa y la asociativa por conjuntos,

    necesitamos políticas de reemplazo para determinar el bloque “víctima” que será removido de la caché. Cuando usamos caché totalmente asociativa hay K posibles

    locaciones (donde K es el número de bloques en caché) para los cuales una

    dirección de memoria principal dada podría mapear. Con el caché de mapeo

    asociativo por conjuntos de N-vías, un bloque puede mapear a cualquiera de los N

    bloques diferentes en un set dado.

    El algoritmo que determina el reemplazo se llama “política de reemplazo”.

    Hay varias politicas de reemplazo populares. Una que no es práctica que puede

    usarse como punto de referencia (benchmark) para medir a todas las demás es el

    algoritmo óptimo

    Queremos mantener valores en caché que van a necesitarse

    pronto nuevamente y deshacernos de aquellos bloques que no volveremos a

    necesitar o que no necesitaremos por algún tiempo. Un algoritmo que pudiera

    mirar a futuro para precisar cuales bloques mantener o eliminar en base a estosdos criterios sería el mejor. Esto es lo que hace el algoritmo óptimo. Queremos

    reemplazar el bloque que no va a ser usado por mayor tiempo a futuro.

    Desde un punto de vista práctico no podemos mirar en el futuro, pero podemos

    correr un programa y volver a correrlo para, efectivamente, conocer el futuro.

    Luego podríamos aplicar el algoritmo óptimo en la segunda corrida. El algoritmo

    óptimo garantiza la taza más baja posible de miss. Como no podemos ver el futuro

    en cada programa que corremos, el algoritmo óptimo solo se usa como medida para

    determinar cuan bueno o malo es otro algoritmo. Cuanto más se acerca el

    desempeño al algoritmo óptimo, mejor.

    Necesitamos algoritmos que se aproximen lo mejor posible al algoritmo óptimo.

    Tenemos varias opciones. Por ejemplo, podríamos considerar la localidad temporal.

    Podemos adivinar que cualquier valor que no ha sido usado recientemente es pocoprobable que se vuelva a necesitar pronto. Podemos mantener un registro de la

    última vez a la que cada bloque fue accedido (asignarle un timestamp al bloque),

    y elegir como víctima el bloque que ha sido menos utilizado recientemente. Este

    es el algoritmo LRU. Desafortunadamente LRU requiere que el sistema mantenga la

    historia de accesos por cada bloque de caché lo cual requiere un espacio

    significante y disminuye la velocidad de operación del caché. De todas formas,

    hay maneras de aproximarse al LRU.

    FIFO es otro enfoque popular. Con este algoritmo, el bloque que ha estado en

    caché por mas tiempo (sin importar cuan recientemente haya sido usado) se

    selecciona como víctima para remover del caché.

    Otro enfoque es RANDOM El problema con LRU y FIFO es que hay situaciones de

    referenciacion degeneradas que pueden hacer que constantemente estemos tirandoun bloque y volviendolo a traer a memoria repetidamente.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    19/57

    Alguna personas dicen que el reemplazo aleatorio, aunque a veces tira datos que

    serán necesitados pronto, nunca “colapsa” 

    Desafortunadamente, es dificil tener un verdadero algoritmo de reemplazo

    aleatorio, porque puede disminuir el desempeño promedio.

    El algoritmo elegido por lo general depende de cómo será usado el sistema. No

    hay un único algoritmo (práctico) que sea el mejor para todos los escenarios.

    Por esa razón los diseñadoras usan algoritmos que se desempeñan bien en una

    amplia variedad de circunstancias.

    6.4.3 Tiempo de acceso efectivo y tasa de hitLa performance de la memoria jerárquica se mide por su tiempo de acceso efectivo

    (EAT), o por el tiempo promedio por acceso. EAT es una medida ponderada promedio

    que usa el hit ratio y los tiempos relativos de acceso de los sucesivos niveles

    de la jerarquía.

    Por ejemplo, supongamos que cada tiempo de acceso a caché es de 10ns, el tiempo

    de acceso a memoria principal es de 200ns y el hit rate es de 99%. El tiempo

    promedio que le toma al procesador acceder a un item en su memoria de segundo

    nivel sería entonces:

    Si miramos a los tiempos de acceso durante un largo período de tiempo, este

    sistema se desempeña como si tuviera una única gran memoria con un tiempo de

    acceso de 11ns.

    Una caché con hit rate de 99% permite al sistema desempeñarse muy bien, incluso

    si la mayoría de la memoria está construida utilizando tecnología más lenta con

    un tiempo de acceso de 200ns.

    La fórmula para calcular el tiempo de acceso efectivo de una memoria de nivel

    dos está dada por:

    Donde H es el hit rate del caché, Accesscc es el tiempo de aceso del caché y

    AccessMM es el tiempo de acceso a memoria.

    Esta fórumula puede extenderse par aplicarse a memorias de tercer o incluso

    cuarto nivel.

    6.4.4 When Does Caching Break Down?Cuando los programas muestran localidad el caché trabaja bastante bien. Sin

    embargo, si los programas tienen mala localidad, la memoria caché se “rompe” y

    la performance de la memoria jerárquica es pobre. En particular, la programación

    orientada a objetos puede causar que los programas muestren localidad menor a la

    óptima. Otro ejemplo de mala localidad puede verse en los accesos a arreglos de

    Comentario:Buscar en itermino más amigable paratrashes

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    20/57

    dos dimensiones. Los arreglos se almacenan tipicamente por filas (en row-major

    order

    Supongamos que una fila ocupa exactamente un bloque de caché y que la cacllé 

    puede contener todas excepto una de las filas del arreglo. Si el programa accede

    al arreglo a una fila por vez, el primer acceso produce un miss, pero una vez

    que el bloque está transferido al caché los accesos subsecuentes son hits. Por

    lo que un arreglo de 5x4 produciría 5 misses y 15 hits en 20 accesos (asumiendo

    que estamos accediendo a todos los elementos del arreglo). Si el programa accede

    al arreglo en por columnas, el primer acceso resulta en un mis después del cual

    toda la fila se transfiere a la caché. Sin embargo, el segundo acceso resulta en

    otro miss, los datos que se están transfiriendo de cada fila no estan siendo

    usados porque se está accediendo al arreglo por columnas. Como la caché no es lo

    suficientemente grande esto produciría 20 miss en 20 accesos. Un tercer ejemplo

    podría ser un programa que loopea sobre un arreglo lineal que no entra en caché.

    Habría una significante reducción en la localidad cuando la memoria se utiliza

    de este modo.

    6.4.5 Políticas de escr itura en Caché

    Además de determinar qué víctima elegir para el reemplazo, los diseñadores debendecidir también que hacer con los llamados dirty blocks de la caché, o bloques que

    han sido modificados. Cuando el procesador escribe a memoria principal, los

    datos pueden ser escritos en la caché en su lugar, bajo la asunción de que el

    procesador probablemente vuelva a leerlos pronto. Si el bloque de caché es

    modificado, la política de escritura de la caché determina cuando será 

    actualizado el bloque de memoria principal para coincidir con el bloque de caché.

    Hay dos políticas básicas:

    • Write-through—Actualiza tanto el caché como la memoria principal

    simultaneamente en cada escritura. Es más lenta que la política write-back, pero

    asegura que el caché es consistente con el sistema de memoria principal. La

    desventaja obvia es que cada escritura ahora requiere un acceso a memoria. Usar

    esta política signficia que cada escritura en caché necesita una escritura enmemoria principal, por lo tanto disminuye la velocidad del sistema (si todos los

    accesos son escrituras, esto esencialmente disminuye la velocidad del sistema a

    la velocidad de la memoria principal). Sin embargo, es las aplicaciones reales,

    la mayoría de los accesos son lecturas por lo que esta disminución de la

    velocidad es despreciable.

    • Write-back— Esta política, también llamada copyback solo actualiza los bloques

    en memoria principal cuando el bloque de caché es seleccionado como víctima y

    debe ser removido de la caché. Este metodo es normalmente más rápido que el

    anterior porque no se pierde tiempo en escribir información a la memoria con

    cada escritura en caché. También se reduce el tráfico a la memoria. La

    desventaja es que la memoria principal y el caché pueden no contener el mismo

    Comentario:Chequear otraducciones de este términ

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    21/57

    valor en un instante dado, y si un proceso termina (crashes) antes de que se

    haya escrito a la memoria principal, los datos en el caché pueden perderse

    Para mejorar la performance del caché, uno debe incrementar el hit ratio usando

    un mejor algoritmo de mapeo (aproximadamente un 20%), mejores estrategias para

    operaciones de escritura (hasta un 10%) y mejores prácticas de código, como

    vimos en el ejemplo anterior accesos por filas vs. accesos por columnas (hasta

    el 30%). Solo aumentar el tamaño de la caché puede mejorar el hit ratio entre un

    1 y un 4% pero no está garantizado.

    6.6 UN EJEMPLO DE MANEJO DE MEMORIA REAL

    El Pentium tiene dos cachés, L1 y L2, ambas utilizando un tamaño de bloque de 32

    bytes. L1 es la más cercana al procesador mientras que la L2 está entre el

    procesador y la memoria. El L1 son en realidad dos cachés; el Pentium (como

    muchas otras máquinas) separa la caché entre la utilizada para instrucciones y

    la utilizada para datos. Ambas L1 utilizan un bit LRU para el reemplazo de

    bloques. Ambas utilizan mapeo asociativo por conjuntos de dos vías.

    La L2 es de 512KB hasta 1MB, también usa mapeo asociativo por conjuntos de dos

    vías.

    La memoria de intrucciones y la L2 utilizan el protocolo de coherencia MESI.

    Cada línea tiene dos bits que almacenan los siguientes estados MESI:

    (1) M: modified (cache is different than main memory);

    (2) E: exclusive (cache has not been modified and is the same as memory);

    (3) S: shared (this line/block may be shared with another cache line/block); and

    (4) I: invalid (the line/block is not in cache).

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    22/57

    REVIEW OF ESSENTIAL TERMS AND CONCEPTS1. Which is faster, SRAM or DRAM?2. What are the advantages of using DRAM for main memory?3. Name three different applications where ROMs are often used.4. Explain the concept of a memory hierarchy. Why did your authors choose to representit as a pyramid?

    5. Explain the concept of locality of reference and state its importance to memory

    systems.6. What are the three forms of locality?7. Give two noncomputer examples of the concept of cache.8. Which of L1 or L2 cache is faster? Which is smaller? Why is it smaller?9. Cache is accessed by its ________, whereas main memory is accessed by its_______.

    Exercises 267

    10. What are the three fields in a direct mapped cache address? How are they used toaccess a word located in cache?

    11. How does associative memory differ from regular memory? Which is more expensiveand why?

    12. Explain how fully associative cache is different from direct mapped cache.13. Explain how set associative cache combines the ideas of direct and fully associativecache.

    14. Direct mapped cache is a special case of set associative cache where the set size is1.

    So fully associative cache is a special case of set associative cache where the set size

    is ___.

    15. What are the three fields in a set associative cache address and how are they used toaccess a location in cache?

    16. Explain the four cache replacement policies presented in this chapter.17. Why is the optimal cache replacement policy important?18. What is the worst-case cache behavior that can develop using LRU and FIFO cachereplacement policies?

    19. What, exactly, is effective access time (EAT)?20. Explain how to derive an effective access time formula.21. When does caching behave badly?

    22. What is a dirty block?23. Describe the advantages and disadvantages of the two cache write policies.24. What is the difference between a virtual memory address and a physical memoryaddress? Which is larger? Why?

    25. What is the objective of paging?26. Discuss the pros and cons of paging.27. What is a page fault?28. What causes internal fragmentation?29. What are the components (fields) of a virtual address?30. What is a TLB and how does it improve EAT?31. What are the advantages and disadvantages of virtual memory?32. When would a system ever need to page its page table?33. What causes external fragmentation and how can it be fixed?

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    23/57

    INPUT – OUTPUT AND STORAGE SYSTEMS

     AcUna computadora no tiene mucho uso sin medios para ingresar y sacar información

    de ella. Cuando el tiempo de procesamiento excede el tiempo de “pensar” del

    usuario, los usuarios se quejan de que es lenta. Esta lentitud puede tener un

    impacto sustancial en la productividad. Es más frecuente que la causa de este

    problema no se encuentre en el procesador o en la memoria, si no en cómo elVeremos como los I/O y la capacidad de almacenamiento pueden ser optimizados

    permitiendo tomar la decisión correcta de almacenamiento.

    7.2 AMDAHL’S LAWAumentar el 40% la velocidad de un componente ciertamente no va a aumentar el

    40% de la velocidad del sistema.

    En 1967 George Amdahl reconoció la interrelación de todos los componentes con la

    eficiencia total de un sistema de computación. Cuantificó sus observaciones en

    una fórmula que hoy se conoce como ley de Amdahl. En esencia, establece que la

    velocidad (speedup) total de un sistema de computación depende tanto de la

    aceleración en un componente particular como de cuanto es utilizado ese

    componente por el sistema. En símbolos:

    Donde:

    S es la velocidad;

    f es la fracción de trabajo que realiza el componente más rápido; y

    k es la velocidad de un nuevo componente.

    Digamos que la mayoría de tus procesos diarios pasan el 70% del tiempo corriendo

    en la CPU y el 30% esperando servicios del disco.

    Nos ofrecen un nuevo procesador que es 50% más rápido del que tenemos por $10000

    o un conjunto de discos que son 2,5 veces más rápidos que tu disco actual por

    $7000.

    Entonces para el procesador tenemos:

    y para el disco:

    El aumento de performance es relativamente igual, aunque el costo por cada 1% de

    mejora es menor en los discos.

    7.3 ARQUITECTURAS I/O

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    24/57

    Definimos input/output como un subsistema de componentes que mueve datos entre

    componentes externos y un servidor (host system), consistente de una CPU y una

    memoria principal.

    Los subsistemas I/O incluyen, pero no están limitados a:

    · Bloques de memoria principal que están dedicados a funciones I/O

    · Buses que proveen los medios para mover los datos dentro y fuera del sistema

    · Módulos de control en el servidor y en los periféricos.

    · Interfaces a componentes externos como teclados y discos

    · Cableado o links de comunicación entre el servidor y sus periféricos.

    Los módulos I/O se ocupan de mover datos entre la memoria principal y la

    interfaz de un dispositivo en particular. Las interfaces están diseñadas

    específicamente para comunicarse con un cierto tipo de dispositivos como

    teclados, discos y impresoras. Las interfaces manejan los detalles para

    asegurarse de que los dispositivos están listos para la próxima tanda de datos,

    o que el servidor está listo para recibir la próxima tanda de datos que proviene

    de un periférico. La forma y significado exacto de las señales que se

    intercambian entre emisor y receptor se llama protocolo Los Protocolos constan de

    señales de control como “Printer reset”; señales de estado como “tape ready”; oseñales para el paso de datos. En la mayoría de los protocolos de intercambio de

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    25/57

    datos el receptor debe reconocer (acknowledge) los comandos y datos que se le

    envían, o indicar que está listo para recibir datos. Este tipo de protocolo de

    intercambio se denomina handshake.

    Los dispositivos externos que manejan largos bloques de datos (como impresoras,

    discos, y cintas) están usualmente equipados con memoria buffer. Los Buffers

    permiten al servidor enviar largas cantidades de datos a los periféricos de la

    manera más rápida posible, sin tener que esperar a que los dispositivos

    mecánicos más lentos hayan escrito los datos. La memoria dedicada en los discos

    es usualmente del tipo de la caché más rápida, mientras que las impresoras

    usualmente tienen una RAM más lenta.

    Los circuitos de control de los dispositivos toman los datos de para o desde

    buffers incorporados y se aseguran de que llegue a donde debe ir. En caso de

    escribir en discos, esto incluye asegurarse de que el disco está posicionado de

    la manera adecuada para que la información sea escrita en un lugar particular.

    Para las impresoras, estos circuitos mueven el cabezal de impresión a la

    posición del siguiente carácter, activan el cabezal, eyectan el papel, etc.

    Los discos y las sintas son formas de almacenamiento durable llamados así porque

    los datos que son grabados en ellos duran más de lo que durarían en memoria

    principal volátil. Sin embargo, ningún método de almacenamiento es permanente.

    La vida esperada de los datos en estos medios es de aproximadamente 5 años paralos medios magnéticos y tanto como 100 años para los medios ópticos.

    7.3.1 Métodos de Contro l I/OLos sistemas de computación emplean cualquiera de los cuatro metodos de control

    generales de I/O, estos son: I/O programado, I/O por manejo de interrupciones,

    acceso directo a memoria y channel-attached I/O. Aunque ningún método es

    necesariamente mejor que el otro, la manera en que la computadora ontrola sus

    I/O influencia enormemente el diseño y performance general del sistema. El

    objetivo es saber cuando el método I/O empleado por una arquitectura particular

    es apropiado y cómo será utilizado el sistema.

    Programmed I/O (E/S por polling o programada)Los sistemas que usan programmed I/O dedican por lo menos un registro para uso

    exclusivo de cada dispositivo I/O. El CPU continuamente monitorea cada registro,

    esperando que lleguen los datos, esto se llama polling. Por lo tanto se refiere

    usualmente a la programmed I/O como polled I/O. Una vez que la CPU detecta la

    condición de “dato listo”, actúa de acuerdo a las instrucciones programadas para

    ese registro particular. El beneficio de usar este enfoque es que tenemos

    control programático sobre el comportamiento de cada dispositivo. Los cambios en

    el programa pueden consistir en ajustes para el número y tipo de dispositivos en

    el sistema, tanto como para sus prioridades e intervalos de polling.

    Estar constantemente haciendo polling, sin embargo, es un problema. La CPU se

    encuentra constantemente en un loop de “busy wait” hasta que empieza a atenderuna solicitud de I/O. No realiza ningún trabajo útil hasta que haya I/O para

    Comentario:Ver qué ser

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    26/57

    procesar. Debido a estas limitaciones, este método es apropiado para sistemas de

    propósito especial como cajeros automáticos, o sistemas que controlan o

    monitorean eventos ambientales.

    Interrupt-Driven I/O (E/S por interrupc ioneS)Interrupt-driven I/O puede ser pensada como l contrario de programmed I/O.

    En lugar de que la CPU este continuamente preguntando a sus dispositivos

    conectados si tienen algún input, los dispositivos le dicen a la CPU cuandotienen datos para enviar. La CPU continua con otras tareas hasta que la

    interrumpe el pedido de un dispositivo. Las interrupciones son usualmente

    señaladas con un bit en el registro de flags del CPU llamado interrupt flag.

    Una vez que se setea el flag de interrupción, el sistema operativo interrumpe el

    programa que estaba ejecutando guardando el estado y la información variable. El

    sistema luego hace un fetch del vector de interrupciones que apunta a la

    dirección de la rutina del I/O. Luego de que la CPU haya terminado con la rutina,

    restaura la información que había guardado del programa que estaba corriendo

    cuando ocurrió la interrupción, y continúa la ejecución del programa.

    Este método es similar al anterior en el sentido en que las rutinas de atención

    pueden ser modificadas para acomodarse a cambios de hardware. Como los vectores

    de los distintos tipos de hardware usualmente se mantienen en las mismasubicaciones en sistemas que corren el mismo tipo y nivel de sistema operativo,

    estos vectores pueden ser fácilmente cambiados para apuntar a código especifico

    del comerciante. Por ejemplo, si a alguien se ocurre un nuevo tipo de disco que

    todavía no es soportado por un SO popular, el fabricante de ese disco puede

    actualizar el vector de I/O del disco para apuntar a un código particular para

    ese disco. Desafortunadamente, algunos algunos de los primeros escritores de

    virus basados en DOS también tuvieron esa idea. Reemplazaban los vectores de I/O

    para que apuntaran a su código, erradicando muchos sistemas en el proceso. La

    mayoria de los SO actuales emplean manejo de interrupciones. Afortunadamente,

    estos tienen mecanismos para salvaguardarse contra este tipo de manipulación del

    vector.

    Direct Memory Access (E/S por acceso d irecto a memoria)Tanto con I/O como con interrupt-driven I/O, la CPU muvede datos desde y hacia

    el dispositivo I/O. Durante el I/O, la CPU corre instrucciones similares al

    siguiente pseudocódigo:WHILE More-input AND NOT Error ADD 1 TO Byte-countIF Byte-count > Total-bytes-to-be-transferred THENEXITENDIFPlace byte in destination bufferRaise byt e-ready signalInitialize timerREPEATWAIT

    UNTIL Byte-acknowledged, Timeout, OR ErrorENDWHILE

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    27/57

    Claramente estas instrucciones son lo suficientemente simples como para ser

    programadas en un chip dedicado. Esta es la idea detrás de direct memory access

    (DMA). Cuando un sistema usa DMA, la CPU se livera de la ejecución de las

    tediosas instrucciones de I/O. Para efectuar la transferencia, la CPU le provee

    al control de DMA la locación de los bytes a ser transferidos, el número de

    bytes y el dispositivo de destino o la dirección de memoria. Esta comunicación

    usualmente tiene lugar a través de registros de I/O especiales en la CPU.

    Una vez que los valores apropiados se ubican en memoria, la CPU envía una señal

    al subsistema de DMA y procede con su siguiente tarea, mientras el DMA se ocupa

    de los detalles del I/O. Luego de que el I/O se completa (o termina en error),

    el DMA envía una nueva interrupción al CPU. El controlador del DMA y la CPU

    comparten el bus de memoria. Solo uno de ellos a la vez puede tener control del

    bus, esto es, ser el bus master . Generalmente, I/O tiene prioridad sobre los

    fetches de memoria del CPU para instrucciones y datos, porque muchos

    dispositivos de I/O operan con parámetros de tiempo ajustados. Si no detectan

    actividad dentro de un período de tiempo especificado se produce un timeout y

    abortan el proceso de I/O. Para evitarlos, el DMA usa ciclos de memoria que de

    otra forma serían utilizados por el CPU. Esto se llama cycle stealing.

    Afortunadamente I/O tiende a crear tráfico en ráfagas bursty en el bus: los datosse envían en bloques o clusters.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    28/57

    La CPU debería tener el acceso permitido al bus entre ráfagas, aunque este

    acceso puede no ser de la duración necesaria para ahorrarle al sistema la

    acusación de ir muy lento durante los I/O (“crawling during I/O”).

    Channel I/O (Canal de E/S)La I/O programada transfiere datos un byte por vez. La I/O por interrupciones

    puede manejar datos de un byte por vez en pequeños bloques, dependiendo del tipo

    de dispositivo que participa en el I/O. Los dispositivos más lentos como losteclados, generan más interrupciones por numero de byte transferido que los

    discos o las impresoras. Los métodos DMA son todos orientados a bloques,

    interrumpiendo la CPU solo después de terminar (o fallar) la transferencia de un

    grupo de bytes. Luego de que el DMA avisa el final del I/O, la CPU puede darle

    la dirección para el siguiente bloque de memoria a ser leido o escrito.

    En caso de que el evento falle, la CPU solo es responsable por tomar la acción

    apropiada. Así la DMA requiere solo un poco menos de participación de la CPU de

    lo que las interrupciones. Tal costo está bien para sistemas pequeños de un solo

    usuario; sin embargo, no se comporta bien en sistemas grandes de múltiples

    usuarios como computadoras mainframe (centrales). La mayoría de las mainframes

    utilizan un tipo inteligente de interfaz DMA conocida como I/O channel.

    Con channel I/O, uno o más procesadores de I/O controlan varios caminos de I/Ollamados channel paths. Los Channel paths para dispositivos lentos como

    terminales e impresoras pueden ser combinados (multiplexados) permitiendo el

    manejo de varios de estos dispositivos a través de un solo controlador. En los

    mainframes de IBM, un canal multiplexado es llamado un multiplexor channel. Los

    canales para discos y otros dispositivos más rápidos se llaman selector channels.

    Los canales de I/O son manejado por pequeñas CPUs llamadas I/O processors (IOPs),

    las cuales están optimizadas para I/O. A diferencia de los circuitos DMA, los

    IOPs tienen la habilidad de ejecutar programas que incluyen lógica aritmética y

    bifurcación de instrucciones. Estos ejecutan programas que son ubicados en la

    memoria principal del sistema por el procesador servidor. Estos programas

    consisten en una serie de channel command words

    (CCWs), que incluyen no solo las instrucciones de la transferencia actual,sino también comandos que controlan los dispositivos de I/O. Estos comandos

    incluyen cosas como varios tipos de inicialización de dispositivos, eyección de

    páginas de la impresora, y comandos para rebobinar cintas, para nombrar algunos.

    Una vez que el programa de I/O se ha ubicado en memoria el servidor expide un

    comando de start subchannel (SSCH), informando al IOP de la ubicación en memoria

    donde puede ser encontrado el programa. Después de que el IPO haya completado su

    trabajo, ubica la información de terminación en la memoria y envía una

    interrupción a la CPU. La CPU obtiene la informción de termiación y realiza las

    acciones apropiadas para los códigos devueltos.

    La principal diferencia entre el DMA y el channel I/O reside en la inteligencia

    del IOP. El IOP negocia protocolos, expide los comandos de los dispositivo,

    traduce código de almacenamiento en código de memoria, y puede transferirarchivos completos o grupos de archivos independiente al CPU servidor. El

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    29/57

    servidor solo tiene que crear las instrucciones de programa para la operación

    I/O y decirle al IOP donde encontrarlas.

    Como la DMA, un IOP debe robar ciclos de memoria del CPU. A diferencia de la DMA

    los sistemas de channel I/O están equipados con buses de I/O separados lo cual

    ayuda a aislar al servidor de la operación de I/O. Cuando se copia un archivo de

    disco a cinta, por ejemplo, el IOP usa el bus de memoria del sistema solo para

    hacer el fetch de instrucciones de la memoria principal. El resto de la

    transferencia se efectúa utilizando solo el bus de I/O. Debido a su inteligencia

    y el aislamiento del bus, channel I/O es utilizado en ambientes de procesamiento

    de transacciones de alto rendimiento, donde su costo y complejidad puede ser

    justificado.

    7.3.2 I/O Bus Operation

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    30/57

     De este diagrama podemos desprender las siguientes ideas:

    · Un bus de sistema es un recurso compartido entre muchos componentes de un

    sistema de computación.

    • El acceso a este recurso compartido debe ser controlado. Por esto se requiere

    un bus de control

    El bus de memoria y el de I/O pueden ser entidades separadas, de hecho, a menudo

    es una buena idea separarlas. Una buena razón para que la memoria tenga su

    propio bus es que las transferencias de memoria pueden ser sincrónicas,

    utilizando muchos ciclos del CPU para recuperar datos de la memoria principal.

    En un sistema que funciona correctamente, nunca es un problema de la memoria

    encontrarse offline o mantener el mismo tipo de errores que afectan a los

    periféricos, como que le falte papel a una impresora en uso.

    Por otro lado, los buses de I/O no pueden operar sincrónicamente. Deben tener en

    cuenta el hecho de que los dispositivos de I/O no siempre pueden estar listos

    para procesar la transferencia I/O. Los circuitos de control ubicados en el bus

    de I/O y en los dispositivos de I/O negocian entre ellos para determinar el

    momento en el que cada dispositivo puede usar el bus. Como estos handshakes

    tienen lugar cada vez que se accede al bus, los buses de I/O se denominan

    asíncronos. Solemos distinguir transferencias sincrónicas de asincrónicas

    diciendo que una transferencia sincrónica requiere que tanto el emisor como el

    receptor compartan el mismo clock. Pero los protocolos asincrónicos también

    requieren un clock para bit timing (temporización de bit?) y para delinear las

    transiciones de las señales.

    Consideremos, una vez más, la configuración de la figura 7.2. No separamos las

    lineas de datos, direcciones y control. La conexión entre el circuito DMA y los

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    31/57

    circuitos de interfaz de los dispositivos puede verse más claramente en la

    siguiente figura que muestra los buses individuales de los componentes.

    Esta figura detalla como la interfaz del disco se conecta a los tres buses. La

    dirección en el bus de datos consiste de un número de conductores individuales

    cada uno de los cuales lleva un bit de información. El número de líneas de datos

    determina el ancho del bus. Un bus de datos con ocho lineas de datos lleva un

    byte por vez. El bus de direcciones tiene suficientes conductores para

    identificar unívocamente cada dispositivo en el bus. El grupo de lineas de

    control que se muestran es el mínimo que necesitamos para un prop

    ósito

    ilustrativo. Los buses I/O reales tienen tipicamente más de una docena de líneas

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    32/57

    de control (la PC original de IBM tenía más de 20). Las líneas de control

    coordinan las actividades del bus y sus dispositivos asociados. Para escribir

    datos en el disco el bus ejecuta la siguiente secuencia de operaciones.

    1. El circuito DMA ubica la dirección del controlador de disco en las líneas dedirecciones y levanta las señales de Request y Write.

    2. Con la línea de Request levantada, los circuitos decodificadores en elcontrolador leen las líneas de dirección.

    3. Al leer su propia dirección, el decodificador habilita los circuitos decontrol del disco. Si el disco está disponible para escribir datos, el

    controlador sube la señal en la linea de Ready En este punto, el handshake entre

    el controlador y el DMA está completo. Con la señal de Ready levantada, ningún

    otro dispositivo puede usar el bus.

    4. Los circuitos del DMA ubican los datos en las lineas y bajan la señal deRequest.

    5. Cuando el controlador del disco ve la señal baja en Request transfiere elbyte de las lineas de datos al buffer del disco y luego baja la señal de Ready.

    Para describir esto de manera más precista, los ingenieros describen la

    operación del bus a través de diagramas de tiempo. Las líneas t0 a t10

    especifican la duración de las varias señales. En un diagrama de tiempo real se

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    33/57

    asigna una duración exacta a los intervalos de tiempo, usualmente cerca de los

    50 ns.

    Las señales del bus pueden cambiar solo durante el ciclo de transición de un

    clock. Las señales no suben y bajan instantáneamente, esot refleja la realidad

    física del bus. Una pequela cantidad de tiempo debe permitirse para que la señal

    se estabilice. Este settle time, aunque pequelo, contribuye a los largos restrasos

    durante largas transferencias I/O.

    Muchos buses I/O reales, no tienen lineas separadas de datos y direcciones.

    Debido a la naturaleza asíncrona de los buses de I/O, las líneas de datos pueden

    ser usadas para llevar la dirección del dispoisitivo. Todo lo que necesitamos es

    agregar otra línea de control que indique si las señales en las líneas de datos

    representan direcciones o datos. Este enfoque contrasta con el bus de memoria

    donde las direcciones y los datos deben estar disponibles simultáneamente.

    7.3.3 Another Look at Interrupt-Driven I/OHasta este punto, hemos asumido que el equipamiento perfiderico se encuentra

    inactivo en el bus hasta que un comando para hacer lo contrario aparece en la

    línea. En pequeños sistemas de computadoras este enfoque de “habla solo cuando te

    hablen” no es muy útil. Implica que toda la actividad del sistema se origina en

    el CPU cuando, en realidad, la actividad se origina con el usuario. Para podercomunicarse con la CPU, el usuario tiene que tener una forma de llamar su

    atención. Para este fin, los sistemas pequeños emplean I/O por interrupciones.

    Todo es lo mismo que en los ejemplos anteriores, excepto que ahora los

    periféricos tienen una forma de comunicarse con la CPU. Todo dispositivo

    periférico en el sistema tiene acceso a una línea de pedido de interrupción. El

    chip de control de la interrupción tiene un input por cada línea de interrupción.

    Cuando se detecta una línea de interrupción, el controlador la decodifica y

    levanta la entrada Interrupt (INT) del CPU. Cuando el CPU está listo para procesar

    la interrupción levanta la señal Interrupt Acknowledge(INTA). Una vez que el

    controlador de interrupciones tiene este recocnocimiento, puede bajar su señal

    INT.

    Los diseñadores de sistemas deben decidir que dispositivos debieran tenerprecedencia sobre otros cuando más de un dispositivo levanta las interrupciones

    simultáneamente. Este desición de diseño está cableada en el controlador (hard-

    wirerd). Cada sistema que utiliza el mismo SO y controlador de interrupción,

    conectará los dispositivos de alta prioridad (como el teclado) a la misma línea

    de interrupción. El número de lineas de interrupción es limitado en cada sistema,

    y en algunos casos la interrupción puede ser compartida. Las interrupciones

    compartidas no causan problemas cuando es claro que ninguno de los dos

    dispositivos necesitará la misma interrupción al mismo tiempo. Por ejemplo, un

    scanner y una impresora usualmente pueden coexistir perfectamente usando la

    misma interrupción. Este no es siempre el caso con un mouse serial y los modems,

    donde sin el conocimiento del instalador, podrían usar la misma interrupción

    causando comportamientos extraños en ambos.

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    34/57

     

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    35/57

    4.1 MARIEAMachine  Architecture that is Really Intuitive and Easy

    4.1.1 CPU Basics and OrganizationLa computadora manipula datos en código binario. La memoria se usa tanto para

    almacenar datos como instrucciones (Von Neumann). La unidad central de proceso

    CPU es la responsable de hacer el fetch de las instrucciones, decodificarlas y

    realizar la secuencia indicada de operaciones en los datos correctos.Todas las computadoras tienen un procesador central. Esta unidad puede estar

    dividida en dos partes. La primera es el datapath, el cual es una red de

    unidades de almacenamiento (registros), y unidades aritmético lógicas (para

    realizar varias operaciones en los datos) conectados por buses (capaces de mover

    data de un lugar a otro) donde el tiempo está controlado por clocks. El segundo

    componente de la CPU es la unidad de control control unit, un módulo responsable

    por ordenar las operaciones y asegurarse de que los datos correctos están donde

    se necesitan en el momento correcto. Juntos, estos componentes realizan las

    tareas del CPU: hacer el fetch de las instrucciones, decodificarlas y finalmente

    realizar la secuencia indicada de operaciones. El desempeño de una máquina está 

    directamente relacionado con el diseño del datapath y la unidad de control.

    Componentes:

    The RegistersLos restistros se utilizan en los sistemas de computación para almacenar una

    variedad de datos, como direcciones, program counters, o datos necesarios para

    le ejecución del programa. Un registro es un dispositivo de hardware que

    almacena datos binarios. Están ubicados en el procesador para que la información

    pueda ser accedida muy rápido.

    Se pueden utilizar flip-flops D para implementar registros (uno por bit,

    conectados juntos al mismo clock).

    El procesamiento de datos de la computadora se hace por lo general con un tamaño

    fijo de palabra binaria que se encuentra almacenada en los registros. Por lo

    tanto la mayoría de las computadoras tienen registros de un cierto tamaño:16,32,64 bits (tipicamente una potencia de 2). Los registros contienen datos,

    direcciones o información de control. Algunos registros tienen un propósito

    especial y solo pueden contener datos, o solo pueden tener direcciónes o solo

    información de control. Otros registros son más genéricos y pueden contener

    cualquiera de estas cosas en distintos momentos. La información se escribe en

    los registros, se lee de ellos y puede transferirse de uno a otro. Los registros

    no se direccionan de la misma manera que la memoria (cada palabra de memoria

    tiene una dirección binaria única que comienza con la ubicación 0). Los

    registros son direccionados y manipulados por la misma unidad de control. En los

    sistemas de computación modernos, hay muchos tipos especializados de registros:

    registros para almacenar información, registros para desplazar (shift) datos,

    registros para comparar valores y registros que cuentan. Hay registros

    “anotadores” que almacenan valores temporarios, registros índice que controla los

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    36/57

    loops de los programas, registros stack pointer que manejan pilas de información

    para procesos, registros de status que mantienen el status o modo de operación

    (como condiciones overflow, carry o zero), y registros de propósito general que

    están disponibles para el programador. La mayoría de las computadoras tiene sets

    de registros y cada set se usa de una manera específica. Por ejemplo, la

    arquitectura Pentium tiene un conjunto de registros de datos y un conjunto de

    registros de direcciones. Algunas arquitecturas tienen conjuntos muy largos de

    registros que pueden usarse en formas bastante innovadoras para acelerar la

    ejecución de instrucciones.

    The ALULa unidad aritmético lógica lleva a cabo las operaciones lógicas como

    comparaciones y aritméticas como suma y multiplicación, requeridas durante la

    ejecución del programa. Generalmente la ALU tiene dos entradas de datos y una

    salida. Las operaciones que se realizan en la ALU usualmente afectan a los bits

    en el registro de status (los bits se setean para indicar si ha ocurrido un

    overflow por ejemplo). La ALU sabe qué operación realizar porque está controlada

    por las señales de la unidad de control.

    The Control UnitLa unidad de control es el “policía” o “agente de tráfico” de la CPU. Monitorea

    la ejecución de todas las instrucciones y la transferencia de toda la

    información. Extrae instrucciones de la memoria, las decodifica y se asegura de

    que los datos están en el lugar correcto en el momento correcto, le dice a la

    ALU que registros usar, sirve a las interrupciones y enciende la circuitería

    correcta en la ALU para la ejecución de la operación deseada. La unidad de

    control usa un registro program counter para encontrar la próxima instrucción a

    ser ejecutada y un registro de status para llevar la cuenta de los overflows,

    carries, borrows y el igual.

    4.1.2 The BusEl CPU se comunica con otros componentes a trav

    és de un bus. Un

    buses un

    conjunto de cables que actúan como caminos de datos compartidos para conectar

    múltiples subsistemas dentro del sistema. Consiste en múltiples lineas que

    permiten el movimiento paralelo de bits. Los buses son de bajo costo pero muy

    versátiles y hacen facil conectar nuevos dispositivos entre ellos y al sistema.

    En un momento dado, solo un dispositivo (sea un registro, la ALU, la memoria o

    algún otro componente) puede usar el bus. Sin embargo, este uso compartido

    usualmente resulta en cuellos de botella en las comunicaciones. La velocidad del

    bus está relacionada con su longitud, tanto como el número de dispositivos que

    lo comparten. Frecuentemente los dispositivos están divididos en las categorías

    master y slave, donde el dispositivo master es el que inicia las acciones y el

    slave es el que responde a los requerimientos del master.

    Un bus puede ser point-to-point, conectando dos componentes espefícos, o un commonpathway que conecta un número de dispositivos, teniendo estos dispositivos que

    compartir el bus (conocido como un bus multipoint).

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    37/57

     

  • 8/18/2019 Resumen Teoría de Null - Orga 1

    38/57

     

    Debido a que se comparte, el protocolo del bus (reglas de uso) es muy importante.

    Usualmente las lineas del bus que son dedicadas para mover los datos se llaman

    el data bus. Estas lineas de datos contienen la información actual que debe ser

    transferida de una locación hacia otra. Las líneas de control indican qué 

    dispositivo tiene permiso para usar elbus y con qué propósito (leer o escribir

    desde memoria, o de un dispositivo I/O por ejemplo). También transfieren “acuse

    de recibo” de los pedidos del bus, interrupciones y las señales de

    sincronización del clock. Las líneas de direcciones indican la ubicación (en

    memoria, por ejemplo) de los datos que tienen que ser leidos o escritos. Las

    power lines proveen la energía eléctrica necesaria. Típicamente las transacciones

    del bus incluyen enviar direcciones (para leer o escribir), transferir data de

    memoria a un registro (una lectura en memoria), transferir data de un regis