possibilidade de espaço de troca possui dados maiores que na minha memória física

1

Citando o Guia de Implantação do centos.org isto é,

Swap space in Linux is used when the amount of physical memory (RAM) is full.

E a Wikipedia também disse que,

the term "swap" [is used] to describe both the act of moving memory pages between RAM and disk, and the region of a disk the pages are stored on.

Agora, como é que, em certos casos, o espaço de troca tem dados maiores do que na minha memória física? Acredito que quando o sistema requer mais memória do que está fisicamente disponível, o kernel troca páginas menos usadas e dá memória para o aplicativo (processo) atual que precisa da memória imediatamente. Portanto, o espaço de troca não deve ter dados armazenados maiores que a RAM.

Aqui é de onde eu venho, consulte a captura de tela fornecida abaixo.

    
por chrismsawi 01.11.2012 / 06:34

1 resposta

2

Você está entendendo mal a memória virtual. Programas e o sistema operacional sempre operam na memória virtual. Se você malloc 10 bytes, ou 10 milhões, ou 10 bilhões, você está alocando memória virtual. Seu código, seu espaço de pilha (armazenamento automático, alloca, etc.), seu armazenamento global (se você tiver algum), também todos vivem na memória virtual. Se você pegar o endereço de algo, como em &myVariable , o resultado será um endereço virtual. Você nunca está usando endereços de memória física em um sistema operacional de memória virtual.

A soma total do espaço de endereço virtual necessário pelo SO mais todos os programas que você está executando rotineiramente excede o tamanho da RAM, mesmo nos sistemas atuais. Isso pode até ser verdade para um único programa. Portanto, o uso de RAM + "espaço de troca" para um único processo pode facilmente exceder a RAM.

Heck, todo o sentido da memória virtual - bem, um dos pontos importantes - é permitir que você escreva códigos que precisam de mais "memória" (seja para código, dados, qualquer coisa) do que você tem RAM.

Como outros disseram nos comentários, cabe ao sistema operacional decidir qual parte do espaço de endereço virtual total (para o OS + todos os processos) é mantida na RAM e qual está no disco (no espaço "swap") ). Se você referenciar alguma página (geralmente 4 Kbytes em sistemas x86 / x64) do seu espaço de endereço virtual que não esteja na RAM, o sistema operacional "troca" por você (também dizemos "pagina" ou "falha" ", como isso é estimulado por uma" falha de página "). Algum tempo depois, o sistema operacional pode decidir que está com pouca memória RAM e pode remover algumas das referências mais antigas ou menos referenciadas da RAM. Se esse material foi modificado desde que foi trazido pela última vez para a RAM, a versão modificada deve ser salva em disco - é por isso que as coisas são colocadas em "espaço de troca" (ou em termos do Windows, o arquivo de paginação).

A propósito, o espaço de paginação / swapfile / swap não é de longe o único lugar onde o conteúdo da memória virtual é mantido se ele não estiver na RAM. Arquivos mapeados, que geralmente incluem todos os arquivos de código, são outro local. O código raramente é modificado enquanto está na RAM, de modo que ele geralmente só entra, não sai. Se ele for perdido da RAM, ele é descartado e, se necessário, pode ser novamente trocado do mesmo arquivo original.

    
por 04.10.2015 / 13:17