Articulo de referencia

Paginación de memoria

En los sistemas operativos de las computadoras , la paginación de memoria es un esquema de administración de memoria que introduce un nivel de indirección entre las direcciones ...

En los sistemas operativos de las computadoras , la paginación de memoria es un esquema de administración de memoria que introduce un nivel de indirección entre las direcciones físicas y lógicas y permite que la memoria física utilizada por un programa no sea contigua. [ 1 ] Esto también ayuda a evitar el problema de la fragmentación de la memoria .

La paginación se combina a menudo con la técnica relacionada de asignar y liberar marcos de página y almacenar páginas en y recuperarlas desde el almacenamiento secundario [ a ] ​​para permitir que el tamaño agregado de los espacios de direcciones exceda la memoria física del sistema. [ 2 ] Por razones históricas, esta técnica a veces se denomina intercambio .

Cuando se combina con la memoria virtual , se conoce como memoria virtual paginada . En este esquema, el sistema operativo recupera datos del almacenamiento secundario en bloques del mismo tamaño (páginas). La paginación es una parte importante de las implementaciones de memoria virtual en los sistemas operativos modernos, ya que utiliza el almacenamiento secundario para permitir que los programas superen el tamaño de la memoria física disponible.

El soporte de hardware es necesario para la traducción eficiente de direcciones lógicas a direcciones físicas . Por ello, la funcionalidad de memoria paginada suele estar integrada en la CPU mediante su Unidad de Gestión de Memoria (MMU) o Unidad de Protección de Memoria (MPU), y se habilita por separado mediante código de sistema privilegiado en el núcleo del sistema operativo . En las CPU que implementan la arquitectura de conjunto de instrucciones (ISA) x86 , por ejemplo, la paginación de memoria se habilita mediante el registro de control CR0 .

Historia

En la década de 1960, el intercambio de memoria era una técnica temprana de administración de memoria. Un programa completo o un segmento completo se "intercambiaba" (o "desplegaba") de la memoria de acceso aleatorio (RAM) al disco o tambor, y otro se intercambiaba (o se insertaba ). [ 3 ] [ 4 ] Un programa intercambiado seguía en ejecución, pero su ejecución se suspendía mientras la RAM era utilizada por otro programa; un programa con un segmento intercambiado podía seguir ejecutándose hasta que necesitara ese segmento, momento en el que se suspendía hasta que el segmento se insertaba.

Un programa puede incluir múltiples superposiciones que ocupan la misma memoria en diferentes momentos. Las superposiciones no son un método para paginar la RAM al almacenamiento secundario [ a ] , sino simplemente para minimizar el uso de RAM del programa. Las arquitecturas posteriores utilizaron la segmentación de memoria , y los segmentos de programa individuales se convirtieron en las unidades que se intercambiaban entre el almacenamiento secundario y la RAM. Un segmento era el segmento de código o de datos completo del programa, o a veces otras estructuras de datos grandes. Estos segmentos debían ser contiguos cuando residían en la RAM, lo que requería cálculos y movimientos adicionales para remediar la fragmentación . [ 5 ]

El Atlas de Ferranti y el Atlas Supervisor desarrollado en la Universidad de Manchester [ 6 ] (1962) fueron los primeros sistemas en implementar la paginación de memoria. Las máquinas posteriores de principios de siglo, y sus sistemas operativos, que admiten paginación incluyen el IBM M44/44X y su sistema operativo MOS (1964), [ 7 ] el SDS 940 [ 8 ] y el Berkeley Timesharing System (1966), un IBM System/360 Modelo 40 modificado y el sistema operativo CP-40 (1967), el IBM System/360 Modelo 67 y sistemas operativos como TSS/360 , CP/CMS y el Michigan Terminal System (MTS) (1967), el RCA 70/46 y el Time Sharing Operating System (TSOS) (1967), el GE 645 y Multics (1969), y el DEC PDP-10 con hardware de paginación adicional diseñado por BBN y el sistema operativo TENEX (1969).

Esas máquinas, y las posteriores que admiten paginación de memoria, utilizan un conjunto de registros de direcciones de página o tablas de páginas en memoria [ d ] para permitir que el procesador opere en páginas arbitrarias en cualquier lugar de la RAM como un espacio de direcciones lógicas aparentemente contiguo . Estas páginas se convirtieron en las unidades intercambiadas entre el almacenamiento secundario [ a ] y la RAM.

Errores de página

Cuando un proceso intenta hacer referencia a una página que no está asignada a un marco de página en la RAM, el procesador trata esta referencia de memoria no válida como un fallo de página y transfiere el control del programa al sistema operativo. El sistema operativo debe:

  1. Determine si un marco de página robado aún contiene una copia sin modificar de la página; de ser así, utilice ese marco de página.
  2. De lo contrario, obtenga un marco de página vacío en la RAM para usarlo como contenedor de los datos y:
    • Determinar si la página se inicializó alguna vez.
    • En ese caso, determine la ubicación de los datos en el almacenamiento secundario [ a ] .
    • Cargue los datos necesarios en el marco de página disponible.
  3. Actualizar la tabla de páginas para que haga referencia al nuevo marco de página.
  4. Devuelva el control al programa, reintentando de forma transparente la instrucción que provocó el fallo de página.

