Jednotka správy paměti

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Memory management unit (MMU) je dnes součást CPU, dříve samostatná hardwarová součástka, umožňující procesoru přístup do operační paměti. Svojí funkcí 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.

Funkce[editovat | editovat zdroj]

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ávají 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 disku. 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.

Přínos[editovat | editovat zdroj]

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.

Příklady[editovat | editovat zdroj]

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.

VAX[editovat | editovat zdroj]

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. VAX rozděluje paměť na čtyři pevně určené oblasti, každá o velikosti 1 GiB. Jsou to:

  • P0 prostor: používá se pro všeobecné účely například, jako jsou haldy
  • P1 prostor: (nebo také kontrolní prostor)obvykle se používá pro jádro
  • S0 prostor: (nebo také systémový prostor) je globální pro všechny procesy operačního systému.
  • S1 prostor: je nepoužitý a je rezervován pro Digital.

Tabulky stránek jsou velké lineární pole. Za normálních okolností by to bylo velmi nehospodárné, pokud jsou třeba adresy na obou stranách možného rozsahu. Ovšem tabulka stránek pro aplikace je sama o sobě uložena v paměti stránkového linuxového jádra. Zde je dvouúrovňový strom, umožňující aplikacím použít rozložení paměti bez plýtvání místa na nevyužité položky stránkovací tabulky. VAX MMU se vyznačuje absencí přístupového bitu. Operační systémy, které implementují stránkování musí najít nějaký způsob, jak emulovat (napodobit) přístupový bit, jestliže má fungovat efektivně. OS nebude pravidelně mapovat stránky tak, že je stránka bez přítomnosti poruchy a OS ji může použít aby nastavil přístupový bit.

MIPS[editovat | editovat zdroj]

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.

X86-64[editovat | editovat zdroj]

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ů.

Odkazy[editovat | editovat zdroj]

Reference[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]