Duda sobre Teorico de Memoria Virtual

Re: Duda sobre Teorico de Memoria Virtual

de Gustavo Brown -
Número de respuestas: 0

Sobre "Cuando un proceso es cargado, se hace una carga "perezosa" que solo carga a memoria lo que se necesite del proceso al momento de la carga."

eso es técnicamente correcto. La cuestión es definir ahora qué quiere decir "lo que se necesite".

El sistema operativo puede decidir cargar algunas páginas (las que va a necesitar para iniciar o continuar la ejecucion), pero también puede decidir no cargar absolutamente nada y que se generen fallos de página hasta que las páginas que se precisan se hayan cargado. Esto último es la denominada "paginación bajo demanda pura".

Lo importante es que el SO debe implementar una rutina de atención al fallo de página para cuando la MMU genera la trap porque la página que se quiere acceder no está mapeada a memoria fisica. 

Esta rutina debe chequear si la página es válida en el sentido de que forma parte del espacio virtual del proceso. Si no forma parte es un acceso erróneo y normalmente mataría al proceso.

Si la página es válida pero no esta cargada en memoria física (esto lo sabe porque si bien tiene el bit de válido/inválido en inválido, la información de la entrada en la tabla de páginas indica que en realidad lo que pasa es que está en disco) entonces tiene que traerla del disco. La ubicación de la página en el disco puede estar o bien en el Backing store (espacio de swap del disco) o bien en algún archivo que forme parte del programa (por ejemplo el ejecutable o una biblioteca). La información en la entrada de la tabla de páginas asociada a la página en cuestión le dice al SO de dónde obtener la página.

O sea, no importa si la página esta en espacio de swap o en un archivo, si la página no está en memoria residente (marco) entonces el bit de válido/inválido va a indicar que es inválido. De esa manera la MMU puede generar la trap cuando se intente acceder a dicha página.

Si se trata de memoria privada del proceso (por ejemplo el heap o el stack), entonces va a estar siempre en el espacio de swap (porque es la única copia de la página).

Si se trata de parte del código entonces puede estar en el espacio de swap o en el ejecutable. El SO puede decidir mantener una copia de las páginas "ejecutables" en el swap o directamente obtenerlas del propio archivo ejecutable.

Saludos,
  Gustavo