Cuando todos los marcos de página están en uso, el sistema operativo debe seleccionar uno para reutilizarlo y que sirva como la página que el programa necesita. Si el marco de página desalojado fue asignado dinámicamente por un programa para almacenar datos, o si un programa lo modificó desde que se cargó en la RAM (es decir, si se ha vuelto "sucio"), debe escribirse en el almacenamiento secundario antes de liberarse. Si un programa vuelve a hacer referencia a la página desalojada, se produce otro fallo de página y esta debe cargarse de nuevo en la RAM.

El método que utiliza el sistema operativo para seleccionar el marco de página que se va a reutilizar, es decir, su algoritmo de reemplazo de páginas , afecta a la eficiencia. El sistema operativo predice el marco de página con menos probabilidades de ser necesario pronto, a menudo mediante el algoritmo de uso menos reciente (LRU) o un algoritmo basado en el conjunto de trabajo del programa . Para aumentar aún más la capacidad de respuesta, los sistemas de paginación pueden predecir qué páginas se necesitarán pronto, cargándolas de forma preventiva en la RAM antes de que un programa las referencie, y pueden robar marcos de página de páginas que no se han referenciado durante mucho tiempo, haciéndolas disponibles. Algunos sistemas borran las páginas nuevas para evitar fugas de datos que comprometan la seguridad; otros las establecen con valores definidos por la instalación o valores aleatorios para facilitar la depuración.

Técnicas de obtención de páginas

Localización de demanda

Cuando se utiliza la paginación por demanda pura, las páginas se cargan solo cuando se hace referencia a ellas. Un programa que se ejecuta desde un archivo mapeado en memoria comienza su ejecución sin ninguna de sus páginas en la RAM. A medida que el programa produce fallos de página, el sistema operativo copia las páginas necesarias desde un archivo (por ejemplo, un archivo mapeado en memoria , un archivo de paginación o una partición de intercambio que contenga los datos de página) a la RAM.

Localización anticipada

Algunos sistemas utilizan únicamente la paginación bajo demanda , esperando a que se solicite realmente una página antes de cargarla en la RAM.

Otros sistemas intentan reducir la latencia prediciendo qué páginas que no están en la RAM probablemente se necesitarán pronto y precargándolas en la RAM antes de que se soliciten. (Esto suele combinarse con la pre-limpieza, que predice qué páginas que se encuentran actualmente en la RAM probablemente no se necesitarán pronto y las pre-escribe en el almacenamiento).

Cuando se produce un fallo de página, los sistemas de paginación anticipada no solo cargan la página referenciada, sino también otras páginas que probablemente se referencien pronto. Un algoritmo de paginación anticipada simple cargará las siguientes páginas consecutivas aunque aún no sean necesarias (una predicción basada en la localidad de referencia ); esto es análogo a una cola de entrada de precarga en una CPU. La precarga de intercambio precargará las páginas intercambiadas recientemente si hay suficientes páginas libres para ellas. [ 9 ]

Si un programa finaliza, el sistema operativo puede retrasar la liberación de sus páginas, en caso de que el usuario vuelva a ejecutar el mismo programa.

Algunos sistemas permiten sugerencias a la aplicación; esta puede solicitar que se habilite una página y continuar sin demora.

Técnicas de reemplazo de páginas

Cola de páginas gratuitas, robo y recuperación

La cola de páginas libres es una lista de marcos de página disponibles para su asignación. Evitar que esta cola esté vacía minimiza el procesamiento necesario para atender un fallo de página. Algunos sistemas operativos buscan periódicamente páginas que no se hayan referenciado recientemente, liberan el marco de página y lo añaden a la cola de páginas libres, un proceso conocido como "robo de páginas". Algunos sistemas operativos [ e ] admiten la recuperación de páginas ; si un programa comete un fallo de página al referenciar una página que fue robada, el sistema operativo lo detecta y restaura el marco de página sin tener que volver a cargar su contenido en la RAM.

Limpieza previa

El sistema operativo puede realizar una limpieza previa periódica de las páginas modificadas: escribe las páginas modificadas de nuevo en el almacenamiento secundario [ a ] aunque puedan volver a modificarse. Esto minimiza la cantidad de limpieza necesaria para obtener nuevos marcos de página al iniciar un nuevo programa o abrir un nuevo archivo de datos, y mejora la capacidad de respuesta. (Los sistemas operativos Unix utilizan periódicamente la sincronización para limpiar previamente todas las páginas modificadas; los sistemas operativos Windows utilizan subprocesos de "escritura de páginas modificadas").

Algunos sistemas permiten sugerencias a la aplicación; esta puede solicitar que se borre o se cambie de página y continuar sin demora.

Paliza

Tras completar la inicialización, la mayoría de los programas operan en un número reducido de páginas de código y datos en comparación con la memoria total que requieren. Las páginas a las que se accede con mayor frecuencia se denominan conjunto de trabajo .

