Guía Hardware

Memoria virtual: qué es y para qué sirve

Actualizado a: 19 de enero de 2024

La memoria virtual es un tipo de memoria muy importante, pero que pocos conocen o comprenden. Por eso, en este artículo te vamos a contar todo lo que deberías saber para que esta memoria no tenga secretos.

Quizás también te interese leer:

¿Qué es la memoria virtual? ¿Para qué se usa?

La memoria virtual no es un término tangible y físico como podría ser la memoria RAM. Se trata de una técnica para que la memoria secundaria también pueda aportar parte de su espacio como si fuena una extensión de la memoria princial, es decir, como parte de la RAM. Esta tecnica se utiliza por parte del sistema operativo, y desde el kernel se realiza su gestión junto con el planificador de procesos como veremos más adelante.

Por tanto, podemos decir que la memoria virtual usa hardware y software para permitir que el sistema disponga de un espacio de memoria superior al que realmente tiene. Y esto se hace transfiriendo los procesos desde la memoria RAM al medio de almacenamiento secundario y dejando libre hueco en la RAM para otros procesos con mayor prioridad.

Es decir, el SO tratará a ese espacio reservado del medio de almacenamiento SSD o HDD como si fuese una RAM. Y es que, la memoria RAM que incluyen los ordenadores no siempre es suficiente para ejecutar varios programas a la vez. Como sabes, cada software te indica los requisitos necesarios, pero ¿qué pasa cuando hay varios softwares funcionando en paralelo? Ahí es donde entra en juego esta memoria virtual, intercambiando procesos para dejar espacio libre en la RAM para que se procesen aquellos programas más prioritarios.

De esta forma, se puede hacer creer a los programas que existe más memoria principal de la que realmente hay instalada, y se mejora así el rendimiento multitarea. Sin embargo, hay que decir que la memoria virtual es considerablemente más lenta que la RAM. Y si el sistema operativo tiene que intercambiar procesos entre la memoria virtual y la RAM con demasiada frecuencia, también podría suponer un problema de rendimiento conocido como thrashing.

Esta memoria virtual se introdujo por primera vez en unos años donde la memoria RAM era realmente costosa, y solo se permitía tener unos cuantos megas físicos. Por esto, fue necesario un mecanismo que compensase la farta de memoria principal, emulando que parte del disco duro era como una extensión de la RAM.

Cómo funciona la memoria virtual

Para comprender el funcionamiento de la memoria virtual, hay que entender primero qué es un proceso. Un proceso no es ni más ni menos que un programa, compuesto de instrucciones y de datos que serán procesados en la CPU. Y para ello, hay que cargarlo primero desde el disco duro a la memoria RAM para que la CPU pueda acceder de forma más rápida a esta memoria.

Una unidad de gestión de memoria asignará las direcciones y las traducirá automáticamente. Y es que, el sistema estará manejando direcciones físicas (correspondientes a direcciones reales de la memoria RAM) y direcciones lógicas, que están apuntando a esa otra memoria fuera de la RAM.

De este modo, si la memoria RAM está llena de procesos y se necesita espacio para un proceso más urgente que los que están cargados, se pasará uno de esos procesos menos urgentes a la memoria secundaria, y se subirá el proceso prioritario a la RAM para que sea ejecutado por la CPU. Cuando termine, si no existe otro proceso más urgente, el proceso podrá ser recuperado de la memoria secundaria y cargada en la memoria primaria.

La memoria virtual será gestionada por el sistema operativo, que creará un número fijo de direcciones en archivos de paginación o archivos de intercambio. Así se sabe dónde está cada proceso y cuando se necesita, se puede subir la página a la memoria principal y traduciendo las direcciones virtuales en direcciones reales.

Hay que sdaber que la memoria virtual se puede gestionar desde el sistema operativo. Generalmente se tienen opciones para poder asignar más o menos de esta memoria en la unidad de almacenamiento secundaria. Por ejemplo, en los sistemas Unix y Unix-like, como Linux, Solaris, BSD, etc., se usa lo que se conoce como espacio o partición de intercambio (SWAP). También puede usarse un swapfile en su sustitución en Linux, por ejemplo. En el caso de Windows, se emplea pagefile.sys, un archivo donde se creará esta memoria virtual. Generalmente, los sistemas operativos suelen recomendar una cantidad determinada de de esta memoria virtual según las necesidades de propio sistema operativo y también dependiendo de la cantidad de memoria RAM instalada.

Ten en cuenta que en esta memoria virtual también se guardará el contenido de la memoria RAM en algunos casos, es decir, se hará un volcado de memoria. Por ejemplo, cuando se produce una hibernación. Así, el equipo puede dejar de suministrar energía a la RAM y los datos no se perderán, ya que están almacenados en la memoria no volátil y se podrá retornar la actividad cuando se inicia de nuevo.

Un poco de historia

