Gerência da Memória

De Aulas

Conteúdo integrante da disciplina de Sistemas Operacionais

Introdução

  • Na memória principal residem os programas em execução.
  • Memória secundária são mecanismos de armazenamento permanente, são mais abundantes e baratas.
  • Para um programa ser executado deve ser carregado na memória principal.
  • Gerenciamento complexo em sistemas multiprogramáveis com múltiplos usuários utilizando-a eficientemente.

Alocação Contígua Simples

  • Implementada nos primeiros Sistemas Operacionais e ainda existentes em alguns sistemas mono-programáveis.
  • Memória dividida em duas partes, Sistema Operacional e programa do usuário.
  • O programador tem controle sobre toda a memória principal, podendo acessar qualquer posição da memória, inclusive onde está residente o Sistema Operacional.
  • Um mecanismo de proteção utilizado é delimitar a área do Sistema Operacional que delimita a área do mesmo.
  • Fácil implementação e código reduzido, porém Ineficiência no uso do processador e da memória pois apenas um usuário pode dispor desse recurso.
  • Programas limitados ao tamanho da memória disponível.
  • Overlay (sobreposição) – Solução encontrada para dividir o programa em partes (módulos), de forma que pudessem executar independentemente uma da outra, utilizando uma mesma área de memória.
  • A definição das áreas de Overlay são de responsabilidade do programador através de comandos específicos da linguagem utilizada.

Alocação Particionada

  • A eficiência da multiprogramação exige que vários programas estejam na memória ao mesmo tempo, vindo a necessidade de organização da memória.

Alocação Particionada Estática

  • Divisão da memória em tamanhos fixos (partições) definidos na inicialização do Sistema em função dos programas que executariam no ambiente.
  • A alteração do tamanho de uma partição necessita a inicialização do Sistema Operacional.
  • Os programas só podiam executar em uma das partições, mesmo com outras disponíveis.
  • Limitações impostas pelos compiladores e montadores que geravam apenas códigos absolutos.
  • Posteriormente, evolução dos compiladores, linkers e loaders com geração de código realocável, sendo que os programas puderam ser carregados em qualquer partição (alocação particionada estática realocável).
  • Surgimento da tabela de partições com informações de tamanho, uso e delimitações.
  • Proteção da memória através de dois registradores, início e fim da partição.
  • Os programas não preenchiam totalmente as partições onde eram carregados.
  • Problemas de fragmentação.

Alocação Particionada Dinâmica

  • Aumento do grau de compartilhamento diminuindo o problema da fragmentação.
  • Partições sem tamanho fixo, onde cada programa utiliza o espaço que necessita.
  • Existe ainda o problema de fragmentação, conforme os programas vão terminando e deixando espaços cada vez menores.
  • Soluções para resolver o problema de fragmentação:
    • Primeira: Reunir os espaços adjacentes, produzindo um único espaço de tamanho maior.
    • Segunda: Realocação de todas as partições ocupadas, eliminando todos os espaços entre elas (alocação dinâmica com realocação), porém, aumentando a complexibilidade do algoritmo e consumindo mais recursos do sistema.

Estratégias para Escolha da Partição

  • Função para determinar em qual partição livre um programa será carregado para execução.
  • Função de evitar, ou diminuir, o problema da fragmentação antes que ele ocorra.
  • O tamanho do programa é o fator mais importante para a adoção da melhor estratégia.
  • Best-fit:
    • Escolhe a melhor partição, ou seja, aquela que o programa deixa o menor espaço sem utilização.
    • Lista de áreas livres alocada por tamanho, diminuindo o tempo de busca
    • Desvantagem de deixar pequenas áreas não contíguas, aumentando o problema da fragmentação.
  • Worst-fit:
    • Escolhe a pior partição, ou seja, aquela que o programa deixa o maior espaço sem utilização.
    • Diminui o problema de fragmentação, deixando espaços livres maiores que permitem a um maior número de programas utilizar a memória.
  • First-fit:
    • Escolhe a primeira partição livre de tamanho suficiente para carregar o programa
    • Lista de áreas livres ordenada por endereços crescentemente.
    • Grande chance de se obter uma grande partição livre nos endereços de memórias mais altos.
    • Mais rápida e consome menos recursos do sistema.

Swapping

  • Tenta resolver o problema de insuficiência da memória para todos os usuários.
  • Aloca espaço para programas que esperam por memória livre para serem processados.
  • O sistema escolhe um programa residente, que é levado da memória para o disco (swap out), retornando posteriormente para a memória principal (swap in) como se nada tivesse ocorrido.
  • Problema da realocação dos programas. O loader realocável permite que um programa seja colocado em qualquer posição da memória, porém a realocação é realizada no momento do carregamento.
  • Mecanismo ineficiente em função do tempo gasto para carregamento.
  • Uma alternativa é esperar que a região de memória usada pelo programa na ocasião do seu primeiro carregamento esteja disponível.
  • Realocação Dinâmica:
    • É a melhor solução, uma implementação no hardware dos computadores, permitindo que a realocação seja realizada durante a execução do programa.
    • Realizada através de um registrador especial denomidado registrador de alocação, que recebe o endereço inicial da região da memória que o programa irá ocupar no momento do carregamento do programa na memória.
    • Toda vez que ocorrer uma referência a algum endereço, o endereço contido na instrução será somado ao conteúdo do registrador, gerando assim, o endereço físico.
  • Essencial para a implementação de um sistema multiprogramável.
  • Permitiu um maior throughput através de um maior compartilhamento da memória.
  • Mais eficiente para programas onde existiam poucos usuários competindo por memória e em ambientes que trabalhavam com aplicações pequenas.
  • Seu maior problema é o elevado custo das operações de entrada/saída (swapped in/out).

Lista de Exercícios

Formulário

  1. O que é a gerência de memória e para que serve?
  2. Descreva a alocação contígua simples.
  3. Descreva resumidamente a alocação particionada estática.
  4. Descreva resumidamente a alocação particionada dinâmica.
  5. Cite e descreva as estratégias para Escolha da Partição.
  6. O que é swapping e qual seu funcionamento?