Una pagina sporca non richiede necessariamente una riscrittura. Una pagina sporca è quella su cui è stata scritta dall'ultima volta che il kernel l'ha contrassegnata come pulita. Non è sempre necessario salvare i dati nel file originale.
Le pagine sono private, non condivise, quindi non verrebbero salvate nuovamente nel file originale. Sarebbe impossibile avere una pagina sporca supportata da un file di sola lettura. Se la pagina deve essere rimossa dalla RAM, verrà salvata in swap.
Le pagine di sola lettura, private e sporche, ma all'interno dell'intervallo di un file mappato in memoria, sono in genere pagine di dati che contengono costanti che devono essere inizializzate in fase di esecuzione, ma non cambiano dopo che sono state inizializzate. Ad esempio, possono contenere dati statici che incorporano puntatori; i valori del puntatore dipendono dall'indirizzo a cui è mappato il programma o la libreria, quindi deve essere calcolato dopo l'avvio del programma, con la pagina in lettura-scrittura in questa fase. Dopo che i puntatori sono stati calcolati, il contenuto della pagina non cambierà mai in questa istanza del programma, quindi la pagina può essere modificata in sola lettura. Vedi "Hunting Down Dirty Memory Pages" di stosb per un esempio con frammenti di codice.
Potresti, più raramente, vedere pagine di sola lettura, eseguibili, private, sporche; questi si verificano con alcuni linker che mescolano codice e dati più liberamente o con la compilazione just-in-time.
Oltre ai casi che Gilles elenca:
Quando un processo esegue il fork, il kernel può contrassegnare tutte le sue pagine sporche come di sola lettura e saranno condivise tra genitore e figlio. Quando uno dei processi scrive sulla pagina, si verificherà un'eccezione e il kernel copierà la pagina e la contrassegnerà come scrivibile. Ciò consente di risparmiare il lavoro di copia delle pagine che alla fine non vengono modificate nuovamente da nessuno dei due processi. (Notare che in questa situazione, le pagine sono contrassegnate come di sola lettura nell'hardware ma sono note al kernel come scrivibili.)