Você está na página 1de 33

Gerenciamento de Memória

Prof. Dr. José Luís Zem


Prof. Dr. Renato Kraide Soffner
Prof. Ms. Rossano Pablo Pinto

Faculdade de Tecnologia de Americana


Centro Paula Souza
Tópicos

 Introdução

 Alocação Contígua Simples

 Alocação Particionada
 Alocação Particionada Estática
 Alocação Particionada Dinâmica
 Estratégias para a Escolha da Partição

 Swapping
Introdução

 Na memória principal residem todos os programas e dados que


serão executados ou referenciados pelo processador.

 Toda vez que deseja-se executar um programa residente na


memória secundária, deve-se, de alguma forma, carregá-lo para a
memória principal.

 Organização e gerência de memória principal têm sido fatores


importantes no projeto de sistemas operacionais.
Introdução

 Historicamente, a memória principal sempre foi vista como um


recurso escasso e caro.

 Uma das maiores preocupações dos projetistas era desenvolver


sistemas operacionais que não ocupassem muita memória e, ao
mesmo tempo, otimizassem a sua utilização.

 Enquanto nos sistemas monoprogramáveis a gerência de memória


não é muito complexa, nos sistemas multiprogramáveis ela se
torna crítica.
Alocação Contígua Simples

 A alocação contígua simples foi implementada nos primeiros


sistemas operacionais desenvolvidos, porém, ainda está presente
em alguns sistemas monoprogramáveis.

 Nesse tipo de organização, a memória principal é dividida em duas


partes:
 uma para o sistema operacional; M e m ó r ia P r in c ip a l
 outra para o programa do usuário.
S is te m a
O p e r a c io n a l

Á re a p a ra
p ro g ra m a
Alocação Contígua Simples

 O usuário tem controle sobre toda a memória principal, podendo


ter acesso a qualquer posição de memória, inclusive alterar e
destruir o sistema operacional.

 Para protegê-lo desses ataques, conscientes ou não, alguns


sistemas operacionais implementam proteção através de um
registrador, que delimita as áreas do sistema operacional e do
usuário.
M e m ó r ia P r in c ip a l
R e g i s tr a d o r
S is te m a
O p e r a c io n a l

Á re a p a ra
p ro g ra m a
Alocação Contígua Simples

 Apesar de sua simplicidade de implementação e código reduzido, a


alocação contígua simples não permite a utilização eficiente do
processador e da memória pois apenas um usuário pode utilizar
este recurso.

 Em relação à memória, caso o programa não a preencha


totalmente, existirá um espaço de memória sem utilização.
M e m ó r ia P r in c ip a l
 Fragmentação.
S is te m a
O p e r a c io n a l

Pro g ra m a
d o u s u á r io

Á re a liv r e
Alocação Contígua Simples

 No princípio, os programas dos usuários estavam limitados ao


tamanho da memória principal disponível.

 A solução encontrada para o problema foi dividir o programa em


partes (módulos), de forma que pudessem executar
independentemente uma da outra, utilizando a mesma área da
memória.

 Esta técnica recebeu o nome de overlay.


Alocação Contígua Simples

M e m ó r ia P r in c ip a l

2 Kb S is te m a O p e r a c io n a l
C a d a s tr a m e n to

3 Kb M ó d u lo p r in c ip a l
4 Kb

4 Kb Á re a d e o v e rla y Im p re ssã o

2 Kb
1 Kb Á r e a liv r e

Á re a n ã o 2 Kb
u ti l i z a d a
Alocação Particionada

 Os sistemas monoprogramáveis permitem que o processador


permaneça ocioso e que a memória seja subutilizada, enquanto um
programa aguarda o término de uma operação de I/O, por
exemplo.

 A multiprogramação vem resolver este problema, pois enquanto


aguarda algum evento, outros processos podem ser executados
pela CPU nesse intervalo de tempo.

 Para a multiprogramação ser eficiente, é necessário que vários


programas estejam na memória ao mesmo tempo, daí a
necessidade de uma nova forma de organização da memória
principal.
Alocação Particionada Estática

 Nos primeiros sistemas multiprogramáveis, a memória foi dividida


em pedaços de tamanho fixo, chamados partições.

 O tamanho das partições eram estabelecidos na fase de


inicialização do sistema (boot), em função do tamanho dos
programas que seriam executados no ambiente.
Alocação Particionada Estática

M e m ó r ia P r in c ip a l

