Está en la página 1de 42

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. Introducción. Jerarquía de memorias.
2. Características de las memorias.
3. Memorias de acceso aleatorio.
a) Banco de registros.
b) Memoria SRAM.
c) Memoria DRAM.
d) Memoria ROM.
4. Organización de la memoria.
5. Memorias asociativas.
6. Memoria virtual.
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

Velocidad
Coste/bit
Cache
Memoria principal
Memoria secundaria (HD)
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. Cierta-
mente 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 ac-
cesible 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 caracterizan 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 me-
morias 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 semiconduc-
tores (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 semicon-
ductoras 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 10 3 , 106 y 109 , 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 or-
ganizació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 me-
morias 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. Tc ≥ Ta
• 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/Tc . 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 Read
5 data 1
Read register 32
number 2
5
Write register
number
5 Read
Write data 2
data Write 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 M
u Read data 1
Register n − 1 x 32
Register n

Read register
number 2 5

M
u Read data 2
x 32

ICAIdea 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

E
0
Register 0
1 D
Write register n to−1 E
number 5 decoder Register 1
D
n−1
n

E
Register n−1
D
E
Register n
Write data D
32

ICAIdea 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 1 4 3

Read data 1 0x27 0x1ca1 35 23


Write register
number 7 2 3

Write data 0x32 0xcada 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.
15
Address

Chip select
SRAM 8
Output enable Dout[7−0]
32K × 8
Write enable

ICAIdea 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

fila

−bit bit
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
−bit bit
Decodificador de 15 a 32768
A1
A2 fila
1

−bit bit
fila
A14 32767
−bit bit
read Ampl. medida
write Buffer escr. D

ICAIdea 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 ali-
mentació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

Decodificador de filas
A7 Línea de palabra
A8
A9
256
x
128

A14
Línea de bit

read Ampl. medida


write Buffer escr.

A0
Mux. Columna
A6
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 pa-
labra) 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 da-
tos 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 emplea-
do 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

Decodificador de filas
A0 Línea de palabra
A1
A2
256
x
128

A7

ras Línea de bit

read Ampl. medida


write Buffer escr.

A0
Mux. Columna
A6

cas D

ICAIdea 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 sim-
plemente 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 bit0

ICAIdea 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 tran-
sistores 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 realiza-
do, 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 es-
tructura 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 ten-
sió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 pro-
longada 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 individual-
mente, 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

Decodificador de filas
A7 Línea de palabra
A8
A9
256
x
128

A14
Línea de bit

read
cs Ampl. medida

A0
Mux. Columna
A6

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 tOE . 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

8
A A[15..1] SRAM
UDS CS 32Kx8
LDS OE D[15..8]
WE

uP
D D[15..0]
15
OE
WE
8
SRAM
CS 32Kx8 D[7..0]
OE
WE

ICAIdea Estructura de Computadores Cap. 5: Memoria.– p. 26

Organización de la memoria
15
0xFFFF
A[14..0]
A A[15..0] CS SRAM 8
OE 32Kx8
WE D[7..0]
A15
0x8000
uP D D[7..0]

OE 15 0x7FFF
WE A[14..0]
8
CS SRAM
OE 32Kx8
WE D[7..0]

0x0000

ICAIdea Estructura de Computadores Cap. 5: Memoria.– p. 27


Organización de la memoria
15
0xFFFF
A[14..0]
A[15..0] 8
A CS SRAM
OE 32Kx8 D[7..0]
WE
A15
0x8000
uP D[15..0]
D
15
OE 0x7FFF
WE A[14..0]
8
CS ROM
OE 32Kx8 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[15..0] 8
A CS SRAM
OE 8Kx8 D[7..0]
WE
A15
0x8000
uP D[15..0]
D
15
OE 0x7FFF
WE A[14..0]
8
CS ROM
OE 32Kx8 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 di-
ce 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 “com-
plicar” 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 ge-
nera 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 ROM
ROM
128kx8 128kx8
0x00000 0x00000

