EMZETT.
Login

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 (malloc bei 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