Ein Vorteil, der noch nicht aufgeführt ist, ist die Möglichkeit der mmap()
eine Nur-Lese-Zuordnung als sauber Seiten. Wenn man einen Puffer im Adressraum des Prozesses zuweist und dann read()
um den Puffer aus einer Datei zu füllen, werden die diesem Puffer entsprechenden Speicherseiten nun schmutzig da sie angeschrieben worden sind.
Schmutzige Seiten können vom Kernel nicht aus dem RAM gelöscht werden. Wenn Swap-Speicherplatz vorhanden ist, können sie in den Swap-Speicher ausgelagert werden. Dies ist jedoch kostspielig, und auf einigen Systemen, wie z. B. kleinen eingebetteten Geräten mit nur Flash-Speicher, gibt es überhaupt keinen Swap-Speicher. In diesem Fall verbleibt der Puffer im RAM, bis der Prozess beendet wird, oder er gibt ihn vielleicht mit madvise()
.
Nicht geschrieben an mmap()
Die Seiten sind sauber. Wenn der Kernel Arbeitsspeicher benötigt, kann er sie einfach löschen und den Arbeitsspeicher verwenden, in dem sich die Seiten befanden. Wenn der Prozess, der die Zuordnung hatte, erneut darauf zugreift, kommt es zu einem Seitenfehler, und der Kernel lädt die Seiten erneut aus der Datei, aus der sie ursprünglich stammen. Auf die gleiche Weise, wie sie ursprünglich angelegt wurden.
Dazu ist es nicht erforderlich, dass mehr als ein Prozess die zugeordnete Datei verwendet, um einen Vorteil zu haben.