Post on 02-Jul-2015
Gerência de Memória
2
Gerência de Memória
Idealmente, o que todo programador deseja é dispor de uma memória que seja grande rápida não volátil
“Programas tendem a se expandir a fim de ocupar toda a memória”.
Hierarquia de memórias pequena quantidade de memória rápida, de alto custo - cache quantidade considerável de memória principal de velocidade
média, custo médio gigabytes de armazenamento em disco de velocidade e custo
baixosO gerenciador de memória trata a hierarquia de
memórias
3
Sem abstração de memória
Os primeiros computadores não possuíam abstração de memória, tratando sempre com espaço físico.
Ex. MOV REG, 200
Não era possível haver dois programas na memória.
4
Executando Múltiplos programas sem abstração de memória
Swapping de processos copiando todo o conteúdo da memória para o disco
Ou seja, o processo que estava sendo executado e era o “dono” da memória
e depois colocando outro processo na memóriaEste seria o “dono” da memória da vez, e iria executar.
Acréscimo de hardware especial Memória dividida em blocos de k KB Para cada bloco, há um registrador que guarda uma chave para
acesso A PSW também possui uma chave O hardware interrompe a tentativa de um processo acessar um
bloco com código de proteção diferente da PSW.
Problema com realocação estática.
5
Executando Múltiplos programas sem abstração de memória
6
Proteção e Realocação
Para ter vários processos na memória sem interferência mútua, deve haver proteção e realocação.
ProteçãoPode ser conseguida com o uso da abstração
de memória espaço de endereçamento.Conjunto de endereços que um processo pode usar
para endereçar a memória.Cada processo tem seu próprio espaço de
endereçamento.
7
Proteção e Realocação
Realocação dinâmica – registrador-base e registrador-limite
registrador-base contém o endereço físico onde o programa começa na memória
registrador-limite possui o tamanho do programaCada vez que um processo referencia memória, o
hardware da CPU acrescenta o valor-base ao endereço do processo antes de mandar para o barramento
E verifica se o endereço fornecido é igual ou maior que o valor do registrador-limite.
Só o SO tem permissão de alterar os registradoresDesvantagem: adição é cara
8
Realocação dinâmica – registrador-base e registrador-limite
9
Swapping
Dificilmente todos os processos ativos cabem na memóriaAlguns podem ser mandados para o disco.
10
Swapping
Se houver muito espaços vazios na memória devido a swapping pode-se compactar a memóriaCombinando todos os processos
contiguamente na parte mais baixa da memóriaPouco usado porque é caro
11
Quantidade de memória a ser alocada
Fixa: SO aloca apenas o necessárioMas, normalmente, a área de dados do
processo cresce dinamicamente durante a execução do programa.
Se houver espaço vazio adjacente ao processo, pode crescer para lá;
Se não, o processo deve ser removido para outro espaço da memória que caiba;
Se não houver, e o espaço de swap do disco estiver cheio, o processo pode ser suspenso ou terminado.
12
Quantidade de memória a ser alocada
Pode-se alocar logo uma memória extraNão vai ser copiada para o disco em swappingDiminui a probabilidade de realocação ou swap
Só depois de preenchida
essa área extra é que
vai haver realocação,
swapping, suspensão
ou bloqueio.
13
Gerenciando memória livre
Quando a memória é atribuída dinamicamente, o SO deve gerenciá-la.
Dois modos de verificar a utilização da memória:
Mapa de BitsListas Encadeadas
14
Mapa de bits
Memória dividida em unidades de alocação
Para cada unidade há um bit no mapa dizendo se está ocupada ou não (1 ou 0)
Tamanho da unidadePequena – maior mapa, mas mesmo assim
ainda é pouco espaçoGrande – mapa pequeno, mas provável
desperdício na última unidade de cada processo.
15
Mapa de bitsProblema: procurar um espaço no mapa que
caiba um processo é lentoProcurar uma sequência de x 0’s, ou seja, de x
unidades livres consecutivas.
16
Listas Encadeadas
Listas ordenadas por endereçoAtualização rápida e simples quando processo termina
ou vai para o discoA lista pode ser duplamente encadeada, facilitando a
busca por item anterior para unificar
Quatro combinações de vizinhança para o processo X em término de execução
17
Listas Encadeadas Algoritmos para alocar memória para
processo criado ou vindo do discoFirst fit: procura o primeiro segmento que caiba
o processo. Quebra o segmento em 2, deixando em parte ocupada e livre.Rápido, pois procura o menos possível.
Next fit: inicia a busca a partir do ponto onde encontrou o segmento de tamanho suficiente da outra vez. Desempenho ligeiramente inferior ao do First Fit.
18
Listas Encadeadas
Best Fit: procura a lista inteira pelo segmento de tamanho mais adequado. Pode deixar vários pequenos segmentos que
não servirão para nenhum outro processo.Mais lento que o first fit.
Worst Fit: procura o segmento de maior tamanho, gerando “restos” grandes.Desempenho ruim em simulações.
19
Memória Virtual
Com registradores base e limite não dá para tratar de executar muitos programas grandesProgramas individualmente caberiam na
memória, mas não todos ao mesmo tempoSwapping de todo o programa é uma tarefa
muito demorada podendo levar vários segundos
Solução – uso de memória virtual
20
Memória Virtual
Cada programa tem seu próprio espaço de endereçamento dividido em páginas
Página é uma série sequencial de endereçosMapeamento de páginas na memória físicaNem todas as páginas precisam estar na
memória física para executar o programaSe o programa referencia uma parte do espaço de
endereçamento que está na memória física, o hardware executa o mapeamento dinâmico
Se não está, o SO é chamado para obter a parte que falta e re-executar a instrução que falhou.
21
Paginação
Endereços virtuais são “resolvidos” pela memory management unit – MMUMapeia os endereços
virtuais em físicosSe tiver na memória
física, manda para o barramento
Se não, chama o SO.
22
Paginação
Dois conceitos
Páginas – endereços virtuais gerados pelo programa
Molduras de página – unidades de memória física de mesmo tamanho das páginas
23
Paginação – Funcionamento da MMU
MMU com 16 páginas de 4KB
24
Tabelas de Páginas
Mapeiam páginas virtuais em molduras de páginas.
Entrada típica de uma tabela de páginas
25
Problemas enfrentados com Paginação
Mapeamento de endereço virtual para físico deve ser rápidoPois deve ser feito a cada referência à memória Instruções vêm da memória e referenciam operandos
nela – várias referências à memória em cada instruçãoDeve ser rápido para não virar gargalo de desempenho
Se o espaço de endereçamento virtual for grande, tabela também vai serCom tamanho de página de 4KB, um espaço de
endereços de 32 bits tem um milhão de páginasLogo a tabela também tem um milhão de entradas.
26
Para resolver os problemas
Tabela de páginas constituída de registradoresNão requer acesso a memória durante o mapeamentoMas se a tabela for grande é caro e fica lento ao
carregar toda a tabela a cada troca de contexto.
Tabela de páginas toda na memória Pode ter várias referências à memória para ler as
entradas da tabela em cada instruçãoFica muito, muito lento
27
TLB ou memória associativaPequeno dispositivo de hw localizado dentro da MMU
que mapeia endereços virtuais em físicos SEM acesso a tabela de páginas Tem poucas entradas, contendo mapeamento para as páginas
atualmente referenciadas Ex. endereços de acesso de um loop do processo
Quando um endereço chega à MMU, passa logo pela TLB que procura simultaneamente em todas as suas entradas pelo mapeamento. Se estiver lá (page hint), o número da moldura é obtido
diretamente. Se não (page miss), a MMU faz a busca normal na tabela de
páginas e a coloca na TLB, tirando uma outra.
O SO só é acionado quando uma página não está na memória. O gerenciamento e tratamento na TLB é por HW.
28
TLB ou memória associativa
TLB para acelerar a paginação
29
Tabelas de página para memórias muito grandes
TLB resolve o problema de acelerar a tradução de endereços virtuais para físicos
Ainda há o problema dos espaços de endereçamento virtual muito grandes
SoluçõesTabelas de página multinívelTabelas de página invertidas
30
Tabelas de página multinível
a) Endereço de 32 bits com 2 campos para endereçamento de tabelas de páginas
b) Tabelas de páginas com 2 níveis
Ao invés de tabela com mais de 1 milhão de entradas, temos 4096.
31
Tabelas de páginas invertidas
Com computadores de 64 bits, adotando páginas de 4KB, seria necessária uma tabela de página de 2^52 entradas, que se tivessem 8 bytes cada, demandariam juntas 30 milhões de GB.
Solução: tabelas de página invertidas Uma entrada por moldura de página A busca é feita pelo par (n,p) = processo n referencia página
virtual pBusca a cada referência na memória, numa tabela de 256KB (não
muito eficiente...) Economizam espaço, mas há grande demora na tradução de
páginas virtuais para físicas
32
Tabelas de páginas invertidas
Aprimoramento:Uso de TLB que contenha todas as páginas
mais intensamente utilizadasPage miss: busca com uso de hash nos
endereços virtuaisTodas as páginas virtuais com mesmo número de
hash são encadeadas na mesma entrada da tabelaDiminui o tempo de buscaE quando acha o número da moldura de página a
nova dupla (virtual, física) vai para TLB
33
Algoritmos de substituição de páginas
Quando há page fault, o SO deve escolher uma página para deixar a memória física para outra ocupar o seu lugar
Tentar escolher uma que não está sendo usada para evitar custos extras
Se a página foi modificada, a cópia do disco deve ser atualizada
34
Algoritmo ótimo
Seleciona uma página que não vai mais ser usada ou a que mais vai demorar a ser usada
Impossível na prática: o SO ainda não tem bola de cristal ou joga tarô para saber o futuro das aplicações
Usado como parâmetro de desempenho
35
Página não usada recentemente (NRU)
As páginas são separadas em quatro categorias quando há page fault
Classe 0: não referenciada, não modificada;Classe 1: não referenciada, modificada;Classe 2: referenciada, não modificada;Classe 3: referenciada, modificada.
Uma página da classe mais baixa não vazia é escolhida aleatoriamente para ser substituída.
Fácil de entender e implementar e tem desempenho adequado.
36
FIFO
Primeira página utilizada será a primeira substituída, ou seja, a mais antiga.
A substituição pode ser de uma página pouco usada, mas também de uma página muito usada.
Raramente utilizado.
37
Segunda Chance FIFO com análise do bit Referenciada (R) Se a página mais antiga tiver R em 1, vira 0 e vai para o fim da fila
com tempo atualizado, se tiver em 0, é substituída. Procura a página mais antiga que não tenha sido referenciada no
clock anterior Se todas as páginas tiverem com R em 1, vira FIFO puro.
38
Relógio
Mesmo funcionamento do segunda chance. Melhor desempenho, pois não há reinserção de página na fila,
apenas um apontador para a cabeça numa lista circular
39
Menos usada recentemente LRU
Boa aproximação do algoritmo ótimoAssume que páginas usadas recentemente logo serão
usadas novamente retira da memória página que há mais tempo não é usada
Uma lista encadeada de páginas deve ser mantida página mais recentemente usada no início da lista, menos
usada no final da lista atualização da lista à cada referência à memória
Alternativamente manter contador em cada entrada da tabela de página escolhe página com contador de menor valor zera o contador periodicamente
Pouco utilizado, pois a implementação é cara. Há aproximações por SW como o NRU e aging.
Ou usa um HW especial, mas poucas máquinas o possuem.
40
Questões de projeto para sistemas de paginação
Algumas questões devem ser consideradas para obter um bom desempenho de um sistema de paginação:
Política de alocaçãoTamanho de páginaEspaços separados de instruções e dadosPáginas compartilhadas
41
Política de alocação local x global
(a)Configuração (b)Substituição (c)Substituição original local global
42
Política de alocação local x global
Normalmente a alocação global funciona melhor, principalmente se o conjunto de trabalho cresce durante a execuçãoJá que com alocação local iria haver trashing (muitos
page fault em poucas instruções) mesmo com molduras livres no espaço de outro processo.
Alguns algoritmos funcionam com alocação global ou local como FIFO E LRU.
Outros só com alocação local como o WSClock.
43
Tamanho de página
Não há escolha ótima por depender de fatores conflitantes.
Página pequena Diminui o problema da fragmentação interna. Permite que apenas a parte utilizada do programa ocupe memória
Ex. Se o programa só ocupa 2KB, uma página grande de 16KB iria desperdiçar espaço já que 14KB serão de partes não usadas do programa.
Página grande Menor tabela de páginas. Transferência de páginas entre memória e disco mais rápida
Já que normalmente é feita uma página por vez. Se a tabela de páginas for carregada em registradores, páginas
grandes diminuem o tempo gasto. Fator importante, pois esse carregamento deve ser feito a cada
chaveamento.
44
Espaços separados de instruções e dados
a) Espaço de endereçamento único• Programador “rebola” para tudo caber se o espaço não for grande o
suficiente.b) Espaços separados de instruções (I) e dados (D)
• Linker sabe que os dados estão no endereço virtual 0 – estão separados
• I e D podem ser paginados independentemente• Duplica o espaço de endereçamento disponível.
45
Em grandes sistemas
multiprogramados pode haver
vários usuários executando o
mesmo programa ao mesmo
tempo.
Podem compartilhar
páginas read-only, para evitar
cópias duplicadas na memória.
Usando espaços I e D, dois
ou mais processos usam a
mesma tabela de páginas no
espaço I e diferentes no D.
Páginas Compartilhadas
46
Questões de implementação de memória virtual
Outras questões importantes a serem consideradas além de escolha de algoritmo de substituição, política de alocação e paginação por demanda ou antecipada.
Backup de InstruçãoRetenção de páginas na memóriaMemória secundária
47
Backup de instrução
A instrução que causou um page fault deve ser executada novamente
Pode ser muito difícil para o SO saber onde a instrução começa realmente.
Como solução, os projetistas de CPU usam um registro interno que guarda o valor de PC antes de cada instrução ser executada.
48
Retenção de páginas na memória
Se um processo está fazendo E/S, ele é suspenso e outro é escolhido para executar.
Se a alocação de páginas for global, pode ser que a página que contém o buffer de E/S seja escolhida para ser substituída.Parte dos dados serão escritas na página correta e
outra na página trazida do disco.
Solução: as páginas envolvidas em E/S são “trancadas” na memória e não podem ser substituídas.
49
Memória secundáriaComo se dá a alocação de páginas em disco?
(a) Paginação para uma área de troca estática(b) Páginas alocadas dinamicamente em disco
50
Segmentação
Espaço de endereçamento unidimensional com tabelas crescentes
Uma tabela pode atingir outra
Para o programador, gerenciar essas sobreposições é demorado e difícil.
51
SegmentaçãoSolução: Segmentação – prover a máquina com muitos
espaços de endereçamento independentes, os segmentos.
Os segmentos têm tamanhos diferentes que variam durante a execução;
Por serem espaços de endereçamento diferentes, cada segmento pode crescer ou diminuir sem afetar os outros;
Para especificar um endereço em memória segmentada, o programa deve fornecer duas partes:
(número do segmento, endereço dentro do programa)
Segmento é unidade lógica que o programador conhece e usa.
52
Segmentação
Permite que cada tabela cresça ou encolha, independentemente
53
Implementação de Segmentação Pura
(a)-(d) Desenvolvimento de fragmentação externa(e) Remoção da fragmentação via compactação
54
Segmentação com paginação
Se os segmentos são grandes, não dá para mantê-los na memória em sua totalidade.Gerando a idéia de paginar os segmentos, só deixando
na memória as páginas realmente necessárias a cada segmento.
ExemplosMULTICS – primeiro sistema de suporte a segmentos
paginadosPentium Intel – um modelo mais atual
55
MULTICS
a) Descritores de segmentos apontam para tabelas de páginas
b) Descritor de segmento – números indicam tamanhos dos campos
56
MULTICS
Conversão de um endereço MULTICS de duas partes em um endereço da memória principal
57
MULTICS
Uso de TLB de alta velocidade para acelerar a paginação
58
Pentium Intel
Baseado em duas tabelas GDT (Global Descriptor Table) – descreve os segmentos de
sistema, inclusive o SO. Única no sistema. LDT (Local Descriptor Table) – descreve os segmentos de cada
programa. Uma por programa.
Para acessar um segmento, um programa primeiro carrega um seletor para aquele segmento em um registrador de segmento.
59
Pentium Intel
Quando o seletor é carregado, o descritor correspondente é buscado e armazenado.
60
Pentium Intel
Conversão de par (seletor, deslocamento) para endereço linear
61
Pentium Intel
Mapeamento de um endereço linear sobre um endereço físico