No Windows, o que é um processo “working set”?

4

Até o momento, não tive uma resposta satisfatória para essa pergunta, mas estou constantemente impressionado pelo número obsceno na coluna "Working Set" do Sysinternals Process Explorer. Alguém pode definir isso de uma maneira fácil de entender?

    
por Eric Smith 28.05.2009 / 17:21

6 respostas

9

O conjunto de trabalho pode ser definido como:

Bytes do conjunto de trabalho = Tamanho (RAM) - (Bytes disponíveis + bytes não-pagináveis do conjunto) + Bytes Residentes Paginados no Pool + Bytes Residentes no Cache do Sistema + Bytes Residente no Código do Sistema + Bytes Residentes do Driver do Sistema)

com as seguintes definições:

Bytes Nonpaged do Pool : eles representam alocações direcionadas ao pool não paginado, que são páginas de memória virtual definidas que sempre permanecem residentes na RAM. (Esses são bytes não pagináveis.) Os drivers de dispositivo e o sistema operacional usam o pool não paginado para armazenar estruturas de dados que devem permanecer na memória física e nunca podem ser paginadas para o disco. (Por exemplo, o driver TCP / IP deve alocar uma quantidade de memória não paginada para cada conexão TCP / IP ativa no computador para estruturas de dados necessárias durante o processamento de interrupções do adaptador de rede quando falhas de página não podem ser toleradas.)

Bytes Residentes Paginados pelo Pool : A maioria das páginas de memória virtual que são adquiridas no intervalo de endereços virtuais do Sistema Operacional podem ser paginadas. Os Bytes Residentes de Pool Paged representam os locais de memória do pool paginável que atualmente reside na RAM. Bytes residentes do cache do sistema: o cache de arquivos do sistema ocupa um intervalo reservado de endereços de memória virtual, alguns dos quais podem residir atualmente na RAM. (Segmentos de arquivos em cache também podem ser não-residentes e, nesse caso, eles devem ser buscados no disco quando forem referenciados pela execução de processos.)

Bytes residentes no cache do sistema : representa segmentos do cache de arquivos que atualmente residem na RAM.

Bytes residentes do código do sistema : locais de memória associados ao código do sistema que atualmente reside na RAM.

Bytes residentes do driver do sistema : locais de memória associados ao código do driver de dispositivo que atualmente reside na RAM.

    
por 28.05.2009 / 17:32
2

Aqui está minha explicação fácil de entender.

Um conjunto de trabalho do processo é a quantidade de RAM física que está sendo usada (referência), no total, para fazer seu trabalho.

Pode ser um pouco confuso porque também conta com espaço "compartilhado" na RAM. Por exemplo, se process1 precisar executar alguma dll do sistema, o sistema operacional o lerá na RAM. Se process2 também precisa executar esse sistema dll, o sistema operacional não precisa lê-lo na memória RAM, como já está lá. NO ENTANTO, a quantidade de RAM usada para armazenar o código dll do sistema aparecerá sob o conjunto de trabalho de ambos processos, já que ambos estão usando esse código para fazer seu trabalho.

Então, quando você vê um processo com um enorme conjunto de trabalho, pode haver uma boa quantidade de memória RAM que ele afirma usar e que está sendo compartilhado com outros processos, como o sistema operacional.

    
por 28.05.2009 / 17:44
1

Veja o MSDN?

"O conjunto de trabalho de um programa é uma coleção dessas páginas em seu espaço de endereço virtual que foram referenciadas recentemente".

Então, resumindo: intervalos de endereços (páginas) que estão sendo usados diretamente pelo aplicativo.

    
por 28.05.2009 / 17:31
0

O conjunto de trabalho é o conjunto de páginas de RAM que um processo precisa em um determinado momento. Pode variar com o tempo, crescer ou encolher. Imagine uma planilha: na maioria das vezes, você adiciona ou altera valores próximos ao final da planilha, mas toda noite você executa um relatório trabalhando com a planilha inteira. Como isso é armazenado na RAM, o conjunto de trabalho será pequeno durante o dia e crescerá para cobrir todo o conjunto de dados quando o relatório for executado.

Isso é importante porque, se o conjunto de trabalho do seu programa for maior que a RAM, você começará a se debater - continuamente trocando páginas de RAM no disco. O exemplo acima pode ser bom ou inevitável se você acessar apenas cada célula uma vez, mas se você precisar repetidamente de tudo, estará efetivamente limitado à velocidade de troca. Solução mais barata: adicione mais RAM. Solução mais complicada: reescreva seu programa para estar ciente do cache (arrays de acesso (m * n) com um passo de 1, 2, 3, 4, ... m + 1, m + 2, em vez de 0 * m + 0, 1 * m + 0, 2 * m + 0 ... n * m + 0, 0 * m + 1 ... n * m + n.

    
por 28.05.2009 / 18:31
0

O conjunto de trabalho do processo é as páginas do espaço de endereço virtual do processo que estão atualmente na memória (e marcadas como pertencentes ao conjunto de trabalho desse processo). Assim, é também a quantidade de páginas físicas (ou muito próximas) alocadas atualmente ao processo

Estas são normalmente as páginas em uso e mais recentemente usadas, na teoria de que estas são também as páginas que provavelmente serão necessárias no futuro, mas não necessariamente. É bem possível que um conjunto de trabalho de processo inclua muitas páginas que não foram usadas recentemente ou que talvez nunca sejam necessárias no futuro (por exemplo, "inchaço").

Esta é uma tendência geral na maioria dos sistemas operacionais de memória virtual, porque não há razão para não dar a um processo mais memória física (e, portanto, conjunto de trabalho) se nenhum outro processo precisar dele.

Note que o WS (conjunto de trabalho) não é a quantidade de espaço físico que um programa precisa, é a quantidade que ele tem .

    
por 28.05.2009 / 19:36
0

Aqui está uma representação visual da definição científica do modelo de conjunto de trabalho de Peter Denning (que não necessariamente corresponderia ao que os sistemas operacionais e especialmente o Gerenciador de Tarefas do Windows relataria a você).

Suponha que você tenha um conjunto de processos: {P1, P2, P3, P4}

E suponha que você tenha a seguinte lista de referências de páginas pelos processos ao longo do tempo:

    T-5  T-4  T-3  T-2  T-1
---------------------------
P1:  2,   3,   5,   4,   5
P2:  2,   3,   4,   1,   2
P3:  2,   3,   1,   4,   5
P4:  4,   5,   5,   2,   5 

Vamos supor também que você tenha um delta (dt) de 4.

Seu conjunto de trabalho é o conjunto de todas as referências de páginas exclusivas do tempo T-delta para T.

O conjunto de trabalho para cada processo no momento T é o seguinte:

P1: {3,4,5}
P2: {1,2,3,4}
P3: {1,3,4,5}
P4: {2,5}
    
por 01.12.2010 / 05:35