Většina moderních systémů dělí paměť na stránky o velikosti 4-64 KB, často s možností používat tzv. obrovské stránky o velikosti 2 MB nebo 1 GB (často jsou možné obě varianty). Překlady stránek jsou ukládány do vyrovnávací paměti TLB (Translation Lookaside Buffer). Některé systémy, hlavně starší konstrukce RISC, zachycují do operačního systému, když překlad stránky není nalezen v TLB. Většina systémů používá hardwarový procházkový strom. Většina systémů umožňuje vypnutí jednotky MMU, ale některé ji při zachycení do kódu OS vypínají.

VAXEdit

Stránky VAX mají 512 bajtů, což je velmi málo. Operační systém může s více stránkami zacházet, jako by to byla jedna větší stránka. Například Linux na VAXu seskupuje osm stránek dohromady. Na systém se tedy pohlíží, jako by měl 4 KB stránek. VAX dělí paměť na čtyři oblasti s pevným určením, z nichž každá má velikost 1 GB. Jsou to:

Prostor P0 Používá se pro paměť pro obecné účely pro jednotlivé procesy, například pro haldy. Prostor P1 (neboli řídicí prostor), který je rovněž per-procesní a obvykle se používá pro zásobníky supervizoru, exekutivy, jádra, uživatele a další per-procesní řídicí struktury spravované operačním systémem. Prostor S0 (neboli systémový prostor), který je globální pro všechny procesy a uchovává kód a data operačního systému, ať už stránkovaná nebo ne, včetně stránkovacích tabulek. Prostor S1 Který je nevyužitý a „vyhrazený pro digitální“.

Stránkové tabulky jsou velká lineární pole. Za normálních okolností by to bylo velmi nehospodárné, když se adresy používají na obou koncích možného rozsahu, ale tabulka stránek pro aplikace je sama o sobě uložena ve stránkované paměti jádra. Ve skutečnosti tedy existuje dvouúrovňový strom, který aplikacím umožňuje mít řídké rozložení paměti, aniž by plýtvaly velkým množstvím místa na nepoužívané položky tabulky stránek. Jednotka VAX MMU je pozoruhodná tím, že postrádá přístupový bit. Operační systémy, které implementují stránkování, musí najít nějaký způsob, jak emulovat přístupový bit, pokud mají pracovat efektivně. Obvykle operační systém periodicky odmapovává stránky, takže chyby typu page-not-present mohou být použity k tomu, aby operační systém mohl nastavit přístupový bit.

ARMEdit

Aplikační procesory založené na architektuře ARM implementují jednotku MMU definovanou architekturou virtuálního paměťového systému ARM. Současná architektura definuje PTE pro popis 4 KB a 64 KB stránek, 1 MB sekcí a 16 MB nadsekcí; starší verze definovaly také 1 KB malou stránku. ARM používá dvouúrovňovou tabulku stránek, pokud používá 4 KB a 64 KB stránky, nebo pouze jednoúrovňovou tabulku stránek pro 1 MB sekce a 16 MB sekce.

Aktualizace TLB jsou prováděny automaticky hardwarem procházení tabulky stránek. PTE obsahují přístupová práva pro čtení/zápis na základě oprávnění, informace o možnosti ukládání do mezipaměti, bit NX a nezabezpečený bit.

IBM System/360 Model 67, IBM System/370 a nástupciUpravit

Model 67 IBM System/360, který byl uveden v srpnu 1965, obsahoval jednotku MMU zvanou dynamický překlad adres (DAT). Má neobvyklou vlastnost ukládání přístupových a špinavých bitů mimo tabulku stránek (spolu se čtyřbitovým ochranným klíčem pro všechny procesory S/360). Vztahují se spíše k fyzické než k virtuální paměti a přistupuje se k nim pomocí účelových instrukcí. To snižuje režii operačního systému, který by jinak musel propagovat přístupové a špinavé bity z tabulek stránek do fyzicky orientovanější datové struktury. To usnadňuje virtualizaci na úrovni operačního systému, později nazývanou paravirtualizace.

Od srpna 1972 má IBM System/370 podobnou jednotku MMU, i když zpočátku podporovala pouze 24bitový virtuální adresový prostor namísto 32bitového virtuálního adresového prostoru System/360 Model 67. Ukládá také přístupové a špinavé bity mimo tabulku stránek. Počátkem roku 1983 architektura System/370-XA rozšířila virtuální adresový prostor na 31 bitů a v roce 2000 byla představena 64bitová architektura z/Architektura s adresovým prostorem rozšířeným na 64 bitů; ty nadále ukládají přístupové a špinavé bity mimo tabulku stránek.

