Sistemas Operacionais II

Propaganda
Sistemas Operacionais
- Gerência de Memória -
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
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
Realocação

Problema quando não existe abstração de memória
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
32768
16384
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
Sistema
Operacional
Área para
programa
Registrador
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
4 Kb
3 Kb
Módulo Principal
Impressão
2 Kb
Cadastramento

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
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
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
2 Kb
Sistema Operacional
Cadastramento
3 Kb
Módulo principal
4 Kb
4 Kb
Área de overlay
1 Kb
Área livre
Impressão
2 Kb
Área não
utilizada
2 Kb
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
Operating system
8M
Operating system
8M
2M
8M
4M
6M

O tamanho das partições era
estabelecido na fase de
inicialização do sistema
8M
8M
8M
8M
8M

Se fosse necessária a alteração
do tamanho da partição, o
sistema deveria ser
reconfigurado e reinicializado
8M
12M
8M
16M
8M
(a) Equal-size partitions
Tamanho
Idêntico
(b) Unequal-size partitions
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
New
processes
Operating
system
New
processes
(a) One process queue per partition
(b) Single queue
Alocação Particionada Estática

Exemplo de alocação de processos em partições de tamanho
variável
Memória Principal
Tabela de partições
Partição
Tamanho
1
2 Kb
2
5 Kb
3
8 Kb
Sistema Operacional
Programas a serem executados:
E
D
C
B
A
3 Kb
6 Kb
1 Kb
4 Kb
2 Kb
Partição 1
2 Kb
Partição 2
5 Kb
Partição 3
8 Kb
Alocação Particionada Estática
Memória Principal
Sistema Operacional
C
A
1 Kb
2 Kb
E
B
3 Kb
4 Kb
Partição 1
2 Kb
Partição 2
5 Kb
Memória Principal
Sistema Operacional
D
Partição 3
8 Kb
Programa C
2 Kb
Programa A
5 Kb
Programa B
8 Kb
6 Kb
D
E
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


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


Este espaço será definido como a partição do programa
Fragmentação Externa
Uma solução para o problema da fragmentação externa é a
compactação
M07_STAL6329_06_SE_C07.QXD
2/21/08
9:30 PM
Page 320
Alocação Particionada Dinâmica

Exemplo
Operating
system
8M
Operating
system
Process 1
Operating
system
20M
56M
Operating
system
Process 1
20M
Process 1
20M
Process 2
14M
Process 2
14M
Process 3
18M
36M
22M
4M
(a)
(b)
(c)
(d)
Operating
system
Operating
system
Operating
system
Operating
system
Process 1
20M
Process 1
20M
20M
Process 2
14M
6M
14M
Process 4
8M
Process 4
6M
Process 3
18M
Process 3
4M
(e)
18M
Process 4
6M
Process 3
4M
(f)
8M
18M
6M
Process 3
4M
(g)
8M
18M
4M
(h)
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
Sistema Operacional
Programa F
4 Kb
Área livre
Programa C
First Fit
Programa C
F
1 Kb
5 Kb
Programa A
3 Kb
Programa A
3 Kb
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
Memória Principal

Mais custosa
Sistema Operacional
Sistema Operacional
4 Kb
Programa C
Best Fit
Programa C
F
1 Kb
5 Kb
Programa A
Programa A
Programa F
3 Kb
Área livre
2 Kb
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
Memória Principal
utilizá-los
Sistema Operacional
Sistema Operacional
Programa C
Programa C
Programa F
4 Kb
Worst Fit
F
1 Kb
5 Kb
Área livre
Programa A
3 Kb
Programa A
4 Kb
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
Gerenciamento de espaço livre

Atualização da lista após o término de um processo X
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
Sistema
Operacional
Programa A
Programa B
H
Programa E
Swap out
Programa G
B
Memória Principal
Sistema
Operacional
Programa A
Programa H
Programa E
Swap in
B
Arquivo
de Swap
Área Livre
Swapping
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
Registrador de Relocação
Endereço incial
da partição
Instrução
Código de
operação
Endereço de
memória
Endereç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
Espaço de endereçamento virtual
Endereço virtual 0
Endereço virtual 1
Endereço virtual 2
Endereço virtual 3
Endereço virtual 4
Endereço virtual 5
.
.
.
Espaço de endereçamento real

Endereço real 0
Endereço real 1
Endereço real 2
Endereço real 3
.
.
.
Endereço real R
Endereço virtual V

Um programa pode fazer referência a endereços virtuais
que estejam fora dos limites do espaço real
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
Download