Partições Fixas
As partições fixas é a forma mais simples de gerencia de memoria para a multiprogramação. A memória é particionada em uma parte para a utilização do sistema operacional e outra para os processos de usuários. As partições fixas podem ser implementadas por registradores de limite superiore inferior ou por registradores de base e limite.
Há desvantagens com este tipo de gerencia de memoria:
Fragmentação interna- acontece quando o programa é carregado em uma partição maior eu o necessário, o que ocasiona um desperdício de memória, ou seja, a memória perdida dentro da área alocada para um processo.
Fragmentação externa- acontece quando temos duas partições livres, uma de 25 e 100 kbytes, extremos executando um programa de 110 Kbytes, a memória total livre é de 125 Kbytes, mas ela não é contigua, o programa não pode ser executado devido a forma de como é gerenciada a memória, ou seja, memória perdida fora da área ocupada por um processo.
Partições variáveis
Os sistemas operacionais implementam, basicamente, quatro estratégias para determinar em qual partição livre um programa será carregado para execução.Essas estratégias tentam evitar, ou diminuir, o problema da fragmentação antes que ela ocorra. Independente do algoritmo utilizado, o sistema possui uma lista de áreas livres (freelist), com endereço de cada área livre e seu respectivo tamanho.
Quando empregamos a técnica de partições variáveis, o tamanho das partições é ajustado automaticamente as necessidades apresentadas pelo programa. A lista de lacunas, que é espaços livres na memória física, quando usada em um processo ele percorre a lista, será usado um tamanho de lacuna maior ou igual ao programa, o que sobrar do tamanho da lacuna se transforma em outra menor, através desse sistema o programa terá o tamanho ideal de memória.
Há quatro maneiras de percorrer a lista até encontrar um lacuna de tamanho eficiente, que são:
BEST FIT
- Esse mecanismo escolhe a melhor partição (bestfit), ou seja, aquela em que o processo deixa o menor espaço sem utilização.
- Esse mecanismo escolhe a pior partição (worstfit), ou seja, aquela em que o processo deixa o maior espaço sem utilização.
FIRST FIT
CIRCULAR FIT
- Esse mecanismo escolhe a primeira partição (firstfit) livre, de tamanho suficiente para carregar o processo.
CIRCULAR FIT
- Inicia a procura por lacunas após a última sobra.
As lacunas sempre são unificadas no caso de terminar um processo adjacente a sua lacuna, criando assim uma nova lacuna.
Quando o tamanho exato de um programa é alocado não ocorre fragmentação interna, porem, quando se aloca um tamanho exato pode gerar lacunas de poucos bytes, alguns sistemas organizam a memória em blocos de 32 bytes, os blocos são chamados de parágrafos e a unidade de alocação passa a ser ele. O processo vai então possuir um número fixo de parágrafos, ou seja, um múltiplo de 32 bytes.
A medida que áreas de memórias são alocadas e liberadas, muitos fragmentos são gerados, então ocorre um grande número de lacunas, às vezes pequenas demais para serem úteis, para solução desta situação realiza-se uma compactação de memória. Para que isto seja possível, processos têm que ser deslocados para que as lacunas existentes fiquem juntas umas às outras e possam ser unificadas. Este processo exige muito tempo do processador e exige também um mecanismo de realocação dinâmica como o implementado pelo registrador base.