ea075 memória virtual - dcalboccato/cap.5.2-memoria_virtual.pdf · paginação de forma...
TRANSCRIPT
EA075 Memória virtual
Faculdade de Engenharia Elétrica e de Computação (FEEC)
Universidade Estadual de Campinas (UNICAMP)
Prof. Levy Boccato
1
2
Motivação Problema: programas cujos tamanhos ultrapassavam
a capacidade da memória física.
Projeto de software precisava incluir:
Divisão do programa em partes (segmentos);
Identificação de partes mutuamente exclusivas.
Durante a execução, comandos do programa traziam as partes (segmentos) necessários do disco para a memória antes de serem referenciadas.
Somente partes já presentes na memória poderiam ser referenciadas.
3
Motivação Atualmente, um processo em execução utiliza a memória
para armazenar código e variáveis (dados).
Além disso, o processador deve executar vários processos, sendo que cada processo tem seu espaço de memória.
É necessário, portanto, compartilhar partes da memória física entre os processos.
4
Motivação Surgem dois espaços de memória:
Espaço de memória endereçável por um processador (processo) – endereço virtual.
Memória física instalada – endereço físico.
A solução presente nos sistemas modernos de computação explora:
O conceito de memória virtual.
O particionamento da memória principal e dos processos em blocos (páginas ou segmentos).
Um mecanismo de gerenciamento automático de endereços virtuais / físicos.
5
Memória Virtual Considere o seguinte cenário: a memória principal de um sistema
de computação foi particionada em pedaços iguais de tamanho fixo, denominados frames (blocos), e que cada processo também foi dividido em blocos de tamanho fixo, denominados páginas.
Quando o sistema operacional decide trazer um processo do disco para a memória principal, ele carrega as páginas que compõem este processo em blocos livres da memória principal.
Os blocos livres não são necessariamente adjacentes.
Se fossem, bastaria ajustar o endereço de base do processo carregado para converter os endereços lógicos (expressos como um deslocamento ou posição relativa ao início do programa) em endereços físicos.
No caso geral, o sistema operacional mantém uma tabela de página para cada processo.
6
Memória Virtual Como é feito o ajuste dos endereços contidos no programa?
Cada endereço virtual consiste em um número de página e um endereço relativo dentro daquela página (offset).
O processador usa a tabela de páginas associada ao processo para gerar um endereço físico – dividido em número de bloco e endereço relativo dentro do bloco.
Como o tamanho de página é, predominantemente, feito igual ao tamanho do bloco, o offset é o mesmo nos endereços virtual e físico.
Exemplo:
13
14
25
…
Endereço virtual
1 30
Número da página
Offset
13 30
Endereço físico Tabela de páginas
Memória principal
Página 1 do processo
13
14
Número do bloco
7
Memória Virtual Paginação por demanda: cada página de um processo somente é
trazida para a memória quando for necessária.
Ideia:
Carregar algumas páginas de um processo na memória principal.
Caso o programa desvie para uma instrução ou necessite de um dado contido em uma página que não esteja na memória principal, uma falta de página ocorrerá, o que leva o sistema operacional a trazer esta página do disco para a memória.
Assim,
Apenas algumas páginas de um processo permanecem na memória principal.
Mais processos podem ser mantidos na memória.
Tempo é reduzido, pois as páginas não utilizadas não entram e saem da memória.
É possível ter um processo com tamanho maior que toda a memória principal.
8
Memória Virtual O sistema operacional precisa gerenciar este esquema de
paginação de forma inteligente.
Por exemplo, ao trazer uma nova página do disco, ele precisa escolher um bloco da memória principal a ser substituído. Entram em cena neste momento algoritmos de substituição de página,
que são bastante parecidos com as técnicas de substituição de linha em memórias cache.
Além disso, é preciso optar por uma política de escrita, tal qual ocorre com a memória cache.
9
Memória Virtual Mapeamento de endereços via tabela de páginas
Tabela de páginas
Endereço virtual
Número de página virtual Offset
Número de bloco físico Offset
Endereço físico
Memória principal
10
Memória Virtual Exemplo
Cada página equivale a 4k bytes – 12 bits para identificar um byte (offset).
Endereço virtual de 32 bits.
Ao todo, existem 220 páginas diferentes.
Então, a tabela de páginas possui 220 linhas.
Se cada linha contém 4 bytes – incluindo o endereço físico e outras informações -, a tabela de páginas deste processo ocupa cerca de 4 MB.
Número de página virtual Offset
12 bits 20 bits
11
Memória Virtual Tabela de páginas invertida
Em geral, o número de páginas físicas (blocos) é menor que o número de páginas virtuais.
Ideia: a parte referente ao número de página virtual é mapeada em um valor usando uma função de hash (dispersão, espalhamento) simples. Este valor serve como índice para a tabela de páginas invertida.
Existe uma entrada (linha) na tabela de página invertida para cada bloco da memória física. Assim, uma proporção fixa da memória física é exigida para essa tabela, independentemente do número de processos ou páginas virtuais admitidas.
Como mais de um endereço virtual pode ser mapeado na mesma linha da tabela, uma técnica de encadeamento é usada para gerenciar as situações de conflito.
12
Memória Virtual Tabela de páginas invertida
Exemplo: memória física dividida em N blocos
0x0001 0x013
hash
Offset Número da página virtual
Endereço virtual
Índice de 1 a N 0x63
Bits de controle (e.g., validade, dirty bit) e de identificação do processo
Número do bloco físico
0x01
Próximo
13
Memória Virtual Tabela de páginas invertida
Exemplo: memória física dividida em N blocos
0x0001 0x013
hash
Offset Número da página virtual
Endereço virtual
Índice de 1 a N Número da página
Número do bloco
Número da página
Número do bloco
Número da página
Número do bloco
Havendo colisão, os pares (número de página virtual / número do bloco físico) associados a uma linha são organizados em uma lista.
14
Memória Virtual Em tese, como a tabela de páginas é armazenada na memória,
cada referência de memória virtual pode causar dois acessos à memória física:
O primeiro para buscar a entrada apropriada da tabela de páginas.
O segundo para buscar os dados desejados.
Para evitar isto, usa-se uma memória cache especial para armazenar entradas da tabela de páginas, chamada de translation lookaside buffer (TLB).
15
Memória Virtual Translation lookaside buffer (TLB): funciona da mesma
maneira que uma memória cache e deve conter as entradas da tabela de páginas que foram usadas recentemente.
Pelo princípio da localidade, a maior parte das referências à memória virtual será para locais que estão nas páginas usadas recentemente.
16
Memória Virtual O esquema de tradução de endereços via TLB e tabela de
páginas ocorre junto com o sistema de memória cache convencional:
1) O sistema de gerenciamento de memória consulta o TLB para ver se a entrada da tabela de página correspondente está presente. Se estiver, o endereço físico é gerado combinando o número de bloco com o offset.
2) Caso contrário, a entrada é acessada a partir de uma tabela de página (que está na memória).
3) Quando o endereço físico for gerado, a memória cache é consultada para ver se o bloco contendo a palavra desejada está presente.
4) Caso não esteja, a palavra desejada é recuperada da memória principal.