Está en la página 1de 11

Tema 1: Jerarquía de memoria

1. Introducción

*CPU: Es una maquina secuencial síncrona que solo sabe ejecutar instrucciones.

*Memoria: Elemento donde se almacenan la información (instrucciones y datos).

*Buses: Se encargan de intercambiar información digital entre los diferentes componentes del
computador.
-Bus de direcciones (A): Transmite la dirección de memoria a la que hay que acceder.
-Bus de datos (IO): Transmite la información desde/hacia la dirección requerida.
-Bus de control: Indica en qué dirección se transmite la información.

2. Memoria principal
Es el elemento del ordenador en el que se alojan los datos y programas en el momento de su
ejecución. Sus características fundamentales son:

*Capacidad: Cantidad de información que puede almacenar la memoria. Esta limitada por el
número de líneas de dirección que tiene el microprocesador. Este rango se llama espacio de
direccionamiento del procesador (cantidad de posiciones distintas).

*Ancho de palabra: Normalmente suelen coincidir.


-Ancho de palabra del microprocesador: Tamaño máximo con el que puede trabajar en
paralelo un microprocesador. Los registros internos de la CPU serán de este tamaño.
-Ancho de palabra del bus de datos: Número de líneas en paralelo que tiene el bus de
datos.
-Ancho de palabra de la memoria principal: Tamaño máximo de los datos que se
pueden leer o escribir en paralelo en la memoria.

*Latencia: Tiempo que pasa desde que se pide una operación sobre la memoria hasta que se
termina (depende de la tecnología).

*Ancho de banda: Cantidad de bytes transferidos por unidad de tiempo.


2.1. Los circuitos integrados que forman la memoria principal

Internamente cada memoria está dividida en una serie de celdas, cada una de ellas contiene
un dato binario. Podemos clasificar los circuitos de memoria por las siguientes características:

*Método de acceso: La forma en que se accede a la información.


-Aleatorio: La latencia es la misma para todas las posiciones.
-Secuencial: La latencia es distinta dependiendo de a qué posición estés accediendo
respecto a la anterior a la que habías accedido.

*Prestaciones: Velocidad de acceso a memoria, se utilizan dos parámetros:


-Tiempo de acceso: Tiempo para completar una orden de lectura o escritura.
-Tiempo de ciclo: Tiempo entre dos accesos consecutivos.

*Tamaño: Nº de posiciones X Ancho de palabra

*Permanencia de los datos: Indica en qué condiciones los datos permanecen sin desaparecer.
-Volátiles: La información se pierde cuando se elimina la alimentación.
-No volátiles: La información una vez almacenada permanece sin deteriorarse.
*Borrables (programables): Puede reescribirse.
*No borrables (no programables): No pueden reescribirse.

*Coste: Dependiendo de la tecnología su coste (€)/bit es diferente.


2.2. Memoria RAM (Random Access Memory)
Es una memoria de acceso aleatorio volátil, se dividen en dos variantes:

*SRAM (Static Randmo Access Memory): Es la tecnología de circuitos más rápida pero no se
pueden integrar muchos bits, esto es debido a que cada bit se almacena en un biestable lo que
hace que el coste sea alto. El tiempo de acceso es igual al tiempo de ciclo.

*DRAM (Dinamic Random Access Memory): La información se almacena en la carga de un


condensador, con el tiempo la carga del condensador se pierde, por eso cada cierto tiempo se
hace un refresco cada X ms. El tiempo de acceso es diferente al tiempo de ciclo, pues al acceder
a los condensadores estos pierden su carga y hay que refrescarlo. Es una tecnología más lenta
que las SRAM.

2.3. Memoria ROM (Read Only Memory)


*ROM: Estas fueron las primeras y venían con la información ya de fábrica.

*PROM: Eran programables, pero solo una vez.

*EPROM: Permite borrar el contenido para volver a programarlo exponiendo el chip a radiación
ultravioleta.

