Saltar al contenido principal
Tema 2: Unidad de memoria
Volver a FUNDAMENTOS DE COMPUTADORES (INGENIERÍA EN IA)
FUNDAMENTOS DE COMPUTADORES (INGENIERÍA EN IA)79 min de lectura

Tema 2: Unidad de memoria

Fuente

Resumen elaborado a partir de los apuntes del Tema 2 de Fundamentos de Computadores (J. M. Díaz Martínez, R. Muñoz Mansilla y D. Chaos García), siguiendo su estructura (apartados 2.1 a 2.9), su notación y sus ejemplos, más los ejercicios propuestos del tema.


2.1. Introducción: qué problema resuelve la unidad de memoria

La memoria guarda las instrucciones de los programas, los datos que usan y los resultados que producen. El procesador la consulta constantemente, así que la rapidez con la que obtiene lo que necesita condiciona el rendimiento de todo el computador.

El problema es que no existe una memoria que lo tenga todo. Las memorias difieren en cuatro aspectos que tiran en direcciones opuestas:

AspectoQué se quiereQué ocurre en la práctica
CapacidadMuchaLas memorias grandes suelen ser lentas
Velocidad de accesoAltaLas memorias rápidas suelen ser pequeñas
Coste por bitBajoLas memorias rápidas tienen un coste por bit elevado
Conservación sin alimentaciónSíLas más rápidas (RAM) son volátiles

La solución del tema entero es la jerarquía de memoria: combinar memorias rápidas y pequeñas con otras grandes y lentas para conseguir un equilibrio entre rendimiento, capacidad y coste. El resto del tema estudia cada pieza de esa jerarquía:

mermaid
flowchart LR
    A["2.2-2.3<br/>Conceptos y<br/>características"] --> B["2.4<br/>Jerarquía y<br/>localidad"]
    B --> C["2.5<br/>Tecnologías:<br/>RAM, ROM, flash"]
    C --> D["2.6<br/>Chips, ampliación<br/>y módulos DDR"]
    D --> E["2.7<br/>Memoria caché"]
    E --> F["2.8<br/>Memorias<br/>asociativas"]
    F --> G["2.9<br/>HDD, SSD,<br/>ópticos, cinta"]

2.2. Conceptos básicos de la memoria

2.2.1. Unidades direccionables y direcciones de memoria

La memoria principal puede verse como una matriz de celdas, cada una capaz de guardar un bit. Cada fila tiene una dirección física, DirF\text{Dir}_F, que es un entero no negativo que la identifica de forma única.

  • Si cada fila tiene LL celdas, contiene LL bits. Esos bits forman una unidad direccionable: la cantidad mínima de información a la que se accede con una dirección física.
  • Hoy la memoria principal suele ser direccionable por bytes: L=8L = 8 bits y cada dirección identifica un byte.
  • No hay que confundir la dirección (dónde está) con el contenido (qué hay guardado).

Con nn bits se forman 2n2^n direcciones distintas. Para numerar NN unidades direccionables hace falta el menor nn que cumpla N≤2nN \leq 2^n:

n=⌈log⁡2N⌉y, si N=2n,n=log⁡2Nn = \lceil \log_2 N \rceil \qquad\text{y, si } N = 2^n, \qquad n = \log_2 N

text
DirF   Contenido (L = 8 bits)
  0    0 1 0 0 1 0 0 0
  1    0 1 0 0 1 0 0 1      cada fila = una unidad direccionable
  2    1 0 1 0 1 0 1 0      cada número de la izquierda = su dirección física
  ...
255    0 1 0 0 1 0 1 0      N = 256 unidades -> n = 8 bits (0000 0000 a 1111 1111)

2.2.2. Palabras y longitud de palabra

Una palabra es el conjunto de bits que el procesador maneja como una unidad en determinadas operaciones. Su número de bits es la longitud de palabra LpL_p (16, 32 o 64 bits, según la arquitectura).

La longitud de palabra no tiene por qué coincidir con la de la unidad direccionable. Una palabra puede ocupar varias unidades consecutivas, cada una con su propia dirección:

LpL=unidades direccionables por palabraej.: 328=4\frac{L_p}{L} = \text{unidades direccionables por palabra} \qquad \text{ej.: } \frac{32}{8} = 4

2.2.3. Organización y capacidad de memoria

Una memoria se describe por su organización N×LN \times L: NN unidades direccionables de LL bits. Por ejemplo, 1024×81024 \times 8 bits son 1024 unidades de 8 bits.

C=N⋅L bitsC = N \cdot L \ \text{bits}

ObservaciónExpresión
Memoria direccionable por bytesC=NC = N bytes
Direcciones de nn bits y se usan todas (N=2nN = 2^n)C=2n⋅LC = 2^n \cdot L bits; por bytes, C=2nC = 2^n bytes
Capacidad múltiplo de la palabraC=Np⋅LpC = N_p \cdot L_p
Caso general: palabras completas que cabenNp=⌊CLp⌋N_p = \left\lfloor \dfrac{C}{L_p} \right\rfloor (CC y LpL_p en bits)

La función suelo ⌊x⌋\lfloor x \rfloor da el mayor entero menor o igual que xx: ⌊3.7⌋=3\lfloor 3.7 \rfloor = 3. Por ejemplo, con C=80C = 80 bits y Lp=32L_p = 32: caben 2 palabras y sobran 16 bits, insuficientes para otra.

Hay que cuidar los prefijos: 1 kB=10001\text{ kB} = 1000 B, pero 1 KiB=10241\text{ KiB} = 1024 B. Y distinguir bb (bit) de BB (byte).

Ver ejemplo 2.3: memoria direccionable por bytes con direcciones de 16 bits y palabras de 32 bits

a) Se usan todas las direcciones: N=216=65 536N = 2^{16} = 65\,536 unidades. Como L=8L = 8 bits:

CMP=65 536⋅8=524 288 bits=65 536 B=64 KiBC_{MP} = 65\,536 \cdot 8 = 524\,288 \text{ bits} = 65\,536 \text{ B} = 64 \text{ KiB}

b) Cada palabra ocupa 32/8=432/8 = 4 unidades, es decir 4 B. Palabras completas:

Np=⌊65 5364⌋=16 384 palabrasN_p = \left\lfloor \frac{65\,536}{4} \right\rfloor = 16\,384 \text{ palabras}

Como la capacidad es múltiplo de la palabra, no sobra nada.


2.3. Características de las memorias

2.3.1. Operaciones de lectura y escritura

OperaciónQué se proporcionaQué ocurre
LecturaLa direcciónLa memoria entrega los datos. Funcionalmente no modifica nada, aunque en las DRAM el proceso físico altera las celdas y hay que restaurarlas
EscrituraLa dirección y los datosLa información nueva sustituye a la anterior. No todas las memorias lo permiten igual: unas admiten muchas escrituras, otras una sola, y en otras el contenido se fija en fábrica

La unidad de transferencia es la cantidad de información que se transfiere entre la memoria y otro componente en una operación de acceso. Su longitud es LTL_T. Hay que distinguir tres longitudes, que no tienen por qué coincidir:

MagnitudSímboloQué mide
Unidad direccionableLLBits por dirección
Palabra del procesadorLpL_pBits que el procesador maneja como unidad
Unidad de transferenciaLTL_TBits que se transfieren en un acceso

LTL_T tampoco tiene por qué coincidir con el ancho del bus de datos: si LT=64L_T = 64 bits y el bus es de 32, se envía en dos transferencias sucesivas; con bus de 64, en una.

2.3.2. Parámetros de rendimiento

Tiempo de acceso, tat_a: intervalo desde que se inicia una lectura o escritura hasta que se completa. En lectura, hasta que los datos están disponibles. Puede ser distinto en lectura y en escritura y, en algunas memorias, depender de la posición; entonces se usa su valor medio.

Tiempo de ciclo, tct_c: intervalo mínimo entre el inicio de dos accesos consecutivos. En una memoria sencilla sin solapamiento:

tc≥tat_c \geq t_a

porque, tras entregar el dato, la memoria puede necesitar un tiempo extra, tc−tat_c - t_a, para quedar preparada.

text
Petición                   Información               Memoria preparada
de lectura                 disponible                para un nuevo acceso
    |<-------- t_a ---------->|                              |
    |<--------------------------- t_c ---------------------->|
Tipo de accesoFuncionamiento
Sin solapamientoUn acceso no empieza hasta que pasa el tct_c del anterior
Con solapamientoUn acceso puede empezar mientras otro sigue en curso; aumenta los accesos por unidad de tiempo (se ve en 2.6.3)

Sin solapamiento, la frecuencia máxima de acceso depende de tct_c, no de tat_a:

fmax⁡=1tc(accesos/s)f_{\max} = \frac{1}{t_c} \quad \text{(accesos/s)}

Velocidad de transferencia, vTv_T: información transferida por unidad de tiempo. Depende de cuánto se transfiere en cada acceso (LTL_T) y de cuántos accesos se hacen por segundo:

vT=NTvT,max⁡=LT⋅fmax⁡=LTtcv_T = \frac{N}{T} \qquad\qquad v_{T,\max} = L_T \cdot f_{\max} = \frac{L_T}{t_c}

VelocidadSignificado
Máxima teóricaEl máximo en condiciones ideales
EfectivaLa información útil realmente transferida por unidad de tiempo. Puede ser menor por esperas, operaciones de control y limitaciones del sistema

Una de esas limitaciones es el ancho de banda del bus: si la memoria da 800 MB/s pero el bus solo admite 400 MB/s, entre ambos no se superan 400 MB/s (y la efectiva puede ser incluso menor).

Ver ejemplos 2.5 y 2.6: frecuencia máxima y velocidad máxima teórica

Ejemplo 2.5: ta=100t_a = 100 ns, tc=200t_c = 200 ns.

fmax⁡=1200⋅10−9=5⋅106 accesos/sf_{\max} = \frac{1}{200 \cdot 10^{-9}} = 5 \cdot 10^6 \text{ accesos/s}

Se usa tct_c, no tat_a, porque tct_c marca la separación mínima entre accesos.

Ejemplo 2.6: LT=64L_T = 64 bits =8= 8 B, tc=20t_c = 20 ns.

fmax⁡=120⋅10−9=5⋅107 accesos/svT,max⁡=8⋅5⋅107=4⋅108 B/s=400 MB/sf_{\max} = \frac{1}{20 \cdot 10^{-9}} = 5 \cdot 10^7 \text{ accesos/s} \qquad v_{T,\max} = 8 \cdot 5 \cdot 10^7 = 4 \cdot 10^8 \text{ B/s} = 400 \text{ MB/s}

2.3.3. Métodos de acceso a la información

El método de acceso es el procedimiento para localizar la información y leerla o escribirla. Los apuntes usan el término posición de almacenamiento, más general que unidad direccionable, porque no presupone que se pueda llegar a ella directamente con una dirección.

MétodoCómo se localizaTiempo de accesoNombre de la memoriaEjemplos
SecuencialRecorriendo las posiciones en un orden establecidoDepende de la posición respecto al punto de partidaSAM (Sequential Access Memory)Cintas magnéticas; antes, memorias de línea de retardo y de registros de desplazamiento
DirectoSe llega a una zona sin recorrer todo lo anterior, pero hacen falta operaciones adicionalesDepende de la ubicación física y de esas operacionesDAM (Direct Access Memory); dispositivos DASDDiscos duros (HDD): mover el cabezal a la pista y esperar al sector
AleatorioCon la dirección se llega a cualquier unidad sin recorrer otrasIdealmente independiente de la direcciónRAM (Random Access Memory)Memoria principal; también los SSD
AsociativoSe compara un valor de búsqueda con los contenidos (o parte de ellos)Depende de la implementación; la comparación simultánea lo hace rápidoCAM (Content-Addressable Memory)Búferes TLB; directorios de algunas cachés

Tres matices que caen en examen:

  • "Aleatorio" no significa al azar: significa que se llega a cualquier unidad sin recorrer las anteriores (a la dirección 1000 sin pasar por 0, 1, ..., 999).
  • Acceso aleatorio no es lo mismo que "RAM": un SSD también permite acceso aleatorio. La palabra RAM se reserva para ciertas memorias de semiconductores de lectura y escritura.
  • Aleatorio frente a asociativo: en el aleatorio se da una dirección y se obtiene el contenido; en el asociativo se da un contenido y se obtienen las posiciones que coinciden (puede haber una, varias o ninguna).

2.3.4. Clasificación de las memorias

Los criterios no son excluyentes: una misma memoria pertenece a varias categorías a la vez.

mermaid
flowchart TB
    M["Memorias"] --> V["Volatilidad"]
    M --> T["Tecnología"]
    M --> F["Localización y función"]
    M --> AC["Método de acceso<br/>(2.3.3)"]
    V --> V1["Volátiles<br/>RAM: SRAM, DRAM"]
    V --> V2["No volátiles<br/>ROM, flash, HDD, SSD,<br/>ópticos, cintas"]
    T --> T1["Semiconductores<br/>SRAM, DRAM, ROM,<br/>PROM, EPROM, EEPROM, flash"]
    T --> T2["Magnéticas<br/>HDD, cintas"]
    T --> T3["Ópticas<br/>CD, DVD, Blu-ray"]
    F --> F1["Interna<br/>registros, caché"]
    F --> F2["Principal<br/>DRAM"]
    F --> F3["Secundaria o externa<br/>HDD, SSD, ópticos, cintas"]

