Virtuální paměť - Virtual memory

Virtuální paměť kombinuje aktivní RAM a neaktivní paměť na DASD a vytváří velký rozsah sousedících adres.

V práci na počítači , virtuální paměť , nebo virtuální úložiště je správa paměti techniku, která poskytuje „idealizovaný abstrakci paměťových zdrojů, které jsou skutečně k dispozici na daném stroji“, která „vytváří iluzi pro uživatele velmi velké (hlavní) paměť“.

Operační systém počítače pomocí kombinace hardwaru a softwaru mapuje adresy paměti používané programem, nazývané virtuální adresy , na fyzické adresy v paměti počítače . Hlavní úložiště , jak ho vidí proces nebo úkol, se jeví jako souvislý adresní prostor nebo kolekce sousedících segmentů . Operační systém spravuje virtuální adresní prostory a přiřazení skutečné paměti virtuální paměti. Hardware pro překlad adres v CPU, často označovaný jako jednotka pro správu paměti (MMU), automaticky překládá virtuální adresy na fyzické adresy. Software v operačním systému může tyto schopnosti rozšířit, například pomocí diskového úložiště , aby poskytl virtuální adresní prostor, který může překročit kapacitu skutečné paměti, a tak odkazovat na více paměti, než je fyzicky přítomno v počítači.

Mezi hlavní výhody virtuální paměti patří osvobození aplikací od nutnosti spravovat sdílený paměťový prostor, schopnost sdílet paměť využívanou knihovnami mezi procesy, zvýšené zabezpečení díky izolaci paměti a schopnost koncepčně využívat více paměti, než by mohlo být fyzicky dostupné, pomocí technika stránkování nebo segmentace.

Vlastnosti

Virtuální paměť usnadňuje programování aplikací skrýváním fragmentace fyzické paměti; delegováním zátěže správy hierarchie paměti na jádro (eliminuje potřebu, aby program explicitně zpracovával překryvy ); a když je každý proces spuštěn ve svém vlastním vyhrazeném adresním prostoru, odstraněním potřeby přemístit programový kód nebo přistupovat k paměti s relativním adresováním .

Virtualizaci paměti lze považovat za zobecnění konceptu virtuální paměti.

Používání

Virtuální paměť je nedílnou součástí moderní počítačové architektury ; implementace obvykle vyžadují hardwarovou podporu, obvykle ve formě jednotky pro správu paměti zabudované v CPU . I když to není nutné, emulátory a virtuální počítače mohou využívat hardwarovou podporu ke zvýšení výkonu svých implementací virtuální paměti. Starší operační systémy, jako jsou systémy pro mainframy šedesátých let, a systémy pro osobní počítače od začátku do poloviny osmdesátých let (např. DOS ), obecně nemají žádnou funkci virtuální paměti, i když významné výjimky pro mainframy šedesátých let zahrnují:

V 60. a na začátku 70. let byla paměť počítače velmi drahá. Zavedení virtuální paměti poskytlo schopnost softwarovým systémům s velkými nároky na paměť běžet na počítačích s méně skutečnou pamětí. Úspory z toho poskytly silnou motivaci k přechodu na virtuální paměť pro všechny systémy. Dodatečná schopnost poskytování virtuálních adresních prostorů přidala další úroveň zabezpečení a spolehlivosti, díky čemuž byla virtuální paměť na trhu ještě atraktivnější.

Většina moderních operačních systémů, které podporují virtuální paměť, také spouští každý proces ve svém vyhrazeném adresním prostoru . Zdá se tedy, že každý program má výhradní přístup k virtuální paměti. Některé starší operační systémy (například OS/VS1 a OS/VS2 SVS ) a dokonce i moderní (například IBM i ) jsou operační systémy s jediným adresním prostorem, které spouští všechny procesy v jednom adresním prostoru složeném z virtualizované paměti.