Cuando el conjunto de trabajo es un pequeño porcentaje del número total de páginas del sistema, los sistemas de memoria virtual funcionan de manera más eficiente y se dedica una cantidad insignificante de computación a resolver fallos de página. A medida que el conjunto de trabajo crece, la resolución de fallos de página sigue siendo manejable hasta que el crecimiento alcanza un punto crítico. Entonces, los fallos aumentan drásticamente y el tiempo dedicado a resolverlos supera el tiempo dedicado a la computación para la que fue escrito el programa. Esta condición se conoce como saturación . La saturación ocurre en un programa que trabaja con estructuras de datos enormes, ya que su gran conjunto de trabajo causa fallos de página continuos que ralentizan drásticamente el sistema. Satisfacer los fallos de página puede requerir liberar páginas que pronto tendrán que volver a leerse desde el almacenamiento secundario. [ a ] ​​"Saturación" también se usa en contextos distintos a los sistemas de memoria virtual; por ejemplo, para describir problemas de caché en computación o el síndrome de la ventana tonta en redes.

En los procesadores VAX , podría darse el peor escenario posible . Una única instrucción MOVL que cruza un límite de página podría tener un operando de origen que utilice un modo de direccionamiento diferido por desplazamiento, donde la palabra larga que contiene la dirección del operando cruza un límite de página, y un operando de destino que también utilice un modo de direccionamiento diferido por desplazamiento, donde la palabra larga que contiene la dirección del operando cruza un límite de página; es posible que tanto el origen como el destino crucen límites de página. Esta única instrucción hace referencia a diez páginas; si no todas están en la RAM, cada una provocará un fallo de página. Con cada fallo, el sistema operativo debe ejecutar las extensas rutinas de gestión de memoria, lo que podría provocar múltiples operaciones de E/S, incluyendo la escritura de páginas de otros procesos en el disco y la lectura de páginas del proceso activo desde el disco. Si el sistema operativo no pudiera asignar diez páginas a este programa, al corregir el fallo de página se descartaría otra página que la instrucción necesita, y cualquier reinicio de la instrucción provocaría otro fallo.

Para reducir la paginación excesiva y solucionar los problemas de saturación de la memoria, el usuario puede aumentar el número de páginas disponibles por programa, ya sea ejecutando menos programas simultáneamente o aumentando la cantidad de RAM del ordenador.

Intercambio

En entornos de multiprogramación o multiusuario , varios usuarios pueden ejecutar el mismo programa, escrito de forma que su código y sus datos se encuentren en páginas separadas. Para minimizar el uso de la RAM, todos los usuarios comparten una única copia del programa. La tabla de páginas de cada proceso está configurada de manera que las páginas que contienen el código apunten a la copia compartida, mientras que las páginas que contienen los datos apuntan a páginas físicas diferentes para cada proceso.

Diferentes programas pueden usar las mismas bibliotecas. Para ahorrar espacio, solo se carga una copia de la biblioteca compartida en la memoria física. Los programas que usan la misma biblioteca tienen direcciones virtuales que se corresponden con las mismas páginas (que contienen el código y los datos de la biblioteca). Cuando los programas quieren modificar el código de la biblioteca, usan la técnica de copia en escritura , por lo que la memoria solo se asigna cuando es necesaria.

La memoria compartida es un medio eficiente de comunicación entre programas. Los programas pueden compartir páginas de memoria y, posteriormente, escribir y leer para intercambiar datos.

Implementaciones

Atlas Ferranti

La primera computadora que admitió paginación fue la supercomputadora Atlas , [ 10 ] [ 11 ] [ 12 ] desarrollada conjuntamente por Ferranti , la Universidad de Manchester y Plessey en 1963. La máquina tenía una memoria asociativa ( direccionable por contenido ) con una entrada para cada página de 512 palabras. El Supervisor [ 13 ] manejaba las interrupciones de no equivalencia [ f ] y administraba la transferencia de páginas entre el núcleo y el tambor para proporcionar un almacenamiento de un nivel [ 14 ] a los programas.

Microsoft Windows

Windows 3.x y Windows 9x

La paginación ha sido una característica de Microsoft Windows desde Windows 3.0 en 1990. Windows 3.x crea un archivo oculto llamado 386SPART.PARo WIN386.SWPpara usarlo como archivo de intercambio. Generalmente se encuentra en el directorio raíz , pero puede aparecer en otro lugar (normalmente en el directorio WINDOWS). Su tamaño depende de la cantidad de espacio de intercambio que tenga el sistema (una configuración que el usuario selecciona en Panel de control → Mejorado en "Memoria virtual"). Si el usuario mueve o elimina este archivo, aparecerá una pantalla azul la próxima vez que se inicie Windows, con el mensaje de error "El archivo de intercambio permanente está dañado". Se le pedirá al usuario que elija si desea eliminar el archivo o no (incluso si no existe).

Windows 95 , Windows 98 y Windows Me utilizan un archivo similar, y su configuración se encuentra en Panel de control → Sistema → Rendimiento → Memoria virtual. Windows establece automáticamente el tamaño del archivo de paginación en 1,5 veces el tamaño de la memoria física y lo amplía hasta 3 veces si es necesario. Si un usuario ejecuta aplicaciones que consumen mucha memoria en un sistema con poca memoria física, es preferible establecer manualmente estos tamaños a un valor superior al predeterminado.

Windows NT

