Como o endereço do kernel do Linux pode variar de 8 MB a 1 GB de memória virtual em sistemas x86?

0

Estou estudando como habilitar paginação no kernel do Linux, mas não entendi como o kernel pode endereçar de 8 MB a 1 GB de memória virtual. Quero dizer, na fase de inicialização, o kernel vem com uma tabela de páginas muito pequena codificada na imagem. Esta tabela de páginas (apontada por swapper_pg_dir) permite escrever apenas as duas primeiras entradas da tabela de páginas. Cada entrada aponta para uma página de 4 MB. Então, no total, o kernel pode endereçar apenas 8 MB de memória virtual. Em seguida, o kernel tem que instigar o segundo nível da tabela de páginas, a fim de impulsionar todos os seus 1 GB de memória virtual. Para resolver isso, ele deve confiar em algum alocador de memória que permite recuperar buffers onde colocar as entradas da tabela de páginas de segundo nível: este é o alocador bootmem.

Então, minha pergunta é: como o endereço do kernel pode variar de 8 MB a 1 GB de memória virtual?

    
por alex_the_great 29.03.2018 / 18:44

1 resposta

0

Eu não tenho certeza qual é a pergunta realmente - é feito usando a unidade de paginação - talvez veja aqui: link

O diretório de páginas abaixo de 896MB ainda está armazenado em swapper_pg_dir , apenas é reinicializado após a primeira inicialização de 8MB. As coisas ficam mais complicadas acima de 896MB e abaixo de 4096MB, e ficam ainda mais complicadas do que 4096MB.

    
por 29.03.2018 / 19:57