Integrované systémy a další speciální počítačové systémy, které vyžadují velmi rychlé a/nebo velmi konzistentní doby odezvy, se mohou rozhodnout nepoužívat virtuální paměť kvůli sníženému determinismu ; systémy virtuální paměti spouští nepředvídatelné pasti, které mohou v reakci na vstup způsobovat nechtěná a nepředvídatelná zpoždění, zvláště pokud past vyžaduje, aby byla data čtena do hlavní paměti ze sekundární paměti. Hardware k překladu virtuálních adres na fyzické adresy obvykle vyžaduje implementaci významné oblasti čipů a ne všechny čipy používané ve vestavěných systémech tento hardware obsahují, což je další důvod, proč některé z těchto systémů virtuální paměť nepoužívají.

Dějiny

Ve 40. a 50. letech 20. století musely všechny větší programy obsahovat logiku pro správu primárního a sekundárního úložiště, například překrývání . Virtuální paměť byla proto zavedena nejen za účelem rozšíření primární paměti, ale také za účelem co největšího zjednodušení používání takového rozšíření pro programátory. Aby bylo možné multiprogramování a multitasking , mnoho raných systémů dělilo paměť mezi více programů bez virtuální paměti, jako jsou rané modely PDP-10 prostřednictvím registrů .

Tvrzení, že koncept virtuální paměti poprvé vyvinul německý fyzik Fritz-Rudolf Güntsch na Technische Universität Berlin v roce 1956 ve své doktorské práci Logický návrh digitálního počítače s více asynchronními rotujícími bubny a automatickou vysokorychlostní pamětí , neobstojí. až k pečlivému zkoumání. Počítač navržený Güntsch (ale nikdy postavena) měl adresní prostor 10 5 slov, která mapovány přesně na 10 5 slov bubnů, tj adresy byly skutečné adresy a tam byl žádná forma nepřímé mapování, která je klíčovým prvkem virtuální paměť. Güntsch vynalezl formu mezipaměti , protože jeho vysokorychlostní paměť měla obsahovat kopii některých bloků kódu nebo dat převzatých z bubnů. Skutečně napsal (jak je citováno v překladu): „Programátor nemusí respektovat existenci primární paměti (nemusí ani vědět, že existuje), protože existuje pouze jeden druh adres ( sic ), pomocí kterých lze programovat jako by tam bylo jen jedno úložiště. “ To je přesně situace v počítačích s vyrovnávací pamětí, jedním z prvních komerčních příkladů byl IBM System/360 Model 85. V modelu 85 byly všechny adresy skutečné adresy odkazující na hlavní úložiště jádra. Úložiště polovodičové mezipaměti, pro uživatele neviditelné, obsahovalo obsah částí hlavního úložiště, které aktuálně provádějící program používá. To je přesně analogické s Güntschovým systémem, navrženým jako prostředek ke zlepšení výkonu, nikoli k řešení problémů spojených s víceprogramováním.

První skutečný virtuální paměťový systém byl implementován na univerzitě v Manchesteru za účelem vytvoření jednoúrovňového úložného systému jako součásti počítače Atlas . To používalo stránkovací mechanismus k mapování virtuálních adres, které má programátor k dispozici, na skutečnou paměť, která se skládala ze 16 384 slov primární jádrové paměti a dalších 98 304 slov sekundární paměti bubnu . První Atlas byl uveden do provozu v roce 1962, ale funkční prototypy stránkování byly vyvinuty v roce 1959. V roce 1961 společnost Burroughs Corporation samostatně vydala první komerční počítač s virtuální pamětí, B5000 , se segmentací a nikoli stránkováním.

Než mohla být virtuální paměť implementována v běžných operačních systémech, bylo nutné vyřešit mnoho problémů. Dynamický překlad adres vyžadoval drahý a obtížně sestavitelný specializovaný hardware; počáteční implementace mírně zpomalila přístup do paměti. Existovaly obavy, že nové celosystémové algoritmy využívající sekundární úložiště budou méně účinné než dříve používané algoritmy specifické pro aplikaci. V roce 1969 skončila debata o virtuální paměti pro komerční počítače; IBM výzkumný tým vedený Davidem Sayre ukázal, že jejich virtuální paměti překrytí systém důsledně pracovala lépe než nejlepší ručně ovládaných systémů. Skrz sedmdesátá léta poskytovala řada IBM 370 provozující operační systémy založené na virtuálním úložišti prostředky pro podnikové uživatele k migraci více starších systémů do méně výkonnějších mainframů, které měly lepší poměr cena/výkon. Prvním minipočítačem, který představil virtuální paměť, byl norský NORD-1 ; během 70. let implementovaly další minipočítače virtuální paměť, zejména modely VAX se systémem VMS .

