Tanto quanto eu entendo paginação e troca, eles são conceitos completamente diferentes. Enquanto a troca significa que um processo está completamente na memória física ou no disco rígido, as partes de paginação de um processo podem estar na memória física e outras podem estar no disco rígido.
Mas por que o linux precisa de uma partição swap então? Se a memória física estiver cheia, alguns processos serão terceirizados para o disco rígido e um novo processo será mapeado da memória virtual para a memória física.
Eu simplesmente não entendo por que alguém precisa de uma partição de swap (ou troca em geral), então?
Ou isso é apenas uma questão de terminologia e swap partition == virtual memory
?
linux
memory
operating-systems
virtual-memory
paging
JohnnyFromBF
fonte
fonte
Respostas:
Sim, é apenas uma questão de terminologia; em muitos casos, uma partição de troca é usada como memória virtual.
A razão pela qual os sistemas UNIX e similares ao UNIX preferem as partições de troca aos arquivos de paginação é que elas podem ser contíguas, o que resulta em menores tempos de busca em comparação com um arquivo de paginação que pode ser fragmentado.
fonte
Não sei de onde você tirou a noção de que “trocar significa que um processo está completamente na memória física ou no disco rígido”. Esse significado não é usado há algumas décadas. Citando a Wikipedia :
De fato, em qualquer contexto envolvendo Linux (ou outros sistemas unix), paginação e troca são praticamente sinônimos. Ambos se referem ao uso de memória virtual, onde os dados da página podem ser armazenados na RAM ou no disco. (É provável que uma página tenha 4kB em qualquer dispositivo que você encontre.) O programa que usa a página de memória não se importa nem sabe onde os dados são armazenados, apenas continua usando o endereço virtual. O kernel transfere dados entre a RAM e o disco e atualiza as tabelas MMU à medida que avança para que a entrada do endereço virtual aponte para uma página física na memória ou contenha um valor especial que faça com que o processador execute algum código do kernel que carregará os dados apropriados do disco.
Paginação refere-se a esse processo genérico. A troca refere-se ao caso em que os dados no disco estão em uma área dedicada: a área de troca (uma partição de troca ou arquivo de troca). A paginação também pode ser feita entre a RAM e um arquivo e, nesse caso, geralmente não é referida como troca . Por exemplo, quando você executa um programa, o código precisa ser carregado na memória para ser executado; se uma página de código precisar ser removida da RAM para liberar espaço para outra coisa, não será necessário gravar essa página na área de troca, pois ela poderá ser carregada novamente a partir do arquivo do programa. (Isso pode ser feito para todos os dados somente leitura, não apenas para o código do programa.)
Se a memória física estiver (quase) cheia, o kernel procurará uma página na RAM (não um processo inteiro) que não tenha sido usada recentemente. Se essa página reproduzir o conteúdo de um arquivo de disco (existem tabelas no kernel para indicar isso), a página poderá ser recuperada. Caso contrário, a página é gravada para troca e, em seguida, recuperada. De qualquer maneira, o kernel atualiza a entrada na tabela de memória virtual do processo (que se torna a tabela MMU enquanto o processo é executado) para marcá-la como não está na RAM e pode reutilizar a página física para outra coisa (um programa diferente ou outra página de o mesmo programa).
fonte
O recurso de memória / paginação virtual permite que um kernel "virtualize" a memória para os processos do espaço do usuário. O kernel pode pegar páginas da memória física e organizá-las através de paginação, para que pareçam contíguas ao processo do espaço do usuário.
Um limite pode ser definido na memória do processo do espaço do usuário e, se o processo for além, ocorre uma "falha de página", que causa uma exceção da CPU que retorna ao kernel. Isso impede que o programa userspace mexa com a memória alocada no kernel ou em outros programas, sem a permissão do kernel.
Normalmente, os programas no espaço do usuário solicitam ao kernel que estenda esse limite por meio de interfaces bem definidas (chamadas pelas funções C
malloc()
e,free()
por exemplo). O kernel é responsável por acompanhar quanto e que memória um programa está alocado.Esse mecanismo de "falha de página" também pode permitir que o kernel troque a página que o processo estava tentando acessar com um disco, se o kernel puder provisionar a memória em excesso (e o Windows e o Linux suportam isso), por isso é chamado de troca. Se o acesso à memória for realmente inválido (ou seja, o processo está tentando acessar a memória que não foi solicitada primeiro), normalmente o processo será interrompido com um SIGSEGV.
Portanto, a "troca" é um recurso adicional (no Linux, você pode desativá-lo completamente, se quiser), que depende da memória / paginação virtual, mas não é necessário apenas porque uma CPU possui memória / paginação virtual. Os conceitos não são os mesmos, mas a troca depende da paginação / memória virtual para existir.
Além disso, depois de ler mais de perto sua pergunta, "paginação" às vezes é usado como sinônimo de "troca" - mas nunca ouvi falar de "troca", o que significa que toda a memória do processo é trocada versus "paginação", que significa apenas parte de é trocado.
"Memória virtual" é memória física, apenas "remapeada". O hardware da MMU não pode mapear diretamente para nenhum dispositivo de armazenamento. A MMU pode lançar uma falha que informa ao kernel que um processo tentou acessar a memória que não deveria ter - e o kernel pode usar esse mecanismo para verificar se um processo deseja algo de volta do disco que ele pensou estar na memória e, em seguida, faça o " troca". O ponto é que é o sistema operacional que decide salvar as páginas no disco para que elas possam ser usadas em outros processos, não no hardware.
fonte
Em geral, a partição de troca não é igual à memória virtual.
Os processos podem precisar de mais memória do que a memória física real, então os desenvolvedores do sistema operacional decidiram assumir que há mais memória no sistema, chamada "memória virtual".
Essa memória virtual é basicamente a memória física e parte do disco. Essa parte do disco é chamada "swap" no Linux.
Os desenvolvedores também propuseram que o uso da parte da memória virtual localizada no disco rígido deve ser o mais baixo possível. Por isso, toda a memória virtual foi dividida em pequenas porções chamadas "páginas". Muitas páginas são usadas em baixa taxa; essas páginas devem ser gravadas na parte da memória virtual no disco rígido. Esta operação é chamada "swap out". O sistema operacional deve acompanhar quais páginas não estão na memória física para encontrá-las quando necessário. A falha na página ocorre quando um programa deseja gravar / ler uma parte da memória que é trocada.
Para responder à sua pergunta: O Linux precisa de uma partição swap para trocar algumas páginas da memória e você pode ver uma estatística do uso da memória virtual com
vmstat
:A coluna 'swap' mostra a troca e a estatística. Além disso, este link explica também a memória virtual e o uso
vmstat
.fonte