Lei de Parkinson --- Programa sempre se expande para preencher a
memória disponível para ele
gerencia da hierarquia de memória
SWAP
alocação e liberação de espaço
localização de dados
Classes de gerenciamento de memória
Mono tarefa
toda memória é alocada para o próximo programa
inclui área para o OS
erros de execução podem prejudicar o OS que está na memória
Multiprogramação
Divide a memória em varias partições de tamanhos diferentes
Ao adicionar um job ele entra na fila para pegar um espaço da
memória
Diminui o tempo ocioso da CPU, já que você pode fazer várias coisas
ao mesmo tempo
Para resolver problemas de limites das partições, o processador vem
equipado com uma MMU
MMU (memory management unit)
Hardware presente no processador
transforma endereço virtual em físico
user nunca acessa endereços físicos
aponta um espaço virtual para um físico
software não pode ser compilado com endereços absolutos, por isso
usa-se offsets de endereços. Com isso, endereços de limite são
colocados para auxiliar commandos JMP
o endereço base e limite superior são usados para não fazer com o
que programa saia dos limites, além do endereço base ser usado para
o calculo do offset
Tipos de partição
Estática
tamanho e número de partições fixa
suscetível a fragmentação
mais fácil de gerenciar
espaços podem não ser usados totalmente (fragmentação interna)
pode usar filas múltiplas para adicionar processos nas partições
(cada fila é designada para um tamanho especifico, mas pode
acarretar em filas não balanceadas)
pode usar fila única para adicionar processos nas partições, assim
cada processo pega a melhor partição livre, mas seria mais lento
pode haver fragmentação externa (se juntar duas partições livres
elas dariam o tamanho para caber um processo maior que precisa ser
executado). Esse problema é menor no caso da estática
Variável
menor fragmentação interna
alocado dinamicamente
problema de fragmentação externa, uma vez que conforme o espaço vai
sendo liberado, buracos ficarão no meio. Para resolver esse problema
pode ser usado a compactação da memória (OS mantêm uma lista dos
espaços vazios, mas é custoso para a CPU)
Técnicas de alocação
Bitmap
divide a memória em pequenos pedaços (em Kb por exemplo)
cada pedaço recebe o valor 1, se estiver ocupado, e 0 se estiver
livre
unidades não podem ser nem muito grandes nem pequenas demais
Linked lists
Lista encadeada marca se é um espaço vazio ou não, a onde começa e o
tamanho da partição
pode ser usada mais de uma lista, para dizer por exemplo o que está
vazio e o que esta sendo usado
Algoritmos de alocação
First Fit
o primeiro segmento livre é usado (dessa forma os espaços vazios vão
para o final)
+ rápido
pode levar a fragmentação
Next Fit
usa o primeiro segmento livre, guarda essa informação e para o
próximo ele continua da onde parou
desempenho inferior ao First Fit
Best Fit
procura na lista toda o melhor espaço para o processo
mais lento
menor fragmentação
após um bom tempo ele pode deixar vários espaços pequenos inúteis
(fragmentação)
Worst Fit
aloca o maior espaço disponível para evitar os espaços pequenos
inúteis
tende a espalhar porções não utilizadas para áreas não contíguas,
sendo difícil de alocar jobs grandes depois
Quick Fit
mantém listas para tamanhos mais usados e pega o que se encaixa para
o processo
tenta encontrar os espaços vazios vizinhos ao dealocar para fazer a
união entre eles