Memory management unit (MMU) je v informatice součást mikroprocesoru umožňující přístup do virtuální paměti (dříve samostatná hardwarová součást mimo procesor). Zajišťuje překlad virtuální adresy na fyzickou adresu, ochranu paměti, kontrolu koherence cache, arbitraci paměťové sběrnice a v závislosti na architektuře také přepínání mezi paměťovými bankami.
MMU jednotky rozdělují virtuální adresní prostor na stránky. Velikost každé stránky se rovná mocnině čísla 2, obvykle několika KiB, nicméně může být i mnohem větší. Dolních n bitů z adresy (ofset bez čísla stránky) zůstává beze změny. Horní bity z adresy označují číslo virtuální stránky. MMU překládá číslo virtuální stránky na fyzickou stránku nejprve pomocí asociativní cache paměti, nazývané TLB (Translation Lookaside Buffer). Pokud se požadovaná stránka v TLB nevyskytuje, je spuštěn pomalejší mechanismus, vyhledávání v tabulce stránek (EAT). Fyzické číslo stránky je zkombinováno s číslem rámce stránky (hodnota v tabulce stránek), což vytvoří kompletní fyzickou adresu. Položka v tabulce stránek, nebo TLB může také obsahovat informaci, zdali je na vybrané stránce zapsána nějaká informace, doba posledního použití, či přístupová oprávnění (uživatelský, nebo privilegovaný mód). Tyto informace mohou být využity mechanismem pro plánování procesů.
Občas položka TLB nebo tabulka stránek neumožní přístup na virtuální stránku. To může být způsobeno tím, že na zvolené virtuální stránce není adresována žádná fyzická paměť (což bývá často důsledek softwarové chyby), anebo proto, že je požadovaná stránka odsunuta na disk. V tom případě vyšle MMU řadiči zprávu o výpadku stránky. Operační systém poté vykoná patřičnou obsluhu přerušení. Pokud ještě je v operační paměti volné místo, provede se přemapování a použité virtuální číslo stránky je nastaveno na novou fyzickou adresu. Pokud již volné místo v operační pamětí není, je pro účel přemapování zvolena „nahrazovacím“ algoritmem existující stránka s tím, že původní data jsou uložena na pevný disk.
Výhodná vlastnost MMU je také eliminace problému s fragmentovanou pamětí. Souvislý blok virtuálních adres může totiž být namapován na více bloků fyzické paměti, které nemusí být uloženy vcelku. Kromě toho může být každému procesu přidělen virtuální adresní prostor, do kterého nemají přístup ostatní procesy.
V některých případech může být chyba stránky využita pro detekci chyby v programu. Klíčovým přínosem MMU je ochrana paměti: jádro operačního systému může použít MMU k ochraně proti chybám v programech, když detekuje (či znemožní) přístup do paměti, která danému procesu nepatří. Znamená to, že OS přiděluje každému programu svůj vlastní adresový prostor. MMU také zmírňuje problém fragmentace paměti. Potom, co byly přiděleny bloky paměti a následně uvolněny, volná paměť může začít s fragmentací (přerušovanou) tak, že největší souvislý blok volné paměti může být mnohem menší než celková velikost uvolněné paměti. Souvislý rozsah adres virtuální paměti, může být mapován na několik nesousedících bloků fyzické paměti. U prvních návrhů mikroprocesorů se správa paměti prováděla v samostatném integrovaném obvodu, jako je VLSI VI475 (1986), Motorola 68851 (1984). Později mikroprocesory (Motorola 68030 a Zilog Z280) umístily MMU spolu s CPU na stejný integrovaný obvod, stejně jako Intel 80286 a později x86 mikroprocesory.
Většina moderních systémů rozdělí paměť na stránky, které jsou 4–64 KiB velké, často s možností využití velké stránky od 2 MiB do 512 MiB. Stránka překladů je uložena v tzv. Translation Lookaside Buffer (TLB). Některé systémy, zejména starší RISC, byly v pasti, když nemohly najít stránku s překladem v TLB. Většina systémů povoluje vypnutí MMU.
Stránky VAX jsou velké 512 B, jsou tedy velmi malé. OS tak může zacházet s více stránkami jako s jednou velkou. Například Linux má VAX skupiny po osmi stránkách. To znamená, že systém pracuje se 4 KiB stránkou. Virtuální adresní prostor procesu je v operačním systému VMS rozdělen na čtyři pevně určené oblasti, každá o velikosti 1 GiB. Jsou to:[2][3]
Tabulky stránek jsou velká lineární pole. Pokud by se používaly adresy z obou konců adresního prostoru, bylo by to velmi nehospodárné, ale tabulka stránek pro aplikace je sama uložena ve stránkované paměti jádra OS. Díky použití dvouúrovňového stromu mohou mít aplikace rozsáhlé oblasti nepoužité paměti bez toho, že by nevyužité položky stránkovací tabulky zabíraly nějaký prostor. Nevýhodou VAX MMU je, že postrádá bit indikující přístup ke stránce. Aby operační systém, který implementuje stránkování, fungoval efektivně, musí přístupový bit nějakým způsobem emulovat (napodobit jeho funkci). Obvykle OS pravidelně odmapovává stránky, takže výpadky stránek mohou operačnímu systému posloužit k nastavování přístupového bitu.
MIPS architektura podporuje až 64 záznamů v TLB. Počet záznamů je konfigurovatelný v konfiguraci CPU před syntézou. TLB záznamy jsou dvojí. Každá položka TLB mapuje číslo virtuální stránky (VPN2) do jednoho ze dvou rámců (PFN0 nebo PFN1), v závislosti na nejmenším významovém bitu virtuální adresy. Tento bit a bitová maska stránky nejsou uloženy v VPN2. Každá položka má vlastní velikost stránky, která může být libovolně velká od 1 KiB do 256 MiB v násobcích po 4. Každý PFN v TLB záznamu má atribut cache a status bit. VPN2 má globální status bit a OS přiřazené ID, které je součástí záznamu do TLB v případě že je tento bit v nule.
Architektura x86-64 je 64bitové rozšíření x86, které téměř úplně odstranilo segmentaci. Je to použito téměř ve všech operačních systémech pro procesory 386 nebo novější. V dlouhodobém režimu jsou všechny segmentové posuny ignorovány s výjimkou částí FS a GS. Při použití 4 KiB stránek má tabulkový strom čtyři úrovně místo tří. Virtuální adresy jsou rozděleny takto: 16 bitů nepoužité, 9 bitů pro každou ze čtyř úrovní stromu (celkem 36) a 12 nejnižších bitů se přímo zkopíruje do výsledků. Při použití 2 MiB stránek má tabulkový strom pouze tři úrovně pro celkově 27 bitů. Některé novější CPU podporují 1 GB stránky s dvěma úrovněmi pro 30 bitů.
V tomto článku byl použit překlad textu z článku Memory management unit na anglické Wikipedii.