Não é o kernel que está impedindo acessos ruins à memória, é a CPU. O papel do kernel é apenas configurar a CPU corretamente.
Mais precisamente, o componente de hardware que impede os acessos incorretos à memória é a MMU . Quando um programa acessa um endereço de memória, o endereço é decodificado pela CPU com base no conteúdo da MMU. A MMU estabelece uma conversão de endereços virtuais para endereços físicos: quando a CPU faz um carregamento ou um armazenamento em um determinado endereço virtual, calcula o endereço físico correspondente com base no conteúdo da MMU. O kernel define a configuração da MMU de tal forma que cada programa só pode acessar a memória a que tem direito. Registradores de memória e hardware de outros programas não são mapeados na memória de um programa: esses endereços físicos não têm endereço virtual correspondente na configuração da MMU para esse programa.
Em uma alternância de contexto entre diferentes processos, o kernel modifica a configuração da MMU para que ela contenha a tradução desejada para o novo processo.
Alguns endereços virtuais não são mapeados, isto é, a MMU os traduz para um valor especial de “não tal endereço”. Quando o processador cancela a referência a um endereço não mapeado, isso causa um trap: o processador ramifica para um local predefinido no código do kernel. Algumas armadilhas são legítimas; por exemplo, o endereço virtual pode corresponder a uma página que esteja em espaço de troca , caso em que o código do kernel carregará o conteúdo da página a partir da troca, volte ao programa original de tal forma que a instrução de acesso à memória seja executada novamente. Outras armadilhas não são legítimas, caso em que o processo recebe um sinal que, por padrão, mata o programa imediatamente (e se não houver ramificações) para o manipulador de sinal no programa: em qualquer caso, a instrução de acesso à memória não está completa).