¿Qué es la memoria virtual?

27

Estaba revisando dos veces mis notas para 'Memoria virtual' y la definición en mi libro de texto es:

Proceso de asignación de una sección de almacenamiento secundario para actuar como parte de la memoria principal

Donde como dice Wikipedia :

La memoria virtual es una técnica de sistema informático que da a un programa de aplicación la impresión de que tiene memoria de trabajo contigua (un espacio de direcciones)

y (Wikipedia también dice)

Tenga en cuenta que "memoria virtual" es más que simplemente "usar espacio en disco para ampliar el tamaño de la memoria física"

¿Alguien puede ofrecer alguna aclaración sobre cuál es la correcta?

Yacoby
fuente
Creo que la nota de Wikipedia implica algunas calificaciones sobre lo que se usa en términos de cosas contiguas.
JB King
Esta pregunta probablemente obtendría una mejor respuesta en SO.
Capitán Segfault
2
No confunda lo que es la memoria virtual con cómo se usa. La primera oración de Wikipedia es definir qué es. Su libro habla sobre cómo se usa típicamente. Una vez que las personas hablan de "páginas", hablan de una implementación específica de la memoria virtual.
Tony Lee
2
Su libro de texto es simplemente incorrecto. Hay muchas máquinas con memoria virtual y sin almacenamiento secundario. Del mismo modo, una vez hubo muchas máquinas que podían usar el almacenamiento secundario como parte de la memoria principal pero no admitían la memoria virtual. La "memoria virtual" es algo que no es memoria pero se accede como memoria. Su libro de texto está definiendo intercambio o paginación.
David Schwartz
1
El libro de texto lo define completamente incorrectamente, el almacenamiento secundario no es parte de la definición. E incluso la afirmación de Wikipedia sobre "más que espacio en el disco" es engañosa, porque puede no involucrar el disco en absoluto; esa afirmación parece que es "extender la memoria al disco" más algo más.
Kelvin

Respuestas:

41
Note that "virtual memory" is more than just "using disk space to extend physical memory size"

La memoria virtual es una capa de abstracción proporcionada a cada proceso. La computadora tiene, digamos, 2GB de RAM física, dirigida de 0 a 2G. Un proceso puede ver un espacio de direcciones de 4 GB, que tiene completamente para sí mismo. La asignación de direcciones virtuales a direcciones físicas es manejada por una unidad de administración de memoria, que es administrada por el sistema operativo. Normalmente esto se hace en "páginas" de 4KB.

Esto le da varias características:

  1. Un proceso no puede ver la memoria en otros procesos (¡a menos que el sistema operativo lo desee!)
  2. La memoria en una dirección virtual dada puede no estar ubicada en la misma dirección física
  3. La memoria en una dirección virtual se puede "paginar" en el disco y luego "paginar" cuando se accede nuevamente.

Su libro de texto define la memoria virtual (incorrectamente) como solo # 3.

