La Memoria (Problemas) HOJA - SOLUCIONES
La Memoria (Problemas) HOJA - SOLUCIONES
La Memoria (Problemas) HOJA - SOLUCIONES
PROBLEMAS: La memoria
1. Indique la capacidad en celdas o bits de las siguientes organizaciones de memoria: 1Kbit, 512x2bits,
2Kx4bits, 4KByte, 16KByte, 128x16bits. ¿Diga, para cada caso, el tamaño del bus de direcciones
y del bus de datos?
SOLUCIÓN:
La capacidad viene dada por el producto del número de posiciones de memoria de cada pastilla
multiplicado por el ancho de palabra. Esto es:
2. Disponemos de 4 pastillas de memoria SRAM con las siguientes organizaciones: 8KB, 256x16bits,
2Kbit y 4Kx4bits. Indique cuál de ellas dispone de mayor capacidad. Sabiendo que todas ellas
tienen el mismo tiempo de ciclo (tc ) indique cuál de ellas tiene la mayor velocidad de transferencia.
¿Qué asociación de memorias ofrecerı́a tanta capacidad como la mayor pastilla con la mayor
velocidad de transferencia utilizando el mı́nimo número de integrados?
SOLUCIÓN:
La capacidad viene dada por el producto del número de posiciones multiplicado por el ancho de
palabra. Esto es:
V = ancho palabra/tc
En consecuencia, dado que todas las pastillas tienen el mismo tiempo de ciclo tc , la mayor velocidad
de transferencia será la correspondiente a la organización de palabra más ancha, es decir, la de la
pastilla 256x16bits.
V = 16/tc bits/s
Para igualar la máxima capacidad (216 bits de la pastilla 8KB) necesitamos la siguiente cantidad
de pastillas en cada caso:
pastilla asociación
8KB 216 /216 = 1 pastilla
256x16bits 216 /212 = 16 pastillas
2Kbits 216 /211 = 32 pastillas
4Kx4bits 216 /214 = 4 pastillas
Para obtener la máxima velocidad de transferencia, hemos de utilizar una palabra de 16 bits de
ancho y para usar el mı́nimo número de integrados o pastillas, asociamos 4 pastillas de 4Kx4bits
en paralelo.
SOLUCIÓN:
Dado que el ancho del bus de datos es idéntico en el mapa de memoria y en las pastillas, solamente
hemos de preocuparnos por la extensión del mapa de memoria. El número de pastillas que
necesitamos es igual a:
El número de lı́neas del bus de direcciones de cada pastilla es log2 4K = log2 212 = 12 y el del
mapa de memoria log2 16K = log2 214 = 14 de donde las 12 de menor peso atacan en común a
todos los integrados y las 2 de mayor peso atacan a un decodificador 2:4 que sirve para habilitar
cada integrado individualmente gracias a la señal especı́fica (ME de Memory Enable, CE de Chip
Enable o CS de Chip Select).
SOLUCIÓN:
Ya que el mapa de memoria pedido y el de cada pastilla coinciden, solamente hemos de hacer
una extensión del bus de datos disponiendo las pastillas de memoria necesarias en paralelo de
forma que el bus de direcciones seleccione la misma posición en todas y cada una de ellas y todas
vuelquen su dato simultáneamente al bus de datos. Necesitaremos las siguientes pastillas:
Las 12 lı́neas del bus de direcciones atacan a todos los integrados a la vez y también la señal
especı́fica (ME de Memory Enable, CE de Chip Enable o CS de Chip Select) se activa a la vez.
Luego, las salidas de datos se disponen en paralelo sobre el bus de datos.
SOLUCIÓN:
En este caso hemos de hacer tanto una extensión de direcciones como de datos. Necesitaremos en
total 16 pastillas:
-2-
De las 14 lı́neas de direcciones, 12 atacan a los 16 integrados simultáneamente. Las otras dos
atacan un decodificador 2:4 que selecciona 4 pastillas a activar en parelalo a través de la señal
especı́fica (ME de Memory Enable, CE de Chip Enable o CS de Chip Select).
6. Se desea diseñar un mapa de memoria con 512K de RAM y 128K de ROM al que se acceda por
bytes. Disponemos para la tarea de pastillas RAM estáticas de 64Kx8bits y ROM de 32Kx8bits.
Determine la distribución de pastillas indicando sus rangos de direcciones si la memoria RAM se
situa en posiciones altas y las ROM en bajas.
SOLUCIÓN:
La organización de las pastillas en palabras de tamaño byte coincide con la del mapa de memoria
por lo que no hay más que distribuir las pastillas según su tipo empezando por la ROM en las
posiciones bajas.
¿Cuántas pastillas de ROM se necesitan? Será el tamaño total de ROM entre el tamaño de la
pastilla ROM, es decir, 217 /215 = 22 = 4 pastillas.
¿Cuántas pastillas de RAM se necesitan? Será el tamaño total de RaM entre el tamaño de la
pastilla RAM, es decir, 219 /216 = 23 = 8 pastillas.
El mapa de memoria total tiene un tamaño de 512K + 128K = 640K y le corresponde un bus
de direcciones de log2 640K = 20 bits. Las pastillas de ROM se direccionan con 15 bits y las de
RAM con 16 bits. El mapa de memoria será:
A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 0 0 0 ROM 0
0 0 0 0 1 ROM 1
0 0 0 1 0 ROM 2
0 0 0 1 1 ROM 3
0 0 1 0 0 libre
0 1 1 1 libre
1 0 0 0 RAM 0
1 0 0 1 RAM 1
1 0 1 0 RAM 2
1 0 1 1 RAM 3
1 1 0 0 RAM 4
1 1 0 1 RAM 5
1 1 1 0 RAM 6
1 1 1 1 RAM 7
7. Sea una memoria con una capacidad total de 24Mbits organizada en bytes y distribuida en un
número par de pastillas. ¿Cuántos bits de direccionamiento son necesarios para referenciarla?
Supongamos que los accesos se realizan alineados a palabra de 16 bits, es decir, cada referencia
a memoria accede al byte par y al impar consecutivo. ¿Qué mecanismo hardware asegura el
alineamiento? ¿Cuántos bits de direccionamiento son necesarios ahora? ¿Influye el acceso alineado
en la velocidad de transferencia?
SOLUCIÓN:
El tamaño de la memoria es 24M bits = 3 × 23 × 220 = 3 × 223 bits. Como está organizada en
palabras de tamaño byte, el número de palabras es 3 × 223 /23 = 3 × 220 palabras y, por tanto,
necesitamos dlog2 3 × 220 e = 24 lı́neas en el bus de direcciones.
Para alinear los accesos a palabras de 16 bits basta con emitir direcciones pares, es decir, acceder
a memoria de 2 en 2 bytes. De esta manera basta con emitir direcciones de 19 lineas puesto que
el LSB siempre es 0.
Las pastillas se disponen como si de una extensión del bus de datos se tratara y cada vez que
emitimos una dirección ataca a dos pastillas, una suministra el byte de la dirección par y la otra el
-3-
de la impar. El mecanismo multiplica por 2 la velocidad de transferencia pues suministra acceso
a 2 bytes por cada direccionamiento.
El problema no establece los tamaños de las pastillas pero sı́ nos asegura de que son pares con lo
que la distibusión del mapa de memoria es compatible con el mecanismo de alineamiento.
SOLUCIÓN:
Las pastillas de memoria de 32Kbytes tienen 15 lı́neas de direcciones. Dado que existe un alin-
eamiento hardware a palabra de 16 bits, en cada acceso a memoria se deben leer o escribir 16 bits,
el byte par y el byte impar. Asociamos las pastillas de dos en dos para transferir los 2 bytes.
El mapa de memoria tiene 128Kbytes lo que requiere log2 128K lı́neas de direcciones, es decir, 17
lı́neas. Puesto que el alineamiento es a palabra de 2 bytes, el LSB es siempre 0 (A0 = 0) y, por
tanto, solamente se requieren 16 bits (los de mayor peso A1 − A15 ).
El esquema hardware serı́a el siguiente:
-4-
9. Calcule el número de accesos que pueden realizarse a un dispositivo DRAM durante un intervalo
de tiempo de 1 segundo sabiendo que el tiempo de acceso es ta = 80ns y el tiempo de restauración
de la información tres = 20ns, y que acceso y restauración se alternan.
SOLUCIÓN:
El tiempo de ciclo (tc ) es la suma del tiempo de acceso (ta ) más el tiempo de restauración (tres ):
tc = ta + tres = 80 + 20 = 100ns
∆t 1
= = 107 accesos
tc 100 · 109
Es decir, la DRAM propuesta puede servir 10 millones de accesos por segundo.
SOLUCIÓN:
El nuevo tiempo de ciclo será:
tcnuevo = tc · 0, 95
11. La velocidad de transferencia V de una memoria DRAM es de 2,4Mbits/s. Sabemos que el mapa
de memoria tiene un bus de datos de tamaño byte y que el tiempo de restauración tres supone el
15% del tiempo de ciclo tc . Determine el tiempo de acceso ta .
SOLUCIÓN:
Sabemos que la velocidad de transferencia es:
V = ancho palabra/tc
De donde:
tc = ancho palabra/V = 8/(2, 4 · 106 ) = 3.33 · 10−6 s
12. Disponemos de una memoria EDO (Extended Data Output) cuyos bloques son de 4 direcciones. El
tiempo de acceso al bloque (direccionar fila) es de 30ns y el tiempo en acceder a datos del bloque
es de 40ns por dato (direccionar columna). Calcule la mejora en tiempo frente a una DRAM
convencional de tiempo de acceso 60ns. Desprecie en ambos casos el tiempo de refresco. Suponga
que se accede a todas las direcciones del bloque consecutivamente. Repetir si sólo se accede a dos
por bloque y si únicamente se accede a una de cada bloque.
-5-
SOLUCIÓN:
El tiempo de acceso a 4 posiciones de la DRAM es igual a 60 × 4 = 240 ns.
El tiempo de acceso a 4 posiciones consecutivas de la EDO es igual a 30 + 40 × 4 = 190 ns.
tsin 240
S= = = 1.26
tcon 190
El tiempo de acceso a 4 posiciones dispersas de 2 en 2 es igual a (30 + 40 × 2) × 2 = 220 ns.
tsin 240
S= = = 1.09
tcon 220
El tiempo de acceso a 4 posiciones dispersas de 1 en 1 es igual a (30 + 40 × 1) × 4 = 280 ns.
tsin 240
S= = = 0.85
tcon 280
13. Disponemos de una memoria EDO (Extended Data Output) organizada en bloques de 4 direcciones.
El tiempo de acceso al bloque (direccionar fila) es de 40ns y el tiempo de acceso a cada dato del
bloque (direccionar columna) es de 25ns. Calcule el speed-up frente a una DRAM convencional de
tiempo de acceso 60ns despreciando en ambos casos el tiempo de refresco. Suponga que la huella
de memoria es tal que en el 50% de los accesos referenciamos todas las direcciones del bloque
consecutivamente y en el 50% restante solamente una dirección.
SOLUCIÓN:
El tiempo de acceso a 4 posiciones de la DRAM es igual a 60 × 4 = 240 ns.
El tiempo de acceso a 4 posiciones consecutivas de la EDO es igual a 40 + 25 × 4 = 140 ns.
El tiempo de acceso a 4 posiciones dispersas de la EDO es igual a (40 + 25) × 4 = 260 ns.
La media ponderada de accesos a la EDO es igual a 140 · 0.5 + 260 · 0.5 = 200 ns.
De donde el speed-up es:
tsin 240
S= = = 1.2
tcon 200
14. El sistema de memoria de un computador cuenta con una memoria principal de 4MBytes y con
una caché de 256KBytes. La memoria caché está organizada de forma totalmente asociativa y
cada marco de bloque o lı́nea contiene 4 bytes. Conteste a las siguientes preguntas:
a) número total de bloques en memoria principal.
b) número total de lı́neas o marcos de bloque en caché.
c) campos y tamaño de los mismos en los que se divide la dirección fı́sica de memoria.
d) tamaño (en filas x columnas) de la matriz de búsqueda de la memoria asociativa que tabla
las correspondencias entre bloques y lı́neas o marcos de bloque.
e) tamaño de la matriz de datos de la memoria asociativa.
Realice una comparación del tamaño total dedicado a la implementación de las tablas de corres-
pondencias frente al área de datos de la caché.
SOLUCIÓN:
Tamaño de memoria principal: 4M B = 222 bytes
Tamaño de memoria caché: 256KB = 218 bytes
tamano mem ppal 222
a) número de bloques: = 2 = 220 bloques
tamano bloque 2
tamano mem cache 218
b) número de lı́neas: = 2 = 216 lı́neas
tamano bloque 2
-6-
c) la dirección fı́sica se divide en dos campos cuando la organización es totalmente asociativa:
campo etiqueta o marca y campo palabra. El campo palabra ocupa 2 bits ya que cada bloque
tiene 4 bytes. El resto es el campo etiqueta cuyo tamaño coincide con la potencia del número
de bloques.
21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
etiqueta palabra
Es decir, la tabla de correspondencias (288KB) ocupa más que el área de datos de la propia caché
(256KB).
15. El sistema de memoria de un computador cuenta con una memoria principal de 4MBytes y con
una caché de 256KBytes. La memoria caché está organizada de forma asociativa por conjuntos
de 4 vı́as y cada marco de bloque o lı́nea contiene 4 bytes. Conteste a las siguientes preguntas:
a) número total de bloques en memoria principal.
b) número total de lı́neas o marcos de bloque en caché y número de conjuntos.
c) campos y tamaño de los mismos en los que se divide la dirección fı́sica de memoria.
d) tamaño (en filas x columnas) de la matriz de búsqueda de la memoria asociativa que tabla
las correspondencias entre bloques y lı́neas o marcos de bloque.
e) tamaño de la matriz de datos de la memoria asociativa.
Realice una comparación del tamaño total dedicado a la implementación de las tablas de corres-
pondencias frente al área de datos de la caché.
SOLUCIÓN:
Tamaño de memoria principal: 4M B = 222 bytes
Tamaño de memoria caché: 256KB = 218 bytes
tamano mem ppal 222
a) número de bloques: = 2 = 220 bloques
tamano bloque 2
tamano mem cache 218
b) número de lı́neas: = 2 = 216 lı́neas
tamano bloque 2
numero lineas 2 16
número de conjuntos: = 2 = 214 conjuntos
numero vias 2
c) la dirección fı́sica se divide en tres campos cuando la organización es asociativa por conjuntos:
campo etiqueta o marca, campo conjunto y campo palabra. El campo palabra ocupa 2 bits ya
que cada bloque tiene 4 bytes. El campo conjunto ocupa 14 bits que coincide con la potencia
-7-
del número de conjuntos. El resto es el campo etiqueta cuyo tamaño coincide con la potencia
de la cantidad de bloques que puede recibir cada conjunto 220 /214 = 26 .
21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
etiqueta conjunto palabra
e) matriz de datos de cada conjunto: numero vias × log2 numero vias = 4 × 2 celdas
Es decir, la tabla de correspondencias (64KB) ocupa la cuarta parte del área de datos de la propia
caché (256KB).
16. Sea un computador con una memoria caché organizada en correspondencia directa con 256 lı́neas
de 16 bytes cada una. La polı́tica de escritura es directa con no ubicación en fallo de escritura.
Determine la traza de accesos a memoria principal, el bloque de memoria principal, la lı́nea de
caché y si se produce acierto o fallo en la ejecución de la secuencia de instrucciones siguiente
sabiendo que inicialmente r1 vale 02h y r2 vale 008020h y que la memoria caché está inicialmente
vacı́a.
dirección instrucción operación
0A2000h st [r2],0h [r2] ← 0
0A2004h add r2,r2,4 r2 ← r2+4
0A2008h dec r1 r1 ← r1-1
0A200Ch bnz r1,A2000h si r16=0 PC = 0A2000h
si r1=0 PC = 0A2010h
SOLUCIÓN:
La tabla siguiente muestra la dirección accedida, el bloque al que pertenece, el tipo de flujo, el
tipo de acceso, la lı́nea referenciada y si hay acierto o fallo. El bloque se calcula como el cociente
de la división entera:
dirección
bloque =
tamaño bloque
Y la lı́nea como el resto de la división entera (función módulo):
lı́nea = bloque mod número lı́neas
Dado que el tamaño del bloque es de 16 bytes, la división entera que nos da el número del bloque
consiste en el desplazamiento a la derecha de un carácter hexadecimal y dado que el número de
lı́neas es 256 (100h), la función módulo que nos da el número de lı́nea consiste en tomar los dos
dı́gitos hexadecimales de menor peso.
-8-
dirección 0A2000h 008020h 0A2004h 0A2008h 0A200Ch
bloque 0A200h 00802h 0A200h 0A200h 0A200h
flujo i d i i i
acceso l e l l l
lı́nea 00h 02h 00h 00h 00h
A/F A F1 A A A
F1 es un fallo en escritura sin ubicación
17. Sean dos computadores A y B cuyo procesador y memoria principal tienen las mismas carac-
terı́sticas. La memoria principal tiene un tiempo de acceso de 5 ciclos de reloj por byte. La
memoria caché tiene, en ambos computadores, el mismo tamaño pero distinta organización tal y
como se muestra en la tabla siguiente:
computador A computador B
organización correspondencia directa asociativa por conjuntos
número de lı́neas 128 128
número de vı́as — 2
tamaño de la lı́nea 16 bytes 16 bytes
polı́tica de escritura postescritura directa
polı́tica de fallo en escritura ubicación no ubicación
polı́tica de reemplazo — LRU
tiempo acierto lectura 1 ciclo 1 ciclo
tiempo fallo lectura 80 ciclos 80 ciclos
tiempo acierto escritura 1 ciclo 5 ciclos
tiempo fallo escritura 85 ciclos 5 ciclos
tiempo escritura de lı́nea 80 ciclos —
En dichas máquinas se ejecuta un programa del que se muestra a continuación una pequeña
secuencia de instrucciones:
dirección instrucción
00 ld r1,256
04 st 0,[r1]
08 add r1,4
12 cmp r1,272
16 bnz #04
donde las direcciones y los operandos están expresados en decimal.
Considerando que las memorias caché están inicialmente vacı́as, se pide calcular la traza de ref-
erencias generada por la ejecución de la secuencia del programa dado. Dicha traza debe indicar
el bloque de memoria principal al que pertenece cada una de las referencias, la lı́nea y vı́a en su
caso, y si se produce acierto o fallo en el acceso a caché. Determine el tiempo de ejecución del
programa en ambos computadores, indicando la velocidad relativa de un computador frente al
otro. Se tomarán únicamente los tiempos de acceso a memoria despreciando los de ejecución. Si
asumimos que todos los tiempos de ejecución son de un ciclo, ¿cuál es el porcentaje de tiempo
consumido en accesos a memoria frente al total?
SOLUCIÓN:
Para obtener la traza generada por la ejecución de la secuencia de programa, se deben tener
en cuenta no sólo las direcciones de cada una de las instrucciones ejecutadas sino también las
direcciones de los datos referenciados en ellas, si los hubiere.
Para determinar el bloque de memoria principal al que pertenece cada referencia se hace la división
entera de la dirección entre el tamaño del bloque, que en este caso es de 16 bytes:
dirección dirección
bloque = =
tamaño bloque 16
-9-
En cada referencia se indica si pertenece al flujo de instrucciones (i) o de datos (d) y si el acceso
es en lectura (l) o escritura (e). Finalmente, el cálculo de la lı́nea se realiza mediante la función
módulo con el número de lı́neas, en este caso 128:
lı́nea = bloque mod número lı́neas = bloque mod 128
Y el conjunto como función módulo con el número de conjuntos, en este caso 64 (128 lı́neas en
conjuntos de 2 en 2):
lı́nea = bloque mod número lı́neas = bloque mod 64
El tiempo total consumido por el computador A en los accesos a memoria es de 263 ciclos de reloj
mientras que el B consume 195 ciclos. El comportamiento de la caché asociativa por conjuntos es
mejor siendo la de correspondencia directa un 30% más lenta aproximadamente. En la máquina
A, el tiempo de escritura de lı́nea se suma al tiempo de fallo (en lectura o escritura) si la lı́nea a
reemplazar fue escrita (está sucia). En este problema no se da nunca esa circunstancia.
Si asumimos que el tiempo de ejecución es de 1 ciclo, tenemos un total de 17 ciclos consumidos en
ejecución frente a varios centenares en accesos a memoria dependiendo de la máquina. Este hecho
demuestra que el impacto de la memoria sobre el rendimiento es mucho más fuerte que el propio
del CPI de ejecución.
- 10 -
18. Un computador dispone de una memoria caché con un tiempo de acceso de 20ns por palabra y
una memoria principal con un tiempo de acceso de 100ns por palabra. La polı́tica de escritura de
la memoria caché es escritura directa. Mediante la ejecución de una serie de programas de prueba
se ha observado que el 53% de las referencias a memoria son a instrucciones y que de cada 10
referencias a datos, 8 son de lectura y 2 de escritura. La tasa de aciertos con esta configuración es
del 98%. Calcule el tiempo medio que consume un acceso a memoria suponiendo que el tamaño
del bloque es de una palabra.
SOLUCIÓN:
El cálculo del tiempo medio de acceso debe distinguir entre lecturas y escrturas para tener en
cuenta la diferencia debida a la polı́tica de escritura:
Donde pl y pe son las probabilidades de acceso en lectura y escritura respectivamente y t̄l y t̄e los
tiempos medios de acceso en lectura y escritura respectivamente. Para la probabilidad de lectura
tenemos:
pl = 0, 53 + 0, 47 · 0, 8 = 0, 906
Y para la de escritura:
pe = 0, 47 · 0, 2 = 0, 094
t̄ = tnivel 1 + (1 − h) · tnivel 2
En el caso de las escrituras no podemos aplicar esta fórmula ya que la polı́tica de escritura es
directa y, por tanto, el tiempo de acceso es el de la memoria principal, esto es:
t̄e = 100ns
Vemos como pasamos de un tiempo medio de acceso de 100ns a un poco más de 30ns.
19. Un computador dispone de una memoria caché con un tiempo de acceso de 20ns por palabra y
una memoria principal con un tiempo de acceso de 100ns por palabra. La polı́tica de escritura de
la memoria caché es escritura directa. Mediante la ejecución de una serie de programas de prueba
se ha observado que el 53% de las referencias a memoria son a instrucciones y que de cada 10
referencias a datos, 8 son de lectura y 2 de escritura. Mediante simulaciones se ha comprobado
que si se usan cachés separadas en instrucciones y datos, la tasa de aciertos en instrucciones llega
al 99% mientras que en datos alcanza el 98%. Calcule el tiempo medio que consume un acceso a
memoria suponiendo que el tamaño del bloque es de una palabra.
SOLUCIÓN:
Ahora hemos de desagregar tanto en accesos de lectura y escritura como en flujo de instrucciones
y de datos, puesto que la caché es separada para ambos flujos.
- 11 -
Como vemos, en el caso del flujo de instrucciones solo hay lecturas ya que las instrucciones no se
escriben.
Tenemos:
t̄li = 20 + (1 − 0, 99) · 100 = 21ns
t̄ld = 20 + (1 − 0, 98) · 100 = 22ns
t̄ed = 100ns
De donde:
t̄a = 0, 53 · 21 + 0, 47 · 0, 8 · 22 + 0, 47 · 0, 2 · 100 = 28, 8ns
Observamos que las cachés separadas proporcionan una mejora del 1,8% respecto al uso de caché
unificada.
- 12 -