Según la volatilidad. La volatilidad indica si la información se pierde al cortar la alimentación. Las volátiles (RAM de la memoria principal) la pierden; las no volátiles (ROM, flash, HDD, SSD, CD, DVD, Blu-ray, cintas) la conservan. La volatilidad no determina por sí sola la velocidad ni el método de acceso: RAM y SSD son ambos de acceso aleatorio, pero solo la RAM es volátil.

Según la tecnología. Semiconductores (circuitos electrónicos), magnéticas (propiedades magnéticas de un material) y ópticas (lectura con láser).

Según su localización y función:

GrupoQué incluyeCaracterísticasValores orientativos
Memoria internaRegistros del procesador y memorias cachéMuy rápida, poca capacidad, coste por bit muy altoRegistros: unos 32 o 64 bits, del orden de un ciclo. Cachés L1, L2, L3: de decenas de KB a decenas de MB, pocos ciclos
Memoria principal (central o primaria)Programas y datos en ejecución; normalmente DRAMMás capacidad, menos velocidad y menos coste por bit que la interna; se accede con direcciones8 a 64 GB; decenas de ns
Memoria secundaria (externa)HDD, SSD, ópticos, cintasPersistente, gran capacidad, más lenta y barata; se accede mediante operaciones de E/SCientos de GB a varios TB; HDD varios ms, SSD decenas o cientos de µs

Dos notas de los apuntes: un SSD es memoria secundaria por su función aunque sea de semiconductores, y "memoria externa" no implica que esté físicamente fuera del computador.


2.4. Jerarquía de memoria

La jerarquía de memoria organiza los distintos tipos de memoria en niveles ordenados según velocidad, capacidad y coste, para dar acceso rápido y mucha capacidad a un coste razonable.

text
                 /\          Velocidad  +      Capacidad  -      Coste/bit  +
                /  \
               /Reg.\
              /------\
             / Caché  \
            /----------\
           /  Memoria   \
          /  principal   \
         /----------------\
        / Memoria externa  \     Velocidad  -      Capacidad  +      Coste/bit  -
       /--------------------\

Al bajar en la jerarquía aumenta la capacidad y disminuyen la velocidad y el coste por bit. Al subir, lo contrario.

2.4.1. Principio de localidad

La jerarquía funciona porque el procesador no accede de forma uniforme a la memoria: tiende a repetir posiciones y a usar posiciones cercanas.

TipoDefiniciónEjemplo
Localidad temporalVolver a acceder pronto a posiciones usadas recientementeLas instrucciones y variables de un bucle
Localidad espacialAcceder a posiciones próximas a otras usadas recientementeRecorrer los elementos de un vector

Gracias a la localidad, una memoria rápida y pequeña que guarda lo usado recientemente y lo que está cerca resuelve una proporción alta de los accesos, y se reduce el tiempo medio de acceso.

2.4.2. Transferencia de información entre niveles

Los niveles rápidos guardan una parte de lo que hay en los lentos. Si el dato no está en el nivel rápido, se busca en el inferior. La transferencia entre niveles se hace en bloques:

  • Entre memoria principal y caché: bloques de palabras consecutivas.
  • Entre memoria secundaria y principal: bloques de un número determinado de bytes.

Traer el bloque entero aprovecha la localidad espacial: junto al dato pedido llegan los vecinos, y el siguiente acceso cercano ya se resuelve en el nivel rápido. Si además se reutiliza lo traído, se aprovecha la localidad temporal.


2.5. Memorias de semiconductores

Son dispositivos electrónicos que guardan información binaria en celdas fabricadas con semiconductores (sobre todo silicio). Se implementan como circuitos integrados: un chip protegido por un encapsulado con terminales externos (pines).

Toda celda, sea cual sea su tecnología, cumple tres propiedades:

  1. Tiene dos estados distinguibles, estables o semiestables, para representar 0 y 1.
  2. Se puede escribir para fijar su estado (algunas tecnologías solo una vez).
  3. Se puede leer para conocer su estado.

Funcionalmente, una celda tiene tres tipos de conexiones:

ConexiónFunción
SelecciónElige la celda sobre la que se opera
ControlIndica si la operación es de lectura o de escritura
DatosRecibe el bit a escribir o entrega el bit leído
GrupoTecnologías
VolátilesSRAM, DRAM
No volátilesROM y variantes (máscara, PROM, EPROM, EEPROM), flash

2.5.1. Memorias RAM

Las RAM permiten leer y escribir directamente durante el funcionamiento normal, mediante señales eléctricas, sin procedimientos especiales de programación o borrado. Lo que las distingue no es el acceso aleatorio (las ROM también lo tienen) sino que están pensadas para leer y escribir con normalidad. Las convencionales son volátiles.

SRAM (RAM estática). Guarda cada bit en un circuito biestable, que tiene dos estados estables y los mantiene mientras hay alimentación.

  • Celda típica de 6 transistores: 4 forman el biestable y 2 actúan como interruptores de acceso.
  • Escritura: se pone el valor en las líneas de datos y se activa la selección.
  • Lectura: se activa la selección y se lee el valor sin alterar el biestable: lectura no destructiva.
  • No necesita refresco: de ahí lo de "estática".

DRAM (RAM dinámica). Guarda cada bit como la carga de un condensador.

  • Celda típica de 1 transistor y 1 condensador. Normalmente, carga suficiente es 1 y ausencia de carga es 0.
  • Escritura: se activa el transistor y se carga o descarga el condensador.
  • Lectura: la carga produce una pequeña variación de tensión que detecta un amplificador de detección. La lectura altera la carga: es destructiva y hay que restaurar el valor.
  • Las corrientes de fuga descargan el condensador poco a poco incluso con alimentación, así que hay que hacer refresco periódico: de ahí lo de "dinámica".

La densidad de almacenamiento es la información que cabe por unidad de superficie del chip (bit/mm², Mibit/mm²...). Como la celda DRAM ocupa menos que la SRAM, la DRAM es más densa y más barata por bit.

CaracterísticaSRAMDRAM
Almacenamiento del bitCircuito biestableCarga de un condensador
Componentes de una celda6 transistores1 transistor y 1 condensador
Tipo de lecturaNo destructivaDestructiva, con restauración
Refresco periódicoNoSí
Tiempo de acceso orientativo1–10 ns30–100 ns
Capacidad habitual de un chipDel orden de MibDel orden de Gib
DensidadMenorMayor
Coste por bitMayorMenor
Uso principalMemoria cachéMemoria principal
Origen comercialDécada de 1960Principios de la década de 1970

Ver ejercicio 2.11: densidad de una SRAM y una DRAM

SRAM de 16 Mib en 80 mm² y DRAM de 128 Mib en 160 mm².

DA=1680=0.2 Mib/mm2DB=128160=0.8 Mib/mm2DBDA=4D_A = \frac{16}{80} = 0.2 \text{ Mib/mm}^2 \qquad D_B = \frac{128}{160} = 0.8 \text{ Mib/mm}^2 \qquad \frac{D_B}{D_A} = 4

La DRAM es 4 veces más densa, coherente con que su celda tenga un transistor y un condensador frente a los seis transistores de la SRAM.

2.5.2. Memorias ROM

Las ROM (Read Only Memory) son memorias de semiconductores no volátiles. El nombre viene de las primeras, cuyo contenido se fijaba en fábrica y solo se podía leer. Después aparecieron variantes programables e incluso borrables que se siguen incluyendo en la familia aunque no sean estrictamente "de solo lectura". Se usan para información que debe conservarse mucho tiempo sin alimentación.

ROM de máscara. El contenido se fija durante la fabricación mediante la estructura de las celdas y no se puede cambiar.

  • Ventaja: coste unitario bajo en tiradas grandes.
  • Inconvenientes: coste inicial de preparar la fabricación, y cualquier error obliga a fabricar chips nuevos.
  • Uso: programas y datos fijos en microcontroladores, calculadoras y aparatos fabricados en masa. Desde la década de 1960.

PROM (ROM programable). Se programa eléctricamente una sola vez después de fabricarla, modificando de forma irreversible conexiones internas. No se puede borrar ni reprogramar.

  • Ventaja frente a la de máscara: el contenido se pone después de fabricar, útil para tiradas pequeñas.
  • Uso actual del principio: números de serie, datos de identificación y parámetros que no deben cambiar. Desde la década de 1970.

EPROM (ROM programable y borrable). Se programa eléctricamente y se borra con luz ultravioleta.

  • Usa transistores de puerta flotante: una región conductora aislada donde quedan atrapadas cargas; su presencia o ausencia representa 0 o 1.
  • Programar es introducir carga en las puertas flotantes; la carga se mantiene sin alimentación.
  • Borrar es exponer el chip a ultravioleta, lo que elimina las cargas. El borrado afecta a todo el contenido y normalmente hay que sacar el chip del aparato. Por eso llevan una ventana transparente en el encapsulado.
  • Comercializadas desde 1971; desplazadas después por EEPROM y flash.

EEPROM (ROM programable y borrable eléctricamente). Usa también puerta flotante, pero tanto escribir como borrar se hace con señales eléctricas, sin sacar el chip.

  • Permite modificar selectivamente, normalmente por bytes, sin borrar todo.
  • Escribir y borrar es más lento que leer, y las celdas soportan un número limitado de ciclos de escritura y borrado por desgaste.
  • Uso: pequeñas cantidades de datos modificables (configuración, calibración, identificación). Desde finales de los 70.
  • Su estructura limita la densidad, lo que impulsó la aparición de la flash.
CaracterísticaROM de máscaraPROMEPROMEEPROM
Cómo se fija el contenidoEn la fabricaciónProgramación eléctricaProgramación eléctricaProgramación eléctrica
¿Se puede borrar?NoNoSíSí
Procedimiento de borrado——Luz ultravioletaEléctrico
Borrado selectivo——No, se borra todoSí, normalmente por bytes
¿Reprogramable?NoNoSíSí
¿Hay que sacar el chip para borrar?——Normalmente síNo
VolatilidadNo volátilNo volátilNo volátilNo volátil
mermaid
flowchart LR
    A["ROM de máscara<br/>fijada en fábrica"] -->|"programar después<br/>de fabricar"| B["PROM<br/>una sola vez"]
    B -->|"poder borrar"| C["EPROM<br/>borrado UV, todo"]
    C -->|"borrado eléctrico<br/>y selectivo"| D["EEPROM<br/>por bytes"]
    D -->|"borrado por bloques:<br/>más densidad, menos coste"| E["Flash"]

2.5.3. Memorias flash

Las flash son memorias de semiconductores no volátiles, modificables eléctricamente, que evolucionan de la EEPROM. Su rasgo clave es que se borran por bloques de celdas, no por bytes. Eso simplifica los circuitos de borrado y permite más densidad y menos coste por bit que la EEPROM.

En la flash NAND las celdas se agrupan en páginas (unidad de lectura y programación) y las páginas en bloques (unidad de borrado):

OperaciónQué haceUnidad
LecturaObtiene los datos sin modificar las celdasPágina
ProgramaciónEscribe cambiando el estado de las celdas; ciertas modificaciones exigen borrar antes el bloquePágina
BorradoDevuelve todas las celdas del bloque al estado inicialBloque completo

Leer es más rápido que programar y borrar. Las celdas soportan un número limitado de ciclos de programación y borrado; para alargar la vida útil se usa la nivelación del desgaste (wear leveling), que reparte las operaciones entre bloques.

Tiempos orientativos: leer una página, decenas de µs; programarla, de cientos de µs a varios ms; borrar un bloque, varios ms. Páginas de varios KiB y bloques de cientos de páginas; chips de varios Gib, incluso 1 Tib o más.

NOR frente a NAND:

TipoCaracterísticaUso
Flash NORLectura directa de posiciones individuales; permite ejecutar en el lugar (XIP, Execute in Place) sin copiar a memoria principal. Menor densidad y mayor coste por bitProgramas de sistemas empotrados
Flash NANDAlta densidad y bajo coste por bitAlmacenamiento de datos: pendrives, tarjetas de memoria, SSD

Bits por celda. Usando varios niveles de carga, una celda NAND guarda más de un bit. Con kk bits por celda hacen falta 2k2^k estados distinguibles:

TecnologíaBits por celdaEstados (2k2^k)
SLC (Single-Level Cell)12
MLC (Multi-Level Cell)24
TLC (Triple-Level Cell)38
QLC (Quad-Level Cell)416

Más bits por celda dan más densidad y menos coste por bit, pero los estados de carga son más difíciles de distinguir: programar tarda más y la celda aguanta menos ciclos. SLC ofrece más resistencia y rapidez; MLC, TLC y QLC más capacidad y menor coste.


2.6. Módulos y organización de la memoria principal

2.6.1. Circuitos integrados de memoria

Un circuito integrado (chip) de memoria contiene un conjunto de celdas y los circuitos auxiliares para seleccionar unidades direccionables y leer o escribir. Lógicamente se organiza como N×LN \times L bits:

C=N⋅L bitsC = N \cdot L \text{ bits}

Organización interna. La organización lógica no tiene por qué coincidir con la física. Las celdas forman una matriz de filas y columnas, y unos decodificadores seleccionan la fila y la columna a partir de los bits de dirección. Así no hace falta una conexión externa por celda.

mermaid
flowchart LR
    DIR["n líneas de<br/>dirección"] --> DF["Decodificador<br/>de filas"]
    DIR --> DC["Decodificador<br/>de columnas"]
    DF --> MAT["Matriz de celdas<br/>de memoria"]
    DC --> MAT
    CTRL["Control"] --> RW["Circuitos de<br/>lectura y escritura"]
    MAT <--> RW
    RW <--> DAT["L líneas<br/>de datos"]

Además, las DRAM incluyen circuitos de refresco. En cada operación se transfieren LL bits: un chip de 220×82^{20} \times 8 mueve 8 bits por acceso.

