(A resposta a seguir pressupõe uma plataforma "moderna" de desktop, servidor ou plataforma incorporada de ponta (como smartphones e também sistemas cada vez menores). Para sistemas x86, moderno significa 386 e acima. A resposta a seguir também pressupõe uma SO "moderno", como quase qualquer unix ou Windows desde 95.)
Isso não está acontecendo no sistema operacional, está acontecendo no processador, especificamente na MMU ( unidade de gerenciamento de memória ) . A MMU suporta endereçamento virtual, pelo qual os bits que compõem um ponteiro não indicam diretamente a localização física dos bits na memória.
Em uma MMU típica, quando um ponteiro é desreferenciado, a MMU divide os bits em dois grupos: os bits de ordem superior compõem o número da página e os bits de ordem inferior compõem o endereço dentro da página. A maioria das máquinas de desktop e servidor usa páginas de 4kB. A MMU consulta o número da página virtual em uma tabela chamada TLB (é o que você chamou de "mapas de memória de processo"). O TLB indica o número da página física que corresponde a esta página virtual. A MMU busca os dados da página física na memória.
Se o TLB não contiver uma entrada para esse número de página virtual específico, a MMU notificará o processador de que ocorreu um acesso inválido; isso geralmente é chamado de exceção.
Observe que eu não mencionei o sistema operacional até agora. Isso porque toda essa operação é independente do sistema operacional. O sistema operacional entra em ação porque configura as coisas de duas maneiras:
O sistema operacional é responsável por alternar tarefas. Quando isso ocorre, como você suspeitou, ele salva o TLB atual e o substitui pelo TLB salvo para a próxima tarefa agendada. Dessa forma, cada processo possui um TLB; portanto, o endereço 0x123456
no processo X pode não apontar para o mesmo local real na RAM que o mesmo endereço no processo Y ou pode simplesmente ser inválido. Se um processo tenta desreferenciar um ponteiro fora do seu espaço de endereço, ele não alcança o espaço de outro processo, mas não chega a lugar nenhum .
O sistema operacional decide o que acontece quando uma exceção é gerada. Ele pode encerrar o processo de acesso à memória inválido (falha de segmentação, falha de proteção geral, ...). Essa também é a maneira pela qual a troca é implementada: o manipulador de exceção pode decidir buscar alguns dados do espaço de troca, atualizar o TLB adequadamente e executar o acesso novamente.
Observe que a MMU fornece segurança porque o processo não pode alterar seu próprio TLB. Somente o kernel do sistema operacional pode alterar TLBs. O funcionamento das permissões de alteração do TLB está além do escopo desta resposta.
Gilles 'SO- parar de ser mau'
fonte