Explication de mmap (Memory-Mapped Files) :
mmap est un mécanisme système qui permet de mapper un fichier en mémoire vive, c'est-à-dire d'associer directement le contenu d'un fichier à une zone de la mémoire adressable d'un processus. Cela crée une correspondance entre les octets du fichier et les adresses mémoire, ce qui permet d'accéder au fichier comme à un tableau en mémoire, sans utiliser explicitement les appels système read/write.

Fonctionnement de mmap :

Mapping :

Le système d'exploitation charge des pages du fichier en mémoire physique à la demande (lazy loading), c'est-à-dire uniquement quand le processus accède à ces pages.
Exemple en Python :
import mmap
with open("fichier.bin", "r+b") as f:
mm = mmap.mmap(f.fileno(), 0) Mappe tout le fichier
data = mm[100:200] Accès direct comme un tableau

Synchronisation :

Les modifications en mémoire sont automatiquement répercutées sur le fichier (selon les flags utilisés, comme mmap.MAP_SHARED). Le système gère la persistance.

Gestion par le système :

Le noyau s'occupe de la pagination, du chargement/déchargement des pages, et de la cohérence avec le fichier sur disque.

Avantage clé pour l'accès aux fichiers :
Performance accrue pour les accès aléatoires et les gros fichiers :
Réduction des appels système : mmap évite les appels répétés à read/write, car l'accès se fait via des opérations mémoire (comme memcpy), bien plus rapides.
Optimisation des E/S : Le système charge uniquement les pages nécessaires (pagination), ce qui est efficace pour les fichiers volumineux ou les accès non séquentiels.
Partage entre processus : Plusieurs processus peuvent mapper le même fichier en mémoire, permettant une communication inter-processus (IPC) efficace sans copie de données.

Cas d'usage typiques :
Traitement de fichiers binaires volumineux (bases de données, images, logs).
Implémentation de structures de données persistantes (ex. : bases de données comme SQLite).
Accès concurrent à des fichiers partagés.

Limites/Précautions :
La taille du fichier est limitée par l'espace d'adressage mémoire du processus.
Les modifications doivent être explicitement synchronisées avec msync (ou flush en Python) pour garantir la persistance.
Risque de corruption si le fichier est modifié par un autre processus pendant le mapping.