Como sabes, los primeros ordenadores usaban solo tarjetas perforadas, pasando luego a las cintas magnéticas y similares, que se pueden considerar memorias secundarias. Sin embargo, para mejorar el rendimiento, se implementó la memoria RAM. Una memoria intermedia entre la CPU y la memoria secundaria que permitía un acceso más rápido que si se tuviesen que leer los datos desde la unidad secundaria.

Las primeras memorias primarias eran de núcleo magnético, mientras que las unidades secundarias se basaban en tambores magnéticos. Con el avance de la microelectrónica, y por el avance del tamaño y complejidad de los programas, se pueron mejorando las memorias.

Recordemos que en estas etapas tempranas, los programas usaban un proceso llamado superposición, es decir, cuando un software era más grande que la memoria disponible, se sobreescribían sobre otros programas.

En 1956, el físico alemán Firtz-Rudolf Güntsch, crearía el concepto de memoria virtual, aunque aquel concepto se parecía más a una memoria caché que a lo que actualmente conocemos como memoria virtual.

La memoria virtual como tal fue promovida en la Universidad de Manchester, Inglaterra. Allí se intento desarrollar un sistema de almacenamiento mejorado para la computadora Atlas. El sistema empleaba paginación para asignar direcciones virtuales a un programador que se alojaba en la memoria principal en todo momento. No obstante, aunque esto se desarrolló en 1959, no se pondría en práctica hasta 1962.

Antes se les adelantaría Burroughs Corp, que lanzaría al mercado el primer ordenador comercial con memoria virtual, y usaba segmentación en vez de paginación. Esto sería en 1961.

En este momento, algunos cuestionaban si la memoria virtual era mejor que la superposición. Pero IBM realizaría investigaciones al respecto concluyendo en 1969 que el sistema de memoria virtual era superior, haciendo que los mainframes y minicomputadoras los 70 pasasen a usar esta memoria virtual. En cambio, para que llegasen al IBM PV no sería hasta un poco más tarde, ya que las necesidades de un PC no eran tan altas como las de estos otros equipos de alto rendimiento.

Máquinas populares de la época con esta memoria virtual también fueron las IBM S/370, VAX de DEC,

Interl introduciría la memoria virtual en el modo protegido para sus 80286 en 1982 y el soporte de paginación para el 80386 de 1985. Lo mismo hicieron los demás fabricantes que creaban CPUs clones de los chips de Intel, como AMD, entre otros. Y, a partir de ese momento, todos comenzaron a implementarlo, tanto fuera como dentro del mundo del PC…

Memoria virtual: beneficios y limitaciones

Memoria virtual, Fuente: Sitesbay

Como casi todos los conceptos y tecnologías, la memoria virtual también tiene sus ventajas y desventajas.

Ventajas

Entre las principales ventajas de la memoria virtual tenemos:

  • Aumenta el número de direcciones de memoria asignables a los programas.
  • Permite ejecutar más aplicaciones a la vez.
  • Evita que el usuario tenga que ampliar su memoria RAM de forma tan constante.
  • Mejora el rendimiento cuando permite que procesos con mayor prioridad tengan hueco en la memoria RAM.
  • Aumenta la seguridad debido al aislamiento de la memoria.
  • Permite que los programadores dispongan de mayor cantidad de memoria que usar para sus desarrollos.
  • Los procesos son movidos de forma automática por parte del planificador del sistema operativo, sin la intervención del usuario, lo que significa mayor productividad y sencillez.

Desventajas

Por otro lado, también encontramos algunas desventajas de esta memoria virtual:

  • La memoria virtual asignada en la unidad de almacenamiento secundario estará limitada por la velocidad de acceso de dicha unidad. En los HDD es más lento, en los SSD esto ha mejorado, pero sigue siendo más lenta que la RAM.
  • Necesita de un soporte de software, por parte del sistema operativo para poder gestionarla, y también un soporte por parte del hardware para poder realizar las traducciones de las direcciones.
  • La memoria virtual estará limitada en capacidad debido a que la memoria secundaria también lo estará.
  • Si no se tiene suficiente RAM, el sistema se ralentiza si se abusa de esta memoria virtual.
  • Disminuye la cantidad de espacio en el disco duro que se puede asignar a otras cosas.

Tipos de memoria virtual: paginada y segmentada

Por otro lado, es importante conocer los tipos de memoria virtual existentes. Antes de nada, decir que la unidad de gestión de memoria o MMU de la que hemos hablado anteriormente, suele estar integrada en la CPU en los modernos procesadores. Y ésta será un componente esencial para traducir las direcciones y poder getionar todo el espacio de memoria.

Además, como ya sabes, las CPUs incluyen también varios niveles de memoria caché, que es una memoria que se integra dentro de la CPU y que es aún más rápida que la memoria RAM. Allí se almacenan los datos e instrucciones que probablemente se necesiten acceder nuevamente en un futuro para que la CPU pueda acceder a ellos más rápidamente.