Virtuální paměť byla uvedena na x86 architektuře s chráněném režimu na 80286 Intel procesoru, ale jeho část vyměňovat technika zmenšen špatně pro větší velikosti segmentu. Intel 80386 zavedena podpora stránkovací pod stávajícím segmentace vrstvy, umožňující výjimku stránky poruchy na řetěz s jinými výjimkami bez dvojího zavinění . Načítání deskriptorů segmentu však bylo nákladnou operací, což způsobilo, že se návrháři operačních systémů spoléhali spíše na stránkování než na kombinaci stránkování a segmentace.

Stránkovaná virtuální paměť

Téměř všechny současné implementace virtuální paměti rozdělují virtuální adresní prostor na stránky , bloky sousedících adres virtuální paměti. Stránky na současných systémech mají obvykle velikost alespoň 4 kilobajty ; systémy s velkým rozsahem virtuálních adres nebo množstvím skutečné paměti obecně používají větší velikosti stránek.

Tabulky stránek

Tabulky stránek slouží k překladu virtuálních adres viděných aplikací na fyzické adresy používané hardwarem ke zpracování pokynů; takový hardware, který zpracovává tento konkrétní překlad, je často známý jako jednotka správy paměti . Každý záznam v tabulce stránek obsahuje příznak označující, zda je odpovídající stránka ve skutečné paměti nebo ne. Pokud je ve skutečné paměti, záznam tabulky stránek bude obsahovat skutečnou adresu paměti, na kterou je stránka uložena. Když hardware provede odkaz na stránku a pokud položka tabulky stránek pro stránku indikuje, že není aktuálně v reálné paměti, vyvolá hardware výjimku chyby stránky a vyvolá komponentu správce stránkování operačního systému .

Systémy mohou mít jednu tabulku stránek pro celý systém, samostatné tabulky stránek pro každou aplikaci a segment, strom tabulek stránek pro velké segmenty nebo jejich kombinaci. Pokud existuje pouze jedna tabulka stránek, různé aplikace běžící současně používají různé části jednoho rozsahu virtuálních adres. Pokud existuje více tabulek stránek nebo segmentů, existuje více virtuálních adresních prostorů a souběžné aplikace se samostatnými tabulkami stránek přesměrovávají na různé skutečné adresy.

Některé dřívější systémy s menšími velikostmi skutečné paměti, jako například SDS 940 , používaly pro překlad adres v tabulkách stránky namísto tabulek stránek v paměti.

Vedoucí stránkování

Tato část operačního systému vytváří a spravuje tabulky stránek. Pokud hardware vyvolá výjimku chyby stránky, správce stránkování přistupuje k sekundárnímu úložišti, vrátí stránku, která má virtuální adresu, která vedla k chybě stránky, aktualizuje tabulky stránek tak, aby odrážely fyzické umístění virtuální adresy, a sděluje mechanismu překladu restartujte požadavek.

Když je již veškerá fyzická paměť používána, musí správce stránkování uvolnit stránku v primárním úložišti, aby mohla odloženou stránku podržet. Supervizor používá k určení stránky, kterou má uvolnit, jeden z řady algoritmů nahrazování stránek , jako například ten, který byl v poslední době používán .

Připnuté stránky

Operační systémy mají oblasti paměti, které jsou připnuty (nikdy nebyly přepnuty na sekundární úložiště). Dalšími používanými výrazy jsou zamčené , pevné nebo drátové stránky. Mechanismy přerušení se například spoléhají na řadu ukazatelů na jejich obslužné rutiny, jako je dokončení I/O a chyba stránky . Pokud by stránky obsahující tyto ukazatele nebo kód, který vyvolávají, byly stránkovatelné, zpracování přerušení by bylo mnohem složitější a časově náročnější, zejména v případě přerušení stránky. Některé části struktur tabulky stránek proto nelze stránkovat.

