Gerência de Memória - UFF

46
Sistemas Operacionais - Gerência de Memória -

Transcript of Gerência de Memória - UFF

Page 1: Gerência de Memória - UFF

Sistemas Operacionais

- Gerência de Memória -

Page 2: Gerência de Memória - UFF

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

Page 3: Gerência de Memória - UFF

Hierarquia de Memória

Page 4: Gerência de Memória - UFF

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

Page 5: Gerência de Memória - UFF

Gerenciamento de Memória

Requisitos que devem ser satisfeitos

Realocação

Proteção

Compartilhamento

Organização lógica

Organização Física

Page 6: Gerência de Memória - UFF

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

Page 7: Gerência de Memória - UFF

Realocação

Problema quando não existe abstração de memória

Page 8: Gerência de Memória - UFF

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

Page 9: Gerência de Memória - UFF

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

Page 10: Gerência de Memória - UFF

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

Page 11: Gerência de Memória - UFF

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

Page 12: Gerência de Memória - UFF

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

Page 13: Gerência de Memória - UFF

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

Page 14: Gerência de Memória - UFF

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)

Page 15: Gerência de Memória - UFF

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

Page 16: Gerência de Memória - UFF

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

Page 17: Gerência de Memória - UFF

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

Page 18: Gerência de Memória - UFF

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

Page 19: Gerência de Memória - UFF

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

Page 20: Gerência de Memória - UFF

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

Page 21: Gerência de Memória - UFF

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

Page 22: Gerência de Memória - UFF

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

Page 23: Gerência de Memória - UFF

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

Page 24: Gerência de Memória - UFF

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

Page 25: Gerência de Memória - UFF

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

Page 26: Gerência de Memória - UFF

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

Page 27: Gerência de Memória - UFF

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

Page 28: Gerência de Memória - UFF

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

Page 29: Gerência de Memória - UFF

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

Page 30: Gerência de Memória - UFF

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

Page 31: Gerência de Memória - UFF

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

Page 32: Gerência de Memória - UFF

Gerenciamento de espaço livre

As áreas livres de memória devem ser gerenciadas

Mapa de bits

Listas Encadeadas

Page 33: Gerência de Memória - UFF

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

Page 34: Gerência de Memória - UFF

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

Page 35: Gerência de Memória - UFF

Gerenciamento de espaço livre

Atualização da lista após o término de um processo X

Page 36: Gerência de Memória - UFF

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

Page 37: Gerência de Memória - UFF

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

Page 38: Gerência de Memória - UFF

Swapping

Page 39: Gerência de Memória - UFF

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

Page 40: Gerência de Memória - UFF

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

Page 41: Gerência de Memória - UFF

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

Page 42: Gerência de Memória - UFF

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

Page 43: Gerência de Memória - UFF

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

Page 44: Gerência de Memória - UFF

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

Page 45: Gerência de Memória - UFF

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

Page 46: Gerência de Memória - UFF

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