Eine schmutzige Seite erfordert nicht unbedingt ein Zurückschreiben. Eine schmutzige Seite wurde geschrieben, seit der Kernel sie zuletzt als sauber markiert hat. Die Daten müssen nicht immer wieder in der Originaldatei gespeichert werden.
Die Seiten sind privat und nicht freigegeben, sodass sie nicht wieder in der Originaldatei gespeichert werden. Es wäre unmöglich, eine schmutzige Seite durch eine schreibgeschützte Datei zu sichern. Wenn die Seite aus dem RAM entfernt werden muss, wird sie im Swap gespeichert.
Seiten, die schreibgeschützt, privat und fehlerhaft sind, sich jedoch im Bereich einer Speicherzuordnungsdatei befinden, sind normalerweise Datenseiten, die Konstanten enthalten, die zur Laufzeit initialisiert werden müssen, sich jedoch nach der Initialisierung nicht ändern. Beispielsweise können sie statische Daten enthalten, in die Zeiger eingebettet sind. Die Zeigerwerte hängen von der Adresse ab, an der das Programm oder die Bibliothek zugeordnet ist. Sie müssen daher nach dem Start des Programms berechnet werden, wobei die Seite zu diesem Zeitpunkt gelesen und geschrieben wird. Nachdem die Zeiger berechnet wurden, ändert sich der Inhalt der Seite in dieser Instanz des Programms nie mehr, sodass die Seite in schreibgeschützt geändert werden kann. Siehe „Jagd nach Schmutzige Speicherseite“ von stosb für ein Beispiel mit Codefragmenten.
In seltenen Fällen werden schreibgeschützte, ausführbare, private und schmutzige Seiten angezeigt. Dies geschieht bei einigen Linkern, die Code und Daten freier mischen, oder bei der Just-in-Time-Kompilierung.
Zusätzlich zu den Fällen listet Gilles auf:
Wenn sich ein Prozess verzweigt, markiert der Kernel möglicherweise alle seine schmutzigen Seiten als schreibgeschützt und sie werden zwischen dem Elternteil und dem Kind geteilt. Wenn einer der Prozesse auf die Seite schreibt, tritt eine Ausnahme auf, und der Kernel kopiert die Seite und markiert sie als beschreibbar. Dies erspart das Kopieren von Seiten, die von beiden Prozessen letztendlich nicht erneut geändert werden. (Beachten Sie, dass in dieser Situation die Seiten in der Hardware als schreibgeschützt markiert sind, dem Kernel jedoch bekannt ist, dass sie beschreibbar sind.)
quelle