Encapsulados y terminales. Los terminales (pines) se agrupan por función:

GrupoFunciónCuántos, si no se multiplexa
DirecciónSeleccionar la unidad direccionablenn (con N=2nN = 2^n)
DatosTransferir la información (bidireccionales o separados de entrada y salida)LL
ControlSelección del chip, lectura, escrituraSegún el chip
AlimentaciónVCCV_{CC} (tensión positiva) y VSSV_{SS} (referencia, normalmente 0 V)2 o más

En el ejemplo de los apuntes, un DIP de 24 pines (dos hileras paralelas) de una DRAM 4M×44\text{M} \times 4 bits tiene:

TerminalesSignificado
A0 a A1011 líneas de dirección
D0 a D34 líneas de datos
RAS (Row Address Strobe)Selección de fila
CAS (Column Address Strobe)Selección de columna
WE (Write Enable)Habilita la escritura
OE (Output Enable)Habilita las salidas de datos
VCC, VSSAlimentación
NC (Not Connected)Sin conexión interna

En la notación tradicional de chips, "M" significa 2202^{20} (lo que la norma llama Mi), así que 4M=2224\text{M} = 2^{22} unidades: harían falta 22 bits de dirección, pero solo hay 11 terminales. Lo permite el direccionamiento multiplexado.

Hoy los chips DRAM de los módulos usan encapsulado BGA (Ball Grid Array): una matriz de bolitas de soldadura en la cara inferior, que permite muchas más conexiones en poca superficie que el DIP.

Direccionamiento multiplexado en DRAM. Para reducir terminales, la dirección se divide en dirección de fila y dirección de columna, y ambas se envían sucesivamente por los mismos terminales:

mermaid
sequenceDiagram
    participant C as Controlador
    participant D as Chip DRAM 2^22 x 4
    C->>D: Dirección de fila (11 bits) por A0-A10
    C->>D: Activa RAS: el chip captura y guarda la fila
    C->>D: Dirección de columna (11 bits) por A0-A10
    C->>D: Activa CAS: el chip captura la columna
    D-->>C: Datos de la unidad seleccionada (D0-D3)
Sin multiplexarMultiplexado
Terminales de dirección (2222^{22} unidades)2211
Unidades direccionables2222^{22}2222^{22} (no cambian)
VentajaUn solo pasoMuchos menos terminales; facilita chips de gran capacidad
InconvenienteMuchos terminalesEl acceso necesita varias fases

2.6.2. Ampliación de la capacidad de memoria

Se quiere construir una memoria C=N×LC = N \times L con chips de capacidad base C0=N0×L0C_0 = N_0 \times L_0. Hay tres casos.

Caso 1. Ampliación del número de bits por unidad direccionable

N=N0N = N_0 y L>L0L > L_0: mismas direcciones, más bits por dirección. Se ponen rr chips en paralelo:

r=⌈CC0⌉=⌈LL0⌉r = \left\lceil \frac{C}{C_0} \right\rceil = \left\lceil \frac{L}{L_0} \right\rceil

LíneasConexión
DirecciónComunes a los rr chips
Selección, lectura y escrituraComunes
DatosCada chip aporta un grupo distinto de bits; si LL es múltiplo de L0L_0, L=r⋅L0L = r \cdot L_0 (si no, sobran líneas del último chip)
text
             A9..A0, selección, lectura, escritura (comunes)
        +------------+------------+------------+------------+
        |   CI 0     |   CI 1     |   CI 2     |   CI 3     |
        |  2^10 x 8  |  2^10 x 8  |  2^10 x 8  |  2^10 x 8  |
        +-----+------+-----+------+-----+------+-----+------+
              |            |            |            |
           D7..D0      D15..D8     D23..D16     D31..D24
        \____________ bus de datos de 32 bits ______________/
              Los cuatro chips actúan a la vez en cada acceso

Caso 2. Ampliación del número de unidades direccionables

L=L0L = L_0 y N>N0N > N_0: más direcciones, mismos bits. Se usan qq chips:

q=⌈CC0⌉=⌈NN0⌉q = \left\lceil \frac{C}{C_0} \right\rceil = \left\lceil \frac{N}{N_0} \right\rceil

Ahora no actúan todos a la vez: hay que elegir el chip que contiene la dirección. Para eso se usa un decodificador: un circuito combinacional de kk entradas y hasta 2k2^k salidas que, para cada combinación de entrada, activa una salida distinta.

A1A_1A0A_0S0S_0S1S_1S2S_2S3S_3
001000
010100
100010
110001

Tabla de verdad de un decodificador 2 a 4 con salidas activas a nivel alto (activa = 1). Existen también salidas activas a nivel bajo (activa = 0).

Si N0=2n0N_0 = 2^{n_0} y N=2nN = 2^n, la dirección se parte en dos:

text
 A(n-1) ... A(n0)  |  A(n0-1) ... A1 A0
 \_______________/    \________________/
  p = n - n0 bits      n0 bits
  -> decodificador     -> dirección dentro del chip
  (elige el chip)         (a todos los chips en paralelo)
LíneasConexión
n0n_0 bits menos significativosEn paralelo a todos los chips
n−n0n - n_0 bits más significativosA las entradas del decodificador
SelecciónUna por chip, desde una salida del decodificador
Lectura y escrituraComunes
DatosTodos al mismo bus de LL líneas; solo el chip seleccionado lo usa
mermaid
flowchart LR
    A["A11 A10"] --> DEC["Decodificador<br/>2 a 4"]
    DEC -->|S0| C0["CI 0<br/>2^10 x 8"]
    DEC -->|S1| C1["CI 1<br/>2^10 x 8"]
    DEC -->|S2| C2["CI 2<br/>2^10 x 8"]
    DEC -->|S3| C3["CI 3<br/>2^10 x 8"]
    B["A9..A0"] --> C0 & C1 & C2 & C3
    C0 & C1 & C2 & C3 <--> BD["Bus de datos<br/>de 8 bits"]
A11A_{11}A10A_{10}ChipDirecciones
00CI 0000 a 3FF
01CI 1400 a 7FF
10CI 2800 a BFF
11CI 3C00 a FFF

Caso 3. Ampliación simultánea de ambas magnitudes

N>N0N > N_0 y L>L0L > L_0. Se combinan los dos casos: primero grupos de rr chips en paralelo para la anchura, y luego qq grupos seleccionados con un decodificador.

r=⌈LL0⌉q=⌈NN0⌉NCI=q⋅rr = \left\lceil \frac{L}{L_0} \right\rceil \qquad q = \left\lceil \frac{N}{N_0} \right\rceil \qquad N_{CI} = q \cdot r

Cada salida del decodificador habilita todos los chips de un grupo. Dentro del grupo, cada chip aporta bits distintos; los chips que aportan el mismo bit en grupos distintos comparten esa línea del bus, y solo el grupo seleccionado tiene sus salidas habilitadas.

EjemploMemoria deseadaChip baserrqqNCIN_{CI}DirecciónDecodificador
2.8 (caso 1)210×322^{10} \times 32210×82^{10} \times 841410 líneasNinguno
2.9 (caso 2)212×82^{12} \times 8210×82^{10} \times 814412 (10 + 2)2 a 4
2.10 (caso 3)212×22^{12} \times 2210×12^{10} \times 124812 (10 + 2)2 a 4

Ver ejercicio 2.14: qué chip atiende la dirección 5A3C en una memoria 2^15 x 8 con chips 2^12 x 8

  • q=215/212=8q = 2^{15}/2^{12} = 8 chips; capacidad 2152^{15} B =32= 32 KiB.
  • 15 líneas: A11..A0A_{11}..A_0 internas y A14A13A12A_{14}A_{13}A_{12} a un decodificador 3 a 8.
  • Separar los 12 bits bajos es separar los tres últimos dígitos hexadecimales:

5A3C16=5⋅100016+A3C165A3C_{16} = 5 \cdot 1000_{16} + A3C_{16}

Se selecciona el CI 5 y la dirección interna es A3C.

2.6.3. Módulos de memoria principal

Un módulo de memoria es un conjunto de chips montados en una placa de circuito impreso con las conexiones para comunicarse con el resto del computador. Permite ampliar o cambiar la memoria sin tocar la placa base.

Organización. La anchura de datos del módulo es el número de bits que transfiere a la vez; en PC suele ser 64 bits (algunos módulos añaden bits para detección y corrección de errores).

Un rango (rank) es un conjunto de chips que se seleccionan juntos para leer y escribir. La relación con la ampliación es directa:

Concepto del móduloEquivale aEfecto
Chips dentro de un rangoCaso 1 (más bits por dirección)Comparten dirección y selección; cada uno aporta parte de los 64 bits
Varios rangos en un móduloCaso 2 (más direcciones)Comparten conexiones pero se seleccionan por separado: más capacidad, misma anchura
text
Módulo de memoria
+---------------------------------------------------------------+
| Rango 0: CI0 CI1 CI2 CI3 CI4 CI5 CI6 CI7  (8 x 8 bits = 64)   |  2^10 x 64 bits = 8 KiB
| Rango 1: CI0 CI1 CI2 CI3 CI4 CI5 CI6 CI7  (8 x 8 bits = 64)   |  2^10 x 64 bits = 8 KiB
+---------------------------------------------------------------+
  Capacidad total: 16 KiB      Anchura de datos: 64 bits (no 128)

Formatos. Los módulos se conectan a la placa base:

FormatoUsoRasgo
DIMM (Dual In-line Memory Module)Sobremesa y servidoresContactos independientes en las dos caras
SO-DIMM (Small Outline DIMM)Portátiles y equipos compactosMás pequeño; distinto número y disposición de contactos

La compatibilidad depende del formato y de las características eléctricas y la tecnología: dos módulos de formato parecido no son necesariamente intercambiables. En algunos portátiles y móviles los chips van soldados a la placa.

Memorias DDR SDRAM.

TecnologíaÉpocaNovedad
DRAMPrincipios de los 70Limitaciones de rendimiento en lectura y escritura
SDRAM (Synchronous DRAM)Principios de los 90Comunicación sincronizada con un reloj
DDR SDRAM (Double Data Rate)Hacia 2000Dos transferencias por ciclo de reloj

Una señal de reloj tiene dos tipos de transición o flanco: ascendente (de nivel bajo a alto) y descendente (de alto a bajo). DDR transfiere datos en ambos.

text
          ____      ____      ____
reloj    |    |    |    |    |    |
     ____|    |____|    |____|    |____
         ^    v    ^    v    ^    v       ^ flanco ascendente   v flanco descendente
datos    D0   D1   D2   D3   D4   D5      DDR: un dato en cada flanco
         |<-- Tck -->|

El controlador de memoria (hoy integrado en el procesador) gestiona las lecturas y escrituras y genera las señales para los chips. Se comunica con los módulos por el bus de memoria (datos, direcciones, control y reloj), que es distinto del bus del sistema. El reloj de la interfaz de memoria es distinto del reloj interno del procesador.

mermaid
flowchart LR
    subgraph P ["Procesador"]
        N["Núcleos y<br/>otros componentes"] --- CA["Memoria caché"]
        CA --- CM["Controlador<br/>de memoria"]
    end
    CM <-->|"Bus de memoria"| MOD["Módulos<br/>DDR SDRAM"]
    N <-->|"Bus del sistema"| ES["Resto del sistema"]

La tasa de transferencia es el número de transferencias por unidad de tiempo (en MT/s, millones de transferencias por segundo). En DDR:

Rt=NtTRt=2fckBW=Rt⋅AR_t = \frac{N_t}{T} \qquad R_t = 2 f_{ck} \qquad BW = R_t \cdot A

donde fckf_{ck} es la frecuencia del reloj de la interfaz y AA la anchura de datos del bus en bits. Frecuencia (MHz) y tasa (MT/s) son magnitudes distintas: 1600 MHz dan 3200 MT/s.

Ver ejemplo 2.11: ancho de banda de un bus DDR de 64 bits a 3200 MT/s

BW=Rt⋅A=3200⋅106⋅64=204 800⋅106 bits/sBW = R_t \cdot A = 3200 \cdot 10^6 \cdot 64 = 204\,800 \cdot 10^6 \text{ bits/s}

BW=204 800⋅1068=25 600⋅106 B/s=25 600 MB/s=25.6 GB/sBW = \frac{204\,800 \cdot 10^6}{8} = 25\,600 \cdot 10^6 \text{ B/s} = 25\,600 \text{ MB/s} = 25.6 \text{ GB/s}

La velocidad efectiva puede ser menor por el tiempo de los accesos y los periodos sin transferencias.

GeneraciónAñoAnchura de un módulo de 64 bits
DDR~2000
DDR22003
DDR32007
DDR42014Un único canal de 64 bits
DDR52020Dos subcanales independientes de 32 bits (no duplica la anchura total)

Cada generación mejora tasa, capacidad de chips y eficiencia, y no son intercambiables entre sí.

Varios módulos y canales. Un canal de memoria es una interfaz del controlador con su propio bus, a la que se conectan uno o varios módulos; el controlador gestiona cada canal de forma independiente.

Se añadeCapacidadAncho de banda
Más módulos en el mismo canalAumentaNo aumenta necesariamente (comparten bus)
Más canales independientesAumentaPuede aumentar (transferencias simultáneas)

Ejemplos de los apuntes: un sobremesa con 2 canales y 2 módulos por canal (4 módulos); procesadores de servidor con 12 canales y 2 módulos por canal (24 módulos).

