Hoje vamos continuar com o tema de gerenciamento de memória e entrar a fundo no mecanismo de SWAP (ou swapping). Como vimos nas aulas anteriores, a memória principal (MP) é um recurso limitado e valioso. O SWAP é uma técnica clássica que permite ao sistema operacional mover processos entre a MP e o disco, criando a ilusão de que há mais memória disponível do que realmente existe.

O que é SWAP?

SWAP, também chamado de swapping, é um mecanismo onde o sistema operacional transfere um processo inteiro da memória principal para uma área de armazenamento secundário (disco) e, posteriormente, pode trazê-lo de volta. Isso permite que sistemas com pouca memória física executem programas que, somados, exigiriam mais memória do que a disponível. Historicamente, o swapping foi uma das primeiras formas de multiprogramação com memória limitada, surgindo antes mesmo da paginação.

É importante notar que o SWAP trabalha com processos completos—diferente da paginação, que lida com páginas individuais. Isso significa que, quando um processo é escolhido para ser removido da MP, todo o seu espaço de endereçamento (código, dados, pilha, heap) é copiado para o disco. A vantagem é a simplicidade conceitual; a desvantagem é que a operação pode ser bastante lenta, já que envolve grandes quantidades de dados.

Swap-out e Swap-in

O swapping consiste em duas operações fundamentais:

  • Swap-out: transferência de um processo da memória principal para o disco.
  • Swap-in: transferência de um processo do disco de volta para a memória principal.

Quando o sistema precisa liberar espaço na MP (seja porque um novo processo foi criado ou porque um processo em execução precisa de mais memória), o escalonador ou o gerenciador de memória seleciona um processo candidato a swap-out. Esse processo tem seu estado completo salvo no disco, e a região de memória que ele ocupava é liberada. Futuramente, quando o processo for escalonado novamente, o sistema copia seu estado de volta para a MP (swap-in), possivelmente em um endereço diferente do original. Por isso, o código e os dados do processo precisam ser relocáveis ou o sistema precisa atualizar as referências de endereço.

Partições fixas vs variáveis

A área de swap no disco pode ser organizada de duas formas principais:

  • Partições fixas: a área de swap é dividida em partições de tamanho predeterminado, cada uma capaz de conter exatamente um processo. O gerenciamento é simples, mas pode haver desperdício se um processo for menor que a partição, e limitação se um processo precisar de mais espaço do que o tamanho da partição.
  • Partições variáveis: o espaço de swap é alocado dinamicamente conforme a necessidade. Os processos podem ocupar exatamente o tamanho necessário, e a área livre é gerenciada por uma estrutura de dados (como listas encadeadas ou mapas de bits). Oferece flexibilidade, mas exige algoritmos mais sofisticados para alocação e liberação, além de estar sujeita à fragmentação externa.

Na prática, muitos sistemas modernos usam uma combinação: um arquivo de swap (ou partição) que pode crescer conforme necessário, combinado com técnicas de paginação para evitar a necessidade de mover processos inteiros.

Políticas de substituição no swap-out

Quando o sistema decide qual processo deve sofrer swap-out, algumas políticas comuns são:

  • FIFO (First In, First Out): o processo que está na memória há mais tempo é removido. Simples, mas não considera a importância ou o padrão de acesso.
  • LRU (Least Recently Used): o processo que não foi acessado há mais tempo é removido. Melhor desempenho na prática, mas exige mecanismos de registro de acesso.
  • Seleção baseada em prioridade: processos de menor prioridade são escolhidos. Pode causar starvation se um processo de alta prioridade nunca for removido, mas é útil em sistemas de tempo real.
  • Política mista: combina prioridade com idade (aging), evitando que processos de baixa prioridade fiquem indefinidamente na memória.

Quando o SWAP é acionado?

O SWAP é acionado quando a memória principal está cheia (ou muito próxima de estar) e um novo processo precisa ser criado ou um processo existente precisa de mais memória. O kernel do sistema operacional monitora constantemente a quantidade de memória livre. Se um limiar é atingido, o algoritmo de swap-out é executado. Além disso, alguns sistemas implementam swap antecipado: mesmo antes de a memória esgotar, processos que estão ociosos há muito tempo podem ser trocados para liberar espaço para o cache de disco, melhorando o desempenho geral.

Impacto no desempenho e thrashing

Embora o SWAP permita executar mais processos do que a memória física suportaria, o disco é ordens de magnitude mais lento que a RAM (milhares de vezes mais lento em acesso aleatório). Se o sistema troca processos com muita frequência, pode ocorrer o fenômeno chamado thrashing: a maior parte do tempo é gasta movendo processos entre MP e disco, e o throughput real cai drasticamente. Para evitar o thrashing, o sistema operacional pode reduzir o grau de multiprogramação ou usar algoritmos de balanceamento de carga de memória.

SWAP em sistemas modernos

Nos sistemas operacionais atuais, o SWAP raramente é usado isoladamente; ele é combinado com paginação. Em vez de trocar processos inteiros, paga-se páginas individuais (geralmente de 4 KB). O Linux, por exemplo, implementa swapping paginado: páginas pouco usadas podem ser movidas para a área de swap, enquanto páginas ativas permanecem na RAM. O Windows também possui um arquivo de paginação (pagefile.sys) que funciona de forma análoga.

No Linux, a área de swap pode ser uma partição dedicada ou um arquivo comum. O comando swapon ativa a área, e swapoff a desativa. A configuração é normalmente definida em /etc/fstab para montagem automática. O tamanho do swap costuma ser recomendado como o dobro da RAM em sistemas mais antigos, mas hoje em dia 2 GB a 4 GB são suficientes para a maioria dos desktops, e servidores podem precisar de mais dependendo da carga.

