Paginación de memoria

Esquema de gestión de memoria de computadora

En los sistemas operativos de las computadoras , la paginación de memoria (o intercambio en algunos sistemas tipo Unix ) es un esquema de administración de memoria mediante el cual una computadora almacena y recupera datos del almacenamiento secundario [a] para su uso en la memoria principal . [ cita requerida ] En este esquema, el sistema operativo recupera datos del almacenamiento secundario en bloques del mismo tamaño llamados páginas . La paginación es una parte importante de las implementaciones de memoria virtual en los sistemas operativos modernos, que utilizan el almacenamiento secundario para permitir que los programas excedan el tamaño de la memoria física disponible.

Para simplificar, la memoria principal se denomina "RAM" (un acrónimo de memoria de acceso aleatorio ) y el almacenamiento secundario se denomina "disco" (una abreviatura de unidad de disco duro , memoria de tambor o unidad de estado sólido , etc.), pero como ocurre con muchos aspectos de la informática, los conceptos son independientes de la tecnología utilizada.

Dependiendo del modelo de memoria , la funcionalidad de memoria paginada generalmente está incorporada en una CPU/MCU mediante una Unidad de administración de memoria (MMU) o una Unidad de protección de memoria (MPU) y se habilita por separado mediante un código de sistema privilegiado en el núcleo del sistema operativo . En las CPU que implementan la arquitectura del conjunto de instrucciones (ISA) x86 , por ejemplo, la paginación de memoria se habilita a través del registro de control CR0 .

Historia

En la década de 1960, el intercambio era una de las primeras técnicas de memoria virtual. Un programa completo o un segmento completo se "extraía" (o "extraía") de la RAM al disco o tambor, y se introducía ( o extraía ) otro. [1] [2] Un programa extraído con intercambio estaría en curso, pero su ejecución se suspendería mientras otro programa utilizara su RAM; un programa con un segmento extraído con intercambio podría seguir ejecutándose hasta que necesitara ese segmento, momento en el que se suspendería hasta que se extrajera el segmento.

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 en el disco, sino simplemente para minimizar el uso de la RAM del programa. Las arquitecturas posteriores utilizaron la segmentación de memoria y los segmentos de programa individuales se convirtieron en las unidades intercambiadas entre el disco y la RAM. Un segmento era el segmento de código o segmento de datos completo del programa, o a veces otras estructuras de datos grandes. Estos segmentos tenían que ser contiguos cuando residían en la RAM, lo que requería computación y movimiento adicionales para remediar la fragmentación . [3]

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

Esas máquinas, y las máquinas 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 contiguos . Estas páginas se convirtieron en las unidades intercambiadas entre el disco y la RAM.

Fallos de página

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

  1. Determinar si un marco de página robado todavía contiene una copia sin modificar de la página; si es así, utilizar ese marco de página.
  2. De lo contrario, obtenga un marco de página vacío en RAM para usarlo como contenedor de los datos y:
    • Determinar si la página alguna vez se inicializó
    • Si es así, determine la ubicación de los datos en el disco.
    • Cargue los datos requeridos en el marco de página disponible.
  3. Actualice la tabla de páginas para hacer referencia al nuevo marco de página.
  4. Devuelve el control al programa, reintentando de forma transparente la instrucción que causó la falla de página.

Cuando todos los marcos de página están en uso, el sistema operativo debe seleccionar un marco de página para reutilizarlo en la página que el programa necesita ahora. Si el marco de página expulsado fue asignado dinámicamente por un programa para almacenar datos, o si un programa lo modificó desde que se leyó en la RAM (en otras palabras, si se ha vuelto "sucio"), debe escribirse en el disco antes de liberarse. Si un programa hace referencia posteriormente a la página expulsada, se produce otro error de página y la página debe volver a leerse en la RAM.