text
(a) Un canal                       (b) Dos canales
Controlador ==== M1 M2 M3 M4       Controlador == Canal 0 == M1 M2
                 (bus compartido)              == Canal 1 == M3 M4

Modelo simplificado de módulos independientes. Varios módulos comparten el bus de un canal. Cada operación ocupa el bus un tiempo tbust_{bus}; después, el módulo sigue trabajando por dentro tintt_{int} sin usar el bus, y ese hueco lo puede aprovechar otro módulo: es el solapamiento.

MagnitudDefinición
Tiempo de ciclo del móduloMínimo entre los comienzos de dos operaciones en el mismo módulo: tc=tbus+tintt_c = t_{bus} + t_{int}
Tiempo de ocupación del busIntervalo en que una operación impide usar el bus a otro módulo: tbust_{bus}

Cuando tc/tbust_c/t_{bus} es entero, las operaciones que se completan por ciclo y la velocidad máxima son:

Nop=min⁡(Nmod, tctbus)vT,max⁡=Nop⋅LTtcN_{op} = \min\left(N_{mod},\ \frac{t_c}{t_{bus}}\right) \qquad v_{T,\max} = \frac{N_{op} \cdot L_T}{t_c}

Ejemplo 2.12 (tbus=50t_{bus} = 50 ns, tint=200t_{int} = 200 ns, LT=8L_T = 8 B), cada carácter son 25 ns; # es bus ocupado y - trabajo interno:

text
t (ns)  0   100 200 300 400 500
M1      ##--------##--------##
M2        ##--------##--------##
M3          ##--------##--------##
M4            ##--------##--------##
BUS     ########..########..########
        4 módulos: el bus queda libre 50 ns de cada 250
MódulosNopN_{op}vT,max⁡v_{T,\max}
4min⁡(4,5)=4\min(4, 5) = 44⋅8 B/250 ns=1284 \cdot 8\text{ B}/250\text{ ns} = 128 MB/s
5min⁡(5,5)=5\min(5, 5) = 5160 MB/s (bus siempre ocupado)
6 o más5160 MB/s: el bus es el límite

Añadir módulos mejora la velocidad hasta saturar el bus; a partir de ahí no aporta nada. Las DRAM actuales aplican la misma idea dentro del chip con los bancos de memoria, subdivisiones que funcionan de forma parcialmente independiente (no confundir con los rangos).

Ver ejercicio 2.19: 40 ns de bus, 160 ns internos, 64 bits

  • tc=40+160=200t_c = 40 + 160 = 200 ns; tc/tbus=5t_c/t_{bus} = 5.
  • 3 módulos: 3⋅8 B/200 ns=1203 \cdot 8\text{ B}/200\text{ ns} = 120 MB/s.
  • 6 módulos: min⁡(6,5)=5\min(6,5) = 5, 5⋅8/200=2005 \cdot 8/200 = 200 MB/s.
  • Saturación: 5 módulos; BWbus=8 B/40 ns=200BW_{bus} = 8\text{ B}/40\text{ ns} = 200 MB/s.
  • Mejora respecto a un módulo (40 MB/s): S(N)=min⁡(N,5)S(N) = \min(N, 5); para N=3N = 3, 3 (+200 %); para N=5N = 5 y N=6N = 6, 5 (+400 %).

Organización entrelazada (solo aparece en los ejercicios). El ejercicio 2.18 plantea elegir el chip con los bits menos significativos, para que direcciones consecutivas caigan en chips distintos de forma cíclica:

OrganizaciónBits que eligen el chipRepartoChip y dirección interna (4 chips)
Bloques contiguos (caso 2)Más significativosCada chip, un intervalo consecutivo⌊Dir/N0⌋\lfloor \text{Dir}/N_0 \rfloor y Dir mod N0\text{Dir} \bmod N_0
Entrelazada (interleaving)Menos significativosConsecutivas a chips distintosDir mod 4\text{Dir} \bmod 4 y ⌊Dir/4⌋\lfloor \text{Dir}/4 \rfloor

Con entrelazado, C88, C89, C8A y C8B van a CI 0, 1, 2 y 3, todas con dirección interna 322. Puede facilitar el solapamiento, pero no garantiza por sí solo más rendimiento.


2.7. Memoria caché

2.7.1. Concepto y funcionamiento

El procesador es mucho más rápido que la DRAM y tendría que esperar continuamente. La memoria caché es una memoria pequeña y rápida (SRAM), situada funcionalmente entre el procesador y la memoria principal e integrada en el procesador, que guarda copias de bloques de memoria principal (conjuntos de unidades direccionables consecutivas).

Suele haber tres niveles: L1 (el más cercano al núcleo, el más pequeño y rápido), L2 y L3 (el más grande y lento de los tres, pero mucho más rápido que la memoria principal).

SituaciónQué ocurre
Acierto (cache hit)El bloque está en la caché consultada; se sirve sin bajar de nivel
Fallo (cache miss)El bloque no está; se consulta el nivel siguiente (L1, L2, L3 y, por último, memoria principal). Normalmente se guarda una copia del bloque en la caché que falló
mermaid
flowchart TD
    A["El procesador solicita<br/>una dirección"] --> B{"¿Hay en el nivel consultado<br/>una copia del bloque que<br/>contiene esa dirección?"}
    B -->|"Sí: acierto"| C["Se lee de la caché<br/>y se entrega al procesador"]
    B -->|"No: fallo"| D["Gestión del fallo:<br/>traer el bloque del nivel inferior"]

Su eficacia se basa en el principio de localidad: lo usado recientemente y lo cercano tiene mucha probabilidad de volver a usarse.

2.7.2. Organización de la memoria caché

Bloques de memoria principal. Para la caché, la memoria principal se divide en bloques de SBS_B unidades direccionables consecutivas. Si la memoria tiene CMPC_{MP} unidades:

NBP=⌈CMPSB⌉j=0,1,…,NBP−1n=⌈log⁡2CMP⌉N_{BP} = \left\lceil \frac{C_{MP}}{S_B} \right\rceil \qquad j = 0, 1, \ldots, N_{BP} - 1 \qquad n = \lceil \log_2 C_{MP} \rceil

(Si CMPC_{MP} no es múltiplo de SBS_B, el último bloque se considera completo aunque le falten posiciones.)

Una dirección de nn bits se divide en dos campos:

text
DirMP  |      Bloque j (f bits)       |   Desplazamiento (d bits)   |
        \____ número del bloque ____/   \__ posición p dentro de él _/

f=⌈log⁡2NBP⌉d=log⁡2SBn=f+dDirMP=j⋅SB+pf = \lceil \log_2 N_{BP} \rceil \qquad d = \log_2 S_B \qquad n = f + d \qquad \text{Dir}_{MP} = j \cdot S_B + p

con pp entre 00 y SB−1S_B - 1. Con ff bits caben 2f2^f números de bloque, que pueden ser más que los NBPN_{BP} existentes; entonces algunas combinaciones no corresponden a ningún bloque.

Equivalentemente, a partir de la dirección:

j=⌊DirMPSB⌋p=DirMP mod SBj = \left\lfloor \frac{\text{Dir}_{MP}}{S_B} \right\rfloor \qquad p = \text{Dir}_{MP} \bmod S_B

Líneas de caché. La caché se organiza en líneas; cada una guarda un bloque, así que su capacidad de datos es SBS_B:

NLC=CMCSBi=0,…,NLC−1b=⌈log⁡2NLC⌉N_{LC} = \frac{C_{MC}}{S_B} \qquad i = 0, \ldots, N_{LC} - 1 \qquad b = \lceil \log_2 N_{LC} \rceil

(Aquí no hace falta redondear: la capacidad de datos de la caché siempre es múltiplo del bloque.)

Además de los datos, la caché tiene un directorio con una entrada por línea:

Campo del directorioFunción
EtiquetaIdentifica qué bloque hay en la línea (su significado depende de la correspondencia)
Bit de validez VVV=0V = 0: contenido no utilizable (así empiezan todas). V=1V = 1: bloque válido
Bit de modificación MMSolo con escritura diferida (2.7.4)

La capacidad de una caché se refiere solo a sus datos, sin contar el directorio. Como NLC≪NBPN_{LC} \ll N_{BP}, solo caben a la vez unos pocos bloques.

text
                Directorio           Zona de datos (S_B = 8 B)
             +---+----------+     +---+---+---+---+---+---+---+---+
Línea i = 0  | V | Etiqueta |     | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
             +---+----------+     +---+---+---+---+---+---+---+---+
Línea i = 1  | V | Etiqueta |     | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
             +---+----------+     +---+---+---+---+---+---+---+---+

Ver ejemplo 2.13: memoria de 64 B con bloques de 8 B; dirección 9

  • NBP=64/8=8N_{BP} = 64/8 = 8 bloques (j=0..7j = 0..7); n=log⁡264=6n = \log_2 64 = 6 bits.
  • f=log⁡28=3f = \log_2 8 = 3; d=log⁡28=3d = \log_2 8 = 3; n=3+3=6n = 3 + 3 = 6.
  • 910=001 00129_{10} = 001\,001_2: bloque j=0012=1j = 001_2 = 1, desplazamiento p=0012=1p = 001_2 = 1.
  • Comprobación: DirMP=1⋅8+1=9\text{Dir}_{MP} = 1 \cdot 8 + 1 = 9. El bloque 1 abarca las direcciones 8 a 15.

2.7.3. Métodos de correspondencia

Como no caben todos los bloques, hay que decidir en qué línea puede ir cada bloque. Esa regla es la función de correspondencia.

mermaid
flowchart LR
    subgraph D ["Directa"]
        BD["Bloque j"] -->|"una línea fija<br/>i = j mod NLC"| LD["Línea i"]
    end
    subgraph T ["Totalmente asociativa"]
        BT["Bloque j"] -->|"cualquier línea"| LT["Cualquier línea"]
    end
    subgraph C ["Por conjuntos"]
        BC["Bloque j"] -->|"un conjunto fijo<br/>q = j mod Q"| LC["Cualquier línea<br/>del conjunto q"]
    end

Correspondencia directa

Cada bloque tiene asignada una única línea:

i=j mod NLCi = j \bmod N_{LC}

Los bloques con el mismo resto comparten línea y no pueden estar a la vez en la caché. El campo Bloque jj se divide en Etiqueta y Línea ii:

text
DirMP  |  Etiqueta (e)  |  Línea i (b)  |  Desplazamiento (d)  |
        \_____ Bloque j (f bits) ______/

b=log⁡2NLCd=log⁡2SBn=e+b+de=n−(b+d)b = \log_2 N_{LC} \qquad d = \log_2 S_B \qquad n = e + b + d \qquad e = n - (b + d)

La etiqueta distingue entre los bloques que comparten línea.

Funcionamiento:

  1. El campo Línea ii indica en qué línea buscar.
  2. Se comprueba en el directorio si V=1V = 1 y la etiqueta guardada coincide con la de la dirección. Si se cumplen ambas, acierto; si no, fallo.
  3. Acierto: el desplazamiento localiza la unidad dentro del bloque. Fallo de lectura: se trae el bloque, se guarda en su línea (sustituyendo al anterior), se actualizan etiqueta y VV, y se entrega el dato. En un fallo de escritura decide la política de asignación.

Ver ejemplo 2.16: memoria de 64 B, bloques de 8 B, caché directa de 16 B; lecturas 9, 25, 11, 18, 20, 27

NLC=2N_{LC} = 2; n=6n = 6, d=3d = 3, b=1b = 1, e=2e = 2. Formato: ee | b | ddd.

AccesoDir.BinarioBloque jjLínea iiEtiquetaResultadoLínea 0Línea 1
1900 1 0011100Fallo (V=0V = 0)—j=1j = 1
22501 1 0013101Fallo (etiqueta distinta)—j=3j = 3
31100 1 0111100Fallo—j=1j = 1
41801 0 0102001Fallo (V=0V = 0)j=2j = 2j=1j = 1
52001 0 1002001Aciertoj=2j = 2j=1j = 1
62701 1 0113101Falloj=2j = 2j=3j = 3

1 acierto y 5 fallos. Los bloques 1 y 3 se expulsan mutuamente de la línea 1 aunque la línea 0 está vacía en el acceso 3: son fallos por conflicto.

VentajasInconvenientes
Muy sencilla: la línea se elige directamente con bits de la dirección; una sola comparaciónBloques que comparten línea se expulsan entre sí: fallos por conflicto, aunque haya otras líneas libres

Correspondencia totalmente asociativa

Cualquier bloque puede ir a cualquier línea. Si hay líneas libres, se usa una; si no, hay que elegir cuál sustituir con una política de reemplazo:

PolíticaSustituyeInformación que mantiene el hardware¿Un acierto cambia el orden?
FIFO (First In, First Out)El bloque que entró antes, aunque se use muchoOrden de incorporaciónNo
LRU (Least Recently Used)El bloque que lleva más tiempo sin usarseOrden de utilización, actualizado en cada accesoSí

LRU exacto necesita mucha información de control cuando hay muchas líneas, por eso en la práctica se usan aproximaciones más sencillas.

La dirección no tiene campo de línea: la etiqueta es el número de bloque completo.

text
DirMP  |        Etiqueta (e = f bits)        |  Desplazamiento (d)  |

e=f=⌈log⁡2NBP⌉n=e+de=n−de = f = \lceil \log_2 N_{BP} \rceil \qquad n = e + d \qquad e = n - d

Funcionamiento: se compara la etiqueta simultáneamente con la de todas las líneas válidas. Si alguna coincide, acierto y se usa el desplazamiento. Si no, fallo: se trae el bloque a una línea libre o a la que indique la política de reemplazo, y se actualizan etiqueta y VV.

