Senhor
30 de janeiro de 2012 por Redação iMasters
Este artigo, em duas partes, vai mostrar como o kernel gerencia a sua memória.
?
Depois de examinar o layout do endereço virtual de um processo, recorremos ao kernel e seus mecanismos para gerenciar a memória do usuário. Aqui está o gonzo novamente:
Os processos do Linux são implementados no kernel como instâncias de estrutura da task, o descritor do processo. O campo mm em uma estrutura da task aponta para o descritor de memória, mm_struct, que é um sumário executivo da memória de um programa. Ele armazena o início e o final dos segmentos de memória, como mostrado acima, o número de páginas de memória física usadas pelo processo (rss significa for Resident Set Size), a quantidade de espaço de endereços virtuais usados, e outros fragmentos. Dentro do descritor da memória, nós também temo dois gerenciadores de memória para o programa: o conjunto de áreas de memória virtual e tabelas de memórias. Áreas de memória do gonzo são mostradas abaixo:
Cada área de memória virtual (VMA) é um alcance contíguo de endereços virtuais; essas áreas nunca se sobrepõem. Uma instância do vm_area_struct descreve totalmente a área da memória, incluindo seus endereços de início e fim, flags para determinar as permissões de acesso e comportamentos, e o campo vm_file para especificar qual arquivo está sendo mapeando pela área, se ele existir. Um VMA que não mapeia um arquivo é anônimo. Cada segmento de memória acima (por exemplo, heap, stack) corresponde a um único VMA, com a exceção do segmento de mapeamento da memória. Isso não é uma exigência, mas é comum em maquinas x86. VMAs não se importam em qual segmento eles estão.
Os VMAs de um programa estão armazenados no seu descritor de memória tanto como uma lista linkada no campo mmap, ordenada pelos endereços virtuais iniciais, e como um red-black tree, enraizado no campo mm_rb. A red-black tree permite que o kernel busque rapidamente pela