Eu sei que quando uma página de cache de página é modificada, ela é marcada como suja e requer uma write-back, mas o que acontece quando:
Cenário: O arquivo / apps / EXE, que é um arquivo executável, é paginado no cache da página completamente (todas as suas páginas estão no cache / memória) e sendo executado pelo processo P
A liberação contínua substitui / apps / EXE por um novo executável.
Suposição 1: Presumo que o processo P (e qualquer outra pessoa com um descritor de arquivo que faça referência ao antigo executável) continuará usando o antigo, na memória / apps / EXE sem problemas, e qualquer novo processo que tente executar esse caminho será iniciado. o novo executável.
Suposição 2: Presumo que, se nem todas as páginas do arquivo forem mapeadas na memória, tudo ficará bem até que haja uma falha de página exigindo páginas do arquivo que foram substituídas e provavelmente ocorrerá um segfault?
Pergunta 1: Se você bloquear todas as páginas do arquivo com algo como vmtouch, isso muda o cenário?
Pergunta 2: Se / apps / EXE estiver em um NFS remoto, isso faria alguma diferença? (Presumo que não)
Corrija ou valide minhas 2 suposições e responda minhas 2 perguntas.
Vamos assumir que esta é uma caixa do CentOS 7.6 com algum tipo de kernel 3.10.0-957.el7
Atualização: Pensando nisso mais, me pergunto se esse cenário não é diferente de qualquer outro cenário de página suja.
Suponho que o processo que escreve o novo binário faça uma leitura e obtenha todas as páginas de cache, pois todas estão paginadas e, em seguida, todas essas páginas serão marcadas como sujas. Se estiverem bloqueados, serão apenas páginas inúteis que ocupam a memória principal depois que a contagem de referências for zero.
Eu suspeito que, quando os programas em execução no momento terminarem, qualquer outra coisa usará o novo binário. Supondo que tudo esteja correto, acho que só é interessante quando apenas parte do arquivo é paginada.