Você está na página 1de 112

Administração de Memória

4.1 Administração básica de memória


4.2 Swapping
4.3 Memória Virtual
4.4 Algoritmos de substituição de páginas
4.5 Modelando algoritmos de substituição de páginas
4.6 Tópicos de projeto para sistemas de paginação
4.7 Tópicos de implementação
4.8 Segmentação
1
Administração de Memória

 Idealmente, programadores querem memória que


seja
⚫ Grande
⚫ Rápida
⚫ Não volátil
 Hierarquia
⚫ Cache
⚫ Memória principal
⚫ Disco
⚫ Fita
 O administrador de memória cuida da hierarquia!
2
Administração Básica de Memória
Monoprogramação sem Swapping ou Paginação

- SO com um processo de usuário

3
Multiprogramação com Partições Fixas

4
Modelando Multiprogamação

Degree of multiprogramming
Utilização da CPU = 1 – pn
Utilização da CPU em função do número de processos na
memória 5
Análise da performance de sistemas
Multiprogramados

6
Relocação e Proteção

 Não se pode saber com certeza onde o programa


será carregado na memória
⚫ Endereços de locação de variáveis e rotinas de código não
podem ser absolutos
⚫ Deve manter um programa fora das partições de outros
programas

 Usar valores de “base” e “limite”


⚫ Posições de endereços adicionadas ao valor base para
mapear para o endereço físico
⚫ Posições maiores que o valor limite são erradas

7
Swapping (1)

Alocação de memória muda quando processos:


⚫ Entram na memória
⚫ Saem da memória
Regiões sombreadas são memória não usadas

8
Swapping (2)

 Alocando espaço para um segmento de dados crescente


 Alocando espaço para segmentos de pilha e dados
crescentes
9
Administração de Memória com Bit Maps

 Parte de memória com 5 processos, 3


buracos
⚫ Marcas indicam unidades de alocação
⚫ Regiões sombreadas estão livres
 bit map
 Mesma informação em uma lista
10
Administração de Memória com Listas ligadas

Quatro situações para o fim do processo X


11
 Quando os segmentos de memória
alocados a processos e segmentos
de memória livres são mantidos em
uma lista ordenada por endereço, é
possível utilizar diversos algoritmos
para alocar memória a um processo
recém-criado (ou a um processo já
existente em disco que esteja
sendotransferido para a memória).

12
Alocação First Fit (primeiro
encaixe)
 O gerenciador de memória procura ao longo da
lista de segmentos de memória por um segmento
livre que seja suficientemente grande para esse
processo.
 Esse segmento é quebrado em duas parles, uma
das quais é alocada ao processo, e a parte
restante transforma-se em um segmento de
memória livre de tamanho menor

 É rápido pois procura o menos possível

13
Next fit (próximo encaixe)
 Alteração menor no algoritmo first fit
 funciona como o FirstFit exceto pelo fato de
sempre memorizar a posição em que encontra
um segmento de memória disponível de tamanho
suficiente.
⚫ Quando o algoritmo next fit tomar a ser chamado para
encontrar um novo segmento de memória livre, ele
inicializará sua busca a partir desse ponto
 Simulações feitas por Bays (1977) mostraram
que o nextfit fornece um desempenho
ligeiramente inferior ao do firstfit.

14
best fit (melhor encaixe)
 Pesquisa a lista inteira e escolhe o menor
segmento de memória livre que seja adequado ao
processo
 É mais lento que o algoritmo firstfit
⚫ precisa pesquisar a lista inteira cada vez que for chamado
 surpreendentemente, também resulta em maior
desperdício de memória do que firstfit e nextfit,
⚫ tende a deixar disponíveis inúmeros segmentos
minúsculos de memória e consequentemente inúteis.
 Em média, o algoritmo firstfit gera segmentos de
memória disponíveis maiores

15
worst fit (melhor encaixe)
 Pesquisa a lista inteira e escolhe o maior
segmento que seja adequado ao processo
 Deveria gerar segmentos livres grandes

 simulações mostram que não é uma idéia boa.

16
Exemplo
 Um segmento de memória de
