Virtuálna pamäť: Rozdiel medzi revíziami

Smazaný obsah Přidaný obsah
typografia
jazyk
Riadok 17:
Veľa aplikácií však požaduje prístup k informáciám (kód alebo dáta), ktoré nemôžu byť uložené vo fyzickej pamäti. Toto je častý jav pri operačných systémoch, ktoré dovoľujú súčasný viacnásobný beh procesov (multitasking). Existuje viacero spôsobov, ako zabezpečiť riešenie tohto problému:
 
1.# Jednou z možností je nechať rozhodnutie o druhu použitej pamäte pre konkrétnu informáciu a proces manipulácie s ňou priamo na samotnú aplikáciu. Nevýhodou tohto prístupu je že programátor aplikácie musí stráviť čas a úsilie na návrh, implementáciu a odstráňovanie chýb správy pamäte namiesto toho, aby sa sa zameriaval na vlastnú aplikáciu, čo veľmi znižuje efektivitu jeho práce. Taktiež môže dochádzať ku konfliktom programov, ktoré chcú používať fyzickú pamäť v rovnakom čase.
 
2.# Inou možnosťou je nepracovať s dátami priamo vo forme smerníkov, ale prideliť im istú formu handlerov a nechať operačný systém swapovať dáta združené s týmito handlermi medzi odkladacou oblasťou a fyzickou pamäťou. Problémom je, že tento postup komplikuje aplikačný kód a vyžaduje isté formy správania od aplikácie – dáta je potrebné uzamknúť do fyzickej pamäte, aby sa snimi mohlo pracovať, pričom sa obchádzajú jazykové jazykové knižnice, ktoré robia vlastné pridelovanie pamäte vo forme veľkých blokov, čo urýchluje beh systému. Príkladom takéhoto druhu uporiadania je 16 bitova verzia operačného systému Windowsu.
 
3.Modené# Moderné riešenie je v použití virtuálnej pamäte, v ktorej kombinácia špeciálneho harwaruhardvéru a operačného systému dovoľuje použiť oba druhy pamäte tak, že vytvárajú dojem väčšej fyzickej pamäte. Pre programy sa táto pamäť javí spločne ako jedna súčasť. Teoreticky poskytuje schopnosť napodobniť hlavnú pamäť ľubovolnej veľkosti, v praxi je hranica veľkosti limitovaná adresným priestorom (pre 32 bitové operačné systémy 4 GB, pre 64 bitové operačné systémy to môže byť oveľa viac).
 
Virtuálna pamäť robí prácu programátorov oveľa jednoduchšou. Nezáleži na tom koľko pamäte aplikácia potrebuje, bude sa správať ako keby mala prístup k hlavnej pamäti požadovanej veľkosti a jej dáta budú uložené do virtuálneho pamäťového priestoru. Programátor može kompletne ignorovať potrebu správy presunu dát medzi rôznymi druhmi pamäte. Ak však programátor chce zabrániť častému swapovaniu, mal by venovať pozornosť minimalizáciu počtu blokov, ku ktorým sa pristupuje často.
Riadok 32:
Virtuálna pamäť je zvyčajne implementovaná použitím stránok. Procesy sú umiestnené na disku. Keď chceme vykonávať proces, presunieme ho do pamäte, nemusíme ho však do pamäte presúvať celý, ale len jeho časť. Za tento proces je zodpovedný tzv. stránkovač - pager. Stránkovač predpokladá, ktoré stránky budú pre beh procesu potrebné a presunie ich do pamäti, čím sa zníži réžia potrebná na výmenu procesov v pamäti.
 
Ku správnej implementácii virtuálnej pamäte je potrebné zabezpečiť mapovanie (prepojenie) virtuálnej pamäte k fyzickej pamäti, a to tak, aby bolo možné rozpoznať, ktoré dáta patria do fyzickej pamäte, aby ich bolo možné rozlíšiť a swapovať. Operačný systém ukladá adresnú prekladaciu tabuľku, mapovanú z virtuálnych čísiel stránok na fyzickú, v dátovej štruktúre znamejznámej ako stránková tabuľka. Vo väčšine počítačov, sú tieto prekladacie tabuľky uložené vo fyzickej pamäti.
 
V stránke najnižšie poradie bitov virtuálnej adresy je zachované a užívané priamo ako najnižšie poradie bitov aktuálnej fyzickej adresy. NajvyžšieNajvyššie poradie bitov je považované za kľúče jednej alebo viacerých adries prekladacej tabuľky, ktoré poskytujú vysoké poradie bitov aktuálnej fyzickej adresy. Pre tento dôvod rozsah za sebou idúcich adries vo virtuálnom adresnom priestore, bude prekladaný v odpovedajúcom rozsahu súvisejúcichsúvisiacich fyzických adries. Pamäť zodpovedajúca takémuto rozsahu je nazývaná stránka. Veľkosť stránky je obyčajne v rozsahu 512b až 8192 b (v súčastnsti je často bpoužívaná veľkosť 4kB), aj keď na špeciálne účely môžu byť použité aj 4MB alebo i väčšie stránky.
 
