EA075
Memória virtual
Faculdade de Engenharia Elétrica e de Computação (FEEC)
Universidade Estadual de Campinas (UNICAMP)
Prof. Levy Boccato
1
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.
2
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.
3
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.
4
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.
5
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.
Memória principal
Endereço virtual
1
Número
da página
30
Offset
Tabela de páginas
Endereço físico
13
13
14
Número
do bloco
30
Página 1
do processo
13
14
25
…
 Exemplo:
6
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.
7
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.
8
Memória Virtual
 Mapeamento de endereços via tabela de páginas
Endereço virtual
Número de página virtual
Offset
Tabela
de páginas
Memória principal
Número de bloco físico
Offset
Endereço físico
9
Memória Virtual
 Exemplo
 Cada página equivale a 4k bytes – 12 bits para identificar um byte (offset).
 Endereço virtual de 32 bits.
Número de página virtual
Offset
20 bits
12 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.
10
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.
11
Memória Virtual
 Tabela de páginas invertida
 Exemplo: memória física dividida em N blocos
Número da página virtual
Endereço virtual
0x0001
Offset
0x013
hash
Índice de 1 a N
0x63
Próximo
Número do bloco físico
Bits de controle (e.g., validade, dirty bit)
e de identificação do processo
0x01
12
Memória Virtual
 Tabela de páginas invertida
 Exemplo: memória física dividida em N blocos
Número da página virtual
Endereço virtual
0x0001
Offset
0x013
hash
Í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.
13
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).
14
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.
15
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)
2)
3)
4)
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.
Caso contrário, a entrada é acessada a partir de uma tabela de
página (que está na memória).
Quando o endereço físico for gerado, a memória cache é
consultada para ver se o bloco contendo a palavra desejada está
presente.
Caso não esteja, a palavra desejada é recuperada da memória
principal.
16
Download

Memória virtual - DCA