Perguntas e Respostas sobre Alocação de Memória do SO # 2
Question: Explique os seguintes algoritmos de alocação.
Primeiro ajuste
Melhor ajuste
Pior ajuste
Sistema de camarada
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.