DEC AlphaEdit

Procesor DEC Alpha dělí paměť na 8 KB stránek. Po chybě TLB prochází nízkoúrovňový strojový kód firmwaru (zde nazývaný PALcode) tříúrovňovou stromově strukturovanou tabulkou stránek. Adresy jsou rozděleny takto: 21 bitů je nepoužitých, 10 bitů pro indexování kořenové úrovně stromu, 10 bitů pro indexování střední úrovně stromu, 10 bitů pro indexování listové úrovně stromu a 13 bitů, které procházejí do fyzické adresy bez modifikace. Podporovány jsou plné bity oprávnění pro čtení/zápis/vykonání.

MIPSEdit

Architektura MIPS podporuje jeden až 64 záznamů v TLB. Počet položek TLB je konfigurovatelný při konfiguraci procesoru před syntézou. Položky TLB jsou duální. Každá položka TLB mapuje číslo virtuální stránky (VPN2) na jedno ze dvou čísel rámce stránky (PFN0 nebo PFN1) v závislosti na nejméně významném bitu virtuální adresy, který není součástí masky stránky. Tento bit a bity masky stránky nejsou ve VPN2 uloženy. Každá položka TLB má svou vlastní velikost stránky, která může mít libovolnou hodnotu od 1 KB do 256 MB v násobcích čtyř. Každý PFN v položce TLB má atribut cache, dirty a bit platného stavu. VPN2 má globální stavový bit a identifikátor přidělený operačním systémem, který se podílí na porovnávání položek TLB s virtuálními adresami, pokud je globální stavový bit nastaven na nulu. PFN ukládá fyzickou adresu bez bitů masky stránky.

Výjimka z doplnění TLB je generována, pokud v TLB nejsou žádné záznamy, které by odpovídaly mapované virtuální adrese. Výjimka TLB invalid je generována, když existuje shoda, ale záznam je označen jako neplatný. Výjimka TLB modified je generována, když instrukce store odkazuje na mapovanou adresu a u odpovídajícího záznamu není nastaven stav dirty. Pokud při zpracování výjimky TLB vznikne výjimka TLB, výjimka TLB s dvojitou chybou, je odeslána do vlastní obsluhy výjimky.

MIPS32 a MIPS32r2 podporují 32bitový virtuální adresový prostor a až 36bitový fyzický adresový prostor. MIPS64 podporuje až 64 bitů virtuálního adresového prostoru a až 59 bitů fyzického adresového prostoru.

Sun 1Edit

Původní Sun 1 je jednodeskový počítač postavený na mikroprocesoru Motorola 68000 a uvedený v roce 1982. Obsahuje původní jednotku správy paměti Sun 1, která zajišťuje překlad adres, ochranu paměti, sdílení paměti a přidělování paměti pro více procesů běžících na procesoru. Veškerý přístup procesoru k soukromé vestavěné paměti RAM, externí paměti Multibus, vestavěným vstupům a výstupům Multibus I/O probíhá přes jednotku MMU, kde se jednotným způsobem provádí překlad adres a ochrana. Jednotka MMU je implementována hardwarově na desce CPU.

Jednotka MMU se skládá z kontextového registru, mapy segmentů a mapy stránek. Virtuální adresy z CPU jsou překládány na mezilehlé adresy pomocí mapy segmentů, které jsou zase překládány na fyzické adresy pomocí mapy stránek. Velikost stránky je 2 KB a velikost segmentu je 32 KB, což dává 16 stránek na segment. Současně lze mapovat až 16 kontextů. Maximální logický adresní prostor pro kontext je 1024 stránek nebo 2 MB. Maximální fyzická adresa, kterou lze mapovat současně, je rovněž 2 MB.

Kontextový registr je důležitý v operačním systému s více úlohami, protože umožňuje procesoru přepínat mezi procesy bez opětovného načítání všech informací o stavu překladu. Čtyřbitový kontextový registr může přepínat mezi 16 částmi mapy segmentů pod kontrolou supervizoru, což umožňuje mapovat 16 kontextů současně. Každý kontext má svůj vlastní virtuální adresový prostor. Sdílení virtuálního adresového prostoru a komunikaci mezi kontexty lze zajistit zápisem stejných hodnot do map segmentů nebo stránek různých kontextů. Další kontexty lze zpracovávat tak, že se s mapou segmentů zachází jako s kontextovou mezipamětí a zastaralé kontexty se nahrazují na základě nejméně používaných kontextů.

