(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.