¿Cuál es la diferencia entre memoria virtual y memoria principal?

Gracias por A2A.

La memoria principal o memoria real es la memoria que está físicamente presente. Es la memoria a la que todas las unidades de procesamiento de una computadora tienen acceso directo.
Por ejemplo: consulte las especificaciones técnicas de Macbook: https://www.apple.com/macbook-pr…, aquí “8 GB de memoria integrada DDR3L de 1600 MHz” es la memoria principal o RAM (memoria de acceso aleatorio).

Ahora, la memoria virtual es una ilusión proporcionada (por el sistema operativo, por ejemplo, Ubuntu / Windows / Mac OS) a todas las aplicaciones para que no tengan que preocuparse por la memoria principal disponible real. En un caso simple, usted escribe una aplicación (o programa) que puede ejecutarse (o ejecutarse) en sistemas (Ubuntu / Windows / Mac OS) sin preocuparse por la cantidad de memoria disponible.

Por supuesto, esta es una respuesta simplificada. Hay muchos detalles, puede comenzar con: http://en.wikipedia.org/wiki/Vir… para profundizar en los detalles.

(Yo era estudiante de informática cuando se inventó la memoria virtual).

En primer lugar, definamos la memoria de la computadora . La memoria de la computadora es donde las computadoras guardan las cosas en las que están trabajando (programas, datos, etc.). Hay dos tipos importantes de memoria para nuestros propósitos: memoria “principal” (a menudo llamada RAM) y memoria “secundaria” (a menudo un disco). Imagine que estaba haciendo un trabajo complejo y tenía muchos papeles y notas y cosas así en su escritorio, así como algunas cosas que no necesita de inmediato en sus estanterías. Cuanto más grande sea su escritorio, más fácil le resultará hacer su trabajo de manera eficiente. Y cuanto más grandes sean tus estanterías, más cosas podrías guardar allí. Bueno, en cierto modo, la memoria “principal” es la contraparte de la computadora de su escritorio y la memoria “secundaria” es su contraparte de los estantes de libros. Hay muchos tipos de memoria de computadora: vienen en diferentes tamaños y velocidades. Como regla general, los tipos de memoria más rápidos son más pequeños que los tipos más lentos y también suelen ser mucho más caros. La memoria “principal” (RAM) es donde la computadora hace la mayor parte de su trabajo. Suele ser un tipo de memoria rápida. La memoria “secundaria” (a menudo un disco de algún tipo) es donde la computadora almacena el resto de lo que necesita: es un tipo de memoria más lenta.

La memoria virtual es una forma de pretender que la computadora tiene más de esta memoria rápida y “principal” de la que realmente tiene. Los detalles específicos pueden variar mucho entre diferentes diseños de computadora y diferentes sistemas operativos, por lo que daré una explicación algo simplificada que evita los detalles y puede que no sea precisa con precisión en todos los casos.

Para comenzar , explicaré por qué necesita memoria virtual . Supongamos que usted y un amigo van a su amigable tienda de computadoras a comprar computadoras y el vendedor dice “esta computadora viene con 8 MB de memoria RAM, pero tiene la opción de actualizar a 16 MB”. Suponga que compra la actualización y obtiene una versión de 16 MB mientras su amigo decide no gastar el dinero extra y termina con la versión de 8 MB. Si los lleva a casa y los ejecuta uno al lado del otro, notará que cuando las computadoras están haciendo muchas cosas diferentes (varias ventanas abiertas), la versión de 8 MB es más lenta, aunque las computadoras tienen procesadores idénticos que funcionan a la misma velocidad . La diferencia se debe a los diferentes tamaños de memoria “principal” o RAM. Cada aplicación de software (cada ventana abierta, por ejemplo) necesita una cierta cantidad de memoria “principal” para funcionar. En total, está utilizando tantas aplicaciones a la vez que necesitan un total de más de 8 MB de memoria “principal”. [Es por eso que comprar memoria RAM adicional generalmente hace que su computadora sea más rápida].

Entonces, ¿qué hace la computadora cuando no tiene suficiente memoria “principal” para todas las aplicaciones abiertas? Con la memoria virtual, “finge” que hay suficiente memoria “principal”. Pero este proceso de “simulación” ralentiza las cosas.

