Story Transcript
1
Capítulo 15.
Memoria. Todos los programas gastan la mayor parte de su tiempo accesando a la memoria, debido a esto el sistema de memoria es un factor principal en el comportamiento de un procesador. Además su diseño está fuertemente relacionado con la forma en que el sistema operativo maneja la memoria y la entrada-salida; la forma en que los compiladores generan el direccionamiento de las variables y funciones; y también con las aplicaciones que se ejecutarán en el procesador.
15.1. Organización de memorias estáticas. Los chips de memoria estática de acceso aleatorio (SRAM) están configuradas en términos de localizaciones direccionables (dado por el ancho del bus de direcciones) y ancho de palabra direccionable (dado por el bus de datos de entrada y el de salida). Por ejemplo una configuración de 32KB (32K*8 bits), requiere 15 líneas de dirección (215 = 25 * 210 = 32K) y el largo de palabra es 8 bits o 1 Byte. Suelen tener tres líneas de control: Output enable, que habilita una salida en tercer estado; Write enable, que permite escribir en una palabra; y Chip Select (o Chip Enable), que habilita o deshabilita al chip completo. De este modo la configuración anterior requiere 36 pines (15 +8 +8 + 3 + 2), donde los dos últimos corresponden a tierra y Vcc. Las líneas de salida son compartidas por todas las palabras almacenadas, y sólo se conecta al bus de salida aquella palabra que está direccionada, mediante la habilitación de tercer estado. Esto permite compartir el bus de salida sin emplear un multiplexor. El siguiente diagrama muestra una memoria estática de 4*2.
Profesor Leopoldo Silva Bijit
18-07-2007
2
Estructuras de Computadores Digitales MemWr MemRd
D
OE C
Q
D
Q
D
Q
D
OE Q C
0
Decodificador.
D
OE C
OE C
Q
1
Add[1]
2a4 D
Add[0]
OE
OE C
C
Q
2
D
OE Q C
D
OE C
Q
3
Dout[0] Dout[1]
Din[1] Din[0]
Figura 15.1 Esquema memoria estática, de 4*2. En memorias físicas, lo usual es que el bus de datos sea bidireccional, de este modo se reduce el número de pines del circuito. Se tienen ahora el bus de datos (formado por las conexiones en los pines de entrada-salida); el bus de direcciones (de entrada); y el bus de control (formado por tres señales de entrada, de lógica negativa).
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
3 CE’ WE’
OE’
Control Memoria
Dir
Arreglo
Decodificador
Dout
I/O
Din
Figura 15.2 Esquema de memoria. Cuando CE’ está alta la memoria entra en modo standby de bajo consumo. La señal CE (chip enable) permite una sencilla expansión de la memoria en organización de múltiples bancos. Los drivers de salida permanecen en estado de alta impedancia cuando CE’ o OE’ están altas; o cuando WE’ está baja. 15.1.1. Ciclo de lectura controlado por el cambio de dirección. Con WE’ alta, CE’ y OE’ bajas, al cambiar la dirección, después de un tiempo se tienen datos válidos en la salida.
Datos inválidos
Figura 15.3 Ciclo de lectura. Con tAA, tiempo de acceso por cambio de dirección.
Profesor Leopoldo Silva Bijit
18-07-2007
4
Estructuras de Computadores Digitales
15.1.2. Ciclo de lectura controlado por señales de control. Para leer se coloca la dirección en el bus, luego se activa el Chip Enable y el Output Enable (con WE’ alto y CE’ y OE’ bajas), después del tiempo de acceso (típico de 5 ns, año 1999) se tienen datos válidos en el bus Dout.
Salida en alta impedancia Dirección estable Figura 15.4 Ciclo de lectura, controlado por señales de control. 15.1.3. Ciclo de escritura controlado por WE. Para escribir: Se colocan los datos en Din, y la dirección en el bus; luego se activan Chip Enable (CE’ baja) y Write Enable, luego del tiempo de acceso se tiene grabado el nuevo contenido. Los datos son escritos en el canto de subida de WE’. La señal Write Enable es un pulso con requerimientos de ancho mínimo, más que un reloj. Adicionalmente deben cumplirse tiempos de set-up y hold. El dispositivo externo debe colocar datos en el bus bidireccional, después que los drivers de salida se han puesto en tercer estado con el canto de bajada de WE’ (después de tWZ, en el diagrama)
Salida
de
Figura 15.5 Ciclo de escritura controlado por WE.
Profesor Leopoldo Silva Bijit
18-07-2007
memoria
en
alta
Memoria
5
15.1.4. Decodificación en dos niveles. La organización anterior tiene el problema de requerir un gran decodificador (y por lo tanto un gran número de líneas de palabra). Para evitar esto en las memorias de gran capacidad se decodifica en dos niveles. El bus de dirección puede considerarse dividido en dos campos, uno entra a un decodificador (con menos líneas de palabras) y se leen simultáneamente varios arreglos (tantos como sea el ancho de la palabra); el otro campo comanda un conjunto de multiplexores que seleccionan un bit de cada arreglo. Lo cual se ilustra a continuación para una memoria de 32K*4. La cual se organiza dividiendo las 15 líneas (necesarias para 32K) de dirección en 9 líneas, para ser decodificadas en 512 (29) líneas de palabra; y 6 líneas, que seleccionan un bit de los 64(26), que componen la palabra de salida de cada arreglo, que ingresan a cada multiplexor. Add[14..6]
Decodificador
512*64
512*64
512*64
64
64
64
Dout[2]
Dout[1]
Dout[0]
512*64
512
9 a 512
64 Add[5..0]
Dout[3]
Figura 15.6 Decodificación en dos niveles. Nótese que esta organización permite disponer de 256 bits (64*4) en un tiempo de acceso. Y agregando controles adicionales podría leerse direcciones secuenciales variando la dirección aplicada al multiplexor. Es decir el acceso a 64 direcciones secuenciales podría realizarse en menor tiempo que uno de acceso. Para esto se requiere un reloj interno a la ram (por esto se denominan ram sincrónicas), que transfiera los bis sucesivos de una ráfaga a partir de una dirección de inicio y de la especificación del largo de la secuencia (esto se logra variando internamente las direcciones aplicadas al multiplexor, en cada reloj interno). Es usual que se empleen dos compuertas inversoras para formar el latch interno que almacena un bit; para esto se requieren de cuatro a seis transistores por bit. Lo anterior permite almacenar (en forma estática) un bit mientras se tenga aplicada polarización a los transistores.
15.2. Organización de memorias dinámicas. En las RAM dinámicas, el valor del bit se almacena como carga en un condensador, y sólo se requiere un transistor para sensar o recargar la carga almacenada. El menor número de transistores requerido permite aumentar la densidad de la memoria y disminuir el costo por bit, pero como la carga no puede mantenerse indefinidamente debe ser refrescada periódicamente, por esta razón se denominan memorias dinámicas. Para refrescar el contenido se lee una palabra Profesor Leopoldo Silva Bijit
18-07-2007
6
Estructuras de Computadores Digitales
y se la vuelve a escribir; para disminuir el tiempo dedicado al refresco se emplea, una decodificación de la dirección en dos niveles. Se refresca una fila completa con un ciclo de lectura seguido por uno de escritura. Esta organización permite que la operación de refrescar la DRAM completa ocupe de 1 a 2% de los ciclos activos totales que puedan efectuarse en la memoria. La dirección se descompone en columnas y renglones y comparte en tiempo el bus de direcciones. Esto logra disminuir el número de pines dedicados a la dirección a la mitad, también implica un solo arreglo cuadrado, como se ilustra a continuación, para una DRAM se 1M*1:
1024*1024
Decodificador
Add[9..0]
1024
10 a 1024
1024 Latch Columna
Dout Figura 15.7 Renglones y columnas en DRAM. Para direccionar un Mega se requieren 20 líneas de dirección, en la figura se muestra un bus de 10 líneas. En una lectura: se coloca primero en el bus la dirección del renglón, el decodificador activa una de las 1024 líneas de palabra, y después de un tiempo de acceso al renglón, el contenido del renglón se captura en un registro, denominado latch de columna; luego se coloca en el bus de direcciones los 10 bits de la columna, lo cual activa una de las 1024 entradas al mux, permitiendo obtener después del tiempo de acceso a la columna el bit direccionado. Estas memorias poseen controles, denominados: Row access strobe (RAS) y Column access strobe (CAS) para indicar a la RAM si se tiene la dirección de un renglón o una columna en el bus de dirección. Se refresca un renglón completo en cada operación de refresco, leyendo el registro de columna y reescribiéndolo en la memoria. La organización de la DRAM, si bien disminuye el número de pines para establecer una dirección, aumenta el tiempo de acceso por un orden de magnitud relativa al de la SRAM (típico 50 ns, año 1999). Se permite cambiar la dirección de la columna sin cambiar la dirección del renglón, lo cual permite (en el modo página o modo de columna estática) accesar a múltiples bits de un renglón cambiando solamente la dirección de la columna (mediante la red combinacional del mux, que suele operar más rápido que la lectura de la memoria). Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
7
En el modo denominado nibble se leen 4 bits secuenciales, por cada acceso a un renglón; para esto la RAM genera internamente las siguientes tres direcciones de las columnas. Las memorias DRAM tipo EDO (por extended data out, actualmente obsoletas) en 1997, lograron tiempos de acceso al renglón de 25 ns. Actualmente, se tienen RAM sincrónicas, que transfieren una secuencia de largo dado de bits, a partir de una dirección dada mediante el control de un reloj interno, el cual va generando las direcciones de las columnas en forma sucesiva.
15.3. Localidad. Un programa no requiere leer todas sus instrucciones ni accesar a la zona de variables estáticas (en su segmento de datos) ni a la zona dinámica (stack) con igual probabilidad. En general un programa accesa a una porción relativamente pequeña de su espacio de direcciones (instrucciones y datos) es decir existe cierta localidad. Se denomina localidad espacial al hecho de que si se accesa a cierta dirección es muy probable que, muy próximamente en tiempo, se referencien direcciones cercanas a dicha dirección. Las instrucciones de un programa tienen localidad espacial, también los elementos de un arreglo o estructura, y también los argumentos y variables locales en el stack. Se denomina localidad temporal al hecho de que si se accesa a cierta dirección es muy probable que se la referencie nuevamente muy próximamente en el tiempo. Es el caso de las instrucciones que forman un lazo de repetición y de las variables que son manipuladas en el lazo. Se diseñan entonces los sistemas de memoria en forma jerárquica, aprovechando la localidad temporal, manteniendo los datos más recientemente accesados más cercanos al procesador. Y considerando la localidad espacial moviendo bloques, formados por varias celdas adyacentes de memoria, desde los niveles inferiores.
15.4. Memoria cache. Una memoria rápida en acceso a sus componentes, relativamente pequeña en su número de componentes, y por el momento costosa en dinero, se denomina cache e interactúa directamente con el procesador. Suele ser memoria estática SRAM (por static random access memory, memoria estática de acceso aleatorio) y recientemente SSRAM (memoria estática sincrónica de acceso aleatorio). La memoria cache está organizada en bloques, y además de ser accesada directamente por el procesador ésta puede accesar al siguiente elemento de la jerarquía que es la memoria denominada principal, formada por un gran número de componentes de mayor tiempo de acceso y de menor costo en dinero. La memoria principal suele estar diseñada mediante DRAM (memoria dinámica de acceso aleatorio) y también está organizada en bloques. El nivel siguiente suele ser el cache del sistema de discos duros y luego los discos duros. En todos los niveles existen bloques. Pero los datos son copiados solamente entre dos niveles adyacentes en un tiempo dado.
Profesor Leopoldo Silva Bijit
18-07-2007
8
Estructuras de Computadores Digitales
Si la dirección buscada está en la cache, se dice que existe un éxito (hit) y si no se encuentra, existe un fallo (miss). Una medida del comportamiento del sistema jerárquico es la tasa de éxitos, que es la fracción de accesos a memoria que se encuentran en el nivel superior; la tasa de fallos es (1 - tasa de éxitos). La tasa de fallos suele ser tipo 5 %. Para reducir esta tasa es preciso aumentar el tamaño de la memoria cache, o emplear un nivel adicional de cache denominado secundario, siempre que la penalización de la cache secundaria sea menor que el acceso a memoria principal. También es importante el tiempo de un éxito de acceso, que se mide como el tiempo empleado para determinar que el ítem se encuentra en el nivel. En caso de fallo, debe accesarse el nivel inferior de la jerarquía, y esto se mide con la penalización por fallo que se descompone en el tiempo de latencia (para encontrar la dirección en el nivel inferior) y el tiempo de transferencia empleado para mover el bloque hacia el nivel superior. 15.4.1. Cache de mapeo directo. Tamaño de bloque igual a uno. Cada localización de memoria se mapea exactamente en una localización de la cache. La manera más simple es emplear la fórmula: (Dirección del bloque) módulo (Número de bloques totales de la cache) Un esquema electrónico para lograr el direccionamiento es el siguiente: Offset bytes (2)
Dirección
V
marca
Dato
Indice (i )
Marca (m ) Comparador
Exito Figura 15.8 Cache de mapeo directo. Bloque unitario.
Profesor Leopoldo Silva Bijit
18-07-2007
Dato
Memoria
9
Se desagrega el bus de direcciones en tres campos: El campo empleado para determinar un byte o media palabra dentro de una palabra, los dos menos significativos. Un campo denominado índice, que establece el número de direcciones de la cache ( 2i celdas). Y el resto que se denomina marca. La celda de la cache tiene también tres campos: uno con el dato (es el espacio para almacenar la palabra); el campo marca de igual ancho que el campo de igual nombre del bus de direcciones; y un bit denominado válido. Existen muchas direcciones que tienen igual campo índice y se almacenarán en la misma dirección de la cache, esto implementa el mecanismo de acceso denominado directo. Al inicio se marcan todas las celdas de la cache como invalidas (campo V igual a cero), al intentar leer una dirección se producirá un fallo, entonces se leerá desde la memoria principal y se traerá el contenido al campo dato de la cache; y se escribirá el campo marca con los m bits más significativos del bus de dirección en la dirección en la celda con dirección índice de la caché y se marcará como válida (v=1). Si más adelante se desea leer una dirección que tenga el mismo índice pero con diferente marca se producirá un fallo. Y se reescribe la marca (desde el bus de dirección) y el nuevo dato que se trae desde la memoria principal. Cuando se escribe un dato en la cache, el procesador escribe los campos: válido, marca y dato en la cache (no requiere leer la memoria principal), y debe proceder a escribir en la memoria principal sino ésta queda inconsistente con la cache. Un método empleado es el de escritura directa, en el cual siempre que se escribe en la cache, se escribe en la principal; otro método es utilizar un buffer de escritura. En éste se encolan los datos que deben ser escritos en la memoria principal, de este modo el procesador no debe esperar la escritura física en la memoria principal y puede seguir procesando. En forma autónoma se escriben los datos del buffer en la memoria y se los marca como disponibles, de esta forma el procesador sólo debe detenerse cuando el buffer no tenga casillas disponibles. 15.4.1.1 Diseño de un buffer de escritura: De teoría de colas se tienen las siguientes fórmulas: Utilización = Velocidad de requerimientos / Velocidad de Servicio. Largo promedio de la cola= Utilización / (1 - Utilización) Probabilidad de rebalse de una cola de N-entradas = (Utilización)N
Palabras que deben escribirse
Palabras escritas Figura 15.9 Buffer de escritura.
Se tiene que el CPI promedio es de 1,3 y el ciclo del reloj es de 20 ns. En la mezcla de instrucciones que se ejecutan existe un 15 % de instrucciones store word.
Profesor Leopoldo Silva Bijit
18-07-2007
10
Estructuras de Computadores Digitales
La velocidad de llegada de palabras que deben escribirse puede calcularse según: Velocidad promedio de ejecución de instrucciones = 1 / (1.3 * 20ns) = 3.846 x 107 [instr./seg] Y la frecuencia de almacenamientos es = 0,15 * (3,846 * 107) = 5,769 x 106 stores/seg Con una DRAM de tiempo de ciclo de escritura de 100 ns, se tiene que la velocidad de servicio en escritura es de 1/100ns = 1,0* 107 [escrituras/seg] Con estos valores se puede calcular la utilización y el largo de la cola: Utilización = 5,769*106/107= 0,5769 Largo promedio de la cola = 0,5769 / (1 - 0,5769) = 1,363 Puede determinarse el número de elementos en el buffer de escritura para tener una probabilidad de rebalse menor que un número dado. Si el buffer tiene cuatro posiciones, la probabilidad de saturación es (0,5769)4 = 0,11 Lo cual implica un 11%. Si el buffer tiene seis posiciones, la probabilidad de saturación es (0,5769)6 = 0,038 Lo cual implica un 3,8%. 15.4.1.2. Ejemplo cache acceso directo. Las instrucciones de un procesador tienen un CPI promedio de 1,2. El CPI indicado es para memorias ideales, tanto de datos como de instrucciones. Es decir se asume que no hay fallos en los accesos a memoria. Se desea calcular el CPI promedio, empleando una memoria cache para los datos, para un programa de prueba, en el cual el 20 % de las instrucciones son de transferencias. Suponer una memoria cache de 4 Kbytes, de acceso directo. Con un tiempo de éxito igual a un ciclo de reloj, una tasa de fallos del 8 % y con una penalidad por fallos de 4 ciclos de reloj (considerando incorporado, en este último valor, el tiempo para determinar que es un fallo). El nuevo CPI promedio se calcula descomponiendo las instrucciones del programa de prueba en dos grupos: las que no accesan a la memoria de datos (y por ende conservan el CPI para memorias ideales) y el segundo grupo, las instrucciones de lectura y escritura en memoria de datos (load word y store word). A su vez las que accesan la memoria son descompuestas en los accesos exitosos (direcciones que se encuentran en la cache), que incrementan en un ciclo la ejecución; y las que no están en la caché que agregan los ciclos de penalización. CPI = (1-0,20) * 1.2 + 0.2 * ( (1.2+1) * (1-0,08) + (1.2 + 4) * 0,08) = 1.264 CPI = 0,96 + 0,2*(2,024 + 0,416 ) = 1,448 Si el tiempo de ciclo de la memoria es de 20 ns (es mayor que el tiempo de acceso, es el tiempo entre dos operaciones en la memoria), el tiempo promedio por instrucción es:
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
11
Tiempo promedio por instrucción = 1,448 * 20 = 28,96 [ns/instrucción] 15.4.2. Cache de mapeo directo. Tamaño de bloque igual a una potencia de dos. Para aprovechar la localidad espacial el bloque de la cache contiene varias palabras adyacentes (una potencia de dos). En el ejemplo que se ilustra se dispone un bloque formado por cuatro palabras de la memoria. Esto reduce el campo marca necesario y agrega un mux de cuatro entradas, que es controlado por el campo offset de bloque del bus de dirección. Los bits dedicados a la administración de la cache (válido, marca) disminuyen al aumentar el tamaño del bloque. Offset bytes (2)
V marca
Dato
Offset bloque (2)
Dirección Indice (i )
Marca (m ) Comparador
Mux Exito
Dato
Offset bloque (2)
Figura 15.10 Cache de mapeo directo. Bloques de 4. Si se produce un fallo (de lectura), deben ahora traerse desde la memoria principal cuatro palabras adyacentes. Con esta organización si al escribir, las marcas son iguales es un éxito en escritura y se puede continuar, pero si no son iguales hay un fallo de escritura y se debe leer el bloque desde memoria principal y volver a escribir la palabra dentro del bloque, junto a las adyacentes. Al aumentar el tamaño del bloque disminuye la tasa de fallos, este efecto es más notable en la cache de instrucciones, debido a la mejor localidad espacial. Manteniendo constante la capacidad en bytes de la cache, si se aumenta mucho el tamaño del bloque, será menor el número de bloques que se pueden colocar en la cache y existirá mayor competencia por los bloques. Esto implica que la tasa de fallos tiende a aumentar.
Profesor Leopoldo Silva Bijit
18-07-2007
12
Estructuras de Computadores Digitales
Por otro lado al aumentar el tamaño del bloque aumenta la penalización por fallos, ya que aumenta el tiempo necesario buscar el bloque para efectuar las transferencias. 15.4.2.1 Interleaving. Para disminuir la penalización por fallos suele organizarse la memoria primaria con un bus más ancho o en bancos (interleaving). Si para el bloque de cache de tamaño cuatro, se emplea un ancho de palabra de memoria primaria de cuatro palabras, se reduce la latencia y la transferencia. El costo es un bus más ancho y el tiempo de propagación y control del mux entre la cache y el procesador. 15.4.2.2. Bancos. La segunda solución, para un tamaño de bloque de la cache de 4 palabras, es disponer de 4 bancos de memoria (de ancho igual a una palabra) que puedan ser leídos o escritos en un tiempo de acceso. El bus entre la cache y los bancos de memoria no requiere ser más ancho que el de una palabra. Se logra disminuir el tiempo de latencia, ya que en caso de fallo de lectura se envía una dirección y se leen simultáneamente los bancos, pero el tiempo de transferencia se multiplica por el número de palabras de un bloque de la cache. El tener los bancos separados facilita las escrituras en memoria principal, ya que pueden iniciarse ciclos de escritura, en cada banco, en el mismo tiempo. La dificultad del empleo de bancos o memoria entrelazada es que la configuración mínima de memoria aumenta. Esto debido a que los diseños de memorias comerciales tienden a tener bajo número de bits de salida (típicamente 1 a 4). Por ejemplo si se emplean chips de 4Mbit*1, se requieren 32 chips para formar una palabra de 32 bits, y con esto un banco de 16 Mbytes ( 4*220*32 bits = 16*220 Bytes). Y si se emplean 4 bancos se tendrá una memoria primaria de 64Mbytes, constituida por 128 chips. Si se emplearan chips de 16 Mbits*1 para formar un banco se requieren 32 chips para formar una palabra de 32 bits, y los 4 bancos entrelazados tendrían una capacidad de 256 Mbytes. Si se emplearan chips de 4Mbits*4 para formar un banco se requieren 8 chips para formar una palabra de 32 bits, y los 4 bancos entrelazados tendrían una capacidad de 64 Mbytes, con 32 chips. 15.4.2.3. Modo paginado. Para mejorar la velocidad de transferencia se emplean el modo paginado del que disponen las DRAM. Estas memorias dinámicas están organizadas como arreglos cuadrados y el tiempo de acceso está dividido en tiempo de acceso al renglón y a la columna (por el mismo bus de direcciones que se multiplexa en tiempo, para disminuir el número de pines). Se dispone un buffer de renglón, y mediante un mux se selecciona la columna, y puede mediante señales especiales de control accesarse a dicho buffer sin tener que volver a leer el renglón (esto se emplea en el refresco). Es decir se lee por página (un renglón completo). Si por ejemplo el tiempo de acceso al renglón y la columna es de 120 ns, el acceso a la página es de 60 ns. Las RAM tipo EDO (extended data out, de corta vigencia tecnológica) lograron tener un acceso tipo 25 ns a palabras adyacentes dentro de la página. En la actualidad se emplean las SDRAM (por sincrónica) que permiten un acceso a direcciones secuenciales de memoria,
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
13
dándoles como dato de entrada la dirección de la primera dirección y el número de palabras a leer. La SDRAM emplea un reloj propio logrando tiempos de acceso tipo 8 ns. por palabra. 15.4.2.4 Ejemplo: El bloque de la memoria cache es de 32 Bytes. En caso de un fallo se desea llenar el bloque de la cache en dos ciclos de lectura de la memoria principal. Determinar la capacidad de la memoria si se emplean chip de 256K*8bits. Solución. Para cumplir la especificación de tiempo el ancho del bus entre la cache y la DRAM está dado por: 32Bytes/2 = 16 bytes = 128 bits de ancho. Si se dispone de chips de 256 K*8 se requieren 128/8 = 16 chips, resultando una capacidad de memoria de 256Kbytes/chip*16chips = 4 Mbytes. 15.4.2.5. Ejemplo: Para SDRAM, si el tiempo de acceso al renglón es tRAC = 60 ns y el tiempo de acceso en modo página es de tCAC =35 ns, con un reloj de 66 MHz, determinar los ciclos necesarios para disponer de cuatro palabras. Solución: Como el período del reloj es de 15,15 ns, se requieren 4 ciclos para el primer acceso. Para los siguientes accesos secuenciales se requieren 3 ciclos ( 3*15,15 = 45,45 >35 ns; dos ciclos equivalen a 30,30 ns y es menor que el tiempo tCAC.) Esto suele anotarse: 4-3-3-3 (nomenclatura que aparece en algunos setups). Para buses de memoria con igual frecuencia si se emplearan SBSRAM (synchronous burst sram) con tiempos de acceso entre 8,5 y 12 ns se obtendría la secuencia 2-1-1-1 para accesar 4 palabras de la cache.
15.4.3. Cache asociativa. En la cache de mapeo directo un bloque sólo puede estar localizado en un solo lugar de la cache, para flexibilizar la colocación de los bloques la cache asociativa de n vías, permite colocar un bloque en n posiciones. Se denomina asociativa por conjuntos, y cada conjunto tiene n posiciones donde puede colocarse un bloque. Cada bloque de la memoria se mapea a un único conjunto en la cache, y puede colocarse en cualquier elemento del conjunto. El diagrama siguiente ilustra una cache asociativa por conjuntos de dos vías y muestra la comparación necesaria, realizada en paralelo, para ubicar a un bloque que ahora puede estar en dos posiciones. Sólo pueden estar en la cache dos bloques que tengan igual índice; en caso de requerir colocar un tercero, con igual índice, debe aplicarse alguna política de reemplazo. El método aleatorio sustituye cualquiera; el menos recientemente usado reemplaza al bloque que haya estado más tiempo sin usarse y es complejo de implementar electrónicamente en caso de que la cache sea de varias vías.
Profesor Leopoldo Silva Bijit
18-07-2007
14
Estructuras de Computadores Digitales
Offset bytes (2)
Dirección
V
marca
Dato
V
marca
Dato
Indice (i )
Marca (m )
Compad
Mux Exito
Dato
Figura 15.11 Cache asociativa por conjuntos de dos vías. También puede diseñarse una cache completamente asociativa, en la cual un bloque de la memoria puede asociarse con cualquier entrada de la cache. En este caso debe existir un comparador asociado con cada entrada de la cache y efectuar la comparación en paralelo; esto implica gran costo y no suele emplearse. Se podrían colocar varias palabras en un bloque, en este caso se requiere un mux adicional para seleccionar la palabra dentro del bloque; y también se agregaría un campo en el bus de dirección con el offset dentro del bloque. Si el tamaño de la cache se mantiene constante, al aumentar (en un factor de dos) la asociatividad se aumenta el número de bloques por conjunto, así también el número de comparaciones simultáneas que deben realizarse en paralelo y por ende disminuye (en un factor de dos) el número de conjuntos posibles. El índice disminuye en un bit, y el campo marca aumenta en un bit. El conjunto que contiene un bloque de memoria está determinado por: (Número de bloque) módulo (número de conjuntos en la cache). Esto se ilustra para una memoria cache de 8 bloques:
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
15
Bloque Marca Datos 0 1 2 3 4 5 6 7 Mapeo directo. Asociativa de una vía
Set Marca Dato Marca Dato 0 1 2 3 Asociativa de dos vías
set Marca Dato Marca Dato Marca Dato Marca Dato 0 1 Asociativa de 4 vías. M
D
M
D
M
D
M
D
M
D
M
D
M
D
M
D
Completamente asociativa. Asociativa de 8 vías. Figura 15.12 Cache asociativas de una, dos, cuatro y ocho vías. 15.4.3.1. Ejemplo: Se tiene una cache de 4 bloques de una palabra. a) Determinar las direcciones de las entradas para una organización de acceso directo y para una cache asociativa por conjuntos de dos vías, para los bloques: 0, 6, 8. Para acceso directo se tienen: 0 módulo 4 = 0; 6 módulo 4 = 2; 8 módulo 4 = 0 Para cache de dos vías, hay dos conjuntos. En cada conjunto se tienen bloques. Entonces: 0 módulo 2 = 0; 6 módulo 2 = 0; 8 módulo 2 = 0 b) Para las organizaciones anteriores, determinar el número de fallos para cargar en la cache la secuencia de bloques: 0, 8, 0, 6, 8. Para la de acceso directo: colocar el primer bloque genera un fallo, el segundo también es fallo ya que está ocupada la entrada 0; luego vuelve a sobrescribirse la entrada 0, lo cual es otro fallo; como se asume vacía originalmente la cache, la siguiente entrada se coloca en la entrada dos, pero con un fallo; finalmente el último bloque genera otro fallo. Para cache de acceso directo, la secuencia produce 5 fallos. Para la asociativa: los dos primeros son fallos, y se completa el conjunto cero; el ingreso de la tercera entrada es exitoso; el cuarto ingreso sobrescribe el bloque 8, si se aplica la técnica de reemplazo del menos recientemente usado, provocando un fallo; el último ingreso sobrescribe el bloque 0 con el contenido del bloque 8, y también es un fallo.
Profesor Leopoldo Silva Bijit
18-07-2007
16
Estructuras de Computadores Digitales
Para cache asociativa de dos vías, la secuencia produce 4 fallos. c) Para la misma secuencia anterior determinar el número de fallos si la cache es completamente asociativa. Los dos primeros ingresos producen fallos; el tercero es un éxito, ya que encuentra el bloque 0; el cuarto es un fallo al almacenar el bloque 6; finalmente encuentra el bloque 8 con éxito. Para cache completamente asociativa, la secuencia produce 3 fallos. 15.4.3.2. Ejemplo: Se tienen tres máquinas con distintas configuraciones de memoria caché, como se aprecia en el cuadro siguiente: Máquina I Máquina II Máquina III
Correspondencia directa con bloque de una palabra Correspondencia directa con bloque de cuatro palabras 2 vías asociativa por conjuntos con bloques de cuatro palabras
Para cada una de estas máquinas la penalización de escritura en la caché es de 6 ciclos más 1 ciclo por cada palabra del bloque. (La máquina III es equivalente a la máquina II en la escritura de una palabra en un bloque, ya que se asume ideal la selección del conjunto en que se escribe). Además una aplicación cualquiera posee los siguientes porcentajes de instrucciones: Branch 20% Load 13% Store 12% Inmediatas 20% Tipo R 35% Se tienen las siguientes tasa de fallos en memoria caché: Máquina Tasa de fallos de Instrucciones I 4% II 2% II 1.5%
Tasa de fallos de Datos 20% 16% 14%
Por último, CPI total para la máquina I es de 3.0 (ejecución + penalización) Calcular la penalización total (instrucciones + datos) para las tres máquinas e indique cuál máquina es la que ocupa mayor tiempo en los accesos a memoria. Ciclos de detención en memoria de instrucciones = Instrucciones * Tasa de fallos* Penalización por fallos Ciclos de detención en memoria de datos = Instrucciones que accesan memoria*Tasa de fallos * Penalización por fallos Penalización total = Ciclos de detención-memoria-instrucciones + Ciclos de detención-memoria -datos Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
17
Loads y Store = 25% (Instrucciones/programa) Penalización por fallo: Máquina I = 6 +1 = 7 ciclos Maquina II y III = 6 + 4 = 10 ciclos Penalización total I = 1.00*0.04 * 7 + 0.25 * 0.20 * 7 = 0.28 + 0.35 Penalización total II = 1.00*0.02 * 10 + 0.25 * 0.16 * 10 = 0.20 + 0.4 Penalización total III = 1.00*0.015 * 10 + 0.25 * 0.14 * 10= 0.15 + 0.35
= 0.63 = 0.60 = 0.50
Máquina I posee una mayor espera en los accesos a memoria. a) Cuál es el CPI de las Máquinas II y III CPI base = CPI (Máquina I) – penalización = 3.0 – 0.63 = 2.37 CPI II = 2.37 + 0.6 = 2.97 CPI III = 2.37 + 0.5 = 2.87 b) Suponga que la velocidad de estas máquinas es de 100Mhz. (10 ns por ciclo), cual es el tiempo promedio de acceso a memoria para estas máquinas asumiendo que las máquinas I y II poseen un tiempo de éxito de 1 ciclo y que la máquina tres posee un tiempo de éxito de 2 ciclos. Nota: Por cada 100 instrucciones, 25 accesan memoria, entonces 25/125 (el 20%) de los accesos son de datos y el 100/125 (el 80%) son de instrucciones. Máquina I = 10ns [0.80 * (1 + 0.04 * 7) + 0.2 * (1 + 0.2 * 7)] = 1.504 ns Máquina II = 10ns [0.80 * (1 + 0.02 * 7) + 0.2 * (1 + 0.16 * 7)] = 1.48 ns Máquina III= 10ns [0.80 * (2 + 0.015 * 7) + 0.2 * (2 + 0.14 * 7)] = 24 ns Ejemplo: Se tienen tres máquinas con distintas configuraciones de memoria caché, como se aprecia en el cuadro siguiente: Máquina I Máquina II Máquina III
Correspondencia directa con bloque de una palabra Correspondencia directa con bloque de cuatro palabras 2 vías asociativa por conjuntos con bloques de cuatro palabras
Para cada una de estas máquinas la penalización de escritura en la caché es de 4 ciclos más 1 ciclo por cada palabra del bloque. (La máquina III es equivalente a la máquina II en la escritura de una palabra en un bloque, ya que se asume ideal la selección del conjunto en que se escribe). Además una aplicación cualquiera posee los siguientes porcentajes de instrucciones: Branch 15% Load 15% Store 10% Inmediatas 25% Tipo R 35% Profesor Leopoldo Silva Bijit
18-07-2007
18
Estructuras de Computadores Digitales
Se tienen las siguientes tasa de fallos en memoria caché: Máquina Tasa de fallos de Instrucciones I 4% II 2% III 1.5%
Tasa de fallos de Datos 20% 16% 14%
Por último, CPI total para la máquina I es de 3.0 (ejecución + penalización) c) Calcular la penalización total (instrucciones + datos) para las tres máquinas e indique cuál máquina es la que ocupa mayor tiempo en los accesos a memoria. Ciclos de detención en memoria de instrucciones = Instrucciones * Tasa de fallos* Penalización por fallos
Ciclos de detención en memoria de datos = Instrucciones que accesan memoria*Tasa de fallos * Penalización por fallos Penalización total = Ciclos de detención-memoria-instrucciones + Ciclos de detención-memoria -datos Loads y Store = 25% (Instrucciones/programa) Penalización por fallo: Máquina I = 4 +1 = 5 ciclos Maquina II y III = 4 + 4 = 8 ciclos Penalización total I = 1.00*0.04 * 5 + 0.25 * 0.20 * 5 = 0.2 + 0.25 Penalización total II = 1.00*0.02 * 8 + 0.25 * 0.16 * 8 = 0.16 + 0.32 Penalización total III = 1.00*0.015 * 8 + 0.25 * 0.14 * 8= 0.12 + 0.28
= 0.45 = 0.48 = 0.40
Máquina I posee una mayor espera en los accesos a memoria. Si se incrementa la asociatividad de la máquina III, manteniendo el tamaño del bloque constante, esto produce que la tasa de fallos de instrucciones sea cero y si el CPI total para esta máquina es de 2.75, Cuál es la nueva tasa de fallos de datos ?. CPI base = CPI (Máquina I) – penalización = 3.0 – 0.45 = 2.55 Penalización total por acceso a memoria = 2.75 – 2.55 = 0.2 0.2 = 8*(0.1 + 0.15)* tasa fallos de datos tasa de fallos de datos = 10%
15.5. Memoria Virtual. La memoria principal actúa como una cache para el almacenamiento secundario en discos magnéticos. Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
19
Se desea disponer de un ambiente eficiente y seguro para compartir la memoria entre diversos programas y disponer de una memoria mayor que la física para la ejecución de programas y procesamiento de los datos. Esto puede lograrse ya que si se tienen varios programas en ejecución, éstos sólo usan (en un cierto intervalo de tiempo) una pequeña parte de la memoria que requieren, a pesar de que la suma de los requerimientos totales de memoria, de todos ellos, puedan exceder la memoria física disponible. El sistema operativo debe permitir a los programas compartir la memoria y garantizar que cada programa no invada el espacio que ocupan los otros. Además las direcciones físicas que serán asignadas a los segmentos activos de los programas pueden ir cambiando en el tiempo; para permitir esta forma de emplear la memoria, cada programa, al ser compilado, emplea un espacio propio de direcciones. La memoria virtual es responsable de traducir las direcciones del programa a direcciones físicas. Esto también permite que el espacio de direcciones del programa sea mayor que el espacio de direcciones físico. Uno podría considerar que el programa compilado reside en disco, y que sólo parte de esas direcciones del programa están mapeadas en direcciones físicas. Por esta razón un programa podría ser tan grande como el espacio en disco que se le permita ocupar (lo cual podría ser mucho mayor que la memoria física). Esta "ilusión" de una memoria, prácticamente ilimitada, la provee el sistema de memoria virtual. La organización de memoria virtual y memoria cache es similar. Pero, por razones históricas se emplea el concepto de página en lugar de bloque. La dirección de las instrucciones y datos de un programa se denominan direcciones virtuales, las cuales son traducidas a direcciones físicas. Se requiere un hardware dedicado y segmentos del sistema operativo para efectuar eficientemente el mapeo de páginas virtuales a páginas físicas. Para esto una dirección está dividida en campos: el número de página y la posición dentro de la página. El ancho del campo para el offset dentro de la página define el tamaño de ésta, y toma el mismo valor para la dirección virtual y física. Obviamente los bits dedicados al número de página en una dirección virtual son mayores que los de las direcciones físicas. Con 12 bits, para el offset, las páginas son de 4KB. En la actualidad las páginas tienden a ser de 32KB y mayores. Esto implica una enorme penalización en caso de falla de página (pueden ser millones de ciclos), considerando los tiempos de latencia electromecánicos involucrados y las tasas de transferencia entre el disco y la memoria. Suele emplearse escritura postergada en el disco, en caso de escritura; y técnicas de colocación de página totalmente asociativas. Además algoritmos que tiendan a reducir las fallas de página, ya que el costo temporal de la ejecución de éstos es muchísimo menor que el requerido por una falla de página (que requiere mover varios KB desde el disco hacia la memoria). 15.5.1. Tabla de páginas.
Para lograr la completa asociatividad se emplea una Tabla de Páginas residente en memoria, que tiene como índice el número de página virtual y como contenido el número de página física, Profesor Leopoldo Silva Bijit
18-07-2007
20
Estructuras de Computadores Digitales
además de un bit para indicar si la página está o no presente en la memoria. Cada programa tiene su propia tabla de páginas, y se dispone un registro en el procesador para apuntar a la tabla de página activa. Dirección virtual
Número página virtual
offset en página
v V Número de página física.
Puntero a TP
o
Tabla de Páginas f Dirección física
Número página física
offset en página
Figura 15.13 Tabla de páginas. Un programa en ejecución, se denomina proceso, y requiere una tabla de página y el valor de los registros (adicionalmente información sobre prioridad de ejecución, estado del proceso, archivos que emplea, etc.), el sistema operativo es responsable de asignar memoria física y actualizar la tablas de página de tal modo que los diferentes procesos funcionen con sus propios espacios(es decir los programas sólo pueden leer y escribir las porciones de memoria principal que tienen asignadas). El sistema operativo también es responsable de ir activando, con cierta política de itineración los diferentes procesos, de tal modo que sólo uno esté activo durante cierto intervalo de tiempo, para esto basta que mantenga información del estado de los diferentes procesos. Específicamente para activar el espacio de direcciones basta actualizar el registro que apunta a la tabla de páginas del proceso. En caso de producirse una falla de página, se genera excepción. El sistema operativo debe encontrar la página en el disco y decidir dónde colocarla en la memoria principal. Para facilitar esta tarea cuando se crea un proceso se almacena en una zona del disco todas las páginas de un proceso y a la vez una estructura de datos que asocie la página virtual con la dirección física del disco donde ésta se encuentra. Esta estructura puede ser la misma tabla de páginas del proceso. 15.5.2. Ejemplo: Con un espacio virtual de direcciones de 32 bits, con páginas de 4 Kbytes calcular el tamaño de la tabla de páginas de un proceso. Se tienen 12 líneas para el offset de página y 20 para direccionar la tabla de páginas, es decir, 1M de entradas a la tabla de páginas. Si el espacio físico es de 1 giga, se requieren 18 bits para
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
21
el número de página física, más un bit para marcar si la página está o no en memoria. Podría agregarse un bit, para indicar que la página ha sido modificada y que debe ser escrita hacia el disco, para mantener consistentes los niveles. Además suele agregarse bits para implementar mecanismos de protección, y también la dirección física de la ubicación de la página en el disco. Si se contemplan 32 bits por entrada, se tendrá que la tabla de páginas requiere: 220 * 32 bits = 1M * 4 Bytes = 4 MBytes. Si se desea que una máquina pueda tener una serie de procesos activos, la mayor parte de la memoria principal debería estar dedicada a almacenar las tablas de página. Esto implica desarrollar un método para reducir el almacenamiento necesario para almacenar las tablas de página. 15.5.3. TLB Para mejorar el tiempo requerido para efectuar las traducciones de direcciones virtuales a físicas los diseños actuales agregan una pequeña cache totalmente asociativa, denominada TLB (translation-lookaside buffer) que podríamos traducir por: almacén de traducciones recientes, la cual guarda las últimas traducciones realizadas. Dirección virtual
Número página virtual v V
offset en página
TLB Marca Número de página física.
Tabla de Páginas V N° bloque N° página disco. física.
Puntero a TP
Dirección física
o
f
offset en página
Número página física Marca para cache
índice cache
Direccionamiento Figura 15.14 TBL. Direcciones físicas y virtuales. Efectuar una traducción requiere dos accesos a memoria: uno a la tabla de páginas para encontrar la dirección física (siempre que ésta esté totalmente en memoria) y otro para obtener Profesor Leopoldo Silva Bijit
18-07-2007
22
Estructuras de Computadores Digitales
el dato. Debido a que cuando se requiere una traducción, lo más probable es que en el futuro se la vuelva a requerir, debido a que las referencias a esa página tienen localidad temporal y espacial, es razonable introducir la cache denominada TLB. Cuando se requiere una referencia a memoria, se busca el número de la página virtual en la tabla de traducciones recientes (TLB), si es un éxito, con el número de página física del TLB se forma la dirección física, se marca el bit de página válida; si es un referencia de escritura se marca otro bit (dirty bit), para indicar que la página deberá ser escrita posteriormente en el disco. Si se produce un fallo en TLB, se accesa la tabla de páginas y se determina si la página está en memoria (con el bit de validez de la tabla de páginas) si está, se carga la dirección física en el TLB(es un fallo de TLB y no de página) y se vuelve a intentar la referencia. En caso de fallo de página se genera excepción, se registra el estado de los bits de estado de la entrada al TLB (dejando la entrada disponible) y se busca en el disco la página que falta; se actualiza la tabla de páginas (manteniendo los bits de estado), se busca una entrada en el TLB donde se graban la dirección física la marca y los bit de estado, y se vuelve a intentar la referencia. Copiar los bits de estado de TBL en la Tabla de páginas sólo en caso de fallo posterga lo más posible la escritura a disco. Con TLB de unas 64 entradas, y bloques de dos referencias a páginas físicas por entrada, se logran tiempos de un ciclo para determinar el éxito o fallo de TLB, con una penalización adicional de unos 20 ciclos de reloj, para reponer la entrada. Con estas características se logran tasas menores al 1% de fallos de TLB. Debe considerarse que la tasa de fallos de una cache es menor que el 10%, y que la tasa de fallas de página típicas son menores que el 0,0001%. En el caso del procesador MIPS existen instrucciones del repertorio y registros dedicados que permiten actualizar el TLB. Debido al sistema jerárquico de la memoria, si un dato está en la cache también debe estar en la memoria principal. Si un bloque de la cache, en el cual se han cambiado sus valores (tiene marcado el bit de escritura, dirty bit) requiere ser reutilizado con otro bloque, antes de disponer del espacio debe escribirse en la página en memoria. Si el espacio de memoria física en que está una página es reutilizado con otra, antes de sobreescribir en ella, si la página tiene marca de haber sido modificada, deberá ser escrita en el disco. Por la estructura jerárquica descrita no puede ocurrir un fallo de página y un éxito en el TLB. Ya que no puede existir la traducción si la página no está presente en memoria. Si se produce un éxito en TLB la tabla de páginas correspondiente debe estar en la memoria.
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
23
Tampoco puede existir un éxito en la cache si la página no está en memoria.
Profesor Leopoldo Silva Bijit
18-07-2007
24
Estructuras de Computadores Digitales
Índice general. CAPÍTULO 15. ...........................................................................................................................................1 MEMORIA..................................................................................................................................................1 15.1. ORGANIZACIÓN DE MEMORIAS ESTÁTICAS. ......................................................................................1 15.1.1. Ciclo de lectura controlado por el cambio de dirección..........................................................3 15.1.2. Ciclo de lectura controlado por señales de control. ................................................................4 15.1.3. Ciclo de escritura controlado por WE. ....................................................................................4 15.1.4. Decodificación en dos niveles..................................................................................................5 15.2. ORGANIZACIÓN DE MEMORIAS DINÁMICAS. .....................................................................................5 15.3. LOCALIDAD. .....................................................................................................................................7 15.4. MEMORIA CACHE. ............................................................................................................................7 15.4.1. Cache de mapeo directo...........................................................................................................8 15.4.1.1 Diseño de un buffer de escritura:........................................................................................................9 15.4.1.2. Ejemplo cache acceso directo..........................................................................................................10
15.4.2. Cache de mapeo directo.........................................................................................................11 15.4.2.1 Interleaving. .....................................................................................................................................12 15.4.2.2. Bancos.............................................................................................................................................12 15.4.2.3. Modo paginado................................................................................................................................12 15.4.2.4 Ejemplo:...........................................................................................................................................13 15.4.2.5. Ejemplo:..........................................................................................................................................13
15.4.3. Cache asociativa. ...................................................................................................................13 15.4.3.1. Ejemplo:..........................................................................................................................................15 15.4.3.2. Ejemplo:..........................................................................................................................................16
15.5. MEMORIA VIRTUAL........................................................................................................................18 15.5.1. Tabla de páginas....................................................................................................................19 15.5.2. Ejemplo:.................................................................................................................................20 15.5.3. TLB.........................................................................................................................................21 ÍNDICE GENERAL. ....................................................................................................................................24 ÍNDICE DE FIGURAS. ................................................................................................................................25
Profesor Leopoldo Silva Bijit
18-07-2007
Memoria
25
Índice de figuras. FIGURA 15.1 ESQUEMA MEMORIA ESTÁTICA, DE 4*2.................................................................................... 2 FIGURA 15.2 ESQUEMA DE MEMORIA............................................................................................................ 3 FIGURA 15.3 CICLO DE LECTURA. ................................................................................................................. 3 FIGURA 15.4 CICLO DE LECTURA, CONTROLADO POR SEÑALES DE CONTROL. ............................................... 4 FIGURA 15.5 CICLO DE ESCRITURA CONTROLADO POR WE. ......................................................................... 4 FIGURA 15.6 DECODIFICACIÓN EN DOS NIVELES........................................................................................... 5 FIGURA 15.7 RENGLONES Y COLUMNAS EN DRAM...................................................................................... 6 FIGURA 15.8 CACHE DE MAPEO DIRECTO. BLOQUE UNITARIO. ..................................................................... 8 FIGURA 15.9 BUFFER DE ESCRITURA............................................................................................................. 9 FIGURA 15.10 CACHE DE MAPEO DIRECTO. BLOQUES DE 4. ........................................................................ 11 FIGURA 15.11 CACHE ASOCIATIVA POR CONJUNTOS DE DOS VÍAS. ............................................................. 14 FIGURA 15.12 CACHE ASOCIATIVAS DE UNA, DOS, CUATRO Y OCHO VÍAS................................................... 15 FIGURA 15.13 TABLA DE PÁGINAS. ............................................................................................................. 20 FIGURA 15.14 TBL. DIRECCIONES FÍSICAS Y VIRTUALES............................................................................ 21
Profesor Leopoldo Silva Bijit
18-07-2007