tamanho 2 for necessário:
⚫ Qual será alocado pelo firstfit, nextfit,
bestfit e worstfit?

17
Resolver agora

18
Memoria Virtual
Paginação (1)

Posição e Função da MMU


19
Paginação (2)

Relação entre
endereços virtuais
e endereços físicos
dados pela tabela
de páginas

20
Tabelas de Páginas (1) 16 bits de
endereçamento virtual

Operação interna da MMU com 16 - 4 KB páginas


21
Resolver agora
 Considere um espaço de endereçamento lógico
de 20 bits, com páginas de 2Kbytes cada
mapeados em um espaço de endereçamento
físico de 2 mega bytes.
⚫ a) Qual é o “comprimento” (número de entradas) e
“largura” (número de bits de cada entrada) da
tabela de páginas (desconsidere os bits de “direitos
de acesso”);
⚫ b) Qual é o efeito na tabela de páginas se a
memória física for reduzida à metade?
⚫ c) Qual é o efeito na tabela de páginas se a
tamanho da página for quadruplicado
⚫ d) Qual a área ocupada pela tabela de páginas?
Resolver agora 2
 Considere um espaço de endereçamento lógico
de 32 bits, com páginas de 4Kbytes cada
mapeados em um espaço de endereçamento
físico de 2 gigabytes.
⚫ a) Qual é o “comprimento” (número de entradas) e
“largura” (número de bits de cada entrada) da
tabela de páginas (desconsidere os bits de “direitos
de acesso”);
⚫ b) Qual é o efeito na tabela de páginas se a
memória física for reduzida à metade?
⚫ c) Qual é o efeito na tabela de páginas se a
tamanho da página for quadruplicado
⚫ d) Qual a área ocupada pela tabela de páginas?
Tabelas de Páginas (2)
Second-level page tables

Top-level
page table

 Endereço de 32 bits com 2 campos de tabelas de


páginas
 Tabela de páginas em 2 níveis 24
Resolva agora

 Suponha que um endereço virtual


de 32 bits seja quebrado em quatro
campos a, b, c e d. Os três
primeiros são usados pelo um
sistema de tabela de páginas de 3
níveis. O quarto campo é o
deslocamento.
⚫ O número de páginas depende dos
tamanhos de todos os quatro campos?
⚫ Se não, quais campos influenciam
neste tamanho e quais não? 25
Exercício:

26
 Solução do exercício

27
Tabelas de Páginas(3)

Entrada Típica de tabela de páginas

28
TLBs – Translation Lookaside Buffers
(Memória associativa)

Uma TLB para acelerar a paginação

29
Tabelas de Páginas Invertidas

Comparação entra uma tabela de páginas tradicional com


uma tabela de páginas invertida
30
Algoritmos de Substituição de Páginas

 Page fault força escolha


⚫ Qual página deve ser removida para ceder
espaço para a página que chega

 Páginas modificadas devem ser salvas


⚫ Não modificadas apenas sobrescritas

 Melhor não usar uma página usada


frequentemente
31
Algoritmo Ótimo

 Trocar a página que será necessária no


futuro mais distante
⚫ Ótima mas impossível…

 Estimativa por …
⚫ logging das páginas usadas em rexecuções
anteriores do processo
⚫ … não é prático…

32
Algorítmo Not Recently Used

 Cada página tem um bit de referência


(R) e um de modificação (M)
⚫ Os bis são setados quando a página é
modificada ou referenciada
 Classificação Das páginas
1. não referenciada, não modificada
2. não referenciada, modificada
3. referenciada, não modificada
4. referenciada, modificada
 NRU remove páginas aleatoriamente
⚫ A partir das classes mais baixas
numerações
33
FIFO
 Mantém uma lista ligada de todas as páginas
⚫ Na ordem em que foram carregadas

 A página no início da lista é substituida

 Desvantagem
⚫ Uma página carregada a muito tempo pode ser usada
frequentemente

34
Segunda Chance

 Operação da segunda chance


⚫ As páginas são classificas por FIFO
⚫ Lista de páginas se falta ocorre no tempo 20, A tem R
bit ligado (números acima das páginas são tempos de
carga) 35
Relógio