*EEPROM: El borrado se hacía de forma eléctrica, por lo que no había que quitar el chip. Permite
la reprogramación posición a posición. Coste alto.

*Flash: Es como la EEPROM, pero se borra por bloques. El borrado va degradando el circuito.
Las escrituras son lentas.

2.4. Organización de la memoria principal


Normalmente el direccionamiento de la memoria se realiza de forma que una posición de
memoria corresponde con un byte. La conexión entre microprocesador y memoria se realiza a
través de los buses.

Arquitectura Von Neumann


Arquitectura Harvard

El tamaño de palabra es igual a una potencia de 2, esto es, 1 byte, 2 bytes, 4 bytes…
Tanto en los sistemas con 16 como con 32 bits está el problema de que no siempre el
microprocesador tendrá que acceder a datos con un tamaño de palabra igual. Es por eso que las
señales de control deben indicar la dirección y el tamaño del dato.

Los micros 8086 de 16 bits

BHE A0 Acceso
0 0 16 bits (S0 Y S1)
0 1 8 bits (S0)
1 0 8 bits (S1)

Los micros 386/486

Habrá 4 señales de habilitación, BE0, BE1, BE2 y BE3. Si una señal está a 0, significa que esa
sección es válida. Al ser todas las direcciones múltiples de cuatro los dos últimos bits, A1A0,
serian 0.

Ordenación de los datos

*Litte-endian: Sitúa el byte menos significativo en la posición más baja (B0, B1, B2, B3)

*Big-endian: Sitúa el byte más significativo en la posición mas alta (B3, B2, B1, B0)

*Alineación: Se dice que un dato o instrucción están alineados cuando comienzan en una
posición múltiplo de su tamaño. La alineación es importante porque si un dato no está alineado,
serán necesarios más de un acceso a memoria para acceder.

3. Jerarquía de memoria
Los tres requisitos que se imponen a la hora de implementar el sistema de memoria son: Tiempo
de acceso pequeño, tamaño grande y coste reducido.

Tecnología Tiempo de acceso Coste por Gbyte


SRAM 0,5 – 2,5 ns 1.500 €
DRAM 50 – 70 ns 15 €
Disco magnético 5 – 20 ms 0,15 €

Principio de localidad

Este principio existe porque los programas están formados por estructuras tipo bucle y
secuencial. Hay dos tipos de localidad:

*Temporal: Si se accede a una determinada posición de memoria, es muy posible que se vuelva
a acceder a esta.

*Espacial: Si se accede a una posición de memoria, es muy posible que se acceda después a
posiciones próximas a esta.
Diseño jerárquico

La solución para crear un sistema de memoria es no contar con un solo componente sino
emplear una jerarquía de memoria.

Cuando se realiza un acceso al procesador primero buscara en el nivel superior y si no está ira a
los inferiores. La copia de datos e instrucciones solo puede hacerse entre niveles consecutivos.
Cuando se copia un dato a los niveles superiores también se copian los adyacentes, de esta
forma, usando el principio de localidad sabemos que cuando el procesador necesite un dato,
muy probablemente lo encontrara en la parte superior.

4. Memoria cache
La memoria cache es el nivel superior del sistema de memoria jerárquico. Cuando la CPU intente
leer una palabra de memoria comprueba si el dato está en cache, si esta lo agrega a la CPU, si
no, se copia la porción de la memoria principal que contiene la palabra buscada en la memoria
cache.

*Bloque: Unidad mínima de información que se intercambian entre memoria principal y cache.

*Controlador: Es quien determina si la dirección de memoria está en la cache o no.

Estructura de la cache

Los datos de la cache se agrupan en líneas de cache. En cada una d estas líneas se puede
almacenar un bloque. El número total de líneas de cache es M. El número total de bloques en la
memoria principal se denomina N. El número de bytes contenidos en un bloque se denomina L.