Některé stránky mohou být připnuty na krátkou dobu, jiné mohou být připnuty na dlouhou dobu a u jiných může být nutné trvalé připnutí. Například:

  • Kód správce stránkování a ovladače pro sekundární úložná zařízení, na kterých jsou umístěny stránky, musí být trvale připnuty, protože jinak by stránkování ani nefungovalo, protože by nebyl k dispozici potřebný kód.
  • Komponenty závislé na načasování lze připnout, aby se zabránilo proměnlivému zpoždění stránkování.
  • Datové vyrovnávací paměti , ke kterým má přímý přístup periferní zařízení využívající přímý přístup do paměti nebo I/O kanály, se musí během operace I/O nacházet na připnutých stránkách, protože taková zařízení a sběrnice, ke kterým jsou připojeny, očekávají, že najdou umístěné vyrovnávací paměti dat na adresách fyzické paměti; bez ohledu na to, zda má sběrnice jednotku správy paměti pro I/O , přenosy nelze zastavit, pokud dojde k chybě stránky, a poté restartovat, když byla chyba stránky zpracována.

V operačních systémech IBM pro System/370 a následných systémech je výraz „fixní“ a takové stránky mohou být dlouhodobě fixní nebo mohou být krátkodobé fixní nebo mohou být neopravené (tj. Stránkovatelné). Struktury řízení systému jsou často dlouhodobě fixní (měřeno v hodinách nástěnných hodin, tj. Čas měřený v sekundách, nikoli čas měřený ve zlomcích jedné sekundy), zatímco I/O buffery jsou obvykle krátkodobě fixní (obvykle měřeny výrazně méně než čas nástěnných hodin, možná na desítky milisekund). Ve skutečnosti má OS speciální zařízení pro „rychlé opravy“ těchto krátkodobých pevných datových vyrovnávacích pamětí (oprava, která se provádí bez použití časově náročné instrukce volání supervizora ).

Multics používal termín „drátový“. OpenVMS a Windows označují stránky dočasně nestránkovatelné (jako pro I/O buffery) jako „zamčené“ a jednoduše „nestránkovatelné“ pro ty, které nikdy nelze stránkovat. Specifikace Single UNIX také používá termín „uzamčeno“ ve specifikaci pro , stejně jako manuálové stránky na mnoha unixových systémech. mlock()mlock()

Virtuálně reálný provoz

V operačních systémech OS/VS1 a podobných OS jsou některé části systémové paměti spravovány v režimu „virtuální reálný“, který se nazývá „V = R“. V tomto režimu každá virtuální adresa odpovídá stejné skutečné adrese. Tento režim se používá pro mechanismy přerušení , pro správce stránkování a tabulky stránek ve starších systémech a pro aplikační programy využívající nestandardní správu I/O. Například z/OS IBM má 3 režimy (virtuální-virtuální, virtuální-skutečný a virtuální-pevný).

Mlácení

Při použití stránkování a krádeže stránek může nastat problém zvaný „ mlácení “, při kterém počítač stráví nevhodně dlouhou dobu přenosem stránek do a ze záložního úložiště, a tím zpomalí užitečnou práci. Pracovní sada úkolu je minimální sada stránek, které by měly být v paměti, aby mohl dělat užitečný pokrok. Thrashing nastane, když není k dispozici dostatek paměti pro uložení pracovních sad všech aktivních programů. Přidání skutečné paměti je nejjednodušší odpověď, ale může pomoci vylepšit návrh aplikace, plánování a využití paměti. Dalším řešením je snížit počet aktivních úloh v systému. To snižuje nároky na skutečnou paměť výměnou celé pracovní sady jednoho nebo více procesů.

Segmentovaná virtuální paměť

Některé systémy, jako například Burroughs B5500, používají místo stránkování segmentaci a rozdělují virtuální adresní prostory na segmenty s proměnnou délkou. Virtuální adresa se zde skládá z čísla segmentu a ofsetu v rámci segmentu. Intel 80286 podporuje podobnou segmentační systém jako jedna z možností, ale to je jen zřídka. Segmentaci a stránkování lze použít společně rozdělením každého segmentu na stránky; systémy s touto strukturou paměti, jako jsou Multics a IBM System/38 , obvykle převládají nad stránkováním, segmentace zajišťující ochranu paměti.