Kontextový registr nerozlišuje mezi stavy uživatele a supervizora. Přerušení a pasti nepřepínají kontexty, což vyžaduje, aby všechny platné vektory přerušení byly vždy mapovány ve stránce 0 kontextu, stejně jako platný zásobník supervizoru.

PowerPCEdit

V PowerPC G1, G2, G3 a G4 jsou stránky obvykle 4 KB. Po chybě TLB zahájí standardní PowerPC MMU dvě současná vyhledávání. Jedno vyhledávání se pokouší přiřadit adresu k jednomu ze čtyř nebo osmi registrů pro překlad adres datových bloků (DBAT), případně čtyř nebo osmi registrů pro překlad adres instrukčních bloků (IBAT). Registry BAT mohou mapovat lineární kusy paměti o velikosti až 256 MB a operační systém je obvykle používá k mapování velkých částí adresového prostoru pro vlastní použití jádra operačního systému. Pokud je vyhledávání BAT úspěšné, je druhé vyhledávání zastaveno a ignorováno.

Druhé vyhledávání, které není přímo podporováno všemi procesory této rodiny, probíhá prostřednictvím takzvané „invertované tabulky stránek“, která funguje jako hashované rozšíření TLB mimo čip. Nejprve se horní čtyři bity adresy použijí k výběru jednoho ze 16 segmentových registrů. Poté 24 bitů ze segmentového registru nahradí tyto čtyři bity, čímž vznikne 52bitová adresa. Použití segmentových registrů umožňuje, aby více procesů sdílelo stejnou hashovací tabulku.

Dvaapadesátibitová adresa je hashována a poté použita jako index do off-chip tabulky. Tam se prohledá skupina osmistránkových záznamů tabulky a najde se jeden, který se shoduje. Pokud se žádný neshoduje kvůli nadměrnému množství kolizí hashování, procesor to zkusí znovu s trochu jinou hashovací funkcí. Pokud ani to neuspěje, procesor se přepne do operačního systému (s vypnutou jednotkou MMU), aby mohl být problém vyřešen. OS musí vyřadit záznam z tabulky hash, aby uvolnil místo pro nový záznam. OS může generovat nový záznam z normálnější stromové tabulky stránek nebo z datových struktur pro mapování, které jsou pravděpodobně pomalejší a prostorově úspornější. Podpora řízení bez vykonání je v segmentových registrech, což vede ke granularitě 256 MB.

Hlavním problémem tohoto návrhu je špatná lokalizace mezipaměti způsobená hashovací funkcí. Stromové návrhy se tomuto problému vyhýbají umístěním záznamů tabulky stránek pro sousední stránky na sousední místa. Operační systém běžící na PowerPC může minimalizovat velikost tabulky hash, aby tento problém omezil.

Je také poněkud pomalé odstraňovat položky tabulky stránek procesu. Operační systém se může vyhnout opakovanému použití hodnot segmentů, aby tomu čelil se zpožděním, nebo se může rozhodnout trpět plýtvání pamětí spojené s tabulkami hash pro jednotlivé procesy. Čipy G1 nevyhledávají položky tabulky stránek, ale generují hash s tím, že operační systém bude prohledávat standardní tabulku hash softwarově. Operační systém může zapisovat do TLB. Čipy G2, G3 a rané čipy G4 používají k prohledávání tabulky hash hardware. Nejnovější čipy umožňují operačnímu systému zvolit obě metody. Na čipech, kde je tato možnost volitelná nebo ji vůbec nepodporují, může OS zvolit výhradní použití stromové tabulky stránek.

IA-32 / x86Edit

Architektura x86 se vyvíjela velmi dlouho při zachování plné softwarové kompatibility, a to i pro kód OS. Proto je MMU nesmírně složitá, s mnoha různými možnými provozními režimy. Zde je popsán běžný provoz tradičního procesoru 80386 a jeho nástupců (IA-32).