En cache para identificar los bloques se almacena un identificador (etiqueta) además de un bit
de valido.
Terminología

*Acierto: Es cuando la CPU encuentra la información en cache.

*Fallo: Es cuando la CPU no encuentra la información en cache.


-Forzoso: Se produce en el primer acceso ya que el bloque no puede estar en cache.
-Capacidad: Es cuando los bloques que se descartan luego se recuperan.

Parámetros

*Tamaño de la cache

*Tamaño del bloque (L)

*Política de escrituras: Cuando el procesador escribe un valor en cache existe una inconsistencia
entre el valor en cache y en memoria principal.
-Escritura directa: Se escribe tanto en la cache como en la Memoria Principal, para
mantener la ventaja de tener la memoria cache en las escrituras se utiliza un buffer de
escrituras.
-Escritura diferida: Solo se actualiza el dato en cache y cada línea cache además del bit
de valido incluye un bit de modificado, que indica si el bloque ha sido actualizado. Los
datos se cambiaran en memoria principal al sustituir.

4.1. Algoritmos de mapeado


Mapeado directo

Cada bloque de Memoria Principal tiene asignada una línea de cache. Es sencillo y rápido porque
solo debe hacer una comparación para saber si hay fallo, pero hay muchos fallos por conflicto.
Es por eso que en la práctica no se utiliza.

Cálculos
𝐷𝑖𝑟𝑒𝑐𝑐𝑖𝑜𝑛 𝑑𝑒 𝑀𝑒𝑚𝑜𝑟𝑖𝑎 (𝐷𝑀 )
Bloque (B) = 𝑇𝑎𝑚𝑎ñ𝑜 𝑏𝑙𝑜𝑞𝑢𝑒 (𝐿)

𝐵𝑙𝑜𝑞𝑢𝑒(𝐵)
Índice = resto (𝐿𝑖𝑛𝑒𝑎𝑠 𝑑𝑒 𝑐𝑎𝑐ℎ𝑒(𝑀))

𝐵𝑙𝑜𝑞𝑢𝑒(𝐵)
Etiqueta = 𝐿𝑖𝑛𝑒𝑎𝑠 𝑑𝑒 𝑐𝑎𝑐ℎ𝑒(𝑀)
Mapeado totalmente asociativo

Cada bloque puede copiarse en cualquier línea. Las ventajas y desventajas son las contrarias al
directo.
𝐷𝑖𝑟𝑒𝑐𝑐𝑖𝑜𝑛 𝑑𝑒 𝑚𝑒𝑚𝑜𝑟𝑖𝑎(𝐷𝑀 )
𝐸𝑡𝑖𝑞𝑢𝑒𝑡𝑎 = 𝐵𝑙𝑜𝑞𝑢𝑒 =
𝑇𝑎𝑚𝑎ñ𝑜 𝑑𝑒𝑙 𝑏𝑙𝑜𝑞𝑢𝑒(𝐿)

Mapeado asociativo por conjuntos

Los bloques se agrupan en varios conjuntos. La ventaja es que no será necesario verificar todo
el directorio de la cache.

Cálculos

Líneas de cache (M) = Conjuntos (J) * Número de líneas por conjunto (K)
𝐷𝑖𝑟𝑒𝑐𝑐𝑖𝑜𝑛 𝑑𝑒 𝑀𝑒𝑚𝑜𝑟𝑖𝑎 (𝐷𝑀 )
Bloque (B) = 𝑇𝑎𝑚𝑎ñ𝑜 𝑏𝑙𝑜𝑞𝑢𝑒 (𝐿)

𝐵𝑙𝑜𝑞𝑢𝑒(𝐵)
Conjunto (C) = resto ( )
𝑁𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠(𝐽)

𝐵𝑙𝑜𝑞𝑢𝑒(𝐵)
Etiqueta = 𝑁𝑢𝑚𝑒𝑟𝑜 𝑑𝑒 𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠(𝐽)