V procesorech Intel 80386 a novějších IA-32 jsou segmenty umístěny v 32bitovém lineárním, stránkovaném adresním prostoru. Segmenty lze přesouvat dovnitř a ven z tohoto prostoru; stránky tam mohou „stránkovat“ do a z hlavní paměti, což poskytuje dvě úrovně virtuální paměti; málo operačních systémů, pokud tak činí, místo toho používají pouze stránkování. Dřívější virtualizační řešení x86 bez podpory hardwaru kombinovala stránkování a segmentaci, protože stránkování x86 nabízí pouze dvě domény ochrany, zatímco zásobník VMM, hostovaný operační systém nebo hostující aplikace potřebuje tři. Rozdíl mezi stránkovacími a segmentačními systémy není jen o dělení paměti; segmentace je viditelná pro uživatelské procesy, jako součást sémantiky paměťového modelu. Místo paměti, která vypadá jako jeden velký prostor, je tedy strukturována do více mezer.

Tento rozdíl má důležité důsledky; segment není stránka s proměnnou délkou nebo jednoduchý způsob prodloužení adresního prostoru. Segmentace, která může poskytnout jednoúrovňový paměťový model, ve kterém neexistuje rozdíl mezi pamětí procesu a souborovým systémem, se skládá pouze ze seznamu segmentů (souborů) mapovaných do potenciálního adresního prostoru procesu.

To není totéž jako mechanismy poskytované voláními, jako jsou mmap a Win32 MapViewOfFile, protože ukazatele mezi soubory nefungují při mapování souborů na semi-libovolná místa. V aplikaci Multics je soubor (nebo segment ze souboru s více segmenty) mapován do segmentu v adresním prostoru, takže soubory jsou vždy mapovány na hranici segmentu. Sekce propojení souboru může obsahovat ukazatele, u nichž pokus o načtení ukazatele do registru nebo jeho nepřímý odkaz způsobí past. Nevyřešený ukazatel obsahuje označení názvu segmentu, na který ukazatel odkazuje, a odsazení v rámci segmentu; obslužná rutina pro past mapuje segment do adresního prostoru, vloží číslo segmentu do ukazatele, změní pole tagu v ukazateli tak, aby již nezpůsobovalo pasti, a vrátí se ke kódu, kde došlo k zachycení, a znovu provede instrukce, která past způsobila. To zcela eliminuje potřebu linkeru a funguje, když různé procesy mapují stejný soubor na různá místa v jejich soukromých adresních prostorech.

Výměna adresního prostoru

Některé operační systémy umožňují výměnu celých adresních prostorů , navíc k jakýmkoli zařízením, která mají pro stránkování a segmentaci. Když k tomu dojde, OS zapíše tyto stránky a segmenty aktuálně ve skutečné paměti k výměně souborů. Při swapu operační systém čte data ze swapových souborů zpět, ale automaticky nečte zpět stránky, které byly stránkovány v době operace swap out.

IBM MVS , od OS/VS2 Release 2z/OS , umožňuje označení adresního prostoru jako nevyměnitelného; tím se nepřipnou žádné stránky do adresního prostoru. To lze provést po dobu trvání úlohy zadáním názvu vhodného hlavního programu do tabulky vlastností programu s příznakem, který nelze vyměnit. Kromě toho může privilegovaný kód dočasně zneplatnit adresní prostor pomocí instrukce SVS (SYSEVENT Supervisor Call ); určité změny ve vlastnostech adresního prostoru vyžadují, aby jej OS vyměnil a poté znovu zahodil pomocí SYSEVENT TRANSWAP.

Výměna nemusí nutně vyžadovat hardware pro správu paměti, pokud je například vyměněno více úloh do a ze stejné oblasti úložiště.

Viz také

Poznámky

Reference

Další čtení

  • Hennessy, John L .; a Patterson, David A .; Počítačová architektura, kvantitativní přístup ( ISBN  1-55860-724-2 )

externí odkazy