como digo siempre, para algunos ya muy conocido el tema, esta un poco ampliado y para otros les sirve para aprender algo mas de la memoria virtual, que es muy importante durante el trabajo de los procesos. Este post sale a partir de una pregunta que me hace un usuario.


La memoria virtual es una técnica que permite ejecutar procesos que no caben totalmente en memoria RAM (memoria física). Esto propicia la creación de programas que sean más grandes que la memoria física. Además, la memoria virtual ayuda a crear un esquema de abstracción de la memoria que la separa de la zona lógica que el usuario ve, esto facilita enormemente la tarea a los programadores puesto que no se han de preocupar por limitaciones de memoria. Los procedimientos de implementación de la memoria virtual se basan en que cuando se ejecuta un programa, éste está parcialmente en memoria, es decir, sólo hay cargada aquella zona de código y datos que se necesitan en ese instante de tiempo, y no el programa completo. La memoria virtual es la separación entre la memoria lógica disponible para el usuario y la memoria RAM, se implementa generalmente con el método de paginación por demanda aunque también se puede implementar en un sistema con segmentación.
En el momento en que en el sistema empieza a escasear la memoria, se crea un fichero SWAP (intercambio) en el disco que sirve como ampliación auxiliar de memoria. En el caso de Windows, cuando tenemos muchas aplicaciones en funcionamiento y la memoria RAM se agota, el sistema se apoya en el fichero SWAP para realizar movimientos desde el disco duro a la RAM y viceversa. De ese modo crean espacios en memoria física para ir ejecutando las órdenes. Esto, evidentemente, hace que el sistema vaya más lento.

Los sistemas de paginación de memoria dividen los programas en pequeñas partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.En un momento cualquiera, la memoria se encuentra ocupada con páginas de diferentes procesos, mientras que algunos marcos están disponibles para su uso. El sistema operativo mantiene una lista de estos últimos marcos, y una tabla por cada proceso, donde consta en qué marco se encuentra cada página del proceso.
De esta forma, las páginas de un proceso pueden no estar contiguamente ubicadas en memoria, y pueden intercalarse con las páginas de otros procesos.En la tabla de páginas de un proceso, se encuentra la ubicación del marco que contiene a cada una de sus páginas. Las direcciones lógicas ahora se forman como un número de página y de un desplazamiento dentro de esa página. El número de página es usado como un índice dentro de la tabla de páginas, y una vez obtenida la dirección real del marco de memoria, se utiliza el desplazamiento para componer la dirección real. Este proceso es realizado en el hardware del computador.De esta forma, cuando un proceso es cargado en memoria, se cargan todas sus páginas en marcos libres y se completa su tabla de páginas.

Paginación en memoria virtual
El único inconveniente del sistema de paginación pura es que todas las páginas de un proceso deben estar en memoria para que pueda ejecutar. Esto hace que si los programas son de tamaño considerable, no puedan cargarse muchos a la vez, disminuyendo el grado de multiprogramación del sistema. Para evitar esto, y aprovechando el principio de cercanía de referencias donde se puede esperar que un programa trabaje con un conjunto cercano de referencias a memoria (es decir con un conjunto residente más pequeño que el total de sus páginas), se permitirá que algunas páginas del proceso sean guardadas en un espacio de intercambio (en memoria secundaria) mientras no se necesiten.
Cuando la paginación se utiliza junto con memoria virtual, el sistema operativo mantiene además el conocimiento sobre qué páginas están en memoria principal y cuáles no, usando la tabla de paginación. Si una página buscada está marcada como no disponible (tal vez porque no está presente en la memoria física, pero sí en el área de intercambio), cuando la CPU intenta referenciar una dirección de memoria en esa página, la MMU responde levantando una excepción (comúnmente llamada fallo de página). Si la página se encuentra en el área de intercambio, se salta a una rutina que invoca una operación llamada un intercambio de página, para traer a memoria principal la página requerida. La operación lleva varios pasos:
Primero se selecciona una página en memoria, por ejemplo una que no haya sido usada recientemente (para más detalles ver algoritmos de reemplazo de páginas). Si la página fue modificada, se escribe la misma en el espacio de intercambio.
El siguiente paso en el proceso es leer la información en la página necesitada desde el espacio de intercambio). Cuando esto sucede, las tablas para traducción de direcciones virtuales a reales son actualizadas para reflejar los contenidos de la memoria física. Entonces el intercambio de página sale, y el programa que usó la dirección que causó la excepción es vuelto a ejecutar desde el punto en que se dio la misma y continúa como si nada hubiera pasado. También es posible que: una dirección virtual es marcada como no disponible, porque no fue localizada previamente. En estos casos, una página de memoria es localizada y llenada con ceros, la tabla de paginación es modificada para mostrar los cambios y el programa se reinicia como en el otro caso.


