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

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

Se você tiver muitos programas abertos e sua máquina estiver com muita utilização de memória/CPU, você pode querer fechar um programa sem perder seu estado (enviando-o para a memória virtual) e então retomar o programa mais tarde. Isso é feito automaticamente pelo sistema operacional, mas o sistema operacional não sabe quanto tempo você deseja pausar seu programa, então ele eventualmente fica muito lento, tentando manter partes de cada programa na memória e trocando outras partes para a memória virtual. Enviar manualmente um programa inteiro para a memória virtual e depois recuperá-lo no mesmo estado quando desejado seria um recurso interessante. Existe alguma ferramenta para fazer isso? ou pode ser escrito?

Responder1

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

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

então, eventualmente, fica muito lento, tentando manter partes de cada programa na memória e trocando outras partes para a memória virtual.

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 em disco conforme necessário); o sistema operacional não "tenta manter partes de cada programa" na memória, independentemente de estarem sendo acessados. Se não estiverem sendo acessados, o que normalmente acontece em 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 faz sentido paginá-los, certo?)

Através 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 aconteceu.

Se você realmente deseja fazer isso, você pode usar a VMmapferramenta da SysInternals. Ao iniciar, ele solicitará que você selecione um processo. Faça isso e selecione Exibir | Conjunto de trabalho vazio.

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

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

Detalhes completos estão, obviamente, no capítulo Gerenciamento de memória doInternos do Windowspor Solomon, Russinovich e Ionescu.

informação relacionada