Falhas de página sem arquivo de swap?

4

encontrei a pergunta óbvia e também é irmão maior no ServerFault .

Mas a minha pergunta é diferente: Se as falhas de página são os momentos em que o sistema operacional precisa carregar algo do arquivo SWAP, por que recebo falhas de página mesmo se eu o tiver desativado completamente?

Ou eu entendi mal o que é uma falha de página?

Bobby
fonte

Respostas:

5

Um pouco velho, mas confira isto Artigo do MSDN.

Descreve os dois tipos de falhas de página.

Faltas duras é o que você está pensando - são onde os dados não estão na RAM e precisam ser extraídos do arquivo de troca. Eles prejudicam o desempenho (sendo 10 000 vezes mais lentos do que o acesso à RAM para discos rígidos mecânicos).

Falhas suaves , no entanto, são acionados por páginas que o programa solicita para ser zero (demanda zero páginas), quando uma página é gravada pela primeira vez (se era uma cópia na página de gravação) ou se a página já está na memória em outro lugar (geralmente quando compartilhado entre vários processos). Estes não são tão ruins para o desempenho.

Então, você pode esperar continuar recebendo suave falhas de página, mesmo sem um arquivo de paginação.

DMA57361
fonte
Além disso, alguns sistemas * nix não carregam programas inteiros no início. As seções são carregadas conforme necessário (por falha de página) quando uma parte não residente é chamada. Não sei se o Windows também faz isso, eu suspeito que não da quantidade de RAM que os aplicativos levam no início.
Brian Knoblauch
4
O Windows exige a paginação de executáveis ​​e bibliotecas - é só que muitos deles também decidem sugar uma tonelada de outros recursos no início também. Além disso, programas de compactação exe como UPX irão quebrar a paginação de demanda, porque agora o stub UPX deve descompactar todo o executável na RAM antes que o carregador possa ser acionado.
afrazier
6

O ponto que você está perdendo é que uma falha de página não envolve necessariamente um arquivo de troca. Você também pode mapear arquivos arbitrários; isto é, diga ao sistema operacional para retornar uma região de memória com (uma parte de) um determinado arquivo. Isso significa que quando o programa acessa uma página de memória naquela região que ainda não foi carregada, ela é lida da posição correspondente no arquivo; e quando uma página de memória é escrita (assumindo que a região é gravável), os dados são eventualmente gravados de volta no arquivo original, e não na troca.

Nos sistemas operacionais modernos, essa técnica é usada para carregar código executável (de executáveis ​​e bibliotecas), portanto, você deve esperar que as falhas de leitura ocorram mesmo sem nenhum arquivo de troca.

LaC
fonte