Memoria y paginación

Cómo encuentra cada proceso sus datos

Sistemas Informáticos · 1 DAM · UD03 · Bloque 05

Asignar, proteger y liberar memoria

El SO asigna memoria a los procesos y la recupera cuando dejan de necesitarla.

También controla los accesos para proteger los datos del editor y del navegador.

Cada proceso trabaja con sus propias direcciones virtuales.

Direcciones virtuales y físicas

El espacio virtual es el conjunto de direcciones de memoria propio de cada proceso.

Dirección Qué indica
Virtual El número que usa el proceso para pedir un dato
Física El lugar del dato cargado en RAM

El SO prepara las tablas y los permisos.

La MMU, unidad de gestión de memoria, es el hardware que los usa al leer o escribir.

La misma dirección en dos procesos

La MMU traduce 8195 a 28675 con la tabla del editor y a 16387 con la del navegador.

Páginas y marcos

  • Página · bloque del espacio virtual.
  • Marco · bloque de RAM del mismo tamaño.
  • Tabla de páginas · indica qué páginas están en RAM y qué marco ocupa cada una.

Las páginas de un proceso pueden ocupar marcos separados.

El editor busca el dato de 8195

La dirección virtual 8195 es la página 2, posición 3. La tabla del editor indica el marco 7. El marco 7, posición 3, corresponde a la dirección física 28675.

La posición dentro de la página, o desplazamiento, se conserva.

Una página que aún no está en RAM

Si se produce un fallo de página, el SO comprueba el acceso.

  1. Si está permitido, prepara la página en un marco.
  2. Actualiza la tabla de páginas.
  3. El proceso puede volver a intentar el acceso.

Si el acceso es inválido, el SO lo rechaza.

Intercambio en disco o SSD

El swap guarda temporalmente ciertas páginas fuera de RAM.

  1. El SO guarda una página en el disco y libera su marco.
  2. Si vuelve a necesitarla, la trae a RAM y actualiza la tabla.

Mover páginas continuamente introduce esperas y puede ralentizar los programas.

Swap en Windows, Linux y macOS

Sistema Cómo organiza el intercambio
Windows Archivo de paginación, normalmente pagefile.sys
Linux Archivo o partición de intercambio
macOS Intercambio gestionado automáticamente en el disco de arranque

macOS también puede comprimir datos dentro de la RAM.

Las páginas del proceso pueden estar repartidas

Las tres páginas pertenecen al espacio virtual del editor. Dos tienen sus datos en RAM y otra en swap. El SO trae a RAM la que se necesita.

Ampliación · Desbordamiento de búfer

Un búfer es una zona de capacidad determinada dentro de la memoria del proceso para guardar datos temporalmente.

Si se reservan 8 bytes y se escriben 12, los bytes que exceden el búfer pueden alterar datos vecinos.

La MMU comprueba permisos de páginas. El programa debe comprobar los límites del búfer.

Ampliación · Java comprueba el límite

En JShell:

import java.nio.ByteBuffer;

ByteBuffer buffer = ByteBuffer.allocate(8);
buffer.put(new byte[12]); // BufferOverflowException

ByteBuffer rechaza la escritura antes de copiar los datos.

Aplicación en los apuntes

  • 5.7 · Localiza un dato en RAM y explica qué hace el SO si falta la página.
  • 5.8 · Razona sobre el rendimiento con swap y una página aún no cargada.

La tabla de 5.7 se reutiliza en 6.8.3.

Fuente: apuntes 5.1–5.2. Recuperar la memoria de trabajo de UD01 y el contexto del proceso del bloque 03.

Fuente: apuntes 5.2. Una zona de solo lectura permite leer y bloquea un intento de escritura. El proceso indica su dirección virtual; la MMU usa la traducción preparada por el SO.

Fuente: apuntes 5.2. Seguir primero la fila del editor y después la del navegador. El número virtual coincide y cambia la tabla. Los dos accesos de lectura están permitidos y los datos están en RAM.

Fuente: apuntes 5.3. Definir página y marco antes de recorrer el siguiente dibujo. Las fórmulas de la dirección completa están en la ampliación final de los apuntes.

Fuente: apuntes 5.3. Retomar la misma lectura del editor. Preguntar qué dato consulta la MMU en la tabla y cuál se conserva. En la ampliación se usan páginas de 4096 bytes: 8195 = 2 × 4096 + 3; 7 × 4096 + 3 = 28675.

Fuente: apuntes 5.4. Preparar una página puede requerir leer almacenamiento o inicializar una página nueva. Evitar identificar todo fallo con una lectura de swap.

Fuente: apuntes 5.5. El almacenamiento, incluso SSD, introduce mayor espera que la RAM. Relacionar el mecanismo con la primera pregunta de 5.8 sin añadir otro entregable.

Fuente: apuntes 5.5 y sus referencias oficiales. Windows puede gestionar automáticamente el tamaño. La compresión en RAM y el intercambio en disco son mecanismos distintos. Referencias: https://learn.microsoft.com/en-us/troubleshoot/windows-client/performance/introduction-to-the-page-file ; https://wiki.debian.org/Swap ; https://support.apple.com/en-nz/guide/activity-monitor/actmntr1004/10.14/mac/15.0 .

Fuente: apuntes 5.5. Las tres páginas pertenecen al espacio virtual. RAM y swap indican ubicación de los datos. Es una instantánea distinta de la tabla de la actividad 5.7, que tiene sus propios datos; no trasladar automáticamente este reparto a esa tabla.

Fuente: apuntes 5.6. Una página con permiso de escritura puede contener el búfer y otros datos. El desbordamiento puede ser una vulnerabilidad; en hacking ético se buscan estos fallos con autorización para corregirlos. Conservar el carácter de ampliación.

Fuente: apuntes 5.6. El ejemplo muestra la protección de la biblioteca ante el intento de escribir más bytes de los que caben. No muestra una sobrescritura efectiva de memoria vecina.

Fuente: apuntes 5.7–5.8 y práctica 6.8.3. Conservar la tabla de dos accesos y las dos preguntas breves. La ampliación de cálculo de direcciones completas sigue disponible al final de los apuntes.