Um parâmetro importante no Linux é o swappiness (controlado por /proc/sys/vm/swappiness), que define a tendência do kernel em usar swap em vez de liberar caches de páginas. Valores mais baixos (0-10) fazem o sistema evitar swap ao máximo; valores altos (60-100) favorecem o swapping quando a memória fica pressionada. O padrão é 60, que funciona bem na maioria dos cenários.

Vantagens e desvantagens do SWAP

  • Vantagem: permite executar mais processos do que a memória física suporta, aumentando a multiprogramação e a utilização do processador.
  • Vantagem: serve como mecanismo de suporte para hibernação (suspend-to-disk), salvando o estado completo do sistema.
  • Desvantagem: operações de E/S com o disco são extremamente lentas comparadas à RAM, podendo degradar o desempenho se houver excesso de swapping (thrashing).
  • Desvantagem: complexidade adicional no gerenciamento de memória, especialmente com partições variáveis e relocação de processos.
  • Desvantagem: o consumo de energia para acessar o disco é maior, o que pode ser relevante em dispositivos móveis.

SWAP vs Paginação

É comum confundir SWAP com paginação, mas são conceitos distintos:

  • SWAP (swapping): move processos inteiros entre MP e disco. É mais simples conceitualmente, mas ineficiente para processos grandes.
  • Paginação: move páginas individuais (blocos de tamanho fixo) entre MP e disco. Permite que apenas as páginas necessárias de um processo estejam na memória, reduzindo a quantidade de dados transferidos e permitindo um gerenciamento mais fino.

Sistemas modernos usam paginação como base, e o termo "swap" acabou se tornando sinônimo de qualquer transferência de memória para o disco, mesmo quando se trata de páginas. No Linux, por exemplo, a área de swap armazena páginas, não processos inteiros.

Fragmentação no swapping

No swapping com partições variáveis, a fragmentação externa pode ocorrer: pequenos buracos de memória livre se espalham entre processos alocados, impossibilitando a alocação de um processo grande mesmo que a soma do espaço livre seja suficiente. Para mitigar, o sistema pode compactar a memória (movendo processos para eliminar buracos), mas isso consome CPU e pode ser inviável em tempo real.

Nas partições fixas, a fragmentação é interna, já que processos menores que a partição desperdiçam o espaço restante. A escolha do tamanho das partições fixas é crítica: muitas partições pequenas limitam processos grandes, e partições grandes desperdiçam espaço.

Recomendações de tamanho de swap

Não existe uma regra única. Algumas diretrizes históricas e práticas comuns:

  • Para sistemas com pouca RAM (≤ 2 GB), o dobro da RAM é recomendado.
  • Para sistemas com 4-8 GB de RAM, um swap igual ao tamanho da RAM é suficiente.
  • Para sistemas com 16 GB ou mais, 2-4 GB de swap costumam bastar, a menos que o sistema use hibernação (que requer swap pelo menos do tamanho da RAM).
  • Em servidores com muita RAM e workloads específicos, o swap pode ser desnecessário ou até contraproducente.

A melhor prática é monitorar o uso de swap e ajustar conforme a necessidade.

Perguntas Frequentes

O que acontece quando um processo é selecionado para swap-out?

O sistema operacional salva o estado completo do processo (registradores, contador de programa, dados da pilha, heap, etc.) na área de swap no disco. O espaço na memória principal é liberado, marcado como livre, e o processo passa para o estado "suspenso" ou "trocado". Quando escalonado novamente, ocorre swap-in: o estado é restaurado a partir do disco e o processo continua a execução do ponto onde parou.

SWAP é a mesma coisa que memória virtual?

Não. Memória virtual é um conceito mais amplo que inclui paginação, segmentação e a ilusão de um espaço de endereçamento contínuo. SWAP é uma técnica auxiliar que move dados entre MP e disco para dar suporte à memória virtual. Modernamente, a memória virtual quase sempre usa paginação, e o swap (de páginas) é o mecanismo que permite que páginas não residentes estejam no disco.

Quais são os tipos de partição usados no swapping?

Como discutido, partições fixas e variáveis. Na prática, os sistemas modernos usam paginação, portanto o "swap" é baseado em páginas e não depende de partições de tamanho fixo para processos inteiros. No Windows, o arquivo de paginação (pagefile.sys) é de tamanho variável; no Linux, a partição de swap ou arquivo de swap é dividido em blocos de tamanho de página (geralmente 4 KB).

Como verificar o uso de swap no Linux?

Comandos úteis:

  • free -h mostra o total, usado e livre de RAM e swap.
  • swapon --show exibe as áreas de swap ativas e seus tamanhos.
  • cat /proc/swaps detalha as partições/arquivos de swap.
  • vmstat 1 exibe estatísticas de swap (colunas si e so indicam swap-in e swap-out).

Desativar o swap melhora o desempenho?

Depende. Em sistemas com RAM suficiente para todas as aplicações ativas, desativar o swap pode evitar a latência do disco e melhorar a fluidez. Porém, sem swap, o sistema pode ficar sem memória e começar a matar processos (OOM Killer). Em servidores críticos, manter um swap pequeno é uma rede de segurança. Em desktops com 16 GB ou mais e sem hibernação, muitos usuários optam por desativar o swap.

Este foi um mergulho no mecanismo de SWAP. Continuaremos nos próximos dias com mais tópicos sobre gerenciamento de memória, incluindo paginação e segmentação.