Mapování souborů do paměti

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Mapování souborů do paměti je v informatice označení pro alternativní práci se soubory, kdy je jejich obsah promítnut jádrem systému do operační paměti. Některé operace se souborem mohou být efektivnější, protože je využívána existující podpora virtuální paměti a mechanismus výpadku stránky a tím je možné vynechat několikanásobné kopírování dat v paměti počítače.

Popis

Mapování souborů do paměti nahrazuje klasické rozhraní pro práci se soubory (tj. API) v podobě funkcí open, read, write, close a dalších, které pracují se souborovým deskriptorem). +more Při mapování souborů do paměti nastaví jádro operačního systému mapování virtuální paměti tak, že obsah souboru je možné číst z operační paměti běžnými strojovými instrukcemi pro práci s pamětí. Namapování souboru do paměti je provedeno patřičnou úpravou tabulky stránek, za kterou je v jádře zodpovědný modul správy paměti.

Díky použití stránkování paměti a jeho (typicky vysoce optimalizovaného) mechanismu obsluhy výpadku stránky může mapování souborů do paměti poskytnout v mnoha případech vyšší výkon, než při použití klasického rozhraní. Navíc je tím eliminováno kopírování dat v paměti mezi vyrovnávací pamětí v jádře (kernel space), diskovou cache a paměťovým prostorem procesu (tzv. +more user space). Více viz privilegovaný režim.

V unixových systémech, kde je téměř vše soubor, je možné mapovat do paměti všechna vstupně/výstupní zařízení, se kterými je možné pracovat pomocí souborového deskriptoru.

Srovnání

Výhody

Hlavní výhodou mapování souborů do paměti je zvýšení I/O výkonu, zejména pokud je použito na velké soubory. Přístup k mapovaným souborům je rychlejší než za pomoci klasických systémových volání čtení a zápisu ze dvou důvodů:

# klasické systémové volání je řádově pomalejší než jednoduchá změna tabulky stránek # není nutné kopírovat data mezi vyrovnávací pamětí v jádře, diskovou cache a uživatelským prostorem procesu # ve většině operačních systémů je oblast se soubory mapovanými do paměti zároveň i cache pro disk # několik změn v souboru může být sdruženo do jedné aktualizace celé 4 KiB stránky # data souboru jsou do paměti načtena až v okamžiku, kdy jsou čtena (pomocí mechanismu výpadku stránky) # snadné sdílení souboru mezi více procesy (namapovaný soubor je sdílená paměť)

Nevýhody

Mapování malých souborů může vést k plýtvání místem, protože paměťové mapy jsou vždy uspořádány podle velikosti stránky, která je většinou 4 KiB. U souboru o velikosti 5 KiB by byly přiděleny dvě stránky, takže by bylo zabráno 8 KiB paměti a z nich by byly 3 KiB nevyužity.

Některé počítačové platformy mají s mapováním souborů do paměti problémy z důvodu omezeného paměťového prostoru, což se týká zejména 32bitového režimu procesorů pro počítače IBM PC kompatibilní, které adresují maximálně 4 GiB RAM (v 32bitových systémech řady Windows NT je paměťový prostor procesů standardně omezen na 2 GiB, v 32bitovém jádře Linuxu závisí na konkrétní situaci). Z tohoto důvodu je vždy do paměti namapována jen část souboru, což významným způsobem ztěžuje práci programátorům.

Podpora různých platforem

Většina moderních OS nebo běhových prostředí podporuje nějakou formu mapování souborů do paměti. Funkce mmap mapuje zadaný soubor do paměti a vytváří POSIX deskriptor. +more Volání je podporováno na POSIX kompatibilních systémech (UNIX, Linux, Mac OS X, nebo OpenVMS).

Operační systém Microsoft Windows poskytuje ve svém API funkci CreateFileMapping. Mapování souborů do paměti poskytuje až +moreNET'>Microsoft . NET verze 4, pro předchozí verze jsou k dispozici knihovny třetích stran.

Programovací jazyk Java poskytuje třídy a metody pro přístup k souborům mapovaným do paměti jako je FileChannel.

Programovací jazyk D podporuje soubory mapované do paměti ve standardní knihovně (std.mmfile modul).

Python obsahuje od verze 1. 6 standardní knihovny modul mmap. +more Detaily použití modulu se liší podle toho, zda je používán na platformě Microsoft Windows nebo Unix.

V Perlu je dostupných několik modulů pro mapování souborů do paměti z CPANu, jako například Sys::Mmap. a File::Map.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top