O swap é válido apenas durante uma determinada inicialização, portanto, todas as informações de rastreamento são mantidas na memória. Trocando páginas para dentro e para fora é tratado inteiramente pelo kernel e é transparente para os processos. Basicamente, a memória é dividida em páginas, rastreadas em tabelas de páginas; estas são estruturas definidas por cada arquitetura de CPU. Quando uma página é trocada, o kernel a marca como inválida; assim, da próxima vez que qualquer coisa tentar acessar a página, a CPU irá falhar, o que fará com que um manipulador no kernel seja invocado; É responsabilidade desse manipulador restaurar o conteúdo da página.
No Linux, há uma estrutura swap_info
que descreve cada dispositivo ou arquivo de troca. Dentro dessa estrutura, um swap_map
mapeia páginas de memória para blocos no dispositivo de troca ou arquivo. Quando uma página é desfeita, o kernel armazena o swap_info
index e swap_map
offset na entrada da tabela de páginas correspondente, o que permite encontrar a página no disco quando necessário. (Todas as arquiteturas suportadas fornecem espaço suficiente para isso em suas tabelas de páginas, mas existem limites - por exemplo. o espaço disponível significa que o Linux pode gerenciar no máximo 64GiB de troca em x86.)
Você encontrará uma descrição muito mais detalhada de tudo isso no capítulo "Gerenciamento de swap" de Mel Gorman's Entendendo o gerenciador de memória virtual do Linux .