Ver ejemplo 2.18: la misma secuencia con caché totalmente asociativa y FIFO

n=6n = 6, d=3d = 3, e=3e = 3. Los bloques ocupan líneas libres en orden; con la caché llena, FIFO.

AccesoDir.Bloque jjEtiquetaResultadoLínea 0Línea 1
191001Falloj=1j = 1—
2253011Falloj=1j = 1j=3j = 3
3111001Aciertoj=1j = 1j=3j = 3
4182010Fallo; FIFO expulsa j=1j = 1j=2j = 2j=3j = 3
5202010Aciertoj=2j = 2j=3j = 3
6273011Aciertoj=2j = 2j=3j = 3

3 aciertos y 3 fallos. Ya no hay conflictos: los bloques 1 y 3 conviven. En el acceso 4, FIFO expulsa el bloque 1 aunque se acaba de usar, porque fue el primero en entrar. Los fallos que quedan se deben a la capacidad limitada.

VentajasInconvenientes
Máxima flexibilidad; evita los fallos por conflictoCircuitería compleja y cara: hay que comparar con todas las líneas a la vez; necesita política de reemplazo

Correspondencia asociativa por conjuntos

Es un híbrido. Las NLCN_{LC} líneas se dividen en QQ conjuntos de rr líneas:

Q=NLCrq=j mod Qq=0,…,Q−1Q = \frac{N_{LC}}{r} \qquad q = j \bmod Q \qquad q = 0, \ldots, Q - 1

rr es el grado de asociatividad; la caché se llama asociativa de rr vías. En cachés comerciales, QQ es potencia de 2.

MecanismoCómo actúa
Selección directa del conjuntoCada bloque tiene un conjunto fijo: q=j mod Qq = j \bmod Q
Totalmente asociativa dentro del conjuntoPuede ir a cualquiera de las rr líneas de ese conjunto

El campo Bloque jj se divide en Etiqueta y Conjunto qq:

text
DirMP  |  Etiqueta (e)  |  Conjunto q (c)  |  Desplazamiento (d)  |
        \______ Bloque j (f bits) _______/

c=log⁡2Qn=e+c+de=n−(c+d)c = \log_2 Q \qquad n = e + c + d \qquad e = n - (c + d)

Funcionamiento: el campo Conjunto elige el conjunto; se compara la etiqueta solo con sus rr líneas. Si alguna es válida y coincide, acierto. Si no, fallo: el bloque va a una línea libre de ese conjunto o, si están todas ocupadas, se aplica la política de reemplazo solo dentro del conjunto, aunque haya líneas libres en otros.

text
Caché de 4 líneas, r = 2 (2 vías) -> Q = 2 conjuntos
              +-----------+
Conjunto q=0  | Línea i=0 |  <- bloques pares   (j mod 2 = 0)
              | Línea i=1 |
              +-----------+
Conjunto q=1  | Línea i=2 |  <- bloques impares (j mod 2 = 1)
              | Línea i=3 |
              +-----------+

Ver ejemplo 2.21: caché de 32 B en conjuntos de 2 líneas, FIFO; lecturas 9, 25, 11, 41, 18, 20, 27

NLC=4N_{LC} = 4, r=2r = 2, Q=2Q = 2; n=6n = 6, d=3d = 3, c=1c = 1, e=2e = 2. Formato ee | c | ddd.

AccesoDir.jjqqLíneaEtiquetaResultadoL0L1L2L3
1911200Fallo——1—
22531301Fallo——13
31111200Acierto——13
44151210Fallo; FIFO expulsa 1——53
51820001Fallo2—53
62020001Acierto2—53
72731301Acierto2—53

3 aciertos y 4 fallos. En el acceso 4 el conjunto 1 está lleno y hay que reemplazar, aunque las líneas del conjunto 0 estén vacías: siguen existiendo fallos por conflicto, aunque menos que en la directa.

VentajasInconvenientes
Más flexible que la directa (menos conflictos); solo compara con rr líneas, no con todasMás compleja que la directa; necesita reemplazo dentro del conjunto; puede haber conflictos con líneas libres en otros conjuntos

El grado rr marca el compromiso entre sencillez y flexibilidad:

r=1⇒directar=NLC⇒totalmente asociativar = 1 \Rightarrow \text{directa} \qquad\qquad r = N_{LC} \Rightarrow \text{totalmente asociativa}

Comparación de los métodos

text
DirMP (n bits)            |          Bloque j (f)            | Despl. (d) |
F. C. directa             |  Etiqueta (e)  |  Línea i (b)    | Despl. (d) |
F. C. totalmente asoc.    |          Etiqueta (e = f)        | Despl. (d) |
F. C. por conjuntos       |  Etiqueta (e)  |  Conjunto q (c) | Despl. (d) |
DirectaTotalmente asociativaPor conjuntos (rr vías)
Dónde va el bloque jjLínea j mod NLCj \bmod N_{LC}Cualquier líneaCualquier línea del conjunto j mod Qj \bmod Q
CamposEtiqueta, línea, desplazamientoEtiqueta, desplazamientoEtiqueta, conjunto, desplazamiento
Comparaciones por acceso1NLCN_{LC}rr
ReemplazoNo hace falta elegirPolítica sobre todas las líneasPolítica dentro del conjunto
Fallos por conflictoMuchosNingunoMenos
Uso actualSistemas sencillos o empotradosEstructuras pequeñasL1, L2 y L3 de los procesadores de propósito general

El método de correspondencia se fija al diseñar el hardware: el usuario no puede cambiarlo.

Ver ejercicio 2.22: dirección 3A7C con direcciones de 16 bits, caché de 4 KiB y líneas de 64 B

NBP=216/64=1024N_{BP} = 2^{16}/64 = 1024; NLC=4096/64=64N_{LC} = 4096/64 = 64; n=16n = 16, f=10f = 10, d=6d = 6.

3A7C16=14 972=0011 1010 0111 110023A7C_{16} = 14\,972 = 0011\,1010\,0111\,1100_2; j=⌊14 972/64⌋=233j = \lfloor 14\,972/64 \rfloor = 233; p=60p = 60.

MétodoCampos (bits)DescomposiciónResultado
Directa4 / 6 / 60011 / 101001 / 111100Etiqueta 3, línea 41 (233 mod 64233 \bmod 64), p=60p = 60
Totalmente asociativa10 / 60011101001 / 111100Etiqueta 233, p=60p = 60
4 vías (Q=16Q = 16)6 / 4 / 6001110 / 1001 / 111100Etiqueta 14, conjunto 9 (233 mod 16233 \bmod 16), p=60p = 60

Directorio en directa con etiqueta y VV: 64⋅(4+1)=32064 \cdot (4 + 1) = 320 bits =40= 40 B; total 4096+40=41364096 + 40 = 4136 B.

2.7.4. Políticas de escritura

Al escribir puede haber copias del mismo bloque en varios niveles, así que hay que decidir dos cosas.

1) Cómo se actualiza la memoria principal cuando se modifica un dato que está en caché:

PolíticaFuncionamientoVentajaInconveniente
Escritura inmediata (write-through)Se escribe en la caché y en la memoria principalCopias siempre coherentes; al reemplazar no hay que escribir nadaCada escritura genera tráfico a memoria principal
Escritura diferida (write-back)Se escribe solo en la caché; la memoria se actualiza al reemplazar el bloqueVarias modificaciones de un bloque dan una sola transferenciaNecesita gestionar bloques modificados; reemplazar uno modificado es más lento

Para paliar el tráfico de la escritura inmediata se usan búferes de escritura (write buffers): guardan direcciones y datos pendientes de escribir en memoria, y el procesador sigue sin esperar.

En escritura diferida, cada línea tiene un bit de modificación (dirty bit) MM:

MomentoValor de MM
Al cargar el bloqueM=0M = 0
Al modificar algún dato del bloqueM=1M = 1
Al reemplazarSi M=0M = 0, se sustituye sin más. Si M=1M = 1, el bloque completo se escribe antes en memoria principal

2) Qué hacer si se escribe en un bloque que no está en la caché (fallo de escritura):

PolíticaFuncionamientoVentajaInconveniente
Con asignación (write-allocate)Se trae el bloque a la caché y se escribe en ella (si hace falta, se reemplaza otro; si es diferida y está modificado, se devuelve antes)Aprovecha la localidad temporalTrae bloques que quizá no se vuelvan a usar
Sin asignación (no-write-allocate)Se escribe directamente en memoria principal, sin traer el bloqueEvita tráfico y no ocupa líneas con bloques inútilesNo aprovecha la localidad de esas escrituras

Las dos decisiones son independientes (cuatro combinaciones), pero las más habituales son inmediata sin asignación y diferida con asignación.

mermaid
flowchart TD
    W["Escritura del procesador"] --> H{"¿Acierto?"}
    H -->|Sí| P1{"Política de<br/>actualización"}
    P1 -->|Inmediata| WT["Escribir en caché<br/>y en memoria principal"]
    P1 -->|Diferida| WB["Escribir solo en caché<br/>y poner M = 1"]
    H -->|No| P2{"Política de<br/>asignación"}
    P2 -->|Con asignación| WA["Traer el bloque a la caché<br/>y escribir en ella"]
    P2 -->|Sin asignación| NWA["Escribir directamente<br/>en memoria principal"]

Ver ejercicio 2.27: escrituras en 10, 20, 1C, 30 con caché totalmente asociativa de 2 líneas y FIFO

Bloques de 16 B: bloque = primer dígito hexadecimal; secuencia 1, 2, 1, 3.

Dir.BloqueA: inmediata sin asignaciónB: diferida con asignaciónCaché en B
101Fallo: 1 B a memoriaFallo: carga bloque 1[1 (M=1), —]
202Fallo: 1 B a memoriaFallo: carga bloque 2[1 (M=1), 2 (M=1)]
1C1Fallo: 1 B a memoriaAcierto[1 (M=1), 2 (M=1)]
303Fallo: 1 B a memoriaFallo: FIFO expulsa 1, sucio: devuelve 16 B[3 (M=1), 2 (M=1)]

En A la caché queda vacía (los fallos no cargan bloques) y hay 4 escrituras de 1 B. En B hay una sola devolución de 16 B; los bloques 2 y 3 siguen sucios. Las cargas de bloques son lecturas de memoria, no escrituras.

2.7.5. Jerarquía de memorias caché

NivelCapacidad orientativaTiempo de acceso orientativo
L132–64 KiB4–5 ciclos
L2256 KiB–3 MiB12–18 ciclos
L38–128 MiB30–90 ciclos

Los tiempos se dan en ciclos: el mismo número de ciclos son tiempos distintos en procesadores de distinta frecuencia. El de L1 corresponde a la caché de datos. La búsqueda va de L1 a L2, a L3 y a memoria principal; el bloque recuperado puede guardarse en uno o varios niveles.

En procesadores multinúcleo:

ConceptoSignificado
Caché privadaAsociada a un núcleo
Caché compartidaUsada por varios núcleos
Organización habitualL1 y L2 privadas por núcleo; L3 compartida
L1 divididaL1-I (instrucciones) y L1-D (datos) independientes
Caché unificadaGuarda instrucciones y datos (normalmente L2 y L3)
text
+--------------------------------- Procesador ----------------------------------+
| Núcleo 1         Núcleo 2         Núcleo 3         Núcleo 4                    |
| [L1-I][L1-D]     [L1-I][L1-D]     [L1-I][L1-D]     [L1-I][L1-D]                |
| [ Caché L2 ]     [ Caché L2 ]     [ Caché L2 ]     [ Caché L2 ]   (privadas)  |
| [                      Caché L3 compartida                       ]             |
| [                    Controlador de memoria                      ]             |
+-------------------------------------+-----------------------------------------+
                                      | bus de memoria
                              [ Memoria principal ]

Las cachés privadas plantean el problema de la coherencia de caché: si un núcleo modifica un dato, las copias de los demás quedan desactualizadas. Los mecanismos de coherencia controlan las modificaciones y, si hace falta, invalidan o actualizan las otras copias.

2.7.6. Rendimiento de la memoria caché

Con NTN_T accesos, NAN_A aciertos y NFN_F fallos (NT=NA+NFN_T = N_A + N_F):

h=NANTm=NFNTh+m=1h = \frac{N_A}{N_T} \qquad m = \frac{N_F}{N_T} \qquad h + m = 1

Una hh alta (por ejemplo, 0.95) es favorable, pero no garantiza por sí sola un buen rendimiento: también cuentan los tiempos y la penalización por fallo.

Tiempo medio de acceso (AMAT, tamt_{am}). Con tAt_A (tiempo con acierto) y tFt_F (tiempo con fallo), el tiempo total es TT=NAtA+NFtFT_T = N_A t_A + N_F t_F y, dividiendo entre NTN_T:

tam=TTNT=h tA+(1−h) tFt_{am} = \frac{T_T}{N_T} = h\,t_A + (1 - h)\,t_F

Todos los accesos empiezan consultando la caché, de tiempo tct_c. La penalización por fallo PFP_F es el tiempo adicional que añade un fallo:

tA=tctF=tc+PF⟹tam=tc+(1−h) PF=tc+m PFt_A = t_c \qquad t_F = t_c + P_F \qquad\Longrightarrow\qquad t_{am} = t_c + (1 - h)\,P_F = t_c + m\,P_F

Ver ejemplo 2.22: caché de 10 ns, memoria de 100 ns, h = 0.9, 20 ns para tratar el fallo

  • tA=10t_A = 10 ns; PF=20+100=120P_F = 20 + 100 = 120 ns; tF=10+120=130t_F = 10 + 120 = 130 ns.
  • tam=0.9⋅10+0.1⋅130=9+13=22t_{am} = 0.9 \cdot 10 + 0.1 \cdot 130 = 9 + 13 = 22 ns (o bien 10+0.1⋅120=2210 + 0.1 \cdot 120 = 22 ns).

