Sistemas Operacionais

Memória Virtual

Professor: Gabriel Soares Baptista

Introdução

Hoje veremos como o SO cria a ilusão de uma memória grande, contínua e privada para cada processo.

Problema central: como executar programas cujo espaço de endereçamento é maior que a RAM física, sem obrigar o programador a dividir tudo manualmente?

Por que Memória Virtual?

  • Programas e bibliotecas crescem mais rápido que a memória física
  • Múltiplos processos: a soma excede a RAM
  • Swapping de processos inteiros é lento (segundos)

Antes: overlays. Programa dividido manualmente em módulos pelo programador. Trabalhoso, sujeito a erro.

Memória virtual: troca a unidade de transferência — mover pedaços do espaço, não o processo inteiro. O processo enxerga um espaço próprio dividido em páginas.

Paginação — Conceitos

TermoDefinição
PáginaBloco de tamanho fixo do espaço virtual
Quadro de páginaBloco do mesmo tamanho na RAM
Endereço virtualGerado pelo programa
Endereço físicoPosição real na RAM
MMUTraduz endereço virtual → físico

Páginas e Quadros — Exemplo

Espaço virtual de 16 bits = 64 KB. RAM de 32 KB. Páginas de 4 KB.

  • $64/4 = 16$ páginas virtuais
  • $32/4 = 8$ quadros físicos

Mais páginas virtuais que quadros físicos. Nem todas podem estar na RAM.

Como um Endereço é Dividido

Páginas de 4 KB = $2^{12}$ = 12 bits de deslocamento.

Endereço de 16 bits: 4 bits de página + 12 bits de deslocamento.

Tradução: número da página virtual → índice na tabela de páginas → quadro físico. O deslocamento não muda.

Exemplo de Tradução

Endereço virtual $8196$:

  • Página: $\lfloor 8196/4096 \rfloor = 2$
  • Deslocamento: $8196 - 2 \cdot 4096 = 4$

Se página 2 está no quadro 6: $6 \cdot 4096 + 4 = 24580$

$8196_{virtual} \rightarrow 24580_{físico}$

Falta de Página (Page Fault)

Ocorre quando a página virtual acessada não está presente na RAM.

  1. CPU acessa endereço virtual
  2. MMU detecta bit presente/ausente = 0
  3. Hardware gera interrupção → SO
  4. SO escolhe quadro livre ou vítima
  5. Se vítima suja, grava no disco
  6. Carrega página faltante do disco
  7. Atualiza tabela, reinicia instrução

Entrada da Tabela de Páginas

CampoFunção
Quadro físicoOnde a página está na RAM
Presente/ausente1 = presente, 0 = falta
ProteçãoLeitura, escrita, execução
Modificada (M)Foi alterada? (suja)
Referenciada (R)Foi acessada recentemente?

TLB — Translation Lookaside Buffer

A tradução acontece em todo acesso à memória. Sem aceleração, o custo dobra.

TLB: pequena memória associativa dentro da MMU que guarda traduções recentes.

Programas têm localidade de referência: usam poucas páginas por vez.

TLB Hit e TLB Miss

TLB hit: tradução está na TLB → acesso instantâneo

TLB miss: não está na TLB → consulta a tabela de páginas

Tipo de missSignificadoCusto
Ausência levePágina na RAM, não na TLBpoucas instruções
Falta menorPágina na RAM, não mapeadaatualiza tabela
Falta maiorPágina não está na RAMacesso ao disco

Tabelas para Memórias Grandes

Espaço virtual de 32 bits com páginas de 4 KB: $2^{20}$ páginas (1 milhão).

Espaço de 64 bits: número impraticável.

Duas soluções:

  • Tabelas multinível: só existem tabelas para regiões usadas
  • Tabelas invertidas: uma entrada por quadro físico

Tabelas Multinível

Endereço de 32 bits: PT1 (10) + PT2 (10) + deslocamento (12)

PT1 → tabela nível 1 → PT2 → tabela nível 2 → quadro físico

Ganho: regiões vazias do espaço não precisam de tabelas de nível 2.

Tabelas Invertidas

TradicionalInvertida
Indexada porpágina virtualquadro físico
Entradasuma por página virtualuma por quadro da RAM
Tamanho depende deespaço virtualmemória física

Vantagem: economiza MUITA memória em espaços de 64 bits.

Custo: não dá para usar a página como índice direto → precisa de TLB + hash.

Substituição de Páginas

Quando a RAM está cheia e ocorre uma falta: qual página remover?

  • Página limpa → descartar
  • Página suja → gravar no disco antes

Escolha ruim = nova falta quase imediata.
Escolha boa = remove página pouco provável de ser usada em breve.

Algoritmo Ótimo

