Você está na página 1de 49

Licenciatura em Computação

Introdução aos Sistemas


Operacionais
Prof. D.Sc. Eduardo Barrére
eduardo.barrere@ice.ufjf.br
www.barrere.ufjf.br

EADDCC006
Pontifícia Universidade Católica
PUC - Minas Poços de Caldas EADDCC006 #1
Introdução aos Sistemas Operacionais

Unidade 5
Gerência de Memória
Parte 1

Pontifícia Universidade Católica


PUC - Minas Poços de Caldas EADDCC006 #2
EADDCC006 – Introdução aos Sistemas Operacionais

ORIENTAÇÕES DE ESTUDO
Prezado(a) Aluno(a),
Nesta unidade iremos aprender os conceitos básicos que envolve o gerenciamento de memória por parte do
SO.

Nesta unidade você deve cumprir as seguintes atividades:


- TEXTO DE ESTUDO: Este documento apresenta os conceitos e informações pertinentes à Unidade 3 –
Sistemas de Arquivos.
- REFERÊNCIAS BIBLIOGRÁFICAS: Após a leitura do texto a seguir, realize um estudo mais detalhado do
conteúdo nas referências citadas na Unidade 1. É importante destacar que esses conteúdos também
podem ser obtidos em outros livros e que você deve se sentir a vontade para buscar a literatura que mais
lhe agrade, desde que ela aborde os mesmos tópicos da unidade em questão.
- ATIVIDADES AVALIATIVAS:
Atividade 16: Lista de Exercícios (Questionário).
Atividade 4: Elaboração do Glossário (a ser elaborado durante toda a disciplina).

- FICHA DE ESTUDO: Montar uma ficha de estudo com os principais conceitos apresentados na unidade, de
forma a facilitar o seu estudo para a prova.

Lembre-se da importância de estabelecer o seu próprio cronograma de estudos dentre as atividades passadas
pelo professor, pois o conteúdo é extenso e não é possível aprendê-lo todo na véspera da prova.

Bom estudo!

EADDCC006 #3
Lembrando....

O Sistema Operacional é responsável por gerenciar:

EADDCC006 #4
Gerenciador de Memória
Problemas a serem resolvidos pelo gerenciador de memória:

A memória principal (RAM) é um recurso ainda caro e


escasso.
Com a evolução dos computadores, mais e mais programas
(cada vez maiores) devem estar em execução ao mesmo
tempo num computador (multiprogramação).

Muita Demanda (vários processos)


x
Pouco Recurso (espaço na memória)
EADDCC006 #5
Funções do Gerenciador de Memória
O gerenciador de memória deve:
Controlar as partes de memória que estão ou
não em uso.
Alocar memória para processos, quando
solicitado.
Desalocar (liberar) memória quando o processo
terminar.
Gerenciar a troca entre a memória principal e o
disco (memória virtual).
Proteger a região de memória de cada processo.
EADDCC006 #6
Alocação de Memória

EADDCC006 #7
Alocação de Memória
A alocação de memória (reserva de uma região de memória para
um processo) pode ser feita das seguintes maneiras:
Alocação Contígua
– Simples.
– Particionada
• Estática (Absoluta e Relocável).
• Dinâmica.
Alocação Não-Contígua (envolve memória virtual)
– Paginada.
– Segmentada.
– Segmentada com Paginação.

EADDCC006 #8
Alocação Contígua Simples
Utilizada em sistemas Monousuário / Monoprogramáveis.
(ainda utilizada em sistemas computacionais simples, a
maioria deles microcontrolados)
Área de memória
para o SO

Sistema Operacional Sistema Operacional

Programa do
usuário
Área para
o
programa Área livre
Região de Memória
ocupada pelo
do usuário
Programa do
usuário

EADDCC006 #9
Alocação Contígua Simples

O programa do usuário é limitado pelo tamanho da memória principal


disponível.

Solução: Overlay Sistema


Operacional
• Dividir o programa em módulos;
Área do
Módulo
• Permitir execução independente de cada
Principal
módulo, usando a mesma área de memória;

• Exemplo: dividir o programas em módulos: Área de


Overlay
Cadastro de clientes, Relatórios, Consultas,
etc. Cada módulo é carregado na memória
conforme o usuário solicita sua execução
(como se fossem programas independentes)
Cad. Imp. Cons.

EADDCC006 #10
Alocação Contígua Particionada
A Alocação Particionada surgiu com os
sistemas Multiprogramáveis / Multiusuários
(ocupação mais eficiente do processador),
visando permitir o compartilhamento da
memória entre os diversos processos.

