Il sistema operativo Windows tenta di conservare l'utilizzo della memoria fisica consentendo alle DLL caricate nel loro indirizzo di base (desiderato) in processi diversi di utilizzare le stesse pagine fisiche con semantica copy-on-write; questo articolo , ad esempio, descrive il meccanismo.
Ora, l'API di Windows Virtual Memory consente di modificare la modalità di protezione delle pagine di memoria tramite la funzione VirtualProtect. Noterai che due delle modalità di protezione disponibili includono semantica copy-on-write.
Ora che abbiamo il preludio fuori mano, la domanda è: se si prende una pagina di memoria copy-on-write da una DLL appena caricata e si cambia la sua modalità di protezione, per esempio, in lettura-scrittura, come funziona influisce sugli altri processi? Prima della modifica, tutti i processi utilizzano la stessa pagina di memoria fisica, quindi quella singola pagina improvvisamente perde il suo voodoo copy-on-write e diventa un tipo strano di memoria condivisa?
Per motivi di sanità mentale devo presumere che se cambi la modalità di protezione di una pagina di copia su scrittura in lettura-scrittura (o qualsiasi modalità di protezione non COW), il kernel genererà la tua pagina privata con l'identico il contenuto e gli altri processi vivranno felicemente con la loro pagina originale di COW. Il problema è che non sono riuscito a trovare alcun riferimento per supportarlo, quindi se qualcuno mi indicasse qualcosa che dicesse esplicitamente che questo è davvero il caso lo apprezzerei.
EDIT: una domanda ancora più interessante sarebbe cosa succederebbe se si modificasse la pagina COW per leggere-scrivere e quindi scrivere in essa - la modifica influirebbe sugli altri processi (poiché la pagina non è più COW, e mappata in altri anche i processi, sembra che dovrebbe, ma che sarebbe chiaramente pericoloso)?