Estructura de Computadores Cap. 5: Memoria. José Daniel Muñoz Frías Universidad Pontificia Comillas. ETSI ICAI. Departamento de Electrónica y Automática
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 1
Índice 1. Introd Introducc ucción ión.. Jerarq Jerarquía uía de memoria memorias. s. 2. Caract Caracterí erísti sticas cas de las memoria memorias. s. 3. Memoria Memoriass de acceso acceso aleato aleatorio rio.. Bancoo de re regi gist stro ross. a ) Banc emoria ia SRAM SRAM.. b ) Memor Memor oria ia DRAM RAM. c ) Mem d ) Memor emoria ia ROM. OM. 4. Orga Organi niza zaci ción ón de la memo memoria ria.. 5. Memo Memoria riass asoc asocia iatitivvas. as. 6. Memo Memori riaa virtu virtual al.. ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 2
Introducción La memoria almacena los datos y los programas del computador. Sus prestaciones marcan las del ordenador completo: es un cuello de botella. Existen varias tecnologías para su implementación: Las rápidas son caras y de poca capacidad. A mayor capacidad, más lentas y más baratas. Esto hace necesario usar una jerarquía de memorias. •
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 3
En el capítulo 1 (pg. 9) se vio que la estructura básica de un ordenador estaba compuesta por una CPU, una unidad de E/S y una memoria para almacenar los programas y los datos. La memoria es por tanto una parte fundamental del ordenador. Además sus prestaciones limitan las prestaciones del ordenador completo, pues aunque la CPU sea muy rápida, si la memoria no puede alimentarla con las instrucciones y los datos que necesita, de nada nos valdrá tanta velocidad en la CPU. Existen varias tecnologías para implantar las memorias, según se verá más adelante. En cuanto a las prestaciones, por desgracia las memorias rápidas tienen poca capacidad y son caras, por lo que no se pueden usar para dotar al ordenador de toda la memoria que necesita (salvo que se tenga muchísimo dinero y ganas de malgastarlo). La solución es adoptar una jerarquía de memorias.
Introducción CPU Registros Cache Memoria principal Memoria secundaria (HD)
t i d a b / d i e t c o s l o e C V
Memoria terciaria (CD, cintas) Tamaño ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 4
En la práctica los programas muestran localidad temporal (si un dato acaba de usarse, es muy probable que vuelva a ser usado en breve) y espacial (si se accede a un dato, es muy probable que sea necesario acceder a datos que están próximos a él). La jerarquía de memoria saca partido de ambas localidades: para aprovechar la localidad temporal el sistema mantiene cerca del procesador los datos usados más recientemente. Para aprovechar la localidad espacial se mueven los datos entre los niveles de jerarquía en bloques de varias palabras contiguas en la memoria. Dentro del procesador sólo hay una pequeña fracción de la memoria total: los registros. Ciertamente sería deseable contar con infinitos registros, pero como se ha visto en el tema anterior esto es impracticable. De la misma forma, lo ideal sería disponer de varios Gb de memoria directamente accesible por el procesador. Sin embargo, debido a la alta velocidad de éste, la memoria necesaria para que el procesador pueda acceder a ella sin tener que esperar es muy cara y poco densa (pocos kB por chip), lo cual hace impracticable dicha solución. No obstante, aprovechando el principio de localidad es posible colocar una pequeña fracción de la memoria total directamente accesible por el procesador (cache) de forma que se almacenen en ésta los datos e instrucciones que está usando el procesador. De la misma forma que cuando un dato no está en un registro ha de leerse de la memoria cache, si un dato no está en la cache es necesario traerlo desde la memoria principal. Asimismo, si un dato no está en la memoria principal es necesario ir a buscarlo a la memoria secundaria y así sucesivamente. Si la tasa de aciertos (objetos que están en la cache) es alta, la jerarquía de memoria tiene una velocidad efectiva cercana a la de la memoria cache y un tamaño igual al nivel más bajo de la jerarquía. Los tres primeros niveles residen en la circuitería del ordenador, unidos a la CPU mediante buses. La memoria secundaria está formada por dispositivos que se conectan a la CPU mediante sistemas de entrada/salida. Actualmente lo típico es usar discos duros. Por último el nivel mas bajo está formado por dispositivos en los que el medio donde se almacenan los datos puede ser cambiado (CD, cintas, DVD, etc.) lo que hace que su tamaño sea “ilimitado” aunque su velocidad de acceso será la más lenta, sobre todo si el medio no está insertado en la unidad.
Características de las memorias Las memorias se caracteriza caracterizann por su: Ubicación: Interna: Conectada directamente a la CPU. Externa: Conectada a la CPU a través de E/S. Capacidad: En las memorias externas se expresa en bytes. En las internas se expresa en bytes o palabras. •
•
•
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 5
Antes de profundizar en el tema, es conveniente estudiar una serie de características de las memorias que permiten su clasificación. Según su ubicación las memorias pueden ser internas cuando la CPU puede acceder directamente a ellas. Típicamente estas memorias suelen estar conectadas en la misma placa de circuito impreso que la CPU. Estas memorias están formadas en la actualidad por dispositivos basados en semiconductores (chips). La memoria externa está situada fuera de la tarjeta de circuito impreso y la CPU sólo puede acceder a ellas a través de los circuitos de entrada salida. En la actualidad están formadas por dispositivos de almacenamiento magnético u óptico (discos duros, cintas, CD, DVD, etc.). La capacidad de las memorias varía enormemente según su tecnología. Las memorias semiconductoras varían desde unos pocos kB a unas decenas de MB. En cambio las memorias basadas en elementos magnéticos en la actualidad tienen capacidades de varias decenas de GB. En la mayoría de las situaciones la capacidad de memoria se da en bytes, ya que esta es la unidad mínima con la que trabajan la mayoría de las CPU (recuerde que un byte se usa para almacenar un carácter). No obstante en algunos casos el tamaño de la memoria interna se da en palabras en lugar de en bytes. Además no ha de olvidar que, según se comentó en el capítulo 2 los prefijos k, M y G cuando se habla de memoria secundaria suelen significar 103 , 10 6 y 10 9 , mientras que cuando se habla de memoria interna significan 210 1,024, 220 1,048,576 y 230 1,073,741,824. =
=
=
Características de las memorias Las memorias se caracterizan por su: Unidad de transferencia: Palabras para la memoria interna. Bloques para la memoria externa. Recuerde que: La memoria interna se organiza en palabras pero, La unidad direccionable suele ser el byte. •
•
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 6
La memoria externa se organiza en bloques de varios cientos de bytes, ya que es muy costoso localizar un determinado byte en el medio, por lo que una vez localizado se transfiere todo el bloque para aumentar las prestaciones aprovechando el principio de localidad. La memoria interna en cambio se organiza en palabras de varios bytes de longitud, transfiriéndose en la mayoría de los sistemas una sola palabra a la CPU a la vez. El concepto de palabra es bastante “espinoso”. Se suele definir como la unidad “natural” de organización de la memoria. En general la unidad “natural” será igual al ancho del bus de datos usado para acceder a la memoria. Por ejemplo en el MIPS las palabras son de 32 bits ya que el bus de datos es de 32 bits. En este caso las instrucciones y los registros enteros son también de 32 bits. No obstante en otras arquitecturas las palabras con las que trabaja el procesador no coinciden con su bus de datos. Por ejemplo el 8088 trabajaba con palabras de 16 bits pero su bus de datos era de 8 bits, con lo que la memoria se organizaba en “palabras” de un byte. Otro ejemplo son las organizaciones de las memorias principales en sistemas con memoria cache. En estos casos la memoria cache se organiza en palabras de la longitud del bus de datos del procesador, pero la memoria principal puede organizarse en palabras de un mayor número de bits para aprovechar la localidad de los accesos. Nótese que para ello es necesario usar un bus de datos entre la memoria cache y la principal del tamaño de la palabra de la memoria principal. Por último es necesario tener en cuenta que en la mayoría de los sistemas la mínima unidad direccionable es el byte, ya que este es el tamaño mínimo usado por la CPU, típicamente para contener un carácter ASCII. No obstante en los sistemas con palabras mayores de un byte la unidad mínima de transferencia es una palabra. Si la CPU desea acceder a un byte, se lee la palabra entera que contiene el byte y se realiza una multiplexación dentro de la CPU para acceder al byte requerido.
Características de las memorias Las memorias se caracterizan por su: Método de acceso: Secuencial. Cintas. Directo. Discos. Aleatorio. Memoria principal y cache. Asociativo. Tablas de etiquetas para cache. •
•
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 7
Según el método de acceso las memorias se clasifican en: •
Secuencial. En este tipo de memorias para acceder a una posición es necesario recorrer todas las posiciones desde la actual a la deseada. Este tipo de acceso es el que presentan las cintas.
•
Directo. Se accede directamente a una zona del medio y a continuación se realiza un acceso secuencial para acceder al bloque deseado. Como el número de bloques que hay en cada zona es pequeño el tiempo que se tarda en acceder al bloque no es muy elevado. Este tipo de acceso se usa en los discos.
•
Aleatorio. Se puede acceder a cada posición de memoria mediante su circuitería asociada. El acceso es por tanto muy rápido y es prácticamente independiente de los accesos realizados previamente. Este tipo de acceso es el usado en las memorias de semiconductores.
•
Asociativo. En estas memorias en lugar de dar una dirección para obtener un dato, se da un dato para obtener su dirección. Se usan para las tablas de etiquetas para cache.
Características de las memorias Las memorias se caracterizan por sus: Prestaciones: Tiempo de acceso. Variable en secuencial y directo. Fijo en las aleatorias. Tiempo de ciclo. Velocidad de transferencia. •
•
•
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 8
Las prestaciones de las memorias también es un tema abierto. Continuamente aparecen en el mercado nuevas alternativas para mejorar sus prestaciones. Los parámetros relacionados con este tema son: •
Tiempo de acceso. Su definición depende del tipo de memoria: •
En las memorias de acceso secuencial y directo, el tiempo de acceso se define como el tiempo que se tarda en localizar el objeto en la memoria y tenerlo disponible para su transferencia. Este tiempo depende de la posición relativa del objeto respecto a la posición actual. Por ejemplo, en las cintas es necesario avanzar o retroceder la cinta hasta que el objeto esté justo debajo de la cabeza lectora.
•
En las memorias de acceso aleatorio, el tiempo de acceso se define como el tiempo empleado en localizar y transferir el objeto. Este tiempo es en general independiente de la posición ocupada por el objeto, ya que viene marcado por los retrasos de la circuitería que selecciona la posición de memoria a acceder en función de su dirección.
•
Tiempo de ciclo. Se define para las memorias de acceso aleatorio y es igual al tiempo mínimo entre dos accesos consecutivos. T c ≥ T a
•
Velocidad de transferencia. Es la velocidad a la que se transfieren los datos hacia o desde la memoria. Para las memorias de acceso aleatorio es igual a 1/T c . Para las memorias de acceso secuencial y directo depende de la velocidad a la que se mueve el medio y de la densidad de grabación.
Memorias de acceso aleatorio Construidas con semiconductores. Se usan para la memoria interna. Varios tipos: Registros internos. SRAM (cache). DRAM (memoria principal). ROM (memoria no volátil). BIOS, etc. •
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 9
En las siguientes transparencias se van a estudiar los distintos tipos de circuitos usados para implantar la memoria interna. Los dispositivos empleados para la memoria externa se estudiarán en el capítulo de entrada y salida. Los cuatro tipos de memoria utilizados en los tres primeros niveles de la jerarquía de memorias mostrada en la página 4 son: •
Registros internos. Son accesibles directamente por el procesador. Según se verá a continuación se accede a ellos mediante multiplexores de pocas entradas, por lo que los tiempos de acceso son mínimos. El inconveniente principal es el número limitado de registros.
•
SRAM (del inglés Static Random Access Memory . Las memorias RAM estáticas son las utilizadas en los ordenadores actuales para implantar las memorias cache debido a su bajo tiempo de acceso.
•
DRAM (del inglés Dinamic Random Access Memory ). Son los circuitos utilizados para implantar la memoria principal. El termino dinámico, como se verá mas adelante, se refiere a que este tipo de memorias precisa un refresco periódico de sus contenidos para evitar que se pierdan. Por el contrario las memorias estáticas conservan sus datos mientras no se corte la alimentación.
•
ROM (del inglés Read Only Memory). Son memorias de solo lectura pero que al contrario que las RAM mantienen sus datos incluso cuando se corta la alimentación.1 Por ello se usan para almacenar los programas de arranque de los ordenadores, las BIOS, etc.
1
Por ello se dice que este tipo de memorias son no volátiles y las RAM se dice que son memorias volátiles.
Banco de registros Register file
Read register number 1 5 5
Read register number 2 Write register number
5
Write data
Write
Read data 1 32
Read data 2 32
32
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 10
En la figura se muestra un esquema del banco de registros (register file en inglés) del MIPS. Los bancos de registros de los demás procesadores son similares. Se ha elegido el del MIPS por estar familiarizados ya con este procesador. Como se puede apreciar, dicho banco consta de dos puertos de salida: Read data 1 y Read data 2 de 32 bits y un puerto de entrada Write data, también de 32 bits. De esta forma se pueden leer los dos registros que forman los operandos de las instrucciones MIPS y se puede guardar el resultado en un tercer registro. Las entradas Read register number 1 y Read register number 2 indican los números de los registros cuyos contenidos han de aparecer en los dos puertos de salida y la entrada Write register number indica el número de registro en donde se ha de escribir el dato del puerto Write data. Dicho dato sólo se escribirá en el flanco de reloj en el que la señal Write esté activa.
Banco de registros. Lectura Read register number 1
5
Register 0 Register 1 Register n − 1
M u x
Read data 1 32
Register n Read register number 2
5
M u x
ICAIdea
Read data 2 32
Estructura de Computadores Cap. 5: Memoria.– p. 11
En la figura se muestra la circuitería de lectura del banco de registros. Como se puede apreciar, cada uno de los puertos de salida consta de un multiplexor que selecciona cuál de los registros se conecta con la salida en función de la entrada de control Read register x. El funcionamiento será por lo tanto asíncrono: el contenido del registro seleccionado mediante la entrada Read register x aparecerá en la salida Read data x después del retardo del multiplexor.
Banco de registros. Escritura Write 0
Write register number
5
E Register 0
1
D
n to−1 decoder
E
n−1
Register 1 D
n
E Register n−1 D E Register n Write data
ICAIdea
32
D
Estructura de Computadores Cap. 5: Memoria.– p. 12
En la figura se muestra la circuitería de escritura del banco de registros. En este caso el puerto de entrada Write data está conectado a la entrada de todos los registros. Mediante el demultiplexor de n a 1 se selecciona el registro cuyo número aparece en la entrada Write register number, de forma que cuando se active la entrada Write, sólo se habilite dicho registro para escritura. Nótese que los registros son síncronos, por lo que la escritura se realizará en el flanco del reloj.
Banco de registros. Temporización Clk Read register number 1 Read data 1 Write register number Write data
1 0x27
4 0x1ca1
3 35
7
2
3
0x32
0xcada
23
23
Write
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 13
En la transparencia se muestra un diagrama de tiempos para ilustrar el funcionamiento del banco de registros. Según se muestra en las líneas 2 y 3, la lectura de los registros es asíncrona: una vez situado en la entrada Read register number 1 el número de registro que se desea leer, el contenido del registro aparece en el puerto de salida Read data 1 con un pequeño retardo, originado por el multiplexor de salida. La escritura en los registros, al contrario que la lectura, es síncrona: cuando en un flanco positivo del reloj la señal write está activa, el dato presente en el puerto de entrada Write data se escribe en el registro cuyo número está en la entrada Write register number. En el ejemplo mostrado se realiza una escritura en el registro 7 en el primer flanco y otra en el registro 3 en el cuarto. Nótese que se puede leer y escribir a la vez un mismo registro, tal como se puede apreciar en el diagrama mostrado.
Memoria SRAM. Address
15
Chip select Output enable Write enable
SRAM 32K × 8
ICAIdea
8
Dout[7−0]
Estructura de Computadores Cap. 5: Memoria.– p. 14
En la figura se muestra un esquema de una memoria estática de 32 K palabras de 8 bits. El circuito posee un bus de entrada de 15 bits (215 32.768) para especificar la dirección (Address) y un bus de entrada y salida de 8 bits para los datos ( Dout). Además dispone de tres señales de control: una para habilitar el chip (Chip select), otra señal de escritura ( Write enable) y otra de lectura (Output enable ).1 Obviamente el circuito puede funcionar mal si se activan simultáneamente las señales de lectura y escritura, ya que al contrario que en el banco de registros, la memoria sólo dispone de un bus de entrada/salida, en lugar de dos buses separados como ocurre en el banco de registros. Esto se realiza así para ahorrar patillas de conexión, ya que la memoria es un dispositivo externo a la CPU. En el caso del banco de registros, como es interno a la CPU, el disponer de dos puertos, uno para la lectura y otro para la escritura de datos no es tan problemático. =
1
Algunos circuitos unen estas dos últimas señales en una sola línea R/W, de forma que cuando dicha línea está a 1 se realiza una lectura y cuando está a cero una escritura
Memoria SRAM. Celda de 1 bit B
A
Q2
Q1
−bit
bit
fila
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 15
En la figura se muestra el circuito usado para implantar una celda de 1 bit en las memorias estáticas. El valor del bit se almacena mediante dos inversores acoplados. Así, cuando en el punto A haya un 1 lógico, en el punto B habrá un cero lógico y en la celda tendremos almacenado un 1 lógico. De la misma manera, cuando se almacene un cero, el punto A estará a cero y el B a uno. Para leer la celda basta con activar la entrada fila, con lo que los transistores de paso Q1 y Q2 conducirán y las salidas bit y -bit tomarán los valores almacenados en A y B respectivamente. El proceso de escritura es similar: el valor a escribir se sitúa en bit y su negado en -bit, para a continuación activar la entrada fila que habilite los transistores de paso para forzar los puntos A y B al nuevo valor. Como se puede apreciar el valor escrito permanece estable mientras no se corte la alimentación. El precio a pagar por ello es la complejidad de la celda, ya que se necesitan 6 transistores: los dos de paso y dos más para cada puerta inversora. Esto hace que este tipo de memorias sea caro y poco denso. Una descripción más detallada de este circuito, así como de varias alternativas, puede encontrarse en (Weste y Eshraghian, 1993).
Memoria SRAM. Decodificación de dir. Acondicionamiento líneas de bit −bit bit fila 0 A0 A1 A2
A14 read write
ICAIdea
8 6 7 2 3 a 5 1 e d r o d a c i f i d o c e D
−bit bit fila 1
−bit bit fila 32767 −bit bit Ampl. medida Buffer escr.
D Estructura de Computadores Cap. 5: Memoria.– p. 16
Para construir una memoria de por ejemplo 32 kb basta con crear una matriz de 32kceldas y un decodificador de 15 a 32.768 para, en función de la dirección, seleccionar la entrada fila de la celda correspondiente. Además de la matriz de celdas y el decodificador, son necesarios circuitos adicionales para leer y escribir las células. En la parte superior de la figura se muestra un bloque denominado Acondicionamiento de líneas de bit que se utiliza para poner las líneas bit y -bit a la mitad de la tensión de alimentación, de forma que la lectura sea más rápida y fiable. A este proceso se le denomina precarga y se realiza antes de cada lectura. Además, para realizar el interfaz con el exterior son necesarios un amplificador de medida para amplificar el valor que aparece en las líneas -bit y bit y un buffer para realizar las escrituras. Ambos circuitos se activan con las líneas read y write respectivamente. La señal read también se encarga de habilitar la puerta triestado de la salida de datos. El problema de este circuito es que tanto el decodificador de 15 a 32.768 como la matriz de celdas son difíciles de implantar debido a que el circuito resultante es muy alargado (32.768 de alto por 1 de ancho, si se suponen las celdas cuadradas) (Rabaey, 1996). Además como las conexiones verticales serán muy largas, se producirán retardos inaceptables en el acceso a las celdas. Por tanto esta solución, aunque en teoría es válida, en la práctica no se usa. Para conseguir un acceso más rápido y un circuito aproximadamente cuadrado, en la práctica se usan esquemas de decodificación en dos niveles, tal como se muestra en la siguiente transparencia.
Memoria SRAM. Decodificación de dir. Acondicionamiento líneas de bit
A7 A8 A9
A14
s a l i f e d r o d a c i f i d o c e D
Línea de palab
256 x 128
Línea de bit read write
Ampl. medida Buffer escr.
A0 A6
Mux. Columna D
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 17
Como se puede apreciar, ahora la decodificación se hace en dos niveles. De esta forma se consigue una matriz de celdas prácticamente cuadrada. En este ejemplo particular las dimensiones de la matriz serán de 27 de ancho por 28 de alto. Además ahora tanto el decodificador de filas como el multiplexor de columnas son de menos bits, con lo que ocuparán menor área en el chip y serán más rápidos. El método de direccionamiento ahora consiste en seleccionar una fila de la matriz (línea de palabra) con los bits superiores de la dirección. Si se realiza una lectura, toda esta línea se lee mediante los 26 amplificadores de medida, aunque de todos los bits leídos de la línea sólo nos interesa un bit, el cual se multiplexa hacia la salida con los bits inferiores de la dirección. En el caso de una escritura, el primer paso es el mismo: se selecciona la fila correspondiente mediante los bits superiores de la dirección. El segundo paso consiste en, utilizando los bits inferiores de la dirección, activar solamente el buffer de escritura correspondiente a la celda donde se ha de escribir el bit de entrada. Si se desea construir una memoria para almacenar palabras de N bits (4, 8 o 16 son valores típicos), basta con ampliar la matriz para almacenar los bits necesarios y hacer que el multiplexor de columna sea de N bits de salida. En el ejemplo anterior, si se desea construir una memoria de 32k x 4 bits, se podría utilizar una matriz de 256x512 celdas (128 · 4 512) y hacer que el multiplexor de columnas sea de 4 bits. =
Memoria SRAM. Temporización Véase la hoja de características de la SRAM.
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 18
Memoria DRAM. Celda de 1 bit Word line Q1 C1
Bit line
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 19
En la figura se muestra una celda de una memoria RAM dinámica. Como se puede apreciar consta tan solo de 1 transistor y de un condensador, lo cual hace que tenga un tamaño reducido y por tanto se consigue una gran densidad de almacenamiento. Recuerde que la celda SRAM necesita 6 transistores. El precio que hay que pagar es una mayor complejidad del circuito de lectura y escritura. Además la carga en el condensador se pierde con el tiempo a causa a las corrientes de fugas, por lo que es necesario refrescar el estado de carga de estos condensadores periódicamente para evitar que los datos se corrompan. Debido a que mientras dura el refresco no se puede acceder a los datos, se pierde rendimiento. No obstante el periodo de refresco es de decenas de milisegundos y el tiempo empleado en refrescar no es muy elevado, lo cual significa tan solo una pequeña pérdida de rendimiento. Típicamente el refresco ocupa entre un 1 % y un 2 % del total de los ciclos de acceso disponibles (Patterson y Hennessy, 2000). Para leer el estado de la celda en primer lugar se precarga la línea de bit a una tensión igual a la mitad de la alimentación. A continuación se activa la línea de palabra con lo que el transistor de paso Q1 conduce y la carga almacenada en el condensador cambiará el valor de tensión de la línea de bit, lo cual será detectado por el amplificador de medida. Conviene destacar que este proceso de lectura es destructivo, ya que en este proceso se varía en gran medida la carga del condensador. Para evitar la pérdida de datos, después de realizar la lectura se realiza un escritura del mismo dato para refrescarlo. Para escribir en la celda se sitúa el dato en línea de bit y a continuación se activa la línea de palabra para que el transistor Q1 conduzca de forma que el condensador se cargue o se descargue en función del valor presente en la línea de bit.
Memoria DRAM. Decodificación de dir. Acondicionamiento líneas de bit s a l i f e d r o d a c i f i d o c e D
A0 A1 A2
A7
Línea de palabra
256 x 128
Línea de bit
ras read write
A0 A6 cas
ICAIdea
Ampl. medida Buffer escr.
Mux. Columna D
Estructura de Computadores Cap. 5: Memoria.– p. 20
Es esquema de direccionamiento de las memorias dinámicas es muy similar al de las estáticas. La única diferencia está en la multiplexación de las direcciones. Esta multiplexación se realiza simplemente por razones históricas, ya que cuando se desarrollaron las primeras memorias DRAM los encapsulados tenían pocas patillas. Hoy en día no tiene mucho sentido dicha multiplexación, aunque se mantiene por razones de compatibilidad. Según se desprende del esquema de bloques mostrado en la transparencia, ahora existen sólo 8 líneas de direcciones (A7-A0). Para especificar la dirección completa de 15 bits, en primer lugar se sitúan en el bus de direcciones (A7-A0) los bits más significativos de la dirección (14 a 7) y se activa la señal ras (del inglés row address strobe). Esta señal hace que el valor presente en el bus de direcciones de la memoria (A7-A0) se almacene en el latch de direcciones de fila. A partir de este momento se decodifica la dirección y, después del retardo correspondiente del decodificador de filas, se activará la línea de palabra en la que está situada la posición de memoria a la que se desea acceder. Esto permite leer la fila entera y almacenarla en el buffer. El segundo paso en el acceso a la memoria DRAM consiste en situar los bits menos significativos de la dirección (6 a 0) en el bus de direcciones del chip y activar la señal cas (del inglés column address strobe). Esta señal hace que los bits A6-A0 del bus de direcciones del chip se almacenen en el latch de direcciones de columnas, con lo cual el multiplexor de columna conectará con la salida la línea de bit a la que se desea acceder. Si el acceso en una lectura, se activará la puerta tri-estado para que el dato de la memoria salga hacia el bus de datos. Si el acceso es una escritura, se copiará el dato presente en el bus de datos en el buffer de escritura a través del multiplexor de columna, por lo que se escribirá en la posición marcada por la dirección de columna. En ambos casos el buffer de escritura se vuelve a copiar en la línea correspondiente para refrescar los datos.
Memoria DRAM. Temporización
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 21
En la transparencia se muestra un diagrama de tiempos de lectura de una DRAM. El diagrama está tomado de la hoja de características de la DRAM K4E170411D (Samsung, b). Como se puede apreciar en primer lugar se sitúan en el bus de direcciones del chip los bits más significativos de la dirección (row address) y se activa la señal RAS . A continuación se sitúan los bits menos significativos de la dirección (column address) y se activa la señal CAS. Una vez especificada la dirección se activa la señal OE para activar la salida tri-estado del chip para que el dato leído pase al bus de datos del chip. Una vez que el procesador haya leído el dato proveniente de la memoria, éste desactivará las señales RAS y CAS, finalizando así el ciclo de lectura de la DRAM.
Memoria ROM. Celda de 1 bit
fila
bit1
ICAIdea
bit0
Estructura de Computadores Cap. 5: Memoria.– p. 22
En la figura se muestran dos celdas de una memoria ROM programable en fábrica. Al igual que las memorias DRAM, el circuito consiste en una matriz de transistores, sólo que éstos están conectados a tierra en lugar de a un condensador. Las líneas de bit están conectadas a alimentación a través de una resistencia de carga ( pull-up). Cuando se activa la línea de fila los transistores conducirán y si se ha realizado la conexión entre el transistor y la línea de bit en el proceso de fabricación, en la línea de bit aparecerá un cero. Si la conexión transistor-línea de bit no se ha realizado, en la línea de bit tendremos un uno. En el ejemplo de la figura, la línea bit1 estará a 0 y la línea bit0 estará a 1. El inconveniente de este tipo de memorias es que han de programarse al fabricar el chip, por lo que sólo son válidas para almacenar programas o datos que no cambien durante la vida del producto. Además, para recuperar los enormes costes fijos, sólo se justifica su uso para grandes series. Existen alternativas programables por el usuario. Todas ellas tienen prácticamente la misma estructura que las ROM, salvo que la conexión o desconexión entre las líneas de fila y de bit se realizan por otros medios. En las memorias PROM existe un fusible que se puede fundir si se aplica una tensión elevada entre la fila y la línea de bit, por lo que sólo pueden programarse una vez. Las memorias EPROM se programan igual que las PROM, pero el proceso es reversible mediante una exposición prolongada a rayos ultravioleta. Las EEPROM y las FLASH tienen la ventaja de que son programables eléctricamente. La diferencia estriba en que en las EEPROM se pueden escribir palabras individualmente, al igual que las RAM aunque más lentamente, y las FLASH han de borrarse previamente y a continuación grabarse. El inconveniente de las EEPROM es que necesitan dos transistores por bit, lo que las hace más caras.
Memoria ROM. Decodificación de dir. Acondicionamiento líneas de bit
A7 A8 A9
A14
s a l i f e d r o d a c i f i d o c e D
Línea de palabra
256 x 128
Línea de bit read cs
Ampl. medida
A0 A6
Mux. Columna D
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 23
Como se puede observar en la figura, la organización interna de un chip de ROM es muy similar a la de un chip de memoria SRAM. La principal diferencia está, aparte de en la estructura de cada celda de bit, en la inexistencia de la señal de escritura. No obstante sigue existiendo una puerta triestado a la salida del bus de datos, ya que, como se verá más adelante, en la mayoría de los sistemas se conectan varios circuitos de memoria al bus de datos. Para controlar la puerta triestado existen dos señales: cs (chip select ) que habilita el chip y read que habilita la lectura. Por tanto la salida hacia el bus de datos sólo se activará cuando se acceda al chip en modo de lectura. El bloque de acondicionamiento de líneas de bit consta de una resistencia de pull-up para cada línea de bit, aunque en memorias de gran capacidad se suele sustituir por circuitos más complejos para disminuir las pérdidas.
Memoria ROM. Temporización
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 24
En la transparencia se muestra el diagrama de tiempos de lectura de una ROM. El diagrama pertenece a la ROM K3N3C3000D-DC (Fabricada por Samsung) (Samsung, a). Como se puede apreciar el funcionamiento de la ROM es mucho más simple que el de una DRAM. Basta con situar la dirección el el bus de direcciones y activar las señales CE y OE. La primera señal se encarga de activar el chip. Pasado un tiempo t ACE los datos estarán ya disponibles, aunque sólo saldrán al bus si se ha activado su salida triestado mediante la señal OE. El tiempo necesario desde la activación de OE hasta que los datos aparecen en el bus es t OE . Nótese que para obtener otro dato de la memoria basta con cambiar la dirección presente en el bus de datos y esperar el tiempo de acceso t AA .
Organización de la memoria En la práctica un ordenador necesita más memoria de la disponible en un solo chip. Ejemplos: Un sistema basado en microprocesador con 64 kB organizados en palabras de 16 bits y sólo se dispone de chips de 32 k x 8 bits. •
•
•
Ídem anterior, pero el bus de datos es de 8 bits. Un ordenador personal con 256MB y solo se dispone de chips de 4 M x 4 bits.
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 25
Son raras las aplicaciones en las que la memoria necesaria se encuentra en un solo chip. En ocasiones se necesitan palabras más anchas que las soportadas por los chips, en otras ocasiones se necesita más memoria que la disponible en un solo chip y en la mayoría de las ocasiones ocurren ambas cosas: se necesita un ancho de palabra y una capacidad mayor que la disponible en un solo chip. Por ejemplo, supóngase que se se dispone de un microprocesador con un ancho de bus de datos de 16 bits y se desea construir un sistema con 64 kB de memoria principal. Lamentablemente sólo se dispone de chips de 32 kpalabras de 8 bits. Será por tanto necesario usar dos chips, de forma que en uno de ellos se almacenen los 8 bits menos significativos y en el otro se almacenen los 8 bits más significativos. En la transparencia siguiente se muestra un esquema del circuito resultante. Nótese que el bit 0 del bus de direcciones (A0) no existe físicamente. En su lugar hay dos líneas: UDS ( Upper data strobe) y LDS ( Lower data strobe). Cuando se realiza un acceso de 16 bits se activan ambas líneas para de esta forma activar ambos chips de memoria mediante su entrada CS ( Chip Select ). Si se realiza un acceso de 8 bits, entonces se activará la señal UDS si se accede a un byte situado en una dirección impar o la LDS si se accede a un byte situado en una dirección par (suponiendo una organización little endian). Obviamente en estos casos se multiplexará internamente el bus de datos. En la transparencia 27 se muestra un esquema de bloques de un sistema con un procesador de 8 bits con un bus de direcciones de 16 bits. Se desea dotarlo de la máxima memoria posible y se dispone de chips de 32 kpalabras de 8 bits. En este caso son necesarios también dos chips para implantar los 64 kB direccionables por el procesador, de forma que un chip almacenará los 32 kB más bajos de la memoria y el siguiente los 32 kB más altos. Nótese que se usa la línea A15 del bus de direcciones para seleccionar un chip u otro: cuando A15 valga 0 (acceso a las posiciones comprendidas entre 0x0000 y 0x7FFF), se activará la señal CS del primer chip y se desactivará la del segundo, con lo que el acceso se realizará al primer chip. Si A15 vale 1 (acceso entre 0x8000 a 0xFFFF) se activará sólo el segundo chip.
Organización de la memoria 15 A A[15..1] UDS LDS uP
SRAM 32Kx8
CS OE WE
8 D[15..8]
D D[15..0] 15
OE WE
SRAM 32Kx8
CS OE WE
ICAIdea
8 D[7..0]
Estructura de Computadores Cap. 5: Memoria.– p. 26
Organización de la memoria 15
0xFFFF
A[14..0] A
A[15..0]
CS OE WE
SRAM 32Kx8
A15 uP
D
OE WE
8 D[7..0] 0x8000
D[7..0] 15
0x7FFF
A[14..0] CS OE WE
SRAM 32Kx8
8 D[7..0] 0x0000
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 27
Organización de la memoria 15
0xFFFF
A[14..0] A
A[15..0]
CS OE WE
SRAM 32Kx8
A15 uP
D
OE WE
8 D[7..0] 0x8000
D[15..0] 15
0x7FFF
A[14..0] CS OE
ROM 32Kx8
8 D[7..0] 0x0000
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 28
Nótese que los chips de memoria no tienen por qué ser iguales. En la transparencia se muestra un esquema típico de los sistemas basados en microprocesador para aplicaciones empotradas: los 32kB bajos son ROM y los 32 kB superiores RAM. La ROM se utiliza para guardar el programa del sistema y la RAM para los datos. En ocasiones no es necesario usar tanta memoria RAM. Por ejemplo, puede ser necesario crear un sistema con 32 kB de ROM pero sólo 8 kB de RAM. En estos casos se suele realizar el esquema de la siguiente transparencia:
Organización de la memoria 13
0x9FFF
A[12..0] A
A[15..0]
CS OE WE
SRAM 8Kx8
A15 uP
D
OE WE
8 D[7..0] 0x8000
D[15..0] 15
0x7FFF
A[14..0] CS OE
ROM 32Kx8
8 D[7..0] 0x0000
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 29
En este ejemplo, los 8 kB de RAM aparecen repetidos en las posiciones 0xA000-0xBFFF, 0xC000-0xDFFF y 0xE000-0xFFFF, ya que los bits A13 y A14 no se tienen en cuenta para direccionar la RAM. Se dice entonces que las posiciones de memoria 0xA000-0xBFFF, 0xC000-0xDFFF y 0xE000-0xFFFF son posiciones “fantasma” de la memoria situada en 0x8000-0x9FFF. El circuito anterior es en realidad una chapuza que permite ahorrar hardware a costa de “complicar” la programación, ya que no es nada elegante el que una misma posición de memoria física se pueda acceder desde cuatro direcciones distintas. No obstante en aplicaciones empotradas en las que un objetivo es ahorrar hardware, este tipo de chapuzas están justificadas. En sistemas más complejos se suele usar una circuitería adicional que indica al procesador si la dirección de memoria a la que intenta acceder no existe físicamente. En estos casos el procesador genera una excepción, denominada típicamente error de bus. Esto es interesante para depurar programas, ya que en el circuito de la transparencia si se produce un acceso erróneo a la posición 0xE001, en lugar de detectarse el error se realizará un acceso a la 0x8001.
Organización de la memoria Ej: Se dispone de un microprocesador con un bus de direcciones de 20 bits y un bus de datos de 16 bits: ¿Cual es el tamaño máximo de memoria que puede usar? Se necesita disponer de una memoria RAM de 512 kB y una ROM de 256 kB. Se dispone de chips de ROM de 128 kx8 y chips de RAM de 128 kx4. La memoria ROM ha de situarse en las posiciones bajas del mapa de memoria y la RAM en las posiciones altas. •
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 30
Para finalizar veamos un ejemplo más complejo. Se desea construir un sistema empotrado basado en un microprocesador de 16 bits con un bus de direcciones de 20 bits. El microprocesador podrá direccionar por tanto 220 1,048,576 (1 MB). Del espacio de direccionamiento total sólo se necesita usar una parte. En la siguiente transparencia se muestra el mapa de memoria que es necesario implementar. =
Organización de la memoria Mapa de memoria: 0xFFFFF
RAM RAM RAM RAM
0xFFFFF
128kx4128kx4128kx4128kx4 0xC0000
RAM RAM RAM RAM RAM 128kx4128kx4128kx4128kx4 0x80000
0x80000
0x40000
0x40000
ROM 0x00000
ICAIdea
ROM
ROM
128kx8
128kx8 0x00000
Estructura de Computadores Cap. 5: Memoria.– p. 31
La ROM se ha situado en los 256 kB más bajos de la memoria y se implementa usando dos chips de 128k x 8. La RAM se ha situado en los 512 kB superiores y se implementa usando 8 chips de 128k x 4. En cada acceso a memoria será necesario distinguir qué grupo de chips es necesario activar en función de la dirección de memoria. Así, siempre que la dirección esté entre 0x00000 y 0x3FFFF, habrán de activarse solamente los dos chips de ROM. Si el acceso se realiza a una dirección comprendida entre 0x80000 y 0xBFFFF será necesario activar los 4 primeros chips de RAM y si se accede a las direcciones comprendidas entre 0xC0000 y 0xFFFFF, habrá que activar los 4 últimos chips de RAM.
Organización de la memoria Mapa de memoria: Dirección 00XX XXXX XXXX XXXX XXXX 01XX XXXX XXXX XXXX XXXX 10XX XXXX XXXX XXXX XXXX 11XX XXXX XXXX XXXX XXXX
ICAIdea
Memoria ROM No usado RAM 1 RAM 2
Estructura de Computadores Cap. 5: Memoria.– p. 32
En la tabla de la transparencia se muestran en binario los rangos de direcciones asociados a cada zona de memoria. Como se puede observar, la distinción entre una zona y otra viene dada por los dos bits más significativos de la dirección. Por tanto, los dos primeros bits especifican en qué zona de memoria está la palabra o el byte al que se desea acceder, y los 18 más bajos (marcados con una X en la tabla) especifican a qué palabra o byte dentro del bloque se desea acceder. Por ejemplo, si los dos bits superiores de la dirección están a cero, el acceso se realizará a la ROM, independientemente del valor de los bits más bajos. Por eso se han designado estos bits en la tabla con una X (don’t care).
Organización de la memoria CSROM
A[17..1] 17
A[17..1] 17
A[17..1] 17
4 CSRAM1 CSRAM2
CSRAM2 LDS
0 1 2 3
CS OE WE
RAM 128Kx4
Dec 2 a 4 9 8 1 1 A A
A A[19..1] UDS UDS LDS LDS uP
A[17..1] CSRAM1 LDS
D D[15..0]
OE
OE
WE
WE
A[17..1]
4 CS OE WE
] 0 . . 3 [ D
RAM 128Kx4
RAM 128Kx4
4 CSRAM2 UDS
CS OE WE
] 0 . . 3 [ D
17
RAM 128Kx4
] 4 . . 7 [ D
ICAIdea
CS OE WE
] 8 . . 1 1 [
RAM 128Kx4
D
4 CSRAM1 UDS
CS OE WE
RAM 128Kx4
4 CS OE WE
] 8 . . 1 1 [ D
RAM 128Kx4
A[17..1] 17 ROM 128Kx8
D[7..0]
8 CSROM UDS
CS OE WE
] 2 1 . . 5 1 [
A[17..1] 17
4 CS OE WE
4 CS OE WE
D
8 CSROM LDS
RAM 128Kx4
A[17..1] 17
4 CS OE WE
] 4 . . 7 [ D
A[17..1] 17
17
A[17..1] 17
ROM D[15..8] 128Kx8
Estructura de Computadores Cap. 5: Memoria.– p. 33
En la transparencia se muestra un esquema simplificado del circuito resultante para implantar el mapa de memoria. Nótese que se ha utilizado un decodificador de 2 a 4 para identificar qué bloque de memoria es necesario activar. Así, cuando A19 y A18 sean 00, se activará la salida 0 del decodificador, y esta activará los chip select de los chips de ROM. Como se puede observar, el chip que almacena los bits menos significativos, sólo se activará cuando la línea LDS lo haga, lo cual, como se ha supuesto una arquitectura little endian, será cuando se acceda a un byte situado en una posición par. De la misma manera, el chip de ROM donde se almacenan los bytes más significativos sólo se activará cuando lo haga la señal UDS. El acceso a la RAM es similar al de la ROM, sólo que al ser estos chips de 4 bits, es necesario poner dos de ellos en paralelo para almacenar un byte. Como puede observarse en el circuito, los dos chips que almacenan cada uno de los nibbles de un byte están conectados a la misma señal de chip select . También conviene destacar que se accederá al primer bloque de RAM cuando se active la señal CSRAM1 , lo cual tendrá lugar cuando los bits A19 y A18 del bus de direcciones sean 10. De la misma forma, el segundo bloque de RAM se activará cuando A19 y A18 sean 11.
Ejercicio Modifique el circuito anterior para implantar una ROM de sólo 128 kB. Se dispone de chips de ROM de 64 kx8. La RAM seguirá siendo de 512 kB y se dispone de chips de 128k x 4. No deben de existir copias “fantasmas” de la ROM. Dibuje el mapa de memoria resultante y el circuito final.
] 2 1 . . 5 1 [ D
Memoria CAM. Celda de 1 bit B
A
Q2
Q1
−bit
bit
fila
match
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 34
Las memorias CAM (content addressable memory) o memorias asociativas, permiten conocer, según su tipo, si un dato está almacenado en ella o en qué posiciones está. Dicho de otra forma, al contrario que una memoria convencional en la que se aporta a la memoria una dirección y ésta nos da el dato almacenado en dicha posición; en las memorias CAM se aporta a la memoria un dato y ésta nos devuelve la posición en la que éste se encuentra. La estructura de una celda de un bit de una memoria CAM es la mostrada en la transparencia. Como se puede apreciar no es más que una celda de memoria SRAM a la que se ha añadido una puerta XNOR. En escritura funciona exactamente igual que una SRAM convencional: en las líneas bit y -bit se coloca el dato a escribir y su complementario, respectivamente, y a continuación se activa la línea fila. La lectura en cambio se realiza colocando el dato en las líneas bit y -bit, pero ahora no se activa la línea fila, sino que en su lugar se observa la salida de la puerta XNOR. Si el bit almacenado en la celda coincide con el dato presente en la línea bit, la salida match se activará. Obviamente una memoria CAM de un bit no es muy útil. En la siguiente transparencia se muestra una estructura de una memoria CAM para almacenar datos de 4 bits.
Memoria CAM. Circuito de 4 x 4 bits Acondicionamiento de líneas de bit M0 match bit −bit fila
match bit −bit fila
match bit −bit fila
match bit −bit fila
0 M1 match bit −bit fila
match bit −bit fila
match bit −bit fila
match bit −bit fila
1 M2
A0 match bit −bit fila
A1
match bit −bit fila
match bit −bit fila
match bit −bit fila
2 M3 match bit −bit fila E3 WE
ICAIdea
match bit −bit fila
match bit −bit fila
match bit −bit fila D[3..0]
Buffer
Estructura de Computadores Cap. 5: Memoria.– p. 35
En la figura se muestra una memoria CAM de 4 posiciones de 4 bits cada una. Para la escritura existe un decodificador de 2 a 4 para activar la fila correspondiente a la dirección presente en el bus de direcciones A[1..0]. Ahora bien, como las líneas de fila sólo deben de activarse en la escritura, el decodificador incorpora una señal de activación E de forma que cuando dicha señal esté inactiva, todas las salidas del decodificador estarán a cero. Como se puede apreciar en el circuito, esta señal de activación se ha conectado a la señal de escritura WE para que las líneas de fila sólo se activen en el proceso de escritura. Cuando la señal WE está desactivada, se realiza la comparación en cada celda entre el bit almacenado y el presente en el bus de datos. Si los cuatro bits de una fila coinciden con los cuatro bits del bus de datos, la salida M correspondiente a dicha fila se activará. Por tanto, para buscar un dato en la memoria CAM, basta con colocar el dato a buscar en el bus de datos y comprobar si alguna de las salidas M3 a M0 se activan. Si se necesita saber solamente si el dato está presente en la memoria o no, basta con realizar una OR entre todas las señales de comparación Mx .
Memoria Virtual La memoria virtual permite: 1. Que varios programas puedan compartir la memoria sin riesgos. 2. Disponer de un espacio de memoria grande a un precio reducido.
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 36
Los sistemas operativos modernos utilizan memoria virtual por dos razones principales. La primera es la de permitir que varios programas coexistan en la misma máquina y en la misma memoria, pero con la “ilusión” de que disponen de un espacio de memoria propio. Este espacio de memoria virtual está aislado del resto de programas que se ejecutan en la máquina, de forma que cada programa sólo puede leer y escribir en su zona de memoria. De esta forma es prácticamente imposible que un error en un programa deje colgada la máquina entera. 1 Además la memoria virtual puede ser de un tamaño mucho mayor que la memoria física, por lo que se pueden ejecutar un programa (o un con junto de ellos) que necesite un tamaño de memoria (para código y datos) mayor que la memoria física disponible, aunque, tal como se verá más adelante, a costa de una pérdida en el rendimiento. El espacio de direcciones virtual consta de direcciones de m bits, el cual se mapea en un espacio de direcciones físico en RAM de n bits (n < m) y en disco duro. En la siguiente transparencia se muestra un diagrama del proceso.
1
¿Alguien recuerda el MS-DOS?
Memoria Virtual Direcciones Virtuales
Direcciones físicas
Traducción de direcciones
Direcciones de disco
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 37
Para realizar un mapeo eficiente de la memoria virtual en memoria física, la memoria virtual se divide en bloques (4 kB, 16 kB o 32 kB son valores típicos hoy día) denominados páginas. Cuando se compila un programa, se supone que dispone de todo el rango de direcciones virtuales, situándose el programa y los datos dentro de este espacio virtual. Cuando el programa se carga en memoria para su ejecución, éste se divide en páginas, las cuales se irán cargando en la memoria RAM conforme se vayan necesitando. Si se llena la memoria RAM, algunas páginas que no se estén usando se volcarán a disco para su posterior recuperación cuando se necesiten de nuevo. En la transparencia se muestra una situación en la que la mayoría de las páginas están en RAM y sólo tres de ellas están en disco. Nótese también que varias páginas virtuales de distintos procesos pueden mapearse en una misma página física. Esto permite que varios programas puedan compartir datos o código.
Memoria Virtual Dirección virtual 31 30 29 28 27
15 14 13 12
Número de página virtual
11 10 9 8
3210
Desplazamiento en página
Traducción 29 28 27
15 14 13 12 Número de página física
11 10 9 8
3210
Desplazamiento en página
Dirección física
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 38
Una dirección virtual se puede dividir en un número de página y un desplazamiento dentro de la página. De esta forma el mecanismo de traducción se encarga de hacer corresponder el número de página virtual con un número de página física si dicha página está ya en RAM. Si en número de página virtual solicitado no está en RAM, el mecanismo de traducción generará una excepción de fallo de página, cediéndose el control al sistema operativo para que traiga la página virtual solicitada a RAM. Si la RAM está llena, será necesario sustituir una página antigua por la nueva. Para ello, si la página antigua no se ha modificado, basta con sobreescribirla. En caso contrario, antes habrá que copiarla a disco. Como se puede observar, la penalización por fallo de página es elevada, por lo que interesa que las páginas tengan tamaños elevados. Afortunadamente, debido al principio de localidad no se producirán excesivos fallos de página salvo en sistemas en los que la relación memoria virtual/memoria física sea muy grande. En el ejemplo de la figura se ha supuesto que las páginas son de 4 kB (12 bits), el espacio de direcciones virtual es de 32 bits (4 GB) y el espacio de direcciones físico es de 30 bits (1 GB de memoria RAM máximo).
Memoria Virtual. Tabla de páginas Page table register Virtual address 31 30 29 28 27
15 14 13 12 11 10 9 8 Virtual page number
Page offset
20 Valid
3 2 1 0
12 Physical page number
Page table
18 If 0 then page is not present in memory 29 28 27
15 14 13 12 11 10 9 8 Physical page number
3 2 1 0
Page offset
Physical address
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 39
Para reducir el número de fallos de página, es necesario poder asignar una página virtual a cualquier página física (esquema totalmente asociativo). De esta forma se pueden usar algoritmos sofisticados para minimizar dichos fallos de página como el LRU ( Least recently used ) que otros esquemas (directo o asociativo por conjuntos usados en las caches) no permitirían. Para implantar la traducción de páginas virtuales a físicas se usa una tabla que asocia cada página virtual con su página física, denominada tabla de páginas. Como cada programa tiene su propio espacio de direcciones virtual, cada programa necesita su propia tabla de páginas, la cual se almacena en memoria. Por ello es necesario disponer en la circuitería de un registro de tabla de páginas para almacenar la dirección de memoria en la que está almacenada la tabla de páginas del programa que se está ejecutando. En la transparencia se muestra el proceso de traducción: el número de página virtual indica la entrada de la tabla de páginas en la que hay que leer el número de página física. Como no todas las páginas virtuales estarán en memoria física, existe un bit ( valid ) que estará a 1 si la página está en RAM o a 0 si no lo está. Si la página está en RAM (valid =1), se toma el número de página física de la tabla de páginas y se realiza el acceso a memoria. Si no está (valid =0), se producirá un fallo de página. En estos casos se generará una excepción y el sistema operativo tendrá que traer la página solicitada desde el disco. Para ello en la entrada de la tabla de páginas (o en una estructura de datos auxiliar) estará almacenada la dirección en el disco de la página.
Memoria Virtual. Tabla de páginas Tamaño de la tabla de páginas: 220entradas · 4bytes/entrada 4MB Se necesita una tabla de páginas para cada programa en ejecución. Varias alternativas: Registro de límites. Tabla hash. Varios niveles de tablas. Paginar la tabla de páginas. =
•
•
•
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 40
Si se desea mapear toda la memoria virtual, el tamaño de la tabla de páginas puede ser muy elevado. En el ejemplo de la figura, el número de entradas en la tabla de páginas sería igual a 2 20 . Si para cada entrada se necesitan 4 bytes, el tamaño total será de 220 ∗ 4 Bytes = 4 MB. Ciertamente 4 MB es un tamaño elevado, pero si se tiene en cuenta que cada programa que se esté ejecutando en la máquina necesita su propia tabla de páginas, se llega a la conclusión de que si no se reduce de alguna forma el tamaño de estas tablas puede ocurrir que se necesite toda la memoria para almacenar las tablas de páginas, lo cual no es lo más apropiado. Por tanto es necesario usar algún mecanismo para reducir el tamaño de la tabla de páginas. Todos los métodos se basan en el mismo principio: puesto que los programas no usan toda la memoria virtual, basta con almacenar solamente las páginas usadas por el programa en la tabla de páginas. El primer método consiste en crear una tabla de páginas del tamaño igual al que necesita el programa e indicar este tope mediante un registro de límite. Si el programa durante su ejecución necesita más memoria, se asignan más páginas y se incrementa la tabla de páginas a partir del registro límite. Obviamente esta técnica obliga a que el programa tenga que situarse en un espacio contiguo de la memoria virtual. No obstante, se puede añadir una mejora que consiste en incluir dos registros de límite para permitir tener dos zonas de memoria virtual separadas (por ejemplo una para la pila y otra para el programa). El segundo método se basa en crear una tabla de páginas con un número de entradas igual al de páginas físicas, denominada tabla de páginas invertida. Mediante una función de dispersión (hash) se asocia cada página virtual a una entrada en la tabla de páginas. El tercer método divide la tabla de páginas en bloques (64 o 256 páginas por bloque son valores típicos). Se crea entonces una tabla de nivel superior para almacenar los bloques, de forma que cada entrada en esta tabla o bien indica que ninguna de las páginas del bloque está asignada, o bien contiene el puntero a la tabla de páginas del bloque. Por último, las tablas de páginas de pueden almacenar también en la memoria virtual, aunque es un proceso relativamente complejo que se sale de los objetivos de esta introducción.
Memoria Virtual. TLB Cada acceso a memoria tarda el doble: Un ciclo para leer la tabla de páginas. Otro para leer el dato Gracias al principio de localidad, las traducciones de direcciones se vuelven a utilizar en breve. Para mejorar las prestaciones se usa un buffer de traducción de direcciones (TLB). •
•
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 41
El alumno espabilado probablemente se haya dado cuenta de un pequeño inconveniente de la memoria virtual: para cada acceso a memoria es necesario realizar la traducción de la dirección virtual a la dirección física, pero para ello es necesario leer en primer lugar la tabla de páginas para obtener el número de página física para a continuación leer el dato de la memoria física. Así pues cada acceso útil requiere dos accesos. Desde el punto de vista del rendimiento esto es nefasto, por lo que es necesario buscar algún método para solucionar este problema. La solución viene gracias al principio de localidad de los programas: una vez que se accede a un objeto situado en una página, lo más normal es que los siguientes objetos usados por el programa estén dentro de la misma página. Esto permite usar una cache especial para guardar las traducciones de páginas más recientes. Dicha cache recibe el nombre de buffer de traducción de direcciones o TLB (siglas de su nombre en inglés: Translation Lookaside Buffer ). Cada entrada en la TLB consta de tres partes: el número de página virtual, el número de página física asociada a dicha página virtual y varios bits de control. Estos bits de control indican si la entrada correspondiente contiene una asociación memoria virtual-memoria física válida (bit valid ) y si se ha modificado la página en memoria física (bit dirty).
Memoria Virtual. TLB Virtual page number
Dirty Valid 0 1 1 1 1 0 1
TLB Tag
0 1 0 0 0 0 1
Physical page address
Physical memory
Page table Dirty Physical page Valid or disk address 1 1 1 1 0 1 1 0 1 1 0 1
ICAIdea
0 1 0 1 0 0 1 0 0 0 0 1
Disk storage
Estructura de Computadores Cap. 5: Memoria.– p. 42
En la transparencia se muestra el esquema de traducción de páginas virtuales a físicas utilizando una TLB. El proceso de traducción comienza buscando el número de página virtual dentro de la TLB, que estará almacenado dentro del campo tag (etiqueta). Si no se encuentra el número de página en el TLB, entonces se procede a reemplazar1 una de las entradas de la TLB por la entrada correspondiente a esta página. Para ello el número de la página virtual se copia en el campo tag y la dirección de la página física y los bits valid y dirty obtenidos de la entrada de la tabla de páginas correspondiente a esta página virtual se copian en las entradas correspondientes de la TLB. Una vez localizada la entrada de la página virtual se inspecciona el bit valid para ver si la página se encuentra en la memoria física. Si el bit está a 1, basta con tomar la dirección de página física para acceder al objeto. Si el bit valid está a 0, se producirá un fallo de página y tomará el control el sistema operativo para traer la página a memoria. En este caso se elige una página en memoria física para reemplazarla2 y si el bit dirty está a cero, lo cual indica que no se ha modificado, simplemente se sobreescribe con los datos de la nueva página. Si por el contrario el bit dirty está a 1, antes de sobreescribir la página antigua hay que salvarla en disco. Para obtener buenas prestaciones, el proceso de búsqueda del número de página virtual ha de ser muy rápido, por lo que se recurre a memorias CAM. En la siguiente transparencia se muestra un ejemplo de implantación en hardware de una TLB. 1
Dado que se producen frecuentes fallos del TLB, este remplazo ha de realizarse por hardware, por lo que no puede ser muy complejo. Soluciones típicas son elegir una entrada para remplazar al azar o usar un mecanismo LRU simplificado. 2 En este caso menos frecuente y con mayor penalización que el fallo en el TLB ya que hay que acceder al disco, el mecanismo de remplazo ha de ser complejo (p ej. LRU) para minimizar los fallos de página.
Memoria Virtual. TLB m−p pag. virtual
Memoria CAM (etiquetas) Mn
........
M2 M1 M0
Memoria SRAM (dir. físicas)
Valid Dirty n−p pag. física
ICAIdea
Estructura de Computadores Cap. 5: Memoria.– p. 43
En la figura se muestra una implantación típica de una TLB usando memoria asociativa para almacenar las etiquetas. Las salidas de igualdad de cada palabra de la memoria CAM se conectan a la señal de fila de una memoria SRAM, en la que se almacenan los datos correspondientes a la etiqueta asociada de la CAM. Por tanto, cuando se introduce un número de página virtual, si ésta está almacenada en la posición x, la salida Mx de la CAM se activará, y esta señal hará que en la salida de la memoria SRAM se obtenga el número de página física y los bits valid y dirty almacenados en la posición x, que obviamente serán los asociados a la etiqueta x. En la figura se ha supuesto que las direcciones virtuales son de m bits, las físicas de n bits y los desplazamientos dentro de las páginas de p bits.