36
Least Recently Used (LRU)
 Assume que páginas usadas recentemente serão
usadas novamente em breve
⚫ Descarta a página não usada por mais tempo
 Deve manter uma lista ligada de todas as páginas
⚫ Usadas mais recentemente na frente, menos usadas no
fundo
⚫ Atualiza esta lista a cada referência à memória !!
 Alternativamente, mantém um contador em cada
entrada de página
⚫ Escolhe a página com o menor contador
⚫ Periodicamente zera o contador

37
Simulando LRU em Software (1)

LRU usando uma matriz – referências às


páginas na ordem 0,1,2,3,2,1,0,3,2,3 38
Simulando LRU em Software (2)

 O algoritmo do envelhecimento simula


LRU em software
 Note 6 páginas para 5 ticks do relógio, (a)
– (e) 39
Algoritmo do conjunto de trabalho (Working Set) (1)

 O Conjunto de Trabalho é o conjunto de páginas


usadas pelas k mais recentes referências à memória
 w(k,t) é o tamanho do conjunto de trabalho no
instante, t
40
Algoritmo do conjunto de trabalho (Working Set)(2)

41
Relógio do Conjunto de Trabalho (WSClock)

42
Resolver

43
Revisão dos Algoritmos de Substituição de Páginas

44
5 min –

• E se o número de entradas da TLB for reduzido à


metade?
• * e se for reduzido a duas entradas?
• * e se for apenas uma entrada?

45
46
47
48
49
50
51
 Uma máquina tem um
endereçamento virtual de 48 bits e
um endereçamento físico de 32 bits.
As páginas são de 8 KB.
 Quantas entradas são necessárias
para a tabela de páginas?

52
 Um computador com um endereçamento de
32 bits usa uma tabela de páginas de dois
níveis. Os endereços são quebrados em um
campo de 9 bits para a tabela de páginas
de nível 1, um campo de 11 bits para a
tabela de páginas de nível 2 e um
deslocamento.
⚫ Qual o tamanho das páginas e quantas existem
no espaço de endereçamento citado?

53
54
Alocação “Companheira” buddy
 baseada em um algoritmo de alocação de
memória que divide a memória em partições para
tentar satisfazer uma requisição de memória da forma
mais adequada possível.
 utiliza a divisão da memória em metades para tentar
proporcionar um best-fit.
 De acordo com Donald Knuth, o sistema buddy foi
inventado em 1963 por Harry Markowitz, que ganhou
em 1990 o Prêmio de Ciências Econômicas em
Memória de Alfred Nobel, e foi descrito pela primeira
vez por Kenneth C. Knowlton (publicado em 1965)

55
Alocação “Companheira” buddy
 Aloca memória em potências de 2, ou seja 2x , onde x
é um inteiro positivo.
 Por exemplo, se o sistema tem 2000K de memória
física, o limite superior de x seria 10, sendo 210K
(1024K) o maior bloco possível de alocar.
 Isto tem como resultado a impossibilidade de alocar
toda a memória em um único pedaço, os restantes
976K de memória deverão ser alocados em blocos
menores.

56
57
A partir do exemplo, é possível verificar que o que
acontece quando uma requisição de memória é feita
é o seguinte
• Quando a memória é alocada
1. Procura um bloco de memória de tamanho adequado (o menor 2k bloco que é
maior ou igual a memória requisitada)
1. Se encontrado, o mesmo é alocado para o Processo
2. Senão, ele tenta fazer um bloco de memória que seja adequado. O sistema faz isto
tentando o seguinte:
1. Divide um bloco livre de memória, maior que a memória solicitada, pela metade.
2. Se o limite inferior é encontrado, então aloca aquela quantidade de memória
3. Volte para o passo 1
4. Repita este processo até encontrar um bloco de memória adequado
• Quando a memória é liberada
1. Libera o bloco de memória
2. Verifica se o bloco vizinho é livre também?
3. Se é, combina os dois e volta para o passo 2, repetindo este processo até
encontrar o limite superior (toda memória está liberada) ou até encontrar um
vizinho que não está livre.