A continuación , explicaré cómo funciona la memoria virtual . Aquí está la explicación ultra simple. En una computadora que admite memoria virtual, usted finge que tiene mucha memoria “principal”, pero el hecho es que parte de la memoria “principal” es real, la memoria RAM y otra parte es memoria más lenta (generalmente almacenada en un disco ) La computadora está diseñada de tal manera que puede escribir programas que no le importan qué tipo de memoria está utilizando realmente. La computadora obtiene cosas del disco cuando es necesario, y esto hace que funcione más lentamente cuando eso sucede.

Aquí hay una explicación más detallada. Toda la memoria se divide en bloques llamados “páginas” o “segmentos”. Asumiré que todos los bloques son del mismo tamaño (ha habido sistemas donde no lo son, pero eso complica innecesariamente la explicación). Un bloque de memoria puede tener un tamaño de 4KB. Hay dos “memorias principales” visibles para la computadora: memoria virtual y memoria real. La memoria “virtual” es una memoria imaginaria “principal” que en realidad consiste en una memoria “principal” real y una memoria “secundaria”. La computadora finge que es solo una memoria “principal” realmente grande. En la mayoría de las implementaciones, la memoria virtual es tan grande que contiene tanta memoria como la computadora puede utilizar (esto está determinado por una característica de hardware conocida como el tamaño del espacio de direcciones). [Tenga en cuenta que esta puede ser más memoria de la que realmente puede comprar para la computadora, porque esa cantidad de memoria podría no encajar físicamente en la computadora o podría consumir tanta energía que la fuente de alimentación de la computadora no podría manejarla, o para otros complejos técnicamente complejos razones.]

Esta enorme memoria virtual se divide en bloques (4KB cada uno en nuestro ejemplo). La memoria “principal” real consiste en una cantidad menor de memoria rápida, también dividida en bloques del mismo tamaño. La computadora funciona como si cada posible ubicación de memoria en la memoria virtual realmente existiera en la memoria “principal” real.

Entonces, ¿qué sucede cuando la computadora quiere algo en la memoria virtual que no está realmente en la memoria “principal”? Hay una gran tabla mantenida por el sistema operativo (a menudo con la ayuda del hardware) que indica qué bloques ocupan la memoria RAM real y cuáles no. Cuando un programa de software necesita usar una celda de memoria, la computadora primero determina en qué bloque está (esto es muy fácil y rápido). Si un bloque está en la memoria real, la tabla indica dónde está en la memoria real y la computadora simplemente va allí y accede a él. Si el bloque no está en la memoria real, la tabla indica dónde está en un dispositivo de almacenamiento secundario, como un disco. Entonces, cuando la computadora quiere algo de un bloque de memoria que realmente no está allí, va al disco y “intercambia” el bloque en la memoria principal real (a cambio de algún otro bloque de memoria que se “intercambia” por disco). Esto, por supuesto, lleva algo de tiempo y, por lo tanto, es mucho más lento.

Para resumir, cada vez que la computadora quiere acceder a algo en la memoria, el hardware mira la mesa y decide qué hacer: ir a la ubicación designada en la memoria real o intercambiar algo del disco.

Finalmente , hablaré sobre algunos temas relacionados.

Por un lado, la memoria virtual permite escribir aplicaciones de software que funcionan exactamente de la misma manera, ya sea que la computadora tenga mucha memoria “principal” o una pequeña cantidad. Este es un beneficio muy importante. Solía ​​trabajar en sistemas que no tenían memoria virtual y el software a menudo tenía que ser muy complicado para funcionar correctamente en sistemas de memoria de diferentes tamaños.

Ha habido mucho diseño creativo en el mundo de las computadoras y los sistemas operativos para hacer que los sistemas de memoria virtual funcionen un poco más rápido de lo que he descrito anteriormente. Pero aún son más lentos que los sistemas que tienen grandes cantidades de memoria “principal”.

La memoria virtual es un concepto que requiere una interacción muy íntima entre el sistema operativo y el hardware, por lo que es uno de los primeros ejemplos en los que las comunidades de software y hardware trabajaron juntas para mejorar las computadoras.

Un programa de ingeniería de software o ciencias de la computación enseñará memoria virtual en el segundo o tercer año del plan de estudios de licenciatura. Es una de esas cosas que un verdadero informático o ingeniero de software debe saber y que un programador o codificador a menudo no sabe mucho.

