¿Cuál es la diferencia entre "memoria virtual" y "espacio de intercambio"?

85

¿Alguien puede aclararme cuál es la diferencia entre la memoria virtual y el espacio de intercambio ?

¿Y por qué decimos que para una máquina de 32 bits la memoria virtual máxima accesible es solo de 4 GB?

algo-geeks
fuente
@startblue cómo el enlace dado por usted es una respuesta a mi pregunta ..
algo-geeks
@ algo-geeks: de hecho, no es una respuesta, pero creo que se vincula a una respuesta que podría ser bastante útil para este tema. Y está escrito en el comentario, exactamente donde debería estar, en mi humilde opinión. :)
Muhamed Huseinbašić

Respuestas:

113

Hay una excelente explantación de memoria virtual en superusuario .

En pocas palabras, la memoria virtual es una combinación de RAM y espacio en disco que pueden usar los procesos en ejecución.

El espacio de intercambio es la parte de la memoria virtual que se encuentra en el disco duro, que se utiliza cuando la RAM está llena.

En cuanto a por qué la CPU de 32 bits está limitada a la memoria virtual de 4 GB, se aborda bien aquí :

Por definición, un procesador de 32 bits utiliza 32 bits para referirse a la ubicación de cada byte de memoria. 2 ^ 32 = 4.2 mil millones, lo que significa que una dirección de memoria de 32 bits de longitud solo puede referirse a 4.2 mil millones de ubicaciones únicas (es decir, 4 GB).

Shah viral
fuente
1
Entonces, ¿es la RAM real = virtual - intercambio?
user48956
4
Esta respuesta es completamente incorrecta. Una persona puede mapear en memoria un archivo de 1 GB 100 veces y usar 100 GB de memoria virtual en una máquina con solo 1 GB de RAM. No hay forma de agregar RAM y espacio en disco para obtener los 100 GB de memoria virtual que estaría en uso.
David Schwartz
@DavidSchwartz no realmente. La asignación de memoria de un archivo no lo carga en la memoria. Como tal, simplemente mapear un archivo de 1GB 100 veces no usará 100GB de nada.
Felix
1
@Felix Estás equivocado. Cuando dice que "no lo carga en la memoria", está usando la palabra "memoria" para referirse a la memoria física, es decir, RAM. Estamos hablando de memoria virtual , no de memoria física. La memoria virtual generalmente se crea cuando y según sea necesario, no se toma de un grupo fijo como lo es la memoria física.
David Schwartz
Entonces, ¿es solo una pregunta para informar? ¿Alguna vez tiene sentido siquiera contar cuánta memoria está mapeada? Como nunca usará tanto, ya sea en RAM o en intercambio.
Felix
60

Existe cierta confusión con respecto al término memoria virtual, y en realidad se refiere a los siguientes dos conceptos muy diferentes

  1. Uso de páginas de disco para ampliar la cantidad conceptual de memoria física que tiene una computadora: el término correcto para esto es en realidad Paginación
  2. Una abstracción utilizada por varios sistemas operativos / CPU para crear la ilusión de que cada proceso se ejecuta en un espacio de direcciones contiguo separado.

El espacio de intercambio, OTOH, es el nombre de la parte del disco que se usa para almacenar páginas de RAM adicionales cuando no está en uso.

Una conclusión importante a tener en cuenta es que lo primero es posible de manera transparente debido al soporte de hardware y sistema operativo del segundo.

Para entender mejor todo esto, debe considerar cómo la "memoria virtual" (como en la definición 2) es compatible con la CPU y el sistema operativo.

Suponga que tiene un puntero de 32 bits (los puntos de 64 bits son similares, pero usan mecanismos ligeramente diferentes). Una vez que se ha habilitado la "Memoria virtual", el procesador considera que este puntero se compone de tres partes.

  • Los 10 bits más altos son una entrada de directorio de página
  • Los siguientes 10 bits son una entrada de tabla de páginas
  • Los últimos 12 bits forman el desplazamiento de página

Ahora, cuando la CPU intenta acceder al contenido de un puntero, primero consulta la tabla Page Directory , una tabla que consta de 1024 entradas (en la arquitectura X86, cuya ubicación apunta el registro CR3). La entrada del directorio de páginas de 10 bits es un índice en esta tabla, que apunta a la ubicación física de la tabla de páginas . Esta, a su vez, es otra tabla de 1024 entradas, cada una de las cuales es un puntero en la memoria física y varios bits de control importantes. (Volveremos a esto más tarde). Una vez que se ha encontrado una página, los últimos 12 bits se utilizan para encontrar una dirección dentro de esa página.

Hay muchos más detalles (TLB, páginas grandes, PAE, selectores, protección de página) pero la breve explicación anterior captura la esencia de las cosas.

Al usar este mecanismo de traducción, un sistema operativo puede usar un conjunto diferente de páginas físicas para cada proceso, lo que le da a cada proceso la ilusión de tener toda la memoria para sí mismo (ya que cada proceso obtiene su propio directorio de páginas)

