Su Linux, se fork() e le uscite del processo forche (figlio) sono tutte le pagine di memoria virtuale ancora contrassegnate come copia-su-scrittura nel genitore?Se fork() e le uscite del processo forfettario (figlio) sono tutte le pagine della VM ancora contrassegnate come COW nel genitore?
Penso che le pagine rimarranno contrassegnate come COW come qualsiasi altra cosa sarebbe probabilmente eccessivamente costosa da implementare, probabilmente conteggi di ref per pagina e altri costosi libri contabili. Ma mi chiedevo l'altro giorno, se forzo un processo per eseguire del codice in una "fotografia stabile" del processo corrente. Cosa succede quando termina il processo figlio? Tutte le pagine di memoria del genitore rimangono contrassegnate come copy-on-write? Ciò significa che la biforcazione in un processo con molta memoria virtuale (ad esempio 128 GB +) solo per eseguire qualche codice per alcuni minuti causerebbe un rallentamento delle prestazioni nel processo principale, per ore o persino giorni dopo (per non parlare della stessa chiamata a forcella che non sarebbe a buon mercato.)
sono solo curioso di sapere cosa il comportamento reale è su Linux (e non ho idea di come avrei potuto testarlo.)
Non sono sicuro, ma dovresti usare 'posix_spawn', non' fork', per eseguire programmi esterni. –
IIRC, COW è impostato su * entrambi * le pagine padre e figlio. Il primo a venire ottiene la pagefault e la pagina è clonata (e nessuna delle pagine clonate ha più il COW impostato) BTW: potresti guardare la fonte. È open source, lo sai ... – wildplasser