gerência de memória

61
Gerência de Memória

Upload: codex2011

Post on 02-Jul-2015

2.449 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Gerência de Memória

Gerência de Memória

Page 2: 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

Page 3: Gerência de Memória

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.

Page 4: Gerência de 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.

Page 5: Gerência de Memória

5

Executando Múltiplos programas sem abstração de memória

Page 6: Gerência 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.

Page 7: Gerência de Memória

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

Page 8: Gerência de Memória

8

Realocação dinâmica – registrador-base e registrador-limite

Page 9: Gerência de Memória

9

Swapping

Dificilmente todos os processos ativos cabem na memóriaAlguns podem ser mandados para o disco.

Page 10: Gerência de Memória

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

Page 11: Gerência de Memória

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.

Page 12: Gerência de Memória

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.

Page 13: Gerência de Memória

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

Page 14: Gerência de Memória

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.

Page 15: Gerência de Memória

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.

Page 16: Gerência de Memória

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

Page 17: Gerência de Memória

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.

Page 18: Gerência de Memória

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.

Page 19: Gerência de Memória

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

Page 20: Gerência de Memória

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.

Page 21: Gerência de Memória

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.

Page 22: Gerência de Memória

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

Page 23: Gerência de Memória

23

Paginação – Funcionamento da MMU

MMU com 16 páginas de 4KB

Page 24: Gerência de Memória

24

Tabelas de Páginas

Mapeiam páginas virtuais em molduras de páginas.

Entrada típica de uma tabela de páginas

Page 25: Gerência de Memória

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.

Page 26: Gerência de Memória

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

Page 27: Gerência de Memória

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.

Page 28: Gerência de Memória

28

TLB ou memória associativa

TLB para acelerar a paginação

Page 29: Gerência de Memória

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

Page 30: Gerência de Memória

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.

Page 31: Gerência de Memória

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

Page 32: Gerência de Memória

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

Page 33: Gerência de Memória

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

Page 34: Gerência de Memória

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

Page 35: Gerência de Memória

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.

Page 36: Gerência de Memória

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.

Page 37: Gerência de Memória

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.

Page 38: Gerência de Memória

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

Page 39: Gerência de Memória

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.

Page 40: Gerência de Memória

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

Page 41: Gerência de Memória

41

Política de alocação local x global

(a)Configuração (b)Substituição (c)Substituição original local global

Page 42: Gerência de Memória

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.

Page 43: Gerência de Memória

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.

Page 44: Gerência de Memória

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.

Page 45: Gerência de Memória

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

Page 46: Gerência de Memória

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

Page 47: Gerência de Memó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.

Page 48: Gerência de Memória

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.

Page 49: Gerência de Memória

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

Page 50: Gerência de Memória

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.

Page 51: Gerência de Memória

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.

Page 52: Gerência de Memória

52

Segmentação

Permite que cada tabela cresça ou encolha, independentemente

Page 53: Gerência de Memória

53

Implementação de Segmentação Pura

(a)-(d) Desenvolvimento de fragmentação externa(e) Remoção da fragmentação via compactação

Page 54: Gerência de Memória

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

Page 55: Gerência de Memória

55

MULTICS

a) Descritores de segmentos apontam para tabelas de páginas

b) Descritor de segmento – números indicam tamanhos dos campos

Page 56: Gerência de Memória

56

MULTICS

Conversão de um endereço MULTICS de duas partes em um endereço da memória principal

Page 57: Gerência de Memória

57

MULTICS

Uso de TLB de alta velocidade para acelerar a paginação

Page 58: Gerência de Memória

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.

Page 59: Gerência de Memória

59

Pentium Intel

Quando o seletor é carregado, o descritor correspondente é buscado e armazenado.

Page 60: Gerência de Memória

60

Pentium Intel

Conversão de par (seletor, deslocamento) para endereço linear

Page 61: Gerência de Memória

61

Pentium Intel

Mapeamento de um endereço linear sobre um endereço físico