Área de Swap

A área de swap é a região do disco rígido a qual o kernel utilizará como área de troca com a memória física, para implementar o conceito de memória virtual. O Linux permite que a área de swap seja um arquivo ou uma partição.

1. Utilização

As áreas de swap são divididas em page slots, sequencia de regiões contíguas de 4KB, utilizadas para receber as páginas que serão armazenadas. A primeira page slot é reservada para armazenas informações de controle.
Geralmente, em um sistema Linux, dedica-se uma partição a swap. Após criada, deve-se utilizar o comando mkswap para definir os valores da primeira page slot e verificar a existência de blocos defeituosos na partição que não deverão ser utilizados.

1.1. Identificador de página Swapped-out

Quando determinada página de um processo não está na RAM, o respectivo valor na tabela de páginas tem o nome de identificador de página swapped-out (este último termo representa que a página está em disco). A entrada é de 32 bits e informa a posição em que se encontra aquela página está no disco através do índice do page slot e do número da área de swap contudo, o bit menos significativo é reservado para indicar o estado da página: 1 quando a página está na memória física (RAM) ou 0 quando não.

swap-out-identifier.jpg
Fig. 1. Identificador de página swapped-out.

1.2.Swap-out

Como discutido na seção anterior, swap out significa realizar uma cópia de uma página em disco. Para simplificar este texo, não vamos dar muitos detalhes do swap cache, estrutura criada para evitar condições de corrida nas operações de swap com regiões de memória compartilhada que torna esses processos um pouco mais complicados, para isso, ele só vai ser simplificado como uma região de transição nesses processos.
Inicialmente, a função add_to_swap será chamada se o kernel verificar que não há nenhuma referência à essa moldura de página (page frame) no cache. Então, será atualizada a entrada na tabela de páginas referenta à essa página, conforme descrito no identificador de página swapped-out. Neste momento, então, a página é escrita em disco e, quando essa operação terminar, ela é retirada do swap cache.

1.3. Swap-in

Se, ao ocorrer um page-fault, o kernel verificar que o endereço pedido pertencer ao espaço de endereçamento do processo, o bit que indica que a página está presente estiver nulo e a entrada da tabela de páginas não está nula, a chamada do_swap_area() será feita porque há a necessidade de realizar um swap-in – trazer uma página da área de swap para a memória RAM.
Esta função tem uma série de importantes tarefas que serão apenas citadas aqui, para maiores detalhes ver [1]: verificar se a página se encontra no swap cache, atualizar a tabela de páginas do processo, verificar se a página está marcada como somente leitura, em caso afirmativo, fazer uma cópia para escrita (importante para o mecanismo copy-on-write).

2. Tamanho ideal

Em todos os fóruns sobre Linux na internet, há, ao menos, um tópico de discussão sobre qual é o tamanho ideal da partição de swap entretanto, não há um consenso. Sabe-se, entretanto, que os computadores atuais, com mais de 1GB de memória física não necessitam de muita área de swap mas, por questões de eventualidades, propõem-se algo pequeno entre 512 MB e 1GB. Já para os computadores um pouco menos recentes até 512 MB, recomendava-se entre 1 e 2 vezes o tamanho da área de swap.
Uma outra possibilidade de configuração, adicionada no kernel 2.6, é a swappiness que informa ao kernel o desejo de que páginas sejam jogadas para o disco, o seu valor varia de 0 (o kernel usará a área de swap somente quando não houver outra alternativa) a 100 (o kernel sempre jogará a página para o disco, aumentado as páginas físicas disponíveis.

3. Proteção

//TODO

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License