Jerarquía de cachés. Con L1 y L2 consultadas sucesivamente, t1t_1 y t2t_2 sus tiempos y tMt_M el tiempo adicional de la memoria principal:

TasaRespecto a qué se calcula
m1m_1Todos los accesos
m2m_2Solo los accesos que llegan a L2 (los fallos de L1): es una tasa local
m1m2m_1 m_2Proporción de accesos iniciales que fallan en L1 y en L2 y llegan a memoria principal

PF1=t2+m2 tMtam=t1+m1 (t2+m2 tM)P_{F1} = t_2 + m_2\,t_M \qquad t_{am} = t_1 + m_1\,(t_2 + m_2\,t_M)

Interpretación: todos pagan t1t_1; una fracción m1m_1 paga además t2t_2; y de esos, una fracción m2m_2 paga además tMt_M.

Con tres niveles, el mismo razonamiento anidado:

tam=t1+m1(t2+m2 (t3+m3 tM))t_{am} = t_1 + m_1\big(t_2 + m_2\,(t_3 + m_3\,t_M)\big)

Es un modelo simplificado (consulta secuencial y tiempos acumulados); en procesadores reales puede ser más complejo.

Ver ejemplo 2.23: t1 = 2 ns (h1 = 0.95), t2 = 10 ns (h2 = 0.80 local), tM = 100 ns

  • m1=0.05m_1 = 0.05, m2=0.20m_2 = 0.20.
  • PF1=10+0.20⋅100=30P_{F1} = 10 + 0.20 \cdot 100 = 30 ns.
  • tam=2+0.05⋅30=3.5t_{am} = 2 + 0.05 \cdot 30 = 3.5 ns, muy cerca de t1t_1 porque el 95 % se resuelve en L1.

Ver ejercicio 2.30: 10 000 accesos, 9200 en L1, 600 en L2, 200 a memoria principal

TasaCálculoValor
h1h_1, m1m_19200/10 0009200/10\,0000.92 y 0.08
h2h_2, m2m_2 locales600/800600/800 y 200/800200/8000.75 y 0.25
Global de fallos200/10 000=m1m2200/10\,000 = m_1 m_20.02
Resuelto en cada nivel (sobre el total)L1 92 %, L2 6 %, MP 2 %

2.8. Memorias asociativas

2.8.1. Concepto y funcionamiento

Una memoria asociativa o memoria direccionable por contenido (CAM) busca la información por su contenido, no por una dirección. Compara un valor de búsqueda con todas las posiciones a la vez, gracias a circuitos de comparación incorporados en el hardware, sin recorrerlas una a una.

mermaid
flowchart LR
    A["1. Se introduce<br/>el valor de búsqueda"] --> B["2. Comparación<br/>simultánea con las<br/>posiciones habilitadas"]
    B --> C["3. Detección de<br/>coincidencias"]
    C --> D["4. Obtención del resultado<br/>(posiciones o información<br/>asociada)"]

Una búsqueda puede dar una, varias o ninguna coincidencia.

VentajaInconveniente
Búsquedas muy rápidas por la comparación simultáneaCircuitos de comparación adicionales: más complejidad, consumo y coste que una memoria convencional de la misma capacidad

2.8.2. Organización

Elementos funcionales:

ElementoFunción
Matriz de almacenamientoEntradas de un cierto número de bits
Entrada o registro de búsquedaProporciona el valor buscado a todos los comparadores
Circuitos de comparaciónComparan a la vez (suelen estar integrados en las celdas)
Señales de coincidenciaIndican qué entradas coinciden; pueden guardarse en un registro de marca
Tratamiento de coincidenciasDa el resultado: identificar, elegir una o acceder a información asociada
Codificador de prioridadSi hay varias coincidencias y se necesita una, admite varias entradas activas y da el código de la de mayor prioridad (a diferencia de un codificador convencional)

Organización clásica con registros auxiliares. Con una matriz de nn entradas de mm bits:

RegistroTamañoFunción
Argumento AAmm bitsValor que se busca
Máscara KKmm bitsBit a 1: esa columna se compara. Bit a 0: se ignora
Validez VVnn bitsBit a 1: la entrada tiene información válida. Bit a 0: no
Marca MMnn bitsResultado: 1 si la entrada es válida y coincide en las columnas seleccionadas
Salidamm bitsDatos de la entrada seleccionada tras la búsqueda
text
          Registro argumento (m)    Registro máscara (m)
                    |                      |
                    v                      v
        +---------------------------------------+   Validez   Marca
        |   Matriz de celdas de memoria         |   (n bits)  (n bits)
        |   asociativa: n entradas x m bits     |<--   V   -->  M
        +---------------------------------------+
                    |
                    v
          Registro de salida (m)

Formalmente, si WijW_{ij} es el bit jj de la entrada ii:

Mi=Vi⋅∏j(Kj‾+Aj⊕Wij‾)M_i = V_i \cdot \prod_{j}\left(\overline{K_j} + \overline{A_j \oplus W_{ij}}\right)

Cada factor vale 1 si la columna no se compara (Kj=0K_j = 0) o si el bit coincide (Aj=WijA_j = W_{ij}).

Ver ejemplo 2.24: argumento 10011010, máscara 10010101

EntradaVVContenidoBits comparados (columnas 0, 3, 5 y 7)Marca
01110111111xx1x1x10
11110110101xx1x0x01
21100100001xx1x0x01
3010100110(no válida)0
4011011000(no válida)0
  1. Las entradas con V=0V = 0 (3 y 4) quedan descartadas: marca 0.
  2. La máscara elimina las columnas con 0 (posiciones 2, 3, 5 y 7 contando desde la izquierda empezando en 1); el patrón buscado es 1xx1x0x0.
  3. Coinciden las entradas 1 y 2: M=01100M = 01100.

Ver ejercicio 2.32: marcar las entradas que contienen un número par

Un número es par si su bit menos significativo vale 0. Basta comparar esa columna: K=0001K = 0001 y un argumento con 0 al final, por ejemplo A=1000A = 1000. Las máscaras con más bits a 1 exigirían coincidir también en otras columnas y dejarían fuera números pares.

Otras operaciones:

OperaciónCómo se hace
LecturaSe pasa al registro de salida una entrada con marca 1; si hay varias, una tras otra
EscrituraSe busca una entrada con V=0V = 0 (examinando el registro de validez, sin búsqueda por contenido), se escribe y se pone V=1V = 1. Argumento y máscara no intervienen
InvalidaciónSe pone V=0V = 0; la entrada queda libre sin borrar físicamente su contenido

2.8.3. Aplicaciones

AplicaciónUso de la búsqueda asociativa
Búferes TLB (Translation Lookaside Buffer)Guardan traducciones recientes de direcciones virtuales a físicas y las encuentran por la dirección virtual (Tema 7)
Cachés totalmente asociativasComparar el identificador del bloque con todas las líneas
Equipos de comunicacionesTablas de encaminamiento y filtrado; incluso TCAM (ternarias), con un tercer estado "no interviene en la comparación"

Se usan cuando la rapidez de búsqueda justifica su coste, normalmente en estructuras pequeñas y de función específica.


2.9. Memorias secundarias

2.9.1. Características generales

La memoria principal tiene dos limitaciones: poca capacidad comparada con lo que se necesita y volatilidad (es DRAM). La memoria secundaria es el conjunto de dispositivos no volátiles que conservan programas y datos durante periodos prolongados.

No se accede a ella con instrucciones ordinarias de memoria: los datos se transfieren a la memoria principal mediante operaciones de E/S.

CaracterísticaSignificado
No volatilidadConserva SO, aplicaciones y archivos entre sesiones
Elevada capacidadHasta varios TB por dispositivo
Menor coste por bitGrandes capacidades a precio reducido
Menor velocidadTiempos de acceso mayores que la memoria principal
TecnologíaDispositivos
MagnéticaHDD, cintas
Estado sólidoSSD (flash)
ÓpticaCD, DVD, Blu-ray

(La introducción de la sección menciona también la organización RAID, que combina varias unidades para mejorar el rendimiento y, en algunas configuraciones, añadir redundancia; no se desarrolla en estos apuntes.)

2.9.2. Discos duros magnéticos (HDD)

Almacenan información magnetizando regiones de uno o varios discos giratorios. Gran capacidad y bajo coste por bit; acceso directo sin recorrer todo; pero, por las piezas mecánicas, tiempos mucho mayores que un SSD. El primero fue el IBM 350 (sistema IBM 305 RAMAC, 1956): 50 discos de unas 24 pulgadas y unos 5 millones de caracteres.

Estructura física:

ComponenteDescripción
PlatosDiscos rígidos con material magnético; dos caras cada uno
Eje y motorGiran los platos a velocidad constante (rpm; habituales 5400 y 7200)
Cabezales de lectura y escrituraUno por superficie; no tocan la superficie en funcionamiento normal
Brazos y mecanismo de posicionamientoMueven los cabezales radialmente; todos a la vez
Controlador electrónicoCoordina el disco y la comunicación con el computador
text
        Eje de giro
            |
   Cabezal  |     ====== Plato (superficie superior)
   -------->|     ====== (superficie inferior)
   Brazo    |
   -------->|     ====== Plato
            |     ======
   Los brazos se mueven juntos -> todos los cabezales a la misma distancia del eje

Organización de la información:

ConceptoDefinición
PistaCircunferencia concéntrica de una superficie
SectorDivisión de una pista; unidad física básica. 512 B tradicionalmente o 4096 B (4 KiB) en discos modernos
CilindroPistas a la misma distancia del eje en todas las superficies; se alcanzan sin mover los brazos

Técnicas de organización:

TécnicaEn qué consistePara qué
Grabación por zonas (ZBR, Zone Bit Recording)Las pistas se agrupan en zonas; las exteriores tienen más sectores por pistaAprovechar la superficie; las exteriores dan más velocidad de transferencia a igual rpm
Sesgo de cabeza (head skew)Desplazar angularmente los sectores de pistas del mismo cilindro en superficies distintasCompensar el tiempo de cambio de cabeza
Sesgo de cilindro (cylinder skew)Desplazar (más) los sectores de cilindros consecutivosCompensar el movimiento entre cilindros
text
Discos antiguos: mismo nº de sectores por pista     ZBR (zonas)
                                                     zona exterior   16 sectores/pista
                                                     zona intermedia 12 sectores/pista
                                                     zona interior    8 sectores/pista

El formateo de bajo nivel (físico) se hace en fábrica y crea la estructura de sectores. Cada sector físico contiene, de forma simplificada:

ParteFunción
Sincronización e identificaciónReconocer los límites del sector
Área de datos512 o 4096 B
ECC (Error Correcting Code)Detectar y corregir errores de lectura

Los sectores de reserva sustituyen a los defectuosos mediante la reasignación de sectores.

Direccionamiento:

SistemaFuncionamiento
CHS (Cylinder-Head-Sector)Tradicional: cilindro, cabeza y sector. Con el tiempo se usaron geometrías CHS lógicas que no coincidían con la real
LBA (Logical Block Addressing)Actual: el disco presenta bloques lógicos numerados desde 0 (LBA 0, LBA 1...), de 512 o 4096 B; el controlador decide dónde están físicamente

Bloque lógico y sector físico no son lo mismo. Normalmente coinciden en tamaño, pero con la emulación 512e el disco tiene sectores físicos de 4096 B y presenta bloques lógicos de 512 B: 8 bloques lógicos por sector físico. La correspondencia lógico-física no refleja necesariamente cilindros y pistas (por ejemplo, cambia al reasignar sectores).

El controlador funciona gracias al firmware: programas en memoria no volátil que controlan el funcionamiento interno del dispositivo (posicionamiento, errores, traducción de direcciones).

Tiempos de acceso. Para leer hay que mover el cabezal a la pista, esperar a que el sector pase bajo él y transferir:

mermaid
flowchart LR
    S["Petición"] --> B["Tiempo de búsqueda t_b<br/>mover cabezales a la pista"]
    B --> R["Latencia rotacional t_r<br/>esperar al sector"]
    R --> T["Tiempo de transferencia t_t<br/>leer o escribir los datos"]
TiempoDefiniciónExpresión
Búsqueda tbt_bLlevar los cabezales a la pista. No es constante ni proporcional a los cilindros recorridos (aceleran, frenan, se estabilizan); se usa el tiempo medio de búsquedaDato del fabricante
Latencia rotacional trt_rDesde que el cabezal está en la pista hasta que llega el sector; con posición aleatoria, de media media vueltaTrev=60n=1fT_{rev} = \dfrac{60}{n} = \dfrac{1}{f}, tr=Trev2=30n=12f\quad t_r = \dfrac{T_{rev}}{2} = \dfrac{30}{n} = \dfrac{1}{2f}
Transferencia ttt_tLeer o escribir los datostt=NvTt_t = \dfrac{N}{v_T}

Aquí nn son las rpm y f=n/60f = n/60 las revoluciones por segundo. La transferencia también se puede expresar con la geometría de la pista:

vT=P⋅ftt=NP f=NsS f=RfR=NP=NsSv_T = P \cdot f \qquad t_t = \frac{N}{P\,f} = \frac{N_s}{S\,f} = \frac{R}{f} \qquad R = \frac{N}{P} = \frac{N_s}{S}