El archivo utilizado para la paginación en la familia Windows NT es . La ubicación predeterminada del archivo de paginación es en el directorio raíz de la partición donde está instalado Windows. Windows se puede configurar para usar espacio libre en cualquier unidad disponible para archivos de paginación. Sin embargo, antes de Windows Vista y Windows Server 2008 [ 15 ], es necesario que la partición de arranque (es decir, la unidad que contiene el directorio de Windows) tenga un archivo de paginación si el sistema está configurado para escribir volcados de memoria, ya sean del kernel o completos, después de una Pantalla Azul de la Muerte . Windows usa el archivo de paginación como almacenamiento temporal para el volcado de memoria. Cuando se reinicia el sistema, Windows copia el volcado de memoria del archivo de paginación a un archivo separado y libera el espacio que se usaba en el archivo de paginación. [ 16 ]pagefile.sys

Fragmentación

En la configuración predeterminada de Windows, el archivo de paginación puede expandirse más allá de su asignación inicial cuando sea necesario. Si esto ocurre gradualmente, puede fragmentarse considerablemente , lo que puede causar problemas de rendimiento. [ 17 ] El consejo común para evitar esto es establecer un tamaño de archivo de paginación "bloqueado" único para que Windows no lo expanda. Sin embargo, el archivo de paginación solo se expande cuando se ha llenado, lo que, en su configuración predeterminada, es el 150 % de la cantidad total de memoria física. [ 18 ] Por lo tanto, la demanda total de memoria virtual respaldada por el archivo de paginación debe superar el 250 % de la memoria física del equipo para que el archivo de paginación se expanda.

La fragmentación del archivo de paginación que se produce al expandirse es temporal. Tan pronto como las regiones expandidas dejan de utilizarse (en el siguiente reinicio, o incluso antes), se libera el espacio adicional en disco y el archivo de paginación vuelve a su estado original.

Limitar el tamaño del archivo de paginación puede ser problemático si una aplicación de Windows solicita más memoria que la memoria física total y el archivo de paginación, lo que puede provocar fallos en las solicitudes de asignación de memoria y, en consecuencia, el fallo de las aplicaciones y los procesos del sistema. Además, el archivo de paginación rara vez se lee o escribe de forma secuencial, por lo que la ventaja de rendimiento de tener un archivo de paginación completamente secuencial es mínima. Sin embargo, un archivo de paginación grande generalmente permite el uso de aplicaciones que consumen mucha memoria, sin penalizaciones más allá del uso de más espacio en disco. Si bien un archivo de paginación fragmentado puede no ser un problema en sí mismo, la fragmentación de un archivo de paginación de tamaño variable creará con el tiempo varios bloques fragmentados en la unidad, lo que provocará la fragmentación de otros archivos. Por este motivo, es mejor un archivo de paginación contiguo de tamaño fijo, siempre que el tamaño asignado sea suficiente para satisfacer las necesidades de todas las aplicaciones.

El espacio en disco necesario se puede asignar fácilmente en sistemas con especificaciones más recientes (por ejemplo, un sistema con 3  GB de memoria y un  archivo de paginación fijo de 6 GB en una  unidad de disco de 750 GB, o un sistema con 6  GB de memoria y un  archivo de paginación fijo de 16 GB y 2  TB de espacio en disco). En ambos ejemplos, el sistema utiliza aproximadamente el 0,8 % del espacio en disco con el archivo de paginación preextendido a su máximo.

En ocasiones, también se recomienda desfragmentar el archivo de paginación para mejorar el rendimiento cuando un sistema Windows utiliza de forma crónica mucha más memoria que su memoria física total. [ 19 ] Esta perspectiva ignora el hecho de que, aparte de los resultados temporales de la expansión, el archivo de paginación no se fragmenta con el tiempo. En general, los problemas de rendimiento relacionados con el acceso al archivo de paginación se solucionan de forma mucho más eficaz añadiendo más memoria física.

Sistemas Unix y similares a Unix

Los sistemas Unix y otros sistemas operativos similares a Unix utilizan el término "swap" para describir la acción de sustituir espacio en disco por RAM cuando la RAM física está llena. [ 20 ] En algunos de estos sistemas, es común dedicar una partición completa de un disco duro al intercambio. Estas particiones se denominan particiones de intercambio . Muchos sistemas tienen un disco duro completo dedicado al intercambio, separado de la(s) unidad(es) de datos, que contiene únicamente una partición de intercambio. Un disco duro dedicado al intercambio se denomina "unidad de intercambio", "unidad de trabajo" o " disco de trabajo ". Algunos de estos sistemas solo admiten el intercambio a una partición de intercambio; otros también admiten el intercambio a archivos.

Linux

El kernel de Linux admite un número prácticamente ilimitado de backends de intercambio (dispositivos o archivos) y también admite la asignación de prioridades a dichos backends. Cuando el kernel intercambia páginas de la memoria física, utiliza el backend de mayor prioridad con espacio libre disponible. Si se asigna la misma prioridad a varios backends de intercambio, se utilizan de forma rotativa (similar a las configuraciones de almacenamiento RAID 0 ), lo que proporciona un rendimiento mejorado siempre que se pueda acceder a los dispositivos subyacentes de forma eficiente y en paralelo. [ 21 ]

