Normalmente, no x86 sem PAE, haverá uma divisão de kernel / usuário de 3Gb / 1Gb. Isso significa que o 1Gb de memória superior é reservado para o kernel, enquanto o espaço do usuário acessa a memória no 3Gb inferior. Isso é feito dessa maneira para evitar a necessidade de atualizar o registro que aponta para as tabelas de páginas (CR3) e liberar o TLB toda vez que houver uma alternância de contexto. Com essa otimização, o CR3 é atualizado e o TLB é liberado apenas ao agendar um processo diferente.
As informações sobre como os endereços virtuais devem ser interpretados são armazenadas em três locais:
- Áreas de memória virtual (também conhecidas como VMAs, também conhecidos como mapeamentos): associam uma região de memória contígua a um armazenamento de backup (um arquivo ou troca, para mapeamentos anônimos.
- Entradas da tabela de páginas: associam uma página inteira de endereços virtuais aos endereços físicos correspondentes e contém permissões e sinalizadores variados. PTEs são carregados preguiçosamente dos VMAs: um PTE não será necessariamente instanciado (e a página correspondente paginada em: isto é paginação sob demanda) até que um acesso seja tentado; somente processos que acessam os 3GB de memória precisarão de 3Mb de tabelas de páginas.
- O TLB: este é um cache de HW da tabela de páginas.