Pre rozlíšnierozlíšenie, ktoré stránky sa nachádzajú v pamäti sa používa systém validačného bitu. Keď je nastavený do stavu platná, znamená to, že stránka je uložená v pamäti. V opačnom prípade je stránka buď neplatná (nepatrí do adresného priestoru procesu) alebo nie je v pamäti. Položka v tabuľke stránok pre stránku, ktorá je v pamäti je nastavená ako obyčajne, ale položka stránky, ktorá nie je v pamäti, je označená ako neplatná, alebo obsahuje adresu stránky na disku.
 
Ak sa proces nikdy neobráti na stránku, ktorá je označená ako neplatná, teda potrebuje len tie stránky, ktoré sú skutočne obsiahnuté v pamäti, prebehne tak, ako keby bol celá obsiahnutý v pamäti.
 
Ak sa proces obráti na stránku, ktorá nie je v pamäti a je označená ako neplatná, spôsbíspôsobí výpadogvýpadok stránky – page fault. Prerušenie spôsobí presunutie požadovanej stránky do pamäte v nasledovných krokoch:
# Skontroluje sa vnútorná tabuľka rep tento proces, aby sa zistilo, či odkaz na danú stránku bol platný.
# Ak odkaz bol neplatný, proces sa ukončí. Ak odkaz bol platný, ale stránka nie je v pamäti, začne sa jej presun.
Riadok 50:
Takýmto spôsobom je možné odštartovať i proces, ktorý nemá v pamäti žiadnu stránku. Vtedy sa jedná o čisté stránkovanie na žiadosť, stránka sa nikdy nepresúva do pamäte, pokiaľ nie je požadovaná.
 
HardwareovéHardvérové prostriedky, ktoré sú potrebné pre realizáciu stránkovania na žiadosť sú:
1.Tabuľka stránok: obsahuje bit pre označenie platnosti/neplatnosti stránky alebo dodatočné bity ore ochranu prístupu k stránke.
2.Periférna pamäť: uchováva stránky, ktoré nie sú momentálne v operačnej pamäti – swapovacie zariadenie alebo swapovací priestor.
 
Pri zvýšenom počte procesov, ktoré sú naraz spustené môže nastať situácia, keď niektorý z procesov požaduje zavedenie stránky z odkaladaciehoodkladacieho priestoru do pamäte, ale v pamäti nie je žiadny volný rámec. Táto situácia sa zvyčajne rieši metódou nahradzovania stránok. Myšlienkou je, že v prípade, že v pamäti nie je volný žiadny rámec, nájdeme rámec, ktorý sa momentálne nevyužíva, jeho obsah zapíšeme do odkladacieho priestoru a nahradíme ho načítanou stránkou. Týmto sa však zvyšuje počet prenosov stránok, čo znižuje efektivitu činnosti celého systému. Zlepšenie prináša využitie tzv. bitu modifikácie, ktorý sa nastavuje ak sa na stránku v pamäti zapisuje. V prípade, že nahradzujeme stránku, ktorá nemá nastavený bit modifikácie, nie je potrebné ju zapisovať na disk, čím sa ušetrí jeden diskový prenos. Je však potrebné riešiť problémy výberu algoritmov pre pridelovanieprideľovanie volnýchvoľných rámcov a nahradzovanie stránok.
 
Dôležitým problémom je volbavoľba algoritmu, ktorým sa bude vyberať stránka, ktorá sa má nahradiť. Existuje viacero algoritmov, ktoré je možné použiť: Algoritmus FIFO, Optimálny algoritmus, Algoritmus LRU.
 
Algoritmus FIFO pridelujeprideľuje každej stránke čas jej príchodu do pamäte (FIFO fronta v pamäti, nie je potrebný presný čas). Pre nahradenie sa vyberá stránka, ktorá je najdlhšie v pamäti. Algoritmus je jednoduchý, no nie veľmi dobrý, prtože rovnako ako môže nahradiť stránku, ktorá sa dlho nepoužíva, môže nahradiť aj často používanú stránku, čo spôsobí čoskoro ďalší výpadok stránky.
 
Optimálny algoritmus je algoritmus, ktorý nahradzuje stránku, ktorá nebude potrebná najdlhšiu dobu, čo zaručuje najmenší možný počet výpadkov stránok pri danom pevnom počte rámcov. Veľmi ťažko sa však realizuje, pretože vyžaduje znalosť budúcich odkazov na stránky.
 
