posibilidad de espacio de intercambio tiene más datos que en mi memoria física

posibilidad de espacio de intercambio tiene más datos que en mi memoria física

Citando elGuía de implementación de centos.orgeso es,

Intercambiar espacioen Linux se utiliza cuando la cantidad de memoria física (RAM) está llena.

Y esoWikipediatambién dijo que,

el término "intercambio" [se utiliza] para describir tanto el acto de mover páginas de memoria entre la RAM y el disco como la región de un disco en la que se almacenan las páginas.

Ahora bien, ¿por qué en ciertos casos el espacio de intercambio contiene más datos que mi memoria física? Creo que cuando el sistema requiere más memoria de la que está físicamente disponible, el kernel intercambia las páginas menos utilizadas y le da memoria a la aplicación (proceso) actual que necesita la memoria de inmediato. Por lo tanto, el espacio de intercambio no debe tener datos almacenados mayores que la RAM.

De aquí es de donde vengo; consulte la captura de pantalla que se proporciona a continuación.

ingrese la descripción de la imagen aquí

Respuesta1

Estás entendiendo mal la memoria virtual. Los programas y el sistema operativo siempre operan en la memoria virtual. Si asigna 10 bytes, 10 millones o 10 mil millones, está asignando memoria virtual. Su código, su espacio de pila (almacenamiento automático, asignación, etc.), su almacenamiento global (si tiene alguno), también viven en la memoria virtual. Si tomas la dirección de algo, como en &myVariable, el resultado es una dirección virtual. "Nunca" utiliza direcciones de memoria física en un sistema operativo de memoria virtual.

La suma total del espacio de direcciones virtuales que necesita el sistema operativo más todos los programas que esté ejecutando serárutinariamenteexceder el tamaño de la RAM, incluso en los sistemas actuales. Esto puede ser cierto incluso para un solo programa. Por lo tanto, el uso de RAM + "espacio de intercambio" para un solo proceso puede exceder fácilmente la RAM.

Diablos, el objetivo de la memoria virtual (bueno, uno de los puntos importantes) es permitirle escribir código que necesita más "memoria" (ya sea para código, datos, lo que sea) de la que tiene RAM.

Como dijeron otros en los comentarios, depende del sistema operativo decidir qué parte del espacio total de direcciones virtuales (para el sistema operativo + todos los procesos) se mantiene en la RAM y cuál está en el disco (en el espacio de "intercambio"). Si hace referencia a alguna página (generalmente 4 Kbytes en sistemas x86/x64) de su espacio de direcciones virtuales que no está en la RAM, el sistema operativo la "intercambia" por usted (también decimos "pagina" o "falla en ", ya que esto se debe a un "error de página"). Algún tiempo después, el sistema operativo puede decidir que tiene poca RAM y puede eliminar de la RAM algunas de las cosas a las que se hace referencia más antigua o a las que se hace menos referencia. Si ese material se modificó desde la última vez que se introdujo en la RAM, la versión modificada debe guardarse en el disco; es por eso que el material se coloca en el "espacio de intercambio" (o en términos de Windows, el archivo de paginación).

Por cierto, el archivo de paginación/archivo de intercambio/espacio de intercambio no es ni mucho menos el único lugar donde se guarda el contenido de la memoria virtual si no está en la RAM. Los archivos mapeados, que generalmente incluyen todos los archivos de código, son otro lugar. El código rara vez se modifica mientras está en la RAM, por lo que generalmente solo se intercambia, no se elimina. Si debe perderse de la RAM, simplemente se elimina y, si es necesario, se puede volver a intercambiar desde el mismo archivo del que vino originalmente.

información relacionada