donde PP son los bytes de datos por pista, SS los sectores por pista, NsN_s los sectores a transferir y RR las revoluciones (o fracción) que dura la transferencia. Es un modelo idealizado de transferencia continua dentro de una pista.

ta=tb+trtE/S=tb+tr+tt=ta+ttt_a = t_b + t_r \qquad\qquad t_{E/S} = t_b + t_r + t_t = t_a + t_t

rpmTrevT_{rev}trt_r medio
540011.11 ms5.56 ms
72008.33 ms4.17 ms

Ver ejemplo 2.25: 7200 rpm, t_b = 8 ms, 150 MB/s, bloque de 600 kB

  • f=120f = 120 rev/s; Trev=1/120≈8.33T_{rev} = 1/120 \approx 8.33 ms; tr≈4.17t_r \approx 4.17 ms.
  • ta=8+4.17=12.17t_a = 8 + 4.17 = 12.17 ms.
  • tt=600 000/(150⋅106)=4t_t = 600\,000/(150 \cdot 10^6) = 4 ms.
  • tE/S≈16.17t_{E/S} \approx 16.17 ms.

Valores actuales orientativos: 5400 o 7200 rpm, búsquedas de varios ms, transferencias sostenidas de hasta unos 300 MB/s en modelos profesionales. Se conectan por SATA (SATA III: 6 Gb/s, unos 600 MB/s de datos; la interfaz es mucho más rápida que el propio disco) o, en servidores, por SAS (Serial Attached SCSI).

Acceso secuencial frente a aleatorio en un HDD. Son patrones de uso, no el "método de acceso" de 2.3.3 (el HDD sigue siendo de acceso directo):

PatrónQué pasaRendimiento
SecuencialSectores consecutivos; búsqueda y latencia casi solo al principio; domina la transferenciaAlto: ideal para bloques grandes
AleatorioPosiciones dispersas; cada acceso repite búsqueda y latenciaBajo: los tiempos mecánicos dominan con bloques pequeños

Ver ejemplo 2.26: archivo de 4 MiB, 5400 rpm, t_b = 10 ms, sectores de 512 B, 2048 sectores por pista

  • Ns=4⋅220/512=8192N_s = 4 \cdot 2^{20}/512 = 8192 sectores; f=90f = 90 rev/s; Trev≈11.111T_{rev} \approx 11.111 ms; tr≈5.556t_r \approx 5.556 ms.

a) Secuencial (4 pistas; búsqueda solo al principio, latencia en cada pista; una pista por vuelta):

ttotal=tb+4tr+4Trev=10+4⋅5.556+4⋅11.111≈76.667 mst_{total} = t_b + 4t_r + 4T_{rev} = 10 + 4 \cdot 5.556 + 4 \cdot 11.111 \approx 76.667 \text{ ms}

b) Aleatorio (cada sector con búsqueda, latencia y transferencia de 1/(2048⋅90)1/(2048 \cdot 90) s ≈0.005425\approx 0.005425 ms):

ttotal=8192⋅(10+5.556+0.005425)≈127 477 ms≈127.5 st_{total} = 8192 \cdot (10 + 5.556 + 0.005425) \approx 127\,477 \text{ ms} \approx 127.5 \text{ s}

La diferencia (más de 1600 veces) viene de repetir búsqueda y latencia en cada sector.

2.9.3. Unidades de estado sólido (SSD)

Almacenamiento secundario no volátil sin piezas mecánicas, normalmente con flash NAND (presentada por Toshiba en 1987). Ventajas: tiempos de acceso menores (sobre todo en acceso aleatorio), sin ruido ni vibraciones y más resistencia a golpes.

Estructura física:

ComponenteFunción
Chips de flash NANDGuardan los datos; su número y capacidad fijan en parte la capacidad total
Controlador SSDAtiende peticiones, gestiona los chips y hace operaciones internas de mantenimiento
DRAM (opcional)Información temporal para la gestión; hay SSD sin ella
InterfazSATA (con protocolo AHCI) o PCIe (normalmente con protocolo NVMe, Non-Volatile Memory Express)

Formatos: 2.5 pulgadas (normalmente SATA) y M.2 (ranura en la placa). M.2 es un formato y un conector, no determina si la unidad es SATA o PCIe.

Organización de la información:

UnidadTamaño habitualPapel
Página4–16 KiBUnidad de lectura y programación
Bloque físico64–1024 páginasUnidad de borrado
Bloque lógico (LBA)512 o 4096 BLo que ve el computador

No confundir las páginas flash con las páginas de la memoria virtual (Tema 6), ni los bloques lógicos con los bloques físicos: una página de 8 KiB puede contener dos bloques lógicos de 4 KiB, y un bloque físico de 256 páginas de 8 KiB son 2 MiB.

La traducción de LBA a ubicación física (chip, bloque, página) la hace la FTL (Flash Translation Layer), en el firmware del controlador. LBA consecutivos no tienen por qué estar en posiciones físicas consecutivas, y la correspondencia cambia durante el funcionamiento.

text
Bloques lógicos          FTL                 Memoria flash NAND
  LBA 0  ---------->  traducción  ------>  Bloque físico B, página 2
  LBA 1  ---------->     de       ------>  Bloque físico A, página 0
  LBA 2  ---------->  direcciones ------>  Bloque físico B, página 0

Ver ejemplo 2.27: bloques lógicos de 4 KiB, páginas de 8 KiB, bloques físicos de 256 páginas

  • Bloque físico: 256⋅8=2048256 \cdot 8 = 2048 KiB =2= 2 MiB.
  • Bloques lógicos por página: 8/4=28/4 = 2.
  • Bloques lógicos equivalentes a un bloque físico: 2048/4=5122048/4 = 512.

Son equivalencias de capacidad, no una correspondencia fija.

Funcionamiento. Como se programa por páginas pero se borra por bloques, una página no se puede sobrescribir directamente:

MecanismoEn qué consiste
Escritura fuera de lugar (out-of-place writing)Los datos nuevos de un LBA se escriben en otra página libre; la FTL actualiza la correspondencia y la página vieja queda no válida hasta que se borre su bloque
Recolección de basura (garbage collection)Elige bloques con páginas no válidas, traslada los datos válidos a otro sitio y borra esos bloques. Genera operaciones extra que pueden afectar al rendimiento de escritura
Nivelación del desgaste (wear leveling)Reparte programaciones y borrados entre bloques para que ninguno se agote antes
Comando TRIMEl SO avisa de qué LBA ya no tienen datos útiles, lo que facilita la recolección de basura
text
Antes:   FTL: LBA 0 -> página 1         Después: FTL: LBA 0 -> página 3
Bloque A: [p0 otros][p1 LBA 0][p2 otros][p3 libre]
          [p0 otros][p1 NO VÁLIDA][p2 otros][p3 LBA 0 nuevo]
Tiempo de la flashOrden de magnitud relativo
LecturaEl menor
Programación (de una página)Mayor que la lectura
Borrado (de un bloque completo)El mayor

El tiempo de respuesta que ve el computador incluye además el procesamiento del controlador, la FTL, el mantenimiento interno y la interfaz: no tiene búsqueda ni latencia rotacional, pero no es nulo ni constante.

Rendimiento:

ParámetroDefinición
Tiempo de respuestaDesde que llega la petición hasta que se completa; las lecturas suelen ser más rápidas
Velocidad de transferenciavT=N/Tv_T = N/T; se dan por separado lectura y escritura secuenciales
IOPSOperaciones de E/S por segundo; útil con muchas operaciones pequeñas

N=No⋅SoIOPS=NoTvT=IOPS⋅SoN = N_o \cdot S_o \qquad IOPS = \frac{N_o}{T} \qquad v_T = IOPS \cdot S_o

donde NoN_o es el número de operaciones y SoS_o el tamaño de cada una. Las IOPS dependen del tamaño de operación, de la mezcla lectura/escritura y de cuántas peticiones puede haber pendientes a la vez. En acceso secuencial se mide la velocidad máxima; en aleatorio, el tiempo de respuesta y las IOPS. Estos parámetros valen también para HDD.

Ver ejemplo 2.28: 50 000 IOPS con lecturas de 4 KiB

  • En 1 s: N=50 000⋅4=200 000N = 50\,000 \cdot 4 = 200\,000 KiB.
  • vT=200 000v_T = 200\,000 KiB/s =195.31= 195.31 MiB/s.
  • Sin solapamiento: tm=1/IOPS=20t_m = 1/IOPS = 20 µs por operación. Si el SSD atiende varias peticiones a la vez, 1/IOPS1/IOPS ya no es el tiempo de respuesta de cada una.

El rendimiento real también depende de la interfaz (SATA limitada; PCIe NVMe mucho más rápida según versión y líneas), del controlador, del paralelismo entre chips y de efectos como la recolección de basura o la caché de escritura (parte de la flash trabajando en un modo más rápido; al llenarse, la escritura baja).

Comparación HDD frente a SSD:

CaracterísticaHDDSSD
TecnologíaGrabación magnética en discos giratoriosFlash NAND
Piezas mecánicasDiscos y cabezales móvilesNinguna para acceder a los datos
Tiempo de accesoMayor (búsqueda y latencia)Menor
Acceso secuencialBuen rendimientoGeneralmente mayor
Acceso aleatorioLimitado por la mecánicaMuy superior
RuidoSíSilencioso
ConsumoGeneralmente mayorGeneralmente menor (según modelo)
Resistencia a golpesSensible, sobre todo en marchaMayor
Coste por capacidadMenorMayor
Uso habitualAlmacenamiento masivo y copias de seguridadSO, aplicaciones y datos de acceso frecuente

Se pueden combinar en un mismo sistema.

Ver ejemplos 2.29 y 2.30: HDD frente a SSD

2.29: HDD a 5400 rpm con tb=10t_b = 10 ms frente a SSD de 0.1 ms de respuesta. tr=5.5556t_r = 5.5556 ms; ta=15.5556t_a = 15.5556 ms; el HDD tarda unas 155.6 veces más.

2.30: 12 GB a 200 MB/s (HDD) tardan 60 s; a 3000 MB/s (SSD), 4 s: el SSD es 15 veces más rápido.

2.9.4. Discos ópticos

Almacenan y recuperan información con un láser, usando propiedades de reflexión de la luz. Los datos van en una pista en espiral que se lee detectando variaciones de la luz reflejada. Tipos: CD, DVD y BD (Blu-ray).

Características físicas. Soporte de plástico transparente (policarbonato) con capas reflectantes (aluminio), capas grabables y capas protectoras. Hay que distinguir:

ConceptoSignificado
CaraCada lado físico del disco (CD y BD usan una; el DVD, una o dos)
CapaRegión a distinta profundidad donde se registran datos; más capas, más capacidad sin cambiar el tamaño

Un motor gira el disco y un sistema óptico (láser, lentes y sensores) se mueve radialmente; el sensor recoge la luz reflejada y la convierte en señal eléctrica.

TipoCómo se grabaEjemplos
Solo lecturaPrensado en fábrica: hendiduras (pits) y llanos (lands); las transiciones entre ellos producen variaciones en la señalCD-ROM, DVD-ROM, BD-ROM
GrabablesEl láser cambia de forma permanente las propiedades ópticas de una capa de grabación; no se borra (a veces se añaden sesiones)CD-R, DVD-R, DVD+R, BD-R
RegrabablesMateriales de cambio de fase (cristalino y amorfo), cambiados de forma reversible con pulsos láser de distinta potenciaCD-RW, DVD-RW, DVD+RW, BD-RE

La escritura usa un láser de más potencia que la lectura. El acceso requiere mover el sistema óptico y esperar al giro, así que es más lento que en HDD y SSD.

Organización. Una sola pista en espiral del centro al borde (frente a las pistas concéntricas del HDD), dividida en sectores con datos más información de sincronización y corrección de errores. Sectores lógicos de 2048 B útiles en CD-ROM de datos, DVD y Blu-ray.

Modo de giroFuncionamiento
CLV (Constant Linear Velocity)Velocidad lineal constante: gira más rápido cerca del centro y más lento en el borde
CAV (Constant Angular Velocity)Velocidad de giro constante: la velocidad lineal y la de transferencia aumentan hacia el borde

La capacidad depende de la separación entre vueltas de la espiral, del tamaño mínimo de las marcas y del número de capas. Un láser de menor longitud de onda permite marcas más pequeñas y más densidad.

CaracterísticaCDDVDBlu-ray
Introducción1982 (Philips y Sony; CD-ROM a mediados de los 80)19962006
LáserInfrarrojo, 780 nmRojo, 650 nmAzul-violeta, 405 nm
Una cara, una capa650–700 MB4.7 GB25 GB
Una cara, dos capasNo habitual8.5 GB50 GB
Velocidad de referencia 1x150 kB/s1.385 MB/s4.5 MB/s
UsoAudio y datosVídeo y datosVídeo de alta definición y datos

El factor de velocidad (1x, 4x, 16x...) multiplica la referencia de cada formato: dos unidades 8x de formatos distintos no van igual de rápido.

vT=k⋅v1×v_T = k \cdot v_{1\times}

Ver ejemplo 2.31: lector de DVD 8x

  • vT=8⋅1.385=11.08v_T = 8 \cdot 1.385 = 11.08 MB/s.
  • En 20 s: 11.08⋅20=221.611.08 \cdot 20 = 221.6 MB.
  • 2 GB =2000= 2000 MB tardan 2000/11.08≈180.512000/11.08 \approx 180.51 s, unos 3 minutos.

Frente a HDD y SSD son más lentos, pero los soportes son extraíbles: útiles para distribución, almacenamiento fuera de línea y conservación.

2.9.5. Cintas magnéticas

