operating system - ¿Cuál es la diferencia entre "memoria virtual" y "espacio de intercambio"?
operating-system terminology (4)
Existe cierta confusión con respecto al término Memoria virtual, y en realidad se refiere a los siguientes dos conceptos muy diferentes
- Usar páginas de disco para extender la cantidad conceptual de memoria física que tiene una computadora: el término correcto para esto es, en realidad, paginar
- Una abstracción utilizada por varios SO / CPU para crear la ilusión de que cada proceso se ejecute en un espacio de direcciones contiguo separado.
Intercambiar espacio, OTOH, es el nombre de la porción de disco utilizada para almacenar páginas RAM adicionales cuando no están en uso.
Una realización importante que hacer es que la primera es transparente posible debido al soporte de hardware y sistema operativo de la última.
Para tener un mejor sentido de todo esto, debe considerar cómo la "CPU" y el sistema operativo admiten la "memoria virtual" (como en la definición 2).
Supongamos 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 la tabla de la página
- Los últimos 12 bits constituyen el desplazamiento de página
Ahora, cuando la CPU intenta acceder al contenido de un puntero, primero consulta la tabla del Directorio de la página , una tabla que consta de 1024 entradas (en la arquitectura X86 cuya ubicación apunta el registro CR3). La entrada de directorio de página de 10 bits es un índice en esta tabla, que apunta a la ubicación física de la tabla de páginas . Esto, 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 sobre esto más adelante). Una vez que se ha encontrado una página, los últimos 12 bits se usan 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 capta la esencia de las cosas.
Usando este mecanismo de traducción, un sistema operativo puede usar un conjunto diferente de páginas físicas para cada proceso, dando a cada proceso la ilusión de tener toda la memoria por 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 megafonía . Uno de los bits de control discutidos anteriormente permite especificar si una entrada es "Presente". Si no está presente, un intento de acceder a esa entrada daría lugar a 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 , corregir 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 la memoria virtual y la paginación puede dar a los procesos la ilusión de tener más memoria que la presente mediante páginas de paginación (intercambio) 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 = 4 GB de memoria direccionable.
Espero que esto aclare un poco las cosas.
¿Puede alguien aclarar cuál es la diferencia entre la memoria virtual y el espacio de intercambio ?
¿Y por qué decimos que para el acceso a la memoria virtual máxima de la máquina de 32 bits es de solo 4 GB?
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 en direcciones físicas con el soporte de hardware y tablas de páginas. Por lo tanto, los procesos no tienen que ver con la cantidad de memoria física que tiene el sistema, o donde la instrucción o los datos realmente residen en la jerarquía de la memoria física. VM permite esta asignación. El elemento al que se hace referencia (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.
Intercambiar espacio es solo un lugar en la memoria secundaria donde las páginas se almacenan cuando están inactivas. Si no hay suficiente memoria RAM, el sistema operativo puede decidir cambiar las páginas de un proceso para dejar espacio a otras páginas de proceso. El procesador nunca ejecuta instrucciones o datos de lectura / escritura 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 las direcciones físicas aún podrían tener partes de él en el disco.
Aunque el hilo es bastante viejo 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 de la RAM de contenido en un disco. Siempre que se requiera 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 lo tanto, ambos también se usan indistintamente.
La memoria virtual es diferente a 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 usa para ocultar la información de la memoria física real del sistema. Extiende la memoria disponible de la computadora almacenando 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 una ilusión de un espacio de direcciones completo con direcciones que empiezan por cero. Es principalmente preferido por su característica de optimización por la cual reduce los requisitos de espacio. Se compone de la memoria 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 está reservada como una 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 núcleo localiza 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 que no se han visitado desde hace mucho tiempo se envían al área de espacio 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 al cambiar una página diferente. Por lo tanto, se puede concluir que la memoria de intercambio y la memoria virtual están interconectadas ya que la memoria de intercambio se usa para la técnica de la memoria virtual.
Hay una excelente explantación de la 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 está en el disco duro, que se usa cuando la memoria RAM está llena.
En cuanto a por qué la CPU de 32 bits está limitada a 4gb de memoria virtual, se aborda bien aquí :
Por definición, un procesador de 32 bits usa 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).