Tanto quanto eu entendo sua pergunta, geralmente acontece de tal forma:
Se você alocar memória:
- Marcar memória como alocada, mas não alocar memória física (portanto, no acesso, haverá falha de página). No Linux, ele pára nesse estágio, mas é possível que o sistema possa alocar espaço físico imediatamente - então, ele executa algoritmo semelhante no final, como na falha de página, exceto que o OOM não acontecerá.
Se houver falha de página (acessar a página não mapeada)
- Verifique se a memória está alocada, se não retornar erro.
- Verifique se há uma página física gratuita. Se houver goto 5
- Verifique se existe alguma parte que possa ser gravada no disco (como o arquivo do cache) ou se há espaço livre na troca (se não houver troca, considere-a como troca de tamanho 0). Se houver um arquivo / bloco de gravação de volta ao disco ou escrever a página no disco, desmapea-o e goto 5. Se ambos forem possíveis, escolha qualquer um.
- Retornar condição da OOM. Depende do kernel o que acontece - pode exibir erro ao usuário, kernel panic / blue screen, encontrar algum processo para matar etc.
- Mapeie a página que causou o problema para liberar a página. Se a página foi trocada, leia a página da troca e coloque-a na página. Se a página é apoiada por arquivo de leitura de arquivo e colocar conteúdo lá.
Em geral, você pode dizer que nenhuma troca é equivalente a troca total.