Hasta donde entiendo la paginación y el intercambio, son conceptos completamente diferentes. Si bien el intercambio significa que un proceso está completamente en la memoria física o en el disco duro, las partes de un proceso pueden estar en la memoria física y otras partes pueden estar en el disco duro.
Pero, ¿por qué Linux necesita una partición de intercambio entonces? Si la memoria física está llena, algunos procesos se externalizarán al disco duro y se asignará un nuevo proceso desde la memoria virtual a la memoria física.
Simplemente no entiendo por qué uno necesita una partición de intercambio (o intercambio en general) entonces?
¿O es solo una cuestión de terminología y swap partition == virtual memory
?
linux
memory
operating-systems
virtual-memory
paging
JohnnyFromBF
fuente
fuente
Respuestas:
Sí, es solo una cuestión de terminología, en muchos casos se utiliza una partición de intercambio como memoria virtual.
La razón por la cual los sistemas UNIX y similares a UNIX prefieren las particiones de intercambio a los archivos de página es que pueden ser contiguos, lo que resulta en tiempos de búsqueda más bajos en comparación con un archivo de página que puede estar fragmentado.
fuente
No sé de dónde sacaste la idea de que "intercambiar significa que un proceso está completamente en la memoria física o en el disco duro". Ese significado no se ha utilizado durante algunas décadas. Citando Wikipedia :
De hecho, en cualquier contexto que involucre Linux (u otros sistemas Unix), paginación e intercambio son prácticamente sinónimos. Ambos se refieren al uso de la memoria virtual donde los datos de la página pueden almacenarse en la RAM o en el disco. (Una página es de 4kB en cualquier dispositivo que pueda encontrar). Al programa que usa la página de memoria no le importa o ni siquiera sabe dónde se almacenan los datos, simplemente sigue usando la dirección virtual. El núcleo transfiere datos entre la RAM y el disco y actualiza las tablas MMU a medida que avanza, de modo que la entrada para la dirección virtual apunta a una página física en la memoria o contiene un valor especial que hace que el procesador ejecute algún código del núcleo que cargará los datos apropiados del disco.
La paginación se refiere a este proceso genérico. El intercambio se refiere al caso donde los datos en el disco están en un área dedicada: el área de intercambio (una partición de intercambio o archivo de intercambio). La paginación también se puede hacer entre la RAM y un archivo, y en este caso generalmente no se conoce como intercambio . Por ejemplo, cuando ejecuta un programa, el código debe cargarse en la memoria para ejecutarse; Si una página de códigos necesita ser expulsada de la RAM para dejar espacio para otra cosa, entonces no hay necesidad de escribir esta página en el área de intercambio, ya que se puede volver a cargar desde el archivo del programa. (Esto se puede hacer para todos los datos de solo lectura, no solo para el código del programa).
Si la memoria física está (casi) llena, el núcleo busca una página en RAM (no un proceso completo) que no se haya utilizado recientemente. Si esa página reproduce el contenido de un archivo de disco (hay tablas en el núcleo para indicar esto), la página puede ser reclamada. Si no, la página se escribe para intercambiar, luego se recupera. De cualquier manera, el kernel actualiza la entrada en la tabla de memoria virtual del proceso (que se convierte en la tabla MMU mientras se ejecuta el proceso) para marcarla como no en la RAM y luego puede reutilizar la página física para otra cosa (un programa diferente u otra página de el mismo programa)
fuente
La función de memoria virtual / paginación permite que un núcleo "virtualice" la memoria a los procesos del espacio de usuario. El núcleo puede tomar páginas de la memoria física y organizarlas mediante paginación para que parezcan contiguas a un proceso de espacio de usuario.
Se puede establecer un límite en la memoria de un proceso de espacio de usuario y si el proceso va más allá se produce un "error de página", lo que provoca una excepción de CPU que se devuelve al núcleo. Esto evita que el programa de espacio de usuario se meta con la memoria asignada al núcleo u otros programas, sin el permiso del núcleo.
Por lo general, los programas de espacio de usuario solicitan al núcleo que extienda este límite a través de interfaces bien definidas (llamadas por las funciones C
malloc()
y,free()
por ejemplo). El núcleo es responsable de realizar un seguimiento de la cantidad y la memoria que se asigna a un programa.Este mecanismo de "falla de página" también puede permitir que el kernel intercambie la página a la que el proceso intentaba acceder con una desde el disco, si el kernel puede sobreaprovisionar memoria (y tanto Windows como Linux lo admiten), de ahí por qué se llama intercambio. Si el acceso a la memoria era realmente inválido (es decir, el proceso está intentando acceder a la memoria que no solicitó primero), normalmente el proceso se eliminará con un SIGSEGV.
Por lo tanto, el "intercambio" es una característica adicional (en Linux puede deshabilitarla por completo si lo desea) que depende de la memoria virtual / paginación, pero no es necesaria solo porque una CPU tiene memoria / paginación virtual. Los conceptos no son los mismos, pero el intercambio depende de la paginación / memoria virtual que exista.
Además, después de leer más de cerca su pregunta, "paginación" a veces se utiliza como sinónimo de "intercambio", pero nunca he oído hablar de "intercambio", lo que significa que la memoria de todo el proceso se intercambia frente a "paginación", lo que significa solo parte de Se ha cambiado.
La "memoria virtual" es memoria física, simplemente "reasignada". El hardware MMU no se puede asignar directamente a ningún dispositivo de almacenamiento. La MMU puede generar una falla que le dice al núcleo que un proceso intentó acceder a la memoria que no debería tener, y el núcleo puede usar este mecanismo para ver que un proceso quiere recuperar algo del disco que creía que estaba en la memoria y luego hacer el " intercambiar". El punto es que es el sistema operativo el que decide guardar páginas en el disco para que pueda usar esas páginas para otros procesos, no el hardware.
fuente
En general, la partición de intercambio no es igual a la memoria virtual.
Los procesos pueden necesitar más memoria que la memoria física real, por lo que los desarrolladores de sistemas operativos decidieron asumir que hay más memoria en el sistema que se llama "memoria virtual".
Esta memoria virtual es básicamente memoria física y una parte del disco. Esta parte del disco se llama "intercambio" en Linux.
También los desarrolladores propusieron que el uso de la parte de la memoria virtual que se encuentra en el disco duro debe ser lo más bajo posible. En aras de ello, toda la memoria virtual se dividió en pequeñas porciones que se llaman "páginas". Se utilizan muchas páginas a baja velocidad, estas páginas deben escribirse en la parte de la memoria virtual del disco duro. Esta operación se llama "intercambio". El sistema operativo debe realizar un seguimiento de las páginas que no están en la memoria física para encontrarlas cuando sea necesario. El error de página ocurre cuando un programa quiere escribir / leer una parte de la memoria que se intercambia.
Para responder a su pregunta: Linux necesita una partición de intercambio para intercambiar algunas páginas de memoria y puede ver una estadística del uso de memoria virtual con
vmstat
:La columna 'intercambio' muestra intercambio y en estadística. También este enlace explica la memoria virtual y el uso de
vmstat
.fuente