Algoritmus LRU je aproximáciou optimálneho algoritmu, kde blízku budúcnosť nahradzujeme nedávnou minulosťou. Ku každej stránke je pridelený čas jej posledného použitia. Keď sa nahradzuje stránka, vyberá sa taká, ktorá najdlhšie nebola používaná. Používajú sa dve implementácie tohto algoritmu: počítadlami alebo zásobníkom. (možno doplniť podrobnosti ak bude treba)
 
Prideľovanie rámcov je taktika, ktorá určuje, koľko rámcov bude pridelených ktorému procesu. Obyčajne čím menej rámcov vlastní proces, tým viac výpadkov stránok vyvoláva, čo spomaľuje chod systému. Minimálny počet rámcov, ktoré majú byť pridelené procesu, vyplýva z maximálneho počtu rámcov, na ktoré sa je možné pri vyvolaní jednej inštrukcie odvolať. Ako algoritmy sa používajú algoritmus spravodlivého rozdelenia medzi procesy a algoritmus proporcionálneho pridelovaniaprideľovania.
 
V prípade spravodlivého rozdelovania rámcov medzi procesy sa počet pre m rámcov a n procesov určuje zaokrúhlením výrazu m/n. Toto rozdelenie neberie do úvahy veľkosť procesu, čo možemôže viestviesť ku plytvaniu pri malých procesoch a nedostatku pri veľkých procesoch.
 
Pri proporcionálnom prideľovaní každý proces dostáva rámce podľa svojej veľkosti. Ak celkový počet rámcov je m, požiadavky všetkých procesov S, požiadavky procesu i na pamäť sú si pridelíme ai rámcov procesu pi, kde ai je približne: ai = (si/S) . m.
 
Dôležitým faktorom je tiež rozhodnutie, či pri nahradzovaní stránky sa táto stránka vyberá lokálne aloboalebo globálenglobálne, to znamená, či sa vyberá len spomedzi rámcov pridelených procesu alebo spomedzi všetkých rámcov v pamäti. Od toho aj závisí, čisači sa počet rámcov pridelených procesu môže dynamicky meniť.
 
== Segmentácia na žiadosť ==
V prípade chýbajúcej hardware-ovej podpory umožňujúcej efektívny systém stránkovania na žiadosť, používa sa virtualizačná technika segmentácie na žiadosť. Program sa v tomto prípade zavádza do pamäte po segmentoch, ktoré sú predmetom výmeny. Pri odkaze na segment, ktorý nie je v pamäti, sa vygeneruje prerušenie pre výpadok segmentu. Správa pamäte nájde pre požadovaný segment vhodný úsek v pamäti a presunie ho tam. Využíva pritom striasanie. Segmentácia na žiadosť má silnejšie väzby na štruktúru programu a minimalizuje vnútornú fragmentáciu. Nevýhodou je nebezpečenstvo vonkajšej fragmentácie.
 
Je ale tiež možné, virtuálna stránka bola označená za nedostupnú z dôvodu, že stŕankastránka nebola pridelená. V takýchto prípadoch je stránka fyzickej pamäti alokovaná a naplnená nulami, tabulkatabuľka stránok je modifikovaná na jej popis, a program je reštartovaný ako v predošlom prípade.
 
== Implementácia VM v OS Linux ==
Riadok 82:
Mapovanie virtuálnych adries na fyzické adresy sa vykonáva prostredníctvom linuxového kernelu. Pri vytvorení nového procesu (pomocou fork()), kernel vytvára novú sadu tabuliek stránok (page tables) pre vytvorený proces. Referenčné adresy pre proces sú virtuálnymi adresami. Nie sú nutne namapované na zhodné fyzické adresy v pamäti. Virtuálna adresa je odovzdaná správe pamäte (MMU), ktorá ju skonvertuje na fyzickú adresu založenú na tabuľkách vytvorených kernelom. Teda, dva rôzne procesy sa môžu odkazovať na rovnakú adresu (napr. 0x08329), ale v skutočnosti sa odkazujú na dve odlišné adresy v závislosti od tabuliek stránok.
 
Linuxový kernel rozdeľuje 4GB virtuálneho adresného priestoru procesu na dve časti – 3GB a 1GB. Nižšie 3GB virtuálneho adresného priestoru procesu sú pristúpneprístupné ako užívateľský priestor (user-space), vyšší 1GB je rezervovaný pre virtuálne adresovanie kernelom a užívateľský proces tam zvyčajne nepristupuje. Virtuálna oblasť kernelu (3-4GB adresného priestoru) sú mapované na 1GB fyzickej pamäte. Zvyšné 3GB adresovateľnej fyzickej pamäte sú dostupné pre procesy.
 
[[Kategória:Informatika]]