Prostředí procesoru primárně rozděluje paměť na 4 KB stránky. Segmentové registry, zásadní pro starší konstrukce 8088 a 80286 MMU, se v moderních operačních systémech nepoužívají, s jednou zásadní výjimkou: přístupem k datům specifickým pro vlákna aplikací nebo k datům specifickým pro procesor jader operačních systémů, který se provádí s explicitním použitím segmentových registrů FS a GS. Veškerý přístup do paměti zahrnuje segmentový registr, vybraný podle prováděného kódu. Segmentový registr funguje jako index do tabulky, která poskytuje offset, jenž má být přidán k virtuální adrese. S výjimkou použití FS nebo GS operační systém zajistí, že offset bude nulový.

Po přidání offsetu je adresa maskována tak, aby nebyla větší než 32 bitů. Výsledek lze vyhledat prostřednictvím stromově strukturované tabulky stránek, přičemž bity adresy jsou rozděleny následujícím způsobem: 10 bitů pro větev stromu, 10 bitů pro listy větve a 12 nejnižších bitů se přímo zkopíruje do výsledku. Některé operační systémy, například OpenBSD s funkcí W^X a Linux s patchem Exec Shield nebo PaX, mohou také omezit délku segmentu kódu určenou registrem CS, aby znemožnily provádění kódu v modifikovatelných oblastech adresového prostoru.

Menší revize MMU zavedené s Pentiem umožnily velmi velké 4 MB stránky vynecháním spodní úrovně stromu (tím zůstane 10 bitů pro indexování první úrovně hierarchie stránek, přičemž zbývajících 10+12 bitů se přímo zkopíruje do výsledku). Drobné revize jednotky MMU zavedené s procesorem Pentium Pro zavedly funkci rozšíření fyzické adresy (PAE), která umožňuje 36bitové fyzické adresy s 2+9+9 bity pro tříúrovňové tabulky stránek a 12 nejnižších bitů se přímo kopíruje do výsledku. Velké stránky (2 MB) jsou dostupné také vynecháním spodní úrovně stromu (výsledkem je 2+9 bitů pro dvouúrovňovou hierarchii tabulek a zbývajících 9+12 nejnižších bitů se kopíruje přímo). Tabulka atributů stránky navíc umožňovala specifikaci kešovatelnosti vyhledáním několika vysokých bitů v malé tabulce na CPU.

Podpora nevýkonu byla původně poskytována pouze na základě jednotlivých segmentů, takže její použití bylo velmi nepohodlné. Novější čipy x86 poskytují v režimu PAE bit zákazu vykonávání na stránku. Výše popsané mechanismy W^X, Exec Shield a PaX emulují per-page non-execute podporu na strojích s procesory x86, které postrádají bit NX, nastavením délky segmentu kódu, přičemž dochází ke ztrátě výkonu a zmenšení dostupného adresového prostoru.

x86-64Edit

Heterogenní systémová architektura (HSA) vytváří jednotný virtuální adresový prostor pro CPU, GPU a DSP, čímž zastarává mapovací triky a kopírování dat.

x86-64 je 64bitové rozšíření architektury x86, které téměř zcela odstraňuje segmentaci ve prospěch modelu ploché paměti, který používají téměř všechny operační systémy pro procesory 386 a novější. V dlouhém režimu jsou ignorovány všechny segmentové offsety s výjimkou segmentů FS a GS. Při použití 4 KB stránek má strom tabulky stránek čtyři úrovně místo tří.

Virtuální adresy jsou rozděleny následovně: 16 nepoužitých bitů, po devíti bitech pro čtyři úrovně stromu (celkem 36 bitů) a 12 nejnižších bitů se přímo kopíruje do výsledku. U 2 MB stránek jsou pouze tři úrovně tabulky stránek, celkem 27 bitů použitých při stránkování a 21 bitů offsetu. Některé novější procesory podporují také 1 GB stránky se dvěma úrovněmi stránkování a 30 bity offsetu.

CPUID lze použít k určení, zda jsou podporovány 1 GB stránky. Ve všech třech případech je požadováno, aby se 16 nejvyšších bitů rovnalo 48. bitu, nebo jinými slovy, spodních 48 bitů je znaménkem rozšířeno na vyšší bity. Je to proto, aby bylo možné v budoucnu rozšířit adresovatelný rozsah, aniž by byla ohrožena zpětná kompatibilita. Ve všech úrovních tabulky stránek obsahuje položka tabulky stránek bit zákazu vykonání.

Unisys MCP Systems (Burroughs B5000)Edit

