mmap: Dateien in den Speicher einblenden
Kurz: Mit mmap blendet das Betriebssystem eine Datei in den Adressraum eines Programms ein, sodass man sie wie ein Array im Speicher liest und schreibt.
Genauer: Das Programm ruft keine read-Aufrufe mehr auf. Beim ersten Zugriff auf eine Seite löst ein Seitenfehler das Nachladen von der Platte aus.
Im Detail
- Aufruf:
mmap(NULL, länge, PROT_READ, MAP_SHARED, fd, 0)liefert einen Zeiger. In Python:mmap.mmap(...). - Vorteile: Kein Kopieren zwischen Kernel- und Programmspeicher, bequemer Zufallszugriff, mehrere Prozesse teilen dieselben Seiten (gemeinsamer Speicher).
- Anonymes mmap: Ohne Datei, so fordern Speicherverwalter (
mallocbei großen Blöcken) Speicher an. - Fallstricke: Fehler beim Zugriff auf eine abgeschnittene Datei führen zu Signalen (SIGBUS). Bei vielen kleinen Dateien oder sequentiellem Lesen ist normales Lesen oft gleich schnell.
- Einsatz: Datenbanken (LMDB, früher MongoDB), ausführbare Dateien und Bibliotheken werden selbst per mmap geladen, große Modelldateien in der KI.
- Seitencache: Die Daten liegen im Seitencache des Kernels und werden bei Speicherknappheit verdrängt.
Siehe auch: Copy-on-Write