Você está na página 1de 38

Universidade Federal Rural do Semiárido

Departamento de Ciências Exatas e Naturais


Ciência da Computação

Sistemas Operacionais
Aula 08: Memória Virtual

Silvio Fernandes
1
Introdução
• Há muitos anos programadores já eram
obrigados a lidar com programas maiores que
a quantidade de memória física disponível
• A solução era dividir o programa em módulos
chamados overlays
• O overlay 0 era o 1º a ser executado, e
chamava o próximo, que era carregado em seu
lugar na memória, quando o 1º terminava
• O principal problema é que a divisão em
overlays era feita pelo programador

2
Introdução
• A solução foi o método conhecido como
memória virtual, que permite que o tamanho
total de um programa (código, dados e pilha)
pode exceder a quantidade total de memória
física disponível para ele
• O SO mantém as partes ativas do programa na
memória e o restante no disco

3
Paginação
• Em qualquer computador existe um conjunto
de endereços de memória que os programas
podem gerar ao serem executados
• Quando um programa usa uma instrução do
tipo MOV REG, 1000 ele deseja copiar o
conteúdo da posição de memória 1000 para o
registrador REG ou vice-versa
• Endereços gerados pelo programa são
chamados de endereços virtuais e constituem
o espaço de endereçamento virtual

4
Paginação
• Em computadores sem memória virtual o
endereço virtual é idêntico ao endereço físico
• Em computadores com memória virtual esse
endereço será passado a uma MMU (memory
management unit) que mapeia endereços
virtuais em físicos

5
Paginação
• Localização e função da MMU

6
Paginação
• Ex: Um computador que
pode gerar endereços
virtuais de 16 bits (de 0
a 64K), mas que só
possui 32K de memória
física. Mas é possível
escrever programas de
64K

7
Paginação
• O espaço de endereçamento virtual é dividido
em unidades denominadas páginas. As
unidade correspondentes em memória física
são as molduras de página
• Páginas e molduras de páginas possuem
sempre o mesmo tamanho
• A transferência entre a memória e o disco são
sempre em unidades de uma página

8
Paginação
• Quando um programa tenta acessar o
endereço 0 com a instrução MOV REG, 0 o
end. virtual 0 é enviado a MMU, que detecta
que este endereço está na página virtual 0 (0 a
4095), que por sua vez corresponde a moldura
de página 2 (8192 a 12287)
• A MMU então transforma o end. virtual 0 no
end. físico 8192 e o envia a memória por meio
do barramento

9
Paginação
• Como outro exemplo, o end. virtual 20500 está
localizado 20 byte após o início da página virtual
5 sendo mapeado para o end. físico 12288 + 20 =
12308
• Quando (ou se) o programa tentar usar uma
página virtual não mapeada, por exemplo, com a
instrução MOV REG, 32780 (12º byte da pág.
virtual 8). A MMU constata que está pág. não está
mapeada e força o desvio da CPU para o SO
• Essa interrupção (trap) é denominada falta de
página (page fault)

10
Paginação
• Na falta de página o SO
1. Escolhe uma moldura de página para salvar no
disco. Ex: moldura 1
2. Marca na tabela de páginas virtuais a entrada
escolhida (1) como não mapeada
3. Carrega a pág. virtual referenciada pela instrução
na moldura de pág. recém liberada (1)
4. Marca na tabela de pág. virtuais a entrada da
nova pág. virtual (8) como mapeada (moldura 1)
• A MMU transformará o endereço virtual
32780 no end. físico 4108
11
Paginação
• Para entender como a MMU trabalha vemos
um exemplo de end. virtual, 8196
(0010000000000100), sendo mapeado por
meio do emprego do mapeamento da MMU

12
Paginação
• Operação interna de uma MMU com 16 páginas de
4KB