Intercambiar archivos y particiones

Desde la perspectiva del usuario final, los archivos de intercambio en las versiones 2.6.x y posteriores del kernel de Linux son prácticamente tan rápidos como las particiones de intercambio; la limitación es que los archivos de intercambio deben asignarse de forma contigua en sus sistemas de archivos subyacentes. Para aumentar el rendimiento de los archivos de intercambio, el kernel mantiene un mapa de su ubicación en los dispositivos subyacentes y accede a ellos directamente, evitando así la caché y la sobrecarga del sistema de archivos. [ 22 ] [ 23 ] Cuando residen en discos duros (HDD), que son dispositivos de medios magnéticos rotacionales, una ventaja de usar particiones de intercambio es la posibilidad de ubicarlas en áreas contiguas del HDD que proporcionan un mayor rendimiento de datos o un tiempo de búsqueda más rápido. Sin embargo, la flexibilidad administrativa de los archivos de intercambio puede superar ciertas ventajas de las particiones de intercambio. Por ejemplo, un archivo de intercambio puede ubicarse en cualquier sistema de archivos montado, puede configurarse con cualquier tamaño deseado y puede agregarse o modificarse según sea necesario. Las particiones de intercambio no son tan flexibles; no se pueden ampliar sin usar herramientas de particionamiento o administración de volúmenes , lo que introduce diversas complejidades y posibles tiempos de inactividad.

Intercambio

Swappiness es un parámetro del kernel de Linux que controla el peso relativo que se le da al intercambio de memoria en tiempo de ejecución , en comparación con la eliminación de páginas de la caché de páginas del sistema , cuando una solicitud de asignación de memoria no puede ser satisfecha con la memoria libre. Swappiness puede establecerse en un valor de 0 a 200. [ 24 ] Un valor bajo hace que el kernel prefiera desalojar páginas de la caché de páginas, mientras que un valor más alto hace que el kernel prefiera intercambiar páginas de memoria "frías". El valor predeterminado es 60; establecerlo más alto puede causar alta latencia si las páginas frías necesitan ser intercambiadas de nuevo (al interactuar con un programa que había estado inactivo, por ejemplo), mientras que establecerlo más bajo (incluso 0) puede causar alta latencia cuando los archivos que han sido desalojados de la caché necesitan ser leídos nuevamente, pero hará que los programas interactivos sean más responsivos ya que será menos probable que necesiten intercambiar páginas frías de nuevo. El intercambio también puede ralentizar aún más los HDD porque implica muchas escrituras aleatorias, mientras que los SSD no tienen este problema. Ciertamente, los valores predeterminados funcionan bien en la mayoría de las cargas de trabajo, pero los equipos de escritorio y los sistemas interactivos para cualquier tarea prevista pueden necesitar reducir la configuración, mientras que el procesamiento por lotes y los sistemas menos interactivos pueden necesitar aumentarla. [ 25 ]

Intercambio de muerte

Cuando la memoria del sistema es muy insuficiente para las tareas actuales y una gran parte de la actividad de la memoria pasa por un intercambio lento, el sistema puede volverse prácticamente incapaz de ejecutar ninguna tarea, incluso si la CPU está inactiva. Cuando todos los procesos están esperando el intercambio, se considera que el sistema está en estado de colapso por falta de memoria . [ 26 ] [ 27 ]

La muerte del intercambio puede ocurrir debido a una sobreasignación de memoria configurada incorrectamente . [ 28 ] [ 29 ] [ 30 ]

La descripción original del problema de "intercambio hasta la muerte" se refiere al servidor X. Si el código o los datos que utiliza el servidor X para responder a una pulsación de tecla no se encuentran en la memoria principal, entonces, si el usuario introduce una tecla, el servidor sufrirá uno o más fallos de página, lo que obligará a leer esas páginas de la memoria de intercambio antes de que se pueda procesar la pulsación, ralentizando así la respuesta. Si esas páginas no permanecen en la memoria, tendrán que volver a cargarse para gestionar la siguiente pulsación, lo que hace que el sistema sea prácticamente inoperante, incluso si está ejecutando otras tareas con normalidad. [ 31 ]

macOS

macOS utiliza varios archivos de intercambio. La instalación predeterminada (y recomendada por Apple) los coloca en la partición raíz, aunque es posible colocarlos en una partición o dispositivo separado. [ 32 ]

AmigaOS 4

AmigaOS 4.0 introdujo un nuevo sistema para asignar RAM y desfragmentar la memoria física. Sigue utilizando un espacio de direcciones compartido plano que no se puede desfragmentar. Se basa en la asignación de bloques y la memoria paginada que permite el intercambio. La paginación se implementó en AmigaOS 4.1 . Puede bloquear el sistema si se utiliza toda la memoria física. [ 33 ] La memoria de intercambio se podía activar y desactivar, lo que permitía al usuario elegir usar solo RAM física.

Actuación

