MULTIPROGRAMAÇÃO COM PARTIÇÕES VARIÁVEIS
Na multiprogramação com partições variáveis o número e o tamanho dos processos na memória variam dinamicamente com o tempo.
O processo de desalocação possibilita o surgimento de buracos na memória. Caso ocorra a necessidade do crescimento do processo e as áreas de alocação de memória vizinha já tiverem alocadas, será necessário deslocar os dados referentes ao crescimento para uma área de memória livre.
GERENCIAMENTO DE ESPAÇO
O gerenciamento de espaço na memória pode utilizar o método de mapa de bits, o método de listas interligadas ou sistema buddy.
No método de mapa bits a memória é dividida em unidades de alocações. Ele utiliza o bit 0 para indicar que a unidade está vazia e 1 para indicar que a unidade de alocação está preenchida. Com a unidade de alocações pequenas tem-se um mapa de bits maior (pois são várias unidades de alocações que precisam ser sinalizadas com 0 ou 1). Com unidades de alocações maiores, tem-se mapas de bits menores, porém pode haver grande desperdício.
O método de listas interligadas utiliza um processo ou um buraco (área livre para alocação). No caso da alocação de um processo, é utilizada a letra P para representa-lo. O número após o P representa a posição inicial da alocação e a próxima letra representa o comprimento de espaço alocado. No caso dos buracos, é utilizada a letra B. O valor após B representa o endereço inicial e o próximo valor representa o comprimento do espaço disponível.
Na lista buddy a memória é dividida em blocos (buddies) de potência de 2 até encontrar o tamanho da memória necessária a alocação. Por exemplo, para uma memória de 1MB, se um processo de 70 KB necessita alocar a memória, o 1MB inicial é dividido por 2, resultado em blocos de 512KB. Para alocar os 70KB é necessário um espaço de 128KB. Dessa forma, o bloco de 512 é dividido em blocos de 256KB. O primeiro bloco de 256KB é dividido em 2