Cuando se inventó el marco principal, la memoria del núcleo magnético era lenta y los discos eran razonablemente rápidos, por lo que las arquitecturas se desarrollaron para usar ambos. La memoria volátil (se vacía cuando se corta la corriente) se llamaba PRIMARIA y la memoria no volátil que estaba disponible en el disco se llamaba SECUNDARIA. La jerga de la memoria principal es una alternativa a la primaria.
Virtual significa que no está directamente en el hardware y, al tener una velocidad similar, la memoria secundaria se usó como primaria virtual. El proceso virtual todavía se usa hoy en día, ya que Microsoft Windows, por ejemplo, intercambiará páginas de memoria entre el disco y la memoria RAM. También es posible lo contrario, la memoria se puede configurar como disco dando lugar al disco virtual, los usuarios de DOS en PC más antiguas harían esto para obtener una unidad de disquete virtual. Una vez utilicé un disquete virtual de tamaño gigabyte en un mainframe de IBM. ☺
La virtualización no es nada nuevo, IBM introdujo el concepto de máquina virtual en la década de 1970 que le permitiría configurar un sistema VM de IBM en muchas máquinas virtuales. Entonces virtual literalmente significa no real, donde real significa hardware. El espacio de direcciones es una abstracción, no un dispositivo mapeado físicamente.
Un esquema de direccionamiento virtual significa que no necesariamente hay direcciones físicas correspondientes, pero se pueden implementar si es necesario.

Por cierto, el término lógico tiene un significado similar, pero se refiere a cómo aparecen las cosas en lugar de cómo son técnica o físicamente. Entonces, una partición lógica solo aparece o se ve como una partición, aparece una eliminación lógica y se comporta como eliminada, pero en realidad está marcada u oculta. Entonces virtual significa no ser real, y lógico significa dar la apariencia de ser algo.

Oh, básicamente no hay correlación, y mucho menos “diferencia”.
Para decirlo de manera simple (y algo impreciso), la memoria principal es el chip que compra e instala en la placa base de su preciosa PC, probablemente de 1GB a 1TB.
Y la memoria virtual no tiene nada que ver con su hardware. Es un concepto de sistemas operativos y modelo de programa. La memoria virtual es una instalación proporcionada por el sistema operativo para cada aplicación, una ilusión de que la aplicación particular está utilizando memoria exclusiva de un rango consecutivo bastante grande (por ejemplo, 0 ~ 4G).
La memoria virtual puede ser mayor o menor que la memoria principal y no tiene correlación con su memoria principal (el chip). Algunos sistemas operativos proporcionan memoria virtual, mientras que otros no.

Hace mucho tiempo, cuando la computadora tenía mucha menos RAM, la memoria virtual era una forma de usar el disco para almacenar datos que no se usaban activamente. Hoy hay tanta RAM (memoria principal) que los datos que están en la memoria virtual se guardan en la memoria principal y no en el disco. Entonces, lo importante hoy en día es que la memoria virtual es un conjunto de números de dirección válidos que puede usar, pero solo está respaldada por la memoria principal cuando realmente almacena algo en ella. El sistema operativo promete permitirle usar todos los números de dirección que reservó, pero le asigna memoria principal solo cuando almacena algún programa o datos en un rango de dirección virtual particular (una página) por primera vez. Entonces, si mi programa reserva 1G de memoria virtual y usa 200 megabytes de ella y nunca usa los 800 megabytes restantes, entonces solo se me asignaron 200 megabytes de memoria principal. Eso sería lo mismo si pidiera 2G o 4G de memoria virtual, y todavía solo usara 200M. Sin embargo, el sistema está contando sus promesas y, en algún momento, si todos los programas sobreestiman enormemente la cantidad de almacenamiento que van a necesitar, entonces un sistema operativo pesimista preocupado por tener que cumplir sus promesas en el peor de los casos puede impedirle comenzar cosas nuevas hasta que algunas de las cosas viejas terminen. Por lo tanto, la memoria virtual no cuesta nada mientras no la use, pero reservar mucho más de lo que necesita puede alterar el sistema operativo.

La memoria virtual es solo un concepto, mientras que la memoria principal es algo que existe de forma física. Si está familiarizado con la RAM, esta es la memoria principal donde va el procesamiento máximo de datos. La memoria virtual es un concepto en el que puede ejecutar aquellos programas cuyo tamaño es mayor que el tamaño de su RAM. Espero que esto lo ayude.

Para un programa de aplicación, ninguno. El sistema operativo proporciona memoria virtual para ampliar el almacén de trabajo, y el programa funcionará a una velocidad que refleje la cantidad de intercambio que se está produciendo, pero el programador no puede hacer nada al respecto (principalmente)

Para el sistema operativo, se debe hacer mucho trabajo para que la memoria virtual parezca real, como explican otras respuestas.