El almacenamiento subyacente de un sistema operativo de memoria virtual suele ser mucho más lento que la RAM . Los discos duros, por ejemplo, introducen un retraso de varios milisegundos antes de que comience la lectura o la escritura. Por lo tanto, es conveniente reducir o eliminar el intercambio de memoria, siempre que sea posible. Algunos sistemas operativos ofrecen opciones de configuración para influir en las decisiones del núcleo.

  • Linux ofrece un parámetro que modifica el equilibrio entre el intercambio de memoria en tiempo de ejecución y la eliminación de páginas de la caché de páginas del sistema ./proc/sys/vm/swappiness
  • Windows 2000, XP y Vista ofrecen una DisablePagingExecutiveconfiguración en el registro que controla si el código y los datos en modo kernel pueden ser paginados.
  • Las computadoras centrales frecuentemente usaban unidades de disco de cabezal por pista o tambores para el almacenamiento de páginas e intercambio para eliminar el tiempo de búsqueda, y varias tecnologías [ 34 ] para tener múltiples solicitudes concurrentes al mismo dispositivo con el fin de reducir la latencia rotacional .
  • La memoria flash tiene un número finito de ciclos de borrado y escritura (véase limitaciones de la memoria flash ), y la cantidad mínima de datos que se puede borrar de una sola vez puede ser muy grande, [ g ] rara vez coincidiendo con el tamaño de página. Por lo tanto, la memoria flash puede desgastarse rápidamente si se utiliza como espacio de intercambio en condiciones de memoria restringidas. Por esta razón, los sistemas operativos móviles e integrados (como Android ) pueden no utilizar espacio de intercambio. Como ventaja, la memoria flash es prácticamente sin retardo en comparación con los discos duros, y no es volátil como los chips de RAM. Esquemas como ReadyBoost e Intel Turbo Memory están diseñados para aprovechar estas características.

Muchos sistemas operativos tipo Unix (por ejemplo, AIX , Linux y Solaris ) permiten utilizar varios dispositivos de almacenamiento para el espacio de intercambio en paralelo, con el fin de aumentar el rendimiento.

Tamaño del espacio de intercambio

En algunos sistemas operativos de memoria virtual más antiguos, se reserva espacio en el almacenamiento de intercambio cuando los programas asignan memoria para datos en tiempo de ejecución. Los proveedores de sistemas operativos suelen emitir directrices sobre la cantidad de espacio de intercambio que se debe asignar.

Tamaños de espacio de direcciones físicas y virtuales

La paginación es una forma de permitir que el tamaño de las direcciones utilizadas por un proceso, que es el "espacio de direcciones virtuales" o "espacio de direcciones lógicas" del proceso, sea diferente de la cantidad de memoria principal realmente instalada en una computadora en particular, que es el espacio de direcciones físicas.

La memoria principal es más pequeña que la memoria virtual.

En la mayoría de los sistemas, el tamaño del espacio de direcciones virtuales de un proceso es mucho mayor que la memoria principal disponible. [ 36 ] Por ejemplo:

  • El bus de direcciones que conecta la CPU con la memoria principal puede tener limitaciones. La CPU i386SX , con sus direcciones internas de 32 bits, puede direccionar hasta 4  GB, pero solo dispone de 24 pines conectados al bus de direcciones, lo que limita la memoria física instalada a 16  MB. Es posible que existan otras restricciones de hardware en cuanto a la cantidad máxima de RAM que se puede instalar.
  • Es posible que no se instale la memoria máxima debido al coste, a que la configuración estándar del modelo la omite o a que el comprador no creyó que sería ventajoso.
  • En ocasiones, no todas las direcciones internas pueden utilizarse para la memoria, ya que la arquitectura del hardware puede reservar grandes regiones para E/S u otras funciones.

La memoria principal tiene el mismo tamaño que la memoria virtual.

Un ordenador con direccionamiento de n bits real puede tener instaladas 2ⁿ unidades de RAM direccionables. Un ejemplo es un procesador x86 de 32 bits con 4 GB y sin extensión de dirección física (PAE). En este caso, el procesador puede direccionar toda la RAM instalada y nada más. 

Sin embargo, incluso en este caso, la paginación puede utilizarse para admitir más memoria virtual que memoria física. Por ejemplo, muchos programas pueden ejecutarse simultáneamente. En conjunto, pueden requerir más memoria física de la que puede instalarse en el sistema, pero no toda tendrá que estar en la RAM al mismo tiempo. Un sistema de paginación toma decisiones eficientes sobre qué memoria asignar al almacenamiento secundario, lo que permite un mejor uso de la RAM instalada.

Además, el sistema operativo puede proporcionar servicios a programas que requieren mayor memoria, como archivos cuyo tamaño puede superar el límite de la RAM instalada. No todo el archivo puede asignarse simultáneamente al espacio de direcciones de un proceso, pero el sistema operativo puede permitir que regiones del archivo se asignen al espacio de direcciones y se desasignen si es necesario asignar otra región.

La memoria principal es mayor que el espacio de direcciones virtuales.