Tato část může být pro čtenáře matoucí nebo nejasná. Pomozte prosím oddíl objasnit. Na diskusní stránce by o tom mohla proběhnout diskuse. (Září 2020) (Naučte se, jak a kdy odstranit tuto zprávu šablony)

Systém Burroughs B5000 z roku 1961 byl prvním komerčním systémem, který podporoval virtuální paměť (po systému Atlas), přestože nemá jednotku MMU Poskytuje dvě funkce jednotky MMU – adresy virtuální paměti a ochranu paměti – s odlišným architektonickým přístupem.

V první řadě, při mapování adres virtuální paměti, namísto potřeby jednotky MMU, jsou systémy MCP založeny na deskriptorech. Každému alokovanému bloku paměti je přiřazen hlavní deskriptor s vlastnostmi bloku (tj. velikost, adresa a zda se v paměti nachází). Při požadavku na přístup k bloku pro čtení nebo zápis hardware kontroluje jeho přítomnost prostřednictvím bitu přítomnosti (pbit) v deskriptoru.

Bit pbit 1 znamená přítomnost bloku. V takovém případě lze k bloku přistupovat prostřednictvím fyzické adresy v deskriptoru. Pokud je pbit roven nule, je generováno přerušení pro MCP (operační systém), aby blok zpřítomnil. Pokud je pole adresy nulové, jedná se o první přístup k tomuto bloku a je alokován (init pbit). Pokud je pole adresy nenulové, jedná se o diskovou adresu bloku, který byl předtím vyrolován, takže blok je načten z disku a pbit je nastaven na jedničku a adresa fyzické paměti je aktualizována tak, aby ukazovala na blok v paměti (další pbit). Tím se deskriptory stávají ekvivalentem záznamu v tabulce stránek v systému MMU. Výkon systému lze sledovat prostřednictvím počtu pbitů. Init pbity indikují počáteční alokace, ale vysoký počet dalších pbitů naznačuje, že systém může thrashovat.

Všechna alokace paměti je tedy zcela automatická (jedna z vlastností moderních systémů) a neexistuje jiný způsob alokace bloků než tento mechanismus. Neexistují žádná volání jako malloc nebo dealloc, protože paměťové bloky jsou také automaticky zahozeny. Toto schéma je také líné, protože blok se alokuje až ve chvíli, kdy je na něj skutečně odkazováno. Když je paměť téměř plná, MCP zkoumá pracovní množinu, zkouší kompakci (protože systém je segmentovaný, nikoli stránkovaný), dealokování segmentů určených pouze pro čtení (jako jsou segmenty kódu, které lze obnovit z jejich původní kopie) a jako poslední možnost rolování špinavých datových segmentů na disk.

Dalším způsobem, jakým B5000 zajišťuje funkci MMU, je ochrana. Protože všechny přístupy probíhají přes deskriptor, může hardware kontrolovat, zda jsou všechny přístupy v mezích a v případě zápisu, zda má proces oprávnění k zápisu. Systém MCP je ze své podstaty bezpečný, a proto k zajištění této úrovně ochrany paměti nepotřebuje jednotku MMU. Deskriptory jsou určeny pouze pro čtení uživatelských procesů a mohou být aktualizovány pouze systémem (hardwarem nebo MCP). (Slova, jejichž značka je liché číslo, jsou určena pouze pro čtení; deskriptory mají značku 5 a kódová slova mají značku 3.)

Bloky lze sdílet mezi procesy prostřednictvím kopírovacích deskriptorů v zásobníku procesů. Některé procesy tedy mohou mít oprávnění k zápisu, zatímco jiné ne. Kódový segment je určen pouze pro čtení, je tedy reentrantní a sdílený mezi procesy. Kopírovací deskriptory obsahují 20bitové adresové pole udávající index hlavního deskriptoru v poli hlavních deskriptorů. Tím je také implementován velmi účinný a bezpečný mechanismus IPC. Bloky lze snadno přemisťovat, protože při změně stavu bloku je třeba aktualizovat pouze hlavní deskriptor.

Jediným dalším aspektem je výkon – poskytují lepší výkon systémy založené na MMU nebo bez MMU? Systémy MCP mohou být implementovány nad standardním hardwarem, který má MMU (například standardní PC). I když implementace systému nějakým způsobem využívá jednotku MMU, na úrovni MCP to nebude vůbec patrné.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.