Gerência de Memória

Propaganda
Gerência de Memória
Eduardo Ferreira dos Santos
Ciência da Computação
Centro Universitário de Brasília UniCEUB
Abril, 2016
1 / 45
Sumário
1
Introdução
2
Espaços de endereçamento
3
Realocação estática e dinâmica
4
Alocação de memória
2 / 45
Introdução
1
Introdução
2
Espaços de endereçamento
3
Realocação estática e dinâmica
4
Alocação de memória
3 / 45
Introdução
Gargalo de Von Neumann
Figura 1.1: Arquitetura de Von Neumann
4 / 45
Introdução
Denição
Gerenciamento de memória consiste em manter o controle das
partes da memória que estão sendo utilizadas e por quem, decidir
que processos serão carregados para a memória quando houver
espaço disponível, alocar e desalocar espaço quando necessário.
[Dias, 2005]
Memória: conjunto de palavras e seus endereços [Favacho, 2009].
5 / 45
Introdução
A memória e sua utilidade
O processador só pode armazenar informações nos registradores e na
memória;
Como a memória é um uxo contínuo de dados, é papel do sistema
operacional proteger e organizar as informações armazenadas na
memória.
Algumas tarefas que o gerenciador de memória do SO deve executar:
Manter o controle das partes da memória que estão em uso e das
partes que não estão;
Alocar espaço para os processos e liberar quando eles terminarem;
Alocar memória principal e secundária;
Alocar a memória secundária é papel do sistema gerenciador de
arquivos.
6 / 45
Espaços de endereçamento
1
Introdução
2
Espaços de endereçamento
3
Realocação estática e dinâmica
4
Alocação de memória
7 / 45
Espaços de endereçamento
Proteção
O sistema operacional deve manter os processos dos usuários em áreas
separadas da memória;
Espaço de endereçamento: conjunto de endereços que os processos
podem usar para endereçar a memória
[Tanenbaum and Machado Filho, 1995].
Proteção: estratégia utilizada para garantir que não haja interferência
entre os componentes básicos de um sistema e os programas do
usuário [Favacho, 2009].
Espaço do kernel x Espaço do usuário.
Figura 2.1: Utilização do endereço virtual de memória [Duarte, 2009]
8 / 45
Espaços de endereçamento
Registradores de limite
Ideia: mapear endereços
mínimos e máximos;
O endereço inferior representa
o menor endereço alocável
disponível. Chamado de
registrador base;
O endereço superior representa
o maior endereço alocável
disponível. Chamado de
registrador limite.
Figura 2.2: Registradores base e
registradores limite [Galvin et al., 2013]
9 / 45
Espaços de endereçamento
Alocação
O valor do registrador base é somado a cada endereço gerado por um
processo do usuário;
A cada alocação o valor é calculado novamente para garantir que está
entre o base e o limite.
Figura 2.3: Vericação de limite [Galvin et al., 2013]
10 / 45
Espaços de endereçamento
Endereçamento
Programas prontos para entrar na CPU formam a la de pronto;
Pergunta: em que parte da memória começa a la de pronto?
11 / 45
Espaços de endereçamento
Endereçamento
Programas prontos para entrar na CPU formam a la de pronto;
Pergunta: em que parte da memória começa a la de pronto?
O endereço de memória é calculado de maneira diferente em cada
estágio do ciclo de vida do programa [Galvin et al., 2013]:
Código-fonte utiliza endereços simbólicos;
Código compilado vincula os endereços a espaços realocáveis;
O linker ou loader vai vincular os endereços realocáveis a endereços
físicos;
Cada vínculo mapeia um endereço realocável a um endereço físico.
12 / 45
Espaços de endereçamento
Fases do endereçamento
A vinculação dos endereços de memória ao programa pode acontecer
em três diferentes fases [Galvin et al., 2013]:
Compilação Se o endereçamento é conhecido (ou xo no código),
pode ser gerado um endereço absoluto. Se a posição
inicial do programa é alterada é necessário recompilar o
código;
Carregamento (load) Deve gerar endereços realocáveis se não for
conhecido no momento da compilação;
Tempo de execução O endereçamento é adiado até o momento da
execução se o processo puder se mover de um espaço de
endereçamento para outro em tempo de execução.
Obs.: É necessário suporte em hardware para
mapeamento de endereços (registradores base e limite,
por exemplo).
13 / 45
Espaços de endereçamento
Fases do endereçamento (gráco)
Figura 2.4: Passo a passo do endereçamento [Galvin et al., 2013]
14 / 45
Realocação estática e dinâmica
1
Introdução
2
Espaços de endereçamento
3
Realocação estática e dinâmica
4
Alocação de memória
15 / 45
Realocação estática e dinâmica
Endereço lógico e físico
O conceito de espaço de endereçamento físico é fundamental no
gerenciamento da memória:
Endereço lógico Gerado pela CPU. Também conhecido como
endereço virtual;
Endereço físico Endereço utilizado pela unidade de memória;
Espaço de endereçamento lógico conjunto de endereços lógicos
gerados pelo programa;
Espaço de endereçamento físico conjunto de endereços físicos gerados
pelo programa.
Os endereços lógico e físico são os mesmos quando se utiliza a
estratégia de endereçamento na compilação ou no carregamento;
Os endereços lógico e físico diferem quando utiliza-se a estratégia de
endereçamento em tempo de execução.
16 / 45
Realocação estática e dinâmica
Memory Management Unit MMU
Componente físico que mapeia, em tempo de execução, endereços
lógicos para endereços físicos;
Diferentes métodos para mapear endereços físicos e virtuais:
1
O valor do registrador de realocação é adicionado a cada endereço
gerado pelo processo e enviado para a memória.
2
O programa do usuário trabalha somente com endereços virtuais.
Intel 80x86 possuía quatro registradores para realocação.
O endereçamento em tempo de execução é feito quando o valor da
memória é solicitado;
O endereço lógico é vinculado ao endereço físico.
17 / 45
Realocação estática e dinâmica
Registrador de realocação
Figura 3.1: Realocação dinâmica utilizando registrador de realocação
[Galvin et al., 2013]
18 / 45
Realocação estática e dinâmica
Realocação dinâmica
A rotina não é carregada até o momento da execução;
Otimização de consumo da memória: rotinas que não são utilizadas
não são carregadas na memória;
Todas as rotinas são armazenadas na memória secundária (disco) no
formato realocável;
Não é necessário nenhum tipo de suporte especial do sistema
operacional.
Implementado no desenho do programa;
O sistema operacional pode ajudar fornecendo bibliotecas de
realocação dinâmica a serem utilizadas nos programas.
19 / 45
Realocação estática e dinâmica
Endereços virtuais
Vinculação estática: as bibliotecas do sistema e o código do programa
são combinados pelo loader na imagem binária do programa;
Vinculação dinâmica: adiada até o tempo da execução;
Um pedaço de código chamado stub é utilizado para localizar a
biblioteca na memória;
O stub substitui a si mesmo pela rotina da biblioteca e a executa;
O sistema operacional verica se a rotina está no endereço de
memória do processo. Caso não esteja, adiciona;
Conhecidas pelo sistema como bibliotecas compartilhadas shared
libraries.
20 / 45
Realocação estática e dinâmica
Layout do espaço de memória
Figura 3.2: Layout do espaço de endereçamento de memória no Linux
[Duarte, 2009]
21 / 45
Realocação estática e dinâmica
Troca de contexto
Em geral nem todos os programas cabem na memória ao mesmo
tempo;
A entrada e saída de processos pode ser conhecido como troca de
contexto;
Também há uma tendência dos processos utilizarem mais memória e
crescerem ao longo do tempo. Nesse caso é necessário expandir a
memória do processo;
Um processo só pode crescer até que não invada o espaço do outro;
As técnicas de alocação de memória tratam do problema de troca de
contexto e expansão de memória nos processos.
22 / 45
Alocação de memória
1
Introdução
2
Espaços de endereçamento
3
Realocação estática e dinâmica
4
Alocação de memória
23 / 45
Alocação de memória
Swapping
Além da utilização da memória
principal, o processo pode ser
enviado à uma área de troca
na memória secundária (swap);
O sistema operacional mantém
uma la de pronto
considerando os processos que
possuem imagem no disco;
Quando o processo volta à
memória principal, pode ser
Figura 4.1: Visão do Swap
carregado no mesmo endereço
[Galvin et al., 2013]
físico. Depende da
implementação.
24 / 45
Alocação de memória
Troca de contexto e swap
O processo pode ser enviado à área de troca (swap out) para depois
ser recuperado e carregado na memória principal (swap in);
Considere um processo de 100MB sendo enviado para a área de swap
em um disco com taxa de transferência de 50MB/s:
Tempo de swap out: 2000 ms;
Mais swap in no mesmo processo;
Tempo total de troca de contexto: 4000 ms ou 4s.
Outros problemas:
Operação de I/O pendente: não pode realizar o swap out, ou os dados
seriam enviados para o processo errado;
Transfere primeiro para o espaço do kernel, depois para o disco: double
buering. Adiciona ainda mais tempo de processamento.
Utilizar a área de swap é sempre a pior opção, mas pode ser a única.
25 / 45
Alocação de memória
Múltiplas partições
Cada partição deve conter um processo;
O número máximo de processos está limitado ao número de partições;
Quando uma partição está livre, um processo é selecionado e
carregado da la de pronto;
Ao m da execução, a partição ca livre para o próximo processo;
Buraco ou hole: partição livre.
Figura 4.2: Utilização de múltiplas partições [Galvin et al., 2013]
26 / 45
Alocação de memória
Partições xas
Partições de tamanho xo;
Sistema operacional guarda uma tabela de partições, indicando partes
livres e ocupadas;
Havendo mais processos que partições, uma ou mais las são
formadas.
Figura 4.3: Partições xas [Favacho, 2009]
27 / 45
Alocação de memória
Fragmentação interna
Problemas do particionamento de tamanho xo:
Utilização pouco eciente da memória;
Diculdade em determinar o tamanho exato do processo:
Partições pequenas demais não cabem o processo;
Partições grandes demais provocam a fragmentação interna.
Figura 4.4: Fragmentação interna em partições xas [Favacho, 2009]
28 / 45
Alocação de memória
Partições variáveis
Figura 4.5: Alocação com partições variáveis [Favacho, 2009]
29 / 45
Alocação de memória
Melhor utilização da memória
Melhor distribuição da memória;
Processo D tem que esperar pelo espaço disponível.
Figura 4.6: Melhor utilização da memória com partição variável [Favacho, 2009]
30 / 45
Alocação de memória
Fragmentação externa
O processo D, que tem 5K, não tem partição disponível;
Como o processo ainda não está na memória, chamamos
fragmentação externa.
Figura 4.7: Fragmentação externa com partição variável [Favacho, 2009]
31 / 45
Alocação de memória
Soluções para fragmentação
Coalescência Unir espaços adjacentes produzindo um espaço único de
tamanho maior;
Compactação Relocação dos processos para tornar todas as partições
contíguas.
As referências que cada instrução faz dependem da
posição do processo na memória;
Se o processo muda, as referências cam incorretas;
Só é possível se utilizar relocação dinâmica;
Existe uma tendência de agrupamento da memória em
um grande bloco único.
32 / 45
Alocação de memória
Coalescência
Figura 4.8: Coalescência de partições adjacentes [Favacho, 2009]
33 / 45
Alocação de memória
Compactação
Figura 4.9: Compactação de memória [Favacho, 2009]
34 / 45
Alocação de memória
Escolha do método de particionamento
As estratégias para escolha do método de particionamento tentam
evitar o problema da fragmentação antes que ele ocorra;
Como satisfazer uma requisição de tamanho n considerando a lista de
partições disponíveis?
First-t Aloca a primeira partição que for grande o suciente;
Best-t Aloca a menor partição que for grande o suciente.
É necessário buscar em toda a lista de partições, a não
ser que estejam ordenadas por tamanho.
Produz o menor tamanho de partição não alocado.
Worst-t Aloca a maior partição.
Deve buscar em toda a lista;
Produz o maior tamanho de partição não alocado.
35 / 45
Alocação de memória
First-t
Figura 4.10: Método rst-t [Favacho, 2009]
36 / 45
Alocação de memória
Best-t
Figura 4.11: Método best-t [Favacho, 2009]
37 / 45
Alocação de memória
Worst-t
Figura 4.12: Método worst-t [Favacho, 2009]
38 / 45
Alocação de memória
Controle de alocação
Mapa de bits Memória é dividida em unidades de alocação de tamanho
xo.
Ocupação de espaço variável. Quanto menor, maior o
mapa;
Para cada unidade de alocação há um bit no mapa. Ex.:
0 -> Bloco livre
1 -> Bloco ocupado
Lista encadeada Os elementos representam os segmentos livres e ocupados
da memória.
39 / 45
Alocação de memória
Mapa de bits
Tamanho do mapa depende do tamanho da memória e da unidade de
alocação;
Unidade de alocação grande: desperdício de memória;
Unidade de alocação pequena: mapas de bits grandes.
Não é muito utilizado, pois a busca por espaços livres pode ser lenta.
Figura 4.13: Exemplo de mapa de bits [Favacho, 2009]
40 / 45
Alocação de memória
Lista encadeada
Segmentos livres e ocupados são representados através de uma lista
encadeada;
Figura 4.14: Exemplo de lista encadeada [Favacho, 2009]
41 / 45
Alocação de memória
Buraco na lista
Nos seguintes endereços existem buracos na memória, ou seja,
partições não alocadas:
5-7;
18-19;
29-31.
Figura 4.15: Exemplo de buraco na lista [Favacho, 2009]
42 / 45
Alocação de memória
Realocação
Na realocação os buracos referenciam a si mesmos como espaços
disponíveis;
Os processos apontam somente para endereços que estão ocupados,
respeitando um pequeno oset.
Figura 4.16: Realocação na lista encadeada [Favacho, 2009]
43 / 45
Alocação de memória
OBRIGADO!!!
PERGUNTAS???
44 / 45
Alocação de memória
Dias, A. M. (2005).
Noções de sistemas operacionais.
Disponível em: http://www.dca.ufrn.br/∼xamd/dca0800/Cap03.pdf
Acessado em 06/01/2011.
Duarte, G. (2009).
Anatomy of a program in memory.
Disponível em: http://duartes.org/gustavo/blog/post/
anatomy-of-a-program-in-memory/ Acessado em 11/04/2016.
Favacho, A. (2009).
Notas de aula da Profa. Aletéia Favacho.
Galvin, P. B., Gagne, G., and Silberschatz, A. (2013).
Operating system concepts.
John Wiley & Sons, Inc.
Tanenbaum, A. S. and Machado Filho, N. (1995).
Sistemas operacionais modernos, volume 3.
Prentice-Hall.
45 / 45
Download