Remove a página cujo próximo uso está mais distante no futuro.

Não é implementável: o SO não conhece o futuro.

Serve como referência para avaliar outros algoritmos.

NRU — Não Usada Recentemente

Usa os bits $R$ (referenciada) e $M$ (modificada). $R$ é limpo periodicamente.

Classe$R$$M$Significado
000não referenciada, limpa
101não referenciada, suja
210referenciada, limpa
311referenciada, suja

Remove página aleatória da menor classe não vazia.

Por que Classe 1 Existe?

Parece contraditório: suja mas não referenciada?

Explicação: página de classe 3 (R=1, M=1) recebe interrupção de relógio → $R$ é zerado, $M$ permanece → vira classe 1.

Isso distingue páginas ativas há pouco das ativas agora.

FIFO

Mantém páginas em ordem de chegada. Remove a mais antiga.

Problema: a mais antiga pode ser muito usada. Idade ≠ inutilidade.

Exemplo com 3 quadros: $1, 2, 3, 4, 1$

  • Remove $1$ (mais antiga) para carregar $4$
  • $1$ é referenciada logo depois → nova falta

Segunda Chance

Melhora o FIFO: examina o bit $R$ da página mais antiga.

  • $R = 0$: remove a página
  • $R = 1$: zera $R$, move para o fim da fila, continua procurando

Se todas têm $R=1$, o algoritmo dá a volta e remove a primeira que ficou com $R=0$.

Relógio (Clock)

Mesma ideia da segunda chance, mas sem mover páginas na fila.

Quadros em lista circular. Ponteiro avança como relógio.

  • $R = 0$: remove e insere nova página
  • $R = 1$: zera $R$ e avança

LRU — Usada Menos Recentemente

Remove a página não usada há mais tempo.

Intuição: passado recente é bom preditor do futuro próximo.

Problema: implementar exato exigiria atualizar estruturas a cada acesso. Caro demais sem hardware especial.

Envelhecimento (Aging)

Simula LRU em software com contadores de $n$ bits.

A cada interrupção de relógio:

  1. Desloca contador 1 bit à direita
  2. Insere bit $R$ no bit mais à esquerda
  3. Zera $R$

Referências recentes pesam mais que antigas. Remove página com menor contador.

Conjunto de Trabalho

Localidade de referência: programa usa um conjunto pequeno de páginas por fase.

Conjunto de trabalho: páginas usadas nas últimas $k$ referências (ou nos últimos $\tau$ segundos).

  • Cabe na RAM → poucas faltas
  • Não cabe → thrashing (ultrapaginação)

Resumo dos Algoritmos

Destaques práticos: Envelhecimento (aproxima LRU) e WSClock (aproxima conjunto de trabalho).

Questões de Implementação

SO participa da paginação em 4 momentos:

  • Criação: tabelas de página, área de swap
  • Execução: garantir MMU use tabelas corretas
  • Falta de página: buscar página, escolher vítima, reiniciar
  • Término: liberar tabelas, quadros, backing store

Tratamento de Falta de Página

  1. Hardware detecta a falta
  2. Salva estado do processo
  3. Identifica endereço virtual que falhou
  4. Verifica validade do acesso
  5. Inválido → mata processo
  6. Válido → localiza página no disco
  7. Escolhe quadro (livre ou vítima)
  8. Se vítima suja → grava no disco
  9. Lê página necessária
  10. Atualiza tabela e TLB
  11. Reinicia instrução

Páginas Fixas e Armazenamento

  • Páginas fixas: não podem ser removidas durante E/S. Dispositivo pode estar acessando diretamente.
  • Armazenamento de apoio: swap, executável, biblioteca ou arquivo mapeado.
  • Política vs mecanismo: separar o que fazer de como fazer aumenta flexibilidade.

Segmentação

Outra visão: em vez de espaço linear único, o processo tem vários espaços independentes chamados segmentos.

Cada segmento: código, pilha, tabela de símbolos, constantes, etc.

Endereço: $(\text{segmento},\ \text{deslocamento})$

Paginação vs Segmentação

CritérioPaginaçãoSegmentação
Unidadepáginasegmento
Tamanhofixovariável
Visãogerenciallógica
Fragmentaçãointernaexterna
Visível ao programador?nãosim

Segmentação Pura e com Paginação

Segmentação pura: segmentos contíguos na RAM → fragmentação externa.

Segmentação com paginação: cada segmento é paginado. MULTICS, Intel x86. Combina organização lógica com flexibilidade física.

Próximos Passos

Na próxima parte, a base de memória virtual será essencial para entender:

  • Como sistemas de arquivos gerenciam armazenamento
  • Como E/S interage com cache e paginação
  • A tensão entre abstração, desempenho e persistência