Perguntas e Respostas sobre Alocação de Memória do SO # 2

Question: Explique os seguintes algoritmos de alocação.

  1. Primeiro ajuste

  2. Melhor ajuste

  3. Pior ajuste

  4. Sistema de camarada

  5. Próximo ajuste

Answer:

Primeiro ajuste

Na primeira abordagem de ajuste é alocar a primeira partição livre ou orifício grande o suficiente para acomodar o processo. Ele termina depois de encontrar a primeira partição livre adequada.

Vantagem

O algoritmo mais rápido porque pesquisa o mínimo possível.

Desvantagem

As áreas de memória não utilizadas restantes após a alocação tornam-se desperdiçadas se forem muito menores. Assim, a solicitação de maior requisito de memória não pode ser realizada.

Melhor ajuste

O melhor ajuste trata da alocação da menor partição livre que atenda aos requisitos do processo de solicitação. Este algoritmo pesquisa primeiro toda a lista de partições livres e considera o menor furo adequado. Em seguida, ele tenta encontrar um orifício próximo ao tamanho real do processo necessário.

Vantagem

A utilização da memória é muito melhor do que o ajuste inicial, pois procura a menor partição livre disponível primeiro.

Desvantagem

É mais lento e pode até mesmo encher a memória com pequenos orifícios inúteis.

Pior ajuste

A abordagem de pior ajuste é localizar a maior parte livre disponível, de modo que a parte restante seja grande o suficiente para ser útil. É o inverso do melhor ajuste.

Vantagem

Reduz a taxa de produção de pequenas lacunas.

Desvantagem

Se um processo que requer memória maior chegar em um estágio posterior, ele não poderá ser acomodado, pois o maior orifício já está dividido e ocupado.

Sistema de Buddy

No sistema camarada, os tamanhos dos blocos livres são na forma de potência integral de 2. Ex. 2, 4, 8, 16 etc. Até o tamanho da memória. Quando um bloco livre de tamanho 2k é solicitado, um bloco livre da lista de blocos livres de tamanho 2k é alocado. Se nenhum bloco livre de tamanho 2k estiver disponível, o bloco de tamanho maior seguinte, 2k + 1, é dividido em duas metades chamadas camaradas para satisfazer a solicitação.

Exemplo

Deixe o tamanho total da memória ser 512 KB e deixe um processo P1, requer 70 KB para ser trocado. Como as listas de lacunas são apenas para potências de 2, 128 KB será grande o suficiente. Inicialmente não há 128 KB, nem blocos de 256 KB. Assim, o bloco de 512 KB é dividido em dois grupos de 256 KB cada, um é dividido em dois blocos de 128 KB e um deles é alocado para o processo. O próximo P2 requer 35 KB. Arredondando 35 KB para uma potência de 2, um bloco de 64 KB é necessário.

Então, quando o bloco de 128 KB é dividido em dois amigos de 64 KB. Novamente, um processo P3 (130 KB) será ajustado em 256 KB. Depois de satisfazer a solicitação desta forma quando o bloco estiver livre, os dois blocos / camaradas podem ser recombinados para formar o bloco original duas vezes maior quando o segundo meio camarada também estiver livre.

Vantagem

O sistema Buddy é mais rápido. Quando um bloco de tamanho 2k é liberado, um buraco de memória de 2k é pesquisado para verificar se uma fusão é possível, enquanto em outros algoritmos toda a lista de buracos deve ser pesquisada.

Desvantagem

Freqüentemente, torna-se ineficiente em termos de utilização de memória. Como todas as solicitações devem ser arredondadas para uma potência de 2, um processo de 35 KB é alocado para 64 KB, desperdiçando assim 29 KB extras, causando fragmentação interna. Pode haver buracos entre os camaradas causando fragmentação externa.

Próximo ajuste

O próximo ajuste é uma versão modificada do primeiro ajuste. Ele começa como o primeiro ajuste para encontrar uma partição livre. Quando chamado na próxima vez, ele começa a pesquisar de onde parou, não do início.