Conjunto de Trabalho
O conjunto de trabalho de um processo é o conjunto de páginas no espaço de endereço virtual do processo que atualmente residem na memória física. O conjunto de trabalho contém apenas alocações de memória pagináveis; Alocações de memória não pagináveis, como AWE (Extensões de Janela de Endereço ) ou alocações de páginas grandes , não estão incluídas no conjunto de trabalho.
Quando um processo faz referência à memória paginável que não está atualmente em seu conjunto de trabalho, ocorre uma falha de página . O manipulador de falhas da página do sistema tenta resolve a falha da página e, se for bem-sucedida, a página será adicionada ao conjunto de trabalho. (Acessar alocações de páginas grandes ou AWE nunca causa uma falha de página, pois essas alocações não são pagináveis.)
Uma falha de página difícil deve ser resolvida lendo o conteúdo da página do repositório de backup da página, que é o arquivo de paginação do sistema ou um arquivo mapeado na memória criado pelo processo. Uma falha de página flexível pode ser resolvida sem acessar o repositório de backup. Uma falha de página flexível ocorre quando:
- A página está no conjunto de trabalho de algum outro processo, portanto, ela já está residente na memória.
- A página está em transição, pois ela foi removida dos conjuntos de trabalho de todos os processos que estavam usando a página e ainda não foi reaproveitada ou já está residente como resultado de uma operação de pré-busca do gerenciador de memória.
- Um processo faz referência a uma página virtual alocada pela primeira vez (às vezes chamada de falha de demanda zero).
As páginas podem ser removidas de um conjunto de trabalho de processo como resultado das seguintes ações:
- O processo reduz ou esvazia o conjunto de trabalho chamando a função SetProcessWorkingSetSize, SetProcessWorkingSetSizeEx ou EmptyWorkingSet .
- O processo chama a função VirtualUnlock em um intervalo de memória que não está bloqueado.
- O processo não mapeia uma exibição mapeada de um arquivo usando a função UnmapViewOfFile .
- O gerenciador de memória corta páginas do conjunto de trabalho para criar mais memória disponível.
- O gerenciador de memória deve remover uma página do conjunto de trabalho para abrir espaço para uma nova página (por exemplo, porque o conjunto de trabalho está no tamanho máximo).
Se vários processos compartilharem uma página, remover a página do conjunto de trabalho de um processo não afetará outros processos. Depois que uma página é removida dos conjuntos de trabalho de todos os processos que a estavam usando, a página se torna uma página de transição. As páginas de transição permanecem armazenadas em cache na RAM até que a página seja referenciada novamente por algum processo ou reaproveitada (por exemplo, preenchida com zeros e fornecida a outro processo). Se uma página de transição tiver sido modificada desde a última gravação no disco (ou seja, se a página for "sujo"), a página deverá ser gravada em seu repositório de backup antes que possa ser reaproveitada. O sistema pode começar a escrever sujo páginas de transição para o repositório de backup assim que essas páginas estiverem disponíveis.
Cada processo tem um tamanho mínimo e máximo do conjunto de trabalho que afeta o comportamento de paginação de memória virtual do processo. Para obter o tamanho atual do conjunto de trabalho de um processo especificado, use a função GetProcessMemoryInfo . Para obter ou alterar os tamanhos mínimo e máximo do conjunto de trabalho, use as funções GetProcessWorkingSetSizeEx e SetProcessWorkingSetSizeEx .
O processo status PSAPI (interface de programação de aplicativo) fornece várias funções que retornam informações detalhadas sobre o conjunto de trabalho de um processo. Para obter detalhes, consulte Informações do Conjunto de Trabalho.