Tema 4.2 - Memoria
Introducción
El concepto de memoria virtual surge porque los ordenadores empiezan a tener varios programas ejecutándose a la vez, por que lo que todos ellos deben estar cargados en memoria principal a la vez.
Cuando las memorias principales (RAM) tenían una menor capacidad, era necesario utilizar una memoria adicional (memoria swap) donde se almacenarían los datos menos utilizados cuando había que liberar espacio de la memoria principal
El mapa de memoria se conoce como todas las unidades direccionables por un proceso.
- Se dice que el computador emplea memoria real cuando el mapa de memoria está compuesto únicamente por la memoria principal y la caché
- Se dice que el computador emplea memoria virtual cuando el mapa de memoria está compuesto por la memoria principal, caché y disco duro
Memoria virtual
La memoria virtual consiste una traducción de las direcciones accesibles por un proceso, en direcciones reales ubicadas en memoria principal o el disco duro.
El uso de esta estrategia de direccionamiento permite también lo siguiente:
Posicionamiento independiente del proceso
Dado que las direcciones que utiliza el proceso serán traducidas, esto nos permite situar el proceso en cualquier parte de la memoria. Esto funciona ya que las direcciones que utiliza el proceso son más bién offsets desde la dirección real donde se carga el programa.
Protección de la memoria entre procesos
Dado que las direcciones son traducidas, esto impide que dos procesos puedan acceder a la misma dirección real de la memoria, ya que aunque estos escriban en la misma dirección virtual, esta no será la misma dirección real.
En realidad dos procesos sí que pueden acceder a los mismos datos. El SO se lo permite asignandoles a ambos el mismo bloque en memoria principal a sus direcciones virtuales (normalmente esto se hace permitiendo solo lectura)
Adicionalmente, la memoria virtual nos sirve para poder gestionar cómo se almacenan los diferentes datos del proceso
- Cuánto se almacena en memoria principal (memoria física), y cuánto en disco
- Permite la relocalización de diferentes partes del proceso en diferentes páginas de memoria (no necesariamente consecutivos)
Páginas
Las direcciones virtuales se agrupan en lo que llamaremos páginas. Una página se almacena en memoria principal, en un espacio de igual tamaño llamado marco de página
Las páginas, marcos de páginas, bloques y líneas; todos tienen el mismo tamaño
- Páginas → Agrupaciones de direcciones virtuales (Memoria virtual)
- Marcos de páginas → Agrupaciones de direcciones físicas/marcos (Memoria principal)
- Líneas → Nombre que recibe un bloque cuando se encuentra en la (caché)
- Bloques → Agrupaciones de direcciones físicas (mem. ppal. ó disco)
Fallo de página
Dado que las direcciones virtuales se traducen en direcciones que pueden estar almacenadas en memoria principal o en disco, el acceso a una dirección virtual puede resultar en un fallo de página. Esto implicaría que hay que traer del disco la página solicitada a la memoria principal.
Elementos de diseño
Segmentación ó Paginación
Sistema segmentado
La memoria se divide en bloques de tamaño variable llamados segmentos para almacenar cada no de los objetos que necesita un proceso
Los segmentos se adaptan exactamente al tamaño de los diferentes datos que está almacenando el proceso (código, stack, heap, libs, …)
🟢 Ventajas
- No se desaprovecha nada de espacio ya que cada proceso ocupa exactamente lo que necesita
🔴 Desventajas
- Esto dificulta encontrar un espacio en memoria lo suficientemente grande para almacenar los datos
- Se complica la tarea de traducir la direcciones virtuales (el tamaño de los segmentos no suele ser potencia de 2)
- Es dificil garantizar que no se supera el tamaño máximo de segmento
Sistema paginado
La memoria se divide en bloques llamados páginas. Cada una de estas páginas tiene un tamaño siendo (un valor potencia de ), lo que facilita la traducción de direcciones virtuales a físicas.
Las páginas (conjunto de direcciones virtuales) se asigan a un espacio del mismo tamaño en memoria principal llamado marco de página
🟢 Ventajas
- Es facil encontrar un espacio el memoria principal donde asignar una página, al tener todos el mismo tamaño
- El facil garantizar que que no se sobrepasa el tamaño de memoria asignado
🔴 DesventajasSe dice fragmentación interna al hecho de que la ultima página al ser de tamaño fijo, esta reserva más memoria de la que va a necesitar, por lo que ese espacio es desaprovechado
Segmentación paginada (combinación de las enteriores)
La memoria se divide en varios grandes bloques, cada uno de estos bloques almacenará un segmento. Cada bloque se divide a su vez en páginas.
Traducción de direcciones (Política de Identificación)
Política de identificación
Dada una dirección virtual, la política de identificación permite determinar si la página correspondiente está en memoria principal ó en disco
MMU (Memory Management Unit)
Esta unidad se encarga de traducir la dirección virtual y determinar a partir de ella dónde se encuentra el dato solicitado.
🏷️ Campos de una dirección virtual
Virtual page number Page offset0xNNNNNN
0xNN
Hay que recordar dado que el número de páginas virtuales es mayor al número de páginas físicas, algunas páginas virtuales se tienen que almacenar en disco
Tabla de páginas
La tabla de páginas determina a partir de la página virtual, la página física (marco) que debemos consultar, esta puede situarse en memoria principal o en disco
Nota:El Número de página virtual no es una columna de la tabla, sino el número de fila que debemos consultar en esta
Esta tabla es única para cada proceso
La dirección donde empieza la tabla se almacena en un registro que actúa como puntero a la tabla
Esta tabla, al ser muy grande (millones de entradas, tantas como páginas virtuales), se almacena en memoria principal, en una dirección conocida. Esta tabla no se pagina (lo que quiere decir que permanece siempre en memoria principal, no se va al disco en ningún momento)
Parámetros que podemos observar el en diagrama
- Tamaño de las direcciones virtuales → (4GB)
- Número de páginas virtuales → páginas virtuales
- Tamaño de las direcciones físicas → (1GB)
- Número de páginas físicas → páginas físicas
- Tamaño de las páginas / marcos de páginas → (4KB)
Dado que los datos de la memoria los obtenemos según el tamaño de palabra
(4 Bytes), entonces vemos que cada entrada constará de 32-bits y dado que por ahora solo hemos usado 19 bits, utilizaremos el resto para introducir información adicional, como:
🧮 Campos de las entradas de la tabla (columnas)
Campos
- 1-bit → Bit de validez
- Si dicho bit está activado, la página física que muestra la tabla se encuentra en memoria principal
- Si dicho bit está desactivado, la página física que muestra la tabla se encuentra en disco
- 18-bits → Número de página física
- Control de acceso (RWX)
- Bit de suciedad
- Bit(s) de uso reciente
- Bit de paginable
- Bit de cacheable
Integración con la caché
Si deseamos introducir una caché, podermos hacerlo:
- Antes de la MMU (antes de la traducción) → La caché trabajará con direcciones virtuales
- Después de la MMU (después de la traducción) → Al tiempo de acceso se le suma el tiempo de traducción
Otros aspectos del diseño
Política de extracción
Decide que páginas son intercambiadas entre la memoria principal y el swap. La política mas utilizada es la paginación por demanda, muy similar a lo que hace la caché. Esta política trae a memoria una página cuando esta da un fallo (miss) de acceso
Función de correspondencia
Generalmente se utiliza la correspondencia totalmente asociativa, por lo que cualquier página puede ser ubicada en cualquier marco de la memoria principal
Algoritmo de reemplazo
Generalmento se utiliza la estrategia LRU (least recent used), lo que requiere de añadir a los bits de cada entrada unos bits de uso reciente. En este caso debemos determinar también si queremos que la página que vamos a reemplazar pertenerzca al mismo proceso o no
Política de escritura
La política mas utilizada es write-back, por ello deberemos hacer uso de un bit de suciedad
Aumento del rendimiento: Memoria TLB
Dado que la tabla de páginas no deja de ser un dato más almacenado en memoria, tambíen necesitamos acceder a memoria para consultar la tabla, sin embargo, si cada vez que queremos acceder a un dato, tenemos también que hacer un acceso extra para consultar la dirección física de ese dato en la tabla, estaríamos haciendo el doble de accesos cada vez
Con el fin de mejorar los tiempos de acceso a la tabla de páginas, se introdujo un nuevo elemento llamado TLB.
TLB (Translation-Lookaside Buffer)
Esta unidad es una caché dedicada exclusivamente a la tabla de páginas, almacenando los accesos más recientes a la tabla de páginas.
Diagrama de flujo del acceso a un dato
Pregunta trampaCalcular cuanto tiempo tarda el proceso de buscar un dato en memoria
- Hay dos accesos, uno a la tabla y otro al dato