Si tiene muchos programas abiertos y su máquina tiene un uso excesivo de memoria/CPU, es posible que desee cerrar un programa sin perder su estado (enviarlo a la memoria virtual) y luego reanudarlo más tarde. Esto lo hace automáticamente el sistema operativo, pero el sistema operativo no sabe cuánto tiempo desea pausar su programa, por lo que eventualmente se vuelve muy lento al intentar mantener partes de cada programa en la memoria e intercambiar otras partes en la memoria virtual. Enviar manualmente un programa completo a la memoria virtual y luego recuperarlo en el mismo estado cuando se desee sería una buena característica. ¿Existe alguna herramienta para hacer esto? ¿O se puede escribir?
Respuesta1
Sus programas siempre se ejecutan en la memoria virtual todo el tiempo. (La terminología de Windows en ese cuadro de diálogo donde configura el tamaño del archivo de paginación es tremendamente engañosa).
Lo que está pidiendo es la capacidad de forzar la paginación de un programa. No hay manera de hacerlo directamente.
por lo que eventualmente se vuelve muy lento al intentar mantener partes de cada programa en la memoria e intercambiar otras partes en la memoria virtual.
Eso no sucede. Las páginas de memoria a las que no se accede siempre están disponibles para ser liberadas para otros usos (y escritas en el disco según sea necesario); el sistema operativo no "intenta mantener partes de cada programa" en la memoria, independientemente de si se accede a ellos. Si no se accede a ellas, como suele ser el caso de las páginas privadas de un programa inactivo, sólo permanecerán en la memoria hasta que haya presión causada por las necesidades de otros programas. (Hasta entonces no tiene sentido paginarlos, ¿verdad?)
A través de Windows XP, minimizar el Windows de una aplicación forzaría una purga del conjunto de trabajo, pero creo que XP fue el último en el que esto fue cierto.
Sin embargo, si realmente desea hacer esto, puede utilizar la VMmap
herramienta de SysInternals. Cuando se inicie te pedirá que selecciones un proceso. Haga eso, luego seleccione Ver | Conjunto de trabajo vacío.
Sin embargo, tenga en cuenta que esto solo libera páginas a la lista de páginas modificadas o en espera. (Y eso solo para páginas que no están en los conjuntos de trabajo de ningún otro proceso). Las páginas colocadas en la lista modificada se escribirán en el archivo de paginación y luego se moverán a la lista de espera. Las páginas en la lista de espera se consideran "disponibles", pero hasta que se reutilicen para algún otro uso, seguirán conteniendo el contenido del proceso original.
El resultado neto es exactamente el mismo que lo que hará Windows si hay presión por la memoria disponible: simplemente lo hará antes, antes de que tales demandas realmente existan.
Los detalles completos se encuentran, por supuesto, en el capítulo Gestión de la memoria dePartes internas de Windowspor Salomón, Russinovich y Ionescu.