El método que utiliza el sistema operativo para seleccionar el marco de página que se va a reutilizar, que es su algoritmo de reemplazo de página , es importante para la eficiencia. El sistema operativo predice el marco de página que es menos probable que se necesite pronto, a menudo mediante el algoritmo LRU ( menos usado recientemente ) 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 preventivamente en la RAM antes de que un programa las haga referencia, y pueden robar marcos de página de páginas que no han sido referenciadas durante mucho tiempo, dejándolas disponibles. Algunos sistemas limpian las páginas nuevas para evitar fugas de datos que comprometan la seguridad; algunos las configuran con valores definidos por la instalación o aleatorios para facilitar la depuración.

Técnicas de obtención de páginas

Paginación por demanda

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

Paginación anticipatoria

Algunos sistemas sólo utilizan paginación bajo demanda , es decir, esperan hasta que se solicita realmente una página antes de cargarla en la RAM.

Otros sistemas intentan reducir la latencia adivinando qué páginas que no están en la RAM es probable que se necesiten pronto y precargando dichas páginas en la RAM antes de que se soliciten. (Esto suele combinarse con una limpieza previa, que adivina qué páginas que están actualmente en la RAM es probable que no se necesiten pronto y las preescribe en el almacenamiento).

Cuando se produce un fallo de página, los sistemas de paginación anticipatoria no sólo traerán la página referenciada, sino también otras páginas que probablemente serán referenciadas pronto. Un algoritmo de paginación anticipatoria simple traerá las siguientes páginas consecutivas aunque todavía no sean necesarias (una predicción que utiliza 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. [7]

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.

Técnicas de reemplazo de páginas

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

La cola de páginas libres es una lista de marcos de páginas que están disponibles para su asignación. Evitar que esta cola esté vacía minimiza el cálculo necesario para dar servicio a un fallo de página. Algunos sistemas operativos buscan periódicamente páginas a las que no se ha hecho referencia recientemente y luego 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 haciendo referencia a una página que fue robada, el sistema operativo lo detecta y restaura el marco de página sin tener que volver a leer el contenido en la RAM.

Prelimpieza

El sistema operativo puede limpiar previamente periódicamente las páginas sucias: escribir las páginas modificadas en el disco aunque puedan modificarse más. Esto minimiza la cantidad de limpieza necesaria para obtener nuevos marcos de página en el momento en que se inicia un nuevo programa o se abre 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 sucias; los sistemas operativos Windows utilizan subprocesos de "escritor de páginas modificadas").

Paliza

Después de completar la inicialización, la mayoría de los programas operan en una pequeña cantidad de páginas de código y datos en comparación con la memoria total que requiere el programa. Las páginas a las que se accede con más 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 gasta una cantidad insignificante de tiempo en resolver los fallos de página. A medida que el conjunto de trabajo crece, la resolución de los fallos de página sigue siendo manejable hasta que el crecimiento alcanza un punto crítico. Luego, los fallos aumentan drásticamente y el tiempo que se dedica a resolverlos supera el tiempo que se dedica a los cálculos para los que se escribió el programa. Esta condición se conoce como thrashing . El thrashing se produce en un programa que trabaja con estructuras de datos enormes, ya que su gran conjunto de trabajo provoca 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 disco. "Thrashing" también se utiliza en contextos distintos a los de los sistemas de memoria virtual; por ejemplo, para describir problemas de caché en informática o el síndrome de la ventana tonta en redes.

Un caso peor podría ocurrir en procesadores VAX . Un único MOVL que cruza un límite de página podría tener un operando de origen que utiliza 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 utiliza 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 tanto el origen como el destino podrían cruzar los 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. A medida que se produce cada fallo, el sistema operativo necesita pasar por las extensas rutinas de gestión de memoria, lo que puede provocar múltiples E/S que pueden incluir la escritura de otras páginas de proceso 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, entonces remediar el fallo de página descartaría otra página que la instrucción necesita, y cualquier reinicio de la instrucción volvería a generar un fallo.

Para disminuir la paginación excesiva y resolver problemas de tráfico, un usuario puede aumentar la cantidad de páginas disponibles por programa, ya sea ejecutando menos programas simultáneamente o aumentando la cantidad de RAM en la computadora.

Intercambio

