Uma página suja não requer necessariamente uma devolução. Uma página suja é aquela que foi gravada 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 novamente 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 em troca.
As páginas que são somente leitura, privadas e sujas, mas dentro do intervalo de um arquivo mapeado na 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 após serem inicializadas. Por exemplo, eles podem conter dados estáticos que incorporam ponteiros; os valores do 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 de leitura e gravação nesta fase. Depois que os ponteiros forem calculados, o conteúdo da página nunca será alterado nesta instância do programa, portanto, a página poderá ser alterada para somente leitura. Veja “Caçando Páginas de Memória Suja” do stosb para um exemplo com fragmentos de código.
Mais raramente, você pode ver páginas somente leitura, executáveis, particulares e sujas; isso acontece com alguns vinculadores que misturam código e dados mais livremente ou com compilação just-in-time.
Além dos casos, Gilles lista:
Quando um processo bifurca, o kernel pode marcar todas as suas páginas sujas como somente leitura e elas serão compartilhadas entre o pai e o filho. Quando um dos processos grava na página, uma exceção ocorre e o kernel copia a página e a marca como gravável. Isso economiza o trabalho de copiar páginas que, por fim, não são modificadas novamente por nenhum dos processos. (Observe que nessa situação, as páginas são marcadas como somente leitura no hardware, mas são conhecidas pelo gravador como kernel.)
fonte