Además de esta memoria virtual, el sistema operativo también puede agregar el concepto de paginación . Uno de los bits de control discutidos anteriormente permite especificar si una entrada está "Presente". Si no está presente, un intento de acceder a esa entrada resultaría en una excepción de error de página . El sistema operativo puede capturar esta excepción y actuar en consecuencia. Los sistemas operativos que admiten el intercambio / paginación pueden decidir cargar una página desde el espacio de intercambio , arreglar las tablas de traducción y luego emitir el acceso a la memoria nuevamente.

Aquí es donde se combinan los dos términos, un sistema operativo que admita memoria virtual y paginación puede dar a los procesos la ilusión de tener más memoria de la que realmente está presente al paginar (intercambiar) páginas dentro y fuera del área de intercambio.

En cuanto a su última pregunta (¿Por qué se dice que la CPU de 32 bits está limitada a 4 GB de memoria virtual?). Esto se refiere a la "memoria virtual" de la definición 2 y es un resultado inmediato del tamaño del puntero. Si la CPU solo puede usar punteros de 32 bits, solo tiene 32 bits para expresar diferentes direcciones, esto le da 2 ^ 32 = 4GB de memoria direccionable.

Espero que esto aclare un poco las cosas.

Yonatan
fuente
12

En mi humilde opinión, es terriblemente engañoso utilizar el concepto de espacio de intercambio como equivalente a la memoria virtual. VM es un concepto mucho más general que el espacio de intercambio. Entre otras cosas, VM permite que los procesos hagan referencia a direcciones virtuales durante la ejecución, que se traducen a direcciones físicas con el soporte de hardware y tablas de páginas. Por lo tanto, los procesos no se preocupan por cuánta memoria física tiene el sistema, o dónde residen realmente la instrucción o los datos en la jerarquía de la memoria física. VM permite este mapeo. El elemento referenciado (instrucción o datos) puede residir en L1, L2 o RAM, o finalmente en el disco, en cuyo caso se carga en la memoria principal.

El espacio de intercambio es solo un lugar en la memoria secundaria donde se almacenan las páginas cuando están inactivas. Si no hay suficiente RAM, el sistema operativo puede decidir intercambiar páginas de un proceso para dejar espacio para otras páginas de proceso. El procesador nunca ejecuta instrucciones ni lee / escribe datos directamente desde el espacio de intercambio.

Tenga en cuenta que sería posible tener espacio de intercambio en un sistema sin VM. Es decir, los procesos que acceden directamente a direcciones físicas, aún podrían tener partes en el disco.

SavorALinux
fuente
5

Aunque el hilo es bastante antiguo y ya ha sido respondido. Todavía me gustaría compartir este enlace ya que esta es la explicación más simple que he encontrado hasta ahora. El siguiente enlace tiene diagramas para una mejor visualización.

Diferencia clave: la memoria virtual es una abstracción de la memoria principal. Extiende la memoria disponible de la computadora almacenando las partes inactivas del contenido RAM en un disco. Siempre que se requiere el contenido, lo recupera en la RAM. La memoria de intercambio o el espacio de intercambio es una parte de la unidad de disco duro que se utiliza para la memoria virtual. Por tanto, ambos también se utilizan indistintamente.

La memoria virtual es muy diferente de la memoria física. Los programadores obtienen acceso directo a la memoria virtual en lugar de a la memoria física. La memoria virtual es una abstracción de la memoria principal. Se utiliza para ocultar la información de la memoria física real del sistema. Extiende la memoria disponible de la computadora al almacenar las partes inactivas del contenido de la RAM en un disco. Cuando se requiere el contenido, lo recupera en la RAM. La memoria virtual crea la ilusión de un espacio de direcciones completo con direcciones que comienzan con cero. Se prefiere principalmente por su función de optimización mediante la cual reduce los requisitos de espacio. Está compuesto por la RAM disponible y el espacio en disco.

La memoria de intercambio generalmente se denomina espacio de intercambio. El espacio de intercambio se refiere a la parte de la memoria virtual que se reserva como ubicación de almacenamiento temporal. El espacio de intercambio se utiliza cuando la RAM disponible no puede cumplir con los requisitos de la memoria del sistema. Por ejemplo, en el sistema de memoria Linux, el kernel ubica cada página en la memoria física o en el espacio de intercambio. El kernel también mantiene una tabla en la que se guarda la información sobre las páginas intercambiadas y las páginas en la memoria física. Las páginas a las que no se ha accedido desde hace mucho tiempo se envían al área de intercambio. El proceso se conoce como intercambio. En caso de que se requiera la misma página, se intercambia en la memoria física intercambiando una página diferente. Así,

diferencia-entre-memoria-virtual-y-memoria-de-intercambio

ram619
fuente
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada. - De la opinión
abrigo
Gracias, mejoró la publicación.
ram619
0

"Memoria virtual" es un término genérico. En Windows, se llama paginación o paginación. En Linux, se llama Swap.

Hemanth Kumar R
fuente