O que você vai aprender
Comparar alocação contígua, paginação e segmentação e seus tipos de fragmentação.
Explicar passo a passo a tradução de endereços lógicos em físicos pela MMU.
Justificar a existência da TLB e quantificar seu impacto no desempenho.
Relacionar a troca de contexto ao esvaziamento da TLB e ao custo de tradução.
Por que não dar a RAM crua aos programas?
Imagine que cada programa escrevesse diretamente em endereços físicos da RAM. Dois programas usariam o endereço 0x1000 ao mesmo tempo, um sobrescreveria o outro, e qualquer bug derrubaria o sistema inteiro. Compilar um programa exigiria saber, de antemão, em que posição da memória ele rodaria.
A gerência de memória resolve isso dando a cada processo a ilusão de uma memória própria, contígua e privada — o espaço de endereçamento lógico. O hardware (a MMU) traduz esses endereços em posições físicas reais, isolando os processos uns dos outros.
- Cada processo "acha" que possui a memória toda.
- O compilador gera endereços lógicos, sem saber onde o programa carregará.
- O SO e a MMU mapeiam o lógico no físico em tempo de execução.
O que veremos nesta aula
Vamos da forma mais ingênua de organizar a memória até o mecanismo que sustenta os SOs modernos:
contígua→Paginação e
segmentação→MMU
(tradução)→TLB
(aceleração)
O fio condutor é hardware: endereço lógico, tabela de páginas, MMU e TLB são engrenagens físicas que o SO programa, mas não substitui.
Endereço lógico e endereço físico
Endereço físico. Endereço real de uma célula da RAM, usado no barramento de memória.
O conjunto de endereços lógicos válidos forma o espaço de endereçamento lógico; o conjunto de endereços físicos correspondentes, o espaço físico. A tradução entre eles é a essência da gerência de memória moderna.
Da alocação contígua à paginação
Na alocação contígua, cada processo recebe um bloco único e sequencial de RAM. É simples, mas, com o tempo, criam-se buracos: processos entram e saem deixando lacunas que, somadas, dariam memória de sobra — só que nenhuma é grande o bastante. É a fragmentação externa.
A paginação ataca esse problema dividindo a memória física em quadros de tamanho fixo e o espaço lógico em páginas do mesmo tamanho. Qualquer página cabe em qualquer quadro livre, eliminando a fragmentação externa. O preço é a fragmentação interna: a última página de um processo raramente é preenchida por completo.
Traduzindo um endereço na paginação
Com páginas de 4 KB (4096 bytes), um endereço lógico se divide em número da página e deslocamento:
| Endereço lógico | Página (÷4096) | Deslocamento (mod 4096) | Quadro (tabela) | Endereço físico |
|---|---|---|---|---|
| 8500 | 2 | 308 | 5 | 5×4096+308 = 20788 |
| 100 | 0 | 100 | 9 | 9×4096+100 = 36964 |
| 4096 | 1 | 0 | 3 | 3×4096+0 = 12288 |
O deslocamento nunca muda na tradução: apenas o número da página é substituído pelo número do quadro lido na tabela de páginas.
Passo a passo: a MMU traduzindo um acesso
A MMU e a tabela de páginas
Tabela de páginas. Estrutura em RAM, mantida pelo SO, que mapeia cada número de página ao número do quadro e guarda bits de controle (presente, modificado, acessado, permissões).
página · deslocamento→MMU + tabela
de páginas→Endereço físico
quadro · deslocamento
Permissões e faltas de página na MMU
A MMU faz mais do que traduzir: ela é a guardiã da memória. Cada entrada da tabela de páginas carrega bits que a MMU consulta a cada acesso:
- Presente/ausente: se a página não está na RAM, a MMU gera uma falta de página e o SO a traz do disco (tema da Aula 9).
- R/W/X: tentar escrever em página somente leitura, ou executar dados, gera uma falha de proteção.
- Modificado (dirty) e acessado: ajudam o SO a decidir o que escrever de volta e o que substituir.
É por isso que a proteção de memória é praticamente gratuita: o hardware já faz a checagem no mesmo ciclo da tradução.
A lista telefônica e o papelzinho
Paginação × segmentação
| Aspecto | Paginação | Segmentação |
|---|---|---|
| Unidade | Página/quadro de tamanho fixo | Segmento de tamanho variável |
| Visão | Física (transparente ao programa) | Lógica (código, dados, pilha) |
| Fragmentação | Interna (última página) | Externa (segmentos variáveis) |
| Endereço | (página, deslocamento) | (segmento, deslocamento) |
| Uso típico | SOs modernos | Histórico; combinada com paginação no x86 |
O que acontece em uma falta de página
ausente→MMU gera
exceção→SO escolhe
quadro→Traz página
do disco→Atualiza tabela
e reexecuta
Tabelas multinível e o custo de páginas grandes
Num espaço de 64 bits, uma tabela de páginas plana seria gigantesca. Por isso usam-se tabelas de páginas multinível (2, 3 ou 4 níveis): o endereço é fatiado em vários índices, e só os ramos efetivamente usados existem na memória. O preço é que um TLB miss pode exigir vários acessos à memória (um por nível) — chamado de page walk.
Para reduzir isso, processadores oferecem páginas grandes (huge pages) de 2 MB ou 1 GB: menos entradas, menos níveis, maior alcance da TLB. Bancos de dados e máquinas virtuais usam huge pages justamente para diminuir TLB misses em grandes áreas de memória.
Verifique seu entendimento
Com páginas de 1 KB, qual o endereço físico de uma referência lógica à página 4, deslocamento 200, se a página 4 está no quadro 7?
MMU × MPU em microcontroladores
Nem todo embarcado tem MMU. Microcontroladores ARM Cortex-M, comuns em IoT e automotivo, em geral não possuem MMU completa — não há memória virtual nem tradução de endereços. Em vez disso, trazem uma MPU (Memory Protection Unit): ela não traduz endereços, mas define regiões com permissões (R/W/X, privilegiado/usuário).
Assim, um RTOS como o FreeRTOS pode usar a MPU para impedir que uma tarefa corrompa a pilha de outra, sem o custo e a imprevisibilidade da paginação. Em tempo real rígido, prefere-se proteção por regiões fixas a tradução dinâmica.
Confusões frequentes
• Confundir fragmentação interna (desperdício dentro do bloco, na paginação) com externa (buracos entre blocos, na alocação contígua).
• Achar que o deslocamento muda na tradução — ele é sempre preservado.
• Pensar que a MMU é software do SO — a MMU é hardware; o SO apenas preenche a tabela de páginas.
• Supor que todo SO tem MMU — embarcados simples usam MPU ou nada.
Como acertar as contas de tradução
Revele a resposta
Por que a troca de contexto entre processos é tão cara para a memória?
Revisão relâmpago
Para onde isso leva
A gerência de memória é a base de muito do que vem a seguir:
- A falta de página e os bits da tabela são o motor da memória virtual (Aula 9).
- A TLB liga-se à hierarquia de cache (Aula 9) e à troca de contexto (Aula 3).
- A proteção por MMU/MPU sustenta o isolamento e a segurança de plataforma (Aula 13).
- Em tempo real (Aula 12), evita-se tradução imprevisível: MPU em vez de MMU.
Resumo da aula
Atividade em grupo · Traduzindo endereços à mão
Em duplas, façam a tradução página→quadro como uma MMU.
Roteiro
- Dada uma tabela de páginas e um tamanho de página, traduzam 3 endereços lógicos para físicos.
- Identifiquem o número da página e o deslocamento em cada um.
- Marquem um acesso que cause falta de página.
- Discutam o papel da TLB caso o mesmo endereço seja acessado de novo.
Mini-quiz · Aula 8
20 questões sobre esta aula. Escolha e veja a explicação na hora.
📌 Resumo — leve isto para a prova
- Cada processo tem espaço lógico próprio; a MMU traduz lógico→físico por hardware.
- Paginação sofre fragmentação interna; alocação contígua, fragmentação externa.
- A tabela de páginas (no SO) guarda quadros e bits de controle; a MMU os consulta.
- A TLB cacheia traduções; faltas na TLB e page walks são caros.
- Embarcados usam MPU (proteção por regiões) em vez de MMU.