13
Tabelas de páginas
• No caso mais simples o mapeamento é feito
exatamente da maneira descrita anteriormente
– End. virtual é dividido no número de pág. virtuais (bits
mais significativos) e um deslocamento dentro desta pág.
(bits menos significativos)
• No exemplo tínhamos 16 pág. virtuais de 4KB
cada
– Os 4 1º bits especificavam o número da pág.
virtual (0 a 15)
– Os 12 bits seguintes especificavam o
deslocamento (byte 0 a 4095) em relação ao
começo da pág.
14
Tabelas de páginas
• O no. de pág. virtual é usado como índice dentro da
tabela de pág. que aponta para uma entrada
relacionada a pág. virtual, onde encontramos o no.
da moldura de pág. correspondente
• O no. da moldura deve ser concatenado com os bits
de deslocamento para formar o end. físico
• Há 2 pontos importantes a se considerar
1. A tab. de pág. pode ser extremamente grande:
computadores modernos possuem espaços de
end. virtual de 32 ou 64 bits. Para 32 temos 4Gb
de espaço de endereçamento virtual ou mil pág.
de 4KB
15
Tabelas de páginas
1. O mapeamento deve ser rápido: as instruções
executadas, como os operandos, podem ser
todos referenciados como posições de memória.
Assim, para executar uma única instrução
podemos ter que fazer 1, 2 ou mais
mapeamentos de end. virtuais para físicos

16
Estrutura de uma entrada da
tabela de páginas
• Na prática, cada entrada na tabela de páginas
armazena bem mais que o número da
moldura correspondente
• O formato exato de cada entrada é altamente
dependente de hardware, mas a informação
contida nela é aproximadamente
padronizada
• O tamanho de cada entrada é comumente de
32 bits que podem ser divididos em vários
campos
17
Estrutura de uma entrada da
tabela de páginas
• Entrada típica de uma tabela de páginas

18
Estrutura de uma entrada da
tabela de páginas
• Número da moldura: é o campo de maior
importância, dado que o objetivo do
mapeamento é encontrar este valor
• O bit presente/ausente: se este bit for 1 a
entrada é válida e pode ser usada. Se for 0 a
pág. virtual à qual a entrada pertence não
está na memória neste momento. O acesso a
uma entrada na tabela de pág. com este bit
igual a 0 causa uma falta de pág., e o SO
deverá ser chamado
19
Estrutura de uma entrada da
tabela de páginas
• Os bits de proteção: define os tipos de
acesso que são permitidos a pág. Pode ser de
apenas um bit com valor 0 para leitura e
escrita e 1 para somente leitura. Na prática
normalmente são usados 3 bits, cada uma
para permitir ou não a leitura, escrita e
execução

20
Estrutura de uma entrada da
tabela de páginas
• O bit modificada: quando uma instrução altera
o valor de algum bit de uma moldura de pág., o
hardware automaticamente altera o valor deste
bit para 1 na entrada correspondente da tabela
de pág. Este bit é importante quando o SO
necessita de uma moldura de pág. Se a pág.
correspondente a essa moldura foi modificada
(suja), ela tem que ser atualizada no disco. Caso
contrário (continua limpa), ela pode ser
simplesmente abandonada, visto que sua
imagem em disco continua válida (igual a da
memória)
21
Estrutura de uma entrada da
tabela de páginas
• Bit referenciada: esse bit tem seu valor
alterado para 1 quando a pág.
correspondente é acessada seja para leitura
ou escrita. Este bit ajuda o SO a escolher uma
moldura de pág. a ser substituída quando da
ocorrência de uma falta de pág. Páginas que
não estão sendo acessadas são melhores
candidatas do que aquelas que estão

22
Estrutura de uma entrada da
tabela de páginas
• O bit de cache desabilitado: este bit permite
que o mecanismo de cache seja desabilitado
para pág. Normalmente ele é usado apenas
em pág. que mapeiam regiões de memória
utilizadas para E/S com dispositivos

23
Algoritmos de substituição de
páginas
• Quando um falta de página ocorre, o SO
precisa escolher uma página a ser removida
da memória a fim de liberar espaço para uma
nova a ser trazida.
• Se a pág. a ser removida tiver sido
modificada enquanto esteve na memória, ela
deverá ser reescrita no disco (atualizando a
cópia virtual lá existente)
• Caso contrário, não é necessário reescrevê-la

24
Algoritmos de substituição de
páginas
• Embora seja possível escolher aleatoriamente
uma pág. a ser descartada a cada falta de pág., o
desempenho do sistema será muito melhor se a
pág. escolhida for uma que não estiver sendo
muito usada
• Algoritmos
– Não usada recentemente (NUR)
– Primeira a entrar, primeira a sair
– Segunda chance (SC)
– Relógio
– Menos recentemente usada (MRU)

