Como o kernel do Linux gerencia menos de 1 GB de memória física?

Estou aprendendo o interior do kernel do linux e lendo "Entendendo o kernel do Linux", várias questões relacionadas à memória me atingiram. Uma delas é como o kernel do Linux lida com o mapeamento de memória se a memória física de, digamos, apenas 512 MB estiver instalada no meu sistema.

Enquanto eu leio, mapas do kernel0 (ou 16) MB-896MB RAM física no endereço linear 0xC0000000 e pode endereçá-lo diretamente. Portanto, no caso descrito acima, onde eu tenho apenas 512 MB:

Como o kernel pode mapear 896 MB de apenas 512 MB? No esquema descrito, o kernel configura as coisas para que todas as tabelas de páginas do processo mapeiem endereços virtuais de 0xC0000000 a 0xFFFFFFFF (1GB) diretamente para endereços físicos de 0x00000000 a 0x3FFFFFFF (1GB). Mas quando tenho apenas 512 MB de RAM física, como posso mapear endereços virtuais de 0xC0000000-0xFFFFFFFF para 0x00000000-0x3FFFFFFF físico? O ponto é que tenho um intervalo físico de apenas 0x00000000-0x20000000.

E os processos do modo de usuário nessa situação?

Cada artigo explica apenas a situação, quando você instala 4 GB de memória e o kernel mapeia os 1 GB no espaço do kernel e os processos do usuário usam a quantidade restante de RAM.

Gostaria de receber qualquer ajuda para melhorar minha compreensão.

Obrigado..!

questionAnswers(5)

yourAnswerToTheQuestion