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
- O que é a gerência de memória e para que serve?
- Descreva a alocação contígua simples.
- Descreva resumidamente a alocação particionada estática.
- Descreva resumidamente a alocação particionada dinâmica.
- Cite e descreva as estratégias para Escolha da Partição.
- O que é swapping e qual seu funcionamento?