mmap: dosyaları belleğe eşlemek
Kısaca: mmap ile işletim sistemi bir dosyayı programın adres uzayına eşler; böylece dosya, bellekteki bir dizi gibi okunur ve yazılır.
Biraz daha ayrıntılı: Program artık read çağrıları yapmaz. Bir sayfaya ilk erişimde bir sayfa hatası diskten yüklemeyi tetikler.
Ayrıntılı
- Çağrı:
mmap(NULL, uzunluk, PROT_READ, MAP_SHARED, fd, 0)bir işaretçi döndürür. Python’da:mmap.mmap(...). - Avantajlar: Çekirdek ve program belleği arasında kopya yok, rahat rastgele erişim, birden çok süreç aynı sayfaları paylaşır (paylaşılan bellek).
- Anonim mmap: Dosyasız; bellek ayırıcılar (büyük bloklar için
malloc) belleği böyle ister. - Tuzaklar: Kısaltılmış bir dosyaya erişim sinyallere (SIGBUS) yol açar. Çok sayıda küçük dosyada veya ardışık okumada normal okuma çoğu zaman aynı hızdadır.
- Kullanım: Veritabanları (LMDB, eskiden MongoDB), çalıştırılabilir dosyalar ve kütüphaneler zaten mmap ile yüklenir, YZ’de büyük model dosyaları.
- Sayfa önbelleği: Veriler çekirdeğin sayfa önbelleğinde durur ve bellek darlığında tahliye edilir.
Ayrıca bak: Copy-on-write