58
O Algoritmo Buddy no Linux
Inicialização:

 Todo o espaço de memória disponível


para alocação é inicialmente dividido em
blocos contíguos;
 seu tamanho é calculado usando a
seguinte fórmula:
MAX_ORDER – 1
⚫ PAGE_SIZE * 2
 Linux define em tempo de compilação 11 ordens
e o tamanho de página padrão é 4 KB.
⚫ Isso significa que o tamanho dos blocos de ordem 11 (os
maiores) é 4 KB * 210 = 4 MB.

59
O Algoritmo Buddy no Linux
Inicialização Exemplo:

 Assim, por exemplo, em um sistema


equipado com 2 GB de RAM na
inicialização, há pouco menos de 512
ordem 11 buddies complementares
⚫ 2 GB / 4 MB = 2.048 MB / 4 MB = 512

60
O Algoritmo Buddy no Linux
Qual é a diferença entre DMA e DMA32?:

 DMA é o baixo 16 MBytes de memória.


⚫ pode ser usado para transferências, por exemplo com
placas de rede, que só podem endereçar 24bits,
portanto 16MB. Algumas placas/drivers só podem
utilizar a memória da zona DMA. O DMA32 tem 4 GB de
tamanho, usado para troca de dados com cartões que
podem endereçar 32 bits.
 Existe por razões históricas; uma vez, há muito
tempo, havia um hardware que só podia fazer
DMA nessa área da memória física.
 O DMA32 existe apenas no Linux de 64 bits; são
os baixos 4 GBytes de memória, mais ou menos.

61
O Algoritmo Buddy no Linux
Inicialização Exemplo:

 eles não são exatamente 512 por causa


das Memory Zones:
⚫ por exemplo, considerando um sistema
x86_64 bit, temos os primeiros 16 MB
reservados para DMA Zone, enquanto todo o
resto é DMA32 Zone.
⚫ Portanto, o número real de companheiros é:
( 2.048MiB - 16 MiB ) / 4 MiB = 2.032 MiB / 4 MiB = 508

62
O Algoritmo Buddy no Linux
Desalocação de Memória:

 Quando um processo termina, os blocos


que foram alocados a ele são liberados: o
algoritmo tenta mesclar um amigo que se
tornou livre com seu amigo companheiro -
esse processo é chamado de coalescência.
⚫ dois blocos são considerados buddies
companheiros se forem o resultado de uma
divisão anterior do mesmo bloco pai direto.

63
O Algoritmo Buddy no Linux
Verificação dos blocos disponíveis:

cat /proc/buddyinfo

64
O Algoritmo Buddy no Linux
Verificação dos blocos disponíveis - exemplo:

• a partir desta saída, podemos supor que:


• este é um Kernel x86_64 - não há Highmem Zone
• este servidor possui duas CPUs físicas (nó 0, nó 1)
• a alocação de memória é bastante fragmentada -
ambos os nós - 0 e 1 esgotaram < ordem acima de 9
(começamos a contar por 0) - isso
• significa que não temos mais companheiros de
• 2(10-1) * PAGESIZE (512 * 4 Kib = 2 MiB) nem
• 2(11-1) * PAGESIZE (1024 * 4 Kib = 4 MiB)

65
O Algoritmo Buddy no Linux
Fragmentação de Memória:

 Ocorre quando, ao desalocar a memória,


não é possível unir dois buddies
complementares em um de ordem
superior:
⚫ como o kernel do Linux oferece suporte ao
gerenciamento de memória virtual, na
maioria das vezes a fragmentação da
memória física não é um problema,
⚫ mas de qualquer maneira em sistemas que
estão ativos por muito tempo pode se tornar
muito difícil alocar memória física contígua.
66
O Algoritmo Buddy no Linux
Falta de Memória:
⚫ Vejamos como ocorre a fragmentação de
memória na prática: para simplificar, considere
o seguinte exemplo de uma memória muito
pequena de 32K com ordem máxima de 1.
• Processo A solicita 8K: um bloco de 8K (ordem 1) é
alocado
• ProcessoB solicita 4K: um bloco de 8K (ordem 1) é
dividido em dois blocos de 4K (ordem 0) e o
companheiro de menor companheiro é alocado para
ele
• Processo C solicita 12K: um bloco de 8K (ordem 1) é
alocado e outro é dividido em dois blocos de 4K
(ordem 0) e o companheiro menor é alocado para ele
• Processo D solicita 4K: como já existe um buddy de
4K, companheiro daquele fornecido para B, o kernel o
atribui ao processo

