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