Ta b e la d e p a r tiç õ e s S is te m a O p e r a c io n a l

P a r tiç ã o Ta m a n h o P a r tiç ã o 1 2 Kb

1 2 Kb
P a r tiç ã o 2 5 Kb
2 5 Kb

3 8 Kb

P r o g r a m a s a s e r e m e x e c u ta d o s :
P a r tiç ã o 3 8 Kb
E D C B A

3 Kb 6 Kb 1 Kb 4 Kb 2 Kb
Alocação Particionada Estática

 No princípio, os programas só podiam ser executados em uma das


partições, mesmo que outras estivessem disponíveis.

 Essa limitação era devido aos compiladores utilizados na época,


que geravam códigos absolutos.

 Este tipo de alocação recebeu o nome de alocação particionada


estática absoluta.
Alocação Particionada Estática

M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

C A P a r tiç ã o 1 2 Kb
1 Kb 2 Kb

E B P a r tiç ã o 2 5 Kb

3 Kb 4 Kb

D P a r tiç ã o 3 8 Kb

6 Kb
Alocação Particionada Estática

 Com a evolução dos compiladores, linkers e loadres, a geração de


código relocável foi possível e os programas puderam ser
carregados em qualquer partição.

 A esse novo tipo de alocação deu-se o nome de alocação


particionada estática relocável.
M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

Pro g ra m a C 2 Kb

D E Pro g ra m a A 5 Kb

6 Kb 3 Kb

Pro g ra m a B 8 Kb
Alocação Particionada Estática

 Para manter o controle sobre quais as partições estavam alocadas


ou não, os sistemas possuíam uma tabela delimitando cada
partição, seu tamanho e se estava em uso ou não.

M e m ó r ia P r in c ip a l

P a r tiç ã o Ta m a n h o L iv r e S is te m a O p e r a c io n a l

1 2 Kb N ão 1 Pro g ra m a C

2 5 Kb S im
2 Á r e a liv r e
3 8 Kb N ão

3 Pro g ra m a B
Alocação Particionada Estática

 A proteção baseava-se em dois registradores, que indicavam os


limites inferiores e superiores da partição onde o processo seria
carregado.
M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l E n d e r e ç o in ic ia l

E n d e r e ç o fin a l
Alocação Particionada Estática

 Tanto nos sistemas de alocação absoluta como nos sistemas com


alocação relocável, os processos não preenchiam totalmente as
partições onde eram alocadas. Desta forma, a fragmentação
também estava presente nestes esquemas.
M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

Pro g ra m a C
1 Kb
Pro g ra m a A
D B

6 Kb 4 Kb 3 Kb

Pro g ra m a E

5 Kb
Alocação Particionada Dinâmica

 Aumenta o grau de compartilhamento de memória.

 Diminui o grau de fragmentação.

 Neste esquema foi eliminado o conceito de partições com tamanho


fixo.

 Cada programa utiliza o espaço que necessitasse, desde que


existisse este espaço na memória,transformando-o em uma
partição.
Alocação Particionada Dinâmica

M e m ó r ia P r in c ip a l M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l S is te m a O p e r a c io n a l

Pro g ra m a B 4 Kb

Pro g ra m a C 1 Kb

Pro g ra m a E 3 Kb
A E C B 15 Kb

2 Kb 3 Kb 1 Kb 4 Kb Pro g ra m a A 2 Kb

5 Kb
Alocação Particionada Dinâmica

 Neste esquema também ocorre a fragmentação e ela aparecerá na


medida em que os processos forem terminado e deixando espaços
cada vez memores na memória, não permitindo o carregamento de
outros processos.
M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

4 Kb

Pro g ra m a C

3 Kb
D

6 Kb Pro g ra m a A

5 Kb
Alocação Particionada Dinâmica

 Uma solução seria fazer com que os espaços adjacentes fossem


reunidos, produzindo um único espaço de tamanho maior.
M e m ó r ia P r in c ip a l M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l S is te m a O p e r a c io n a l

4 Kb

Pro g ra m a C 8 Kb

3 Kb

Pro g ra m a A Pro g ra m a A

5 Kb 5 Kb
Alocação Particionada Dinâmica

 A segunda maneira seria realizar uma relocação de todas as


partições ocupadas, eliminando todos os espaços entre elas e
criando-se uma única área livre contígua.
M e m ó r ia P r in c ip a l M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l S is te m a O p e r a c io n a l
Pro g ra m a C

