Uma página suja não requer necessariamente um write-back. Uma página suja é uma que foi escrita desde a última vez que o kernel a marcou como limpa. Os dados nem sempre precisam ser salvos no arquivo original.
As páginas são privadas, não compartilhadas, para que não sejam salvas no arquivo original. Seria impossível ter uma página suja apoiada por um arquivo somente leitura. Se a página precisar ser removida da RAM, ela será salva na troca.
As páginas que são somente leitura, privadas e sujas, mas dentro do intervalo de um arquivo mapeado por memória, geralmente são páginas de dados que contêm constantes que precisam ser inicializadas em tempo de execução, mas não são alteradas depois de terem sido inicializado. Por exemplo, eles podem conter dados estáticos que incorporam ponteiros; os valores de ponteiro dependem do endereço no qual o programa ou biblioteca é mapeado, portanto, ele deve ser calculado após o início do programa, com a página sendo lida / escrita nesse estágio. Depois que os ponteiros foram computados, o conteúdo da página nunca será alterado nessa instância do programa, portanto, a página pode ser alterada para somente leitura. Veja “Caçando páginas de memória suja” por stosb para um exemplo com fragmentos de código.
Você pode, mais raramente, ver páginas somente leitura, executáveis, privadas e sujas; isso acontece com alguns linkers que misturam código e dados mais livremente, ou com compilação just-in-time.