67
O Algoritmo Buddy no Linux
Otimizações:
⚫ O alocador usado pelo Linux adiciona vários
aprimoramentos ao algoritmo
 Conjunto de páginas por CPU
 Alocador de amigos de partições
 Agrupar por tipos de migração
⚫ O conjunto de páginas por CPU é, na verdade, uma maneira
de reduzir a contenção de bloqueio entre os processadores
e otimizar a alocação de página única
⚫ Agrupar por tipos de migração é uma extensão adicionada
para limitar a fragmentação da memória externa:
 este é um problema antigo e vários métodos (e, portanto, vários
patches) foram enviados para tentar lidar com isso. Alguns deles,
embora talvez controversos, foram realmente fundidos.

68
O Algoritmo Buddy no Linux
cat /proc/pagetypeinfo

69
O Algoritmo Buddy no Linux
Falta de Memória:

70
Modelando Algoritmos de susbtituição de
Páginas – Anomalia de Belady

 FIFO com 3 molduras de páginas


 P's mostram quais referências de página
provocam uma falta de página

71
Modelando Algoritmos de susbtituição de
Páginas – Anomalia de Belady

 FIFO com 4 molduras de páginas


 P's mostram quais referências de página
provocam uma falta de página

72
Modelando Algoritmos de susbtituição de Páginas –
Anomalia de Belady

 FIFO com 3 molduras de páginas


 FIFO com 4 molduras de páginas
 P's mostram qual referência de página provoca uma falta
de página 73
Algoritmos de Pilha

Estado da Memória (M), após cada item


da string de referência ser processado
74
A String de Distância

Funções de Densidade de
Probabilidade para duas Strings de
Distância Hipotéticas
75
A String de Distância

 Computação da taxa de falta de páginas pela


string de distância
⚫ vetor C
⚫ vetor F
76
Tópicos de Projeto para Sistemas de Paginação
Políticas de Alocação Global vs Alocação Local (1)

 Configuração Original
 Substituição de página Local
 Substituição de página Global
77
Políticas de Alocação Global vs Alocação Local (2)

Taxa de Faltas de Páginas como uma função


do número de molduras atribuídas
78
Controle de Carga –
Escalonamento de médio prazo

 Apesar de bons projetos, os sistemas ainda


podem entrar em thrashing

 Quando a Frequência de Faltas de Página


indica:
⚫ Alguns processos precisam de mais
memória
⚫ Nenhum processo precisa de menos
memória
 Solução?
79
Tamanho de Página (1)

Pequeno
 Vantagens

 Desvantagem

80
Tamanho de Página(2)

 Overhead devido à fragmentação


interna e tabela de página
page table space

s e p
overhead = + internal
p 2 fragmentation
 Onde
⚫ s = tamanho médio do processo em bytes
⚫ p = tamanho da página em bytes
⚫ e = entrada de página Optimized when
p = 2se

81
Separar espaços de instruções e Dados

 Um espaço de endereçamento
 Espaços separados para I e D
82
Páginas Compartilhadas

83
Política de Limpeza
 Requerida para um processo em
background process, daemon de
paginação
⚫ Periodicamente inspeciona a memória
 Quando poucas molduras estão livres
⚫ Seleciona uma página para ser descartada
 Pode usar mesmo algoritmo(clock)
⚫ Como o algoritmos regular de troca de
páginas mas com parâmetros diferentes

