O que você vai aprender
Explicar a paginação por demanda e calcular o custo de uma falta de página.
Simular FIFO, LRU e ótimo à mão e explicar a anomalia de Belady.
Relacionar a hierarquia de memória e a localidade ao desempenho da cache.
Reconhecer o thrashing e por que paginação é evitada em tempo real.
Como rodar um programa maior que a RAM?
Você tem 8 GB de RAM, mas abre um editor de vídeo, um navegador com 40 abas e uma máquina virtual — somados, pedem 20 GB. Por que nada trava? Porque o SO mantém na RAM apenas as páginas realmente em uso e guarda o resto no disco, trazendo-as quando necessário.
A memória virtual é essa ilusão: cada processo enxerga um espaço de endereçamento gigante, e o SO, com a MMU, decide o que fica na RAM e o que dorme no disco. É a continuação direta da Aula 10: lá a MMU detectava a falta de página; hoje vemos o que o SO faz com ela — e quanto ela custa.
A bancada e o depósito
| Na oficina | No computador |
|---|---|
| bancada: pouco espaço, tudo à mão | RAM, dividida em quadros |
| depósito no fundo: grande e longe | disco (a área de swap) |
| uma ferramenta | uma página |
| andar até o depósito | falta de página (page fault) |
| escolher o que devolver | algoritmo de substituição (escolhe a vítima) |
Guarde esta tabela: boa parte da aula é uma dessas linhas vista de perto.
O que veremos nesta aula
por demanda→Falta de página
e seu custo→Algoritmos de
substituição→Hierarquia
e localidade→Thrashing
Veremos como o disco vira extensão da RAM, quanto custa ir buscá-lo, qual página remover quando a RAM enche e por que tudo isso só funciona graças à localidade — o mesmo princípio da cache.
Memória virtual e paginação por demanda
Paginação por demanda. Uma página só é carregada na RAM quando é efetivamente acessada — nunca antes.
No início, quase nenhuma página do processo está na RAM. Cada primeiro acesso a uma página dispara uma falta de página que a traz do disco. Programas grandes "ganham vida aos poucos".
Quem controla tudo isso são três bits de cada entrada da tabela de páginas, que você conheceu na Aula 10:
| Página | Quadro | P · presente | M · modificada | A · acessada | Onde está |
|---|---|---|---|---|---|
| 0 | 5 | 1 | 0 | 1 | na RAM |
| 1 | — | 0 | — | — | no disco (swap) |
| 2 | 2 | 1 | 1 | 0 | na RAM, alterada |
| 3 | — | 0 | — | — | no disco (ainda não carregada) |
- P = 0 → acessar a página gera falta de página.
- M = 1 → a página foi escrita; se for escolhida para sair, precisa ser gravada no disco antes. Com M = 0 basta descartá-la: a cópia do disco ainda vale.
- A → o hardware liga a cada acesso; é o bit que o algoritmo do relógio usa para imitar o LRU.
Passo a passo: tratando uma falta de página
O custo de uma falta de página
Detectar a falta é barato (a MMU faz na hora); resolver é caro, porque quase sempre envolve o disco. Para medir o estrago usa-se o tempo efetivo de acesso (EAT, de effective access time) — a mesma ideia da conta da TLB na Aula 10:
p = fração dos acessos que dão falta (adimensional, de 0 a 1) · tRAM = tempo de um acesso à RAM (ns) · tfalta = tempo para tratar uma falta, dominado pelo disco (ns).
Com valores típicos — tRAM = 100 ns, falta em HDD ≈ 10 ms = 10.000.000 ns, falta em SSD ≈ 100 µs = 100.000 ns:
| Taxa de faltas p | Swap em HDD | Swap em SSD |
|---|---|---|
| 1 em 1.000 | ≈ 10.100 ns — 101× mais lento | ≈ 200 ns — 2× mais lento |
| 1 em 100.000 | ≈ 200 ns — 2× mais lento | ≈ 101 ns — 1% mais lento |
| 1 em 1.000.000 | ≈ 110 ns — 10% mais lento | ≈ 100,1 ns — 0,1% mais lento |
A conta da primeira linha (HDD): 0,999 × 100 + 0,001 × 10.000.000 = 99,9 + 10.000 ≈ 10.100 ns.
Algoritmos de substituição
A diferença entre os algoritmos está no que cada um consulta para escolher a vítima:
| Algoritmo | O que consulta | Quem sai | Observação |
|---|---|---|---|
| FIFO | a ordem de chegada | a que entrou primeiro | Simples; ignora o uso e sofre a anomalia de Belady |
| LRU | o último uso (passado) | a usada há mais tempo | Boa aproximação do ótimo; cara de implementar exata |
| Ótimo (OPT) | o próximo uso (futuro) | a que vai demorar mais para voltar | Ideal teórico; irrealizável — serve de régua |
| Relógio (segunda chance) | o bit A | a primeira com A = 0, girando em círculo; quem tem A = 1 ganha outra chance (A volta a 0) | Aproximação barata do LRU, usada na prática |
Os três algoritmos na mesma cadeia
Cadeia 1, 2, 3, 1, 4, 1, 2, 4, 5, 4 com 3 quadros. Repare na página 1: é a mais usada — o martelo da analogia. Em cada coluna, em negrito, a página que acabou de entrar (✗ = falta) ou que acabou de ser usada (✓ = acerto).
FIFO — 8 faltas
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Pede a página | 1 | 2 | 3 | 1 | 4 | 1 | 2 | 4 | 5 | 4 |
| Quadro 1 | 1✗ | 1 | 1 | 1✓ | 4✗ | 4 | 4 | 4✓ | 5✗ | 5 |
| Quadro 2 | — | 2✗ | 2 | 2 | 2 | 1✗ | 1 | 1 | 1 | 4✗ |
| Quadro 3 | — | — | 3✗ | 3 | 3 | 3 | 2✗ | 2 | 2 | 2 |
| Sai | — | — | — | — | 1 | 2 | 3 | — | 4 | 1 |
O momento decisivo é a posição 5: o FIFO expulsa a página 1, que tinha acabado de ser usada na posição 4, só porque ela foi a primeira a chegar. Na posição 6 ela é pedida de novo: falta. Para o FIFO, o acerto da posição 4 não mudou nada.
Agora é a sua vez: faça o LRU e o ótimo no papel e só depois abra.
LRU — quantas faltas? (abra depois de tentar)
LRU — 6 faltas
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Pede a página | 1 | 2 | 3 | 1 | 4 | 1 | 2 | 4 | 5 | 4 |
| Quadro 1 | 1✗ | 1 | 1 | 1✓ | 1 | 1✓ | 1 | 1 | 5✗ | 5 |
| Quadro 2 | — | 2✗ | 2 | 2 | 4✗ | 4 | 4 | 4✓ | 4 | 4✓ |
| Quadro 3 | — | — | 3✗ | 3 | 3 | 3 | 2✗ | 2 | 2 | 2 |
| Sai | — | — | — | — | 2 | — | 3 | — | 1 | — |
Na posição 5 o LRU olha o último uso: 2 (pos. 2), 3 (pos. 3), 1 (pos. 4). Sai a 2 — e a página 1 fica, por isso a posição 6 é acerto.
Ótimo — quantas faltas? (abra depois de tentar)
Ótimo — 5 faltas
| Posição | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Pede a página | 1 | 2 | 3 | 1 | 4 | 1 | 2 | 4 | 5 | 4 |
| Quadro 1 | 1✗ | 1 | 1 | 1✓ | 1 | 1✓ | 1 | 1 | 5✗ | 5 |
| Quadro 2 | — | 2✗ | 2 | 2 | 2 | 2 | 2✓ | 2 | 2 | 2 |
| Quadro 3 | — | — | 3✗ | 3 | 4✗ | 4 | 4 | 4✓ | 4 | 4✓ |
| Sai | — | — | — | — | 3 | — | — | — | 1 | — |
Na posição 5 o ótimo olha o futuro: a 1 volta na posição 6, a 2 na 7 e a 3 nunca mais. Sai a 3. Nenhum algoritmo faz menos de 5 faltas nesta cadeia — mas, para isso, foi preciso conhecer o futuro.
Por que LRU funciona e FIFO falha
O LRU aposta na localidade temporal: o que você usou há pouco provavelmente usará de novo. Logo, remover a página menos recentemente usada costuma acertar. O LRU faz parte dos chamados algoritmos de pilha, que nunca sofrem a anomalia de Belady.
O FIFO ignora o uso: pune a página mais antiga mesmo que ela seja a mais quente. Por isso pode tomar péssimas decisões — e exibir a contraintuitiva anomalia de Belady. Na prática, SOs usam aproximações baratas do LRU, como o algoritmo do relógio (segunda chance), que usa o bit A da tabela de páginas.
Como usar a bancada: avance com ▶ e, a cada falta, leia o que o algoritmo consultou. Troque de algoritmo no meio do caminho — o passo é mantido, e você compara as escolhas no mesmo ponto da cadeia. Clicar numa coluna leva direto àquele passo.
A anomalia de Belady em números
Intuição: mais memória, menos faltas. Quase sempre é verdade — mas não para o FIFO. Na cadeia 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5:
| Quadros | FIFO | LRU | Ótimo |
|---|---|---|---|
| 3 | 9 | 10 | 7 |
| 4 | 10 ⚠️ subiu | 8 | 6 |
Com um quadro a mais, o FIFO passou de 9 para 10 faltas. Essa é a anomalia de Belady. LRU e ótimo só melhoram com mais quadros.
Na bancada acima, clique em 🧪 cadeia da anomalia de Belady: a tabela "Mais quadros, menos faltas?" mostra a subida. O porquê está na seção "Revele a resposta", mais adiante.
A hierarquia de memória
| Nível | Latência típica | Se 1 ns fosse 1 segundo | Capacidade | Gerido por |
|---|---|---|---|---|
| Registradores | ~0,3 ns | 0,3 s — um piscar de olhos | bytes | Compilador |
| Cache L1/L2/L3 | 1–40 ns | 1 a 40 s | KB a dezenas de MB | Hardware |
| RAM | ~100 ns | 1 min 40 s | GB | SO (MMU) |
| SSD | ~50–100 µs | 14 a 28 horas | TB | SO (swap/FS) |
| HDD | ~10 ms | quase 4 meses | TB | SO (swap/FS) |
A localidade na prática: percorrer uma matriz
endereço→Dado vizinho/recente
provável→Está na cache
(hit)→Acesso
rapidíssimo
Os dois trechos abaixo fazem exatamente as mesmas 16,8 milhões de somas (4096 × 4096); só muda a ordem:
- A: m[i][j] e m[i][j+1] são vizinhos na memória (4 bytes). Cada linha de cache de 64 bytes traz 16 inteiros que serão usados em seguida, e cada página de 4 KB atende 1.024 acessos seguidos.
- B: cada acesso pula uma linha inteira da matriz (4096 × 4 B = 16 KB). Cai em outra linha de cache e em outra página a cada passo — a cache e a TLB quase não acertam.
Medido num PC com Intel Core i7-2600 (Linux, gcc -O1): A levou 0,01 s e B, 0,24 s — cerca de 20 vezes mais lento. O número muda de máquina para máquina e com o compilador (sem otimização, -O0, a diferença ficou em cerca de 6 vezes), mas, numa matriz maior que a cache, a versão por coluna perde.
Programa completo para medir no seu computador
Compile com gcc -O1 matriz.c -o matriz e rode ./matriz algumas vezes.
Thrashing e o conjunto de trabalho
Conjunto de trabalho (working set). Conjunto de páginas que um processo usa ativamente numa janela de tempo. Se a RAM não comporta os working sets somados, vem o thrashing.
O thrashing se alimenta sozinho:
os working sets→Muitas
faltas→Processos esperando
o disco; CPU ociosa→Escalonador ingênuo
admite mais processos→Ainda menos RAM
por processo
A curva é traiçoeira: o desempenho cresce com mais processos até um pico e então despenca quando o thrashing começa. A defesa do SO é controlar o grau de multiprogramação — suspender processos para que os working sets caibam na RAM.
Verifique seu entendimento
Na cadeia 1, 2, 3, 1, 4, 1… com 3 quadros, por que o FIFO teve falta na posição 6?
Por que o algoritmo ótimo (OPT) é impossível de implementar em um SO real?
Por que RTOS desliga o swap
Em um servidor, uma falta de página ocasional é só uma pausa imperceptível. Em um sistema de tempo real que controla um airbag ou um marca-passo, ela seria fatal: uma página despejada para o disco e trazida de volta adiciona milissegundos imprevisíveis a uma operação que deveria levar microssegundos.
Por isso, sistemas de tempo real rígido geralmente desabilitam a paginação para disco (no Linux, usa-se mlockall para fixar páginas na RAM). Toda a memória crítica fica residente, garantindo latência limitada e determinística. Previsibilidade vence capacidade.
Em muitos microcontroladores a questão nem se coloca: sem MMU não há memória virtual nem o que paginar — só a proteção por regiões da MPU, vista na Aula 10.
Confusões frequentes
• Achar que "mais quadros sempre reduzem faltas" — no FIFO, a anomalia de Belady mostra o contrário.
• Achar que um acerto mexe na fila do FIFO — não mexe; só o LRU reordena a cada uso.
• Confundir falta de página (página no disco) com falta de TLB (tradução não cacheada, mas página na RAM).
• Pensar que LRU e ótimo são a mesma coisa — LRU olha o passado; ótimo olha o futuro.
• Tratar a cache como "gerida pelo SO" — as caches L1/L2/L3 são de hardware; o SO gere RAM e swap.
Como contar faltas sem errar
Revele a resposta
O que é a anomalia de Belady e por que LRU não sofre dela?
Revisão relâmpago
Para onde isso leva
Esta aula amarra hardware e SO de ponta a ponta:
- Os bits P, M e A e a própria falta de página vêm da tabela de páginas e da MMU da Aula 10.
- O swap mora no disco da Aula 12: HDD × SSD e a ordem das requisições pesam no custo de cada falta.
- A localidade reaparece na E/S com buffers e cache de disco (Aula 13).
- Desligar o swap é requisito do tempo real, cujo escalonamento você viu na Aula 9 e que a Aula 13 aprofunda.
Resumo da aula
Atividade em grupo · Caçando faltas de página
Em trios, comparem algoritmos de substituição na mesma sequência.
Roteiro
- Usem a sequência de referências 7,0,1,2,0,3,0,4,2,3 com 3 quadros.
- Calculem o número de faltas para FIFO e LRU à mão.
- Confiram no simulador de substituição de páginas.
- Tentem reproduzir a anomalia de Belady no FIFO aumentando os quadros.
Mini-quiz · Aula 11
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- A memória virtual usa paginação por demanda; faltas trazem páginas do disco.
- EAT = (1 − p) × t_RAM + p × t_falta: uma falta em mil, com HDD, deixa a memória ~100× mais lenta.
- FIFO olha a chegada, LRU o passado, o ótimo o futuro; FIFO sofre a anomalia de Belady, LRU e ótimo não (algoritmos de pilha).
- A hierarquia de memória troca velocidade por capacidade/custo; a localidade torna cache e TLB eficazes.
- Thrashing destrói desempenho e determinismo; em tempo real, a paginação para disco é desabilitada.