A fájl memóriába (memóriába) való hozzárendelése bizonyos operációs rendszerekben a fájlokkal való munkavégzés módja, amelyben a teljes fájl vagy annak egy folyamatos része egy bizonyos memóriaterülethez (RAM-címek egy tartományához) van hozzárendelve. . Ebben az esetben az adatok olvasása ezekről a címekről valójában a leképezett fájlból való adatok kiolvasásához vezet, az adatok ezekre a címekre történő írása pedig ezeknek az adatoknak a fájlba írásához. Gyakran nemcsak a közönséges fájlokat, hanem az eszközfájlokat is hozzárendelheti a memóriához.
A leképezés alternatívája a fájl közvetlen olvasása vagy írása a fájlba. Ez a munkamódszer kevésbé kényelmes a következő okok miatt:
A leképezés használatának további előnye, hogy az olvasáshoz/íráshoz képest kisebb az operációs rendszer terhelése – tény, hogy leképezések használatakor az operációs rendszer nem tölti be egyszerre a teljes fájlt a memóriába, hanem igény szerint, blokkolja egy oldal memória méretét (általában 4 kilobájt). Így még kis mennyiségű fizikai memóriával (például 32 megabájt) is könnyedén megjeleníthet egy 100 megabájtos vagy nagyobb fájlt anélkül, hogy sok többletköltséget okozna a rendszernek. A nyereség akkor is jelentkezik, amikor a memóriából a lemezre ír: ha nagy mennyiségű adatot frissített a memóriában, akkor azokat egyszerre (egy lépéssel a lemezen) írhatja a lemezre.
A memórialeképezett fájl abból a szempontból is kényelmes, hogy könnyen változtathatja a méretét, és ezzel egyidejűleg (újraleképezés után) egy folyamatos, kívánt méretű memóriadarabot kaphat. A dinamikus memóriával egy ilyen trükk nem mindig lehetséges a töredezettség jelensége miatt. Amikor memória-leképezett fájllal dolgozunk, a memóriakezelő automatikusan úgy konfigurálja a processzort, hogy a fájl szomszédos töredékeit tároló RAM-oldalak folyamatos címtartományt alkossanak.
A leképezés használatának fő oka a teljesítménynövekedés. Azonban tisztában kell lennie azokkal a kompromisszumokkal, amelyeket meg kell kötni. A normál I/O tele van plusz rendszerhívásokkal és szükségtelen adatok másolásával, a leképezések használata pedig az oldalelérési hibák miatti lassulásokkal. Tegyük fel, hogy a kívánt fájlhoz kapcsolódó oldal már a gyorsítótárban van, de nincs társítva ehhez a megjelenítéshez. Ha egy másik folyamat módosította, akkor a leképezéshez való társítási kísérlet meghiúsulhat, és az adatok újraolvasását a lemezről vagy lemezre kell mentenie. Így bár a program kevesebb műveletet hajt végre a térképen keresztüli eléréshez, a valóságban az adatok írása a fájl bizonyos helyére tovább tarthat, mint a fájl I / O műveletei (bár átlagosan a térképek használata erősítést ad).
További hátrány, hogy a kijelző mérete a használt architektúrától függ. Elméletileg a 32 bites architektúrák (Intel 386, ARM 9) nem hozhatnak létre 4 GB-nál nagyobb leképezéseket.
A fájl-memória leképezés talán legelterjedtebb alkalmazása egy folyamat memóriába való betöltése (ez igaz a Microsoft Windows és Unix -szerű rendszerekre is). A folyamat elindítása után az operációs rendszer leképezi a fájlját a végrehajtható memóriába (a végrehajtható attribútum). A legtöbb fájlleképezést használó rendszer a page-on-demand technikát használja , amelyben a fájl nem teljes egészében, hanem kis részletekben, egy oldalnyi memória méretében kerül a memóriába, miközben az oldal csak akkor töltődik be, amikor valóban szükség van rá. [1] . A végrehajtható fájlok esetében ez a technika lehetővé teszi, hogy az operációs rendszer a gépi kódnak csak azokat a részeit tartsa a memóriában, amelyekre a program végrehajtásához ténylegesen szükség van.
A leképezések másik gyakori felhasználási esete több folyamat által megosztott memóriadarabok létrehozása. A modern operációs rendszerekben ( védett módot használva ) egy folyamat általában nem teszi lehetővé, hogy más folyamatok hozzáférjenek "memóriájához". Azok a programok, amelyek a saját memóriájuktól eltérő memóriát próbálnak elérni, érvénytelen oldalhibákat vagy szegmentálássértési kivételeket dobnak ki .
A memórialeképezett fájlok használata az egyik legnépszerűbb és legbiztonságosabb (kivételek nélkül) módja annak, hogy a memóriát több folyamat számára elérhetővé tegyük. Két vagy több alkalmazás egyidejűleg leképezheti ugyanazt a fizikai fájlt a memóriájába, és hozzáférhet ahhoz a memóriához.
A legtöbb modern operációs rendszer vagy shell támogatja a memória-leképezett fájlkezelés valamilyen formáját. Például a POSIX specifikáció része az mmap () [2] függvény , amely egy adott deszkriptorral rendelkező fájlhoz egy leképezést hoz létre, a fájl bizonyos helyétől kezdve és bizonyos hosszúsággal . Így számos POSIX -kompatibilis rendszer, mint például a UNIX , a Linux , a FreeBSD , a Mac OS X [3] vagy az OpenVMS támogatja a közös fájlleképezési mechanizmust. A Microsoft Windows egy speciális API -t is támogat erre a célra, például a CreateFileMapping() [4] .