Memoria Principal Departamento de Arquitectura de Computadores Índice Introducción. Conceptos básicos Memoria Principal Características físicas Organización Memoria Caché Características de los sistemas de memoria Jerarquías de memoria Organización Políticas de ubicación Políticas de sustitución Políticas de escritura Políticas de búsqueda Memoria Virtual Conceptos generales La memoria principal es el siguiente nivel de la jerarquía de memorias, a continuación de la/s cache/s, y por tanto satisface las demandas de ese nivel. Está construida con DRAMs, las cuales están pensadas para aumentar la densidad (menor número de transistores por bit de memoria) en lugar de disminuir el tiempo de acceso. Al ser el siguiente nivel de la jerarquía, y por el hecho de ser un nivel más lento que la caché, su organización influye en la penalización de fallo y por tanto influye en el rendimiento. Memoria principal: características físicas Tipos de memoria semiconductora de acceso aleatorio: Memoria RAM RAM (Random-Access Memory): Memoria de acceso aleatorio. Es posible tanto leer como escribir mediante señales eléctricas. Memoria volátil. Debe estar conectada continuamente a la alimentación lo que implica que sirva como almacenamiento temporal únicamente. Las tecnologías de RAM se dividen en: Dinámicas DRAM: tienen celdas que almacenan lo datos como cargas de condensadores. La presencia o ausencia de carga se interpreta como un 1 ó un 0 binarios. La tendencia a descargarse de los condensadores hace que sea necesario un refresco constante. Estáticas SRAM: los valores binarios se almacenan utilizando configuraciones de puertas que forman biestables (flip-flops). Una RAM de este tipo mantendrá los datos mientras se mantenga la alimentación. DRAM vs SRAM: Dinámicas son mas densas (celdas mas pequeñas = mayor número de celdas). Para memorias grandes suelen utilizarse memorias dinámicas. Las memorias estáticas son más rápidas y por tanto mas propicias para memoria caché (tamaño pequeño). Memoria ROM ROM (Read-Only Memory): Memoria de acceso aleatorio Memoria de sólo lectura. Contienen un patrón permanente de datos que no puede alterarse. No pueden escribirse datos nuevos. Memoria permanente o no-volátil Sirven para almacenar el programa de arranque de los computadores: la BIOS del sistema (rutinas que sirven para poner en funcionamiento el computador y revisar la fiabilidad del sistema) y los FIRMWARE (información, configuración y rutinas de diagnóstico) de los dispositivos instalados en el sistema. Una ROM se construye como cualquier otro chip de circuito integrado, con los datos cableados en el chip durante el proceso de fabricación. Estos presenta dos problemas: La etapa de inserción de datos implica unos costes fijos relativamente grandes tanto si se va a fabricar una o miles de copias de una misma ROM. No se permiten fallos. Si uno de los bits es erróneo, debe desecharses ka tirada completa de memorias ROM. Tipos de ROM ROM de máscara. Grabada por fabricante. No se puede borrar. PROM (programable ROM). Grabada por el usuario. No se puede grabar ni introducir nueva información tras su grabado. EPROM (erasable PROM). Puede borrarse completamente con luz ultravioleta y permite que se almacene un nuevo programa múltiples veces. EEPROM (electrical EPROM). Permite borrar su contenido anterior a nivel de byte eléctricamente. Combina la ventaja de ser no volátil con la flexibilidad de ser actualizable in situ. FLASH pueden borrarse enteras en unos cuantos segundos, de forma más rápida que las EEPROM. Además se puede llevar el proceso de borrado a nivel de bloque. Conexión de módulos de memoria (ROM o RAM) al bus del sistema Los módulos típicos de memoria ROM (PROM, EPROM, etc.) y RAM (SRAM, DRAM) son asíncronos La operaciones de lectura y escritura no se rigen por una señal de reloj Para iniciar una transferencia se utilizan las señales de Dirección Chip select (CS*) Tipo de operación: OE* = Output Enabled (lectura) y WE* = Write Enabled (escritura) Los ciclos de lectura/escritura tienen una duración determinada y conocida para un módulo de memoria específico El módulo de memoria debe conectarse al bus del sistema a través de un controlador o adaptador de memoria Convierte las señales de control que genera la CPU a las señales que utiliza el módulo de memoria Genera las señales de control necesarias sobre la CPU para que las transferencias se realicen correctamente, conocido el tiempo de ciclo de la memoria WAIT o READY en bus semisíncrono SSYNC o DTACK* en bus asíncrono Conexión de módulos de memoria (ROM o RAM) al bus del sistema Organización El elemento básico de una memoria semiconductora es la celda de memoria. Todas comparten las siguientes propiedades: Presentan dos estados estables que representan el 1 y el 0 lógicos. Puede escribirse en ellas al menos una vez. Pueden leerse para detectar su estado. Organización básica del chip de memoria: Transductores de escritura/lectura: dispositivos que suministran la suficiente energía al medio para grabar el estado deseado y por otro lado son capaces de detectar las magnitudes físicas para reconocer el estado en que se encuentra el medio respectivamente. Cada fila constituye una palabra En una operación de escritura lectura se escriben o leen todas las celdas de una palabra. Comunicación memoria principal -CPU La transferencia de datos entre la MP y la CPU se realiza gracias a dos registros: MAR (Memory Address Register): delimita el tamaño de la memoria. MDR (Memory Data Register): delimita el tamaño de los datos. MAR MDR Bus de direcciones de k bits Mem. Ppal. 2k palabras direccionables Bus de datos de n bits Longitud de palabra = n bits Líneas de control (Leer, escribir, MFC,..) Organización de la información en la memoria Organización por palabras: La memoria se organiza en grupos de “k” bits llamados palabras Para especificar una palabra se necesitan “n” bits Cada palabra tiene asignada una dirección comprendida entre 0 y 2n-1 Organización por bytes: A bytes individuales se le asignan direcciones independientes. Una palabra compuesta por varios bytes puede ser accedida de manera individual a cada uno de ellos. Para un mismo tamaño de memoria se necesita un mayor número de bits a la hora de poder direccionar. Problemas: Cómo relacionar las direcciones de las palabras con las direcciones de las unidades direccionables (bytes). Cómo ordenar el contenido de una palabra en un conjunto consecutivo de unidades direccionables. Relación de direcciones: palabras-bytes Se obliga a que los datos empiecen en determinadas direcciones de memoria principal. Se dice que un dato de n bytes ubicado en la dirección D está alineado si: D mod n = 0. Datos de 1 byte pueden ubicarse en cualquier posición de memoria. Datos de 2 bytes pueden ubicarse en direcciones pares. Datos de 4 bytes pueden ubicarse en direcciones múltiplos de 4. Ventaja: para acceder a una palabra donde los datos están alineados, únicamente se requiere un acceso a memoria. Desventaja: quedan espacios de memoria sin utilizar. Si se tiene un dato de 8 bits almacenado en la dirección 0 seguido de uno de 32 bits, se hace necesario dejar un espacio no útil de 24 bits. 4 Bytes 0 4 8 12 Espacio sin utilizar 4 Bytes Dos accesos a memoria 0 4 8 12 16 20 2n-4 2n-4 Memoria Palabras alineadas Memoria Palabras no alineadas Ordenación del contenido de una palabra Existen dos posibilidades a la hora de repartir el contenido de una palabra en un conjunto sucesivo de bytes: Big-Endian: la dirección del dato corresponde al octeto más significativo. Little-Endian: la dirección del dato corresponde al octeto menos significativo. Dato FC1854A3 almacenado en la dirección de memoria 8 8 11111100 8 10100011 9 00011000 9 01010100 10 01010100 10 00011000 11 10100011 11 11111100 Big-Endian Little-Endian Rendimiento de la memoria principal Los parámetros para evaluar el rendimiento de la memoria principal son: Latencia : tiempo en obtener el primer acceso Ancho de banda : número de bytes leídos o escritos por unidad de tiempo Para lograr un buen rendimiento, hay que conseguir el mejor ancho de banda posible entre la cache y la memoria principal, ya que así se disminuye el tiempo de transferencia. El tiempo de acceso o latencia es difícil de reducir. Las posibles organizaciones para mejorar el rendimiento de la memoria principal son: Aumentar el ancho de la memoria Utilizar memoria entrelazada Utilizar bancos de memoria independientes Organización con ancho de una palabra La conexión de la CPU con la cache es de 1 palabra de ancho, al igual que la conexión entre la cache y la memoria principal. Si suponemos: 1 ciclo para enviar la dirección. 15 ciclos para cada acceso a una posición de la DRAM. 1 ciclo para enviar una palabra de datos. Bloque de cache de 4 palabras (16 bytes) => Bus Datos de 32 bits. Penalización de fallo = 1 + 4 x 15 + 4 x 1 = 65 ciclos Medida del ancho de banda entre la cache y la memoria principal Nº bytes transferidos /ciclo = 16 / 65 = 0,25 Organización con ancho de varias palabras Se aumenta el ancho de banda haciendo la memoria y el bus de varias palabras de ancho. Aumentar el ancho de la memoria y del bus disminuye el tiempo de acceso y el tiempo de transferencia => disminuye la penalización de fallo Se necesita un multiplexor que seleccione la palabra del bloque de cache que se va a suministrar a la CPU Todas estas medidas aumentan el coste, y aumentan también el tiempo de acceso a la cache. Si ancho de memoria es de 2 palabras Penalización de fallo = 1 + 2x15 + 2x1 = 33 ciclos Nº bytes transferidos/ciclo = 16/33 = 0,48 Si ancho de memoria = 4 palabras Penalización de fallo = 1 + 1x15 + 1x1 = 17 ciclos Nº bytes transferidos/ciclo = 16/17 = 0,94 Organización de memoria entrelazada Cuando la memoria principal está estructurada como un conjunto de módulos físicamente separados, será posible acceder simultáneamente a todos ellos. De este modo la velocidad de transmisión hacia o desde el sistema a la MP aumenta. Tipos: Entrelazado de orden superior: consiste en distribuir las direcciones de memoria entre los módulos de modo que cada uno contenga direcciones consecutivas; si la CPU requiere posiciones consecutivas de tal forma que es un único módulo el que está permanece ocupado, los dispositivos con capacidad de acceso directo a memoria (DMA) pueden operar sobre los restantes módulos. Si por ejemplo empleamos módulos de 2n posiciones, se asignan las 2n primeras posiciones al primer módulo, las posiciones de 2n a las 22n -1 al segundo módulo y así sucesivamente. Entrelazado de orden inferior: consiste en distribuir a módulos consecutivos direcciones consecutivas del mapa de memoria; si las referencias sucesivas son consecutivas, aunque se sigue pagando el coste de transferir cada palabra secuencialmente, se reducen los conflictos de acceso y por tanto el ancho de banda aumenta considerablemente. Si por ejemplo la memoria tiene 4 módulos, el primero de ellos contendría las palabras 0, 4, 8, 12,…, mientras que el segundo ocuparía las posiciones 1, 5, 9, 13,…, etc. Entrelazado de orden superior Ejemplo: tendríamos una distribución direcciones de manera que las consecutivas irán en el mismo módulo: de Entrelazado de orden inferior el entrelazado de orden inferior produciría una distribución de direcciones de manera que las consecutivas irán en módulos diferentes: Entrelazado de orden inferior Se incrementa el ancho de banda ensanchando la memoria pero no el bus de conexión. Memoria organizada en bancos de 1 palabra de ancho. Se leen/escriben simultáneamente varias palabras (tantas como bancos) con un solo tiempo de acceso. Hay una parte común en la dirección que se envía a todos los bancos Todos los bancos acceden simultáneamente al dato ubicado en esa dirección Se lee el dato disponible en cada banco → se obtiene un bloque de datos Los bits menos significativos de la dirección seleccionan el banco de memoria. Direcciones consecutivas de memoria (Dn) se ubican en bancos consecutivos. Ejemplo con 4 bancos: D0 -> Banco0; D1 -> Banco1; D2 -> Banco2; D3 -> Banco3; Dn -> Banco(Dn MODULO Nº Bancos) Entrelazado de orden inferior Se sigue pagando el coste de transmitir cada palabra secuencialmente, pero se evita pagar más de una vez la latencia de acceso. Con 4 bancos de memoria: Penalización de fallo = 1 + 1x15 + 4x1 = 20 ciclos Nº bytes transferidos/ciclo = 16/20 = 0,80 EL SISTEMA ENTRELAZADO ES 3,2 VECES MÁS RÁPIDO Se hacen más rápidas las escrituras => importante en write through. Funcionan al mismo tiempo todos los módulos => más consumo Dificultad para expandir la memoria Chips de memoria SRAM 2nxk Celda básica (1 bit) constituida por un biestable Ventajas Tamaño 2nxk 2n palabras de k bits, siendo k = 1, 2, 4 u 8 Ejemplo: chips de memoria 51C86 de Intel Tamaño 4Kx4 Organización 2-D Diseño de memorias cache Alta velocidad y pequeño tamaño Chips de memoria SRAM comerciales Disipan mucha energía Baja densidad de integración Coste elevado Aplicación Tiempo de acceso y de ciclo reducido Alta velocidad de transferencia Desventajas Mantiene la información mientras exista suministro eléctrico La implementación puede ser bipolar o MOS Un chip de 2n palabras de k bits se organiza como un array de 2n filas por k columnas Para construir placas de memoria de mayor tamaño se deben combinar varios chips de memoria con la lógica de descodificación adicional adecuada Chips de memoria DRAM 2nx1 Celda básica (1 bit) constituida por un condensador y un único transistor MOS La información binaria se mantiene en forma de carga del condensador El control de la carga/descarga del condensador se realiza mediante un conmutador Tiempo de ciclo elevado Necesidad de refresco Aplicación Bajo consumo de energía Alta densidad de integración Coste reducido Desventajas Necesidad de un refresco periódico de la información contenida en la RAM El refresco consiste en la lectura del condensador y posterior escritura con idéntico valor (amplificado) Ventajas Implementado mediante un transistor MOS Los condensadores pierden la carga al cabo de unos pocos milisegundos 1 lógico: presencia de carga en el condensador; 0 lógico: ausencia de carga en el condensador Diseño de memoria principal Gran tamaño y velocidad baja Chips de memoria DRAM Tamaño 2nx1 ó 2nx4 Organización 2-1/2-D Un array 2n/2x 2n/2 por bit Aspectos de diseño de la memoria principal Las DRAMs evolucionan hacia mayor densidad, no menor tiempo de acceso. Una DRAM es una matriz de d x w elementos, siendo d el número de filas distintas y w el número de bits de salida para cada fila (1≤ w ≤ 16, común 4 y 8) Si aumenta la densidad, el tamaño total de la DRAM crece, pero como w se mantiene constante (coste de verificación y encapsulado menor) => d crece. Aumentar el tamaño total conduce a que la configuración mínima de memoria crezca, y esto puede no interesarnos por razones de coste, etc... => Cada vez es menos atractivo construir la memoria con múltiples bloques de memoria porque la configuración mínima de memoria crece. Ejemplo Construir una memoria de 64 MB con chips de 4Mbit x 1 , y palabras de 32 bits. 4 bancos con 32 DRAMs de 4Mbit x 1 => 128 DRAMS de 4Mbit x 1 Si usamos chips de 16Mbit x 1 => 1 solo banco con 32 chips de 16M x1, y si quisiéramos tener 4 bancos (por hacer la memoria entrelazada), estaríamos obligados a poner 32x4 chips de 16M x 1, haciendo un total de 256MB de memoria. Diseño modular de memorias Si las dimensiones de la memoria exceden a las de un chip, para alcanzar la capacidad exigida, será necesario realizar una configuración modular (usar varios módulos hasta cumplir las restricciones de tamaño): Lo habitual es que la memoria requerida no coincida con ningún chip de memoria disponible: Longitud de palabra múltiplo de la del chip Nº de palabras direccionables mayor que las del chip. Incremento del tamaño de las palabras Incremento del número de palabras Incremento del tamaño de las palabras Ejemplo: memoria de 2nx32bits a partir de chips de 2nx8bits Incremento del número de palabras Ejemplo: memoria de 4Kx8bits a partir de chips de 1Kx8bits Ejemplo Se dispone de un sistema microprocesador con bus de datos de 16 bits y bus de direcciones de 20 bits. En este sistema se quiere implementar una memoria RAM de 256 kpalabras situadas en las posiciones mas bajas de memoria y una memoria ROM de 128 Kpalabras situada en la parte superior de la memoria. Para ello se dispone del número suficiente de circuitos de memorias de los tipos siguientes: RAM de 64Kx4 y ROM de 32Kx8, así como la circuitería auxiliar necesaria. Hacer un esquema del diseño resultante. RAM: Como los chips son de 64Kx4 necesitamos 16 circuitos. ( 4x64 = 256K asociados de 4 en 4 para tener la longitud de palabra apropiada) ROM: En este caso los chips son de 32Kx8 luego necesitamos 8 circuitos ( 4x32 = 128K asociados de 2 en dos para tener la longitud de palabra adecuada) Mapa de memoria Decodificador Diseño Principales recursos para mejorar las prestaciones de la memoria principal La memoria principal indispensables: debe ser capaz de cubrir dos Un tiempo de acceso a las posiciones de memoria en consonancia con el tiempo de procesamiento por parte de la unidad de control. La realización de una instrucción se compone de una fase de búsqueda del código máquina dependiente de la memoria principal y mas tarde una fase de ejecución donde se interpreta el código máquina obtenido anteriormente y se disponen las operaciones necesarias. Un comportamiento equilibrado del sistema presupone que la fase de búsqueda dependiente de las características de la memoria no debe suponer un cuello de botella de manera tal que ambas fases duren un tiempo simular (fase búsqueda ≈ fase ejecución). Suficiente capacidad para contener los programas y datos en fase de ejecución. Para cubrir ambos requisitos se emplean dos técnicas: requisitos Memoria caché: incrementa la velocidad de acceso. Memoria virtual: aumenta la capacidad real de la memoria principal.