Um alocador de laje é um algoritmo de alocação de memória usado nos kernels de sistemas operacionais (e às vezes em outros sistemas que requerem gerenciamento de memória de alto desempenho) para gerenciar com eficiência a memória para objetos de kernel. Ao contrário dos alocadores mais simples, como o sistema de amigos ou uma lista gratuita simples, ele visa minimizar a fragmentação interna e externa e melhorar o desempenho ao armazenar em cache de estruturas de dados usadas com frequência.
Aqui está como funciona:
1.
caches: O alocador da laje divide a memória em caches. Cada cache é dedicado a um tipo específico de objeto de kernel (por exemplo, inodes, soquetes, buffers de rede). Isso é chave para sua eficiência.
2.
lajes: Dentro de cada cache, a memória é dividida em lajes. Uma laje é um bloco contíguo de memória grande o suficiente para manter várias instâncias do tipo de objeto associado a esse cache. O tamanho de uma laje é escolhido para corresponder ao tamanho do objeto mais o preenchimento necessário (para alinhamento).
3.
Criação de objetos: Quando é necessário um novo objeto de um tipo específico, o alocador verifica primeiro o cache associado a esse tipo de objeto.
4.
Listas grátis: Dentro de cada laje, há uma lista gratuita contendo ponteiros para objetos disponíveis. Quando um objeto é solicitado, o alocador verifica esta lista gratuita primeiro. Se um objeto gratuito for encontrado, ele é simplesmente retirado da lista, minimizando a sobrecarga de alocação.
5. Alocação de laje: Se a lista gratuita dentro de uma laje estiver vazia, o alocador poderá pegar uma laje totalmente nova do pool de memória geral do sistema.
6.
gerenciamento de laje: As lajes podem estar em um dos vários estados:
*
completo: Todos os objetos na laje estão em uso.
*
parcial: Alguns objetos estão em uso e outros são gratuitos.
*
vazio: Todos os objetos são gratuitos.
7.
reutilização e desalocação da laje: Quando um objeto não é mais necessário, ele é devolvido à lista gratuita de sua laje, disponibilizando -o imediatamente para reutilização. As lajes vazias são frequentemente devolvidas ao pool de memória do sistema para economizar memória.
8.
minimizando a fragmentação: Ao dedicar lajes a tipos de objetos específicos e reutilizar as lajes, o alocador de laje reduz drasticamente a fragmentação interna (espaço desperdiçado dentro de blocos alocados) e a fragmentação externa (espaço desperdiçado entre blocos alocados). Como os tamanhos dos objetos são conhecidos com antecedência, não há necessidade de pesquisa e divisão.
Vantagens do alocador de laje: *
Velocidade: Alocação e desalocação muito rápidas devido ao uso gratuito da lista e tempo mínimo de pesquisa.
*
Fragmentação reduzida: Utiliza com eficiência a memória, evitando a fragmentação.
*
Eficiência do cache: Reduz as erros de cache mantendo os objetos relacionados juntos em lajes.
*
escalabilidade: Lida com um grande número de alocações e desalocações de objetos com eficiência.
Desvantagens do alocador da laje: *
Sobrecarga de memória: Cada cache e laje têm algumas despesas gerais em termos de estruturas de gerenciamento (listas gratuitas, metadados).
*
Complexidade: Mais complexo de implementar do que alocadores mais simples.
*
Custo de configuração inicial: Criar e inicializar caches e lajes consome algum tempo inicialmente.
Em resumo, o alocador de laje é uma técnica sofisticada de gerenciamento de memória, particularmente adequada, para as necessidades dos kernels do sistema operacional, onde o desempenho e o uso eficiente da memória são críticos, especialmente para pequenos objetos alocados e desalocados frequentemente. Ele atinge um bom equilíbrio entre velocidade e eficiência da memória, evitando os problemas de fragmentação de métodos mais simples.