Sua compreensão não é exatamente correta, mas está bem próxima. O programa é realmente carregado de forma lenta, página por página. (Algumas delas podem, na verdade, ser carregadas antes do uso, mas isso é uma troca de memória de desempenho, não é algo com o qual você pode contar.)
A parte do sistema que faz o carregamento é o próprio kernel. Uma página é carregada o mais tardar quando o programa requer aquela parte da memória, seja para acessar dados ou para pular para uma instrução da máquina. A maneira como isso funciona é que cada acesso à memória no processador passa pela MMU ; se a página que contém o acesso solicitado for mapeada na tabela MMU do processo, a CPU simplesmente acessará a memória; se a página não for mapeada, isso acionará uma interceptação , que executa uma parte do código no kernel que analisa a razão para o trap, aloca uma página de memória física, carrega o conteúdo da página necessária e retorna o controle para o programa para executar o acesso novamente.
Quando uma página de memória foi modificada pelo programa, seu conteúdo pode ser colocado em swap e, em seguida, carregado de volta. Quando uma página de memória vem diretamente de um arquivo (executável ou não), seu conteúdo é carregado desse arquivo. Isso não passa pelas chamadas do sistema, já que tudo está acontecendo dentro do kernel, mas faz os mesmos acessos de baixo nível que uma chamada do sistema para acessar um arquivo faria.
O resultado é que, se o sistema de arquivos em que um executável em execução estiver armazenado ficar inacessível, o processo será interrompido. Ele permanecerá em suspensão ininterrupta de sono até que o sistema de arquivos atenda à solicitação.
Se o executável estiver no NFS e o sistema de arquivos NFS estiver montado com a opção hard
, o executável aguardará para sempre ou até que o servidor responda, o que ocorrer primeiro. Se o sistema de arquivos NFS for montado com a opção soft
, a solicitação NFS falhará após um tempo, e isso se traduz em um sinal para o processo (SIGSEGV, ou seja, segfault, eu acho).