15 – Memoria Virtual

La memoria del computador no siempre es tan grande como quisieran los programadores. Sobre todo si tenemos en cuenta que el Sistema Operativo ocupa siempre buena parte de la memoria principal. Además, normalmente hay varios programas ejecutándose a la vez, cada uno requiere parte de la memoria. Esto de compartir el procesador entre varios programas puede hacerse porque hay tal disparidad entre los lentos procesos de entrada / salida y el rápido procesamiento que queda tiempo de sobra para atender otros programas mientras uno de ellos espera un dato de entrada o escribe un dato de salida (el SO se encarga de conmutar entre uno y otro programa). La técnica se justifica más en mainframes, donde suelen ejecutarse centenares de programas concurrentemente.

La Memoria Virtual es una técnica de manejo de memoria que ofrece al programador un espacio de memoria gigantesco. Tal espacio es virtual: no coincide con la cantidad de memoria real, física, instnalada. Las ventajas de esta técnica son varias:

  • El programador no necesita preocuparse mucho por optimizar su algoritmo en cuanto a memoria; al contrario, puede optimizarlo más respecto a tiempo de ejcuación utilizando más memoria para estructuras de datos intermedias, «memoization», etc.
  • El sistema operativo puede admitir más programas para ejecución concurrente, lo que aumenta el número de procesos terminados por unidad de tiempo
  • Se puede utilizar, como memoria principal, memorias más pequeñas, y por tanto más rápidas.

¿Cómo se logra la ilusión de una memoria gigantesca?

La memoria real (física) se considera dividida en bloques, llamados «marcos de página», típicamente de 1024 bytes. Similarmente, el espacio virtual (mucho mayor que el real) también está dividido en páginas. Los dos espacios se conectan a través de la Tabla de Páginas. La dirección virtual consta de dos partes: los bits más significativos representan la página; lo otros bits, el desplazamiento dentro de esa página. Utilizando los bits de página se entra a una tabla de página (que reside en memoria física) y allí se obtiene la dirección física qiue corresponda a esa página, sumando a esa dirección de origen el desplazamiento se accesa el byte o palabra correspondiente. Puede ocurrir sin embargo que la particular página que queremos accesar no está en ese momento en memoria principal, sino en disco (o memoria secundaria en general); en tal caso, debemos proceder a cargar la página, a traerla del disco a la memoria principal. La situación puede ser aún más compleja: que no haya espacio libre en memoria principal para carga la página requerida, en tnal caso hemos de libeerar espacio, respaldando en disco alguna página para ceder ese espacio y satisfacer el nuevo requerimiento de carga. Para implementar tales mecanismo se agrega a la tabla de página cierta información adicional, por un lado un bit, llamado bit de presencia, que nos dice si la página está actualmente en memoria o no; por otro lado se guarda tambien en la tabla información del uso reciente que se ha dado a cada ppagina, de este modo es posible elegir de manra óptima la página a respaldar en caso de que se necesite liberar espacio, la idea sería sacar de memoria principal alguna página que probablemente no se vayaa requerir en el futuro cercano.

y

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *