So che quando una pagina cache della pagina viene modificata, viene contrassegnata come sporca e richiede una riscrittura, ma cosa succede quando:
Scenario: il file / apps / EXE, che è un file eseguibile, è completamente impaginato nella cache della pagina (tutte le sue pagine sono nella cache / memoria) ed eseguito dal processo P
La versione continua quindi sostituisce / apps / EXE con un nuovo eseguibile.
Presupposto 1: presumo che il processo P (e chiunque altro abbia un descrittore di file che faccia riferimento al vecchio eseguibile) continuerà a utilizzare il vecchio, in memoria / app / EXE senza problemi, e qualsiasi nuovo processo che tenti di eseguire quel percorso otterrà il nuovo eseguibile.
Assunzione 2: suppongo che se non tutte le pagine del file sono mappate in memoria, le cose andranno bene fino a quando non si verifica un errore di pagina che richiede pagine del file che sono state sostituite e probabilmente si verificherà un segfault?
Domanda 1: Se blocchi tutte le pagine del file con qualcosa come vmtouch, questo cambia lo scenario?
Domanda 2: Se / apps / EXE si trova su un NFS remoto, farebbe qualche differenza? (Suppongo di no)
Correggi o convalida i miei 2 presupposti e rispondi alle mie 2 domande.
Supponiamo che questa sia una scatola di CentOS 7.6 con una specie di kernel 3.10.0-957.el7
Aggiornamento: Ripensandoci, mi chiedo se questo scenario non è diverso da qualsiasi altro scenario di pagina sporca.
Suppongo che il processo che scrive il nuovo binario farà una lettura e otterrà tutte le pagine della cache poiché è tutto impaginato, e quindi tutte quelle pagine saranno contrassegnate come sporche. Se sono bloccati, saranno solo pagine inutili che occupano la memoria principale dopo che il conteggio di riferimento è pari a zero.
Sospetto che alla fine dei programmi attualmente in esecuzione, qualsiasi altra cosa utilizzerà il nuovo binario. Supponendo che sia tutto corretto, immagino sia interessante solo quando viene eseguito il paging solo in parte del file.