mmap är ett POSIX -kompatibelt Unix -systemanrop som tillåter minnesmappning av en fil eller enhet . Det är en in-/utdatametod genom minnesmapping av en fil och implementerar naturligtvis on-demand-sökning, eftersom innehållet i filen initialt inte läses från disken och inte använder fysiskt minne alls. Den faktiska läsningen från disken utförs i ett "lat" läge, det vill säga när man kommer åt en specifik plats.
På Linux kan Mac OS X och BSD mmap skapa flera typer av mappningar.
Anonyma mappningar är mappningar av en processs virtuella minnesutrymme snarare än en fils i filsystemets utrymme. Av denna anledning liknar anonym mappning malloc- funktionen och används i vissa implementeringar av malloc för vissa platser. Observera att anonyma mappningar inte är en del av POSIX-standarden, även om de är implementerade i nästan alla POSIX-system.
Filmappningar låter dig visa en fil i virtuellt minne (praktiskt sett är detta buffring av att läsa/skriva en specifik fil med direkt åtkomst till bufferten, som området för filmappningen i minnet, med minnesadresser). Åtkomst till dessa minnesområden resulterar i läsning/skrivning av filen. Om mappningen delas mellan processer kommer skrivning till detta utrymme i en process att påverka andra processer. Om privat mappning används kommer ändringarna inte att vara synliga för andra processer och kommer inte att skrivas till filen.
Processen att läsa/skriva en fil som är mappad till virtuellt RAM-minne leder inte alltid till det förväntade resultatet, eftersom filsegment kopieras till RAM-minne och periodiskt bytas ut till disk, men synkronisering kan tvingas fram med msync -systemanropet .
mmap- filer kan avsevärt minska diskanvändningen för flera program som har åtkomst till samma fil. Om filen är minnesmappad kan applikationsprogram dela ett minnessegment som är en minneskarta över filen, istället för att ladda ner filen för varje applikationsprogram som vill komma åt filen.
Minne som allokerats med mmap kan nås från underordnade processer .
mmap kan användas för att implementera inter-process communication (IPC). På moderna operativsystem är mmap i allmänhet att föredra framför System V -stil distribuerad minneskommunikation .
Huvudskillnaden mellan System V delat minne (shmem) och minnesmappat I/O (mmap) är att System V delat minne är beständigt: utan att explicit raderas kommer data att lagras i minnet och förbli tillgängliga så länge som systemet inte inaktiveras. mmap-minnet är inte beständigt mellan programstarter (endast om mappningen inte är reserverad i en fil) – minnessegmentet som skapas av mmap raderas automatiskt av systemkärnan när alla program som använder det avslutas.
Kommunikation mellan processer | |
---|---|
Metoder | |
Utvalda protokoll och standarder |