É possível enviar manualmente programas para a memória virtual no Windows?

2

Se você tiver muitos programas abertos e sua máquina estiver muito alta na utilização de memória / CPU, convém fechar um programa sem perder seu estado (enviando-o para a memória virtual) e depois retomar o programa posteriormente. Isso é feito automaticamente pelo sistema operacional, mas o sistema operacional não sabe quanto tempo você deseja pausar seu programa para que ele se torne realmente lento, tentando manter partes de cada programa na memória e trocando outras partes pela memória virtual. Enviar manualmente um programa inteiro para a memória virtual e, em seguida, recuperá-lo no mesmo estado, quando desejado, seria um bom recurso, existe alguma ferramenta para fazer isso? ou pode ser escrito?

    
por Pietro Doninelli 05.12.2015 / 00:43

1 resposta

3

Seus programas estão sempre rodando na memória virtual o tempo todo. (A terminologia do Windows na caixa de diálogo em que você define o tamanho do arquivo de paginação é grosseiramente enganosa.)

O que você está pedindo é a capacidade de forçar um programa a ser paginado. Não há como fazer isso diretamente.

so it eventually becomes really slow by trying to keep pieces of every program on memory and swapping other pieces to virtual memory.

Isso não acontece. As páginas de memória que não estão sendo acessadas estão sempre disponíveis para serem liberadas para outros usos (e gravadas no disco conforme necessário); o sistema operacional não "tenta manter partes de cada programa" na memória, independentemente de estarem sendo acessadas. Se eles não estão sendo acessados, o que normalmente é o caso de páginas privadas de um programa ocioso, eles só permanecerão na memória até que haja pressão causada pelas necessidades de outros programas. (Até então, não há nenhum ponto em pagá-los, certo?)

Por meio do Windows XP, minimizar o Windows de um aplicativo forçaria uma limpeza do conjunto de trabalho, mas acho que o XP foi o último em que isso foi verdade.

Se você realmente quiser fazer isso, no entanto, você pode usar a ferramenta VMmap da SysInternals. Quando ele for iniciado, ele solicitará que você selecione um processo. Faça isso e selecione Visualizar | Conjunto De Trabalho Vazio.

No entanto, observe que isso libera apenas páginas para a lista de páginas modificadas ou em espera. (E isso apenas para páginas que não estão nos conjuntos de trabalho de quaisquer outros processos.) As páginas removidas para a lista modificada serão gravadas no arquivo de paginação e depois movidas para a lista de espera. Páginas na lista de espera são consideradas "disponíveis", mas até que sejam reaproveitadas para algum outro uso, elas ainda conterão o conteúdo do processo original.

O resultado líquido é exatamente o mesmo que o Windows fará se houver pressão pela memória disponível - você está apenas fazendo isso antes, antes que essas demandas realmente existam.

Detalhes completos são, claro, no capítulo Gerenciamento de Memória do Windows Internals por Solomon, Russinovich e Ionescu.

    
por 05.12.2015 / 07:12