Gerenciamento de memória

Propaganda
Sistemas de Computação
Gerenciamento
Gerenciamento de
de memória
memória
Localização de processos
Sistemas de Computação
• Um programa fica armazenado em disco como um
arquivo executável binário e tem que ser colocado
na memória para começar a ser executado
• Os processos podem ser movidos entre a memória
e o disco durante sua execução
• Fila de entrada – coleção de processos no disco que
estão esperando para serem colocados na memória
para poderem ser executados
• Processos podem ser carregados em qualquer
endereço da memória
Mapeamento entre espaços de
endereçamento
Sistemas de Computação
• Endereços no programa fonte são simbólicos
• Compiladores geram endereços relocáveis para os
endereços simbólicos
• O linker ou loader irão transformar este
endereços relocáveis em endereços absolutos
Definição de endereços para instruções e
dados
Sistemas de Computação
• Tempo de compilação: Ocorre quando o endereço
onde o processo irá ser carregado é conhecido.
Um código absoluto com os endereços é gerado e
caso o endereço mude, o programa tem que ser
recompilado
• Tempo de carga: Caso o endereço não seja
conhecido, o compilador tem que gerar código
relócavel
• Tempo de execução: Caso um processo possa ser
movido de um segmento de memória para outro
durante a sua execução
Processamento do programa do usuário
Sistemas de Computação
Espaço lógico versus físico
Sistemas de Computação
• O conceito de espaço de endereçamento lógico
ligado a um espaço de endereçamento físico é o
ponto principal nos mecanismos de gerenciamento
de memória
– Endereço lógico– gerado pela CPU: também conhecido como
endereço virtual
– Endereço físico – endereço recebido pela memória
• Endereços lógicos (virtuais) diferem dos endereços
físicos em tempo de execução
Unidade de gerenciamento de memória
Sistemas de Computação
• Dispositivo de hardware que mapeia endereços
virtuais para físicos
• Um valor base armazenado no registrador de
relocação é adicionado a cada endereço gerado
pelo processo
• O programa do usuário manipula endereços
lógicos; nunca vê os endereços reais
• A localização final de uma referência à memória
só é definida quando a referência é executada.
Relocação dinâmica utilizando registrador
de relocação
Sistemas de Computação
Carregamento dinâmico
Sistemas de Computação
• Rotina só é carregada quando ativada
• Melhor utilização do espaço de memória; rotina
não utilizada nunca é carregada
• Particularmente útil quando grande quantidade
de código é utilizado para casos que ocorrem
raramente
• Não precisa de suporte do sistema operacional,
mas S.O pode prover rotinas para que o
programador possa realizá-lo
Ligação dinâmica
Sistemas de Computação
• A ligação é adiada até o tempo de execução
• Utilizada para otimizar uso de biblioteca de
rotinas do sistema
• Pedaço de código denominado stub é utilizado
para localizar a rotina necessária residente na
memória
• O stub substitui o seu próprio código pelo
endereço da rotina e a executa
• O sistema operacional tem que verificar se a
rotina já está no espaço de endereçamento de
algum processo e se pode ser compartilhada
Overlays
Sistemas de Computação
• Necessário quando o processo é maior que a
quantidade de memória que pode ser alocada para
ele
• Mantém na memória somente as instruções e
dados necessários em um dado momento
• Implementado pelo usuário, não precisa de
suporte do sistema operacional
• Usuário programa leitura de arquivos do disco
para a memória e força o programa a ir para a
posição de memória
• Complexo de utilizar
Overlays para um montador em dois
passos
Sistemas de Computação
Swapping
Sistemas de Computação
• Um processo pode ser trocado ( swapped)
temporariamente da memória para um outro
dispositivo de apoio (disco), e trazido de volta para
a memória para continuar a sua execução
• Roll out, roll in – variante do swapping utilizada
para algoritmos de escalonamento baseados em
prioridade; processo com menos prioridade vai
para disco para processo de maior prioridade ser
carregado e executado
• Caso a definição dos endereços físicos seja feita em
tempo de compilação ou carga, o processo que foi
para o disco tem que voltar para o mesmo lugar
na memória
Swapping
Sistemas de Computação
• Caso a definição dos endereços físicos seja feita em
tempo de execução, o processo que foi para o disco
pode voltar para lugar diferente na memória
• O dispositivo de apoio tem que ser um disco
rápido com capacidade suficiente para acomodar
cópias de todas as imagens de programas de todos
usuários e deve prover acesso direto e estas
imagens
• Fila de prontos consiste dos processos que estão no
dispositivo de apoio e na memória prontos para
serem executados
• O dispatcher é acionado e no caso do processo
selecionado não estar na memória e não existir
espaço livre na memória, um processo é tirado da
memória e colocado no disco
Esquema de swapping
Sistemas de Computação
Swapping
Sistemas de Computação
• A troca de contexto em um sistema com swapping
é alta
– Ex. 1M bytes devem ser transferidos para um disco que tem taxa
de transferência de 5MB/s e tempo de latência médio igual a 8 ms.
Tempo total = 208 milisegundos, time slice deve ser
substancialmente maior que 416 milisegundos
• A maior parte do tempo é utilizada para realizar a
transferência entre a memória e dispositivo de
apoio, então deve se fazer a transferência somente
das posições de memória que estão sendo
realmente utilizadas pelo processo
Swapping
Sistemas de Computação
• Processos que utilizam alocação dinâmica de
memória devem informar ao sistema operacional
as suas necessidades de memória através de
chamadas ao sistema (request memory e release
memory)
• Caso um processo vá para o disco e exista uma
operação de E/S pendente para ele, podem ocorrer
problemas, porque o dispositivo de E/S pode
escrever na área de um novo processo que foi
colocado no lugar dele
Swapping
Sistemas de Computação
• Soluções: não permitir swapping para processos
com E/S pendente ou só permitir acesso pelo
dispositivo de E/S a buffer do sistema operacional,
que atualiza buffer do processo quando ele estiver
na memória
• Mecanismo pouco utilizado e com algumas
modificações
• Unix inicia swapping quando sistema muito
carregado
– muitos processos no sistema
– limite de memória livre é atingido
Alocação contígua
Sistemas de Computação
• Geralmente a memória principal é dividida em
duas partições:
– Sistema operacional colocado nos endereços de memória mais
baixos (memória baixa) junto com vetor de interrupções
– Processos do usuário ficam na memória mais alta
• Alocação contígua da memória
– O sistema operacional tem que ser protegido do acesso dos
processos do usuário, os quais devem ser protegidos de acesso
entre eles
– O registrador de relocação contém o valor do menor endereço
físico e o registrador de limite contém a faixa de endereçamento
lógico - cada endereço lógico tem que ser menor que o registrador
limite
Suporte de hardware para registradores
limite e de relocação
Sistemas de Computação
Múltiplas partições
Sistemas de Computação
• Alocação de múltiplas partições
– Hole (buracos)– bloco de memória disponível ; buracos de vários
tamanhos ficam espalhados pela memória
– Quando um processo chega no sistema, o sistema procura por um
buraco que tenha uma quantidade de memória livre suficiente para
acomodar o processo
– O sistema operacional mantém informações sobre:
• partições alocadas
• partições livres (buraco)
Múltiplas partições
Sistemas de Computação
OS
OS
OS
OS
process 5
process 5
process 5
process 5
process 9
process 9
process 8
process 2
process 10
process 2
process 2
process 2
Alocação dinâmica de memória
Sistemas de Computação
• Como satisfazer um pedido de tamanho n tendo
uma lista de buracos livres ?
– First-fit: Aloca o primeiro buraco da lista que seja grande o
suficiente para o processo
– Best-fit: Aloca o menor buraco que seja grande o suficiente
para o processo; precisa procurar a lista toda, caso não esteja
ordenada. Produz o menor buraco
– Worst-fit: Aloca o maior buraco possível; precisa procurar toda
a lista Produz o maior buraco
First-fit e best-fit são melhores que worst-fit em termos
de velocidade e utilização de armazenamento
Fragmentação
Sistemas de Computação
• Fragmentação externa – existe a quantidade de
memória que o processo precisa, mas não é
contígua
• Fragmentação interna – memória alocada é um
pouco maior que a requerida pelo processo; esta
diferença é memória interna a uma partição de
tamanho fixo que não está sendo utilizada
Fragmentação
Sistemas de Computação
• Redução de fragmentação externa por
compactação
– Arruma-se o conteúdo da memória de modo a colocar toda a
memória livre junta em um único bloco
– Compactação só é possível caso a relocação seja dinâmica e
seja realizada em tempo de execução
Paginação
Sistemas de Computação
• Gerenciamento de memória que permite que o
espaço de endereçamento físico não precise ser
contíguo
• Divide a memória física em blocos de tamanho
fixo denominados frames (tamanho é em potência
de 2, entre 512 bytes e 8192 bytes).
• Divide memória lógica em blocos de mesmo
tamanho denominadas páginas.
• Gerencia os frames livres
Paginação
Sistemas de Computação
• Para executar um programa de tamanho igual a n
páginas, precisa-se encontrar n frames livres e
carregar o programa nestes frames
• Possui uma tabela de páginas para traduzir o
endereço lógico em físico
• Não ocorre fragmentação externa, mas pode
ocorrer interna
Esquema de tradução de endereço
Sistemas de Computação
• O endereço gerado pela CPU é dividido em duas
partes:
– Número de página (p) – utilizada como um índice para a tabela de
páginas que contém o endereço base de cada página na memória
física
– Deslocamento de página (d) – combinada com o endereço base da
página para definir o endereço da memória física que será enviado
para a unidade de memória
Arquitetura para tradução de
endereços
Sistemas de Computação
Exemplo de paginação
Sistemas de Computação
Exemplo de paginação
Sistemas de Computação
Frames livres
Sistemas de Computação
Antes da alocação
Depois da alocação
Implementação da tabela de páginas
Sistemas de Computação
• Tabela de páginas é mantida na memória
• Registrador base da tabela de páginas (PTBR)
aponta para a tabela de páginas
• Registrador de tamanho de tabela de página
(PRLR) indica o tamanho da tabela
• Neste esquema, cada acesso à memória para obter
dado ou instrução requer dois acessos à memória:
um para acessar a tabela de páginas e outro para
obter a instrução ou dado
Implementação da tabela de páginas
Sistemas de Computação
• O problema de acessar a memória duas vezes pode
ser resolvido utilizando-se uma memória cache
denominada translation look-aside buffers (TLBs)
Hardware de paginação com TLB
Sistemas de Computação
Tempo efetivo de acesso
Sistemas de Computação
• Procura na TLB =  unidades de tempo
• Assuma que o ciclo de memória é 1 microsegundo
• Taxa de acerto – percentagem de vezes que o
número de página é encontrado na TLB (depende
do tamanho da TLB)
• Taxa de acerto = 
• Tempo efetivo de acesso (EAT)
EAT = (1 + )  + (2 + )(1 – )
=2+–
Proteção de memória
Sistemas de Computação
• Proteção de memória é implementada utilizandose um bit de proteção para cada frame
• Bit válido-inválido é adicionado a cada entrada da
tabela de páginas:
– “válido” indica que a página associada pode estar no espaço de
endereçamento lógico do processo e portanto é uma página legal
– “inválido” indica que a página não pode estar no espaço de
endereçamento lógico do processo
Bit válido (v) ou inválido (i) na tabela de
páginas
Sistemas de Computação
Estruturação da tabela de páginas
Sistemas de Computação
• Paginação hierárquica
• Paginação por hash
• Tabela de página invertida
Tabelas de páginas hierárquicas
Sistemas de Computação
• Divide o espaço lógico de endereçamento em
múltiplas tabelas de páginas
• Uma opção simples é dividir a tabela de ´páginas
em dois níveis
Exemplo de paginação em dois níveis
Sistemas de Computação
• Um endereço lógico (em uma máquina de 32 bits
com tamanho de página de 4K) é dividida em:
– um número de pagina consistindo de 20 bits
– um deslocamento de página consistindo de 12
bits.
• Com o tabela de página é paginada, o número de
página é dividido em:
– um número de página de 10 bits
– um deslocamento de página de 10 bits
Exemplo de paginação em dois níveis
Sistemas de Computação
• Formato do endereço lógico:
número de página
p1
10
deslocamento de página
p2
d
10
12
onde p1 é um índice para a tabela de página mais
externa e p2 é o deslocamento na página da tabela
mais externa
Esquema de tabela de páginas em dois
níveis
Sistemas de Computação
Esquema de tradução de endereços
Sistemas de Computação
Tabelas de páginas com hash
Sistemas de Computação
• Comum em espaço de endereçamento > 32 bits.
• O número da página virtual é mapeado por
hashing na tabela de páginas.
• A entrada da tabela de páginas pode conter uma
cadeia de elementos que estão mapeados na
mesma entrada
• ´Procura-se nesta cadeia pelo número da página
virtual desejada e caso ela seja encontrada, obtémse o frame físico correspondente
Tabela de páginas com hashing
Sistemas de Computação
Tabela de páginas invertida
Sistemas de Computação
• Uma entrada para cada página real da memória
• Cada entrada contém, para um determinado
endereço real, o endereço virtual da página que
está ali armazenada, com informações do processo
que a possui
• Diminui a memória necessária para armazenar
cada tabela de páginas, mas aumenta o tempo
necessário para a procura na tabela quando
ocorre uma referência de página
• Utiliza-se tabelas hash para limitar a procura para
uma ou poucas entradas na tabela de páginas
Arquitetura de tabela de páginas
invertida
Sistemas de Computação
Páginas compartilhadas
Sistemas de Computação
• Código compartilhado
– Uma cópia de código somente-leitura (reentrante) é compartilhada
entre processos (editores de texto, compiladores, sistemas de
janelas)
– Código compartilhado deve aparecer no mesmo local no espaço de
endereçamento lógico de todos os processos
• Códigos e dados privados
– Cada processo mantém uma cópia separada do código e dos dados
– As páginas para o código e dados privados podem aparecer em
qualquer local do espaço de endereçamento lógico
Exemplo de páginas compartilhadas
Sistemas de Computação
Segmentação
Sistemas de Computação
• Esquema de gerenciamento de memória que
suporta uma visão da memória física mais
próxima à do usuário
• Um programa é uma coleção de segmentos. Um
segmento é uma unidade lógica, tal como um
programa principal, procedimento, método,
objeto, variáveis locais e globais, blocos comuns,
pilha, tabela de símbolos, arrays
Visão do usuário de um programa
Sistemas de Computação
Visão lógica da segmentação
Sistemas de Computação
1
4
1
2
3
4
2
3
espaço do usuário
espaço de memória física
Arquitetura de segmentação
Sistemas de Computação
• Um endereço lógico consiste da tupla: <númerosegmento, deslocamento>
• Tabela de segmentos – mapeia endereços físicos de
duas dimensões
• Cada entrada na tabela possui:
– base – contém o endereço físico inicial onde o segmento reside na
memória
– limite – especifica o tamanho do segmento
Arquitetura de segmentação
Sistemas de Computação
• Registrador base de segmento de tabela (STBR)
aponta para a localização do segmento na
memória
• Registrador de tamanho do segmento da tabela
(STLR) indica o tamanho do segmento
Arquitetura de segmentação
Sistemas de Computação
• Relocação
– dinâmica
– realizada por tabela de segmentação
• Compartilhamento
– segmentos compartilhados
– mesmo número de segmento
• Alocação
– first fit/best fit
– fragmentação externa
Arquitetura de segmentação
Sistemas de Computação
• Proteção é fornecida com associação a cada
entrada da tabela de segmentos das seguintes
informações:
– bit de validação = 0  segmento ilegal
– privilégios read/write/execute
• Bits de proteção são associadas com segmentos;
compartilhamento de código ocorre no nível de
segmento
• Como os segmentos variam em tamanho, a
alocação de memória é um problema de alocação
dinâmica de memória
Hardware para segmentação
Sistemas de Computação
Exemplo de segmentação
Sistemas de Computação
Compartilhamento de segmentos
Sistemas de Computação
Tradução de endereços no Intel 30386
Sistemas de Computação
Download