Incluso sin ningún intercambio, debe tener especialmente en cuenta la memoria virtual si escribe un controlador de dispositivo para un dispositivo que hace DMA (acceso directo a memoria). Su código de controlador se ejecuta en la CPU, lo que significa que sus accesos a la memoria son a través de la MMU (virtual). El dispositivo probablemente no pasa por la MMU, por lo que ve direcciones físicas sin formato. Entonces, como escritor de controladores, debe asegurarse de:

  1. Cualquier dirección de memoria sin formato que pase al hardware es física, no virtual.
  2. Cualquier bloque de memoria grande (de varias páginas) que envíe es físicamente contiguo. Una matriz de 8K podría ser prácticamente contigua (a través de la MMU) pero dos páginas separadas físicamente. Si le dice al dispositivo que escriba 8K de datos en la dirección física correspondiente al inicio de esa matriz, escribirá el primer 4K donde espera, pero el segundo 4K dañará algo de memoria en alguna parte. :-(
Capitán Segfault
fuente
4

Intentaré comenzar lentamente, y luego armar todo esto para ti. Es como esto:

La memoria virtual, como se usa comúnmente, se refiere a "paginación". Como su nombre indica, la paginación es como un bloc de notas humano.

Cuando trabajas con sumas simples o aprendes información simple, lo haces todo en tu cabeza: solo cargas toda la información, la procesas y obtienes la respuesta. Esto es como una computadora que carga archivos desde el disco duro: carga los programas o imágenes u otra información que necesita para trabajar en su "memoria real" (o "memoria física") y trabaja en ellos con su "cerebro" ( su procesador).

Sin embargo, cuando está aprendiendo información compleja o trabajando con sumas complejas, es posible que no pueda acomodar todo eso en su cabeza a la vez. Te confundes, comienzas a reducir la velocidad, no logras mantener todo ahí a la vez y tienes que olvidar algo para recordar otra cosa.

La solución humana es usar un bloc de notas. Anotamos en las páginas todas las cosas que no podemos recordar a la vez, pero nos referimos a ellas mientras hacemos las sumas. Es posible que no podamos recordar una gran lista de cifras de ventas para el mes, pero podemos mirar las páginas, obtener la información poco a poco y procesar cada bit. Esto es como la computadora "paginando" su memoria: escribiendo páginas llenas de información, y poniéndola en "memoria virtual" para referencia posterior, y dándose cuenta de que necesita una página, y cargando esa página desde la memoria virtual a la memoria real. En Linux y Unix, el lugar donde se almacenan estas páginas se llama literalmente un "archivo de páginas", y las páginas de datos en la memoria se llaman literalmente "páginas". Los diferentes sistemas tienen diferentes nombres para estas cosas, pero el concepto general es muy similar.

Entonces, realmente, la paginación es muy simple. Todas las páginas de información no caben en la memoria, por lo que algunas páginas se colocan en el disco y se vuelven a cargar más tarde.

Ahora, donde se vuelve más complicado es que, los sistemas modernos cuentan con mapeo de memoria y protección de memoria, que generalmente es manejada por el mismo sistema de hardware en la computadora: la unidad de administración de memoria, o MMU.

En una computadora multitarea (moderna), que puede ejecutar muchos programas a la vez y cuenta con protección de memoria, cada programa generalmente está separado de otros programas que se ejecutan en el mismo sistema. De esta manera, un programa no puede alterar otro programa simplemente accediendo a su memoria: la MMU separa físicamente el espacio de direcciones de un programa del de los demás. En otras palabras, los programas del usuario no ven los programas de otros usuarios o incluso otros programas. No ven la "memoria real", ven su propia "memoria virtual".

Ahora, este concepto de aislamiento de memoria y el concepto de archivo de paginación son dos cosas conceptualmente diferentes, lo que probablemente es la razón por la que estás confundido. Sin embargo, la clave es que ambos funcionan utilizando la MMU, la unidad de administración de memoria, que divide la memoria en páginas y asigna las páginas a un espacio de dirección virtual.

Entonces, cuando un programa solicita la memoria en una determinada "dirección de memoria", lo que realmente sucede es que se buscan las páginas de memoria para ese programa y sus direcciones correspondientes (el "espacio de direcciones" del programa) y la página que corresponde a ese bloque de memoria se encuentra. Esa página puede cargarse en algún lugar de la memoria real, en cuyo caso el programa tiene acceso, o puede paginarse en un disco. Si está paginado, desencadena un "error de página": se accede al disco y la página se carga en la memoria. Por lo tanto, el programa funciona incluso cuando no hay suficiente memoria, pero se ejecuta LENTAMENTE, si tiene que usar el disco para lo que normalmente sería un acceso de memoria muy rápido.

Ahora, si no hay suficiente espacio para cargar esa página en la memoria, entonces tiene un problema. En ese caso, alguna OTRA página que ya está en la memoria debe "intercambiarse" en el disco, de modo que se pueda cargar la página del primer programa. O bien, pueden ser igualmente páginas del mismo programa. A veces, esto se ve en programas gráficos, por ejemplo, en sistemas con mucha carga, cuando parte de la imagen se carga lentamente y se dibuja rápidamente, luego la siguiente parte se carga igualmente lentamente y se dibuja rápidamente, y cuando vuelve a trabajar con la primera parte, es lento OTRA VEZ. Esto se debe a que se están cargando para trabajar, luego se cambian nuevamente, para que se pueda trabajar en otra cosa. Obviamente, esta es una forma muy lenta de trabajar, y lo que realmente necesita es más memoria REAL.

Lee B
fuente
Estoy 100% en desacuerdo con esta respuesta. Si "memoria virtual" se refería a la paginación, entonces un sistema que no pagina (digamos, uno sin intercambio o archivos de página habilitados) no podría soportar la memoria virtual. Pero eso es obviamente una locura.
David Schwartz
@DavidSchwartz: inicialmente tuve una reacción similar a la tuya, pero al leer la respuesta con más detalle, no creo que sea tan mala. Considere Wikipedia / memoria virtual / Paged dice "Casi todas las implementaciones de memoria virtual dividen un espacio de dirección virtual en páginas, bloques de direcciones de memoria virtual contiguas". Es decir, "paginación", en sentido amplio, no requiere un archivo de página , sino que se refiere a la asignación de direcciones virtuales en direcciones físicas.
ToolmakerSteve
1
Hmm, por otro lado, Lee dice: "Todas las páginas de información no caben en la memoria, por lo que algunas páginas se colocan en el disco y se vuelven a cargar más tarde", por lo que David tiene razón: esta respuesta pierde el hecho esencial de que la paginación no se trata solo de paginación al disco . En el lado positivo, Lee continúa mencionando otros beneficios de la memoria virtual (aislamiento de memoria). Si esta respuesta se redactara nuevamente para no confundir las "páginas de mapeo de la memoria virtual" con "paginación al disco", sería más útil.
ToolmakerSteve
@ToolmakerSteve El problema es que este es un concepto erróneo muy común y cualquier cosa que fortalezca ese concepto erróneo es, en mi opinión, algo malo. Es especialmente malo aquí cuando esta respuesta trata de explicar los conceptos muy básicos en un asunto muy simple: ¡allí es lo más importante no sentar las bases basadas en un error común!
David Schwartz
@DavidSchwartz - Estoy de acuerdo. Tiene razón, él no está definiendo "memoria virtual", está definiendo "cómo funciona un archivo de página". Al principio pensé que el problema era simplemente que Lee no distinguía entre "paginación = mapear páginas de memoria de virtual a físico" versus "archivo de página = mapear páginas a disco", pero después de volver a leer, realmente solo estaba hablando sobre el mapeo al disco. (Como podemos ver, de la cita del libro de texto, de todas las otras respuestas, excepto del Capitán, y de una búsqueda en Google, esta combinación de los dos conceptos está muy extendida. Estoy seguro de que he sido culpable de ello)
ToolmakerSteve
0

Sé que es demasiado tarde ... pero aún así me pareció útil.

  • Todos son correctos en función de diferentes puntos de vista.
  • La memoria virtual es una técnica de administración de memoria, mientras que la memoria de intercambio era un área en la unidad de 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 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
  • Puede consultar el siguiente enlace para obtener más detalles.
sivaramaraju
fuente
-2

Bueno, si entendemos la palabra virtual, creo que podemos entender cómo se relaciona con la memoria.

"Virtual" como se define en Dictionary.com: "simulado o extendido temporalmente por un software de computadora: un disco virtual en RAM; memoria virtual en un disco duro".

En el caso de la memoria virtual, el sistema está simulando la memoria del sistema utilizando recursos de memoria más lentos (es decir, disco duro, memoria USB, etc.). Cuando se requiere memoria adicional, el sistema intercambiará datos en la memoria del sistema que no son necesarios para el disco duro. unidad o recurso que ha configurado. Esto libera memoria del sistema para que su aplicación pueda continuar la tarea que estaba haciendo.

El intercambio es un proceso continuo y, por lo tanto, si actualiza su memoria, debería ver una mejora en el rendimiento ya que el sistema no debería requerir el intercambio para desacelerar la memoria.

Racter
fuente
-2

La memoria virtual es una característica de un sistema operativo (SO) que permite que una computadora compense la escasez de memoria física transfiriendo temporalmente páginas de datos desde la memoria de acceso aleatorio (RAM) al almacenamiento en disco.

Lo que significa que es como un espejo o una memoria de muestra que se utiliza en una máquina virtual o una caja virtual para probar los sistemas operativos sin formatear la computadora.

Eric Buenaventura
fuente
No, eso es paginación.
David Schwartz el
-4

La memoria virtual es un bloque de su disco duro que el sistema usa como un archivo de paginación además de la RAM física.

Se vuelve complicado, y a veces lento, porque Windows NO desfragmenta esta parte de su disco duro.

Los 2 mejores consejos que puedo ofrecer: 1) Virt Mem debe establecerse en min y max en aproximadamente 1.5X su memoria física. ex. 2GB RAM = 3070MB Virt. 2) Al desfragmentar, apague el archivo de paginación. Defrag 2x, y restablecer de nuevo al número original. Esto proporciona una porción de disco limpia y aumentará la velocidad del archivo de paginación.

Anarkie
fuente
1
Eso no es completamente cierto: los administradores de memoria modernos virtualizan TODA la memoria del sistema. Esto es lo que permite la separación del proceso: cada proceso solo puede tocar su propia memoria. El administrador de memoria es responsable de asignar estas páginas virtuales al almacenamiento real y, opcionalmente, a un disco fijo.
Anthony Giorgio
1
"Windows NO desfragmenta esta parte de su disco duro". simplemente inserte pagefile.sys, reinicie, desfragmente el disco y vuelva a habilitar la paginación, ¡voilá, un archivo de paginación nuevo y contiguo! sin embargo, PageDefrag de Sysinternals hace un mejor trabajo, ya que también colocará el archivo de página al comienzo de la unidad / partición para un mejor rendimiento.
1
Si esta respuesta fuera correcta, entonces un sistema Windows sin archivos de página configurados no podría proporcionar ningún soporte de memoria virtual. Pero esto obviamente está mal. Tal sistema aún podría, por ejemplo, mapear archivos en el espacio de direcciones del proceso en exceso de RAM física, que es un ejemplo de memoria virtual.
David Schwartz