4 Kb Pro g ra m a A

Pro gra m a C
R e lo ca çã o
3 Kb

Pro gra m a A 12 Kb

5 Kb
Estratégias para Escolha da
Partição
 Os sistemas operacionais implementam, basicamente, três
estratégias para determinar em qual partição livre um programa
será carregado para execução.

 Essas estratégias tentam evitar, ou diminuir, o problema da


fragmentação antes que ela ocorra.

 Independente do algoritmo utilizado, o sistema possui uma lista de


áreas livres ( free list ), com endereço de cada área livre e seu
respectivo tamanho.
Estratégias para Escolha da
Partição

M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

Á r e a s liv r e s Ta m a n h o
Á r e a liv r e 1 4 Kb
1 4 Kb

2 5 Kb Pro g ra m a C

3 3 Kb
Á r e a liv r e 2 5 Kb

Pro g ra m a A

Á r e a liv r e 3 3 Kb
Estratégias para Escolha da
Partição
 BEST FIT
 Esse mecanismo escolhe a melhor partição (best fit), ou seja,
aquela em que o processo deixa o menor espaço sem
utilização.

 WORST FIT
 Esse mecanismo escolhe a pior partição (worst fit), ou seja,
aquela em que o processo deixa o maior espaço sem utilização.

 FIRST FIT
 Esse mecanismo escolhe a primeira partição (first fit) livre, de
tamanho suficiente para carregar o processo.
Estratégias para Escolha da
Partição
S is te m a O p e r a c io n a l

M e m ó r ia P r in c ip a l
Pro g ra m a C
S is te m a O p e r a c io n a l
it
s t- f
4 Kb B e
)
(a
Pro g ra m a C Pro g ra m a A
Pro g ra m a F
F
5 Kb Á r e a liv r e 2 Kb
1 Kb

Pro g ra m a A

3 Kb
Estratégias para Escolha da
Partição

M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l S is te m a O p e r a c io n a l

4 Kb

Pro g ra m a C Pro g ra m a C
( b ) W o r s t- f i t Pro g ra m a F
F
5 Kb Á r e a liv r e
1 Kb 4 Kb

Pro g ra m a A Pro gra m a A

3 Kb
Estratégias para Escolha da
Partição
M e m ó r ia P r in c ip a l

S is te m a O p e r a c io n a l

4 Kb

Pro g ra m a C

F S is te m a O p e r a c io n a l
5 Kb
1 Kb Pro g ra m a F

(c
)F
Á r e a liv r e 3 Kb

ir
Pro g ra m a A

st
-f
Pro g ra m a C

it
3 Kb

P ro g ra m a A
Swapping

 A técnica de swapping veio para tentar resolver o problema de


insuficiência de memória para todos os usuários.

 Nos esquemas apresentados até o momento, um processo


permanecia na memória principal até o final de sua execução,
inclusive quando realizava operações de entrada e saída.

 O swapping é uma técnica aplicada à gerência de memória, para


processos que esperam por memória livre para serem processados.

 O sistema escolhe um processo residente que é levado da memória


para o disco (swapped out), retornando posteriormente para a
memória principal (swapped in), como se nada tivesse ocorrido.
Swapping

M e m ó r ia P r in c ip a l

S is te m a
O p e r a c io n a l

Pro g ra m a A

H Pro g ra m a B
Sw ap out
Pro g ra m a E

Pro gra m a G

M e m ó r ia P r in c ip a l

S is te m a
O p e r a c io n a l

Pro g ra m a A

Pro gra m a H

Pro g ra m a E
S w a p in
B Á r e a L iv r e

A r q u iv o
de Sw ap
Swapping

 Um dos problemas gerados pelo swapping é a relocação dos


processos.

 O loader relocável permite que um processo seja colocado em


qualquer posição de memória, porém a relocação é realizada no
momento do carregamento.

 O conceito de swapping permitiu um maior compartilhamento de


memória e, consequentemente, um maior throughput.

 Mostrou-se eficiente em ambientes onde existiam poucos usuários


competindo pela memória e com aplicações pequenas.

 Seu maior problema é o custo das operações de entrada e saída.


Gerenciamento de Memória

Prof. Dr. José Luís Zem


Prof. Dr. Renato Kraide Soffner
Prof. Ms. Rossano Pablo Pinto

Faculdade de Tecnologia de Americana


Centro Paula Souza

Você também pode gostar