• Estática (Absoluta e Relocável).

• Dinâmica.

EADDCC006 #11
Alocação Contígua
Particionada Estática - Absoluta

As partições (divisões da memória em partes)


têm o tamanho definido pelo SO na
inicialização do sistema e cada programa é
compilado para uma partição específica.

Compiladores geram código absoluto


– Endereços relativos ao início da memória.

Em outras palavras, cada código fonte é


compilado para ser executado em uma, e somente
uma, região de memória.

EADDCC006 #12
Alocação Contígua
Particionada Estática - Absoluta
O quanto cada
programa ocupa
de memória
B D C E A
4MB 6MB 1MB 3MB 2MB

Particionamento
pré-definido da
memória
Uma questão interessante e não
resolvida por este tipo de Alocação:
Sistema Operacional
Partição1 – 2MB Os programas atuais ocupam uma
quantidade de memória variável,
Partição2 – 5MB conforme sua execução.
Neste tipo de alocação esse
problema tem que ser previsto
Partição3 – 8MB antes da compilação do código
fonte (geração do executável) 

EADDCC006 #13
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
Partição1 – 2MB
Imagine que todos os programas
chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que Partição2 – 5MB
antes de executar o primeiro a
chegar (A), todas as solicitações de
execução já tenham sido efetuadas.
Partição3 – 8MB

EADDCC006 #14
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Imagine que todos os programas


chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que
antes de executar o primeiro a
chegar (A), todas as solicitações de Sistema Operacional
execução já tenham sido efetuadas.
A Partição1 – 2MB

Partição2 – 5MB

Partição3 – 8MB

EADDCC006 #15
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Imagine que todos os programas


chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que
antes de executar o primeiro a
chegar (A), todas as solicitações de Sistema Operacional
execução já tenham sido efetuadas.
A Partição1 – 2MB

E Partição2 – 5MB

Partição3 – 8MB

EADDCC006 #16
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Imagine que todos os programas


chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que
antes de executar o primeiro a
chegar (A), todas as solicitações de Sistema Operacional
execução já tenham sido efetuadas.
C A Partição1 – 2MB

E Partição2 – 5MB

Partição3 – 8MB

EADDCC006 #17
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Imagine que todos os programas


chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que
antes de executar o primeiro a
chegar (A), todas as solicitações de Sistema Operacional
execução já tenham sido efetuadas.
C A Partição1 – 2MB

E Partição2 – 5MB

D Partição3 – 8MB

EADDCC006 #18
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Imagine que todos os programas


chegaram quase ao mesmo tempo
(respeitando a ordem acima) e que
antes de executar o primeiro a
chegar (A), todas as solicitações de Sistema Operacional
execução já tenham sido efetuadas.
C A Partição1 – 2MB

B E Partição2 – 5MB

D Partição3 – 8MB

EADDCC006 #19
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
C A Partição1 – 2MB Sistema Operacional
C Programa A
B E Partição2 – 5MB
B E Partição2 – 5MB

D Partição3 – 8MB
D Partição3 – 8MB

EADDCC006 #20
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
C A Partição1 – 2MB Sistema Operacional
C Programa A
B E Partição2 – 5MB
Programa E (3MB)
B
“Área Livre” - 2MB
D Partição3 – 8MB
D Partição3 – 8MB

EADDCC006 #21
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
C A Partição1 – 2MB Sistema Operacional
C Programa A
B E Partição2 – 5MB
Programa E (3MB)
B
“Área Livre” - 2MB
D Partição3 – 8MB
Programa D (6MB)
“Área Livre” - 2MB

EADDCC006 #22
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Sistema Operacional Sistema Operacional


C A Partição1 – 2MB C Programa A

B E Partição2 – 5MB Programa E (3MB)


B
“Área Livre” - 2MB

D Partição3 – 8MB Programa D (6MB)


Programas não
“Área Livre” - 2MB
ocupam totalmente o
espaço das partições,
gerando uma
fragmentação interna.
EADDCC006 #23
Alocação Contígua
Particionada Estática - Absoluta
B D C E A
4MB 6MB 1MB 3MB 2MB

Fila representando a ordem de solicitação para executar os programas

Neste tipo de alocação, não posso utilizar as áreas


de memórias livres para colocar outros programas e
muito menos juntar essas áreas para formar uma Sistema Operacional
outra partição de memória. C Programa A
No nosso exemplo:
• Cada partição tem 2MB livres, o que seria Programa E (3MB)
B
suficiente para colocar o programa C, mas não “Área Livre” - 2MB
podemos colocar mais de um programa por partição
 Programa D (6MB)
