Gerenciamento de Memória

  • 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

esquemas de organização mono\u00a0tarefa

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

Dispositivos de memória

  • massive tape storage — fitas para backup