Gerência de Memória - Páginas Pessoais

Propaganda
Sistemas Operacionais
Gerência de Memória
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
• 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 baixos
• O gerenciador de memória trata a hierarquia de memórias
Gerência de Memória
• Principal operação – trazer programas para dentro da
memória principal para ser executados pelo processador.
• Dividir dinamicamente a parte “User” da memória
principal de forma que acomode vários processos.
• Alocar a memória de forma eficiente para empacotar tantos
processos na memória quanto possível para evitar que o
processador fique ocioso.
• Deve ser capaz de rodar um programa em que seu tamanho
seja maior que o disponível pela memória real.
Gerência de Memória
Memória Lógica - é aquela que o processo enxerga, o processo é
capaz de acessar.
Memória Física - é aquela implementada pelos circuitos
integrados de memória, pela eletrônica do computador
CPU
Endereço
lógico
Gerenciador Endereço
de Memória físico
Memória
Gerenciamento de Memória
• Swapping
• Alocação contígua
• Paginação
• Segmentação
• Segmentação paginada
Swapping
• Existem situações onde não é possível manter todos os
processos na memória. Ex:
– um processo já alocado na memória faz uma chamada
de sistema pedindo mais memória e não existe memória
livre contígua a área onde o mesmo está alocado
– um usuário dispara um programa, não existe memória
disponível mas é política dos sistema disparar
imediatamente todos os programas solicitados de
terminal
Swapping
• Usando o swapping o sistema escolhe um programa
residente que é levado da memória para o disco (swap-out)
retornando posteriormente para a memória (swap-in);
• Grande custo em termos de tempo de execução;
• Mais aceitável para sistemas batch ou sistemas com um
pequeno número de usuários;
• No momento do swap-in de memória, é necessário corrigir
os endereços de memória do processo;
Alocação Contígua Simples
• A memória principal é dividida em duas partes uma para o
sistema operacional e outra para o programa do usuário;
• Deve ser desenvolvida alguma forma de alocar a memória
livre aos processos que estão esperando;
Sistema
Operacional
Memória
Área para
o usuário
Proteção da Memória
CPU
Registrador
Limite
Registrador de
Relocação
<
+
Erro de acesso ilegal
Memória
Alocação Particionada
• Partições Fixas - a memória é dividida em tamanhos
diferentes porém fixos.
– O tamanho da partição era estabelecido na fase de
inicialização do sistema;
– A parte dos usuários era subdividida em partições fixas;
– Quando um programa deve ser carregado é escolhida
uma partição livre;
– A partição deve ser de tamanho igual ou maior que o
programa;
• Método não mais utilizado;
Memória Particionada Fixa
SO
255 Kb
SO
Partição 1
200 Kb
Programa A
Partição 2
100 Kb
Partição 3 - 50 Kb
Programa B
Partição 4 – 25 Kb
Partição 4
Partição 2
Programa A -150 kb, Programa B 45 kb
Partições Fixas - Problemas
• Desperdício de memória provocando a fragmentação interna ( quando
o espaço da partição é maior do que o necessário para executar o
programa, sobra uma área livre de memória que não pode ser
reaproveitada por outro processo)
• Não é possível o uso de 2 partições para um mesmo processo. Isto
gera a fragmentação externa quando temos memória disponível mas
não podemos executar o processo pois não temos uma partição grande
o suficiente para executar o processo
Alocação Particionada Variável
• O tamanho da partição é ajustado dinamicamente as necessidades
exatas do processo;
• Osistema operacional mantém uma lista de lacunas (espaços livres
de memória física);
• Quando o processo é criado, será usada uma lacuna de tamanho
igual ou maior ao tamanho do programa;
• O programa recebe o tamanho exato de memória, o que sobrar de
memória é transformado em uma nova lacuna;
Alocação Particionada Variável
• Não ocorre fragmentação interna (o tamanho da memória alocada é
igual ao tamanho do programa);
• Ocorre fragmentação externa, a medida que áreas de memória são
alocadas e liberadas, fragmentos de memória são gerados;
• Os fragmentos são pequenos demais para serem reaproveitados;
• O estado da memória é armazenado em uma lista;
Memória Particionada Variável
SO
255 Kb
SO
Programa B
Programa C
Área Livre
Programa B
Área Livre
Área Livre
Programa A
Área Livre
SO
Programa A -150 kb, Programa B 45 kb, Programa C – 80 Kb,
Partição Variável
• Para resolver o problema da fragmentação externa podemos:
– realocar todas as partições ocupadas eliminando espaços entre
elas e criando uma única área livre contígua;
A escolha da partição ideal
•
Três algoritmos podem ser usados:
– First-fit : Procura dentro da memória a partir o inicio e
escolhe o primeiro bloco que é grande o suficiente para o
processo a ser alocado;
– Next-fit: Inicia a procura a partir do local onde foi feito a
ultima locação e escolhe o bloco que é grande o suficiente
para o processo a ser alocado
– Best-fit: Escolhe o bloco que mais se aproxima do tamanho
requerido;
Qual deles é o melhor?
• First-fit :
– Mais rápido e o melhor
– Ele gera no inicio da memória pequenas partições livres
que necessitam ser pesquisadas a cada passo
subseqüente do first-fit
• Next-fit:
– Freqüentemente aloca blocos livres no fim da memória
– Como resultado, blocos grandes de memória são
quebrados rapidamente em blocos menores
– Compactação mais freqüente é requerida para obter
grandes blocos no fim da memória
• Best-fit:
– Tem a pior performance
– Procura pelo menor bloco que satisfaça o requisito
– Como resultado, a memória principal é rapidamente
quebrada em blocos muito pequenos que não podem
satisfazer um pedido de alocação, exigindo assim uma
compactação freqüente
Paginação
• A paginação permite que o programa possa ser
espalhado por áreas não contíguas de memória.
• Características:
– o espaço de endereçamento lógico de um processo é dividido
em páginas lógicas de tamanho fixo (pages);
– a memória física é dividida em páginas com tamanho fixo,
com tamanho igual ao da página lógica (frames);
– o programa é dividido em páginas. Quando carregado cada
página lógica ocupa uma página física;
– as páginas físicas não são necessariamente contíguas;
Paginação
Pag. 0
0
1
0
Pag. 1
1
4
1
Pag. 2
2
3
2
Pag. 3
3
7
3
Pag. 2
4
Pag. 1
Memória Lógica
Tabela de Página
Pag. 0
5
6
7
Pag. 3
Memória Física
Paginação
• O endereço lógico é inicialmente dividido em duas partes : um
número de página lógica e um deslocamento dentro da página;
P
D
• O número da página lógica é usado como índice no acesso a
tabela de páginas, de forma a obter o número da página física
correspondente;
Paginação
CPU
P
D
F
D
Memória
Física
P
F
Paginação
0
1
2
3
a
b
c
d
4
5
6
7
0
4
0
5
e
f
g
h
1
3
2
1
8
9
10
11
i
j
k
l
3
4
12
13
14
15
m
n
o
p
Queremos acessar o endereço lógico
3. Este endereço está na página 0 com
deslocamento 3. Pela tabela, vemos que
a página 0 está indexada no quadro 5.
Assim temos que acessar a posição:
23 = ((5x4)+3)
8
12
16
20
i
j
k
l
e
f
g
h
m
n
o
p
a
b
c
d
Paginação multinível
0
0
1023
10 10
PT1 PT2
12
Desloc.
0
1023
1023
0
1023
Tamanho de Página
• O problema de fragmentação também é encontrado na paginação.
Mas ocorre apenas na última página usada pelo programa;
• Existe fragmentação interna (Ex: um programa que ocupe 201kb,
o tamanho de página é de 4 kb, serão alocadas 51 páginas
resultando uma fragmentação interna de 3kb);
• Não existe fragmentação externa;
• A fragmentação é conseqüência do tamanho da página;
• Páginas pequenas evitam o problema de fragmentação,
aumentam no entanto os acessos a memória secundária;
Estrutura da tabela de Páginas
Modificada
Proteção
Número do Quadro
Cache
Desabilitado
Referenciada Presente/Ausente
Armazenamento da Tabela de Páginas
• Memória;
• Registradores:
• acesso rápido;
• Inconvenitente caso a tabela seja muito grande;
• Registrador de base da tabela de páginas:
• Fácil para trocar de páginas;
• Muitos acessos a memória;
• Registradores associativos:
• “Cache” da tabela de páginas;
• Caso uma tabela não seja encontrada nos registradores, ai sim
é feito um acesso a memória;
Segmentação
• Cada processo é dividido em um número de segmentos de
tamanho desigual (limitado pelo tamanho máximo). Um
processo é carregado na memória, todos os seus segmentos
são carregados dentro de partições dinâmicas que não
necessitam ser continuas.
Exemplo de
Segmentação
140
0
240
0
320
0
4300
470
0
570
0
630
0
670
0
Segmento 0 Sub-rotina
Segmento 3 pilha
Segmento2 Programa principal
Segmento 4 Tabela de símbolos
Segmento 1 Variáveis Globais
Segmentação
• A principal diferença entre a paginação e a segmentação é a
alocação da memória de maneira não fixa, a alocação depende da
lógica do programa;
• O mapeamento é feito através das tabelas de mapeamento de
segmentos;
• Os endereços são compostos pelo número do segmento e um
deslocamento dentro do segmento;
• Cada entrada na tabela mantém o endereço físico do segmento, o
tamanho do segmento, se ele está ou não na memória e sua
proteção;
Como o SO controla os segmentos
alocados e blocos livres?
• O SO mantém:
– Conceito de endereço lógico
– mantém uma tabela de blocos livres ;
– mantém uma tabela de segmentos para cada processo,
contendo a endereço inicial na memória principal
(base) + o tamanho do segmento (limite).
Exemplo de uma
Tabela de Segmento
0
1
2
3
4
Base
1400
6300
4300
3200
4700
Limite
1000
400
400
1100
1000
• Tradução do endereço lógico para o endereço
físico é feito pelo hardware do processador , da
seguinte forma:
Segmento
Offset
0 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 Endereço lógico
Tabela de Segmento
0001011101110
0000010000000000
0010000000100000
1011110011110
Limite
Endereço físico
+
Base
0010001100010000
Segmentação
• Somente segmentos referenciados são transferidos para a
memória principal;
• Grande proteção aos segmentos;
• Possibilidade de compartilhamento de código ou dados;
• Ocorre fragmentação externa;
Segmentação por Paginação
• Sistemas que implementam a segmentação com paginação.
Cada segmento é dividido fisicamente em páginas.
– o endereço é formado pelo número do segmento,
número da página dentro desse segmento e o
deslocamento dentro dessa página.
Download