• Somando as duas áreas livres temos 4MB, o que “Área Livre” - 2MB
seria suficiente para colocar o programa B 

Conclusão, na maioria dos computadores atuais


esse técnica de alocação não é eficiente !!!
EADDCC006 #24
Alocação Contígua
Particionada Estática - Relocável

As partições têm o tamanho definido pelo SO na


inicialização do sistema e cada programa é
compilado para ser executado em qualquer
partição (endereçamento relativo).

Compiladores gerando código relocável


– Endereços relativos ao início da partição

EADDCC006 #25
Alocação Contígua
Particionada Estática - Relocável

C D B E A
1MB 6MB 4MB 3MB 2MB
Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
Partição1 – 2 MB

Partição2 – 5 MB
C D B E A

Partição3 – 8 MB

EADDCC006 #26
Alocação Contígua
Particionada Estática - Relocável

C D B E A
1MB 6MB 4MB 3MB 2MB
Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
Programa A

Partição2 – 5 MB
C D B E

Partição3 – 8 MB

EADDCC006 #27
Alocação Contígua
Particionada Estática - Relocável

C D B E A
1MB 6MB 4MB 3MB 2MB
Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
Programa A
Programa E (3MB)
C D B “Área Livre” - 2MB

Partição3 – 8 MB

EADDCC006 #28
Alocação Contígua
Particionada Estática - Relocável

C D B E A
1MB 6MB 4MB 3MB 2MB
Fila representando a ordem de solicitação para executar os programas

Sistema Operacional
Programa A
Programa E (3MB)
“Área Livre” - 2MB

Programa B (4MB)
C D
“Área Livre” - 4MB

EADDCC006 #29
Alocação Contígua
Particionada Dinâmica

As partições são alocadas conforme os


programas são executados. O espaço
utilizado por um programa é a sua partição.

Sendo assim, não ocorre fragmentação


interna (diferença entre o tamanho da
partição e da área ocupada pelo processo).

EADDCC006 #30
Alocação Contígua
Particionada Dinâmica
E D C B A
3MB 6MB 1MB 4MB 2MB

Sistema Operacional

A E C B
Área Livre = 11MB

EADDCC006 #31
Alocação Contígua
Particionada Dinâmica
E D C B A
3MB 6MB 1MB 4MB 2MB

Sistema Operacional

Programa B

A E C

Área Livre = 7MB

EADDCC006 #32
Alocação Contígua
Particionada Dinâmica
E D C B A
3MB 6MB 1MB 4MB 2MB

Sistema Operacional

Programa B

A E Programa C

Área Livre = 6MB

EADDCC006 #33
Alocação Contígua
Particionada Dinâmica
E D C B A
3MB 6MB 1MB 4MB 2MB

Sistema Operacional

Programa B

A Programa C

Programa E

Área Livre = 3MB

EADDCC006 #34
Alocação Contígua
Particionada Dinâmica
E D C B A
3MB 6MB 1MB 4MB 2MB

Sistema Operacional

Programa B

Programa C

Programa E

Programa A

Área Livre = 1MB

EADDCC006 #35
Alocação Contígua
Particionada Dinâmica

Sistema Operacional Sistema Operacional

Programa B Programa B
Fim do
Programa C Área Livre
Programa C
Programa E Programa E
Programa A Programa A
Área Livre Área Livre
Este espaço deixado
pelo término do
Com o surgimento de várias lacunas: processo
* É possível termos espaço livre na memória correspondente ao
suficiente para executar um novo programa, mas programa C, gerou
esse espaço pode não ser contínuo! Atitude? uma lacuna
* Qual lacuna alocar a um processo que pede por chamada
um espaço X de memória? fragmentação
externa.
EADDCC006 #36
Alocação Contígua
Particionada Dinâmica

Soluções para a fragmentação gerada no decorrer do


funcionamento do computador:

• Reunião das lacunas, Relocação Dinâmica ou


compactação: Movimentação dos programas na memória
principal, deixando somente uma lacuna no final da memória.

• Resolve o problema da fragmentação.

• Consome recursos do sistema (Processador, disco, etc.)


e é muito lento!

EADDCC006 #37
Alocação Contígua
Particionada Dinâmica
Para se decidir em qual lacuna colocar o processo, podemos
adotar uma das seguintes soluções:

• Best-Fit

• Worst-Fit

• First-Fit

< ver simulador, via link na plataforma >

EADDCC006 #38
Alocação Contígua
Particionada Dinâmica
P1
P2

Área livre 1 = 2MB