Algoritmos de remplazo

Serán necesarios tanto en el mapeado asociativo por conjuntos como en el totalmente


asociativo.

*FIFO: Se sustituye el primer bloque que llego.


*LRU: Se sustituye el bloque que lleve más tiempo sin ser usado.
*LFU: Se sustituye el bloque que se ha utilizado con menos frecuencia.
*RANDOM: Se sustituye una línea aleatoria.

4.2. Rendimiento de la memoria cache


Técnicas para la reducción de la tasa de fallos

Esta ha sido la forma clásica de aumentar el rendimiento de la cache, los fallos que presenta la
cache son:
-Forzosos: La primera vez que se accede a un bloque no puede estar en cache, por lo
que el fallo es imposible de evitar.
-Capacidad: La cache no puede contener todos los bloques que forman un programa.
-Conflicto: Hay que eliminar un bloque de cache aun habiendo libres.
*Aumento del tamaño del bloque: Así aprovecharíamos más la localidad espacial, pero si el
tamaño del bloque es demasiado grande ya no se accederá a todas las posiciones, con lo que
desaprovecharíamos espacio de cache en el que podrían almacenarse otros bloques.

*Aumento del tamaño de la cache: Esto disminuiría la tasa de fallos, pero incrementaría el coste
y la complejidad de la cache, lo que puede producir un mayor tiempo de acceso.

*Incremento de la asociatividad: Esto sería hacer conjuntos de más tamaño, esto aumentaría
al mismo tiempo la complejidad de la cache.

Técnicas para la reducción de la penalización por fallos

*Lecturas: Normalmente la CPU solo necesita una palabra del bloque en un instante
determinado, existen dos estrategias:
-Rearranque anticipado: Tan pronto como la palabra llega a cache se envía a la CPU.
-Búsqueda fuera de orden: Se pide primero la palabra a la memoria principal y después
el bloque.

*Escrituras
-Write-through (escritura directa): Se utiliza un buffer de escrituras donde se copian
todos los datos que van a ser modificados.
-Write-back (escritura diferida): Se utiliza un buffer de escritura donde se copian los
bloques cuando son sustituidos.

Fallos por escrituras:


-Write allocate: El bloque que ha producido fallo se copia en la cache antes de
escribirlo.
-No-Write allocate: El bloque que ha producido fallo no se copia en la cache,
permanece en memoria principal actualizando su valor.

Write Allocate No-Write Allocate


Write Through No se suele utilizar. Se suele adoptar en caches con
algoritmo de escritura directo.
Write Back Es necesario copiar el No tiene sentido.
bloque en la cache.

Variaciones de la arquitectura de la cache

*Caches separadas (Arquitectura Harvard): Consiste en diferenciar entre los accesos de


instrucciones y los de datos. Se dobla la velocidad y se eliminan fallos de acceso, pero al
dividirse la cache podría desperdiciarse espacio.

*Añadir varios niveles de Cache: Donde el primer nivel se centra en minimizar el tiempo y un
ciclo de reloj menor mientras el segundo se centra en reducir la tasa de fallos.
5. Diseño del sistema de memoria principal
Especificaciones:

*Tamaño del sistema: Tamaño en bytes de la memoria principal

*Ancho de palabra

La mejor forma de explicar esta parte es con un ejemplo.

Datos del ejemplo:


-Tamaño del sistema = 512 KBytes = 𝟐𝟗 * 𝟐𝟏𝟎 X 𝟐𝟑 bits
-Ancho de palabra = 16 bits = 24 bits
-Circuitos integrados = 128 KBytes = 𝟐𝟕 * 𝟐𝟏𝟎 X 𝟐𝟑 bits

a) Calculo de matriz de memoria

1. Tamaño del sistema en palabras = 29 * 210 X 23 bits = 218 x24 bits

