Visión general del espacio de direcciones del programa

El sistema operativo base proporciona una serie de servicios para programar el uso de memoria del programa de aplicación.

Hay herramientas disponibles para ayudar a asignar memoria, correlacionar memoria y archivos y perfilar el uso de memoria de la aplicación. Como fondo, esta sección describe la arquitectura de gestión de memoria y la política de gestión de memoria del sistema.

Introducción a la arquitectura de memoria del sistema

El sistema emplea un esquema de gestión de memoria que utiliza software para ampliar las capacidades del hardware físico. Debido a que el espacio de direcciones no corresponde de uno a uno con la memoria real, el espacio de direcciones (y la forma en que el sistema lo hace corresponder a la memoria real) se denomina memoria virtual.

Los subsistemas del kernel y el hardware que cooperan para convertir la dirección virtual en direcciones físicas forman el subsistema de gestión de memoria. Las acciones que lleva a cabo el kernel para asegurarse de que los procesos comparten la memoria principal de forma justa comprenden la política de gestión de memoria. Las secciones siguientes describen las características del subsistema de gestión de memoria con mayor detalle.

El espacio de direcciones físico de sistemas de 64 bits

El hardware proporciona un rango continuo de direcciones de memoria virtual, desde0x00000000000000000000por:0xFFFFFFFFFFFFFFFFFFFF, para acceder a los datos. El espacio direccionable total es superior a 1000000000000 terabytes. Las instrucciones de acceso a memoria generan una dirección de 64 bits: 36 bits para seleccionar un registro de segmento y 28 bits para dar un desplazamiento dentro del segmento. Este esquema de direccionamiento proporciona acceso a más de 64 millones de segmentos de hasta 256M bytes cada uno. Cada registro de segmento contiene un ID de segmento de 52 bits que se convierte en un prefijo para el desplazamiento de 28 bits, que juntos forman la dirección de memoria virtual. La dirección virtual de 80 bits resultante hace referencia a un único espacio de memoria virtual grande en todo el sistema.

El espacio de proceso es un espacio de direcciones de 64 bits; es decir, los programas utilizan punteros de 64 bits. Sin embargo, cada manejador de procesos o interrupciones sólo puede direccionar el espacio de memoria virtual de todo el sistema (segmento) cuyos ID de segmento están en el registro de segmento.

Direccionamiento de registro de segmento

El kernel del sistema carga algunos registros de segmento de la manera convencional para todos los procesos, proporcionando implícitamente la direccionabilidad de memoria necesaria para la mayoría de los procesos. Estos registros incluyen dos segmentos de kernel, y un segmento de biblioteca compartida, y un segmento de dispositivo de E/S, que son compartidos por todos los procesos y cuyo contenido es de sólo lectura para programas que no son de kernel. También hay un segmento para la llamada al sistema exec de un proceso, que se comparte de sólo lectura con otros procesos que ejecutan el mismo programa, un segmento de datos de biblioteca compartida privada que contiene datos de biblioteca de lectura-escritura y un segmento de lectura-escritura que es privado para el proceso. Los registros de segmento restantes pueden cargarse utilizando tecnicas de mapeo de memoria para proporcionar mas memoria, o a traves de acceso de memoria a archivos de acuerdo con los permisos de acceso impuestos por el kernel.

El direccionamiento de 32 bits del sistema y el acceso proporcionado a través de capacidades de indirección proporciona a cada proceso una interfaz que no depende del tamaño real del espacio de memoria virtual de todo el sistema. Algunos registros de segmento son compartidos por todos los procesos, otros por un subconjunto de procesos y, sin embargo, otros son accesibles a un solo proceso. La compartición se consigue permitiendo que dos o más procesos carguen el mismo ID de segmento.

Espacio de paginación

Para acomodar el espacio de memoria virtual grande con un espacio de memoria real limitado, el sistema utiliza la memoria real como espacio de trabajo y mantiene inactivos los datos y programas que no están correlacionados en el disco. El área de disco que contiene estos datos se denomina espacio de paginación. Una página es una unidad de memoria virtual que contiene 4K bytes de datos y se puede transferir entre almacenamiento real y auxiliar. Cuando el sistema necesita datos o un programa en el espacio de páginas:

  1. Busca un área de memoria que no está activa actualmente.
  2. Garantiza que haya una copia actualizada de los datos o el programa de esa área de memoria en el espacio de paginación del disco.
  3. Lee el nuevo programa o datos del espacio de paginación en disco en el área de memoria recién liberada.

Política de gestión de memoria

El Gestor de memoria virtual (VMM) proporciona al sistema de forma transparente la conversión de direcciones real a virtual y la mayoría de otros recursos de memoria virtual. El VMM implementa la memoria virtual, permitiendo la creación de segmentos más grandes que la memoria física disponible en el sistema. Esto lo consigue manteniendo una lista de páginas libres de memoria real que utiliza para recuperar páginas que necesitan ser traídas a la memoria.

El VMM de vez en cuando debe reponer las páginas de la lista de libres eliminando algunos de los datos de página actuales de la memoria real. El proceso de mover datos entre la memoria y el disco a medida que se necesitan los datos se denomina "paginación". Para realizar la paginación, VMM utiliza algoritmos de eliminación de páginas que categorizan las páginas en tres clases, cada una con criterios de entrada y salida exclusivos:

  • páginas de almacenamiento de trabajo
  • páginas de archivo local
  • páginas de archivo remoto

En general, las páginas de trabajo tienen la prioridad más alta, seguidas de las páginas de archivo local y, a continuación, las páginas de archivo remoto.

Además, el VMM utiliza una técnica conocida como algoritmo de reloj para seleccionar las páginas que se van a sustituir. Esta técnica aprovecha un bit referenciado para cada página como una indicación de qué páginas se han utilizado recientemente (referenciadas). Cuando se llama a una rutina de robo de página, pasa por una tabla de marcos de página, examinando el bit referenciado de cada página. Si la página no estaba referenciada y es robable (es decir, no está fijada y cumple con otros criterios de robo de páginas), se roba y se coloca en la lista de libres. Las páginas referenciadas no pueden ser robadas, pero su bit de referencia se restablece, "envejeciendo" efectivamente la referencia para que la página pueda ser robada la próxima vez que se emita un algoritmo de robo de páginas.

Asignación de memoria

La versión 3 del sistema operativo utiliza una técnica de ranura de paginación retardada para el almacenamiento asignado a las aplicaciones. Esto significa que cuando se asigna almacenamiento a una aplicación con una subrutina como malloc, no se asigna ningún espacio de paginación a ese almacenamiento hasta que se hace referencia al almacenamiento.