En un entorno multiprogramado o multiusuario , muchos usuarios pueden ejecutar el mismo programa, escrito de forma que el código y los datos estén en páginas separadas. Para minimizar el uso de RAM, todos los usuarios comparten una única copia del programa. La tabla de páginas de cada proceso está configurada de forma que las páginas que contienen el código apunten a la única copia compartida, mientras que las páginas que contienen los datos apunten a distintas páginas físicas para cada proceso.

Diferentes programas también 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 asignan a 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 función de copia en escritura , por lo que la memoria solo se asigna cuando es necesario.

La memoria compartida es un medio eficaz de comunicación entre programas. Los programas pueden compartir páginas en la memoria y luego escribir y leer para intercambiar datos.

Implementaciones

Atlas de Ferranti

El primer ordenador que admitió paginación fue el superordenador Atlas , [8] [9] [10] desarrollado 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 [11] manejaba las interrupciones de no equivalencia [f] y gestionaba la transferencia de páginas entre el núcleo y el tambor para proporcionar un almacenamiento de un nivel [12] 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 usarse 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 cuánto espacio de intercambio tenga el sistema (una configuración seleccionada por el usuario 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 solicitará al usuario que elija si desea eliminar o no el archivo (incluso si no existe).

Windows 95 , Windows 98 y Windows Me utilizan un archivo similar, y sus configuraciones se encuentran en Panel de control → Sistema → pestaña Rendimiento → Memoria virtual. Windows establece automáticamente el tamaño del archivo de paginación para que comience en 1,5 veces el tamaño de la memoria física y se amplíe hasta 3 veces la memoria física 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 en un valor mayor que el predeterminado.

Ventanas NT

El archivo utilizado para la paginación en la familia Windows NTpagefile.sys es . La ubicación predeterminada del archivo de paginación es el directorio raíz de la partición donde está instalado Windows. Windows se puede configurar para utilizar el espacio libre en cualquier unidad disponible para los archivos de paginación. Sin embargo, 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 completa o de núcleo después de una pantalla azul de la muerte . Windows utiliza 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 utilizó en el archivo de paginación. [13]

Fragmentación

En la configuración predeterminada de Windows, se permite que el archivo de paginación se expanda más allá de su asignación inicial cuando sea necesario. Si esto sucede gradualmente, puede fragmentarse en gran medida , lo que puede causar problemas de rendimiento. [14] El consejo común que se da para evitar esto es establecer un único tamaño de archivo de paginación "bloqueado" 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. [ cita requerida ] Por lo tanto, la demanda total de memoria virtual respaldada por archivos de paginación debe superar el 250% de la memoria física de la computadora antes de que el archivo de paginación se expanda.

La fragmentación del archivo de paginación que se produce cuando se expande es temporal. En cuanto las regiones expandidas ya no se utilizan (en el siguiente reinicio, o antes), se liberan las asignaciones de espacio en disco adicionales y el archivo de paginación vuelve a su estado original.

El bloqueo del tamaño de un archivo de paginación puede ser problemático si una aplicación de Windows solicita más memoria que el tamaño total de la memoria física y el archivo de paginación, lo que genera solicitudes fallidas para asignar memoria que pueden provocar que las aplicaciones y los procesos del sistema fallen. Además, el archivo de paginación rara vez se lee o escribe en orden 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 además de usar 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 hará que otros archivos se fragmenten. Por este motivo, es mejor un archivo de paginación contiguo de tamaño fijo, siempre que el tamaño asignado sea lo suficientemente grande como para satisfacer las necesidades de todas las aplicaciones.

El espacio de disco necesario se puede asignar fácilmente en sistemas con especificaciones más recientes (es decir, un sistema con 3 GB de memoria que tiene un archivo de paginación de tamaño 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 de tamaño fijo de 16 GB y 2 TB de espacio de disco). En ambos ejemplos, el sistema utiliza aproximadamente el 0,8 % del espacio de 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 crónicamente mucha más memoria que su memoria física total. [ cita requerida ] Este punto de vista ignora el hecho de que, además 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 manera mucho más efectiva agregando más memoria física.

Sistemas Unix y similares

Los sistemas Unix y otros sistemas operativos similares a Unix utilizan el término "swap" para describir el acto de sustituir el espacio en disco por RAM cuando la RAM física está llena. [15] En algunos de esos sistemas, es común dedicar una partición entera de un disco duro al intercambio. Estas particiones se denominan particiones swap . Muchos sistemas tienen un disco duro entero dedicado al intercambio, separado de las unidades de datos, que contiene solo una partición swap. Un disco duro dedicado al intercambio se denomina "unidad swap" o "unidad scratch" o " disco scratch ". Algunos de esos sistemas solo admiten el intercambio a una partición swap; otros también admiten el intercambio a archivos.

Linux

El núcleo Linux admite una cantidad prácticamente ilimitada de backends de intercambio (dispositivos o archivos) y también admite la asignación de prioridades de backend. Cuando el núcleo 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 en forma de round-robin (que es algo similar a los diseños de almacenamiento RAID 0 ), lo que proporciona un rendimiento mejorado siempre que se pueda acceder de manera eficiente a los dispositivos subyacentes en paralelo. [16]

Intercambiar archivos y particiones

Desde la perspectiva del usuario final, los archivos de intercambio en las versiones 2.6.x y posteriores del núcleo 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 núcleo mantiene un mapa de dónde se colocan en los dispositivos subyacentes y accede a ellos directamente, evitando así la caché y evitando la sobrecarga del sistema de archivos. [17] [18] Cuando residen en discos duros, que son dispositivos de medios magnéticos rotatorios, un beneficio de usar particiones de intercambio es la capacidad de colocarlas en áreas de discos duros contiguas que brindan 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 se puede colocar en cualquier sistema de archivos montado, se puede configurar en cualquier tamaño deseado y se puede agregar o cambiar 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 , que introducen varias complejidades y posibles tiempos de inactividad.

Intercambiabilidad

Swappiness es un parámetro del kernel de Linux que controla el peso relativo que se le da al intercambio de la memoria de tiempo de ejecución , en lugar de eliminar páginas del caché de páginas del sistema , siempre que no se pueda satisfacer una solicitud de asignación de memoria desde la memoria libre. Swappiness se puede establecer en un valor de 0 a 200. [19] Un valor bajo hace que el kernel prefiera expulsar páginas del 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 una alta latencia si las páginas frías necesitan ser intercambiadas nuevamente (al interactuar con un programa que había estado inactivo, por ejemplo), mientras que establecerlo más bajo (incluso 0) puede causar una alta latencia cuando los archivos que habían sido expulsados ​​​​del caché necesitan ser leídos nuevamente, pero hará que los programas interactivos respondan mejor, ya que será menos probable que necesiten intercambiar páginas frías. El intercambio también puede ralentizar aún más los HDD porque involucra muchas escrituras aleatorias, mientras que los SSD no tienen este problema. Sin duda, 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 querer reducir la configuración, mientras que el procesamiento por lotes y los sistemas menos interactivos pueden querer aumentarla. [20]

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 llegar a ser prácticamente incapaz de ejecutar ninguna tarea, incluso si la CPU está inactiva. Cuando todos los procesos están esperando en el intercambio, se considera que el sistema está en estado de muerte de intercambio . [21] [22]

La muerte del intercambio puede ocurrir debido a una sobreasignación de memoria configurada incorrectamente . [23] [24] [25]

La descripción original del problema de "intercambio hasta la muerte" se relaciona con el servidor X. Si el código o los datos utilizados por el servidor X para responder a una pulsación de tecla no están en la memoria principal, entonces, si el usuario introduce una pulsación de tecla, el servidor tendrá uno o más fallos de página, lo que requerirá que esas páginas se lean desde el intercambio antes de que se pueda procesar la pulsación de tecla, lo que ralentiza la respuesta a la misma. Si esas páginas no permanecen en la memoria, tendrán que volver a introducirse fallos en ellas para gestionar la siguiente pulsación de tecla, lo que hará que el sistema prácticamente no responda incluso si en realidad está ejecutando otras tareas con normalidad. [26]

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 independiente. [27]

AmigaOS 4

AmigaOS 4.0 introdujo un nuevo sistema para asignar RAM y desfragmentar la memoria física. Todavía utiliza un espacio de direcciones compartido plano que no se puede desfragmentar. Se basa en el método de asignación de bloques y en la memoria de paginación que permite el intercambio. La paginación se implementó en AmigaOS 4.1, pero puede bloquear el sistema si se agota toda la memoria física. [28] La memoria de intercambio se puede activar y desactivar en cualquier momento, lo que permite al usuario elegir utilizar solo RAM física.

Actuación

El almacenamiento de respaldo de un sistema operativo con memoria virtual suele ser mucho más lento que la RAM . Además, el uso de dispositivos de almacenamiento mecánicos genera un retraso de varios milisegundos en el caso de un disco duro. Por lo tanto, es conveniente reducir o eliminar el intercambio, siempre que sea posible. Algunos sistemas operativos ofrecen configuraciones para influir en las decisiones del núcleo.

  • Linux ofrece el parámetro que cambia el equilibrio entre intercambiar la memoria de tiempo de ejecución, en lugar de eliminar páginas del caché de páginas del sistema ./proc/sys/vm/swappiness
  • Windows 2000, XP y Vista ofrecen la DisablePagingExecutiveconfiguración de registro, que controla si el código y los datos en modo kernel pueden ser elegibles para la paginación.
  • Las computadoras mainframe frecuentemente usaban unidades de disco o tambores de cabezal por pista para el almacenamiento de páginas e intercambio para eliminar el tiempo de búsqueda, y varias tecnologías [29] 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 (ver limitaciones de la memoria flash ), y la cantidad mínima de datos que se puede borrar a la vez puede ser muy grande (128 KiB para un SSD Intel X25-M [30] ), y rara vez coincide con el tamaño de la página. Por lo tanto, la memoria flash puede desgastarse rápidamente si se utiliza como espacio de intercambio en condiciones de memoria limitadas. En el lado atractivo, la memoria flash es prácticamente sin retrasos en comparación con los discos duros, y no es volátil como los chips de RAM. Los esquemas como ReadyBoost e Intel Turbo Memory están diseñados para explotar estas características.

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

Tamaño del espacio de intercambio

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

Tamaños de espacios 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.

Memoria principal 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. [31] Por ejemplo:

  • El bus de direcciones que conecta la CPU a la memoria principal puede estar limitado. Las direcciones internas de 32 bits de la CPU i386SX pueden direccionar 4 GB, pero solo tiene 24 pines conectados al bus de direcciones, lo que limita la memoria física instalada a 16 MB. Puede haber otras restricciones de hardware sobre la cantidad máxima de RAM que se puede instalar.
  • Es posible que no se instale la memoria máxima por cuestiones de coste, porque la configuración estándar del modelo la omite o porque el comprador no creyó que fuera ventajoso.
  • A veces, no todas las direcciones internas se pueden usar para la memoria, porque la arquitectura del hardware puede reservar grandes regiones para E/S u otras funciones.

Memoria principal del mismo tamaño que la memoria virtual

Una computadora con direccionamiento de n bits verdadero puede tener instaladas 2 n unidades direccionables de RAM. 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 no más.

Sin embargo, incluso en este caso, la paginación se puede utilizar para admitir más memoria virtual que memoria física. Por ejemplo, pueden ejecutarse muchos programas simultáneamente. Juntos, pueden requerir más memoria física de la que se puede instalar en el sistema, pero no toda ella tendrá que estar en la RAM a la vez. Un sistema de paginación toma decisiones eficientes sobre qué memoria relegar al almacenamiento secundario, lo que conduce al mejor uso de la RAM instalada.

Además, el sistema operativo puede proporcionar servicios a programas que prevén una memoria más grande, como archivos que pueden crecer más allá del límite de la RAM instalada. No todo el archivo se puede mapear simultáneamente en el espacio de direcciones de un proceso, pero el sistema operativo puede permitir que se mapeen regiones del archivo en el espacio de direcciones y que se desasignen si es necesario mapear otra región.

Memoria principal más grande que el espacio de direcciones virtuales

Algunas computadoras tienen una memoria principal más grande que el espacio de direcciones virtuales de un proceso, como Magic-1, [31] algunas máquinas PDP-11 y algunos sistemas que usan 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 a menudo usan técnicas de paginación para obtener beneficios secundarios:

  • La "memoria adicional" se puede utilizar en el caché de páginas para almacenar en caché archivos y metadatos utilizados con frecuencia, como información de directorio, desde el almacenamiento secundario.
  • Si el procesador y el sistema operativo admiten varios espacios de direcciones virtuales, la "memoria adicional" se puede utilizar 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 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 características de seguridad mejoradas que el aislamiento basado en páginas puede aportar a un entorno multitarea.

El tamaño del total acumulado de espacios de direcciones virtuales todavía está limitado por la cantidad de almacenamiento secundario disponible.

Véase también

Notas

  1. ^ Inicialmente se utilizaron tambores , y luego unidades de disco duro y unidades de estado sólido para la 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, algunos sistemas tienen una tabla de páginas separada para cada proceso, algunos sistemas tienen una tabla de páginas separada para cada segmento [b] y algunos sistemas tienen tablas de páginas en cascada. [c]
  5. ^ Por ejemplo, MVS (Almacenamiento Virtual Múltiple).
  6. ^ Una interrupción por no equivalencia ocurre cuando los bits de orden superior de una dirección no coinciden con ninguna entrada en la memoria asociativa.

Referencias

  1. ^ 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-2. Archivado desde el original el 27 de febrero de 2017.
  2. ^ Cragon, Harvey G. (1996). Sistemas de memoria y procesadores segmentados. Jones and Bartlett Publishers. pág. 109. ISBN. 0-86720-474-5. Archivado desde el original el 27 de febrero de 2017.
  3. ^ 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-0. Archivado desde el original el 27 de febrero de 2017.
  4. ^ Kilburn, T ; Payne, RB; Howarth, DJ (1962). "El supervisor del Atlas".
  5. ^ 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 . Proc. AFIPS Computer Conference 30 (Conferencia informática conjunta de primavera, 1967). págs. 611–621. doi :10.1145/1465482.1465581.
  6. ^ Manual de referencia de sistemas de datos científicos, SDS 940 Computadora (PDF) . 1966. págs. 8–9.
  7. ^ "Precarga de swap". Linux Weekly News . 27 de septiembre de 2005.
  8. ^ Sumner, FH; Haley, G.; Chenh, ECY (1962). "La unidad de control central del ordenador 'Atlas'". Procesamiento de la información 1962. Actas del Congreso de la IFIP. Vol. Actas del Congreso de la IFIP 62. Spartan.
  9. ^ "El Atlas". Universidad de Manchester: Departamento de Informática. Archivado desde el original el 28 de julio de 2012.
  10. ^ "Arquitectura Atlas". Atlas Computer . Chilton: Atlas Computer Laboratory. Archivado desde el original el 10 de diciembre de 2012.
  11. ^ Kilburn, T.; Payne, RB; Howarth, DJ (diciembre de 1961). "El supervisor Atlas". Computadoras: clave para el control total de sistemas . Actas de conferencias. Vol. 20, Actas de la Conferencia Conjunta de Computadoras del Este Washington, DC Macmillan. págs. 279–294. Archivado desde el original el 31 de diciembre de 2009.
  12. ^ Kilburn, T.; Edwards, DBG; Lanigan, MJ; Sumner, FH (abril de 1962). "Sistema de almacenamiento de un nivel". IRE Transactions on Electronic Computers (2). Instituto de Ingenieros de Radio: 223–235. doi :10.1109/TEC.1962.5219356.
  13. ^ Tsigkogiannis, Ilias (11 de diciembre de 2006). "Análisis de volcado de memoria". driver writing != bus driving . Microsoft . Archivado desde el original el 7 de octubre de 2008 . Consultado el 22 de julio de 2008 .
  14. ^ "Windows Sysinternals PageDefrag". Sysinternals . Microsoft . 2006-11-01. Archivado desde el original el 2010-12-25 . Consultado el 2010-12-20 .
  15. ^ Both, David (27 de marzo de 2020). "Introducción al espacio de intercambio en sistemas Linux". Opensource.com . Consultado el 8 de diciembre de 2021 .
  16. ^ "swapon(2) – Página del manual de Linux". Linux.Die.net . Archivado desde el original el 28 de febrero de 2014 . Consultado el 8 de septiembre de 2014 .
  17. ^ ""Jesper Juhl": Re: ¿Cómo enviar un mensaje de error? - volcado desde un Linux de 64 bits congelado". LKML. 2006-05-29. Archivado desde el original el 2010-11-24 . Consultado el 2010-10-28 .
  18. ^ "Andrew Morton: Re: Partición de intercambio vs archivo de intercambio". LKML. Archivado desde el original el 24 de noviembre de 2010. Consultado el 28 de octubre de 2010 .
  19. ^ "La documentación del kernel de Linux para /proc/sys/vm/".
  20. ^ Andrews, Jeremy (29 de abril de 2004). "Linux: Tuning Swappiness". kerneltrap.org . Archivado desde el original el 24 de mayo de 2013. Consultado el 3 de enero de 2018 .
  21. ^ Rik van Riel (20 de mayo de 1998). «Muerte por intercambio (como en 2.1.91) y tablas de páginas». Archivado desde el original el 29 de diciembre de 2017.
  22. ^ 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-6. Archivado desde el original el 29 de diciembre de 2017.
  23. ^ Andries Brouwer. "El núcleo Linux: memoria". Archivado desde el original el 13 de agosto de 2017.
  24. ^ Red Hat. «Ajuste de la capacidad». Archivado desde el original el 23 de julio de 2017.
  25. ^ "Configuración de sobreasignación de memoria". 16 de febrero de 2014. Archivado desde el original el 31 de mayo de 2017.
  26. ^ Peter MacDonald (10 de febrero de 1993). "Intercambio hasta la muerte". Archivado desde el original el 28 de marzo de 2017.
  27. ^ John Siracusa (15 de octubre de 2001). «Mac OS X 10.1». Ars Technica. Archivado desde el original el 5 de septiembre de 2008. Consultado el 23 de julio de 2008 .
  28. ^ Desarrollador principal de AmigaOS (8 de enero de 2011). "Re: ¿Problema de intercambio también en la actualización 4?". Hyperion Entertainment. Archivado desde el original el 12 de abril de 2013. Consultado el 8 de enero de 2011 .
  29. ^ Por ejemplo, detección de posición rotacional en un canal multiplexor de bloques
  30. ^ "Alinear los sistemas de archivos al tamaño de bloque de borrado de un SSD | Reflexiones de Ted". Thunk.org. 20 de febrero de 2009. Archivado desde el original el 13 de noviembre de 2010. Consultado el 28 de octubre de 2010 .
  31. ^ por Bill Buzbee. "Magic-1 Minix Demand Paging Design". Archivado desde el original el 2013-06-05 . Consultado el 2013-12-09 .
  • Intercambio de datos y preguntas de la documentación de Ubuntu
  • Windows Server: mover un archivo de paginación a otra partición o disco por David Nudelman
  • Cómo funciona la memoria virtual de HowStuffWorks.com (de hecho, solo explica el concepto de intercambio y no el concepto de memoria virtual)
  • Gestión del espacio de intercambio de Linux (obsoleto, 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 el suministro de memoria del grupo paginado
  • Controlador SwapFs que se puede utilizar para guardar el archivo de paginación de Windows en una partición de intercambio de Linux
Obtenido de "https://es.wikipedia.org/w/index.php?title=Paginación_de_memoria&oldid=1242335562"