Banda flexible con material magnético; se graba magnetizando regiones y se lee con cabezales. Desde los años 50 (IBM 726, 1952, con el IBM 701). Hoy, sobre todo copias de seguridad y archivo a largo plazo.

Funcionamiento. La cinta va en un cartucho; al meterlo en la unidad, un mecanismo de arrastre la lleva desde la bobina del cartucho hasta una bobina de recogida, pasando por rodillos de guiado y por el cabezal. El sentido puede invertirse para ir a otras posiciones.

CaracterísticaDetalle de los apuntes
Elevada capacidadLTO-10: 30 o 40 TB sin comprimir por cartucho
Bajo coste por capacidadSobre todo para grandes volúmenes a largo plazo
Acceso secuencialHay que desplazar la cinta; localizar datos en LTO-9 puede llevar 40–60 s (sin contar la transferencia)
Alta transferencia secuencialLTO-10: hasta 400 MB/s nativos una vez localizado el dato
No volátilSí
Larga duración20–30 años en buenas condiciones (orientativo: HDD sin uso 2–5 años, algunos SSD sin alimentación alrededor de un año, ópticos de años a décadas)
Bajo consumo almacenadaLos cartuchos se guardan fuera de la unidad sin alimentación

Organización y acceso. Datos en pistas longitudinales, organizados en bloques con mecanismos de identificación. El acceso es secuencial, pero eso no obliga a leer los bloques anteriores: las unidades modernas localizan una posición y se desplazan hasta ella. Mal para muchos accesos aleatorios; excelente para transferir grandes volúmenes una vez localizados.

ttotal=tloc+NvTt_{total} = t_{loc} + \frac{N}{v_T}

Ver ejemplo 2.32: archivo de 120 GB a 400 MB/s con 50 s de localización

  • tt=120 000/400=300t_t = 120\,000/400 = 300 s (5 min).
  • ttotal=50+300=350t_{total} = 50 + 300 = 350 s (5 min 50 s).

Aplicaciones: copias de seguridad, almacenamiento a largo plazo y archivo de grandes volúmenes en centros de datos e instituciones. En entornos profesionales se usan bibliotecas automatizadas de cintas LTO, con robots que cargan el cartucho necesario.


Errores comunes de examen

ErrorCorrección
Calcular fmax⁡f_{\max} o vT,max⁡v_{T,\max} con tat_aSe usa tct_c: fmax⁡=1/tcf_{\max} = 1/t_c, vT,max⁡=LT/tcv_{T,\max} = L_T/t_c
Suponer que LL, LpL_p, LTL_T y el ancho del bus coincidenSon magnitudes independientes
Confundir kB con KiB, o Mib con MiBRevisar si el prefijo es decimal o binario y si es bit o byte
Decir que "acceso aleatorio" significa al azar, o que solo la RAM lo tieneEs llegar a cualquier unidad sin recorrer las anteriores; los SSD también lo tienen
Confundir método de acceso con patrón de usoUn HDD es de acceso directo; "secuencial" y "aleatorio" en HDD y SSD son patrones de acceso
Decir que un SSD es memoria principal porque es de semiconductoresEs secundaria por su función
Decir que la lectura SRAM es destructiva o que la SRAM necesita refrescoEso es la DRAM
Confundir EPROM y EEPROMEPROM: ultravioleta, borra todo, sacando el chip. EEPROM: eléctrico, selectivo por bytes
Decir que la flash borra por páginasPrograma por páginas y borra por bloques
Pensar que más bits por celda es mejor en todoQLC da más capacidad y menos coste, pero menos ciclos y programación más lenta
Pensar que el multiplexado reduce la capacidadReduce terminales, no direcciones
Usar los bits altos para la dirección interna en el caso 2Los n0n_0 bits bajos van a todos los chips; los altos, al decodificador
Creer que un segundo rango o más módulos en un canal duplican el ancho de bandaLos rangos dan capacidad; el ancho de banda lo multiplican los canales
Confundir MHz con MT/sEn DDR, Rt=2fckR_t = 2 f_{ck}
Olvidar el límite del bus en módulos independientesNop=min⁡(Nmod,tc/tbus)N_{op} = \min(N_{mod}, t_c/t_{bus})
Usar la notación equivocada en conjuntosEn los apuntes: QQ conjuntos, rr líneas por conjunto, q=j mod Qq = j \bmod Q, c=log⁡2Qc = \log_2 Q
Contar la capacidad de la caché con el directorioSolo cuenta la zona de datos
Medir el desplazamiento en bytes cuando la unidad es de 16 bitsd=log⁡2SBd = \log_2 S_B con SBS_B en unidades direccionables
Actualizar el orden FIFO tras un aciertoSolo LRU se actualiza con aciertos
En conjuntos, usar una línea libre de otro conjuntoEl reemplazo se hace solo dentro del conjunto asignado
Contar las cargas de bloques como escriturasSon lecturas de memoria principal
Sumar dos veces tct_ctF=tc+PFt_F = t_c + P_F y tam=tc+mPFt_{am} = t_c + m P_F
Usar m2m_2 como tasa globalm2m_2 es local; la global es m1m2m_1 m_2
Tomar la vuelta completa como latencia mediatr=Trev/2t_r = T_{rev}/2
Confundir bloque lógico, sector físico y bloque físico flashSon unidades distintas; la FTL o el controlador las relacionan
Comparar unidades ópticas solo por el factor (8x, 4x)Cada formato tiene su propia referencia 1x
Pensar que en una cinta hay que leer todo lo anteriorHay que desplazar la cinta, pero no leer los bloques anteriores

Test de autoevaluación

1. Una memoria tiene organización 220×162^{20} \times 16 bits. ¿Capacidad en MiB y bits de dirección?

Ver solución

C=220⋅2C = 2^{20} \cdot 2 B =2= 2 MiB; n=20n = 20 bits.

2. Una memoria tiene ta=50t_a = 50 ns, tc=80t_c = 80 ns y LT=32L_T = 32 bits. ¿Frecuencia máxima de acceso y velocidad máxima teórica?

Ver solución

fmax⁡=1/80 ns=1.25⋅107f_{\max} = 1/80\text{ ns} = 1.25 \cdot 10^7 accesos/s; vT,max⁡=4⋅1.25⋅107=50v_{T,\max} = 4 \cdot 1.25 \cdot 10^7 = 50 MB/s. El dato tat_a no interviene.

3. ¿Por qué las DRAM necesitan refresco y además restaurar tras cada lectura?

Ver solución

El bit es la carga de un condensador. Las corrientes de fuga la descargan poco a poco (de ahí el refresco periódico), y la lectura altera la carga, así que es destructiva y hay que restaurarla.

4. Ordena ROM de máscara, PROM, EPROM y EEPROM según su flexibilidad y di cómo se borra cada una.

Ver solución

ROM de máscara (fijada en fábrica, no se borra) < PROM (programable una vez, no se borra) < EPROM (borrado con ultravioleta, todo el contenido, sacando el chip) < EEPROM (borrado eléctrico y selectivo por bytes).

5. Una celda flash QLC, ¿cuántos estados de carga distingue y qué inconvenientes tiene frente a SLC?

Ver solución

24=162^4 = 16 estados. Programación más lenta y menos ciclos de programación y borrado, a cambio de más densidad y menor coste por bit.

6. Se quiere una memoria de 216×162^{16} \times 16 bits con chips de 214×82^{14} \times 8. ¿Cuántos chips y qué decodificador?

Ver solución

r=16/8=2r = 16/8 = 2; q=216/214=4q = 2^{16}/2^{14} = 4; NCI=8N_{CI} = 8. Decodificador 2 a 4 con A15A14A_{15}A_{14}; A13..A0A_{13}..A_0 a todos los chips.

7. Una DRAM de 224×82^{24} \times 8 usa direccionamiento multiplexado en dos mitades. ¿Cuántos terminales de dirección tiene y para qué sirven RAS y CAS?

Ver solución

12 terminales (frente a 24). RAS captura la dirección de fila y CAS, después, la de columna, por los mismos terminales.

8. Una interfaz DDR funciona a 1600 MHz con 64 bits de datos. ¿Tasa nominal y ancho de banda teórico?

Ver solución

Rt=2⋅1600=3200R_t = 2 \cdot 1600 = 3200 MT/s; BW=3200⋅106⋅8BW = 3200 \cdot 10^6 \cdot 8 B =25.6= 25.6 GB/s.

9. Módulos independientes con tbus=20t_{bus} = 20 ns, tint=60t_{int} = 60 ns y LT=8L_T = 8 B. ¿Cuántos saturan el bus y qué velocidad dan 2 y 6 módulos?

Ver solución

tc=80t_c = 80 ns; tc/tbus=4t_c/t_{bus} = 4 módulos. Con 2: 2⋅8/80 ns=2002 \cdot 8/80\text{ ns} = 200 MB/s. Con 6: min⁡(6,4)=4\min(6,4) = 4, 4⋅8/80=4004 \cdot 8/80 = 400 MB/s.

10. Memoria direccionable por bytes con direcciones de 16 bits; caché directa de 2 KiB con líneas de 32 B. Formato de dirección y descomposición de 1234161234_{16}.

Ver solución

NLC=64N_{LC} = 64; d=5d = 5, b=6b = 6, e=5e = 5. 123416=00010 010001 1010021234_{16} = 00010\ 010001\ 10100_2: etiqueta 2, línea 17, desplazamiento 20. Comprobación: j=⌊4660/32⌋=145j = \lfloor 4660/32 \rfloor = 145, 145 mod 64=17145 \bmod 64 = 17.

11. La misma caché, ahora asociativa de 4 vías. ¿QQ, campos y conjunto de 1234161234_{16}?

Ver solución

Q=64/4=16Q = 64/4 = 16; c=4c = 4, e=16−4−5=7e = 16 - 4 - 5 = 7. 0001001 | 0001 | 10100: etiqueta 9, conjunto 1 (145 mod 16=1145 \bmod 16 = 1), desplazamiento 20.

12. Caché totalmente asociativa de 3 líneas, inicialmente vacía. Secuencia de bloques 1, 2, 3, 1, 4. ¿Qué bloque expulsan FIFO y LRU en el último acceso?

Ver solución

FIFO expulsa el 1 (el primero en entrar, aunque se acaba de usar). LRU expulsa el 2 (el que lleva más tiempo sin usarse, porque el 1 se acaba de usar).

13. Caché con tc=5t_c = 5 ns, PF=60P_F = 60 ns y h=0.9h = 0.9. ¿tamt_{am}?

Ver solución

tam=5+0.1⋅60=11t_{am} = 5 + 0.1 \cdot 60 = 11 ns.

14. L1 de 1 ns con m1=0.1m_1 = 0.1, L2 de 8 ns con m2=0.3m_2 = 0.3 (local) y memoria principal de 80 ns adicionales. ¿tamt_{am} y tasa global?

Ver solución

PF1=8+0.3⋅80=32P_{F1} = 8 + 0.3 \cdot 80 = 32 ns; tam=1+0.1⋅32=4.2t_{am} = 1 + 0.1 \cdot 32 = 4.2 ns. Tasa global =0.1⋅0.3=0.03= 0.1 \cdot 0.3 = 0.03.

15. Memoria asociativa de entradas de 4 bits. ¿Qué argumento y máscara marcan las entradas válidas que terminan en 11?

Ver solución

K=0011K = 0011 y un argumento con 11 al final, por ejemplo A=0011A = 0011. Las entradas con V=0V = 0 nunca se marcan.

16. HDD de 10 000 rpm con tb=4t_b = 4 ms. ¿TrevT_{rev}, trt_r y tat_a?

Ver solución

Trev=60/10 000=6T_{rev} = 60/10\,000 = 6 ms; tr=3t_r = 3 ms; ta=4+3=7t_a = 4 + 3 = 7 ms.

17. Una pista tiene 1000 sectores de 512 B y el disco gira a 6000 rpm. ¿Velocidad de transferencia ideal y tiempo para leer 250 sectores consecutivos?

Ver solución

f=100f = 100 rev/s; P=512 000P = 512\,000 B; vT=Pf=51.2v_T = P f = 51.2 MB/s. tt=Ns/(Sf)=250/(1000⋅100)=2.5t_t = N_s/(S f) = 250/(1000 \cdot 100) = 2.5 ms (un cuarto de vuelta).

18. Un SSD alcanza 20 000 IOPS con operaciones de 4 KiB. ¿Velocidad en MiB/s y tiempo medio por operación sin solapamiento?

Ver solución

vT=20 000⋅4=80 000v_T = 20\,000 \cdot 4 = 80\,000 KiB/s =78.125= 78.125 MiB/s; tm=1/20 000=50t_m = 1/20\,000 = 50 µs.

19. ¿Por qué un SSD no sobrescribe una página directamente y qué hace en su lugar?

Ver solución

Porque programa por páginas pero solo puede borrar bloques completos. Hace una escritura fuera de lugar: escribe en otra página libre, la FTL actualiza la correspondencia y la página antigua queda no válida hasta que la recolección de basura borre su bloque.

20. Un lector Blu-ray 2x y un lector DVD 8x leen 4.5 GB. ¿Cuál es más rápido?

Ver solución

Blu-ray 2x: 2⋅4.5=92 \cdot 4.5 = 9 MB/s, 4500/9=5004500/9 = 500 s. DVD 8x: 11.0811.08 MB/s, 4500/11.08≈4064500/11.08 \approx 406 s. El DVD 8x es más rápido aquí, pese a que Blu-ray tiene una referencia 1x mayor.

David González Lombraña

Apuntes, laboratorio y proyectos de IA, Linux y redes.