Algunos ordenadores tienen una memoria principal mayor que el espacio de direcciones virtuales de un proceso, como el Magic-1, [ 36 ] algunas máquinas PDP-11 y algunos sistemas que utilizan procesadores x86 de 32 bits con extensión de dirección física . Esto anula una ventaja significativa de la paginación, ya que un solo proceso no puede usar más memoria principal que la cantidad de su espacio de direcciones virtuales. Dichos sistemas suelen utilizar técnicas de paginación para obtener beneficios secundarios:

  • La "memoria adicional" se puede utilizar en la caché de páginas para almacenar en caché archivos y metadatos de uso frecuente, como información de directorio, desde el almacenamiento secundario.
  • Si el procesador y el sistema operativo admiten múltiples espacios de direcciones virtuales, la "memoria adicional" puede utilizarse para ejecutar más procesos. La paginación permite que el total acumulado de espacios de direcciones virtuales supere la memoria principal física.
  • Un proceso puede almacenar datos en archivos mapeados en memoria en sistemas de archivos respaldados por memoria, como el sistema de archivos tmpfs o los sistemas de archivos en una unidad RAM , y mapear archivos dentro y fuera del espacio de direcciones según sea necesario.
  • Un conjunto de procesos aún puede depender de las funciones de seguridad mejoradas que el aislamiento basado en páginas puede aportar a un entorno multitarea.

El tamaño total acumulado de espacios de direcciones virtuales sigue estando limitado por la cantidad de almacenamiento secundario disponible.

Véase también

Notas

  1. 1 2 3 4 5 6 Inicialmentese utilizaron tambores , y luego discos duros y unidades de estado sólido para superposiciones y paginación.
  2. ^ Por ejemplo, Multics , OS/VS1 , OS/VS2 , VM/370
  3. Por ejemplo, z/OS .
  4. Algunos sistemas tienen una tabla de páginas global, otros tienen una tabla de páginas separada para cada proceso, otros tienen una tabla de páginas separada para cada segmento [ b ] y otros tienen tablas de páginas en cascada. [ c ]
  5. Por ejemplo, MVS (Almacenamiento Virtual Múltiple).
  6. Se produce una interrupción por no equivalencia cuando los bits de orden superior de una dirección no coinciden con ninguna entrada en la memoria asociativa.
  7. 128 KiB para una SSD Intel X25-M [ 35 ]

