possibilidade de espaço de troca contém dados maiores do que na minha memória física

possibilidade de espaço de troca contém dados maiores do que na minha memória física

Citando oGuia de implantação de centos.orgaquilo é,

Trocar espaçono Linux é usado quando a quantidade de memória física (RAM) está cheia.

E essaWikipédiatambém disse que,

o termo "swap" [é usado] para descrever tanto o ato de mover páginas de memória entre a RAM e o disco quanto a região do disco em que as páginas estão armazenadas.

Agora, como é que, em certos casos, o espaço de troca contém 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 as páginas menos usadas e fornece 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.

É daí que venho, consulte a captura de tela fornecida abaixo.

insira a descrição da imagem aqui

Responder1

Você está entendendo mal a memória virtual. Os programas e o sistema operacional sempre operam na memória virtual. Se você alocar 10 bytes, ou 10 milhões, ou 10 bilhões, estará alocando memória virtual. Seu código, seu espaço de pilha (armazenamento automático, alocação, etc.), seu armazenamento global (se houver), também residem na memória virtual. Se você pegar o endereço de algo, como em &myVariable, o resultado será um endereço virtual. Você ''nunca'' usa 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 para o sistema operacional mais todos os programas que você está executando serárotineiramenteexceder 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.

Caramba, o objetivo da memória virtual - bem, um dos pontos importantes - é permitir que você escreva código que precisa de mais "memória" (seja para código, dados, o que for) do que RAM.

Como outros disseram nos comentários, cabe ao sistema operacional decidir qual parte do espaço total de endereço virtual (para o sistema operacional + todos os processos) é mantida na RAM e qual está no disco (no espaço "swap"). Se você fizer referência a alguma página (geralmente 4 Kbytes em sistemas x86/x64) do seu espaço de endereço virtual que não está na RAM, o sistema operacional "troca" para você (também dizemos "pagina" ou "falha" ", pois isso é estimulado por uma "falha de página"). Algum tempo depois, o sistema operacional pode decidir que está com pouca RAM e pode remover alguns dos itens mais antigos ou menos referenciados da RAM. Se esse material foi modificado desde a última vez que foi colocado na RAM, a versão modificada deve ser salva no disco - é por isso que o material é colocado no "espaço de troca" (ou, nos termos do Windows, no arquivo de paginação).

A propósito, o espaço do arquivo de paginação/arquivo de troca/swap não é de longe o único lugar onde o conteúdo da memória virtual é mantido se não estiver na RAM. Arquivos mapeados, que geralmente incluem todos os arquivos de código, são outro lugar. O código raramente é modificado enquanto está na RAM, então geralmente apenas é trocado, não retirado. Se for necessário perdê-lo da RAM, ele será descartado e, se necessário, poderá ser trocado novamente a partir do mesmo arquivo de onde veio originalmente.

informação relacionada