𝐴𝑛𝑐ℎ𝑜 𝑑𝑒 𝑝𝑎𝑙𝑎𝑏𝑟𝑎 𝑑𝑒𝑙 𝑠𝑖𝑠𝑡𝑒𝑚𝑎 24


2. Nº de Columnas = 𝐴𝑛𝑐ℎ𝑜 𝑑𝑒 𝑝𝑎𝑙𝑎𝑏𝑟𝑎 𝑐ℎ𝑖𝑝𝑠 (𝑐𝑖𝑟𝑐𝑢𝑖𝑡𝑜𝑠 𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑑𝑜𝑠) = 23 = 2 Columnas

𝑇𝑎𝑚𝑎ñ𝑜 𝑑𝑒𝑙 𝑠𝑖𝑠𝑡𝑒𝑚𝑎 𝑒𝑛 𝑝𝑎𝑙𝑎𝑏𝑟𝑎𝑠 218


3. Nº de Filas = = = 2 Filas
𝑇𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑜𝑠 𝑐ℎ𝑖𝑝𝑠 (𝑐𝑖𝑟𝑐𝑢𝑖𝑡𝑜𝑠 𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑑𝑜𝑠) 217

b) Asignación de posiciones físicas a cada Byte

Dec. externa Dec. interna Selección de la sección


DM log 2 (𝑇𝑎𝑚𝑎ñ𝑜 𝑐ℎ𝑖𝑝𝑠) = log 2(128𝑘) 17 log 2 (𝑁º 𝐶) = log 2 (2) = 1

F0 -> 0x00000 – 0x3FFFF

F1 -> 0x40000 – 0x7FFFF

c) Circuitería de selección de la fila

-Completa:
̅̅̅̅̅ ∗ 𝐴18
CSF0 = 𝐴19 ̅̅̅̅̅
̅̅̅̅̅
CSF0 = 𝐴19 ∗ 𝐴18

-Incompleta
̅̅̅̅̅
CSF0 = 𝐴18
CSF0 = 𝐴18

5.1. Diseño avanzado


Dec. externa Dec. interna Selección fila Selección sección
DM log 2 (𝑇𝑎𝑚𝑎ñ𝑜 𝑐ℎ𝑖𝑝𝑠) log 2 (𝑁º 𝐹𝑖𝑙𝑎𝑠) log 2 (𝑁º 𝐶𝑜𝑙𝑢𝑚𝑛𝑎𝑠)
6. Memoria virtual

*Overlay: Técnica que realizara el transvase de información de forma autónoma sin que el
programador tenga que preocuparse

-Direccionamiento virtual: Posiciones con las que trabajan los programas.

-Direccionamiento físico: Posiciones de memoria implementadas en la Memoria Principal.

La memoria principal se organiza en marcos de página, que son del mismo tamaño que las
páginas de memoria virtual. Estas páginas son de un tamaño fijo, igual que los bloques de cache,
pero de mayor tamaño. Cuando un programa va a ser ejecutado sus páginas se cargan a los
marcos de página, por cada página hay en la tabla de páginas su correspondiente marco.

𝑇𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑙𝑎 𝑡𝑎𝑏𝑙𝑎 𝑑𝑒 𝑝á𝑔𝑖𝑛𝑎𝑠 = 𝑁º 𝑝𝑎𝑔𝑖𝑛𝑎𝑠 ∗ 𝑇𝑎𝑚𝑎ñ𝑜 𝑑𝑒 𝑢𝑛𝑎 𝑒𝑛𝑡𝑟𝑎𝑑𝑎

6.1. Mecanismo de traducción de las direcciones

La unidad de gestión de memoria (MMU) es la que se encarga de convertir las direcciones


virtuales en direcciones físicas. El RIP en el MMU tiene la posición de comienzo de la tabla de
páginas (como un puntero). La búsqueda será RIP + Nº pagina

También podría gustarte