Referencias

  1. Conceptos de sistemas operativos, 10.ª edición . Febrero de 2021. 9.3 Paginación. ISBN 978-1-119-80036-1.
  2. "Paginación en el sistema operativo" . GeeksforGeeks . Consultado el 14 de diciembre de 2024 .
  3. Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981). «Sistemas operativos». Enciclopedia de informática y tecnología . Vol. 11. CRC Press. pág. 442. ISBN   0-8247-2261-2Archivado del original el 27 de febrero de 2017 .
  4. Cragon, Harvey G. (1996). Sistemas de memoria y procesadores segmentados . Jones and Bartlett Publishers. pág. 109. ISBN  0-86720-474-5Archivado del original el 27 de febrero de 2017 .
  5. Belzer, Jack; Holzman, Albert G.; Kent, Allen, eds. (1981). «Sistemas de memoria virtual». Enciclopedia de informática y tecnología . Vol. 14. CRC Press. pág. 32. ISBN   0-8247-2214-0Archivado del original el 27 de febrero de 2017 .
  6. Kilburn, T ; Payne, RB; Howarth, DJ (1962). "El supervisor del Atlas" .
  7. RW O'Neill. Experiencia en el uso de un sistema de multiprogramación de tiempo compartido con hardware de reubicación dinámica de direcciones . Actas de la Conferencia de Computación AFIPS 30 (Conferencia Conjunta de Computación de Primavera, 1967). págs. 611–621 . doi : 10.1145/1465482.1465581 . 
  8. Manual de referencia de Scientific Data Systems, computadora SDS 940 (PDF) . 1966. págs. 8–9 . 
  9. "Precarga de intercambio" . Noticias semanales de Linux . 27 de septiembre de 2005.
  10. Sumner, FH; Haley, G.; Chenh, ECY (1962). "La unidad de control central de la computadora 'Atlas'". Procesamiento de la información 1962. Actas del Congreso IFIP. Vol. Actas del Congreso IFIP 62. Spartan. 
  11. "El Atlas" . Universidad de Manchester: Departamento de Informática. Archivado del original el 28 de julio de 2012.
  12. "Arquitectura Atlas" . Atlas Computer . Chilton: Atlas Computer Laboratory. Archivado del original el 10 de diciembre de 2012.
  13. Kilburn, T.; Payne, RB; Howarth, DJ (diciembre de 1961). "The Atlas Supervisor" . Computers - Key to Total Systems Control . Actas de conferencias. Vol. 20, Actas de la Conferencia Conjunta de Computación del Este, Washington, DC, Macmillan. págs. 279–294 . Archivado del original el 31 de diciembre de 2009.  
  14. Kilburn, T.; Edwards, DBG; Lanigan, MJ; Sumner, FH (abril de 1962). "Sistema de almacenamiento de un nivel". IRE Transactions on Electronic Computers (2). Institute of Radio Engineers: 223– 235. doi : 10.1109/TEC.1962.5219356 .
  15. "Cómo generar un kernel o un archivo de volcado de memoria completo en Windows Server 2008 y Windows Server 2008 R2" . Microsoft . 22/01/2014. Archivado del original el 15/03/2015 . Consultado el 05/05/2026 . En Windows Vista y Windows Server 2008, para obtener un volcado de memoria, el archivo de paginación no tiene que estar en la misma partición que la partición en la que está instalado el sistema operativo, como era el requisito de las versiones anteriores.
  16. Tsigkogiannis, Ilias (11 de diciembre de 2006). "Análisis de volcado de memoria" . Escribir desde el conductor != conducir un autobús . Microsoft . Archivado del original el 7 de octubre de 2008. Recuperado el 22 de julio de 2008 . 
  17. "Windows Sysinternals PageDefrag" . Sysinternals . Microsoft . 1 de noviembre de 2006. Archivado del original el 25 de diciembre de 2010. Consultado el 20 de diciembre de 2010 .
  18. "Información del archivo de página" . Oingo KPT . Consultado el 14 de diciembre de 2024 .
  19. "¿Qué hace la desfragmentación?" . HP Tech Takes . Hewlett-Packard . Consultado el 14 de diciembre de 2024 .
  20. Both, David (27-03-2020). "Una introducción al espacio de intercambio en sistemas Linux" . Opensource.com . Recuperado el 08-12-2021 .
  21. "swapon(2) – Página man de Linux" . Linux.Die.net . Archivado del original el 28 de febrero de 2014. Consultado el 8 de septiembre de 2014 .
  22. ""Jesper Juhl": Re: ¿Cómo enviar un break? - volcado de linux de 64 bits congelado" . LKML. 29 de mayo de 2006. Archivado del original el 24 de noviembre de 2010. Recuperado el 28 de octubre de 2010 .
  23. "Andrew Morton: Re: Partición de intercambio vs archivo de intercambio" . LKML. Archivado del original el 24/11/2010 . Recuperado el 28/10/2010 .
  24. "Documentación del kernel de Linux para /proc/sys/vm/" .
  25. Andrews, Jeremy (29-04-2004). "Linux: Tuning Swappiness" . kerneltrap.org . Archivado del original el 24-05-2013 . Recuperado el 03-01-2018 .
  26. Rik ​​van Riel (20 de mayo de 1998). "Intercambiar la muerte (como en la versión 2.1.91) y las tablas de páginas" . Archivado del original el 29 de diciembre de 2017.
  27. Kyle Rankin (2012). Solución de problemas de DevOps: Mejores prácticas para servidores Linux . Addison-Wesley. pág. 159. ISBN  978-0-13-303550-6Archivado del original el 29 de diciembre de 2017 .
  28. Andries Brouwer. "El núcleo de Linux: Memoria" . Archivado del original el 13 de agosto de 2017.
  29. Red Hat. "Ajuste de capacidad" . Archivado del original el 23 de julio de 2017.
  30. "Configuración de sobreasignación de memoria" . 16/02/2014. Archivado del original el 31/05/2017.
  31. Peter MacDonald (10 de febrero de 1993). "Intercambio hasta la muerte" . Archivado del original el 28 de marzo de 2017.
  32. John Siracusa (15 de octubre de 2001). "Mac OS X 10.1" . Ars Technica. Archivado del original el 5 de septiembre de 2008. Consultado el 23 de julio de 2008 .
  33. Desarrollador principal de AmigaOS (08/01/2011). "Re: ¿Problema de intercambio también en la actualización 4 ?" . Hyperion Entertainment. Archivado del original el 12/04/2013 . Recuperado el 08/01/2011 . 
  34. Por ejemplo, detección de posición rotacional en un canal multiplexor de bloques.
  35. "Alineación de sistemas de archivos con el tamaño de bloque de borrado de una SSD | Reflexiones de Ted" . Thunk.org. 20 de febrero de 2009. Archivado del original el 13 de noviembre de 2010. Consultado el 28 de octubre de 2010 .
  36. 1 2 Bill Buzbee. "Diseño de paginación bajo demanda Magic-1 Minix" . Archivado del original el 5 de junio de 2013. Recuperado el 9 de diciembre de 2013 .
  • "Programas de supervisión de tiempo compartido" (PDF) . Archivado del original (PDF) el 1 de noviembre de 2012.En un artículo de Michael T. Alexander titulado " Temas avanzados en programación de sistemas" , publicado en la Conferencia de Verano de Ingeniería de la Universidad de Michigan de 1970 (revisado en mayo de 1971), se comparan los enfoques de planificación y asignación de recursos, incluyendo la memoria virtual y la paginación, utilizados en cuatro sistemas operativos de mainframe: CP-67 , TSS/360 , MTS y Multics .
  • Intercambio de datos y preguntas en la documentación de Ubuntu
  • Windows Server - Cómo mover el archivo de paginación a otra partición o disco, por David Nudelman
  • Cómo funciona la memoria virtual ( de HowStuffWorks.com) (en realidad, solo explica el concepto de intercambio, y no el de memoria virtual).
  • Gestión del espacio de intercambio en Linux (obsoleta, como admite el autor)
  • Guía para optimizar la velocidad de la memoria virtual (obsoleta)
  • Algoritmos de reemplazo de páginas de memoria virtual
  • Windows XP: Cómo cambiar manualmente el tamaño del archivo de paginación de la memoria virtual.
  • Windows XP: Factores que pueden agotar la memoria paginada.
  • Controlador SwapFs que se puede usar para guardar el archivo de paginación de Windows en una partición de intercambio de Linux.