Para acceder a la configuración de la memoria virtual de Windows vamos a: Equipo/propiedades/Configuracion avanzada del sistema/rendimiento/configuración


la memoria virtual, configuracion


Nos saldrá una nueva ventana en la que elegimos la pestaña de opciones avanzadas y pinchamos en el botón que pone cambiar dentro de memoria virtual


memoria


ddr


Ram


Configuracion


Nos saldrá una tercera ventana en la que introduciremos cuantos MB queremos dejar para la memoria virtual.
Primero veremos las unidades que tiene nuestro equipo en este caso es un disco duro con tres particiones que son c: d: y e:y f:, debemos elegir una de ellas que será en la que estará nuestro archivo de paginación, lo mejor es usar una partición en la que no este el sistema operativo, en este caso Windows esta instalado en c: así que hemos elegido d:, en el caso de que tuviéramos dos discos duros lo suyo seria poner el archivo de paginación en el disco duro donde no este instalado el sistema operativo. Una vez seleccionado d: en el siguiente apartado elegimos "tamaño personalizado" para poder elegir nosotros cuantos MB queremos poner al archivo de paginación, el valor que debemos poner va en función de las características de nuestra maquina, pero por lo general se usa la cantidad que tenemos de memoria ram por 1,5 y si tenemos bastante espacio en el disco duro es la cantidad de memoria ram por 2, en este caso como tenemos dos gigas de memoria ram (2000MB) y espacio suficiente en el disco duro hemos puesto 4000MB (que sale de multiplicar 2000 por 2), así que en tamaño inicial ponemos 4000 y en tamaño final ponemos también 4000, mas adelante se explicara por que elegimos el mismo valor para el tamaño inicial y para el final. Pulsamos en el botón establecer para que coja los nuevos valores de la memoria virtual.


Windows


virtual


Si antes tenian el archivo de paginacion en c: despues de haber creado el nuevo en d: deben de eliminar el de c:, para ello selecionan la particion c:, despues selecionan la opcion de "sin archivo de paginacion" y clic en establecer. Si nos fijamos en esta caso en la parte de abajo a la izquierda vemos que actualmente tenemos 2047 MB que es lo asignado por Windows, esto no cambiara por nuestros 4000MB hasta que no reiniciemos en equipo. Una vez pulsado el botón establecer, pinchamos en aceptar y nos saldrá una ventana para reiniciar el equipo en xp y la ventana que se muestra en windows 7


la memoria virtual, configuracion

memoria

Clic en aceptar para que el equipo se reinicie y así aplique los cambios.

La explicación de porque usamos el mismo valor para el tamaño inicial y para el final es muy sencillo y tiene que ver con el scandisk, el scandisk lo que hace es tomar los archivos que tiene al final del disco duro y los coloca al principio(reordena), si por ejemplo desinstalamos un programa que tenemos hace mucho, ese programa estaría al principio del disco duro y al borrarlo dejaría un espacio sin datos al principio, entonces al pasar el scandisk todos los datos que hay después del programa que borramos tiene que volverlos a mover al principio. Ya que al estar todos los datos juntos tarda menos en acceder a ellos, además de eso, es que al estar al principio del disco duro es más rápido el acceso que si están los datos al final.
Después de esa breve explicación lo aplicamos a la memoria virtual, si dejamos que Windows administre el tamaño por si solo como hemos visto antes nos puso que usaba 2047 MB como memoria virtual, desfragmentariamos y reordenaría todos los datos el scandisk, pero si reiniciamos el equipo ese valor cambia por ejemplo a 1100MB en este caso hemos dejado un espacio libre en el disco duro de 947 MB sin datos(2047-1100=935), entonces si volviéramos a desfragmentar tendría que volver a reordenar todos los datos.
Nosotros ponemos el mismo valor en el tamaño inicial y en el final para que así siempre exista un fichero de un tamaño fijo, así por mucho que desfragmentes, el tamaño del archivo de paginación siempre será el mismo.
El archivo de paginación se llama pagefile.sys y podemos encontrarlo en la partición que hayamos elegido anteriormente y veremos que su tamaño es siempre el mismo.


espero les sea de ayuda, las capturas son de mi computadora, uds deben hacer el procedimiento de acuerdo a su configuracion