ICAIdea 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, ha-
brá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 Memoria
00XX XXXX XXXX XXXX XXXX ROM
01XX XXXX XXXX XXXX XXXX No usado
10XX XXXX XXXX XXXX XXXX RAM 1
11XX XXXX XXXX XXXX XXXX RAM 2

ICAIdea 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
A[17..1] 17
4 4 4 4
CSRAM1 CSRAM2 CSRAM2
CS RAM CS RAM CS RAM CS RAM

D[15..12]
CSRAM2 LDS UDS

D[11..8]
D[3..0]

D[7..4]
OE 128Kx4 OE 128Kx4 OE 128Kx4 OE 128Kx4
0 1 2 3 WE WE WE WE
Dec 2 a 4
A19
A18

17 A[17..1] 17 A[17..1] 17 A[17..1] 17


A A[19..1] A[17..1]
4 4 4
UDS UDS 4
CSRAM1 CSRAM1
LDS LDS CS RAM CS RAM CS RAM CS RAM

D[15..12]
LDS UDS

D[11..8]
D[3..0]

D[7..4]
OE 128Kx4 OE 128Kx4 OE 128Kx4 OE 128Kx4
WE WE WE WE
uP
D D[15..0]

OE OE

WE WE A[17..1] 17 A[17..1] 17
8 8
CSROM CSROM
LDS
CS ROM UDS
CS ROM
OE 128Kx8 D[7..0] OE 128Kx8 D[15..8]
WE WE

ICAIdea 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.
Memoria CAM. Celda de 1 bit

B A

Q2 Q1

fila

−bit bit

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 match match match


bit −bit bit −bit bit −bit bit −bit
fila fila fila fila
0
M1

match match match match


bit −bit bit −bit bit −bit bit −bit
fila fila fila fila
1
A0 M2

A1 match match match match


bit −bit bit −bit bit −bit bit −bit
fila fila fila fila
2
M3

match match match match


bit −bit bit −bit bit −bit bit −bit
fila fila fila fila
E3
WE D[3..0]
Buffer

ICAIdea 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 almace-
nado 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 pri-
mera 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 11 10 9 8 3210

Número de página virtual Desplazamiento en página

Traducción

29 28 27 15 14 13 12 11 10 9 8 3210

Número de página física 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 3 2 1 0

Virtual page number Page offset

20 12

Valid 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 3 2 1 0

Physical page number 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 cual-
quier página física (esquema totalmente asociativo). De esta forma se pueden usar algoritmos sofisti-
cados 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:
220 entradas · 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 2 20 ∗ 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
TLB
Virtual page Dirty Physical page
number Valid Tag address
0 0
1 1
1 0 Physical memory
1 0
1 0
0 0
1 1

Page table
Dirty Physical page
Valid or disk address

1 0
1 1
1 0 Disk storage
1 1
0 0
1 0
1 1
0 0
1 0
1 0
0 0
1 1

ICAIdea 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
Memoria CAM
(etiquetas)
pag. virtual

Mn ........ M2 M1 M0

Valid
Memoria SRAM Dirty
(dir. físicas) 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.
Referencias
Patterson, D. A. y Hennessy, J. L. (2000). Estructura y diseño de computadores. Interficie circuite-
ría/programación. Reverté.
Rabaey, J. M. (1996). Digital integrated circuits: A design perspective. Prentice Hall.
Samsung. K3N3C3000D-D(G)C 4M-Bit (512Kx8) CMOS MASK ROM. SAMSUNG ELECTRONICS
CO., LTD. Disponible on-line en:
http://www.dea.icai.upco.es/daniel/asignaturas/EstComp_2_IINF/docs/romSamsung.pdf.
Samsung. K4E170411D, K4E160411D, K4E170412D, K4E160412D. 4M x 4Bit CMOS Dynamic
RAM with Extended Data Out. SAMSUNG ELECTRONICS CO., LTD. Disponible on-line en:
http://www.dea.icai.upco.es/daniel/asignaturas/EstComp_2_IINF/docs/dramSamsung.pdf.
Weste, N. H. E. y Eshraghian, K. (1993). Principles of CMOS VLSI design. A systems perspective.
VLSI Systems series. Addison-Wesley, second edition.

También podría gustarte