Best-Fit (melhor alocação): P3
Espaço mais próximo do tamanho Área livre 2 = 1MB
do processo, sobrando uma P4
lacuna pequena.
Área livre 3 = 4MB

Imagine que queremos alocar


memória o processo P6, que P5
ocupa 1MB.

Área livre 4 = 5MB

EADDCC006 #39
Alocação Contígua
Particionada Dinâmica
P1
P2

Área livre 1 = 2MB


Best-Fit (melhor alocação): P3
Espaço mais próximo do tamanho Área livre 2 = 1MB
do processo, sobrando uma P4
lacuna pequena.
Área livre 3 = 4MB

Imagine que queremos alocar


memória o processo P6, que P5
ocupa 1MB.

Área livre 4 = 5MB

EADDCC006 #40
Alocação Contígua
Particionada Dinâmica
P1
P2
Área livre 1 = 2MB

Best-Fit (melhor alocação): P3


Espaço mais próximo do tamanho P6
do processo, sobrando uma P4
lacuna pequena.
Área livre 2 = 4MB

Imagine que queremos alocar


memória o processo P6, que P5
ocupa 1MB.

Área livre 3 = 5MB

EADDCC006 #41
Alocação Contígua
Particionada Dinâmica
P1
P2

Worst-Fit (pior alocação): Área livre 1 = 2MB


P3
Cria o maior espaço possível,
Área livre 2 = 1MB
ou seja, deixa sempre a maior
P4
lacuna possível.
Área livre 3 = 4MB
Vamos utilizar o mesmo
processo P6 (que ocupa
1MB). P5

Área livre 4 = 5MB

EADDCC006 #42
Alocação Contígua
Particionada Dinâmica
P1
P2

Worst-Fit (pior alocação): Área livre 1 = 2MB


P3
Cria o maior espaço possível,
Área livre 2 = 1MB
ou seja, deixa sempre a maior
P4
lacuna possível.
Área livre 3 = 4MB
Vamos utilizar o mesmo
processo P6 (que ocupa
1MB). P5

Área livre 4 = 5MB

EADDCC006 #43
Alocação Contígua
Particionada Dinâmica
P1
P2
Área livre 1 = 2MB
Worst-Fit (pior alocação):
P3
Cria o maior espaço possível,
Área livre 2 = 1MB
ou seja, deixa sempre a maior
P4
lacuna possível.
Área livre 3 = 4MB
Vamos utilizar o mesmo
processo P6 (que ocupa
1MB). P5
P6

Área livre 4 = 4MB

EADDCC006 #44
Alocação Contígua
Particionada Dinâmica
P1
P2

Área livre 1 = 2MB


P3
First-Fit (primeira alocação): Área livre 2 = 1MB
Aloca na primeira lacuna que P4

couber. Melhor performance.


Área livre 3 = 4MB

Vamos utilizar o mesmo


processo P6 (que ocupa P5
1MB).
Área livre 4 = 5MB

EADDCC006 #45
Alocação Contígua
Particionada Dinâmica
P1
P2

Área livre 1 = 2MB


P3
First-Fit (primeira alocação): Área livre 2 = 1MB
Aloca na primeira lacuna que P4

couber. Melhor performance.


Área livre 3 = 4MB

Vamos utilizar o mesmo


processo P6 (que ocupa P5
1MB).
Área livre 4 = 5MB

EADDCC006 #46
Alocação Contígua
Particionada Dinâmica
P1
P2
P6

Área livre 1 = 1MB


P3
First-Fit (primeira alocação): Área livre 2 = 1MB
Aloca na primeira lacuna que P4
couber. Melhor performance.
Área livre 3 = 4MB
Vamos utilizar o mesmo
processo P6 (que ocupa
P5
1MB).

Área livre 4 = 5MB

EADDCC006 #47
Problemas de Alocação

Mesmo com a alocação contígua particionada dinâmica


temos os seguintes problemas:

• Os programas estão cada vez maiores e com isso, ou


ocupam muita memória ou não cabem na memória!

• A quantidade de programas a serem executadas pelo


processador é cada vez maior!

EADDCC006 #48
Problemas de Alocação
SOLUÇÃO:

• Swapping: Técnica para resolver o problema de processos


que aguardam por espaço livre adequado. Desta forma os
processos não ficam mais na memória o tempo todo. Podem
também ficar em disco (arquivo swap).

• Alocação não-contígua: conforme a quantidade de


programas em execução e da necessidade de memória de
cada um, os espaços são alocados (paginação e
segmentação).

Solução: Memória Virtual (próxima aula !!!)

EADDCC006 #49

Você também pode gostar