25
Algoritmos de substituição de
páginas
• Não usada recentemente (NUR)
– Quando um processo é iniciado os bits R
(referenciada) e M (modificada) são colocados
em 0 para todas as páginas
– Periodicamente, o bit R é limpo de modo que
diferencie as pág. que não foram referenciadas
recentemente daquelas que foram
– Quando acontece uma falta de página, o SO
inspeciona todas as páginas e as separa em
quatro categorias, com base nos bits R e M

26
Algoritmos de substituição de
páginas
• Não usada recentemente (NUR)
– Classe 0: não referenciada, não modificada
– Classe 1: não referenciada, modificada
– Classe 2: referenciada, não modificada
– Classe 3: referenciada, modificada

– O algoritmo remove aleatoriamente uma página


de classe de ordem mais baixa que não esteja
vazia

27
Algoritmos de substituição de
páginas
• Primeira a entrar, primeira a sair
– FIFO é um algoritmo de baixo custo
– O SO mantém uma lista de todas as pág. atuais
na memória, com a pág. mais antiga na cabeça
da lista e a pág. que chegou mais recentemente
situada no final dessa lista
– Na ocorrência de uma falta de pág., a 1ª pág. da
lista é removida e a nova é adicionada no final
– Desvantagem: página há mais tempo na
memória pode ser usada com muita freqüência

28
Algoritmos de substituição de
páginas
• Segunda Chance (SC)
– Uma modificação simples no FIFO evita o problema
de se jogar fora uma pág. intensamente usada,
simplesmente inspecionando o bit R da página mais
antiga
– Se o bit R for 0, essa pág., além de mais antiga, não
estará sendo usada, de modo que será substituída
imediatamente
– Se for 1, será colocado em 0, e essa pág. será posta
no final da lista como se ela tivesse acabado de ser
carregada na memória
– A pesquisa continua

29
Algoritmos de substituição de
páginas
• Segunda Chance (SC)

a) lista de páginas em ordem FIFO


b) estado da lista em situação de falta de página no instante 20,
com o bit R da página A em 1 (números representam
instantes de carregamento das páginas na memória) 30
Algoritmos de substituição de
páginas
• Relógio
– SC é razoável e desnecessariamente ineficaz, pois
permanece constantemente reinserindo pág. no
final da lista
– Uma estratégia melhor é manter todas as pág.
em uma lista circular em forma de relógio
– Um ponteiro aponta para a pág. mais antiga, ou
seja, para a ‘cabeça’ da lista

31
Algoritmos de substituição de
páginas
• Relógio

32
Algoritmos de substituição de
páginas
• Menos recentemente usada (MRU)
– Desempenho teórico do algoritmo ótimo baseia-
se na observação de que páginas referenciadas
intensamente nas últimas instruções
provavelmente serão de novo referenciadas nas
próximas instruções
– De modo oposto, é provável que pág. não foram
referenciadas nas últimas instruções não o sejam
nas próximas
– A implementação é possível mas onerosa

33
Algoritmos de substituição de
páginas
• Menos recentemente usada (MRU)
– Possuir um hardware especial que incrementa um
valor automaticamente a cada instrução executada
– A cada entrada da tabela de pág. deve ter um campo
extra para armazenar o valor do contador
– Após cada referência a memória, o valor do contador
é armazenado nesse campo
– Quando ocorre uma falta de pág., o SO examina
todos os campos contadores da tabela a fim de
encontrar o menor deles (menos recentemente
usada)

34
Algoritmos de substituição de
páginas
• Menos recentemente usada (MRU)
– Para uma máquina com n moldura de pág. deve
ter um hardware auxiliar contendo uma matriz
de nxn bits, inicialmente todos com o valor 0
– Sempre que a moldura de pág. k for
referenciada, marcará todos os bits da linha k
com 1 e todos os bits da coluna k com 0
– Em um instante qualquer, a linha que possuir o
menor valor binário será a pág. MRU, e a linha
cujo valor binário seja o mais próximo do menor
será a segunda menos recentemente usada e
assim por diante
35
Algoritmos de substituição de
páginas
• Menos recentemente usada (MRU)
– MRU usando uma matriz – páginas referenciadas
na ordem 0,1,2,3,2,1,0,3,2,3

36
Resumo dos algoritmos de
substituição de página

37
Referências
• Andrew S. Tanenbaum. “Sistemas
Operacionais Modernos”. 2ª Edição, Prentice
Hall, 2007.
• Francis B. Machado e Luiz P. Maia.
“Arquitetura de Sistemas Operacionais”. 3a.
Edição. LTC, 2004.

38