gerência de memória - uffboeres/slidessoi/sosi-aula4-memoria.pdf · o sistema operacional deve...
TRANSCRIPT
Gerenciamento de Memória
A organização e a gerência de memória são fatores
importantes no projeto de sistemas operacionais
Um dos objetivos é desenvolver um SO que não ocupe muita
memória e, ao mesmo tempo, otimize sua utilização
Memória desejável
Infinitamente grande
Rápida
Não volátil
Custo baixo
Com a tecnologia atual não é
possível o desenvolvimento
de tal memória
É usada uma
hierarquia de memória
Gerenciamento de Memória
O sistema operacional deve abstrair esta hierarquia em
um modelo útil e gerenciá-la
O gerenciador de memória deve:
Manter o controle de quais partes da memória estão em uso e
quais não estão
Alocar memória quando há necessidade por parte dos
processos
Liberar memória quando os processos terminarem
Este capítulo trata do gerenciamento da memória
principal do computador
Gerenciamento de Memória
Requisitos que devem ser satisfeitos
Realocação
Proteção
Compartilhamento
Organização lógica
Organização Física
Realocação
Em um sistema multiprogramável a MP é compartilhada entre
vários processos
O programador não deve se preocupar com o endereço de
memória onde o programa será carregado para execução
Durante a execução um processo pode sair da MP e ao
retornar ser alocado em uma posição diferente
O sistema deve ser capaz de traduzir as referências de
memória encontradas no código do programa para endereços
físicos reais, levando em consideração a localização corrente
do programa na MP
32768
16384
Realocação
Uma solução: Usar uma
abstração de memória onde
cada processo possua seu
espaço de endereçamento
definidos por registradores
base e limite
Cada vez que um processo
referencia a memória, o HW
acrescenta o valor base ao
endereço gerado pelo
processo
Ex. JMP 28 JMP 16412
Proteção
Os processos não podem referenciar áreas de memória
de outros processos sem permissão
Todas as referências de memória devem ser verificadas
em tempo de execução
Na solução que utiliza registradores base e limite o HW
deve verificar se o endereço referenciado pelo processo
encontra-se no intervalo entre os valores indicados nos
registradores
Caso a referência esteja fora do intervalo o acesso é
abortado
Compartilhamento
Mecanismos de proteção devem ser flexíveis para
permitir que vários processos acessem a mesma área
de memória quando necessário
Processos que cooperam em alguma tarefa podem ter
que compartilhar as mesmas estruturas de dados
Organização Lógica
Programas são normalmente separados em módulos, que
podem ser escritos e compilados separadamente
Se o HW e o SO lidarem com os programas na forma de
módulos, algumas vantagens podem ser obtidas:
Módulos podem ser escritos e compilados independentemente e
as referências de um módulo pra outro podem ser resolvidas
durante a execução
Graus diferentes de proteção podem ser atribuídos aos módulos
Compartilhamento de módulos, com a vantagem de ser definido
pelo usuário
Organização Física
A memória é organizada como uma hierarquia
O fluxo de informação entre a memória principal e secundária
é um ponto de grande importância no desenvolvimento do
sistema gerenciador de memória
Se um programa precisa de mais memória do que o
disponível na MP, a a memória secundária deve ser utilizada
Os módulos do programa devem ser trazidos e tirados da MP quando
necessário
Este gerenciamento deverá ser feito de forma transparente
pelo SO
Gerenciamento de Memória
O esquema mais simples: Alocação Contígua Simples
A memória é dividida em apenas duas partes: uma para o SO e
outra para o programa do usuário
Memória Principal
RegistradorSistema
Operacional
Área paraprograma
Alocação Contígua Simples
Esta organização é fácil de implementar, porém, não permite
a utilização eficiente do processador e da memória
Apenas um programa pode estar residente na memória
Caso o programa do usuário não preencha a memória
totalmente, existirá um espaço sem utilização
A princípio, os programas do usuário eram limitados pelo
tamanho da memória principal disponível
A solução foi dividir o programa em módulos que pudessem ser
executados independentemente, utilizando uma mesma área de
memória (overlay)
Overlay
Suponha um programa com módulo principal, de
cadastramento e de impressão
Os módulos de cadastramento e de impressão são
independentes
O tamanho da memória é insuficiente para armazenar
todo o programa
O módulo principal deve permanecer na memória por toda a execução
A técnica de overlay utiliza uma área de memória comum
para os módulos de impressão e cadastramento
Módulo Principal Cadastramento
Impressão 2 Kb 3 Kb 4 Kb
Overlay
Cada vez que o módulo de cadastramento ou impressão for
referenciado pelo módulo principal este deve ser carregado
na memória principal
A área de overlay terá o
tamanho do maior módulo
Permite ao programador
expandir os limites da MP
A utilização desta técnica
exige cuidado: deve-se
evitar a transferência
excessiva entre módulos
Memória Principal
Cadastramento
Impressão
Sistema Operacional2 Kb
3 Kb
4 Kb
4 Kb
2 Kb
2 Kb
1 Kb
Módulo principal
Área de overlay
Área livre
Área nãoutilizada
Gerenciamento de Memória
Com a multiprogramação a memória foi dividida em
várias partes
Alocação Particionada
Alocação Estática
Partições de tamanhos idênticos
Partições de tamanhos distintos
Alocação Dinâmica
Alocação Particionada Estática
Nos primeiros sistemas a
memória foi dividida em
tamanhos fixos
O tamanho das partições era
estabelecido na fase de
inicialização do sistema
Se fosse necessária a alteração
do tamanho da partição, o
sistema deveria ser
reconfigurado e reinicializado
Operating system
8M
Operating system
8M
8M
2M
4M
6M
8M
8M
12M
16M
8M
8M
8M
8M
8M
8M
(a) Equal-size partitions (b) Unequal-size partitions
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 317
Operating
system
New
processes
New
processes
Operating
system
(a) One process queue per partition (b) Single queue
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 318
Tamanho Idêntico Tamanho Variável
Alocação Particionada Estática
Partições de tamanho idêntico
Processos menores que o tamanho da partição podem ser
carregados em qualquer partição disponível
Duas dificuldades:
1. Se um programa for muito grande para ser colocado em uma
partição, deve ser usada a técnica de overlay
2. Caso um programa seja pequeno demais, ele ainda assim
ocupará uma partição inteira
O fenômeno, no qual ocorre desperdício na utilização do espaço
de uma partição é chamado: fragmentação interna
Alocação Particionada Estática
As duas dificuldades podem ser minimizadas (porém
não solucionadas) usando partições de tamanho
variável
Partições de tamanho variável
Programas maiores podem ser alocados em partições maiores,
sem a necessidade de usar a técnica de overlay
Programas menores podem ser alocados nas partições
menores, diminuindo a fragmentação interna
Deve ser usada uma estratégia para escolha da partição
Alocação Particionada Estática
Partições de tamanho variável
Existem duas possibilidades para associar processos às
partições:
Usar uma fila de processos para cada partição
Associa os processos a fila da menor partição que o comporte
Podem existir partições ociosas e outras partições com a fila cheia
Utilizar uma fila única
O processo é alocado na partição disponível que produzir menor
fragmentação interna
Alocação Particionada Estática
Operating system
8M
Operating system
8M
8M
2M
4M
6M
8M
8M
12M
16M
8M
8M
8M
8M
8M
8M
(a) Equal-size partitions (b) Unequal-size partitions
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 317
Operating
system
New
processes
New
processes
Operating
system
(a) One process queue per partition (b) Single queue
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 318
Alocação Particionada Estática
Exemplo de alocação de processos em partições de tamanho
variável
Memória Principal
Sistema Operacional
2 Kb
5 Kb
8 Kb
Partição 1Partição
Tabela de partições
Tamanho
1 2 Kb
2 5 Kb
3 8 Kb
Partição 2
Partição 3Programas a serem executados:
AE
3 Kb
D
6 Kb
C
1 Kb
B
4 Kb 2 Kb
Alocação Particionada Estática
Memória Principal
Sistema Operacional
2 Kb
5 Kb
8 Kb
Partição 1
Partição 2
Partição 3
A
B
D
C
E
3 Kb
6 Kb
1 Kb
4 Kb
2 Kb
Memória Principal
Sistema Operacional
2 Kb
5 Kb
8 Kb
Programa C
Programa A
Programa B
ED
6 Kb 3 Kb
(a) Esquema com
múltiplas filas
(b) Esquema com
fila única
Alocação Particionada Estática
A alocação particionada estática é um método simples que
possui baixo overhead e requer mínimo trabalho do sistema
operacional
Porém, existem algumas desvantagens:
O grau de paralelismo é determinado pelo número de partições que são
criadas no momento da inicialização do sistema
Processos pequenos utilizam a memória de forma ineficiente
Existe fragmentação interna
Uma alternativa é o particionamento dinâmico
Neste caso o número de partições e os seus tamanhos são variáveis
Alocação Particionada Dinâmica
Quando um processo é trazido para a memória, será alocado
o espaço de memória que ele precisar
Este espaço será definido como a partição do programa
A fragmentação neste caso aparece quando os programas
vão terminando a sua execução, e deixam espaços cada vez
menores na memória
Fragmentação Externa
Uma solução para o problema da fragmentação externa é a
compactação
Alocação Particionada Dinâmica
Exemplo
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 319
(a)
Operating
system 8M
20M
36M
56M
(b)
Operating
system
Process 1 20M
14M
22M
(c)
Operating
system
Process 1
Process 2
20M
14M
18M
4M
(d)
Operating
system
Process 1
Process 2
14MProcess 2
Process 3
(e)
Operating
system
Process 1
Process 3
20M
8M
6M
18M
4M
(f)
Operating
system
Process 1
Process 4
Process 3
(g)
Operating
system
Process 4
Process 3
8M
6M
6M
18M
4M
(h)
Operating
system
Process 4
Process 3
20M
14M
18M
4M
18M
20M
8M
6M
18M
4M
18M
M07_STAL6329_06_SE_C07.QXD 2/21/08 9:30 PM Page 320
Estratégias de Escolha de Partição
A compactação é um procedimento custoso
Assim, devem ser usadas estratégias adequadas para
escolha de partição
Sempre que um processo for trazido para a memória e existir mais de
um bloco livre onde o processo possa ser alocado, então o SO deve
decidir qual bloco livre será escolhido
O objetivo é diminuir a fragmentação
O Sistema possuirá uma lista com todas as áreas livres
disponíveis, com o endereço e o tamanho de cada uma delas
As seguintes estratégias são consideradas: Best Fit, First Fit
e Worst Fit
Estratégias de Escolha de Partição
First Fit:
Escolhe o primeiro bloco livre de tamanho suficiente para caber o
programa
Neste algoritmo a lista de blocos livres é ordenada por endereços
Baixa complexidade Memória Principal
Sistema Operacional
4 Kb
3 Kb
5 Kb
Programa C
Programa A
F
1 Kb
Sistema Operacional
3 Kb
Programa C
Programa A
Área livre
Programa F
First Fit
Estratégias de Escolha de Partição
Best Fit:
Escolhe o melhor bloco livre, ou seja, aquele em que o programa deixa
o menor espaço sem utilização
O problema é que a tendência é deixar cada vez mais a memória com
pequenos blocos livres não contíguos, aumentando a fragmentação
Mais custosa
Memória Principal
Sistema Operacional
4 Kb
3 Kb
5 Kb
Programa C
Programa A
F
1 Kb
Sistema Operacional
2 Kb
Programa C
Programa F
Programa A
Área livre
Best Fit
Estratégias de Escolha de Partição
Worst Fit:
Escolhe o pior bloco livre, ou seja, aquele em que o programa deixa
maior espaço sem utilização.
A ideia é deixar espaços maiores para que outros programas possam
utilizá-los
Memória Principal
Sistema Operacional
4 Kb
3 Kb
5 Kb
Programa C
Programa A
F
1 Kb
Sistema Operacional
4 Kb
Programa C
Programa A
Área livre
Programa FWorst Fit
Gerenciamento de espaço livre
As áreas livres de memória devem ser gerenciadas
Mapa de bits
Listas Encadeadas
Gerenciamento de espaço livre
Mapa de bits
É uma maneira simples de gerenciar espaços de memória
A memória é dividida em unidades de alocação
Quanto menor a unidade de alocação maior será o mapa de bits
Se a unidade de alocação for muito grande, o mapa de bits será
menor, porém a memória poderá ser desperdiçada na última
unidade de alocação
O problema desta técnica é que a operação de busca por uma
sequência de k unidades de alocação livres pode ser muito lenta
Gerenciamento de espaço livre
Lista encadeada
Mantém uma lista dos segmentos de memória alocados e livres,
ordenados crescentemente
Cada elemento da lista especifica
Um segmento de memória alocado (P) ou livre (L)
O endereço que inicia o segmento
O comprimento do segmento
O endereço do próximo
Swapping
Mesmo com aumento da eficiência da multiprogramação e da
gerência de memória, muitas vezes um programa não poderá
ser executado por falta de espaço na memória
A técnica de swapping surge para tentar resolver este
problema
Quando um programa espera por um espaço de memória
livre:
O SO deve escolher um processo para ser tirado da MP e levado para
o disco (swap out)
Quando este processo precisar retornar para memória principal (swap
in) ele pode continuar a execução como se nata tivesse acontecido
Swapping Memória Principal
Memória Principal
SistemaOperacional
SistemaOperacional
Programa A
Programa A
Programa G
Área LivreSwap in
Swap out
Arquivode Swap
Programa E
Programa E
Programa B
Programa H
H
B
B
Swapping
Para a técnica de swapping é essencial a existência da
realocação dinâmica
É usado o registrador de realocação que guardará o endereço
inicial da região de memória onde o programa será alocado
Quando ocorre uma referência a algum endereço, seu valor
será somado ao conteúdo do registrador
Endereço dememória
Endereço incialda partição
Registrador de Relocação Instrução
EndereçoCódigo deoperação
Memória Virtual
É uma técnica sofisticada de gerência de memória
As memórias principal e secundária são combinadas,
dando ao usuário a impressão de existir uma memória
muito maior do que a MP
O conceito da memória virtual está em desvincular o
endereçamento feito pelo programa dos endereços
físicos da MP
Assim, o programa não fica limitado ao tamanho da memória
física disponível
Memória Virtual
Anteriormente, vimos que o uso de registradores base e
limite eram usados para criar uma abstração de espaços
de endereçamento
Porque usar a memória virtual?
Ainda existe um outro problema: gerenciar programas que
utilizam quantidades excessivas de memória
Solução: usar a técnica de overlay?
A técnica de overlay exige que o programador se preocupe em
dividir o seu código de forma que os módulos possam ser trazidos
para a memória de forma independente → trabalho árduo e lento
A ideia é atribuir esta tarefa ao sistema
Memória Virtual
O conceito de memória virtual se aproxima muito da ideia de
um vetor, existente nas linguagens de alto nível
Quando é feita referência a um componente do vetor, não há
preocupação de qual posição de memória aquele dado está
O compilador se encarrega de gerar instruções que
implementem este mecanismo, tornando-o transparente para
o programador
A memória virtual utiliza uma abstração semelhante, só que
em relação aos endereços dos programas e seus dados
Endereços reais e endereços virtuais
Memória Virtual
Um programa em um ambiente de memória virtual faz
referência a endereços virtuais
No momento da execução de uma instrução, o endereço
virtual é traduzido para um endereço físico
Esta tradução é chamada mapeamento
O conjunto de endereços virtuais que um processo pode
endereçar é chamado de espaço de endereçamento
virtual
Analogamente o conjunto de endereços reais é
chamado espaço de endereçamento real
Memória Virtual
O espaço de endereçamento virtual não possui relação
direta com o espaço de endereçamento real
Um programa pode fazer referência a endereços virtuais
que estejam fora dos limites do espaço real
Esp
aço
de e
nd
ere
ça
me
nto
vir
tua
l
Esp
aço
de e
nd
ere
çam
en
to r
ea
l
Endereço virtual 0
Endereço virtual 1
Endereço virtual 2
Endereço virtual 3
Endereço virtual 4
Endereço virtual 5
.
.
.
Endereço virtual V
Endereço real 0
Endereço real 1
Endereço real 2
Endereço real 3
.
.
.
Endereço real R
Memória Virtual
Quando o programa é executado só uma parte do código fica
residente na memória principal
O restante do código fica na memória secundária até o
momento em que for referenciado
Assim, o sistema operacional utiliza a memória secundária
como uma extensão da MP
O sistema operacional deve ser responsável por
Trazer parte do código referenciado que esteja na MP
Escolher qual parte do código residente na MP ira sofrer um
swap out
Memória Virtual
Duas técnicas que utilizam memória virtual serão
estudadas:
Paginação
O espaço de endereçamento virtual e real são divididos em blocos
chamados páginas
O programa é dividido em blocos de tamanho fixo: páginas
Segmentação
Os programas são divididos em segmentos de tamanhos variáveis
A divisão é feita levando em consideração a lógica do programa