Quando um processo é bifurcado, o Linux faz uma cópia mínima e utiliza um método copy-on-write. Essa cópia na gravação significa que, se ambos os processos (pai e filho) estiverem fazendo leituras, eles lerão exatamente os mesmos blocos de memória. Uma vez que uma delas escreve nessa memória, ela é copiada e não é mais compartilhada.
Agora os programas não sabem que isso está acontecendo. Isso ocorre porque o kernel mantém uma tabela de páginas para cada processo. Quando o processo diz 'Eu quero acessar a memória 0xbeef', o kernel remapeia isso em um local real na memória física. Isso é necessário porque o programa armazenará esses endereços em variáveis, portanto, quando o programa for bifurcado, ele não saberá se ou onde os dados em sua memória são movidos para (todos os endereços armazenados nas variáveis devem continuar válidos). br>
Isso também é o que permite que o swap funcione. O kernel pode pegar a memória física que contém os dados e armazená-los em um disco, mas o programa ainda referencia o endereço 0xbeef, e o kernel irá traduzir isso.
Assim, o mínimo absoluto que o kernel acaba copiando é a tabela de páginas que faz esse mapeamento de endereços e a estrutura da tarefa (abrange arquivos abertos, estado do processo, sinais pendentes, etc.).