Please enable JavaScript.
Coggle requires JavaScript to display documents.
Alocação de memória - Coggle Diagram
Alocação de memória
significa reservar uma área, no caso essas podem ser usadas futuramente por vários processos, os alocadores de memoria podem em existir em contextos como :
-
Alocador de espaço de usuário: Exemplo processos que podem solicitar blocos de memorias, como programar em C solicitar um malloc() de uma estrutura
Alocador de espaço de núcleo: aloca pequenas estruturas, no caso esse alocador de núcleo obtem área da memoria do alocador físico e utiliza para alocar essas estruturas para o núcleo
Alocação basica
O problema básico de alocação que no caso, desejamos dispor e manter de uma grande área de memoria RAM
Atende fluxo de requisições de alocação e liberação de partes dessa área para o SO ou para as demais aplicações
Fragmentação
Ao longo de alocar e deslocar memoria podem aparecer buracos na memoria (uma área que somente tamanhos específicos conseguem ser alocados), quanto mais fragmentada estiver a memoria pior é para o sistema.
Estratégias de alocação : Para minimizar as ocorrências de fragmentação, cada pedido é analisada e encontra o melhor critério que atenda o seu pedido de memória, esses critérios podem ser o primeiro espaço livre, a menor área possível, a maior área etc.
Fragmentação interna : Consiste em arredondar algumas requisições de alocação, assim se evita sobras de área muito pequenas
Desfragmentação : As memorias que são usadas pelos processos são movidas a uma área no qual são concatenadas as áreas livres e assim diminuir a fragmetenção
O alocador Buddy
Binário
Ao receber uma requisição de alocação de memória de qualquer tamanho, 40 KBytes por exemplo, o alocador procura um bloco livre com 64 KBytes (pois 64 KBytes é o menor bloco com tamanho 2n que pode conter os 40 KBytes iniciais). Caso não encontre um bloco com 64 KBytes, procura um bloco livre com 128 KBytes, o divide em dois blocos de 64 KBytes e usa um deles para a alocação.
Ao liberar uma área de memória alocada, o alocador verifica se o par (buddy) do bloco liberado também está livre e funde os dois em um bloco maior, analisa o novo bloco em relação ao seu par e continua as fusões de blocos, até encontrar um par ocupado ou chegar ao tamanho máximo de bloco permitido. Essa fusão entre dois blocos vizinhos é chamada de coalescência.
O alocador Slab
Caching de objetos
É definido um cache para cada tipo de objeto usado pelo núcleo. Cada cache é então dividido em slabs (placas ou lajes) que contêm objetos daquele tipo, portanto todos com o mesmo tamanho. Um slab pode estar cheio, quando todos os seus objetos estão em uso, vazio, quando todos os seus objetos estão livres, ou parcial.
-