Lo que quier decir con esto es que cuando la CPU busca un dato o instrucción, primero buscará en la memoria caché L1, si el TLB produce un hit o acierto, indicará que se encuentra en esta memoria y será accedido rápidamente, en pocos ciclos de reloj. En cambio, si se produce un fallo de caché se pasará a buscar al nivel inmediatamente superior, como el L2. Lo mismo, si está se produce un hit y se accede, costando algunos ciclos de reloj más que en el caso de la L1. Y si no está se produce un fallo y se pasa a buscar en el siguiente nivel, que puede ser la L3… Cuando se llega al último nivel de caché o LLC, y se produce un fallo, la CPU lo buscará en la memoria RAM y si tampoco estuviese aquí lo haría en la memoria secundaria… Bueno, más bien cuando el hardware hace un fallo en la RAM, será comunicado al kernel del sistema operativo y éste realizará una subida del proceso a la memoria RAM como explicaré en el último apartado.

La memoria del sistema puede estar por lo general paginada o segmentada. Y aquí es donde podemos diferenciar dos tipos de memoria virtual:

  • Paginada: divide la memoria en secciones denominadas páginas. Para saber dónde está la información, se asignará una tabla de páginas, como una especie de mapeo de la memoria paginada. De esta forma se pueden traducir las direcciones virtuales que emplea el sistema operativo y las direcciones físicas que emplea el hardware. Así se sabrá si las páginas a las que se debe acceder (leer o escribir) están en la memoria RAM o en la memoria virtual.
  • Segmentada: en vez de usar páginas para dividir la memoria virtual, se divide en segmentos. Este enfoque es diferente, ya que podemos tener segmentos de longitudes variables, mientras que las páginas eran de un tamaño fijo. Por lo demás los procesos se realizan de forma semejante a la paginada. Es decir, la diferencia entre la segmentación y la paginación simplemente difiere en el modelo de memoria en términos de cómo se divide el espacio de dicha memoria.

Todo esto se puede apreciar mejor en las imágenes que he adjuntado anteriormente.

Swapping

Por último, no se me podía olvidar un proceso muy importante en todo esto de la memoria virtual, y es el denominado swapping que realiza el sistema opertivo, es decir, el intercambio de procesos entre la RAM y la memoria secundaria como hemos comentado anteriormente.

Como se aprecia en la anterior imagen, la memoria RAM (representada en naranja) está siempre con el kernel del sistema operativo cargado, ya que éste siempre tiene que estar presente durante el funcionamiento normal. Y también existe un espacio reservado a los procesos del espacio de usuario, es decir, a los programas. Por otro lado tenemos la unidad de almacenamiento secundaria o disco duro en gris, donde también existen procesos en esa memoria virtual.

Pues bien, teniendo en cuenta esto, este procedimiento conocido como swapping tiene dos acciones:

  • Swapped in: es cuando se pasa un proceso de mayor prioridad a la memoria RAM para que pueda ser accedido por la CPU de forma más rápida. Como sabrás, los procesos en ejecución tienen sus prioridades asignadas por el planificador del sistema operativo. Por tanto, comprobando estos niveles de prioridad, se puede saber qué procesos deben ser adelantados y cuales se pueden poner en espera.
  • Swapped out: es el proceso contrario al anterior, es decir, liberar parte de la memoria RAM descargando un proceso menos prioritario a la memoria virtual para dejar hueco a otro de mayor prioridad.

Estos procesos de reemplazo se realizarán mediante algoritmos que implementan los sistemas operativos en su kernel. Algunos de estos algoritmos pueden ser LRU, FIFO, LIFO, etc. Aunque también se pueden usar varios. Los algoritmos empleados pueden variar de un sistema operativo a otro, y el uso de uno u otro será en función de lo que se necesite conseguir en cada caso. Además, como sabes, existen herramientas de administración del sistema con las que puedes variar la prioridad de los procesos en ejecución, como es nice en Linux, entre otros… Estas prioridades asignadas también serán tenidas en cuenta, por supuesto.

En algunos casos, hay que decir que se pueden quedar procesos que ya no están «vivos», pero que mantienen secuestrados los recursos de memoria, por lo que no pueden ser liberados para que otro proceso los ocupe. Esto es lo que se conoce en Linux, por ejemplo, como proceso zombie.

Espero que ahora comprendas un poco mejor la memoria virtual… No olvides comentar si tienes dudas…

Jaime Herrera

Jaime Herrera

Técnico electrónico y experto en el sector de los semiconductores y el hardware. Con una amplia y sólida trayectoria en el campo de la electrónica, he acumulado una extensa experiencia. Mi pasión por la tecnología y la informática me ha impulsado a dedicar décadas de mi vida al estudio y desarrollo de soluciones en este fascinante sector. Como técnico electrónico, he tenido el privilegio de trabajar en una variedad de proyectos y desafíos, lo que me ha permitido adquirir un profundo conocimiento y experiencia en la creación, diseño y mantenimiento de dispositivos electrónicos.

>
Guía Hardware
Logo