84
Tópicos de Implementação
Envolvimento do So com Paginação
1. Criação do processo
− Determina tamanho do programa
− Cria a tabela de páginas
2. Execução do processo
MMU iniciada para o novo processo
− TLB flushed
3. Momento da falta de página
− Determina endereço virtual causando a falta
− swap página alvo fora e requerida para dentro
4. Termino do processo
− Libera tabela de páginas e páginas

85
Administração de Falta de páginas (1)

1. Hardware traps para kernel


2. Registradores gerais salvos
3. SO determina qual página virtual é requerida
4. SO checa validade do endereço, busca a moldura
de página
5. Se moldura selecionada estiver suja, escreve-a
em disco

86
Administração de Falta de páginas (2)

6. SO traz página nova do disco


7. As tabelas de páginas são atualizadas
⚫ Instrução que provocou a falta volta para seu
início
8. Processo de falta restaurado
9. Registradores restaurados
⚫ Programa continua

87
Backup de Instrução
Uma instrução  Instrução de 6 bytes
provocando uma  Para reinicializar essa instrução, o
sistema operacional deve determinar
falta de página onde se encontra o primeiro byte da
instrução.
 O valor do PC no instante da
interrupção depende de qual
operando causou a falta de página e
de como o microcódigo da CPU foi
implementado

 Podem existir registradores


escondidos para salvar o PC e
regs. autoincrementados

88
Backup de Instrução

 A instrução que se inicializa no endereço 1000 e que faz três


referências à memória:
⚫ A própria palavra de instrução e os dois deslocamentos dos
operandos.
⚫ Dependendo de qual dessas três referências
tiver causado a falta de página, o contador de programa
pode ser 1000, 1002 ou 1004 no instante a falta,
⚫ Muitas vezes é impossível ao SO determinar precisamente onde a
instrução se inicializa:
 Se o contador de programa estiver na posição 1002 no instante da ocorrência da
falta de página, o sistema operacional não disporá de meios para determinar se a
palavra no endereço 1002 é um endereço de memória associado a uma instrução
em 1000 (por exemplo, a posição de um operando) ou se é o próprio
código de operação da instrução.

89
Travando páginas em memória
 Memória virtual e ES interagem
ocasionalmente
 Processo faz uma chamada para uma
leitura de um dispositivo em um buffer
⚫ Enquanto espera por ES, outro processo inicia
⚫ Ocorre uma falta de página
⚫ O buffer do primeiro processo pode ser escolhido
para page-out
 É necessário especificar algumas páginas
“travadas”(locked)

90
Backing Store

(a) Paginação para área de swap estática


(b) Backing up páginas dinamicamente
91
Separação de Política e Mecanismo

Administração de falta de página com um paginador


externo
92
Segmentação (1)

 Espaço de endereçamento uni-dimensional com tabelas


crescentes
 Uma tabela pode invadir a outra 93
Segmentação (2)

Permite cada tabela crescer/encolher


independentemente 94
Segmentação (3)

Comparação entre paginação e


segmentação 95
Implementação de segmentação pura

(a)-(d) desenvolvimento de “xadrez”


(e) Remoção por compactação 96
97
98
99
Segmentação com paginação: MULTICS (1)

 Segmento descritor aponta para tabelas de páginas


 Segmento descritor – números são comprimentos dos campos

100
Segmentação com paginação : MULTICS (2)

Um endereço virtual MULTICS de 34-


bit

101
Segmentação com paginação : MULTICS (3)

Conversão de um endereço de duas partes em um endereço


de memória 102
Segmentação com paginação: MULTICS (4)

 Versão simplificada da MULTICS TLB


 Existencia de 2 tamanhos de páginas faz a TLB mais 103
complicada
Segmentação com paginação: Pentium (1)

Um seletor Pentium

104
Segmentação com paginação: Pentium (2)

 Descritor de segmento de código


do Pentium
 Segmentos de dados diferentes
(ligeiramente) 105
Segmentação com paginação: Pentium (3)

Conversão de (selector, offset) para endereço


linear
106
Segmentação com paginação: Pentium (4)

Mapeamento do endereço linear em endereço


físico 107
Segmentação com paginação: Pentium (5)

Level

Proteção no Pentium
108
109
110
111
112

Você também pode gostar