Em uma arquitetura de 32 bits, o intervalo de espaço de endereçamento para endereçar RAM é:
0x00000000 - 0xffffffff
ou 4'294'967'295
(4 GB).
O kernel do linux divide em até 3/1 (também pode ser 2/2, ou 1/3 1 ) no espaço do usuário (alta memória) e no espaço do kernel (pouca memória), respectivamente. / p>
O intervalo de espaço do usuário:
0x00000000 - 0xbfffffff
Todo processo de usuário recém gerado gera um endereço (intervalo) dentro dessa área. Os processos do usuário geralmente não são confiáveis e, portanto, são proibidos de acessar o espaço do kernel. Além disso, eles são considerados não urgentes, como regra geral, o kernel tenta adiar a alocação de memória para esses processos.
O intervalo de espaço do kernel:
0xc0000000 - 0xffffffff
Um processo do kernel obtém seu endereço (intervalo) aqui. O kernel pode acessar diretamente este 1 GB de endereços (bem, não o total de 1 GB, há 128 MB reservados para acesso a memória alta).
Processos gerados no espaço do kernel são confiáveis, urgentes e presumidos sem erros, a solicitação de memória é processada instantaneamente.
Todo processo do kernel também pode acessar o intervalo de espaço do usuário, se desejar. E para conseguir isso, o kernel mapeia um endereço do espaço do usuário (a memória alta) para o espaço do kernel (a memória baixa), os 128 MB mencionados acima são especialmente reservados para isso.
1 Se a divisão é 3/1, 2/2 ou 1/3 é controlada pela opção CONFIG_VMSPLIT_...
; provavelmente você pode verificar em /boot/config*
para ver qual opção foi selecionada para o seu kernel.